From 818618542dd5cea427226344fe0bac0742398201 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 6 Nov 2026 08:43:41 +0000 Subject: [PATCH 01/25] refactor(autofix): implement extensible tool adapters and default toolchains --- autofix/README.md | 81 +++- dist/autofix.mjs | 67 +-- dist/resolve-environment.mjs | 56 +-- .../adapters/javascript/script-adapter.ts | 135 ++++++ src/autofix/adapters/javascript/tools.ts | 420 ++++++++++++++++++ src/autofix/adapters/python/ruff.ts | 84 ++++ src/autofix/engine.ts | 65 +++ src/autofix/index.ts | 91 ++-- src/autofix/planner.ts | 218 +++++++++ src/autofix/providers/javascript.ts | 45 ++ src/autofix/providers/python.ts | 19 + src/autofix/registry.ts | 49 ++ src/autofix/types.ts | 58 +++ src/python-env.ts | 286 ------------ tests/autofix-architecture.test.ts | 420 ++++++++++++++++++ tests/autofix.test.ts | 88 ++-- tests/python-env.test.ts | 19 - 17 files changed, 1739 insertions(+), 462 deletions(-) create mode 100644 src/autofix/adapters/javascript/script-adapter.ts create mode 100644 src/autofix/adapters/javascript/tools.ts create mode 100644 src/autofix/adapters/python/ruff.ts create mode 100644 src/autofix/engine.ts create mode 100644 src/autofix/planner.ts create mode 100644 src/autofix/providers/javascript.ts create mode 100644 src/autofix/providers/python.ts create mode 100644 src/autofix/registry.ts create mode 100644 src/autofix/types.ts create mode 100644 tests/autofix-architecture.test.ts diff --git a/autofix/README.md b/autofix/README.md index da18b924..a4e26ba6 100644 --- a/autofix/README.md +++ b/autofix/README.md @@ -4,18 +4,89 @@ Automatically format and fix code. ## Action Purpose -The `autofix` composite action automatically formats and fixes code. +The `autofix` composite action automatically formats and fixes code across multiple languages using a modular, capability-based architecture with default toolchains, hybrid detection, and extensible tool adapters. + +## Core Architectural Principles + +1. **Default Python Toolchain (Ruff):** Python uses Ruff as the default linting and formatting toolchain. Ruff does not require dependency detection, script detection, or project-specific Ruff declarations in `pyproject.toml`, requirements files, or lockfiles. When Python source files (`.py`/`.pyi`) are detected, Ruff is automatically executed via official `astral-sh/ruff-action` provisioning. +2. **JavaScript/TypeScript Hybrid Detection:** Combines explicit project scripts, project-native toolchains (Vite+), and tool capability detection (ESLint, Prettier, Biome, Oxlint, Oxfmt). +3. **Explicit Project Intent Priority:** Explicit project scripts always take precedence over inferred tool adapters and are never silently overridden. +4. **Deterministic Conflict Resolution:** Prevents overlapping formatters and linters from running over the same files without an explicit selection policy. +5. **Language-Agnostic Core Orchestrator:** Tool detection, capability planning, and task execution are decoupled from language-specific environment setup. +6. **Extensible Static Registry:** New tools and languages can be registered without modifying the core orchestrator. ## Features and Supported Behavior - **Automatic Environment Detection:** Automatically detects Node.js, Bun, and Python environments and package managers (`npm`, `pnpm`, `bun`, `uv`, `pip`). -- **Separation of Setup and Installation:** Official setup actions (`actions/setup-node`, `pnpm/setup`, `oven-sh/setup-bun`, `actions/setup-python`, `astral-sh/setup-uv`, `astral-sh/ruff-action`) provision runtimes, CLI tools, and tool caches. Dependency installations (`npm install`, `pnpm install --no-frozen-lockfile`, `bun install`, `uv sync`, `pip install`) and autofix executions are performed reliably in TypeScript. -- **Dependency Synchronization & Early Skip:** Inspects project scripts before installing dependencies. If no matching autofix script exists in `package.json`, JavaScript dependency installation is cleanly skipped without modifying lockfiles or running package manager commands. -- **JavaScript/TypeScript Project Scripts:** Selects and executes repository-configured scripts (`fix`, `format`, `fmt`, `lint`, `check`) from `package.json`. -- **Python Formatting and Linting:** Provisions Ruff and executes `ruff check --fix .` and `ruff format .` sequentially whenever Python source code (`.py`/`.pyi`) is detected. +- **Separation of Setup and Installation:** Official setup actions (`actions/setup-node`, `pnpm/setup`, `oven-sh/setup-bun`, `actions/setup-python`, `astral-sh/setup-uv`, `astral-sh/ruff-action`) provision runtimes, CLI tools, and caches. Dependency installations and autofix executions are performed reliably in TypeScript. +- **Python Formatting and Linting:** Provisions Ruff and executes `ruff check --fix .` (lint capability) and `ruff format .` (format capability) sequentially whenever Python source code is detected. No duplicate installation through `pip` or `uv` is performed. +- **JavaScript/TypeScript Hybrid Detection:** + - **Explicit Script Priority:** Recognizes standard script conventions: + - Combined autofix: `fix`, `check:fix` + - Format write: `format`, `fmt`, `format:write` + - Format check: `format:check`, `fmt:check` + - Lint fix: `lint:fix`, `lint:write` + - Lint check: `lint`, `lint:check` + - **Excluded Scripts:** Generic validation scripts such as `check`, `test`, and `typecheck` are strictly excluded from execution as autofix commands in fix mode. + - **Tool Adapters:** When explicit scripts are absent or specialized, detects configured tools: + - **Vite+:** Project-native toolchain (`vp check --fix`). + - **Biome:** Fast unified formatter and linter (`biome check --write .`). + - **Prettier:** Code formatter (`prettier --write .`). + - **ESLint:** Pluggable JavaScript/TypeScript linter (`eslint --fix .`). + - **Oxlint:** High-performance JavaScript linter (`oxlint --fix .`). + - **Oxfmt:** High-performance code formatter (`oxfmt --write .`). + - **Intentional Configuration Requirement:** Dependency presence alone is not sufficient to run a tool; active configuration files (e.g., `biome.json`, `.prettierrc`, `eslint.config.js`) or manifest configuration sections must be detected. +- **Explainable Execution Plan:** Logs a readable execution summary detailing detected environments, selected tools, skipped tools with reasons (e.g. overlapping capabilities), and the planned tasks. - **Independent Execution:** JavaScript and Python workflows run independently within the same action step, aggregating diagnostics and failures. - **autofix.ci Integration:** Automatically invokes `autofix-ci/action` when running inside the `autofix.ci` workflow context. +## Execution Plan Example + +During action execution, the planner emits an explainable log: + +```text +Detected environments: + Python: true + JavaScript: true + +Python toolchain: + Ruff: default tool + +JavaScript toolchain: + ESLint: selected + Prettier: selected + Biome: skipped (overlapping capabilities already covered by higher priority tool) + +Execution plan: + 1. Ruff: lint autofix + 2. Ruff: format + 3. Prettier: format + 4. ESLint: lint autofix + +Skipped: + - Biome: overlapping capabilities already covered by higher priority tool +``` + +## Adding New Tool Adapters & Languages + +### Adding a Tool Adapter + +To add a tool adapter within an existing language provider: + +1. Implement the `ToolAdapter` interface (`src/autofix/types.ts`) defining `id`, `name`, `capabilities`, `detect(context)`, and `plan(context, mode)`. +2. Register the adapter in the relevant `LanguageProvider` (e.g., `src/autofix/providers/javascript.ts`). +3. Add unit tests verifying detection, planning, and conflict resolution. + +### Adding a Language Provider + +To add support for a new language (e.g., Go, Rust): + +1. Implement the `LanguageProvider` interface (`src/autofix/types.ts`) defining `id`, `name`, `detect(context)`, and `getAdapters(context)`. +2. Register the provider in `createDefaultRegistry()` (`src/autofix/registry.ts`). +3. Add provider and adapter tests. + +The core orchestrator remains completely untouched. + ## Usage Example ```yaml diff --git a/dist/autofix.mjs b/dist/autofix.mjs index 183f27c3..22309d97 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -1,8 +1,8 @@ import{createRequire as e}from"node:module";import*as t from"os";import n,{EOL as r}from"os";import*as i from"fs";import{constants as a,promises as o}from"fs";import*as s from"path";import*as c from"events";import{fileURLToPath as l}from"node:url";import*as u from"child_process";import{setTimeout as d}from"timers";import f from"node:fs";import p from"node:path";var m=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t,t.exports),e=null),t.exports),h=/* @__PURE__ */ e(import.meta.url);function g(e){return e==null?``:typeof e==`string`||e instanceof String?e:JSON.stringify(e)}function _(e){return Object.keys(e).length?{title:e.title,file:e.file,line:e.startLine,endLine:e.endLine,col:e.startColumn,endColumn:e.endColumn}:{}}function v(e,n,r){let i=new y(e,n,r);process.stdout.write(i.toString()+t.EOL)}var y=class{constructor(e,t,n){e||=`missing.command`,this.command=e,this.properties=t,this.message=n}toString(){let e=`::`+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=` `;let t=!0;for(let n in this.properties)if(this.properties.hasOwnProperty(n)){let r=this.properties[n];r&&(t?t=!1:e+=`,`,e+=`${n}=${x(r)}`)}}return e+=`::${b(this.message)}`,e}};function b(e){return g(e).replace(/%/g,`%25`).replace(/\r/g,`%0D`).replace(/\n/g,`%0A`)}function x(e){return g(e).replace(/%/g,`%25`).replace(/\r/g,`%0D`).replace(/\n/g,`%0A`).replace(/:/g,`%3A`).replace(/,/g,`%2C`)}var S=/* @__PURE__ */ m((e=>{h(`net`),h(`tls`);var t=h(`http`);h(`https`);var n=h(`events`);h(`assert`);var r=h(`util`);function i(e){var n=this;n.options=e||{},n.proxyOptions=n.options.proxy||{},n.maxSockets=n.options.maxSockets||t.Agent.defaultMaxSockets,n.requests=[],n.sockets=[],n.on(`free`,function(e,t,r,i){for(var o=a(t,r,i),s=0,c=n.requests.length;s=this.maxSockets?i.requests.push(s):i.createSocket(s,function(t){t.on(`free`,n),t.on(`close`,r),t.on(`agentRemove`,r),e.onSocket(t);function n(){i.emit(`free`,t,s)}function r(e){i.removeSocket(t),t.removeListener(`free`,n),t.removeListener(`close`,r),t.removeListener(`agentRemove`,r)}})},i.prototype.createSocket=function(e,t){var n=this,r={};n.sockets.push(r);var i=o({},n.proxyOptions,{method:`CONNECT`,path:e.host+`:`+e.port,agent:!1,headers:{host:e.host+`:`+e.port}});e.localAddress&&(i.localAddress=e.localAddress),i.proxyAuth&&(i.headers=i.headers||{},i.headers[`Proxy-Authorization`]=`Basic `+new Buffer(i.proxyAuth).toString(`base64`)),s(`making CONNECT request`);var a=n.request(i);a.useChunkedEncodingByDefault=!1,a.once(`response`,c),a.once(`upgrade`,l),a.once(`connect`,u),a.once(`error`,d),a.end();function c(e){e.upgrade=!0}function l(e,t,n){process.nextTick(function(){u(e,t,n)})}function u(i,o,c){if(a.removeAllListeners(),o.removeAllListeners(),i.statusCode!==200){s(`tunneling socket could not be established, statusCode=%d`,i.statusCode),o.destroy();var l=/* @__PURE__ */ Error(`tunneling socket could not be established, statusCode=`+i.statusCode);l.code=`ECONNRESET`,e.request.emit(`error`,l),n.removeSocket(r)}else if(c.length>0){s(`got illegal response body from proxy`),o.destroy();var l=/* @__PURE__ */ Error(`got illegal response body from proxy`);l.code=`ECONNRESET`,e.request.emit(`error`,l),n.removeSocket(r)}else return s(`tunneling connection has established`),n.sockets[n.sockets.indexOf(r)]=o,t(o)}function d(t){a.removeAllListeners(),s(`tunneling socket could not be established, cause=%s -`,t.message,t.stack);var i=/* @__PURE__ */ Error(`tunneling socket could not be established, cause=`+t.message);i.code=`ECONNRESET`,e.request.emit(`error`,i),n.removeSocket(r)}},i.prototype.removeSocket=function(e){var t=this.sockets.indexOf(e);if(t!==-1){this.sockets.splice(t,1);var n=this.requests.shift();n&&this.createSocket(n,function(e){n.request.onSocket(e)})}};function a(e,t,n){return typeof e==`string`?{host:e,port:t,localAddress:n}:e}function o(e){for(var t=1,n=arguments.length;t{t.exports=S()})),w=/* @__PURE__ */ m(((e,t)=>{t.exports={kClose:Symbol(`close`),kDestroy:Symbol(`destroy`),kDispatch:Symbol(`dispatch`),kUrl:Symbol(`url`),kWriting:Symbol(`writing`),kResuming:Symbol(`resuming`),kQueue:Symbol(`queue`),kConnect:Symbol(`connect`),kConnecting:Symbol(`connecting`),kKeepAliveDefaultTimeout:Symbol(`default keep alive timeout`),kKeepAliveMaxTimeout:Symbol(`max keep alive timeout`),kKeepAliveTimeoutThreshold:Symbol(`keep alive timeout threshold`),kKeepAliveTimeoutValue:Symbol(`keep alive timeout`),kKeepAlive:Symbol(`keep alive`),kHeadersTimeout:Symbol(`headers timeout`),kBodyTimeout:Symbol(`body timeout`),kServerName:Symbol(`server name`),kLocalAddress:Symbol(`local address`),kHost:Symbol(`host`),kNoRef:Symbol(`no ref`),kBodyUsed:Symbol(`used`),kBody:Symbol(`abstracted request body`),kRunning:Symbol(`running`),kBlocking:Symbol(`blocking`),kPending:Symbol(`pending`),kSize:Symbol(`size`),kBusy:Symbol(`busy`),kQueued:Symbol(`queued`),kFree:Symbol(`free`),kConnected:Symbol(`connected`),kClosed:Symbol(`closed`),kNeedDrain:Symbol(`need drain`),kReset:Symbol(`reset`),kDestroyed:Symbol.for(`nodejs.stream.destroyed`),kResume:Symbol(`resume`),kOnError:Symbol(`on error`),kMaxHeadersSize:Symbol(`max headers size`),kRunningIdx:Symbol(`running index`),kPendingIdx:Symbol(`pending index`),kError:Symbol(`error`),kClients:Symbol(`clients`),kClient:Symbol(`client`),kParser:Symbol(`parser`),kOnDestroyed:Symbol(`destroy callbacks`),kPipelining:Symbol(`pipelining`),kSocket:Symbol(`socket`),kHostHeader:Symbol(`host header`),kConnector:Symbol(`connector`),kStrictContentLength:Symbol(`strict content length`),kMaxRedirections:Symbol(`maxRedirections`),kMaxRequests:Symbol(`maxRequestsPerClient`),kProxy:Symbol(`proxy agent options`),kCounter:Symbol(`socket request counter`),kInterceptors:Symbol(`dispatch interceptors`),kMaxResponseSize:Symbol(`max response size`),kHTTP2Session:Symbol(`http2Session`),kHTTP2SessionState:Symbol(`http2Session state`),kRetryHandlerDefaultRetry:Symbol(`retry agent default retry`),kConstruct:Symbol(`constructable`),kListeners:Symbol(`listeners`),kHTTPContext:Symbol(`http context`),kMaxConcurrentStreams:Symbol(`max concurrent streams`),kNoProxyAgent:Symbol(`no proxy agent`),kHttpProxyAgent:Symbol(`http proxy agent`),kHttpsProxyAgent:Symbol(`https proxy agent`)}})),T=/* @__PURE__ */ m(((e,t)=>{let n=Symbol.for(`undici.error.UND_ERR`);var r=class extends Error{constructor(e){super(e),this.name=`UndiciError`,this.code=`UND_ERR`}static[Symbol.hasInstance](e){return e&&e[n]===!0}[n]=!0};let i=Symbol.for(`undici.error.UND_ERR_CONNECT_TIMEOUT`);var a=class extends r{constructor(e){super(e),this.name=`ConnectTimeoutError`,this.message=e||`Connect Timeout Error`,this.code=`UND_ERR_CONNECT_TIMEOUT`}static[Symbol.hasInstance](e){return e&&e[i]===!0}[i]=!0};let o=Symbol.for(`undici.error.UND_ERR_HEADERS_TIMEOUT`);var s=class extends r{constructor(e){super(e),this.name=`HeadersTimeoutError`,this.message=e||`Headers Timeout Error`,this.code=`UND_ERR_HEADERS_TIMEOUT`}static[Symbol.hasInstance](e){return e&&e[o]===!0}[o]=!0};let c=Symbol.for(`undici.error.UND_ERR_HEADERS_OVERFLOW`);var l=class extends r{constructor(e){super(e),this.name=`HeadersOverflowError`,this.message=e||`Headers Overflow Error`,this.code=`UND_ERR_HEADERS_OVERFLOW`}static[Symbol.hasInstance](e){return e&&e[c]===!0}[c]=!0};let u=Symbol.for(`undici.error.UND_ERR_BODY_TIMEOUT`);var d=class extends r{constructor(e){super(e),this.name=`BodyTimeoutError`,this.message=e||`Body Timeout Error`,this.code=`UND_ERR_BODY_TIMEOUT`}static[Symbol.hasInstance](e){return e&&e[u]===!0}[u]=!0};let f=Symbol.for(`undici.error.UND_ERR_RESPONSE_STATUS_CODE`);var p=class extends r{constructor(e,t,n,r){super(e),this.name=`ResponseStatusCodeError`,this.message=e||`Response Status Code Error`,this.code=`UND_ERR_RESPONSE_STATUS_CODE`,this.body=r,this.status=t,this.statusCode=t,this.headers=n}static[Symbol.hasInstance](e){return e&&e[f]===!0}[f]=!0};let m=Symbol.for(`undici.error.UND_ERR_INVALID_ARG`);var h=class extends r{constructor(e){super(e),this.name=`InvalidArgumentError`,this.message=e||`Invalid Argument Error`,this.code=`UND_ERR_INVALID_ARG`}static[Symbol.hasInstance](e){return e&&e[m]===!0}[m]=!0};let g=Symbol.for(`undici.error.UND_ERR_INVALID_RETURN_VALUE`);var _=class extends r{constructor(e){super(e),this.name=`InvalidReturnValueError`,this.message=e||`Invalid Return Value Error`,this.code=`UND_ERR_INVALID_RETURN_VALUE`}static[Symbol.hasInstance](e){return e&&e[g]===!0}[g]=!0};let v=Symbol.for(`undici.error.UND_ERR_ABORT`);var y=class extends r{constructor(e){super(e),this.name=`AbortError`,this.message=e||`The operation was aborted`,this.code=`UND_ERR_ABORT`}static[Symbol.hasInstance](e){return e&&e[v]===!0}[v]=!0};let b=Symbol.for(`undici.error.UND_ERR_ABORTED`);var x=class extends y{constructor(e){super(e),this.name=`AbortError`,this.message=e||`Request aborted`,this.code=`UND_ERR_ABORTED`}static[Symbol.hasInstance](e){return e&&e[b]===!0}[b]=!0};let S=Symbol.for(`undici.error.UND_ERR_INFO`);var C=class extends r{constructor(e){super(e),this.name=`InformationalError`,this.message=e||`Request information`,this.code=`UND_ERR_INFO`}static[Symbol.hasInstance](e){return e&&e[S]===!0}[S]=!0};let w=Symbol.for(`undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH`);var T=class extends r{constructor(e){super(e),this.name=`RequestContentLengthMismatchError`,this.message=e||`Request body length does not match content-length header`,this.code=`UND_ERR_REQ_CONTENT_LENGTH_MISMATCH`}static[Symbol.hasInstance](e){return e&&e[w]===!0}[w]=!0};let E=Symbol.for(`undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH`);var D=class extends r{constructor(e){super(e),this.name=`ResponseContentLengthMismatchError`,this.message=e||`Response body length does not match content-length header`,this.code=`UND_ERR_RES_CONTENT_LENGTH_MISMATCH`}static[Symbol.hasInstance](e){return e&&e[E]===!0}[E]=!0};let O=Symbol.for(`undici.error.UND_ERR_DESTROYED`);var k=class extends r{constructor(e){super(e),this.name=`ClientDestroyedError`,this.message=e||`The client is destroyed`,this.code=`UND_ERR_DESTROYED`}static[Symbol.hasInstance](e){return e&&e[O]===!0}[O]=!0};let A=Symbol.for(`undici.error.UND_ERR_CLOSED`);var j=class extends r{constructor(e){super(e),this.name=`ClientClosedError`,this.message=e||`The client is closed`,this.code=`UND_ERR_CLOSED`}static[Symbol.hasInstance](e){return e&&e[A]===!0}[A]=!0};let M=Symbol.for(`undici.error.UND_ERR_SOCKET`);var N=class extends r{constructor(e,t){super(e),this.name=`SocketError`,this.message=e||`Socket error`,this.code=`UND_ERR_SOCKET`,this.socket=t}static[Symbol.hasInstance](e){return e&&e[M]===!0}[M]=!0};let P=Symbol.for(`undici.error.UND_ERR_NOT_SUPPORTED`);var F=class extends r{constructor(e){super(e),this.name=`NotSupportedError`,this.message=e||`Not supported error`,this.code=`UND_ERR_NOT_SUPPORTED`}static[Symbol.hasInstance](e){return e&&e[P]===!0}[P]=!0};let I=Symbol.for(`undici.error.UND_ERR_BPL_MISSING_UPSTREAM`);var L=class extends r{constructor(e){super(e),this.name=`MissingUpstreamError`,this.message=e||`No upstream has been added to the BalancedPool`,this.code=`UND_ERR_BPL_MISSING_UPSTREAM`}static[Symbol.hasInstance](e){return e&&e[I]===!0}[I]=!0};let ee=Symbol.for(`undici.error.UND_ERR_HTTP_PARSER`);var te=class extends Error{constructor(e,t,n){super(e),this.name=`HTTPParserError`,this.code=t?`HPE_${t}`:void 0,this.data=n?n.toString():void 0}static[Symbol.hasInstance](e){return e&&e[ee]===!0}[ee]=!0};let R=Symbol.for(`undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE`);var z=class extends r{constructor(e){super(e),this.name=`ResponseExceededMaxSizeError`,this.message=e||`Response content exceeded max size`,this.code=`UND_ERR_RES_EXCEEDED_MAX_SIZE`}static[Symbol.hasInstance](e){return e&&e[R]===!0}[R]=!0};let B=Symbol.for(`undici.error.UND_ERR_REQ_RETRY`);var V=class extends r{constructor(e,t,{headers:n,data:r}){super(e),this.name=`RequestRetryError`,this.message=e||`Request retry error`,this.code=`UND_ERR_REQ_RETRY`,this.statusCode=t,this.data=r,this.headers=n}static[Symbol.hasInstance](e){return e&&e[B]===!0}[B]=!0};let H=Symbol.for(`undici.error.UND_ERR_RESPONSE`);var ne=class extends r{constructor(e,t,{headers:n,data:r}){super(e),this.name=`ResponseError`,this.message=e||`Response error`,this.code=`UND_ERR_RESPONSE`,this.statusCode=t,this.data=r,this.headers=n}static[Symbol.hasInstance](e){return e&&e[H]===!0}[H]=!0};let re=Symbol.for(`undici.error.UND_ERR_PRX_TLS`);var U=class extends r{constructor(e,t,n){super(t,{cause:e,...n??{}}),this.name=`SecureProxyConnectionError`,this.message=t||`Secure Proxy Connection failed`,this.code=`UND_ERR_PRX_TLS`,this.cause=e}static[Symbol.hasInstance](e){return e&&e[re]===!0}[re]=!0};let ie=Symbol.for(`undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED`);t.exports={AbortError:y,HTTPParserError:te,UndiciError:r,HeadersTimeoutError:s,HeadersOverflowError:l,BodyTimeoutError:d,RequestContentLengthMismatchError:T,ConnectTimeoutError:a,ResponseStatusCodeError:p,InvalidArgumentError:h,InvalidReturnValueError:_,RequestAbortedError:x,ClientDestroyedError:k,ClientClosedError:j,InformationalError:C,SocketError:N,NotSupportedError:F,ResponseContentLengthMismatchError:D,BalancedPoolMissingUpstreamError:L,ResponseExceededMaxSizeError:z,RequestRetryError:V,ResponseError:ne,SecureProxyConnectionError:U,MessageSizeExceededError:class extends r{constructor(e){super(e),this.name=`MessageSizeExceededError`,this.message=e||`Max decompressed message size exceeded`,this.code=`UND_ERR_WS_MESSAGE_SIZE_EXCEEDED`}static[Symbol.hasInstance](e){return e&&e[ie]===!0}get[ie](){return!0}}}})),E=/* @__PURE__ */ m(((e,t)=>{let n={},r=/* @__PURE__ */ `Accept.Accept-Encoding.Accept-Language.Accept-Ranges.Access-Control-Allow-Credentials.Access-Control-Allow-Headers.Access-Control-Allow-Methods.Access-Control-Allow-Origin.Access-Control-Expose-Headers.Access-Control-Max-Age.Access-Control-Request-Headers.Access-Control-Request-Method.Age.Allow.Alt-Svc.Alt-Used.Authorization.Cache-Control.Clear-Site-Data.Connection.Content-Disposition.Content-Encoding.Content-Language.Content-Length.Content-Location.Content-Range.Content-Security-Policy.Content-Security-Policy-Report-Only.Content-Type.Cookie.Cross-Origin-Embedder-Policy.Cross-Origin-Opener-Policy.Cross-Origin-Resource-Policy.Date.Device-Memory.Downlink.ECT.ETag.Expect.Expect-CT.Expires.Forwarded.From.Host.If-Match.If-Modified-Since.If-None-Match.If-Range.If-Unmodified-Since.Keep-Alive.Last-Modified.Link.Location.Max-Forwards.Origin.Permissions-Policy.Pragma.Proxy-Authenticate.Proxy-Authorization.RTT.Range.Referer.Referrer-Policy.Refresh.Retry-After.Sec-WebSocket-Accept.Sec-WebSocket-Extensions.Sec-WebSocket-Key.Sec-WebSocket-Protocol.Sec-WebSocket-Version.Server.Server-Timing.Service-Worker-Allowed.Service-Worker-Navigation-Preload.Set-Cookie.SourceMap.Strict-Transport-Security.Supports-Loading-Mode.TE.Timing-Allow-Origin.Trailer.Transfer-Encoding.Upgrade.Upgrade-Insecure-Requests.User-Agent.Vary.Via.WWW-Authenticate.X-Content-Type-Options.X-DNS-Prefetch-Control.X-Frame-Options.X-Permitted-Cross-Domain-Policies.X-Powered-By.X-Requested-With.X-XSS-Protection`.split(`.`);for(let e=0;e{let{wellknownHeaderNames:n,headerNameLowerCasedRecord:r}=E();var i=class e{value=null;left=null;middle=null;right=null;code;constructor(t,n,r){if(r===void 0||r>=t.length)throw TypeError(`Unreachable`);if((this.code=t.charCodeAt(r))>127)throw TypeError(`key must be ascii string`);t.length===++r?this.value=n:this.middle=new e(t,n,r)}add(t,n){let r=t.length;if(r===0)throw TypeError(`Unreachable`);let i=0,a=this;for(;;){let o=t.charCodeAt(i);if(o>127)throw TypeError(`key must be ascii string`);if(a.code===o){if(r===++i){a.value=n;break}if(a.middle!==null)a=a.middle;else{a.middle=new e(t,n,i);break}}else if(a.code=65&&(i|=32);r!==null;){if(i===r.code){if(t===++n)return r;r=r.middle;break}r=r.code{let n=h(`node:assert`),{kDestroyed:r,kBodyUsed:i,kListeners:a,kBody:o}=w(),{IncomingMessage:s}=h(`node:http`),c=h(`node:stream`),l=h(`node:net`),{Blob:u}=h(`node:buffer`),d=h(`node:util`),{stringify:f}=h(`node:querystring`),{EventEmitter:p}=h(`node:events`),{InvalidArgumentError:m}=T(),{headerNameLowerCasedRecord:g}=E(),{tree:_}=D(),[v,y]=process.versions.node.split(`.`).map(e=>Number(e));var b=class{constructor(e){this[o]=e,this[i]=!1}async*[Symbol.asyncIterator](){n(!this[i],`disturbed`),this[i]=!0,yield*this[o]}};function x(e){return C(e)?(te(e)===0&&e.on(`data`,function(){n(!1)}),typeof e.readableDidRead!=`boolean`&&(e[i]=!1,p.prototype.on.call(e,`data`,function(){this[i]=!0})),e):e&&typeof e.pipeTo==`function`||e&&typeof e!=`string`&&!ArrayBuffer.isView(e)&&ee(e)?new b(e):e}function S(){}function C(e){return e&&typeof e==`object`&&typeof e.pipe==`function`&&typeof e.on==`function`}function O(e){if(e===null)return!1;if(e instanceof u)return!0;if(typeof e!=`object`)return!1;{let t=e[Symbol.toStringTag];return(t===`Blob`||t===`File`)&&(`stream`in e&&typeof e.stream==`function`||`arrayBuffer`in e&&typeof e.arrayBuffer==`function`)}}function k(e,t){if(e.includes(`?`)||e.includes(`#`))throw Error(`Query params cannot be passed when url already contains "?" or "#".`);let n=f(t);return n&&(e+=`?`+n),e}function A(e){let t=parseInt(e,10);return t===Number(e)&&t>=0&&t<=65535}function j(e){return e!=null&&e[0]===`h`&&e[1]===`t`&&e[2]===`t`&&e[3]===`p`&&(e[4]===`:`||e[4]===`s`&&e[5]===`:`)}function M(e){if(typeof e==`string`){if(e=new URL(e),!j(e.origin||e.protocol))throw new m("Invalid URL protocol: the URL must start with `http:` or `https:`.");return e}if(!e||typeof e!=`object`)throw new m(`Invalid URL: The URL argument must be a non-null object.`);if(!(e instanceof URL)){if(e.port!=null&&e.port!==``&&A(e.port)===!1)throw new m(`Invalid URL: port must be a valid integer or a string representation of an integer.`);if(e.path!=null&&typeof e.path!=`string`)throw new m(`Invalid URL path: the path must be a string or null/undefined.`);if(e.pathname!=null&&typeof e.pathname!=`string`)throw new m(`Invalid URL pathname: the pathname must be a string or null/undefined.`);if(e.hostname!=null&&typeof e.hostname!=`string`)throw new m(`Invalid URL hostname: the hostname must be a string or null/undefined.`);if(e.origin!=null&&typeof e.origin!=`string`)throw new m(`Invalid URL origin: the origin must be a string or null/undefined.`);if(!j(e.origin||e.protocol))throw new m("Invalid URL protocol: the URL must start with `http:` or `https:`.");let t=e.port==null?e.protocol===`https:`?443:80:e.port,n=e.origin==null?`${e.protocol||``}//${e.hostname||``}:${t}`:e.origin,r=e.path==null?`${e.pathname||``}${e.search||``}`:e.path;return n[n.length-1]===`/`&&(n=n.slice(0,n.length-1)),r&&r[0]!==`/`&&(r=`/${r}`),new URL(`${n}${r}`)}if(!j(e.origin||e.protocol))throw new m("Invalid URL protocol: the URL must start with `http:` or `https:`.");return e}function N(e){if(e=M(e),e.pathname!==`/`||e.search||e.hash)throw new m(`invalid url`);return e}function P(e){if(e[0]===`[`){let t=e.indexOf(`]`);return n(t!==-1),e.substring(1,t)}let t=e.indexOf(`:`);return t===-1?e:e.substring(0,t)}function F(e){if(!e)return null;n(typeof e==`string`);let t=P(e);return l.isIP(t)?``:t}function I(e){return JSON.parse(JSON.stringify(e))}function L(e){return e!=null&&typeof e[Symbol.asyncIterator]==`function`}function ee(e){return!(e==null||typeof e[Symbol.iterator]!=`function`&&typeof e[Symbol.asyncIterator]!=`function`)}function te(e){if(e==null)return 0;if(C(e)){let t=e._readableState;return t&&t.objectMode===!1&&t.ended===!0&&Number.isFinite(t.length)?t.length:null}return O(e)?e.size==null?null:e.size:ie(e)?e.byteLength:null}function R(e){return e&&!!(e.destroyed||e[r]||c.isDestroyed?.(e))}function z(e,t){e!=null&&C(e)&&!R(e)&&(typeof e.destroy==`function`?(Object.getPrototypeOf(e).constructor===s&&(e.socket=null),e.destroy(t)):t&&queueMicrotask(()=>{e.emit(`error`,t)}),e.destroyed!==!0&&(e[r]=!0))}let B=/timeout=(\d+)/;function V(e){let t=e.toString().match(B);return t?parseInt(t[1],10)*1e3:null}function H(e){return typeof e==`string`?g[e]??e.toLowerCase():_.lookup(e)??e.toString(`latin1`).toLowerCase()}function ne(e){return _.lookup(e)??e.toString(`latin1`).toLowerCase()}function re(e,t){t===void 0&&(t={});for(let n=0;ne.toString(`utf8`)):i.toString(`utf8`)}}return`content-length`in t&&`content-disposition`in t&&(t[`content-disposition`]=Buffer.from(t[`content-disposition`]).toString(`latin1`)),t}function U(e){let t=e.length,n=Array(t),r=!1,i=-1,a,o,s=0;for(let t=0;t{e.close(),e.byobRequest?.respond(0)});else{let t=Buffer.isBuffer(r)?r:Buffer.from(r);t.byteLength&&e.enqueue(new Uint8Array(t))}return e.desiredSize>0},async cancel(e){await t.return()},type:`bytes`})}function ce(e){return e&&typeof e==`object`&&typeof e.append==`function`&&typeof e.delete==`function`&&typeof e.get==`function`&&typeof e.getAll==`function`&&typeof e.has==`function`&&typeof e.set==`function`&&e[Symbol.toStringTag]===`FormData`}function q(e,t){return`addEventListener`in e?(e.addEventListener(`abort`,t,{once:!0}),()=>e.removeEventListener(`abort`,t)):(e.addListener(`abort`,t),()=>e.removeListener(`abort`,t))}let le=typeof String.prototype.toWellFormed==`function`,J=typeof String.prototype.isWellFormed==`function`;function ue(e){return le?`${e}`.toWellFormed():d.toUSVString(e)}function de(e){return J?`${e}`.isWellFormed():ue(e)===`${e}`}function Y(e){switch(e){case 34:case 40:case 41:case 44:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 123:case 125:return!1;default:return e>=33&&e<=126}}function fe(e){if(e.length===0)return!1;for(let t=0;t{let n=h(`node:diagnostics_channel`),r=h(`node:util`),i=r.debuglog(`undici`),a=r.debuglog(`fetch`),o=r.debuglog(`websocket`),s=!1,c={beforeConnect:n.channel(`undici:client:beforeConnect`),connected:n.channel(`undici:client:connected`),connectError:n.channel(`undici:client:connectError`),sendHeaders:n.channel(`undici:client:sendHeaders`),create:n.channel(`undici:request:create`),bodySent:n.channel(`undici:request:bodySent`),headers:n.channel(`undici:request:headers`),trailers:n.channel(`undici:request:trailers`),error:n.channel(`undici:request:error`),open:n.channel(`undici:websocket:open`),close:n.channel(`undici:websocket:close`),socketError:n.channel(`undici:websocket:socket_error`),ping:n.channel(`undici:websocket:ping`),pong:n.channel(`undici:websocket:pong`)};if(i.enabled||a.enabled){let e=a.enabled?a:i;n.channel(`undici:client:beforeConnect`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a}}=t;e(`connecting to %s using %s%s`,`${a}${i?`:${i}`:``}`,r,n)}),n.channel(`undici:client:connected`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a}}=t;e(`connected to %s using %s%s`,`${a}${i?`:${i}`:``}`,r,n)}),n.channel(`undici:client:connectError`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a},error:o}=t;e(`connection to %s using %s%s errored - %s`,`${a}${i?`:${i}`:``}`,r,n,o.message)}),n.channel(`undici:client:sendHeaders`).subscribe(t=>{let{request:{method:n,path:r,origin:i}}=t;e(`sending request to %s %s/%s`,n,i,r)}),n.channel(`undici:request:headers`).subscribe(t=>{let{request:{method:n,path:r,origin:i},response:{statusCode:a}}=t;e(`received response to %s %s/%s - HTTP %d`,n,i,r,a)}),n.channel(`undici:request:trailers`).subscribe(t=>{let{request:{method:n,path:r,origin:i}}=t;e(`trailers received from %s %s/%s`,n,i,r)}),n.channel(`undici:request:error`).subscribe(t=>{let{request:{method:n,path:r,origin:i},error:a}=t;e(`request to %s %s/%s errored - %s`,n,i,r,a.message)}),s=!0}if(o.enabled){if(!s){let e=i.enabled?i:o;n.channel(`undici:client:beforeConnect`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a}}=t;e(`connecting to %s%s using %s%s`,a,i?`:${i}`:``,r,n)}),n.channel(`undici:client:connected`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a}}=t;e(`connected to %s%s using %s%s`,a,i?`:${i}`:``,r,n)}),n.channel(`undici:client:connectError`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a},error:o}=t;e(`connection to %s%s using %s%s errored - %s`,a,i?`:${i}`:``,r,n,o.message)}),n.channel(`undici:client:sendHeaders`).subscribe(t=>{let{request:{method:n,path:r,origin:i}}=t;e(`sending request to %s %s/%s`,n,i,r)})}n.channel(`undici:websocket:open`).subscribe(e=>{let{address:{address:t,port:n}}=e;o(`connection opened %s%s`,t,n?`:${n}`:``)}),n.channel(`undici:websocket:close`).subscribe(e=>{let{websocket:t,code:n,reason:r}=e;o(`closed connection to %s - %s %s`,t.url,n,r)}),n.channel(`undici:websocket:socket_error`).subscribe(e=>{o(`connection errored - %s`,e.message)}),n.channel(`undici:websocket:ping`).subscribe(e=>{o(`ping received`)}),n.channel(`undici:websocket:pong`).subscribe(e=>{o(`pong received`)})}t.exports={channels:c}})),A=/* @__PURE__ */ m(((e,t)=>{let{InvalidArgumentError:n,NotSupportedError:r}=T(),i=h(`node:assert`),{isValidHTTPToken:a,isValidHeaderValue:o,isStream:s,destroy:c,isBuffer:l,isFormDataLike:u,isIterable:d,isBlobLike:f,buildURL:p,validateHandler:m,getServerName:g,normalizedMethodRecords:_}=O(),{channels:v}=k(),{headerNameLowerCasedRecord:y}=E(),b=/[^\u0021-\u00ff]/,x=Symbol(`handler`);var S=class{constructor(e,{path:t,method:r,body:i,headers:h,query:y,idempotent:S,blocking:w,upgrade:T,headersTimeout:E,bodyTimeout:D,reset:O,throwOnError:k,expectContinue:A,servername:j},M){if(typeof t!=`string`)throw new n(`path must be a string`);if(t[0]!==`/`&&!(t.startsWith(`http://`)||t.startsWith(`https://`))&&r!==`CONNECT`)throw new n(`path must be an absolute URL or start with a slash`);if(b.test(t))throw new n(`invalid request path`);if(typeof r!=`string`)throw new n(`method must be a string`);if(_[r]===void 0&&!a(r))throw new n(`invalid request method`);if(T&&typeof T!=`string`)throw new n(`upgrade must be a string`);if(T&&!o(T))throw new n(`invalid upgrade header`);if(E!=null&&(!Number.isFinite(E)||E<0))throw new n(`invalid headersTimeout`);if(D!=null&&(!Number.isFinite(D)||D<0))throw new n(`invalid bodyTimeout`);if(O!=null&&typeof O!=`boolean`)throw new n(`invalid reset`);if(A!=null&&typeof A!=`boolean`)throw new n(`invalid expectContinue`);if(this.headersTimeout=E,this.bodyTimeout=D,this.throwOnError=k===!0,this.method=r,this.abort=null,i==null)this.body=null;else if(s(i)){this.body=i;let e=this.body._readableState;e&&e.autoDestroy||(this.endHandler=function(){c(this)},this.body.on(`end`,this.endHandler)),this.errorHandler=e=>{this.abort?this.abort(e):this.error=e},this.body.on(`error`,this.errorHandler)}else if(l(i))this.body=i.byteLength?i:null;else if(ArrayBuffer.isView(i))this.body=i.buffer.byteLength?Buffer.from(i.buffer,i.byteOffset,i.byteLength):null;else if(i instanceof ArrayBuffer)this.body=i.byteLength?Buffer.from(i):null;else if(typeof i==`string`)this.body=i.length?Buffer.from(i):null;else if(u(i)||d(i)||f(i))this.body=i;else throw new n(`body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable`);if(this.completed=!1,this.aborted=!1,this.upgrade=T||null,this.path=y?p(t,y):t,this.origin=e,this.idempotent=S??(r===`HEAD`||r===`GET`),this.blocking=w??!1,this.reset=O??null,this.host=null,this.contentLength=null,this.contentType=null,this.headers=[],this.expectContinue=A??!1,Array.isArray(h)){if(h.length%2!=0)throw new n(`headers array must be even`);for(let e=0;e{let n=h(`node:events`);var r=class extends n{dispatch(){throw Error(`not implemented`)}close(){throw Error(`not implemented`)}destroy(){throw Error(`not implemented`)}compose(...e){let t=Array.isArray(e[0])?e[0]:e,n=this.dispatch.bind(this);for(let e of t)if(e!=null){if(typeof e!=`function`)throw TypeError(`invalid interceptor, expected function received ${typeof e}`);if(n=e(n),n==null||typeof n!=`function`||n.length!==2)throw TypeError(`invalid interceptor`)}return new i(this,n)}},i=class extends r{#e=null;#t=null;constructor(e,t){super(),this.#e=e,this.#t=t}dispatch(...e){this.#t(...e)}close(...e){return this.#e.close(...e)}destroy(...e){return this.#e.destroy(...e)}};t.exports=r})),M=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:buffer`),r=j(),{ClientDestroyedError:i,ClientClosedError:a,InvalidArgumentError:o}=T(),{kDestroy:s,kClose:c,kClosed:l,kDestroyed:u,kDispatch:d,kInterceptors:f}=w(),p=Symbol(`onDestroyed`),m=Symbol(`onClosed`),g=Symbol(`Intercepted Dispatch`),_=Symbol(`webSocketOptions`),v=Symbol(`eventSourceOptions`);t.exports=class extends r{constructor(e){super(),this[u]=!1,this[p]=null,this[l]=!1,this[m]=[],this[_]=e?.webSocket??{},this[v]=e?.eventSource??{}}get webSocketOptions(){return{maxFragments:this[_].maxFragments??131072,maxPayloadSize:this[_].maxPayloadSize??134217728}}get eventSourceOptions(){return{maxEventSize:this[v].maxEventSize??n.kStringMaxLength}}get destroyed(){return this[u]}get closed(){return this[l]}get interceptors(){return this[f]}set interceptors(e){if(e){for(let t=e.length-1;t>=0;t--)if(typeof this[f][t]!=`function`)throw new o(`interceptor must be an function`)}this[f]=e}close(e){if(e===void 0)return new Promise((e,t)=>{this.close((n,r)=>n?t(n):e(r))});if(typeof e!=`function`)throw new o(`invalid callback`);if(this[u]){queueMicrotask(()=>e(new i,null));return}if(this[l]){this[m]?this[m].push(e):queueMicrotask(()=>e(null,null));return}this[l]=!0,this[m].push(e);let t=()=>{let e=this[m];this[m]=null;for(let t=0;tthis.destroy()).then(()=>{queueMicrotask(t)})}destroy(e,t){if(typeof e==`function`&&(t=e,e=null),t===void 0)return new Promise((t,n)=>{this.destroy(e,(e,r)=>e?/* istanbul ignore next: should never error */n(e):t(r))});if(typeof t!=`function`)throw new o(`invalid callback`);if(this[u]){this[p]?this[p].push(t):queueMicrotask(()=>t(null,null));return}e||=new i,this[u]=!0,this[p]=this[p]||[],this[p].push(t);let n=()=>{let e=this[p];this[p]=null;for(let t=0;t{queueMicrotask(n)})}[g](e,t){if(!this[f]||this[f].length===0)return this[g]=this[d],this[d](e,t);let n=this[d].bind(this);for(let e=this[f].length-1;e>=0;e--)n=this[f][e](n);return this[g]=n,n(e,t)}dispatch(e,t){if(!t||typeof t!=`object`)throw new o(`handler must be an object`);try{if(!e||typeof e!=`object`)throw new o(`opts must be an object.`);if(this[u]||this[p])throw new i;if(this[l])throw new a;return this[g](e,t)}catch(e){if(typeof t.onError!=`function`)throw new o(`invalid onError method`);return t.onError(e),!1}}}})),N=/* @__PURE__ */ m(((e,t)=>{let n=0,r=1e3,i,a=Symbol(`kFastTimer`),o=[];function s(){n+=499;let e=0,t=o.length;for(;e=r._idleStart+r._idleTimeout&&(r._state=-1,r._idleStart=-1,r._onTimeout(r._timerArg)),r._state===-1?(r._state=-2,--t!==0&&(o[e]=o[t])):++e}o.length=t,o.length!==0&&c()}function c(){i?i.refresh():(clearTimeout(i),i=setTimeout(s,499),i.unref&&i.unref())}var l=class{[a]=!0;_state=-2;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(e,t,n){this._onTimeout=e,this._idleTimeout=t,this._timerArg=n,this.refresh()}refresh(){this._state===-2&&o.push(this),i&&o.length!==1||c(),this._state=0}clear(){this._state=-1,this._idleStart=-1}};t.exports={setTimeout(e,t,n){return t<=r?setTimeout(e,t,n):new l(e,t,n)},clearTimeout(e){e[a]?e.clear():clearTimeout(e)},setFastTimeout(e,t,n){return new l(e,t,n)},clearFastTimeout(e){e.clear()},now(){return n},tick(e=0){n+=e-r+1,s(),s()},reset(){n=0,o.length=0,clearTimeout(i),i=null},kFastTimer:a}})),P=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:net`),r=h(`node:assert`),i=O(),{InvalidArgumentError:a,ConnectTimeoutError:o}=T(),s=N();function c(){}let l,u;u=global.FinalizationRegistry&&!(process.env.NODE_V8_COVERAGE||process.env.UNDICI_NO_FG)?class{constructor(e){this._maxCachedSessions=e,this._sessionCache=/* @__PURE__ */ new Map,this._sessionRegistry=new global.FinalizationRegistry(e=>{if(this._sessionCache.size=this._maxCachedSessions){let{value:e}=this._sessionCache.keys().next();this._sessionCache.delete(e)}this._sessionCache.set(e,t)}}};function d({allowH2:e,maxCachedSessions:t,socketPath:o,timeout:s,session:c,...d}){if(t!=null&&(!Number.isInteger(t)||t<0))throw new a(`maxCachedSessions must be a positive integer or zero`);let p={path:o,...d},m=new u(t??100);return s??=1e4,e??=!1,function({hostname:t,host:a,protocol:o,port:u,servername:d,localAddress:g,httpSocket:_},v){let y;if(o===`https:`){l||=h(`node:tls`),d=d||p.servername||i.getServerName(a)||null;let n=d||t;r(n);let o=c||m.get(n)||null;u||=443,y=l.connect({highWaterMark:16384,...p,servername:d,session:o,localAddress:g,ALPNProtocols:e?[`http/1.1`,`h2`]:[`http/1.1`],socket:_,port:u,host:t}),y.on(`session`,function(e){m.set(n,e)})}else r(!_,`httpSocket can only be sent on TLS update`),u||=80,y=n.connect({highWaterMark:65536,...p,localAddress:g,port:u,host:t});if(p.keepAlive==null||p.keepAlive){let e=p.keepAliveInitialDelay===void 0?6e4:p.keepAliveInitialDelay;y.setKeepAlive(!0,e)}let b=f(new WeakRef(y),{timeout:s,hostname:t,port:u});return y.setNoDelay(!0).once(o===`https:`?`secureConnect`:`connect`,function(){if(queueMicrotask(b),v){let e=v;v=null,e(null,this)}}).on(`error`,function(e){if(queueMicrotask(b),v){let t=v;v=null,t(e)}}),y}}let f=process.platform===`win32`?(e,t)=>{if(!t.timeout)return c;let n=null,r=null,i=s.setFastTimeout(()=>{n=setImmediate(()=>{r=setImmediate(()=>p(e.deref(),t))})},t.timeout);return()=>{s.clearFastTimeout(i),clearImmediate(n),clearImmediate(r)}}:(e,t)=>{if(!t.timeout)return c;let n=null,r=s.setFastTimeout(()=>{n=setImmediate(()=>{p(e.deref(),t)})},t.timeout);return()=>{s.clearFastTimeout(r),clearImmediate(n)}};function p(e,t){if(e==null)return;let n=`Connect Timeout Error`;Array.isArray(e.autoSelectFamilyAttemptedAddresses)?n+=` (attempted addresses: ${e.autoSelectFamilyAttemptedAddresses.join(`, `)},`:n+=` (attempted address: ${t.hostname}:${t.port},`,n+=` timeout: ${t.timeout}ms)`,i.destroy(e,new o(n))}t.exports=d})),F=/* @__PURE__ */ m((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.enumToMap=void 0;function t(e){let t={};return Object.keys(e).forEach(n=>{let r=e[n];typeof r==`number`&&(t[n]=r)}),t}e.enumToMap=t})),I=/* @__PURE__ */ m((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.SPECIAL_HEADERS=e.HEADER_STATE=e.MINOR=e.MAJOR=e.CONNECTION_TOKEN_CHARS=e.HEADER_CHARS=e.TOKEN=e.STRICT_TOKEN=e.HEX=e.URL_CHAR=e.STRICT_URL_CHAR=e.USERINFO_CHARS=e.MARK=e.ALPHANUM=e.NUM=e.HEX_MAP=e.NUM_MAP=e.ALPHA=e.FINISH=e.H_METHOD_MAP=e.METHOD_MAP=e.METHODS_RTSP=e.METHODS_ICE=e.METHODS_HTTP=e.METHODS=e.LENIENT_FLAGS=e.FLAGS=e.TYPE=e.ERROR=void 0;let t=F();(function(e){e[e.OK=0]=`OK`,e[e.INTERNAL=1]=`INTERNAL`,e[e.STRICT=2]=`STRICT`,e[e.LF_EXPECTED=3]=`LF_EXPECTED`,e[e.UNEXPECTED_CONTENT_LENGTH=4]=`UNEXPECTED_CONTENT_LENGTH`,e[e.CLOSED_CONNECTION=5]=`CLOSED_CONNECTION`,e[e.INVALID_METHOD=6]=`INVALID_METHOD`,e[e.INVALID_URL=7]=`INVALID_URL`,e[e.INVALID_CONSTANT=8]=`INVALID_CONSTANT`,e[e.INVALID_VERSION=9]=`INVALID_VERSION`,e[e.INVALID_HEADER_TOKEN=10]=`INVALID_HEADER_TOKEN`,e[e.INVALID_CONTENT_LENGTH=11]=`INVALID_CONTENT_LENGTH`,e[e.INVALID_CHUNK_SIZE=12]=`INVALID_CHUNK_SIZE`,e[e.INVALID_STATUS=13]=`INVALID_STATUS`,e[e.INVALID_EOF_STATE=14]=`INVALID_EOF_STATE`,e[e.INVALID_TRANSFER_ENCODING=15]=`INVALID_TRANSFER_ENCODING`,e[e.CB_MESSAGE_BEGIN=16]=`CB_MESSAGE_BEGIN`,e[e.CB_HEADERS_COMPLETE=17]=`CB_HEADERS_COMPLETE`,e[e.CB_MESSAGE_COMPLETE=18]=`CB_MESSAGE_COMPLETE`,e[e.CB_CHUNK_HEADER=19]=`CB_CHUNK_HEADER`,e[e.CB_CHUNK_COMPLETE=20]=`CB_CHUNK_COMPLETE`,e[e.PAUSED=21]=`PAUSED`,e[e.PAUSED_UPGRADE=22]=`PAUSED_UPGRADE`,e[e.PAUSED_H2_UPGRADE=23]=`PAUSED_H2_UPGRADE`,e[e.USER=24]=`USER`})(e.ERROR||={}),(function(e){e[e.BOTH=0]=`BOTH`,e[e.REQUEST=1]=`REQUEST`,e[e.RESPONSE=2]=`RESPONSE`})(e.TYPE||={}),(function(e){e[e.CONNECTION_KEEP_ALIVE=1]=`CONNECTION_KEEP_ALIVE`,e[e.CONNECTION_CLOSE=2]=`CONNECTION_CLOSE`,e[e.CONNECTION_UPGRADE=4]=`CONNECTION_UPGRADE`,e[e.CHUNKED=8]=`CHUNKED`,e[e.UPGRADE=16]=`UPGRADE`,e[e.CONTENT_LENGTH=32]=`CONTENT_LENGTH`,e[e.SKIPBODY=64]=`SKIPBODY`,e[e.TRAILING=128]=`TRAILING`,e[e.TRANSFER_ENCODING=512]=`TRANSFER_ENCODING`})(e.FLAGS||={}),(function(e){e[e.HEADERS=1]=`HEADERS`,e[e.CHUNKED_LENGTH=2]=`CHUNKED_LENGTH`,e[e.KEEP_ALIVE=4]=`KEEP_ALIVE`})(e.LENIENT_FLAGS||={});var n;(function(e){e[e.DELETE=0]=`DELETE`,e[e.GET=1]=`GET`,e[e.HEAD=2]=`HEAD`,e[e.POST=3]=`POST`,e[e.PUT=4]=`PUT`,e[e.CONNECT=5]=`CONNECT`,e[e.OPTIONS=6]=`OPTIONS`,e[e.TRACE=7]=`TRACE`,e[e.COPY=8]=`COPY`,e[e.LOCK=9]=`LOCK`,e[e.MKCOL=10]=`MKCOL`,e[e.MOVE=11]=`MOVE`,e[e.PROPFIND=12]=`PROPFIND`,e[e.PROPPATCH=13]=`PROPPATCH`,e[e.SEARCH=14]=`SEARCH`,e[e.UNLOCK=15]=`UNLOCK`,e[e.BIND=16]=`BIND`,e[e.REBIND=17]=`REBIND`,e[e.UNBIND=18]=`UNBIND`,e[e.ACL=19]=`ACL`,e[e.REPORT=20]=`REPORT`,e[e.MKACTIVITY=21]=`MKACTIVITY`,e[e.CHECKOUT=22]=`CHECKOUT`,e[e.MERGE=23]=`MERGE`,e[e[`M-SEARCH`]=24]=`M-SEARCH`,e[e.NOTIFY=25]=`NOTIFY`,e[e.SUBSCRIBE=26]=`SUBSCRIBE`,e[e.UNSUBSCRIBE=27]=`UNSUBSCRIBE`,e[e.PATCH=28]=`PATCH`,e[e.PURGE=29]=`PURGE`,e[e.MKCALENDAR=30]=`MKCALENDAR`,e[e.LINK=31]=`LINK`,e[e.UNLINK=32]=`UNLINK`,e[e.SOURCE=33]=`SOURCE`,e[e.PRI=34]=`PRI`,e[e.DESCRIBE=35]=`DESCRIBE`,e[e.ANNOUNCE=36]=`ANNOUNCE`,e[e.SETUP=37]=`SETUP`,e[e.PLAY=38]=`PLAY`,e[e.PAUSE=39]=`PAUSE`,e[e.TEARDOWN=40]=`TEARDOWN`,e[e.GET_PARAMETER=41]=`GET_PARAMETER`,e[e.SET_PARAMETER=42]=`SET_PARAMETER`,e[e.REDIRECT=43]=`REDIRECT`,e[e.RECORD=44]=`RECORD`,e[e.FLUSH=45]=`FLUSH`})(n=e.METHODS||={}),e.METHODS_HTTP=[n.DELETE,n.GET,n.HEAD,n.POST,n.PUT,n.CONNECT,n.OPTIONS,n.TRACE,n.COPY,n.LOCK,n.MKCOL,n.MOVE,n.PROPFIND,n.PROPPATCH,n.SEARCH,n.UNLOCK,n.BIND,n.REBIND,n.UNBIND,n.ACL,n.REPORT,n.MKACTIVITY,n.CHECKOUT,n.MERGE,n[`M-SEARCH`],n.NOTIFY,n.SUBSCRIBE,n.UNSUBSCRIBE,n.PATCH,n.PURGE,n.MKCALENDAR,n.LINK,n.UNLINK,n.PRI,n.SOURCE],e.METHODS_ICE=[n.SOURCE],e.METHODS_RTSP=[n.OPTIONS,n.DESCRIBE,n.ANNOUNCE,n.SETUP,n.PLAY,n.PAUSE,n.TEARDOWN,n.GET_PARAMETER,n.SET_PARAMETER,n.REDIRECT,n.RECORD,n.FLUSH,n.GET,n.POST],e.METHOD_MAP=t.enumToMap(n),e.H_METHOD_MAP={},Object.keys(e.METHOD_MAP).forEach(t=>{/^H/.test(t)&&(e.H_METHOD_MAP[t]=e.METHOD_MAP[t])}),(function(e){e[e.SAFE=0]=`SAFE`,e[e.SAFE_WITH_CB=1]=`SAFE_WITH_CB`,e[e.UNSAFE=2]=`UNSAFE`})(e.FINISH||={}),e.ALPHA=[];for(let t=65;t<=90;t++)e.ALPHA.push(String.fromCharCode(t)),e.ALPHA.push(String.fromCharCode(t+32));e.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9},e.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},e.NUM=[`0`,`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`],e.ALPHANUM=e.ALPHA.concat(e.NUM),e.MARK=[`-`,`_`,`.`,`!`,`~`,`*`,`'`,`(`,`)`],e.USERINFO_CHARS=e.ALPHANUM.concat(e.MARK).concat([`%`,`;`,`:`,`&`,`=`,`+`,`$`,`,`]),e.STRICT_URL_CHAR=(/* @__PURE__ */ `!"$%&'()*+,-./:;<=>@[\\]^_\`{|}~`.split(``)).concat(e.ALPHANUM),e.URL_CHAR=e.STRICT_URL_CHAR.concat([` `,`\f`]);for(let t=128;t<=255;t++)e.URL_CHAR.push(t);e.HEX=e.NUM.concat([`a`,`b`,`c`,`d`,`e`,`f`,`A`,`B`,`C`,`D`,`E`,`F`]),e.STRICT_TOKEN=[`!`,`#`,`$`,`%`,`&`,`'`,`*`,`+`,`-`,`.`,`^`,`_`,"`",`|`,`~`].concat(e.ALPHANUM),e.TOKEN=e.STRICT_TOKEN.concat([` `]),e.HEADER_CHARS=[` `];for(let t=32;t<=255;t++)t!==127&&e.HEADER_CHARS.push(t);e.CONNECTION_TOKEN_CHARS=e.HEADER_CHARS.filter(e=>e!==44),e.MAJOR=e.NUM_MAP,e.MINOR=e.MAJOR;var r;(function(e){e[e.GENERAL=0]=`GENERAL`,e[e.CONNECTION=1]=`CONNECTION`,e[e.CONTENT_LENGTH=2]=`CONTENT_LENGTH`,e[e.TRANSFER_ENCODING=3]=`TRANSFER_ENCODING`,e[e.UPGRADE=4]=`UPGRADE`,e[e.CONNECTION_KEEP_ALIVE=5]=`CONNECTION_KEEP_ALIVE`,e[e.CONNECTION_CLOSE=6]=`CONNECTION_CLOSE`,e[e.CONNECTION_UPGRADE=7]=`CONNECTION_UPGRADE`,e[e.TRANSFER_ENCODING_CHUNKED=8]=`TRANSFER_ENCODING_CHUNKED`})(r=e.HEADER_STATE||={}),e.SPECIAL_HEADERS={connection:r.CONNECTION,"content-length":r.CONTENT_LENGTH,"proxy-connection":r.CONNECTION,"transfer-encoding":r.TRANSFER_ENCODING,upgrade:r.UPGRADE}})),L=/* @__PURE__ */ m(((e,t)=>{let{Buffer:n}=h(`node:buffer`);t.exports=n.from(`AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv`,`base64`)})),ee=/* @__PURE__ */ m(((e,t)=>{let{Buffer:n}=h(`node:buffer`);t.exports=n.from(`AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADDsYBAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHyAhIyUmKCorLC8wMTIzNDU2Nzk6Ozw9lANAQkRFRklLTk9QUVJTVFVWWFpbXF1eX2BhYmNkZWZnaGpsb3Bxc3V2eHl6e3x/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcsBzAHNAc4BzwGKA4kDiAOHA4QDgwOAA/sC+gL5AvgC9wL0AvMC8gLLAsECsALZAQsgASAERw3wAkHdASEDDLMDCyABIARHDcgBQcMBIQMMsgMLIAEgBEcNe0H3ACEDDLEDCyABIARHDXBB7wAhAwywAwsgASAERw1pQeoAIQMMrwMLIAEgBEcNZUHoACEDDK4DCyABIARHDWJB5gAhAwytAwsgASAERw0aQRghAwysAwsgASAERw0VQRIhAwyrAwsgASAERw1CQcUAIQMMqgMLIAEgBEcNNEE/IQMMqQMLIAEgBEcNMkE8IQMMqAMLIAEgBEcNK0ExIQMMpwMLIAItAC5BAUYNnwMMwQILQQAhAAJAAkACQCACLQAqRQ0AIAItACtFDQAgAi8BMCIDQQJxRQ0BDAILIAIvATAiA0EBcUUNAQtBASEAIAItAChBAUYNACACLwEyIgVB5ABrQeQASQ0AIAVBzAFGDQAgBUGwAkYNACADQcAAcQ0AQQAhACADQYgEcUGABEYNACADQShxQQBHIQALIAJBADsBMCACQQA6AC8gAEUN3wIgAkIANwMgDOACC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAARQ3MASAAQRVHDd0CIAJBBDYCHCACIAE2AhQgAkGwGDYCECACQRU2AgxBACEDDKQDCyABIARGBEBBBiEDDKQDCyABQQFqIQFBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAA3ZAgwcCyACQgA3AyBBEiEDDIkDCyABIARHDRZBHSEDDKEDCyABIARHBEAgAUEBaiEBQRAhAwyIAwtBByEDDKADCyACIAIpAyAiCiAEIAFrrSILfSIMQgAgCiAMWhs3AyAgCiALWA3UAkEIIQMMnwMLIAEgBEcEQCACQQk2AgggAiABNgIEQRQhAwyGAwtBCSEDDJ4DCyACKQMgQgBSDccBIAIgAi8BMEGAAXI7ATAMQgsgASAERw0/QdAAIQMMnAMLIAEgBEYEQEELIQMMnAMLIAFBAWohAUEAIQACQCACKAI4IgNFDQAgAygCUCIDRQ0AIAIgAxEAACEACyAADc8CDMYBC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ3GASAAQRVHDc0CIAJBCzYCHCACIAE2AhQgAkGCGTYCECACQRU2AgxBACEDDJoDC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ0MIABBFUcNygIgAkEaNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMmQMLQQAhAAJAIAIoAjgiA0UNACADKAJMIgNFDQAgAiADEQAAIQALIABFDcQBIABBFUcNxwIgAkELNgIcIAIgATYCFCACQZEXNgIQIAJBFTYCDEEAIQMMmAMLIAEgBEYEQEEPIQMMmAMLIAEtAAAiAEE7Rg0HIABBDUcNxAIgAUEBaiEBDMMBC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3DASAAQRVHDcICIAJBDzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJYDCwNAIAEtAABB8DVqLQAAIgBBAUcEQCAAQQJHDcECIAIoAgQhAEEAIQMgAkEANgIEIAIgACABQQFqIgEQLSIADcICDMUBCyAEIAFBAWoiAUcNAAtBEiEDDJUDC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3FASAAQRVHDb0CIAJBGzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJQDCyABIARGBEBBFiEDDJQDCyACQQo2AgggAiABNgIEQQAhAAJAIAIoAjgiA0UNACADKAJIIgNFDQAgAiADEQAAIQALIABFDcIBIABBFUcNuQIgAkEVNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMkwMLIAEgBEcEQANAIAEtAABB8DdqLQAAIgBBAkcEQAJAIABBAWsOBMQCvQIAvgK9AgsgAUEBaiEBQQghAwz8AgsgBCABQQFqIgFHDQALQRUhAwyTAwtBFSEDDJIDCwNAIAEtAABB8DlqLQAAIgBBAkcEQCAAQQFrDgTFArcCwwK4ArcCCyAEIAFBAWoiAUcNAAtBGCEDDJEDCyABIARHBEAgAkELNgIIIAIgATYCBEEHIQMM+AILQRkhAwyQAwsgAUEBaiEBDAILIAEgBEYEQEEaIQMMjwMLAkAgAS0AAEENaw4UtQG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwEAvwELQQAhAyACQQA2AhwgAkGvCzYCECACQQI2AgwgAiABQQFqNgIUDI4DCyABIARGBEBBGyEDDI4DCyABLQAAIgBBO0cEQCAAQQ1HDbECIAFBAWohAQy6AQsgAUEBaiEBC0EiIQMM8wILIAEgBEYEQEEcIQMMjAMLQgAhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AAEEwaw43wQLAAgABAgMEBQYH0AHQAdAB0AHQAdAB0AEICQoLDA3QAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdABDg8QERIT0AELQgIhCgzAAgtCAyEKDL8CC0IEIQoMvgILQgUhCgy9AgtCBiEKDLwCC0IHIQoMuwILQgghCgy6AgtCCSEKDLkCC0IKIQoMuAILQgshCgy3AgtCDCEKDLYCC0INIQoMtQILQg4hCgy0AgtCDyEKDLMCC0IKIQoMsgILQgshCgyxAgtCDCEKDLACC0INIQoMrwILQg4hCgyuAgtCDyEKDK0CC0IAIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBMGsON8ACvwIAAQIDBAUGB74CvgK+Ar4CvgK+Ar4CCAkKCwwNvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ag4PEBESE74CC0ICIQoMvwILQgMhCgy+AgtCBCEKDL0CC0IFIQoMvAILQgYhCgy7AgtCByEKDLoCC0IIIQoMuQILQgkhCgy4AgtCCiEKDLcCC0ILIQoMtgILQgwhCgy1AgtCDSEKDLQCC0IOIQoMswILQg8hCgyyAgtCCiEKDLECC0ILIQoMsAILQgwhCgyvAgtCDSEKDK4CC0IOIQoMrQILQg8hCgysAgsgAiACKQMgIgogBCABa60iC30iDEIAIAogDFobNwMgIAogC1gNpwJBHyEDDIkDCyABIARHBEAgAkEJNgIIIAIgATYCBEElIQMM8AILQSAhAwyIAwtBASEFIAIvATAiA0EIcUUEQCACKQMgQgBSIQULAkAgAi0ALgRAQQEhACACLQApQQVGDQEgA0HAAHFFIAVxRQ0BC0EAIQAgA0HAAHENAEECIQAgA0EIcQ0AIANBgARxBEACQCACLQAoQQFHDQAgAi0ALUEKcQ0AQQUhAAwCC0EEIQAMAQsgA0EgcUUEQAJAIAItAChBAUYNACACLwEyIgBB5ABrQeQASQ0AIABBzAFGDQAgAEGwAkYNAEEEIQAgA0EocUUNAiADQYgEcUGABEYNAgtBACEADAELQQBBAyACKQMgUBshAAsgAEEBaw4FvgIAsAEBpAKhAgtBESEDDO0CCyACQQE6AC8MhAMLIAEgBEcNnQJBJCEDDIQDCyABIARHDRxBxgAhAwyDAwtBACEAAkAgAigCOCIDRQ0AIAMoAkQiA0UNACACIAMRAAAhAAsgAEUNJyAAQRVHDZgCIAJB0AA2AhwgAiABNgIUIAJBkRg2AhAgAkEVNgIMQQAhAwyCAwsgASAERgRAQSghAwyCAwtBACEDIAJBADYCBCACQQw2AgggAiABIAEQKiIARQ2UAiACQSc2AhwgAiABNgIUIAIgADYCDAyBAwsgASAERgRAQSkhAwyBAwsgAS0AACIAQSBGDRMgAEEJRw2VAiABQQFqIQEMFAsgASAERwRAIAFBAWohAQwWC0EqIQMM/wILIAEgBEYEQEErIQMM/wILIAEtAAAiAEEJRyAAQSBHcQ2QAiACLQAsQQhHDd0CIAJBADoALAzdAgsgASAERgRAQSwhAwz+AgsgAS0AAEEKRw2OAiABQQFqIQEMsAELIAEgBEcNigJBLyEDDPwCCwNAIAEtAAAiAEEgRwRAIABBCmsOBIQCiAKIAoQChgILIAQgAUEBaiIBRw0AC0ExIQMM+wILQTIhAyABIARGDfoCIAIoAgAiACAEIAFraiEHIAEgAGtBA2ohBgJAA0AgAEHwO2otAAAgAS0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQEgAEEDRgRAQQYhAQziAgsgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAc2AgAM+wILIAJBADYCAAyGAgtBMyEDIAQgASIARg35AiAEIAFrIAIoAgAiAWohByAAIAFrQQhqIQYCQANAIAFB9DtqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBCEYEQEEFIQEM4QILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPoCCyACQQA2AgAgACEBDIUCC0E0IQMgBCABIgBGDfgCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgJAA0AgAUHQwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBBUYEQEEHIQEM4AILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPkCCyACQQA2AgAgACEBDIQCCyABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRg0JDIECCyAEIAFBAWoiAUcNAAtBMCEDDPgCC0EwIQMM9wILIAEgBEcEQANAIAEtAAAiAEEgRwRAIABBCmsOBP8B/gH+Af8B/gELIAQgAUEBaiIBRw0AC0E4IQMM9wILQTghAwz2AgsDQCABLQAAIgBBIEcgAEEJR3EN9gEgBCABQQFqIgFHDQALQTwhAwz1AgsDQCABLQAAIgBBIEcEQAJAIABBCmsOBPkBBAT5AQALIABBLEYN9QEMAwsgBCABQQFqIgFHDQALQT8hAwz0AgtBwAAhAyABIARGDfMCIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAEGAQGstAAAgAS0AAEEgckcNASAAQQZGDdsCIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPQCCyACQQA2AgALQTYhAwzZAgsgASAERgRAQcEAIQMM8gILIAJBDDYCCCACIAE2AgQgAi0ALEEBaw4E+wHuAewB6wHUAgsgAUEBaiEBDPoBCyABIARHBEADQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxIgBBCUYNACAAQSBGDQACQAJAAkACQCAAQeMAaw4TAAMDAwMDAwMBAwMDAwMDAwMDAgMLIAFBAWohAUExIQMM3AILIAFBAWohAUEyIQMM2wILIAFBAWohAUEzIQMM2gILDP4BCyAEIAFBAWoiAUcNAAtBNSEDDPACC0E1IQMM7wILIAEgBEcEQANAIAEtAABBgDxqLQAAQQFHDfcBIAQgAUEBaiIBRw0AC0E9IQMM7wILQT0hAwzuAgtBACEAAkAgAigCOCIDRQ0AIAMoAkAiA0UNACACIAMRAAAhAAsgAEUNASAAQRVHDeYBIAJBwgA2AhwgAiABNgIUIAJB4xg2AhAgAkEVNgIMQQAhAwztAgsgAUEBaiEBC0E8IQMM0gILIAEgBEYEQEHCACEDDOsCCwJAA0ACQCABLQAAQQlrDhgAAswCzALRAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAgDMAgsgBCABQQFqIgFHDQALQcIAIQMM6wILIAFBAWohASACLQAtQQFxRQ3+AQtBLCEDDNACCyABIARHDd4BQcQAIQMM6AILA0AgAS0AAEGQwABqLQAAQQFHDZwBIAQgAUEBaiIBRw0AC0HFACEDDOcCCyABLQAAIgBBIEYN/gEgAEE6Rw3AAiACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgAN3gEM3QELQccAIQMgBCABIgBGDeUCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFBkMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvwIgAUEFRg3CAiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzlAgtByAAhAyAEIAEiAEYN5AIgBCABayACKAIAIgFqIQcgACABa0EJaiEGA0AgAUGWwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw2+AkECIAFBCUYNwgIaIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOQCCyABIARGBEBByQAhAwzkAgsCQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxQe4Aaw4HAL8CvwK/Ar8CvwIBvwILIAFBAWohAUE+IQMMywILIAFBAWohAUE/IQMMygILQcoAIQMgBCABIgBGDeICIAQgAWsgAigCACIBaiEGIAAgAWtBAWohBwNAIAFBoMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvAIgAUEBRg2+AiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBjYCAAziAgtBywAhAyAEIAEiAEYN4QIgBCABayACKAIAIgFqIQcgACABa0EOaiEGA0AgAUGiwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw27AiABQQ5GDb4CIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOECC0HMACEDIAQgASIARg3gAiAEIAFrIAIoAgAiAWohByAAIAFrQQ9qIQYDQCABQcDCAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDboCQQMgAUEPRg2+AhogAUEBaiEBIAQgAEEBaiIARw0ACyACIAc2AgAM4AILQc0AIQMgBCABIgBGDd8CIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFB0MIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNuQJBBCABQQVGDb0CGiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzfAgsgASAERgRAQc4AIQMM3wILAkACQAJAAkAgAS0AACIAQSByIAAgAEHBAGtB/wFxQRpJG0H/AXFB4wBrDhMAvAK8ArwCvAK8ArwCvAK8ArwCvAK8ArwCAbwCvAK8AgIDvAILIAFBAWohAUHBACEDDMgCCyABQQFqIQFBwgAhAwzHAgsgAUEBaiEBQcMAIQMMxgILIAFBAWohAUHEACEDDMUCCyABIARHBEAgAkENNgIIIAIgATYCBEHFACEDDMUCC0HPACEDDN0CCwJAAkAgAS0AAEEKaw4EAZABkAEAkAELIAFBAWohAQtBKCEDDMMCCyABIARGBEBB0QAhAwzcAgsgAS0AAEEgRw0AIAFBAWohASACLQAtQQFxRQ3QAQtBFyEDDMECCyABIARHDcsBQdIAIQMM2QILQdMAIQMgASAERg3YAiACKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABB1sIAai0AAEcNxwEgAEEBRg3KASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBjYCAAzYAgsgASAERgRAQdUAIQMM2AILIAEtAABBCkcNwgEgAUEBaiEBDMoBCyABIARGBEBB1gAhAwzXAgsCQAJAIAEtAABBCmsOBADDAcMBAcMBCyABQQFqIQEMygELIAFBAWohAUHKACEDDL0CC0EAIQACQCACKAI4IgNFDQAgAygCPCIDRQ0AIAIgAxEAACEACyAADb8BQc0AIQMMvAILIAItAClBIkYNzwIMiQELIAQgASIFRgRAQdsAIQMM1AILQQAhAEEBIQFBASEGQQAhAwJAAn8CQAJAAkACQAJAAkACQCAFLQAAQTBrDgrFAcQBAAECAwQFBgjDAQtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshA0EAIQFBACEGDL0BC0EJIQNBASEAQQAhAUEAIQYMvAELIAEgBEYEQEHdACEDDNMCCyABLQAAQS5HDbgBIAFBAWohAQyIAQsgASAERw22AUHfACEDDNECCyABIARHBEAgAkEONgIIIAIgATYCBEHQACEDDLgCC0HgACEDDNACC0HhACEDIAEgBEYNzwIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGA0AgAS0AACAAQeLCAGotAABHDbEBIABBA0YNswEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMzwILQeIAIQMgASAERg3OAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYDQCABLQAAIABB5sIAai0AAEcNsAEgAEECRg2vASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAzOAgtB4wAhAyABIARGDc0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgNAIAEtAAAgAEHpwgBqLQAARw2vASAAQQNGDa0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADM0CCyABIARGBEBB5QAhAwzNAgsgAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANqgFB1gAhAwyzAgsgASAERwRAA0AgAS0AACIAQSBHBEACQAJAAkAgAEHIAGsOCwABswGzAbMBswGzAbMBswGzAQKzAQsgAUEBaiEBQdIAIQMMtwILIAFBAWohAUHTACEDDLYCCyABQQFqIQFB1AAhAwy1AgsgBCABQQFqIgFHDQALQeQAIQMMzAILQeQAIQMMywILA0AgAS0AAEHwwgBqLQAAIgBBAUcEQCAAQQJrDgOnAaYBpQGkAQsgBCABQQFqIgFHDQALQeYAIQMMygILIAFBAWogASAERw0CGkHnACEDDMkCCwNAIAEtAABB8MQAai0AACIAQQFHBEACQCAAQQJrDgSiAaEBoAEAnwELQdcAIQMMsQILIAQgAUEBaiIBRw0AC0HoACEDDMgCCyABIARGBEBB6QAhAwzIAgsCQCABLQAAIgBBCmsOGrcBmwGbAbQBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBpAGbAZsBAJkBCyABQQFqCyEBQQYhAwytAgsDQCABLQAAQfDGAGotAABBAUcNfSAEIAFBAWoiAUcNAAtB6gAhAwzFAgsgAUEBaiABIARHDQIaQesAIQMMxAILIAEgBEYEQEHsACEDDMQCCyABQQFqDAELIAEgBEYEQEHtACEDDMMCCyABQQFqCyEBQQQhAwyoAgsgASAERgRAQe4AIQMMwQILAkACQAJAIAEtAABB8MgAai0AAEEBaw4HkAGPAY4BAHwBAo0BCyABQQFqIQEMCwsgAUEBagyTAQtBACEDIAJBADYCHCACQZsSNgIQIAJBBzYCDCACIAFBAWo2AhQMwAILAkADQCABLQAAQfDIAGotAAAiAEEERwRAAkACQCAAQQFrDgeUAZMBkgGNAQAEAY0BC0HaACEDDKoCCyABQQFqIQFB3AAhAwypAgsgBCABQQFqIgFHDQALQe8AIQMMwAILIAFBAWoMkQELIAQgASIARgRAQfAAIQMMvwILIAAtAABBL0cNASAAQQFqIQEMBwsgBCABIgBGBEBB8QAhAwy+AgsgAC0AACIBQS9GBEAgAEEBaiEBQd0AIQMMpQILIAFBCmsiA0EWSw0AIAAhAUEBIAN0QYmAgAJxDfkBC0EAIQMgAkEANgIcIAIgADYCFCACQYwcNgIQIAJBBzYCDAy8AgsgASAERwRAIAFBAWohAUHeACEDDKMCC0HyACEDDLsCCyABIARGBEBB9AAhAwy7AgsCQCABLQAAQfDMAGotAABBAWsOA/cBcwCCAQtB4QAhAwyhAgsgASAERwRAA0AgAS0AAEHwygBqLQAAIgBBA0cEQAJAIABBAWsOAvkBAIUBC0HfACEDDKMCCyAEIAFBAWoiAUcNAAtB8wAhAwy6AgtB8wAhAwy5AgsgASAERwRAIAJBDzYCCCACIAE2AgRB4AAhAwygAgtB9QAhAwy4AgsgASAERgRAQfYAIQMMuAILIAJBDzYCCCACIAE2AgQLQQMhAwydAgsDQCABLQAAQSBHDY4CIAQgAUEBaiIBRw0AC0H3ACEDDLUCCyABIARGBEBB+AAhAwy1AgsgAS0AAEEgRw16IAFBAWohAQxbC0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAADXgMgAILIAEgBEYEQEH6ACEDDLMCCyABLQAAQcwARw10IAFBAWohAUETDHYLQfsAIQMgASAERg2xAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYDQCABLQAAIABB8M4Aai0AAEcNcyAAQQVGDXUgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMsQILIAEgBEYEQEH8ACEDDLECCwJAAkAgAS0AAEHDAGsODAB0dHR0dHR0dHR0AXQLIAFBAWohAUHmACEDDJgCCyABQQFqIQFB5wAhAwyXAgtB/QAhAyABIARGDa8CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDXIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADLACCyACQQA2AgAgBkEBaiEBQRAMcwtB/gAhAyABIARGDa4CIAIoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQfbOAGotAABHDXEgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK8CCyACQQA2AgAgBkEBaiEBQRYMcgtB/wAhAyABIARGDa0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQfzOAGotAABHDXAgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK4CCyACQQA2AgAgBkEBaiEBQQUMcQsgASAERgRAQYABIQMMrQILIAEtAABB2QBHDW4gAUEBaiEBQQgMcAsgASAERgRAQYEBIQMMrAILAkACQCABLQAAQc4Aaw4DAG8BbwsgAUEBaiEBQesAIQMMkwILIAFBAWohAUHsACEDDJICCyABIARGBEBBggEhAwyrAgsCQAJAIAEtAABByABrDggAbm5ubm5uAW4LIAFBAWohAUHqACEDDJICCyABQQFqIQFB7QAhAwyRAgtBgwEhAyABIARGDakCIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQYDPAGotAABHDWwgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKoCCyACQQA2AgAgBkEBaiEBQQAMbQtBhAEhAyABIARGDagCIAIoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQYPPAGotAABHDWsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKkCCyACQQA2AgAgBkEBaiEBQSMMbAsgASAERgRAQYUBIQMMqAILAkACQCABLQAAQcwAaw4IAGtra2trawFrCyABQQFqIQFB7wAhAwyPAgsgAUEBaiEBQfAAIQMMjgILIAEgBEYEQEGGASEDDKcCCyABLQAAQcUARw1oIAFBAWohAQxgC0GHASEDIAEgBEYNpQIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBiM8Aai0AAEcNaCAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpgILIAJBADYCACAGQQFqIQFBLQxpC0GIASEDIAEgBEYNpAIgAigCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABB0M8Aai0AAEcNZyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpQILIAJBADYCACAGQQFqIQFBKQxoCyABIARGBEBBiQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEVDF8LQZIBIQMgASAERg2aAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGhzwBqLQAARw1dIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAybAgsgAkEANgIAIAZBAWohAUEeDF4LIAEgBEYEQEGTASEDDJoCCyABLQAAQcwARw1bIAFBAWohAUEKDF0LIAEgBEYEQEGUASEDDJkCCwJAAkAgAS0AAEHBAGsODwBcXFxcXFxcXFxcXFxcAVwLIAFBAWohAUH+ACEDDIACCyABQQFqIQFB/wAhAwz/AQsgASAERgRAQZUBIQMMmAILAkACQCABLQAAQcEAaw4DAFsBWwsgAUEBaiEBQf0AIQMM/wELIAFBAWohAUGAASEDDP4BC0GWASEDIAEgBEYNlgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBp88Aai0AAEcNWSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlwILIAJBADYCACAGQQFqIQFBCwxaCyABIARGBEBBlwEhAwyWAgsCQAJAAkACQCABLQAAQS1rDiMAW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1sBW1tbW1sCW1tbA1sLIAFBAWohAUH7ACEDDP8BCyABQQFqIQFB/AAhAwz+AQsgAUEBaiEBQYEBIQMM/QELIAFBAWohAUGCASEDDPwBC0GYASEDIAEgBEYNlAIgAigCACIAIAQgAWtqIQUgASAAa0EEaiEGAkADQCABLQAAIABBqc8Aai0AAEcNVyAAQQRGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlQILIAJBADYCACAGQQFqIQFBGQxYC0GZASEDIAEgBEYNkwIgAigCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBrs8Aai0AAEcNViAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlAILIAJBADYCACAGQQFqIQFBBgxXC0GaASEDIAEgBEYNkgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBtM8Aai0AAEcNVSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkwILIAJBADYCACAGQQFqIQFBHAxWC0GbASEDIAEgBEYNkQIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBts8Aai0AAEcNVCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkgILIAJBADYCACAGQQFqIQFBJwxVCyABIARGBEBBnAEhAwyRAgsCQAJAIAEtAABB1ABrDgIAAVQLIAFBAWohAUGGASEDDPgBCyABQQFqIQFBhwEhAwz3AQtBnQEhAyABIARGDY8CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjPAGotAABHDVIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADJACCyACQQA2AgAgBkEBaiEBQSYMUwtBngEhAyABIARGDY4CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbrPAGotAABHDVEgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI8CCyACQQA2AgAgBkEBaiEBQQMMUgtBnwEhAyABIARGDY0CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDVAgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI4CCyACQQA2AgAgBkEBaiEBQQwMUQtBoAEhAyABIARGDYwCIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQbzPAGotAABHDU8gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI0CCyACQQA2AgAgBkEBaiEBQQ0MUAsgASAERgRAQaEBIQMMjAILAkACQCABLQAAQcYAaw4LAE9PT09PT09PTwFPCyABQQFqIQFBiwEhAwzzAQsgAUEBaiEBQYwBIQMM8gELIAEgBEYEQEGiASEDDIsCCyABLQAAQdAARw1MIAFBAWohAQxGCyABIARGBEBBowEhAwyKAgsCQAJAIAEtAABByQBrDgcBTU1NTU0ATQsgAUEBaiEBQY4BIQMM8QELIAFBAWohAUEiDE0LQaQBIQMgASAERg2IAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHAzwBqLQAARw1LIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyJAgsgAkEANgIAIAZBAWohAUEdDEwLIAEgBEYEQEGlASEDDIgCCwJAAkAgAS0AAEHSAGsOAwBLAUsLIAFBAWohAUGQASEDDO8BCyABQQFqIQFBBAxLCyABIARGBEBBpgEhAwyHAgsCQAJAAkACQAJAIAEtAABBwQBrDhUATU1NTU1NTU1NTQFNTQJNTQNNTQRNCyABQQFqIQFBiAEhAwzxAQsgAUEBaiEBQYkBIQMM8AELIAFBAWohAUGKASEDDO8BCyABQQFqIQFBjwEhAwzuAQsgAUEBaiEBQZEBIQMM7QELQacBIQMgASAERg2FAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHtzwBqLQAARw1IIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyGAgsgAkEANgIAIAZBAWohAUERDEkLQagBIQMgASAERg2EAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHCzwBqLQAARw1HIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyFAgsgAkEANgIAIAZBAWohAUEsDEgLQakBIQMgASAERg2DAiACKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHFzwBqLQAARw1GIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyEAgsgAkEANgIAIAZBAWohAUErDEcLQaoBIQMgASAERg2CAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHKzwBqLQAARw1FIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyDAgsgAkEANgIAIAZBAWohAUEUDEYLIAEgBEYEQEGrASEDDIICCwJAAkACQAJAIAEtAABBwgBrDg8AAQJHR0dHR0dHR0dHRwNHCyABQQFqIQFBkwEhAwzrAQsgAUEBaiEBQZQBIQMM6gELIAFBAWohAUGVASEDDOkBCyABQQFqIQFBlgEhAwzoAQsgASAERgRAQawBIQMMgQILIAEtAABBxQBHDUIgAUEBaiEBDD0LQa0BIQMgASAERg3/ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHNzwBqLQAARw1CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyAAgsgAkEANgIAIAZBAWohAUEODEMLIAEgBEYEQEGuASEDDP8BCyABLQAAQdAARw1AIAFBAWohAUElDEILQa8BIQMgASAERg39ASACKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEHQzwBqLQAARw1AIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz+AQsgAkEANgIAIAZBAWohAUEqDEELIAEgBEYEQEGwASEDDP0BCwJAAkAgAS0AAEHVAGsOCwBAQEBAQEBAQEABQAsgAUEBaiEBQZoBIQMM5AELIAFBAWohAUGbASEDDOMBCyABIARGBEBBsQEhAwz8AQsCQAJAIAEtAABBwQBrDhQAPz8/Pz8/Pz8/Pz8/Pz8/Pz8/AT8LIAFBAWohAUGZASEDDOMBCyABQQFqIQFBnAEhAwziAQtBsgEhAyABIARGDfoBIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQdnPAGotAABHDT0gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPsBCyACQQA2AgAgBkEBaiEBQSEMPgtBswEhAyABIARGDfkBIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAS0AACAAQd3PAGotAABHDTwgAEEGRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPoBCyACQQA2AgAgBkEBaiEBQRoMPQsgASAERgRAQbQBIQMM+QELAkACQAJAIAEtAABBxQBrDhEAPT09PT09PT09AT09PT09Aj0LIAFBAWohAUGdASEDDOEBCyABQQFqIQFBngEhAwzgAQsgAUEBaiEBQZ8BIQMM3wELQbUBIQMgASAERg33ASACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHkzwBqLQAARw06IABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz4AQsgAkEANgIAIAZBAWohAUEoDDsLQbYBIQMgASAERg32ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHqzwBqLQAARw05IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz3AQsgAkEANgIAIAZBAWohAUEHDDoLIAEgBEYEQEG3ASEDDPYBCwJAAkAgAS0AAEHFAGsODgA5OTk5OTk5OTk5OTkBOQsgAUEBaiEBQaEBIQMM3QELIAFBAWohAUGiASEDDNwBC0G4ASEDIAEgBEYN9AEgAigCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB7c8Aai0AAEcNNyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9QELIAJBADYCACAGQQFqIQFBEgw4C0G5ASEDIAEgBEYN8wEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8M8Aai0AAEcNNiAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9AELIAJBADYCACAGQQFqIQFBIAw3C0G6ASEDIAEgBEYN8gEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8s8Aai0AAEcNNSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8wELIAJBADYCACAGQQFqIQFBDww2CyABIARGBEBBuwEhAwzyAQsCQAJAIAEtAABByQBrDgcANTU1NTUBNQsgAUEBaiEBQaUBIQMM2QELIAFBAWohAUGmASEDDNgBC0G8ASEDIAEgBEYN8AEgAigCACIAIAQgAWtqIQUgASAAa0EHaiEGAkADQCABLQAAIABB9M8Aai0AAEcNMyAAQQdGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8QELIAJBADYCACAGQQFqIQFBGww0CyABIARGBEBBvQEhAwzwAQsCQAJAAkAgAS0AAEHCAGsOEgA0NDQ0NDQ0NDQBNDQ0NDQ0AjQLIAFBAWohAUGkASEDDNgBCyABQQFqIQFBpwEhAwzXAQsgAUEBaiEBQagBIQMM1gELIAEgBEYEQEG+ASEDDO8BCyABLQAAQc4ARw0wIAFBAWohAQwsCyABIARGBEBBvwEhAwzuAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAAQcEAaw4VAAECAz8EBQY/Pz8HCAkKCz8MDQ4PPwsgAUEBaiEBQegAIQMM4wELIAFBAWohAUHpACEDDOIBCyABQQFqIQFB7gAhAwzhAQsgAUEBaiEBQfIAIQMM4AELIAFBAWohAUHzACEDDN8BCyABQQFqIQFB9gAhAwzeAQsgAUEBaiEBQfcAIQMM3QELIAFBAWohAUH6ACEDDNwBCyABQQFqIQFBgwEhAwzbAQsgAUEBaiEBQYQBIQMM2gELIAFBAWohAUGFASEDDNkBCyABQQFqIQFBkgEhAwzYAQsgAUEBaiEBQZgBIQMM1wELIAFBAWohAUGgASEDDNYBCyABQQFqIQFBowEhAwzVAQsgAUEBaiEBQaoBIQMM1AELIAEgBEcEQCACQRA2AgggAiABNgIEQasBIQMM1AELQcABIQMM7AELQQAhAAJAIAIoAjgiA0UNACADKAI0IgNFDQAgAiADEQAAIQALIABFDV4gAEEVRw0HIAJB0QA2AhwgAiABNgIUIAJBsBc2AhAgAkEVNgIMQQAhAwzrAQsgAUEBaiABIARHDQgaQcIBIQMM6gELA0ACQCABLQAAQQprDgQIAAALAAsgBCABQQFqIgFHDQALQcMBIQMM6QELIAEgBEcEQCACQRE2AgggAiABNgIEQQEhAwzQAQtBxAEhAwzoAQsgASAERgRAQcUBIQMM6AELAkACQCABLQAAQQprDgQBKCgAKAsgAUEBagwJCyABQQFqDAULIAEgBEYEQEHGASEDDOcBCwJAAkAgAS0AAEEKaw4XAQsLAQsLCwsLCwsLCwsLCwsLCwsLCwALCyABQQFqIQELQbABIQMMzQELIAEgBEYEQEHIASEDDOYBCyABLQAAQSBHDQkgAkEAOwEyIAFBAWohAUGzASEDDMwBCwNAIAEhAAJAIAEgBEcEQCABLQAAQTBrQf8BcSIDQQpJDQEMJwtBxwEhAwzmAQsCQCACLwEyIgFBmTNLDQAgAiABQQpsIgU7ATIgBUH+/wNxIANB//8Dc0sNACAAQQFqIQEgAiADIAVqIgM7ATIgA0H//wNxQegHSQ0BCwtBACEDIAJBADYCHCACQcEJNgIQIAJBDTYCDCACIABBAWo2AhQM5AELIAJBADYCHCACIAE2AhQgAkHwDDYCECACQRs2AgxBACEDDOMBCyACKAIEIQAgAkEANgIEIAIgACABECYiAA0BIAFBAWoLIQFBrQEhAwzIAQsgAkHBATYCHCACIAA2AgwgAiABQQFqNgIUQQAhAwzgAQsgAigCBCEAIAJBADYCBCACIAAgARAmIgANASABQQFqCyEBQa4BIQMMxQELIAJBwgE2AhwgAiAANgIMIAIgAUEBajYCFEEAIQMM3QELIAJBADYCHCACIAE2AhQgAkGXCzYCECACQQ02AgxBACEDDNwBCyACQQA2AhwgAiABNgIUIAJB4xA2AhAgAkEJNgIMQQAhAwzbAQsgAkECOgAoDKwBC0EAIQMgAkEANgIcIAJBrws2AhAgAkECNgIMIAIgAUEBajYCFAzZAQtBAiEDDL8BC0ENIQMMvgELQSYhAwy9AQtBFSEDDLwBC0EWIQMMuwELQRghAwy6AQtBHCEDDLkBC0EdIQMMuAELQSAhAwy3AQtBISEDDLYBC0EjIQMMtQELQcYAIQMMtAELQS4hAwyzAQtBPSEDDLIBC0HLACEDDLEBC0HOACEDDLABC0HYACEDDK8BC0HZACEDDK4BC0HbACEDDK0BC0HxACEDDKwBC0H0ACEDDKsBC0GNASEDDKoBC0GXASEDDKkBC0GpASEDDKgBC0GvASEDDKcBC0GxASEDDKYBCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB8Rs2AhAgAkEGNgIMDL0BCyACQQA2AgAgBkEBaiEBQSQLOgApIAIoAgQhACACQQA2AgQgAiAAIAEQJyIARQRAQeUAIQMMowELIAJB+QA2AhwgAiABNgIUIAIgADYCDEEAIQMMuwELIABBFUcEQCACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwy7AQsgAkH4ADYCHCACIAE2AhQgAkHKGDYCECACQRU2AgxBACEDDLoBCyACQQA2AhwgAiABNgIUIAJBjhs2AhAgAkEGNgIMQQAhAwy5AQsgAkEANgIcIAIgATYCFCACQf4RNgIQIAJBBzYCDEEAIQMMuAELIAJBADYCHCACIAE2AhQgAkGMHDYCECACQQc2AgxBACEDDLcBCyACQQA2AhwgAiABNgIUIAJBww82AhAgAkEHNgIMQQAhAwy2AQsgAkEANgIcIAIgATYCFCACQcMPNgIQIAJBBzYCDEEAIQMMtQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==`,`base64`)})),te=/* @__PURE__ */ m(((e,t)=>{let n=[`GET`,`HEAD`,`POST`],r=new Set(n),i=[101,204,205,304],a=[301,302,303,307,308],o=new Set(a),s=/* @__PURE__ */ `1.7.9.11.13.15.17.19.20.21.22.23.25.37.42.43.53.69.77.79.87.95.101.102.103.104.109.110.111.113.115.117.119.123.135.137.139.143.161.179.389.427.465.512.513.514.515.526.530.531.532.540.548.554.556.563.587.601.636.989.990.993.995.1719.1720.1723.2049.3659.4045.4190.5060.5061.6000.6566.6665.6666.6667.6668.6669.6679.6697.10080`.split(`.`),c=new Set(s),l=[``,`no-referrer`,`no-referrer-when-downgrade`,`same-origin`,`origin`,`strict-origin`,`origin-when-cross-origin`,`strict-origin-when-cross-origin`,`unsafe-url`],u=new Set(l),d=[`follow`,`manual`,`error`],f=[`GET`,`HEAD`,`OPTIONS`,`TRACE`],p=new Set(f),m=[`navigate`,`same-origin`,`no-cors`,`cors`],h=[`omit`,`same-origin`,`include`],g=[`default`,`no-store`,`reload`,`no-cache`,`force-cache`,`only-if-cached`],_=[`content-encoding`,`content-language`,`content-location`,`content-type`,`content-length`],v=[`half`],y=[`CONNECT`,`TRACE`,`TRACK`],b=new Set(y),x=[`audio`,`audioworklet`,`font`,`image`,`manifest`,`paintworklet`,`script`,`style`,`track`,`video`,`xslt`,``];t.exports={subresource:x,forbiddenMethods:y,requestBodyHeader:_,referrerPolicy:l,requestRedirect:d,requestMode:m,requestCredentials:h,requestCache:g,redirectStatus:a,corsSafeListedMethods:n,nullBodyStatus:i,safeMethods:f,badPorts:s,requestDuplex:v,subresourceSet:new Set(x),badPortsSet:c,redirectStatusSet:o,corsSafeListedMethodsSet:r,safeMethodsSet:p,forbiddenMethodsSet:b,referrerPolicySet:u}})),R=/* @__PURE__ */ m(((e,t)=>{let n=Symbol.for(`undici.globalOrigin.1`);function r(){return globalThis[n]}function i(e){if(e===void 0){Object.defineProperty(globalThis,n,{value:void 0,writable:!0,enumerable:!1,configurable:!1});return}let t=new URL(e);if(t.protocol!==`http:`&&t.protocol!==`https:`)throw TypeError(`Only http & https urls are allowed, received ${t.protocol}`);Object.defineProperty(globalThis,n,{value:t,writable:!0,enumerable:!1,configurable:!1})}t.exports={getGlobalOrigin:r,setGlobalOrigin:i}})),z=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),r=new TextEncoder,i=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/,a=/[\u000A\u000D\u0009\u0020]/,o=/[\u0009\u000A\u000C\u000D\u0020]/g,s=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function c(e){n(e.protocol===`data:`);let t=l(e,!0);t=t.slice(5);let r={position:0},i=d(`,`,t,r),a=i.length;if(i=w(i,!0,!0),r.position>=t.length)return`failure`;r.position++;let o=f(t.slice(a+1));if(/;(\u0020){0,}base64$/i.test(i)){if(o=v(E(o)),o===`failure`)return`failure`;i=i.slice(0,-6),i=i.replace(/(\u0020)+$/,``),i=i.slice(0,-1)}i.startsWith(`;`)&&(i=`text/plain`+i);let s=_(i);return s===`failure`&&(s=_(`text/plain;charset=US-ASCII`)),{mimeType:s,body:o}}function l(e,t=!1){if(!t)return e.href;let n=e.href,r=e.hash.length,i=r===0?n:n.substring(0,n.length-r);return!r&&n.endsWith(`#`)?i.slice(0,-1):i}function u(e,t,n){let r=``;for(;n.position=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function m(e){return e>=48&&e<=57?e-48:(e&223)-55}function g(e){let t=e.length,n=new Uint8Array(t),r=0;for(let i=0;ie.length)return`failure`;t.position++;let r=d(`;`,e,t);if(r=S(r,!1,!0),r.length===0||!i.test(r))return`failure`;let o=n.toLowerCase(),c=r.toLowerCase(),l={type:o,subtype:c,parameters:/* @__PURE__ */ new Map,essence:`${o}/${c}`};for(;t.positiona.test(e),e,t);let n=u(e=>e!==`;`&&e!==`=`,e,t);if(n=n.toLowerCase(),t.positione.length)break;let r=null;if(e[t.position]===`"`)r=y(e,t,!0),d(`;`,e,t);else if(r=d(`;`,e,t),r=S(r,!1,!0),r.length===0)continue;n.length!==0&&i.test(n)&&(r.length===0||s.test(r))&&!l.parameters.has(n)&&l.parameters.set(n,r)}return l}function v(e){e=e.replace(o,``);let t=e.length;if(t%4==0&&e.charCodeAt(t-1)===61&&(--t,e.charCodeAt(t-1)===61&&--t),t%4==1||/[^+/0-9A-Za-z]/.test(e.length===t?e:e.substring(0,t)))return`failure`;let n=Buffer.from(e,`base64`);return new Uint8Array(n.buffer,n.byteOffset,n.byteLength)}function y(e,t,r){let i=t.position,a=``;for(n(e[t.position]===`"`),t.position++;a+=u(e=>e!==`"`&&e!==`\\`,e,t),!(t.position>=e.length);){let r=e[t.position];if(t.position++,r===`\\`){if(t.position>=e.length){a+=`\\`;break}a+=e[t.position],t.position++}else{n(r===`"`);break}}return r?a:e.slice(i,t.position)}function b(e){n(e!==`failure`);let{parameters:t,essence:r}=e,a=r;for(let[e,n]of t.entries())a+=`;`,a+=e,a+=`=`,i.test(n)||(n=n.replace(/(\\|")/g,`\\$1`),n=`"`+n,n+=`"`),a+=n;return a}function x(e){return e===13||e===10||e===9||e===32}function S(e,t=!0,n=!0){return T(e,t,n,x)}function C(e){return e===13||e===10||e===9||e===12||e===32}function w(e,t=!0,n=!0){return T(e,t,n,C)}function T(e,t,n,r){let i=0,a=e.length-1;if(t)for(;i0&&r(e.charCodeAt(a));)a--;return i===0&&a===e.length-1?e:e.slice(i,a+1)}function E(e){let t=e.length;if(65535>t)return String.fromCharCode.apply(null,e);let n=``,r=0,i=65535;for(;rt&&(i=t-r),n+=String.fromCharCode.apply(null,e.subarray(r,r+=i));return n}function D(e){switch(e.essence){case`application/ecmascript`:case`application/javascript`:case`application/x-ecmascript`:case`application/x-javascript`:case`text/ecmascript`:case`text/javascript`:case`text/javascript1.0`:case`text/javascript1.1`:case`text/javascript1.2`:case`text/javascript1.3`:case`text/javascript1.4`:case`text/javascript1.5`:case`text/jscript`:case`text/livescript`:case`text/x-ecmascript`:case`text/x-javascript`:return`text/javascript`;case`application/json`:case`text/json`:return`application/json`;case`image/svg+xml`:return`image/svg+xml`;case`text/xml`:case`application/xml`:return`application/xml`}return e.subtype.endsWith(`+json`)?`application/json`:e.subtype.endsWith(`+xml`)?`application/xml`:``}t.exports={dataURLProcessor:c,URLSerializer:l,collectASequenceOfCodePoints:u,collectASequenceOfCodePointsFast:d,stringPercentDecode:f,parseMIMEType:_,collectAnHTTPQuotedString:y,serializeAMimeType:b,removeChars:T,removeHTTPWhitespace:S,minimizeSupportedMimeType:D,HTTP_TOKEN_CODEPOINTS:i,isomorphicDecode:E}})),B=/* @__PURE__ */ m(((e,t)=>{let{types:n,inspect:r}=h(`node:util`),{markAsUncloneable:i}=h(`node:worker_threads`),{toUSVString:a}=O(),o={};o.converters={},o.util={},o.errors={},o.errors.exception=function(e){return/* @__PURE__ */ TypeError(`${e.header}: ${e.message}`)},o.errors.conversionFailed=function(e){let t=e.types.length===1?``:` one of`,n=`${e.argument} could not be converted to${t}: ${e.types.join(`, `)}.`;return o.errors.exception({header:e.prefix,message:n})},o.errors.invalidArgument=function(e){return o.errors.exception({header:e.prefix,message:`"${e.value}" is an invalid ${e.type}.`})},o.brandCheck=function(e,t,n){if(n?.strict!==!1){if(!(e instanceof t)){let e=/* @__PURE__ */ TypeError(`Illegal invocation`);throw e.code=`ERR_INVALID_THIS`,e}}else if(e?.[Symbol.toStringTag]!==t.prototype[Symbol.toStringTag]){let e=/* @__PURE__ */ TypeError(`Illegal invocation`);throw e.code=`ERR_INVALID_THIS`,e}},o.argumentLengthCheck=function({length:e},t,n){if(e{}),o.util.ConvertToInt=function(e,t,n,r){let i,a;t===64?(i=2**53-1,a=n===`unsigned`?0:(-2)**53+1):n===`unsigned`?(a=0,i=2**t-1):(a=(-2)**t-1,i=2**(t-1)-1);let s=Number(e);if(s===0&&(s=0),r?.enforceRange===!0){if(Number.isNaN(s)||s===1/0||s===-1/0)throw o.errors.exception({header:`Integer conversion`,message:`Could not convert ${o.util.Stringify(e)} to an integer.`});if(s=o.util.IntegerPart(s),si)throw o.errors.exception({header:`Integer conversion`,message:`Value must be between ${a}-${i}, got ${s}.`});return s}return!Number.isNaN(s)&&r?.clamp===!0?(s=Math.min(Math.max(s,a),i),s=Math.floor(s)%2==0?Math.floor(s):Math.ceil(s),s):Number.isNaN(s)||s===0&&Object.is(0,s)||s===1/0||s===-1/0?0:(s=o.util.IntegerPart(s),s%=2**t,n===`signed`&&s>=2**t-1?s-2**t:s)},o.util.IntegerPart=function(e){let t=Math.floor(Math.abs(e));return e<0?-1*t:t},o.util.Stringify=function(e){switch(o.util.Type(e)){case`Symbol`:return`Symbol(${e.description})`;case`Object`:return r(e);case`String`:return`"${e}"`;default:return`${e}`}},o.sequenceConverter=function(e){return(t,n,r,i)=>{if(o.util.Type(t)!==`Object`)throw o.errors.exception({header:n,message:`${r} (${o.util.Stringify(t)}) is not iterable.`});let a=typeof i==`function`?i():t?.[Symbol.iterator]?.(),s=[],c=0;if(a===void 0||typeof a.next!=`function`)throw o.errors.exception({header:n,message:`${r} is not iterable.`});for(;;){let{done:t,value:i}=a.next();if(t)break;s.push(e(i,n,`${r}[${c++}]`))}return s}},o.recordConverter=function(e,t){return(r,i,a)=>{if(o.util.Type(r)!==`Object`)throw o.errors.exception({header:i,message:`${a} ("${o.util.Type(r)}") is not an Object.`});let s={};if(!n.isProxy(r)){let n=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(let o of n){let n=e(o,i,a);s[n]=t(r[o],i,a)}return s}let c=Reflect.ownKeys(r);for(let n of c)if(Reflect.getOwnPropertyDescriptor(r,n)?.enumerable){let o=e(n,i,a);s[o]=t(r[n],i,a)}return s}},o.interfaceConverter=function(e){return(t,n,r,i)=>{if(i?.strict!==!1&&!(t instanceof e))throw o.errors.exception({header:n,message:`Expected ${r} ("${o.util.Stringify(t)}") to be an instance of ${e.name}.`});return t}},o.dictionaryConverter=function(e){return(t,n,r)=>{let i=o.util.Type(t),a={};if(i===`Null`||i===`Undefined`)return a;if(i!==`Object`)throw o.errors.exception({header:n,message:`Expected ${t} to be one of: Null, Undefined, Object.`});for(let i of e){let{key:e,defaultValue:s,required:c,converter:l}=i;if(c===!0&&!Object.hasOwn(t,e))throw o.errors.exception({header:n,message:`Missing required key "${e}".`});let u=t[e],d=Object.hasOwn(i,`defaultValue`);if(d&&u!==null&&(u??=s()),c||d||u!==void 0){if(u=l(u,n,`${r}.${e}`),i.allowedValues&&!i.allowedValues.includes(u))throw o.errors.exception({header:n,message:`${u} is not an accepted type. Expected one of ${i.allowedValues.join(`, `)}.`});a[e]=u}}return a}},o.nullableConverter=function(e){return(t,n,r)=>t===null?t:e(t,n,r)},o.converters.DOMString=function(e,t,n,r){if(e===null&&r?.legacyNullToEmptyString)return``;if(typeof e==`symbol`)throw o.errors.exception({header:t,message:`${n} is a symbol, which cannot be converted to a DOMString.`});return String(e)},o.converters.ByteString=function(e,t,n){let r=o.converters.DOMString(e,t,n);for(let e=0;e255)throw TypeError(`Cannot convert argument to a ByteString because the character at index ${e} has a value of ${r.charCodeAt(e)} which is greater than 255.`);return r},o.converters.USVString=a,o.converters.boolean=function(e){return!!e},o.converters.any=function(e){return e},o.converters[`long long`]=function(e,t,n){return o.util.ConvertToInt(e,64,`signed`,void 0,t,n)},o.converters[`unsigned long long`]=function(e,t,n){return o.util.ConvertToInt(e,64,`unsigned`,void 0,t,n)},o.converters[`unsigned long`]=function(e,t,n){return o.util.ConvertToInt(e,32,`unsigned`,void 0,t,n)},o.converters[`unsigned short`]=function(e,t,n,r){return o.util.ConvertToInt(e,16,`unsigned`,r,t,n)},o.converters.ArrayBuffer=function(e,t,r,i){if(o.util.Type(e)!==`Object`||!n.isAnyArrayBuffer(e))throw o.errors.conversionFailed({prefix:t,argument:`${r} ("${o.util.Stringify(e)}")`,types:[`ArrayBuffer`]});if(i?.allowShared===!1&&n.isSharedArrayBuffer(e))throw o.errors.exception({header:`ArrayBuffer`,message:`SharedArrayBuffer is not allowed.`});if(e.resizable||e.growable)throw o.errors.exception({header:`ArrayBuffer`,message:`Received a resizable ArrayBuffer.`});return e},o.converters.TypedArray=function(e,t,r,i,a){if(o.util.Type(e)!==`Object`||!n.isTypedArray(e)||e.constructor.name!==t.name)throw o.errors.conversionFailed({prefix:r,argument:`${i} ("${o.util.Stringify(e)}")`,types:[t.name]});if(a?.allowShared===!1&&n.isSharedArrayBuffer(e.buffer))throw o.errors.exception({header:`ArrayBuffer`,message:`SharedArrayBuffer is not allowed.`});if(e.buffer.resizable||e.buffer.growable)throw o.errors.exception({header:`ArrayBuffer`,message:`Received a resizable ArrayBuffer.`});return e},o.converters.DataView=function(e,t,r,i){if(o.util.Type(e)!==`Object`||!n.isDataView(e))throw o.errors.exception({header:t,message:`${r} is not a DataView.`});if(i?.allowShared===!1&&n.isSharedArrayBuffer(e.buffer))throw o.errors.exception({header:`ArrayBuffer`,message:`SharedArrayBuffer is not allowed.`});if(e.buffer.resizable||e.buffer.growable)throw o.errors.exception({header:`ArrayBuffer`,message:`Received a resizable ArrayBuffer.`});return e},o.converters.BufferSource=function(e,t,r,i){if(n.isAnyArrayBuffer(e))return o.converters.ArrayBuffer(e,t,r,{...i,allowShared:!1});if(n.isTypedArray(e))return o.converters.TypedArray(e,e.constructor,t,r,{...i,allowShared:!1});if(n.isDataView(e))return o.converters.DataView(e,t,r,{...i,allowShared:!1});throw o.errors.conversionFailed({prefix:t,argument:`${r} ("${o.util.Stringify(e)}")`,types:[`BufferSource`]})},o.converters[`sequence`]=o.sequenceConverter(o.converters.ByteString),o.converters[`sequence>`]=o.sequenceConverter(o.converters[`sequence`]),o.converters[`record`]=o.recordConverter(o.converters.ByteString,o.converters.ByteString),t.exports={webidl:o}})),V=/* @__PURE__ */ m(((e,t)=>{let{Transform:n}=h(`node:stream`),r=h(`node:zlib`),{redirectStatusSet:i,referrerPolicySet:a,badPortsSet:o}=te(),{getGlobalOrigin:s}=R(),{collectASequenceOfCodePoints:c,collectAnHTTPQuotedString:l,removeChars:u,parseMIMEType:d}=z(),{performance:f}=h(`node:perf_hooks`),{isBlobLike:p,ReadableStreamFrom:m,isValidHTTPToken:g,normalizedMethodRecordsBase:_}=O(),v=h(`node:assert`),{isUint8Array:y}=h(`node:util/types`),{webidl:b}=B(),x=[],S;try{S=h(`node:crypto`);let e=[`sha256`,`sha384`,`sha512`];x=S.getHashes().filter(t=>e.includes(t))}catch{}function C(e){let t=e.urlList,n=t.length;return n===0?null:t[n-1].toString()}function w(e,t){if(!i.has(e.status))return null;let n=e.headersList.get(`location`,!0);return n!==null&&N(n)&&(T(n)||(n=E(n)),n=new URL(n,C(e))),n&&!n.hash&&(n.hash=t),n}function T(e){for(let t=0;t126||n<32)return!1}return!0}function E(e){return Buffer.from(e,`binary`).toString(`utf8`)}function D(e){return e.urlList[e.urlList.length-1]}function k(e){let t=D(e);return Te(t)&&o.has(t.port)?`blocked`:`allowed`}function A(e){return e instanceof Error||e?.constructor?.name===`Error`||e?.constructor?.name===`DOMException`}function j(e){for(let t=0;t=32&&n<=126||n>=128&&n<=255))return!1}return!0}let M=g;function N(e){return(e[0]===` `||e[0]===` `||e[e.length-1]===` `||e[e.length-1]===` `||e.includes(` -`)||e.includes(`\r`)||e.includes(`\0`))===!1}function P(e,t){let{headersList:n}=t,r=(n.get(`referrer-policy`,!0)??``).split(`,`),i=``;if(r.length>0)for(let e=r.length;e!==0;e--){let t=r[e-1].trim();if(a.has(t)){i=t;break}}i!==``&&(e.referrerPolicy=i)}function F(){return`allowed`}function I(){return`success`}function L(){return`success`}function ee(e){let t=null;t=e.mode,e.headersList.set(`sec-fetch-mode`,t,!0)}function V(e){let t=e.origin;if(t!==`client`&&t!==void 0){if(e.responseTainting===`cors`||e.mode===`websocket`)e.headersList.append(`origin`,t,!0);else if(e.method!==`GET`&&e.method!==`HEAD`){switch(e.referrerPolicy){case`no-referrer`:t=null;break;case`no-referrer-when-downgrade`:case`strict-origin`:case`strict-origin-when-cross-origin`:e.origin&&we(e.origin)&&!we(D(e))&&(t=null);break;case`same-origin`:de(e,D(e))||(t=null)}e.headersList.append(`origin`,t,!0)}}}function H(e,t){return e}function ne(e,t,n){return!e?.startTime||e.startTime4096&&(r=i);let a=de(e,r),o=G(r)&&!G(e.url);switch(t){case`origin`:return i??W(n,!0);case`unsafe-url`:return r;case`same-origin`:return a?i:`no-referrer`;case`origin-when-cross-origin`:return a?r:i;case`strict-origin-when-cross-origin`:{let t=D(e);return de(r,t)?r:G(r)&&!G(t)?`no-referrer`:i}default:return o?`no-referrer`:i}}function W(e,t){return v(e instanceof URL),e=new URL(e),e.protocol===`file:`||e.protocol===`about:`||e.protocol===`blank:`?`no-referrer`:(e.username=``,e.password=``,e.hash=``,t&&(e.pathname=``,e.search=``),e)}function G(e){return e instanceof URL?e.href===`about:blank`||e.href===`about:srcdoc`||e.protocol===`data:`||e.protocol===`file:`||t(e.origin):!1;function t(e){if(e==null||e===`null`)return!1;let t=new URL(e);return!!(t.protocol===`https:`||t.protocol===`wss:`||/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(t.hostname)||t.hostname===`localhost`||t.hostname.includes(`localhost.`)||t.hostname.endsWith(`.localhost`))}}function se(e,t){ +`,t.message,t.stack);var i=/* @__PURE__ */ Error(`tunneling socket could not be established, cause=`+t.message);i.code=`ECONNRESET`,e.request.emit(`error`,i),n.removeSocket(r)}},i.prototype.removeSocket=function(e){var t=this.sockets.indexOf(e);if(t!==-1){this.sockets.splice(t,1);var n=this.requests.shift();n&&this.createSocket(n,function(e){n.request.onSocket(e)})}};function a(e,t,n){return typeof e==`string`?{host:e,port:t,localAddress:n}:e}function o(e){for(var t=1,n=arguments.length;t{t.exports=S()})),w=/* @__PURE__ */ m(((e,t)=>{t.exports={kClose:Symbol(`close`),kDestroy:Symbol(`destroy`),kDispatch:Symbol(`dispatch`),kUrl:Symbol(`url`),kWriting:Symbol(`writing`),kResuming:Symbol(`resuming`),kQueue:Symbol(`queue`),kConnect:Symbol(`connect`),kConnecting:Symbol(`connecting`),kKeepAliveDefaultTimeout:Symbol(`default keep alive timeout`),kKeepAliveMaxTimeout:Symbol(`max keep alive timeout`),kKeepAliveTimeoutThreshold:Symbol(`keep alive timeout threshold`),kKeepAliveTimeoutValue:Symbol(`keep alive timeout`),kKeepAlive:Symbol(`keep alive`),kHeadersTimeout:Symbol(`headers timeout`),kBodyTimeout:Symbol(`body timeout`),kServerName:Symbol(`server name`),kLocalAddress:Symbol(`local address`),kHost:Symbol(`host`),kNoRef:Symbol(`no ref`),kBodyUsed:Symbol(`used`),kBody:Symbol(`abstracted request body`),kRunning:Symbol(`running`),kBlocking:Symbol(`blocking`),kPending:Symbol(`pending`),kSize:Symbol(`size`),kBusy:Symbol(`busy`),kQueued:Symbol(`queued`),kFree:Symbol(`free`),kConnected:Symbol(`connected`),kClosed:Symbol(`closed`),kNeedDrain:Symbol(`need drain`),kReset:Symbol(`reset`),kDestroyed:Symbol.for(`nodejs.stream.destroyed`),kResume:Symbol(`resume`),kOnError:Symbol(`on error`),kMaxHeadersSize:Symbol(`max headers size`),kRunningIdx:Symbol(`running index`),kPendingIdx:Symbol(`pending index`),kError:Symbol(`error`),kClients:Symbol(`clients`),kClient:Symbol(`client`),kParser:Symbol(`parser`),kOnDestroyed:Symbol(`destroy callbacks`),kPipelining:Symbol(`pipelining`),kSocket:Symbol(`socket`),kHostHeader:Symbol(`host header`),kConnector:Symbol(`connector`),kStrictContentLength:Symbol(`strict content length`),kMaxRedirections:Symbol(`maxRedirections`),kMaxRequests:Symbol(`maxRequestsPerClient`),kProxy:Symbol(`proxy agent options`),kCounter:Symbol(`socket request counter`),kInterceptors:Symbol(`dispatch interceptors`),kMaxResponseSize:Symbol(`max response size`),kHTTP2Session:Symbol(`http2Session`),kHTTP2SessionState:Symbol(`http2Session state`),kRetryHandlerDefaultRetry:Symbol(`retry agent default retry`),kConstruct:Symbol(`constructable`),kListeners:Symbol(`listeners`),kHTTPContext:Symbol(`http context`),kMaxConcurrentStreams:Symbol(`max concurrent streams`),kNoProxyAgent:Symbol(`no proxy agent`),kHttpProxyAgent:Symbol(`http proxy agent`),kHttpsProxyAgent:Symbol(`https proxy agent`)}})),T=/* @__PURE__ */ m(((e,t)=>{let n=Symbol.for(`undici.error.UND_ERR`);var r=class extends Error{constructor(e){super(e),this.name=`UndiciError`,this.code=`UND_ERR`}static[Symbol.hasInstance](e){return e&&e[n]===!0}[n]=!0};let i=Symbol.for(`undici.error.UND_ERR_CONNECT_TIMEOUT`);var a=class extends r{constructor(e){super(e),this.name=`ConnectTimeoutError`,this.message=e||`Connect Timeout Error`,this.code=`UND_ERR_CONNECT_TIMEOUT`}static[Symbol.hasInstance](e){return e&&e[i]===!0}[i]=!0};let o=Symbol.for(`undici.error.UND_ERR_HEADERS_TIMEOUT`);var s=class extends r{constructor(e){super(e),this.name=`HeadersTimeoutError`,this.message=e||`Headers Timeout Error`,this.code=`UND_ERR_HEADERS_TIMEOUT`}static[Symbol.hasInstance](e){return e&&e[o]===!0}[o]=!0};let c=Symbol.for(`undici.error.UND_ERR_HEADERS_OVERFLOW`);var l=class extends r{constructor(e){super(e),this.name=`HeadersOverflowError`,this.message=e||`Headers Overflow Error`,this.code=`UND_ERR_HEADERS_OVERFLOW`}static[Symbol.hasInstance](e){return e&&e[c]===!0}[c]=!0};let u=Symbol.for(`undici.error.UND_ERR_BODY_TIMEOUT`);var d=class extends r{constructor(e){super(e),this.name=`BodyTimeoutError`,this.message=e||`Body Timeout Error`,this.code=`UND_ERR_BODY_TIMEOUT`}static[Symbol.hasInstance](e){return e&&e[u]===!0}[u]=!0};let f=Symbol.for(`undici.error.UND_ERR_RESPONSE_STATUS_CODE`);var p=class extends r{constructor(e,t,n,r){super(e),this.name=`ResponseStatusCodeError`,this.message=e||`Response Status Code Error`,this.code=`UND_ERR_RESPONSE_STATUS_CODE`,this.body=r,this.status=t,this.statusCode=t,this.headers=n}static[Symbol.hasInstance](e){return e&&e[f]===!0}[f]=!0};let m=Symbol.for(`undici.error.UND_ERR_INVALID_ARG`);var h=class extends r{constructor(e){super(e),this.name=`InvalidArgumentError`,this.message=e||`Invalid Argument Error`,this.code=`UND_ERR_INVALID_ARG`}static[Symbol.hasInstance](e){return e&&e[m]===!0}[m]=!0};let g=Symbol.for(`undici.error.UND_ERR_INVALID_RETURN_VALUE`);var _=class extends r{constructor(e){super(e),this.name=`InvalidReturnValueError`,this.message=e||`Invalid Return Value Error`,this.code=`UND_ERR_INVALID_RETURN_VALUE`}static[Symbol.hasInstance](e){return e&&e[g]===!0}[g]=!0};let v=Symbol.for(`undici.error.UND_ERR_ABORT`);var y=class extends r{constructor(e){super(e),this.name=`AbortError`,this.message=e||`The operation was aborted`,this.code=`UND_ERR_ABORT`}static[Symbol.hasInstance](e){return e&&e[v]===!0}[v]=!0};let b=Symbol.for(`undici.error.UND_ERR_ABORTED`);var x=class extends y{constructor(e){super(e),this.name=`AbortError`,this.message=e||`Request aborted`,this.code=`UND_ERR_ABORTED`}static[Symbol.hasInstance](e){return e&&e[b]===!0}[b]=!0};let S=Symbol.for(`undici.error.UND_ERR_INFO`);var C=class extends r{constructor(e){super(e),this.name=`InformationalError`,this.message=e||`Request information`,this.code=`UND_ERR_INFO`}static[Symbol.hasInstance](e){return e&&e[S]===!0}[S]=!0};let w=Symbol.for(`undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH`);var T=class extends r{constructor(e){super(e),this.name=`RequestContentLengthMismatchError`,this.message=e||`Request body length does not match content-length header`,this.code=`UND_ERR_REQ_CONTENT_LENGTH_MISMATCH`}static[Symbol.hasInstance](e){return e&&e[w]===!0}[w]=!0};let E=Symbol.for(`undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH`);var D=class extends r{constructor(e){super(e),this.name=`ResponseContentLengthMismatchError`,this.message=e||`Response body length does not match content-length header`,this.code=`UND_ERR_RES_CONTENT_LENGTH_MISMATCH`}static[Symbol.hasInstance](e){return e&&e[E]===!0}[E]=!0};let O=Symbol.for(`undici.error.UND_ERR_DESTROYED`);var k=class extends r{constructor(e){super(e),this.name=`ClientDestroyedError`,this.message=e||`The client is destroyed`,this.code=`UND_ERR_DESTROYED`}static[Symbol.hasInstance](e){return e&&e[O]===!0}[O]=!0};let A=Symbol.for(`undici.error.UND_ERR_CLOSED`);var j=class extends r{constructor(e){super(e),this.name=`ClientClosedError`,this.message=e||`The client is closed`,this.code=`UND_ERR_CLOSED`}static[Symbol.hasInstance](e){return e&&e[A]===!0}[A]=!0};let M=Symbol.for(`undici.error.UND_ERR_SOCKET`);var N=class extends r{constructor(e,t){super(e),this.name=`SocketError`,this.message=e||`Socket error`,this.code=`UND_ERR_SOCKET`,this.socket=t}static[Symbol.hasInstance](e){return e&&e[M]===!0}[M]=!0};let P=Symbol.for(`undici.error.UND_ERR_NOT_SUPPORTED`);var F=class extends r{constructor(e){super(e),this.name=`NotSupportedError`,this.message=e||`Not supported error`,this.code=`UND_ERR_NOT_SUPPORTED`}static[Symbol.hasInstance](e){return e&&e[P]===!0}[P]=!0};let I=Symbol.for(`undici.error.UND_ERR_BPL_MISSING_UPSTREAM`);var L=class extends r{constructor(e){super(e),this.name=`MissingUpstreamError`,this.message=e||`No upstream has been added to the BalancedPool`,this.code=`UND_ERR_BPL_MISSING_UPSTREAM`}static[Symbol.hasInstance](e){return e&&e[I]===!0}[I]=!0};let ee=Symbol.for(`undici.error.UND_ERR_HTTP_PARSER`);var te=class extends Error{constructor(e,t,n){super(e),this.name=`HTTPParserError`,this.code=t?`HPE_${t}`:void 0,this.data=n?n.toString():void 0}static[Symbol.hasInstance](e){return e&&e[ee]===!0}[ee]=!0};let R=Symbol.for(`undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE`);var z=class extends r{constructor(e){super(e),this.name=`ResponseExceededMaxSizeError`,this.message=e||`Response content exceeded max size`,this.code=`UND_ERR_RES_EXCEEDED_MAX_SIZE`}static[Symbol.hasInstance](e){return e&&e[R]===!0}[R]=!0};let B=Symbol.for(`undici.error.UND_ERR_REQ_RETRY`);var V=class extends r{constructor(e,t,{headers:n,data:r}){super(e),this.name=`RequestRetryError`,this.message=e||`Request retry error`,this.code=`UND_ERR_REQ_RETRY`,this.statusCode=t,this.data=r,this.headers=n}static[Symbol.hasInstance](e){return e&&e[B]===!0}[B]=!0};let H=Symbol.for(`undici.error.UND_ERR_RESPONSE`);var ne=class extends r{constructor(e,t,{headers:n,data:r}){super(e),this.name=`ResponseError`,this.message=e||`Response error`,this.code=`UND_ERR_RESPONSE`,this.statusCode=t,this.data=r,this.headers=n}static[Symbol.hasInstance](e){return e&&e[H]===!0}[H]=!0};let re=Symbol.for(`undici.error.UND_ERR_PRX_TLS`);var U=class extends r{constructor(e,t,n){super(t,{cause:e,...n??{}}),this.name=`SecureProxyConnectionError`,this.message=t||`Secure Proxy Connection failed`,this.code=`UND_ERR_PRX_TLS`,this.cause=e}static[Symbol.hasInstance](e){return e&&e[re]===!0}[re]=!0};let ie=Symbol.for(`undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED`);t.exports={AbortError:y,HTTPParserError:te,UndiciError:r,HeadersTimeoutError:s,HeadersOverflowError:l,BodyTimeoutError:d,RequestContentLengthMismatchError:T,ConnectTimeoutError:a,ResponseStatusCodeError:p,InvalidArgumentError:h,InvalidReturnValueError:_,RequestAbortedError:x,ClientDestroyedError:k,ClientClosedError:j,InformationalError:C,SocketError:N,NotSupportedError:F,ResponseContentLengthMismatchError:D,BalancedPoolMissingUpstreamError:L,ResponseExceededMaxSizeError:z,RequestRetryError:V,ResponseError:ne,SecureProxyConnectionError:U,MessageSizeExceededError:class extends r{constructor(e){super(e),this.name=`MessageSizeExceededError`,this.message=e||`Max decompressed message size exceeded`,this.code=`UND_ERR_WS_MESSAGE_SIZE_EXCEEDED`}static[Symbol.hasInstance](e){return e&&e[ie]===!0}get[ie](){return!0}}}})),E=/* @__PURE__ */ m(((e,t)=>{let n={},r=/* @__PURE__ */ `Accept.Accept-Encoding.Accept-Language.Accept-Ranges.Access-Control-Allow-Credentials.Access-Control-Allow-Headers.Access-Control-Allow-Methods.Access-Control-Allow-Origin.Access-Control-Expose-Headers.Access-Control-Max-Age.Access-Control-Request-Headers.Access-Control-Request-Method.Age.Allow.Alt-Svc.Alt-Used.Authorization.Cache-Control.Clear-Site-Data.Connection.Content-Disposition.Content-Encoding.Content-Language.Content-Length.Content-Location.Content-Range.Content-Security-Policy.Content-Security-Policy-Report-Only.Content-Type.Cookie.Cross-Origin-Embedder-Policy.Cross-Origin-Opener-Policy.Cross-Origin-Resource-Policy.Date.Device-Memory.Downlink.ECT.ETag.Expect.Expect-CT.Expires.Forwarded.From.Host.If-Match.If-Modified-Since.If-None-Match.If-Range.If-Unmodified-Since.Keep-Alive.Last-Modified.Link.Location.Max-Forwards.Origin.Permissions-Policy.Pragma.Proxy-Authenticate.Proxy-Authorization.RTT.Range.Referer.Referrer-Policy.Refresh.Retry-After.Sec-WebSocket-Accept.Sec-WebSocket-Extensions.Sec-WebSocket-Key.Sec-WebSocket-Protocol.Sec-WebSocket-Version.Server.Server-Timing.Service-Worker-Allowed.Service-Worker-Navigation-Preload.Set-Cookie.SourceMap.Strict-Transport-Security.Supports-Loading-Mode.TE.Timing-Allow-Origin.Trailer.Transfer-Encoding.Upgrade.Upgrade-Insecure-Requests.User-Agent.Vary.Via.WWW-Authenticate.X-Content-Type-Options.X-DNS-Prefetch-Control.X-Frame-Options.X-Permitted-Cross-Domain-Policies.X-Powered-By.X-Requested-With.X-XSS-Protection`.split(`.`);for(let e=0;e{let{wellknownHeaderNames:n,headerNameLowerCasedRecord:r}=E();var i=class e{value=null;left=null;middle=null;right=null;code;constructor(t,n,r){if(r===void 0||r>=t.length)throw TypeError(`Unreachable`);if((this.code=t.charCodeAt(r))>127)throw TypeError(`key must be ascii string`);t.length===++r?this.value=n:this.middle=new e(t,n,r)}add(t,n){let r=t.length;if(r===0)throw TypeError(`Unreachable`);let i=0,a=this;for(;;){let o=t.charCodeAt(i);if(o>127)throw TypeError(`key must be ascii string`);if(a.code===o){if(r===++i){a.value=n;break}if(a.middle!==null)a=a.middle;else{a.middle=new e(t,n,i);break}}else if(a.code=65&&(i|=32);r!==null;){if(i===r.code){if(t===++n)return r;r=r.middle;break}r=r.code{let n=h(`node:assert`),{kDestroyed:r,kBodyUsed:i,kListeners:a,kBody:o}=w(),{IncomingMessage:s}=h(`node:http`),c=h(`node:stream`),l=h(`node:net`),{Blob:u}=h(`node:buffer`),d=h(`node:util`),{stringify:f}=h(`node:querystring`),{EventEmitter:p}=h(`node:events`),{InvalidArgumentError:m}=T(),{headerNameLowerCasedRecord:g}=E(),{tree:_}=D(),[v,y]=process.versions.node.split(`.`).map(e=>Number(e));var b=class{constructor(e){this[o]=e,this[i]=!1}async*[Symbol.asyncIterator](){n(!this[i],`disturbed`),this[i]=!0,yield*this[o]}};function x(e){return C(e)?(te(e)===0&&e.on(`data`,function(){n(!1)}),typeof e.readableDidRead!=`boolean`&&(e[i]=!1,p.prototype.on.call(e,`data`,function(){this[i]=!0})),e):e&&typeof e.pipeTo==`function`||e&&typeof e!=`string`&&!ArrayBuffer.isView(e)&&ee(e)?new b(e):e}function S(){}function C(e){return e&&typeof e==`object`&&typeof e.pipe==`function`&&typeof e.on==`function`}function O(e){if(e===null)return!1;if(e instanceof u)return!0;if(typeof e!=`object`)return!1;{let t=e[Symbol.toStringTag];return(t===`Blob`||t===`File`)&&(`stream`in e&&typeof e.stream==`function`||`arrayBuffer`in e&&typeof e.arrayBuffer==`function`)}}function k(e,t){if(e.includes(`?`)||e.includes(`#`))throw Error(`Query params cannot be passed when url already contains "?" or "#".`);let n=f(t);return n&&(e+=`?`+n),e}function A(e){let t=parseInt(e,10);return t===Number(e)&&t>=0&&t<=65535}function j(e){return e!=null&&e[0]===`h`&&e[1]===`t`&&e[2]===`t`&&e[3]===`p`&&(e[4]===`:`||e[4]===`s`&&e[5]===`:`)}function M(e){if(typeof e==`string`){if(e=new URL(e),!j(e.origin||e.protocol))throw new m("Invalid URL protocol: the URL must start with `http:` or `https:`.");return e}if(!e||typeof e!=`object`)throw new m(`Invalid URL: The URL argument must be a non-null object.`);if(!(e instanceof URL)){if(e.port!=null&&e.port!==``&&A(e.port)===!1)throw new m(`Invalid URL: port must be a valid integer or a string representation of an integer.`);if(e.path!=null&&typeof e.path!=`string`)throw new m(`Invalid URL path: the path must be a string or null/undefined.`);if(e.pathname!=null&&typeof e.pathname!=`string`)throw new m(`Invalid URL pathname: the pathname must be a string or null/undefined.`);if(e.hostname!=null&&typeof e.hostname!=`string`)throw new m(`Invalid URL hostname: the hostname must be a string or null/undefined.`);if(e.origin!=null&&typeof e.origin!=`string`)throw new m(`Invalid URL origin: the origin must be a string or null/undefined.`);if(!j(e.origin||e.protocol))throw new m("Invalid URL protocol: the URL must start with `http:` or `https:`.");let t=e.port==null?e.protocol===`https:`?443:80:e.port,n=e.origin==null?`${e.protocol||``}//${e.hostname||``}:${t}`:e.origin,r=e.path==null?`${e.pathname||``}${e.search||``}`:e.path;return n[n.length-1]===`/`&&(n=n.slice(0,n.length-1)),r&&r[0]!==`/`&&(r=`/${r}`),new URL(`${n}${r}`)}if(!j(e.origin||e.protocol))throw new m("Invalid URL protocol: the URL must start with `http:` or `https:`.");return e}function N(e){if(e=M(e),e.pathname!==`/`||e.search||e.hash)throw new m(`invalid url`);return e}function P(e){if(e[0]===`[`){let t=e.indexOf(`]`);return n(t!==-1),e.substring(1,t)}let t=e.indexOf(`:`);return t===-1?e:e.substring(0,t)}function F(e){if(!e)return null;n(typeof e==`string`);let t=P(e);return l.isIP(t)?``:t}function I(e){return JSON.parse(JSON.stringify(e))}function L(e){return e!=null&&typeof e[Symbol.asyncIterator]==`function`}function ee(e){return!(e==null||typeof e[Symbol.iterator]!=`function`&&typeof e[Symbol.asyncIterator]!=`function`)}function te(e){if(e==null)return 0;if(C(e)){let t=e._readableState;return t&&t.objectMode===!1&&t.ended===!0&&Number.isFinite(t.length)?t.length:null}return O(e)?e.size==null?null:e.size:ie(e)?e.byteLength:null}function R(e){return e&&!!(e.destroyed||e[r]||c.isDestroyed?.(e))}function z(e,t){e!=null&&C(e)&&!R(e)&&(typeof e.destroy==`function`?(Object.getPrototypeOf(e).constructor===s&&(e.socket=null),e.destroy(t)):t&&queueMicrotask(()=>{e.emit(`error`,t)}),e.destroyed!==!0&&(e[r]=!0))}let B=/timeout=(\d+)/;function V(e){let t=e.toString().match(B);return t?parseInt(t[1],10)*1e3:null}function H(e){return typeof e==`string`?g[e]??e.toLowerCase():_.lookup(e)??e.toString(`latin1`).toLowerCase()}function ne(e){return _.lookup(e)??e.toString(`latin1`).toLowerCase()}function re(e,t){t===void 0&&(t={});for(let n=0;ne.toString(`utf8`)):i.toString(`utf8`)}}return`content-length`in t&&`content-disposition`in t&&(t[`content-disposition`]=Buffer.from(t[`content-disposition`]).toString(`latin1`)),t}function U(e){let t=e.length,n=Array(t),r=!1,i=-1,a,o,s=0;for(let t=0;t{e.close(),e.byobRequest?.respond(0)});else{let t=Buffer.isBuffer(r)?r:Buffer.from(r);t.byteLength&&e.enqueue(new Uint8Array(t))}return e.desiredSize>0},async cancel(e){await t.return()},type:`bytes`})}function se(e){return e&&typeof e==`object`&&typeof e.append==`function`&&typeof e.delete==`function`&&typeof e.get==`function`&&typeof e.getAll==`function`&&typeof e.has==`function`&&typeof e.set==`function`&&e[Symbol.toStringTag]===`FormData`}function J(e,t){return`addEventListener`in e?(e.addEventListener(`abort`,t,{once:!0}),()=>e.removeEventListener(`abort`,t)):(e.addListener(`abort`,t),()=>e.removeListener(`abort`,t))}let ce=typeof String.prototype.toWellFormed==`function`,Y=typeof String.prototype.isWellFormed==`function`;function le(e){return ce?`${e}`.toWellFormed():d.toUSVString(e)}function ue(e){return Y?`${e}`.isWellFormed():le(e)===`${e}`}function X(e){switch(e){case 34:case 40:case 41:case 44:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 123:case 125:return!1;default:return e>=33&&e<=126}}function de(e){if(e.length===0)return!1;for(let t=0;t{let n=h(`node:diagnostics_channel`),r=h(`node:util`),i=r.debuglog(`undici`),a=r.debuglog(`fetch`),o=r.debuglog(`websocket`),s=!1,c={beforeConnect:n.channel(`undici:client:beforeConnect`),connected:n.channel(`undici:client:connected`),connectError:n.channel(`undici:client:connectError`),sendHeaders:n.channel(`undici:client:sendHeaders`),create:n.channel(`undici:request:create`),bodySent:n.channel(`undici:request:bodySent`),headers:n.channel(`undici:request:headers`),trailers:n.channel(`undici:request:trailers`),error:n.channel(`undici:request:error`),open:n.channel(`undici:websocket:open`),close:n.channel(`undici:websocket:close`),socketError:n.channel(`undici:websocket:socket_error`),ping:n.channel(`undici:websocket:ping`),pong:n.channel(`undici:websocket:pong`)};if(i.enabled||a.enabled){let e=a.enabled?a:i;n.channel(`undici:client:beforeConnect`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a}}=t;e(`connecting to %s using %s%s`,`${a}${i?`:${i}`:``}`,r,n)}),n.channel(`undici:client:connected`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a}}=t;e(`connected to %s using %s%s`,`${a}${i?`:${i}`:``}`,r,n)}),n.channel(`undici:client:connectError`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a},error:o}=t;e(`connection to %s using %s%s errored - %s`,`${a}${i?`:${i}`:``}`,r,n,o.message)}),n.channel(`undici:client:sendHeaders`).subscribe(t=>{let{request:{method:n,path:r,origin:i}}=t;e(`sending request to %s %s/%s`,n,i,r)}),n.channel(`undici:request:headers`).subscribe(t=>{let{request:{method:n,path:r,origin:i},response:{statusCode:a}}=t;e(`received response to %s %s/%s - HTTP %d`,n,i,r,a)}),n.channel(`undici:request:trailers`).subscribe(t=>{let{request:{method:n,path:r,origin:i}}=t;e(`trailers received from %s %s/%s`,n,i,r)}),n.channel(`undici:request:error`).subscribe(t=>{let{request:{method:n,path:r,origin:i},error:a}=t;e(`request to %s %s/%s errored - %s`,n,i,r,a.message)}),s=!0}if(o.enabled){if(!s){let e=i.enabled?i:o;n.channel(`undici:client:beforeConnect`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a}}=t;e(`connecting to %s%s using %s%s`,a,i?`:${i}`:``,r,n)}),n.channel(`undici:client:connected`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a}}=t;e(`connected to %s%s using %s%s`,a,i?`:${i}`:``,r,n)}),n.channel(`undici:client:connectError`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a},error:o}=t;e(`connection to %s%s using %s%s errored - %s`,a,i?`:${i}`:``,r,n,o.message)}),n.channel(`undici:client:sendHeaders`).subscribe(t=>{let{request:{method:n,path:r,origin:i}}=t;e(`sending request to %s %s/%s`,n,i,r)})}n.channel(`undici:websocket:open`).subscribe(e=>{let{address:{address:t,port:n}}=e;o(`connection opened %s%s`,t,n?`:${n}`:``)}),n.channel(`undici:websocket:close`).subscribe(e=>{let{websocket:t,code:n,reason:r}=e;o(`closed connection to %s - %s %s`,t.url,n,r)}),n.channel(`undici:websocket:socket_error`).subscribe(e=>{o(`connection errored - %s`,e.message)}),n.channel(`undici:websocket:ping`).subscribe(e=>{o(`ping received`)}),n.channel(`undici:websocket:pong`).subscribe(e=>{o(`pong received`)})}t.exports={channels:c}})),A=/* @__PURE__ */ m(((e,t)=>{let{InvalidArgumentError:n,NotSupportedError:r}=T(),i=h(`node:assert`),{isValidHTTPToken:a,isValidHeaderValue:o,isStream:s,destroy:c,isBuffer:l,isFormDataLike:u,isIterable:d,isBlobLike:f,buildURL:p,validateHandler:m,getServerName:g,normalizedMethodRecords:_}=O(),{channels:v}=k(),{headerNameLowerCasedRecord:y}=E(),b=/[^\u0021-\u00ff]/,x=Symbol(`handler`);var S=class{constructor(e,{path:t,method:r,body:i,headers:h,query:y,idempotent:S,blocking:w,upgrade:T,headersTimeout:E,bodyTimeout:D,reset:O,throwOnError:k,expectContinue:A,servername:j},M){if(typeof t!=`string`)throw new n(`path must be a string`);if(t[0]!==`/`&&!(t.startsWith(`http://`)||t.startsWith(`https://`))&&r!==`CONNECT`)throw new n(`path must be an absolute URL or start with a slash`);if(b.test(t))throw new n(`invalid request path`);if(typeof r!=`string`)throw new n(`method must be a string`);if(_[r]===void 0&&!a(r))throw new n(`invalid request method`);if(T&&typeof T!=`string`)throw new n(`upgrade must be a string`);if(T&&!o(T))throw new n(`invalid upgrade header`);if(E!=null&&(!Number.isFinite(E)||E<0))throw new n(`invalid headersTimeout`);if(D!=null&&(!Number.isFinite(D)||D<0))throw new n(`invalid bodyTimeout`);if(O!=null&&typeof O!=`boolean`)throw new n(`invalid reset`);if(A!=null&&typeof A!=`boolean`)throw new n(`invalid expectContinue`);if(this.headersTimeout=E,this.bodyTimeout=D,this.throwOnError=k===!0,this.method=r,this.abort=null,i==null)this.body=null;else if(s(i)){this.body=i;let e=this.body._readableState;e&&e.autoDestroy||(this.endHandler=function(){c(this)},this.body.on(`end`,this.endHandler)),this.errorHandler=e=>{this.abort?this.abort(e):this.error=e},this.body.on(`error`,this.errorHandler)}else if(l(i))this.body=i.byteLength?i:null;else if(ArrayBuffer.isView(i))this.body=i.buffer.byteLength?Buffer.from(i.buffer,i.byteOffset,i.byteLength):null;else if(i instanceof ArrayBuffer)this.body=i.byteLength?Buffer.from(i):null;else if(typeof i==`string`)this.body=i.length?Buffer.from(i):null;else if(u(i)||d(i)||f(i))this.body=i;else throw new n(`body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable`);if(this.completed=!1,this.aborted=!1,this.upgrade=T||null,this.path=y?p(t,y):t,this.origin=e,this.idempotent=S??(r===`HEAD`||r===`GET`),this.blocking=w??!1,this.reset=O??null,this.host=null,this.contentLength=null,this.contentType=null,this.headers=[],this.expectContinue=A??!1,Array.isArray(h)){if(h.length%2!=0)throw new n(`headers array must be even`);for(let e=0;e{let n=h(`node:events`);var r=class extends n{dispatch(){throw Error(`not implemented`)}close(){throw Error(`not implemented`)}destroy(){throw Error(`not implemented`)}compose(...e){let t=Array.isArray(e[0])?e[0]:e,n=this.dispatch.bind(this);for(let e of t)if(e!=null){if(typeof e!=`function`)throw TypeError(`invalid interceptor, expected function received ${typeof e}`);if(n=e(n),n==null||typeof n!=`function`||n.length!==2)throw TypeError(`invalid interceptor`)}return new i(this,n)}},i=class extends r{#e=null;#t=null;constructor(e,t){super(),this.#e=e,this.#t=t}dispatch(...e){this.#t(...e)}close(...e){return this.#e.close(...e)}destroy(...e){return this.#e.destroy(...e)}};t.exports=r})),M=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:buffer`),r=j(),{ClientDestroyedError:i,ClientClosedError:a,InvalidArgumentError:o}=T(),{kDestroy:s,kClose:c,kClosed:l,kDestroyed:u,kDispatch:d,kInterceptors:f}=w(),p=Symbol(`onDestroyed`),m=Symbol(`onClosed`),g=Symbol(`Intercepted Dispatch`),_=Symbol(`webSocketOptions`),v=Symbol(`eventSourceOptions`);t.exports=class extends r{constructor(e){super(),this[u]=!1,this[p]=null,this[l]=!1,this[m]=[],this[_]=e?.webSocket??{},this[v]=e?.eventSource??{}}get webSocketOptions(){return{maxFragments:this[_].maxFragments??131072,maxPayloadSize:this[_].maxPayloadSize??134217728}}get eventSourceOptions(){return{maxEventSize:this[v].maxEventSize??n.kStringMaxLength}}get destroyed(){return this[u]}get closed(){return this[l]}get interceptors(){return this[f]}set interceptors(e){if(e){for(let t=e.length-1;t>=0;t--)if(typeof this[f][t]!=`function`)throw new o(`interceptor must be an function`)}this[f]=e}close(e){if(e===void 0)return new Promise((e,t)=>{this.close((n,r)=>n?t(n):e(r))});if(typeof e!=`function`)throw new o(`invalid callback`);if(this[u]){queueMicrotask(()=>e(new i,null));return}if(this[l]){this[m]?this[m].push(e):queueMicrotask(()=>e(null,null));return}this[l]=!0,this[m].push(e);let t=()=>{let e=this[m];this[m]=null;for(let t=0;tthis.destroy()).then(()=>{queueMicrotask(t)})}destroy(e,t){if(typeof e==`function`&&(t=e,e=null),t===void 0)return new Promise((t,n)=>{this.destroy(e,(e,r)=>e?/* istanbul ignore next: should never error */n(e):t(r))});if(typeof t!=`function`)throw new o(`invalid callback`);if(this[u]){this[p]?this[p].push(t):queueMicrotask(()=>t(null,null));return}e||=new i,this[u]=!0,this[p]=this[p]||[],this[p].push(t);let n=()=>{let e=this[p];this[p]=null;for(let t=0;t{queueMicrotask(n)})}[g](e,t){if(!this[f]||this[f].length===0)return this[g]=this[d],this[d](e,t);let n=this[d].bind(this);for(let e=this[f].length-1;e>=0;e--)n=this[f][e](n);return this[g]=n,n(e,t)}dispatch(e,t){if(!t||typeof t!=`object`)throw new o(`handler must be an object`);try{if(!e||typeof e!=`object`)throw new o(`opts must be an object.`);if(this[u]||this[p])throw new i;if(this[l])throw new a;return this[g](e,t)}catch(e){if(typeof t.onError!=`function`)throw new o(`invalid onError method`);return t.onError(e),!1}}}})),N=/* @__PURE__ */ m(((e,t)=>{let n=0,r=1e3,i,a=Symbol(`kFastTimer`),o=[];function s(){n+=499;let e=0,t=o.length;for(;e=r._idleStart+r._idleTimeout&&(r._state=-1,r._idleStart=-1,r._onTimeout(r._timerArg)),r._state===-1?(r._state=-2,--t!==0&&(o[e]=o[t])):++e}o.length=t,o.length!==0&&c()}function c(){i?i.refresh():(clearTimeout(i),i=setTimeout(s,499),i.unref&&i.unref())}var l=class{[a]=!0;_state=-2;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(e,t,n){this._onTimeout=e,this._idleTimeout=t,this._timerArg=n,this.refresh()}refresh(){this._state===-2&&o.push(this),i&&o.length!==1||c(),this._state=0}clear(){this._state=-1,this._idleStart=-1}};t.exports={setTimeout(e,t,n){return t<=r?setTimeout(e,t,n):new l(e,t,n)},clearTimeout(e){e[a]?e.clear():clearTimeout(e)},setFastTimeout(e,t,n){return new l(e,t,n)},clearFastTimeout(e){e.clear()},now(){return n},tick(e=0){n+=e-r+1,s(),s()},reset(){n=0,o.length=0,clearTimeout(i),i=null},kFastTimer:a}})),P=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:net`),r=h(`node:assert`),i=O(),{InvalidArgumentError:a,ConnectTimeoutError:o}=T(),s=N();function c(){}let l,u;u=global.FinalizationRegistry&&!(process.env.NODE_V8_COVERAGE||process.env.UNDICI_NO_FG)?class{constructor(e){this._maxCachedSessions=e,this._sessionCache=/* @__PURE__ */ new Map,this._sessionRegistry=new global.FinalizationRegistry(e=>{if(this._sessionCache.size=this._maxCachedSessions){let{value:e}=this._sessionCache.keys().next();this._sessionCache.delete(e)}this._sessionCache.set(e,t)}}};function d({allowH2:e,maxCachedSessions:t,socketPath:o,timeout:s,session:c,...d}){if(t!=null&&(!Number.isInteger(t)||t<0))throw new a(`maxCachedSessions must be a positive integer or zero`);let p={path:o,...d},m=new u(t??100);return s??=1e4,e??=!1,function({hostname:t,host:a,protocol:o,port:u,servername:d,localAddress:g,httpSocket:_},v){let y;if(o===`https:`){l||=h(`node:tls`),d=d||p.servername||i.getServerName(a)||null;let n=d||t;r(n);let o=c||m.get(n)||null;u||=443,y=l.connect({highWaterMark:16384,...p,servername:d,session:o,localAddress:g,ALPNProtocols:e?[`http/1.1`,`h2`]:[`http/1.1`],socket:_,port:u,host:t}),y.on(`session`,function(e){m.set(n,e)})}else r(!_,`httpSocket can only be sent on TLS update`),u||=80,y=n.connect({highWaterMark:65536,...p,localAddress:g,port:u,host:t});if(p.keepAlive==null||p.keepAlive){let e=p.keepAliveInitialDelay===void 0?6e4:p.keepAliveInitialDelay;y.setKeepAlive(!0,e)}let b=f(new WeakRef(y),{timeout:s,hostname:t,port:u});return y.setNoDelay(!0).once(o===`https:`?`secureConnect`:`connect`,function(){if(queueMicrotask(b),v){let e=v;v=null,e(null,this)}}).on(`error`,function(e){if(queueMicrotask(b),v){let t=v;v=null,t(e)}}),y}}let f=process.platform===`win32`?(e,t)=>{if(!t.timeout)return c;let n=null,r=null,i=s.setFastTimeout(()=>{n=setImmediate(()=>{r=setImmediate(()=>p(e.deref(),t))})},t.timeout);return()=>{s.clearFastTimeout(i),clearImmediate(n),clearImmediate(r)}}:(e,t)=>{if(!t.timeout)return c;let n=null,r=s.setFastTimeout(()=>{n=setImmediate(()=>{p(e.deref(),t)})},t.timeout);return()=>{s.clearFastTimeout(r),clearImmediate(n)}};function p(e,t){if(e==null)return;let n=`Connect Timeout Error`;Array.isArray(e.autoSelectFamilyAttemptedAddresses)?n+=` (attempted addresses: ${e.autoSelectFamilyAttemptedAddresses.join(`, `)},`:n+=` (attempted address: ${t.hostname}:${t.port},`,n+=` timeout: ${t.timeout}ms)`,i.destroy(e,new o(n))}t.exports=d})),F=/* @__PURE__ */ m((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.enumToMap=void 0;function t(e){let t={};return Object.keys(e).forEach(n=>{let r=e[n];typeof r==`number`&&(t[n]=r)}),t}e.enumToMap=t})),I=/* @__PURE__ */ m((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.SPECIAL_HEADERS=e.HEADER_STATE=e.MINOR=e.MAJOR=e.CONNECTION_TOKEN_CHARS=e.HEADER_CHARS=e.TOKEN=e.STRICT_TOKEN=e.HEX=e.URL_CHAR=e.STRICT_URL_CHAR=e.USERINFO_CHARS=e.MARK=e.ALPHANUM=e.NUM=e.HEX_MAP=e.NUM_MAP=e.ALPHA=e.FINISH=e.H_METHOD_MAP=e.METHOD_MAP=e.METHODS_RTSP=e.METHODS_ICE=e.METHODS_HTTP=e.METHODS=e.LENIENT_FLAGS=e.FLAGS=e.TYPE=e.ERROR=void 0;let t=F();(function(e){e[e.OK=0]=`OK`,e[e.INTERNAL=1]=`INTERNAL`,e[e.STRICT=2]=`STRICT`,e[e.LF_EXPECTED=3]=`LF_EXPECTED`,e[e.UNEXPECTED_CONTENT_LENGTH=4]=`UNEXPECTED_CONTENT_LENGTH`,e[e.CLOSED_CONNECTION=5]=`CLOSED_CONNECTION`,e[e.INVALID_METHOD=6]=`INVALID_METHOD`,e[e.INVALID_URL=7]=`INVALID_URL`,e[e.INVALID_CONSTANT=8]=`INVALID_CONSTANT`,e[e.INVALID_VERSION=9]=`INVALID_VERSION`,e[e.INVALID_HEADER_TOKEN=10]=`INVALID_HEADER_TOKEN`,e[e.INVALID_CONTENT_LENGTH=11]=`INVALID_CONTENT_LENGTH`,e[e.INVALID_CHUNK_SIZE=12]=`INVALID_CHUNK_SIZE`,e[e.INVALID_STATUS=13]=`INVALID_STATUS`,e[e.INVALID_EOF_STATE=14]=`INVALID_EOF_STATE`,e[e.INVALID_TRANSFER_ENCODING=15]=`INVALID_TRANSFER_ENCODING`,e[e.CB_MESSAGE_BEGIN=16]=`CB_MESSAGE_BEGIN`,e[e.CB_HEADERS_COMPLETE=17]=`CB_HEADERS_COMPLETE`,e[e.CB_MESSAGE_COMPLETE=18]=`CB_MESSAGE_COMPLETE`,e[e.CB_CHUNK_HEADER=19]=`CB_CHUNK_HEADER`,e[e.CB_CHUNK_COMPLETE=20]=`CB_CHUNK_COMPLETE`,e[e.PAUSED=21]=`PAUSED`,e[e.PAUSED_UPGRADE=22]=`PAUSED_UPGRADE`,e[e.PAUSED_H2_UPGRADE=23]=`PAUSED_H2_UPGRADE`,e[e.USER=24]=`USER`})(e.ERROR||={}),(function(e){e[e.BOTH=0]=`BOTH`,e[e.REQUEST=1]=`REQUEST`,e[e.RESPONSE=2]=`RESPONSE`})(e.TYPE||={}),(function(e){e[e.CONNECTION_KEEP_ALIVE=1]=`CONNECTION_KEEP_ALIVE`,e[e.CONNECTION_CLOSE=2]=`CONNECTION_CLOSE`,e[e.CONNECTION_UPGRADE=4]=`CONNECTION_UPGRADE`,e[e.CHUNKED=8]=`CHUNKED`,e[e.UPGRADE=16]=`UPGRADE`,e[e.CONTENT_LENGTH=32]=`CONTENT_LENGTH`,e[e.SKIPBODY=64]=`SKIPBODY`,e[e.TRAILING=128]=`TRAILING`,e[e.TRANSFER_ENCODING=512]=`TRANSFER_ENCODING`})(e.FLAGS||={}),(function(e){e[e.HEADERS=1]=`HEADERS`,e[e.CHUNKED_LENGTH=2]=`CHUNKED_LENGTH`,e[e.KEEP_ALIVE=4]=`KEEP_ALIVE`})(e.LENIENT_FLAGS||={});var n;(function(e){e[e.DELETE=0]=`DELETE`,e[e.GET=1]=`GET`,e[e.HEAD=2]=`HEAD`,e[e.POST=3]=`POST`,e[e.PUT=4]=`PUT`,e[e.CONNECT=5]=`CONNECT`,e[e.OPTIONS=6]=`OPTIONS`,e[e.TRACE=7]=`TRACE`,e[e.COPY=8]=`COPY`,e[e.LOCK=9]=`LOCK`,e[e.MKCOL=10]=`MKCOL`,e[e.MOVE=11]=`MOVE`,e[e.PROPFIND=12]=`PROPFIND`,e[e.PROPPATCH=13]=`PROPPATCH`,e[e.SEARCH=14]=`SEARCH`,e[e.UNLOCK=15]=`UNLOCK`,e[e.BIND=16]=`BIND`,e[e.REBIND=17]=`REBIND`,e[e.UNBIND=18]=`UNBIND`,e[e.ACL=19]=`ACL`,e[e.REPORT=20]=`REPORT`,e[e.MKACTIVITY=21]=`MKACTIVITY`,e[e.CHECKOUT=22]=`CHECKOUT`,e[e.MERGE=23]=`MERGE`,e[e[`M-SEARCH`]=24]=`M-SEARCH`,e[e.NOTIFY=25]=`NOTIFY`,e[e.SUBSCRIBE=26]=`SUBSCRIBE`,e[e.UNSUBSCRIBE=27]=`UNSUBSCRIBE`,e[e.PATCH=28]=`PATCH`,e[e.PURGE=29]=`PURGE`,e[e.MKCALENDAR=30]=`MKCALENDAR`,e[e.LINK=31]=`LINK`,e[e.UNLINK=32]=`UNLINK`,e[e.SOURCE=33]=`SOURCE`,e[e.PRI=34]=`PRI`,e[e.DESCRIBE=35]=`DESCRIBE`,e[e.ANNOUNCE=36]=`ANNOUNCE`,e[e.SETUP=37]=`SETUP`,e[e.PLAY=38]=`PLAY`,e[e.PAUSE=39]=`PAUSE`,e[e.TEARDOWN=40]=`TEARDOWN`,e[e.GET_PARAMETER=41]=`GET_PARAMETER`,e[e.SET_PARAMETER=42]=`SET_PARAMETER`,e[e.REDIRECT=43]=`REDIRECT`,e[e.RECORD=44]=`RECORD`,e[e.FLUSH=45]=`FLUSH`})(n=e.METHODS||={}),e.METHODS_HTTP=[n.DELETE,n.GET,n.HEAD,n.POST,n.PUT,n.CONNECT,n.OPTIONS,n.TRACE,n.COPY,n.LOCK,n.MKCOL,n.MOVE,n.PROPFIND,n.PROPPATCH,n.SEARCH,n.UNLOCK,n.BIND,n.REBIND,n.UNBIND,n.ACL,n.REPORT,n.MKACTIVITY,n.CHECKOUT,n.MERGE,n[`M-SEARCH`],n.NOTIFY,n.SUBSCRIBE,n.UNSUBSCRIBE,n.PATCH,n.PURGE,n.MKCALENDAR,n.LINK,n.UNLINK,n.PRI,n.SOURCE],e.METHODS_ICE=[n.SOURCE],e.METHODS_RTSP=[n.OPTIONS,n.DESCRIBE,n.ANNOUNCE,n.SETUP,n.PLAY,n.PAUSE,n.TEARDOWN,n.GET_PARAMETER,n.SET_PARAMETER,n.REDIRECT,n.RECORD,n.FLUSH,n.GET,n.POST],e.METHOD_MAP=t.enumToMap(n),e.H_METHOD_MAP={},Object.keys(e.METHOD_MAP).forEach(t=>{/^H/.test(t)&&(e.H_METHOD_MAP[t]=e.METHOD_MAP[t])}),(function(e){e[e.SAFE=0]=`SAFE`,e[e.SAFE_WITH_CB=1]=`SAFE_WITH_CB`,e[e.UNSAFE=2]=`UNSAFE`})(e.FINISH||={}),e.ALPHA=[];for(let t=65;t<=90;t++)e.ALPHA.push(String.fromCharCode(t)),e.ALPHA.push(String.fromCharCode(t+32));e.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9},e.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},e.NUM=[`0`,`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`],e.ALPHANUM=e.ALPHA.concat(e.NUM),e.MARK=[`-`,`_`,`.`,`!`,`~`,`*`,`'`,`(`,`)`],e.USERINFO_CHARS=e.ALPHANUM.concat(e.MARK).concat([`%`,`;`,`:`,`&`,`=`,`+`,`$`,`,`]),e.STRICT_URL_CHAR=(/* @__PURE__ */ `!"$%&'()*+,-./:;<=>@[\\]^_\`{|}~`.split(``)).concat(e.ALPHANUM),e.URL_CHAR=e.STRICT_URL_CHAR.concat([` `,`\f`]);for(let t=128;t<=255;t++)e.URL_CHAR.push(t);e.HEX=e.NUM.concat([`a`,`b`,`c`,`d`,`e`,`f`,`A`,`B`,`C`,`D`,`E`,`F`]),e.STRICT_TOKEN=[`!`,`#`,`$`,`%`,`&`,`'`,`*`,`+`,`-`,`.`,`^`,`_`,"`",`|`,`~`].concat(e.ALPHANUM),e.TOKEN=e.STRICT_TOKEN.concat([` `]),e.HEADER_CHARS=[` `];for(let t=32;t<=255;t++)t!==127&&e.HEADER_CHARS.push(t);e.CONNECTION_TOKEN_CHARS=e.HEADER_CHARS.filter(e=>e!==44),e.MAJOR=e.NUM_MAP,e.MINOR=e.MAJOR;var r;(function(e){e[e.GENERAL=0]=`GENERAL`,e[e.CONNECTION=1]=`CONNECTION`,e[e.CONTENT_LENGTH=2]=`CONTENT_LENGTH`,e[e.TRANSFER_ENCODING=3]=`TRANSFER_ENCODING`,e[e.UPGRADE=4]=`UPGRADE`,e[e.CONNECTION_KEEP_ALIVE=5]=`CONNECTION_KEEP_ALIVE`,e[e.CONNECTION_CLOSE=6]=`CONNECTION_CLOSE`,e[e.CONNECTION_UPGRADE=7]=`CONNECTION_UPGRADE`,e[e.TRANSFER_ENCODING_CHUNKED=8]=`TRANSFER_ENCODING_CHUNKED`})(r=e.HEADER_STATE||={}),e.SPECIAL_HEADERS={connection:r.CONNECTION,"content-length":r.CONTENT_LENGTH,"proxy-connection":r.CONNECTION,"transfer-encoding":r.TRANSFER_ENCODING,upgrade:r.UPGRADE}})),L=/* @__PURE__ */ m(((e,t)=>{let{Buffer:n}=h(`node:buffer`);t.exports=n.from(`AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv`,`base64`)})),ee=/* @__PURE__ */ m(((e,t)=>{let{Buffer:n}=h(`node:buffer`);t.exports=n.from(`AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxBACEDDKIBCyACQeQANgIcIAIgATYCFCACQeMXNgIQIAJBFTYCDEEAIQMMoQELIAJBADYCACAGQQFqIQEgAi0AKSIAQSNrQQtJDQQCQCAAQQZLDQBBASAAdEHKAHFFDQAMBQtBACEDIAJBADYCHCACIAE2AhQgAkH3CTYCECACQQg2AgwMoAELIAJBADYCACAGQQFqIQEgAi0AKUEhRg0DIAJBADYCHCACIAE2AhQgAkGbCjYCECACQQg2AgxBACEDDJ8BCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJBkDM2AhAgAkEINgIMDJ0BCyACQQA2AgAgBkEBaiEBIAItAClBI0kNACACQQA2AhwgAiABNgIUIAJB0wk2AhAgAkEINgIMQQAhAwycAQtB0QAhAwyCAQsgAS0AAEEwayIAQf8BcUEKSQRAIAIgADoAKiABQQFqIQFBzwAhAwyCAQsgAigCBCEAIAJBADYCBCACIAAgARAoIgBFDYYBIAJB3gA2AhwgAiABNgIUIAIgADYCDEEAIQMMmgELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ2GASACQdwANgIcIAIgATYCFCACIAA2AgxBACEDDJkBCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMhwELIAJB2gA2AhwgAiAFNgIUIAIgADYCDAyYAQtBACEBQQEhAwsgAiADOgArIAVBAWohAwJAAkACQCACLQAtQRBxDQACQAJAAkAgAi0AKg4DAQACBAsgBkUNAwwCCyAADQEMAgsgAUUNAQsgAigCBCEAIAJBADYCBCACIAAgAxAoIgBFBEAgAyEBDAILIAJB2AA2AhwgAiADNgIUIAIgADYCDEEAIQMMmAELIAIoAgQhACACQQA2AgQgAiAAIAMQKCIARQRAIAMhAQyHAQsgAkHZADYCHCACIAM2AhQgAiAANgIMQQAhAwyXAQtBzAAhAwx9CyAAQRVHBEAgAkEANgIcIAIgATYCFCACQZQNNgIQIAJBITYCDEEAIQMMlgELIAJB1wA2AhwgAiABNgIUIAJByRc2AhAgAkEVNgIMQQAhAwyVAQtBACEDIAJBADYCHCACIAE2AhQgAkGAETYCECACQQk2AgwMlAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0AIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMkwELQckAIQMMeQsgAkEANgIcIAIgATYCFCACQcEoNgIQIAJBBzYCDCACQQA2AgBBACEDDJEBCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAlIgBFDQAgAkHSADYCHCACIAE2AhQgAiAANgIMDJABC0HIACEDDHYLIAJBADYCACAFIQELIAJBgBI7ASogAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANAQtBxwAhAwxzCyAAQRVGBEAgAkHRADYCHCACIAE2AhQgAkHjFzYCECACQRU2AgxBACEDDIwBC0EAIQMgAkEANgIcIAIgATYCFCACQbkNNgIQIAJBGjYCDAyLAQtBACEDIAJBADYCHCACIAE2AhQgAkGgGTYCECACQR42AgwMigELIAEtAABBOkYEQCACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgBFDQEgAkHDADYCHCACIAA2AgwgAiABQQFqNgIUDIoBC0EAIQMgAkEANgIcIAIgATYCFCACQbERNgIQIAJBCjYCDAyJAQsgAUEBaiEBQTshAwxvCyACQcMANgIcIAIgADYCDCACIAFBAWo2AhQMhwELQQAhAyACQQA2AhwgAiABNgIUIAJB8A42AhAgAkEcNgIMDIYBCyACIAIvATBBEHI7ATAMZgsCQCACLwEwIgBBCHFFDQAgAi0AKEEBRw0AIAItAC1BCHFFDQMLIAIgAEH3+wNxQYAEcjsBMAwECyABIARHBEACQANAIAEtAABBMGsiAEH/AXFBCk8EQEE1IQMMbgsgAikDICIKQpmz5syZs+bMGVYNASACIApCCn4iCjcDICAKIACtQv8BgyILQn+FVg0BIAIgCiALfDcDICAEIAFBAWoiAUcNAAtBOSEDDIUBCyACKAIEIQBBACEDIAJBADYCBCACIAAgAUEBaiIBECoiAA0MDHcLQTkhAwyDAQsgAi0AMEEgcQ0GQcUBIQMMaQtBACEDIAJBADYCBCACIAEgARAqIgBFDQQgAkE6NgIcIAIgADYCDCACIAFBAWo2AhQMgQELIAItAChBAUcNACACLQAtQQhxRQ0BC0E3IQMMZgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIABEAgAkE7NgIcIAIgADYCDCACIAFBAWo2AhQMfwsgAUEBaiEBDG4LIAJBCDoALAwECyABQQFqIQEMbQtBACEDIAJBADYCHCACIAE2AhQgAkHkEjYCECACQQQ2AgwMewsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ1sIAJBNzYCHCACIAE2AhQgAiAANgIMDHoLIAIgAi8BMEEgcjsBMAtBMCEDDF8LIAJBNjYCHCACIAE2AhQgAiAANgIMDHcLIABBLEcNASABQQFqIQBBASEBAkACQAJAAkACQCACLQAsQQVrDgQDAQIEAAsgACEBDAQLQQIhAQwBC0EEIQELIAJBAToALCACIAIvATAgAXI7ATAgACEBDAELIAIgAi8BMEEIcjsBMCAAIQELQTkhAwxcCyACQQA6ACwLQTQhAwxaCyABIARGBEBBLSEDDHMLAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0EtIQMMdAsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ0CIAJBLDYCHCACIAE2AhQgAiAANgIMDHMLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAS0AAEENRgRAIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAi0ALUEBcQRAQcQBIQMMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIADQEMZQtBLyEDDFcLIAJBLjYCHCACIAE2AhQgAiAANgIMDG8LQQAhAyACQQA2AhwgAiABNgIUIAJB8BQ2AhAgAkEDNgIMDG4LQQEhAwJAAkACQAJAIAItACxBBWsOBAMBAgAECyACIAIvATBBCHI7ATAMAwtBAiEDDAELQQQhAwsgAkEBOgAsIAIgAi8BMCADcjsBMAtBKiEDDFMLQQAhAyACQQA2AhwgAiABNgIUIAJB4Q82AhAgAkEKNgIMDGsLQQEhAwJAAkACQAJAAkACQCACLQAsQQJrDgcFBAQDAQIABAsgAiACLwEwQQhyOwEwDAMLQQIhAwwBC0EEIQMLIAJBAToALCACIAIvATAgA3I7ATALQSshAwxSC0EAIQMgAkEANgIcIAIgATYCFCACQasSNgIQIAJBCzYCDAxqC0EAIQMgAkEANgIcIAIgATYCFCACQf0NNgIQIAJBHTYCDAxpCyABIARHBEADQCABLQAAQSBHDUggBCABQQFqIgFHDQALQSUhAwxpC0ElIQMMaAsgAi0ALUEBcQRAQcMBIQMMTwsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKSIABEAgAkEmNgIcIAIgADYCDCACIAFBAWo2AhQMaAsgAUEBaiEBDFwLIAFBAWohASACLwEwIgBBgAFxBEBBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAEUNBiAAQRVHDR8gAkEFNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMZwsCQCAAQaAEcUGgBEcNACACLQAtQQJxDQBBACEDIAJBADYCHCACIAE2AhQgAkGWEzYCECACQQQ2AgwMZwsgAgJ/IAIvATBBFHFBFEYEQEEBIAItAChBAUYNARogAi8BMkHlAEYMAQsgAi0AKUEFRgs6AC5BACEAAkAgAigCOCIDRQ0AIAMoAiQiA0UNACACIAMRAAAhAAsCQAJAAkACQAJAIAAOFgIBAAQEBAQEBAQEBAQEBAQEBAQEBAMECyACQQE6AC4LIAIgAi8BMEHAAHI7ATALQSchAwxPCyACQSM2AhwgAiABNgIUIAJBpRY2AhAgAkEVNgIMQQAhAwxnC0EAIQMgAkEANgIcIAIgATYCFCACQdULNgIQIAJBETYCDAxmC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAADQELQQ4hAwxLCyAAQRVGBEAgAkECNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMZAtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMYwtBACEDIAJBADYCHCACIAE2AhQgAkGqHDYCECACQQ82AgwMYgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEgCqdqIgEQKyIARQ0AIAJBBTYCHCACIAE2AhQgAiAANgIMDGELQQ8hAwxHC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxfC0IBIQoLIAFBAWohAQJAIAIpAyAiC0L//////////w9YBEAgAiALQgSGIAqENwMgDAELQQAhAyACQQA2AhwgAiABNgIUIAJBrQk2AhAgAkEMNgIMDF4LQSQhAwxEC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxcCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAsIgBFBEAgAUEBaiEBDFILIAJBFzYCHCACIAA2AgwgAiABQQFqNgIUDFsLIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQRY2AhwgAiAANgIMIAIgAUEBajYCFAxbC0EfIQMMQQtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQLSIARQRAIAFBAWohAQxQCyACQRQ2AhwgAiAANgIMIAIgAUEBajYCFAxYCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABEC0iAEUEQCABQQFqIQEMAQsgAkETNgIcIAIgADYCDCACIAFBAWo2AhQMWAtBHiEDDD4LQQAhAyACQQA2AhwgAiABNgIUIAJBxgw2AhAgAkEjNgIMDFYLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABEC0iAEUEQCABQQFqIQEMTgsgAkERNgIcIAIgADYCDCACIAFBAWo2AhQMVQsgAkEQNgIcIAIgATYCFCACIAA2AgwMVAtBACEDIAJBADYCHCACIAE2AhQgAkHGDDYCECACQSM2AgwMUwtBACEDIAJBADYCHCACIAE2AhQgAkHAFTYCECACQQI2AgwMUgsgAigCBCEAQQAhAyACQQA2AgQCQCACIAAgARAtIgBFBEAgAUEBaiEBDAELIAJBDjYCHCACIAA2AgwgAiABQQFqNgIUDFILQRshAww4C0EAIQMgAkEANgIcIAIgATYCFCACQcYMNgIQIAJBIzYCDAxQCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABECwiAEUEQCABQQFqIQEMAQsgAkENNgIcIAIgADYCDCACIAFBAWo2AhQMUAtBGiEDDDYLQQAhAyACQQA2AhwgAiABNgIUIAJBmg82AhAgAkEiNgIMDE4LIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQQw2AhwgAiAANgIMIAIgAUEBajYCFAxOC0EZIQMMNAtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMTAsgAEEVRwRAQQAhAyACQQA2AhwgAiABNgIUIAJBgww2AhAgAkETNgIMDEwLIAJBCjYCHCACIAE2AhQgAkHkFjYCECACQRU2AgxBACEDDEsLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABIAqnaiIBECsiAARAIAJBBzYCHCACIAE2AhQgAiAANgIMDEsLQRMhAwwxCyAAQRVHBEBBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMSgsgAkEeNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMSQtBACEAAkAgAigCOCIDRQ0AIAMoAiwiA0UNACACIAMRAAAhAAsgAEUNQSAAQRVGBEAgAkEDNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMSQtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMSAtBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMRwtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMRgsgAkEAOgAvIAItAC1BBHFFDT8LIAJBADoALyACQQE6ADRBACEDDCsLQQAhAyACQQA2AhwgAkHkETYCECACQQc2AgwgAiABQQFqNgIUDEMLAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB3QEhAwxDCwJAAkAgAi0ANEEBRw0AQQAhAAJAIAIoAjgiA0UNACADKAJYIgNFDQAgAiADEQAAIQALIABFDQAgAEEVRw0BIAJB3AE2AhwgAiABNgIUIAJB1RY2AhAgAkEVNgIMQQAhAwxEC0HBASEDDCoLIAJBADYCHCACIAE2AhQgAkHpCzYCECACQR82AgxBACEDDEILAkACQCACLQAoQQFrDgIEAQALQcABIQMMKQtBuQEhAwwoCyACQQI6AC9BACEAAkAgAigCOCIDRQ0AIAMoAgAiA0UNACACIAMRAAAhAAsgAEUEQEHCASEDDCgLIABBFUcEQCACQQA2AhwgAiABNgIUIAJBpAw2AhAgAkEQNgIMQQAhAwxBCyACQdsBNgIcIAIgATYCFCACQfoWNgIQIAJBFTYCDEEAIQMMQAsgASAERgRAQdoBIQMMQAsgAS0AAEHIAEYNASACQQE6ACgLQawBIQMMJQtBvwEhAwwkCyABIARHBEAgAkEQNgIIIAIgATYCBEG+ASEDDCQLQdkBIQMMPAsgASAERgRAQdgBIQMMPAsgAS0AAEHIAEcNBCABQQFqIQFBvQEhAwwiCyABIARGBEBB1wEhAww7CwJAAkAgAS0AAEHFAGsOEAAFBQUFBQUFBQUFBQUFBQEFCyABQQFqIQFBuwEhAwwiCyABQQFqIQFBvAEhAwwhC0HWASEDIAEgBEYNOSACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGD0ABqLQAARw0DIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw6CyACKAIEIQAgAkIANwMAIAIgACAGQQFqIgEQJyIARQRAQcYBIQMMIQsgAkHVATYCHCACIAE2AhQgAiAANgIMQQAhAww5C0HUASEDIAEgBEYNOCACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGB0ABqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw5CyACQYEEOwEoIAIoAgQhACACQgA3AwAgAiAAIAZBAWoiARAnIgANAwwCCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB2Bs2AhAgAkEINgIMDDYLQboBIQMMHAsgAkHTATYCHCACIAE2AhQgAiAANgIMQQAhAww0C0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAARQ0AIABBFUYNASACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwwzC0HkACEDDBkLIAJB+AA2AhwgAiABNgIUIAJByhg2AhAgAkEVNgIMQQAhAwwxC0HSASEDIAQgASIARg0wIAQgAWsgAigCACIBaiEFIAAgAWtBBGohBgJAA0AgAC0AACABQfzPAGotAABHDQEgAUEERg0DIAFBAWohASAEIABBAWoiAEcNAAsgAiAFNgIADDELIAJBADYCHCACIAA2AhQgAkGQMzYCECACQQg2AgwgAkEANgIAQQAhAwwwCyABIARHBEAgAkEONgIIIAIgATYCBEG3ASEDDBcLQdEBIQMMLwsgAkEANgIAIAZBAWohAQtBuAEhAwwUCyABIARGBEBB0AEhAwwtCyABLQAAQTBrIgBB/wFxQQpJBEAgAiAAOgAqIAFBAWohAUG2ASEDDBQLIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0UIAJBzwE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAsgASAERgRAQc4BIQMMLAsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0VIAJBzQE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAtBtQEhAwwSCyAEIAEiBUYEQEHMASEDDCsLQQAhAEEBIQFBASEGQQAhAwJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAUtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyEDQQAhAUEAIQYMAgtBCSEDQQEhAEEAIQFBACEGDAELQQAhAUEBIQMLIAIgAzoAKyAFQQFqIQMCQAJAIAItAC1BEHENAAJAAkACQCACLQAqDgMBAAIECyAGRQ0DDAILIAANAQwCCyABRQ0BCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMAwsgAkHJATYCHCACIAM2AhQgAiAANgIMQQAhAwwtCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMGAsgAkHKATYCHCACIAM2AhQgAiAANgIMQQAhAwwsCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMFgsgAkHLATYCHCACIAU2AhQgAiAANgIMDCsLQbQBIQMMEQtBACEAAkAgAigCOCIDRQ0AIAMoAjwiA0UNACACIAMRAAAhAAsCQCAABEAgAEEVRg0BIAJBADYCHCACIAE2AhQgAkGUDTYCECACQSE2AgxBACEDDCsLQbIBIQMMEQsgAkHIATYCHCACIAE2AhQgAkHJFzYCECACQRU2AgxBACEDDCkLIAJBADYCACAGQQFqIQFB9QAhAwwPCyACLQApQQVGBEBB4wAhAwwPC0HiACEDDA4LIAAhASACQQA2AgALIAJBADoALEEJIQMMDAsgAkEANgIAIAdBAWohAUHAACEDDAsLQQELOgAsIAJBADYCACAGQQFqIQELQSkhAwwIC0E4IQMMBwsCQCABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRw0DIAFBAWohAQwFCyAEIAFBAWoiAUcNAAtBPiEDDCELQT4hAwwgCwsgAkEAOgAsDAELQQshAwwEC0E6IQMMAwsgAUEBaiEBQS0hAwwCCyACIAE6ACwgAkEANgIAIAZBAWohAUEMIQMMAQsgAkEANgIAIAZBAWohAUEKIQMMAAsAC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwXC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwWC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwVC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwUC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwTC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwSC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwRC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwQC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwPC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwOC0EAIQMgAkEANgIcIAIgATYCFCACQcASNgIQIAJBCzYCDAwNC0EAIQMgAkEANgIcIAIgATYCFCACQZUJNgIQIAJBCzYCDAwMC0EAIQMgAkEANgIcIAIgATYCFCACQeEPNgIQIAJBCjYCDAwLC0EAIQMgAkEANgIcIAIgATYCFCACQfsPNgIQIAJBCjYCDAwKC0EAIQMgAkEANgIcIAIgATYCFCACQfEZNgIQIAJBAjYCDAwJC0EAIQMgAkEANgIcIAIgATYCFCACQcQUNgIQIAJBAjYCDAwIC0EAIQMgAkEANgIcIAIgATYCFCACQfIVNgIQIAJBAjYCDAwHCyACQQI2AhwgAiABNgIUIAJBnBo2AhAgAkEWNgIMQQAhAwwGC0EBIQMMBQtB1AAhAyABIARGDQQgCEEIaiEJIAIoAgAhBQJAAkAgASAERwRAIAVB2MIAaiEHIAQgBWogAWshACAFQX9zQQpqIgUgAWohBgNAIAEtAAAgBy0AAEcEQEECIQcMAwsgBUUEQEEAIQcgBiEBDAMLIAVBAWshBSAHQQFqIQcgBCABQQFqIgFHDQALIAAhBSAEIQELIAlBATYCACACIAU2AgAMAQsgAkEANgIAIAkgBzYCAAsgCSABNgIEIAgoAgwhACAIKAIIDgMBBAIACwALIAJBADYCHCACQbUaNgIQIAJBFzYCDCACIABBAWo2AhRBACEDDAILIAJBADYCHCACIAA2AhQgAkHKGjYCECACQQk2AgxBACEDDAELIAEgBEYEQEEiIQMMAQsgAkEJNgIIIAIgATYCBEEhIQMLIAhBEGokACADRQRAIAIoAgwhAAwBCyACIAM2AhxBACEAIAIoAgQiAUUNACACIAEgBCACKAIIEQEAIgFFDQAgAiAENgIUIAIgATYCDCABIQALIAALvgIBAn8gAEEAOgAAIABB3ABqIgFBAWtBADoAACAAQQA6AAIgAEEAOgABIAFBA2tBADoAACABQQJrQQA6AAAgAEEAOgADIAFBBGtBADoAAEEAIABrQQNxIgEgAGoiAEEANgIAQdwAIAFrQXxxIgIgAGoiAUEEa0EANgIAAkAgAkEJSQ0AIABBADYCCCAAQQA2AgQgAUEIa0EANgIAIAFBDGtBADYCACACQRlJDQAgAEEANgIYIABBADYCFCAAQQA2AhAgAEEANgIMIAFBEGtBADYCACABQRRrQQA2AgAgAUEYa0EANgIAIAFBHGtBADYCACACIABBBHFBGHIiAmsiAUEgSQ0AIAAgAmohAANAIABCADcDGCAAQgA3AxAgAEIANwMIIABCADcDACAAQSBqIQAgAUEgayIBQR9LDQALCwtWAQF/AkAgACgCDA0AAkACQAJAAkAgAC0ALw4DAQADAgsgACgCOCIBRQ0AIAEoAiwiAUUNACAAIAERAAAiAQ0DC0EADwsACyAAQcMWNgIQQQ4hAQsgAQsaACAAKAIMRQRAIABB0Rs2AhAgAEEVNgIMCwsUACAAKAIMQRVGBEAgAEEANgIMCwsUACAAKAIMQRZGBEAgAEEANgIMCwsHACAAKAIMCwcAIAAoAhALCQAgACABNgIQCwcAIAAoAhQLFwAgAEEkTwRAAAsgAEECdEGgM2ooAgALFwAgAEEuTwRAAAsgAEECdEGwNGooAgALvwkBAX9B6yghAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB9ysPC0GQMQ8LQdcxDwtBoi0PC0HUJw8LQeArDwtBnywPC0HrMQ8LQdUfDwtByjEPC0HeJQ8LQdQeDwtB9BwPC0GnMg8LQbEdDwtBoB0PC0G5MQ8LQbwwDwtBkiEPC0GzJg8LQeksDwtBrB4PC0HUKw8LQfcmDwtBgCYPC0GwIQ8LQf4eDwtBjSMPC0GJLQ8LQfciDwtBoDEPC0GuHw8LQcYlDwtB6B4PC0GTIg8LQcIvDwtBwx0PC0GLLA8LQeEdDwtBjS8PC0HqIQ8LQbQtDwtB0i8PC0HfMg8LQdIyDwtB8DAPC0GpIg8LQfkjDwtBmR4PC0G1LA8LQZswDwtBkjIPC0G2Kw8LQcIiDwtB+DIPC0GeJQ8LQdAiDwtBuh4PC0GBHg8LAAtB1iEhAQsgAQsWACAAIAAtAC1B/gFxIAFBAEdyOgAtCxkAIAAgAC0ALUH9AXEgAUEAR0EBdHI6AC0LGQAgACAALQAtQfsBcSABQQBHQQJ0cjoALQsZACAAIAAtAC1B9wFxIAFBAEdBA3RyOgAtCz4BAn8CQCAAKAI4IgNFDQAgAygCBCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBxhE2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCCCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9go2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCDCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7Ro2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCECIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlRA2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCFCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBqhs2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCGCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7RM2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCKCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9gg2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCHCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBwhk2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCICIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlBQ2AhBBGCEECyAEC1kBAn8CQCAALQAoQQFGDQAgAC8BMiIBQeQAa0HkAEkNACABQcwBRg0AIAFBsAJGDQAgAC8BMCIAQcAAcQ0AQQEhAiAAQYgEcUGABEYNACAAQShxRSECCyACC4wBAQJ/AkACQAJAIAAtACpFDQAgAC0AK0UNACAALwEwIgFBAnFFDQEMAgsgAC8BMCIBQQFxRQ0BC0EBIQIgAC0AKEEBRg0AIAAvATIiAEHkAGtB5ABJDQAgAEHMAUYNACAAQbACRg0AIAFBwABxDQBBACECIAFBiARxQYAERg0AIAFBKHFBAEchAgsgAgtzACAAQRBq/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAA/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAAQTBq/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAAQSBq/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAAQd0BNgIcCwYAIAAQMguaLQELfyMAQRBrIgokAEGk0AAoAgAiCUUEQEHk0wAoAgAiBUUEQEHw0wBCfzcCAEHo0wBCgICEgICAwAA3AgBB5NMAIApBCGpBcHFB2KrVqgVzIgU2AgBB+NMAQQA2AgBByNMAQQA2AgALQczTAEGA1AQ2AgBBnNAAQYDUBDYCAEGw0AAgBTYCAEGs0ABBfzYCAEHQ0wBBgKwDNgIAA0AgAUHI0ABqIAFBvNAAaiICNgIAIAIgAUG00ABqIgM2AgAgAUHA0ABqIAM2AgAgAUHQ0ABqIAFBxNAAaiIDNgIAIAMgAjYCACABQdjQAGogAUHM0ABqIgI2AgAgAiADNgIAIAFB1NAAaiACNgIAIAFBIGoiAUGAAkcNAAtBjNQEQcGrAzYCAEGo0ABB9NMAKAIANgIAQZjQAEHAqwM2AgBBpNAAQYjUBDYCAEHM/wdBODYCAEGI1AQhCQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAQewBTQRAQYzQACgCACIGQRAgAEETakFwcSAAQQtJGyIEQQN2IgB2IgFBA3EEQAJAIAFBAXEgAHJBAXMiAkEDdCIAQbTQAGoiASAAQbzQAGooAgAiACgCCCIDRgRAQYzQACAGQX4gAndxNgIADAELIAEgAzYCCCADIAE2AgwLIABBCGohASAAIAJBA3QiAkEDcjYCBCAAIAJqIgAgACgCBEEBcjYCBAwRC0GU0AAoAgAiCCAETw0BIAEEQAJAQQIgAHQiAkEAIAJrciABIAB0cWgiAEEDdCICQbTQAGoiASACQbzQAGooAgAiAigCCCIDRgRAQYzQACAGQX4gAHdxIgY2AgAMAQsgASADNgIIIAMgATYCDAsgAiAEQQNyNgIEIABBA3QiACAEayEFIAAgAmogBTYCACACIARqIgQgBUEBcjYCBCAIBEAgCEF4cUG00ABqIQBBoNAAKAIAIQMCf0EBIAhBA3Z0IgEgBnFFBEBBjNAAIAEgBnI2AgAgAAwBCyAAKAIICyIBIAM2AgwgACADNgIIIAMgADYCDCADIAE2AggLIAJBCGohAUGg0AAgBDYCAEGU0AAgBTYCAAwRC0GQ0AAoAgAiC0UNASALaEECdEG80gBqKAIAIgAoAgRBeHEgBGshBSAAIQIDQAJAIAIoAhAiAUUEQCACQRRqKAIAIgFFDQELIAEoAgRBeHEgBGsiAyAFSSECIAMgBSACGyEFIAEgACACGyEAIAEhAgwBCwsgACgCGCEJIAAoAgwiAyAARwRAQZzQACgCABogAyAAKAIIIgE2AgggASADNgIMDBALIABBFGoiAigCACIBRQRAIAAoAhAiAUUNAyAAQRBqIQILA0AgAiEHIAEiA0EUaiICKAIAIgENACADQRBqIQIgAygCECIBDQALIAdBADYCAAwPC0F/IQQgAEG/f0sNACAAQRNqIgFBcHEhBEGQ0AAoAgAiCEUNAEEAIARrIQUCQAJAAkACf0EAIARBgAJJDQAaQR8gBEH///8HSw0AGiAEQSYgAUEIdmciAGt2QQFxIABBAXRrQT5qCyIGQQJ0QbzSAGooAgAiAkUEQEEAIQFBACEDDAELQQAhASAEQRkgBkEBdmtBACAGQR9HG3QhAEEAIQMDQAJAIAIoAgRBeHEgBGsiByAFTw0AIAIhAyAHIgUNAEEAIQUgAiEBDAMLIAEgAkEUaigCACIHIAcgAiAAQR12QQRxakEQaigCACICRhsgASAHGyEBIABBAXQhACACDQALCyABIANyRQRAQQAhA0ECIAZ0IgBBACAAa3IgCHEiAEUNAyAAaEECdEG80gBqKAIAIQELIAFFDQELA0AgASgCBEF4cSAEayICIAVJIQAgAiAFIAAbIQUgASADIAAbIQMgASgCECIABH8gAAUgAUEUaigCAAsiAQ0ACwsgA0UNACAFQZTQACgCACAEa08NACADKAIYIQcgAyADKAIMIgBHBEBBnNAAKAIAGiAAIAMoAggiATYCCCABIAA2AgwMDgsgA0EUaiICKAIAIgFFBEAgAygCECIBRQ0DIANBEGohAgsDQCACIQYgASIAQRRqIgIoAgAiAQ0AIABBEGohAiAAKAIQIgENAAsgBkEANgIADA0LQZTQACgCACIDIARPBEBBoNAAKAIAIQECQCADIARrIgJBEE8EQCABIARqIgAgAkEBcjYCBCABIANqIAI2AgAgASAEQQNyNgIEDAELIAEgA0EDcjYCBCABIANqIgAgACgCBEEBcjYCBEEAIQBBACECC0GU0AAgAjYCAEGg0AAgADYCACABQQhqIQEMDwtBmNAAKAIAIgMgBEsEQCAEIAlqIgAgAyAEayIBQQFyNgIEQaTQACAANgIAQZjQACABNgIAIAkgBEEDcjYCBCAJQQhqIQEMDwtBACEBIAQCf0Hk0wAoAgAEQEHs0wAoAgAMAQtB8NMAQn83AgBB6NMAQoCAhICAgMAANwIAQeTTACAKQQxqQXBxQdiq1aoFczYCAEH40wBBADYCAEHI0wBBADYCAEGAgAQLIgAgBEHHAGoiBWoiBkEAIABrIgdxIgJPBEBB/NMAQTA2AgAMDwsCQEHE0wAoAgAiAUUNAEG80wAoAgAiCCACaiEAIAAgAU0gACAIS3ENAEEAIQFB/NMAQTA2AgAMDwtByNMALQAAQQRxDQQCQAJAIAkEQEHM0wAhAQNAIAEoAgAiACAJTQRAIAAgASgCBGogCUsNAwsgASgCCCIBDQALC0EAEDMiAEF/Rg0FIAIhBkHo0wAoAgAiAUEBayIDIABxBEAgAiAAayAAIANqQQAgAWtxaiEGCyAEIAZPDQUgBkH+////B0sNBUHE0wAoAgAiAwRAQbzTACgCACIHIAZqIQEgASAHTQ0GIAEgA0sNBgsgBhAzIgEgAEcNAQwHCyAGIANrIAdxIgZB/v///wdLDQQgBhAzIQAgACABKAIAIAEoAgRqRg0DIAAhAQsCQCAGIARByABqTw0AIAFBf0YNAEHs0wAoAgAiACAFIAZrakEAIABrcSIAQf7///8HSwRAIAEhAAwHCyAAEDNBf0cEQCAAIAZqIQYgASEADAcLQQAgBmsQMxoMBAsgASIAQX9HDQUMAwtBACEDDAwLQQAhAAwKCyAAQX9HDQILQcjTAEHI0wAoAgBBBHI2AgALIAJB/v///wdLDQEgAhAzIQBBABAzIQEgAEF/Rg0BIAFBf0YNASAAIAFPDQEgASAAayIGIARBOGpNDQELQbzTAEG80wAoAgAgBmoiATYCAEHA0wAoAgAgAUkEQEHA0wAgATYCAAsCQAJAAkBBpNAAKAIAIgIEQEHM0wAhAQNAIAAgASgCACIDIAEoAgQiBWpGDQIgASgCCCIBDQALDAILQZzQACgCACIBQQBHIAAgAU9xRQRAQZzQACAANgIAC0EAIQFB0NMAIAY2AgBBzNMAIAA2AgBBrNAAQX82AgBBsNAAQeTTACgCADYCAEHY0wBBADYCAANAIAFByNAAaiABQbzQAGoiAjYCACACIAFBtNAAaiIDNgIAIAFBwNAAaiADNgIAIAFB0NAAaiABQcTQAGoiAzYCACADIAI2AgAgAUHY0ABqIAFBzNAAaiICNgIAIAIgAzYCACABQdTQAGogAjYCACABQSBqIgFBgAJHDQALQXggAGtBD3EiASAAaiICIAZBOGsiAyABayIBQQFyNgIEQajQAEH00wAoAgA2AgBBmNAAIAE2AgBBpNAAIAI2AgAgACADakE4NgIEDAILIAAgAk0NACACIANJDQAgASgCDEEIcQ0AQXggAmtBD3EiACACaiIDQZjQACgCACAGaiIHIABrIgBBAXI2AgQgASAFIAZqNgIEQajQAEH00wAoAgA2AgBBmNAAIAA2AgBBpNAAIAM2AgAgAiAHakE4NgIEDAELIABBnNAAKAIASQRAQZzQACAANgIACyAAIAZqIQNBzNMAIQECQAJAAkADQCADIAEoAgBHBEAgASgCCCIBDQEMAgsLIAEtAAxBCHFFDQELQczTACEBA0AgASgCACIDIAJNBEAgAyABKAIEaiIFIAJLDQMLIAEoAgghAQwACwALIAEgADYCACABIAEoAgQgBmo2AgQgAEF4IABrQQ9xaiIJIARBA3I2AgQgA0F4IANrQQ9xaiIGIAQgCWoiBGshASACIAZGBEBBpNAAIAQ2AgBBmNAAQZjQACgCACABaiIANgIAIAQgAEEBcjYCBAwIC0Gg0AAoAgAgBkYEQEGg0AAgBDYCAEGU0ABBlNAAKAIAIAFqIgA2AgAgBCAAQQFyNgIEIAAgBGogADYCAAwICyAGKAIEIgVBA3FBAUcNBiAFQXhxIQggBUH/AU0EQCAFQQN2IQMgBigCCCIAIAYoAgwiAkYEQEGM0ABBjNAAKAIAQX4gA3dxNgIADAcLIAIgADYCCCAAIAI2AgwMBgsgBigCGCEHIAYgBigCDCIARwRAIAAgBigCCCICNgIIIAIgADYCDAwFCyAGQRRqIgIoAgAiBUUEQCAGKAIQIgVFDQQgBkEQaiECCwNAIAIhAyAFIgBBFGoiAigCACIFDQAgAEEQaiECIAAoAhAiBQ0ACyADQQA2AgAMBAtBeCAAa0EPcSIBIABqIgcgBkE4ayIDIAFrIgFBAXI2AgQgACADakE4NgIEIAIgBUE3IAVrQQ9xakE/ayIDIAMgAkEQakkbIgNBIzYCBEGo0ABB9NMAKAIANgIAQZjQACABNgIAQaTQACAHNgIAIANBEGpB1NMAKQIANwIAIANBzNMAKQIANwIIQdTTACADQQhqNgIAQdDTACAGNgIAQczTACAANgIAQdjTAEEANgIAIANBJGohAQNAIAFBBzYCACAFIAFBBGoiAUsNAAsgAiADRg0AIAMgAygCBEF+cTYCBCADIAMgAmsiBTYCACACIAVBAXI2AgQgBUH/AU0EQCAFQXhxQbTQAGohAAJ/QYzQACgCACIBQQEgBUEDdnQiA3FFBEBBjNAAIAEgA3I2AgAgAAwBCyAAKAIICyIBIAI2AgwgACACNgIIIAIgADYCDCACIAE2AggMAQtBHyEBIAVB////B00EQCAFQSYgBUEIdmciAGt2QQFxIABBAXRrQT5qIQELIAIgATYCHCACQgA3AhAgAUECdEG80gBqIQBBkNAAKAIAIgNBASABdCIGcUUEQCAAIAI2AgBBkNAAIAMgBnI2AgAgAiAANgIYIAIgAjYCCCACIAI2AgwMAQsgBUEZIAFBAXZrQQAgAUEfRxt0IQEgACgCACEDAkADQCADIgAoAgRBeHEgBUYNASABQR12IQMgAUEBdCEBIAAgA0EEcWpBEGoiBigCACIDDQALIAYgAjYCACACIAA2AhggAiACNgIMIAIgAjYCCAwBCyAAKAIIIgEgAjYCDCAAIAI2AgggAkEANgIYIAIgADYCDCACIAE2AggLQZjQACgCACIBIARNDQBBpNAAKAIAIgAgBGoiAiABIARrIgFBAXI2AgRBmNAAIAE2AgBBpNAAIAI2AgAgACAEQQNyNgIEIABBCGohAQwIC0EAIQFB/NMAQTA2AgAMBwtBACEACyAHRQ0AAkAgBigCHCICQQJ0QbzSAGoiAygCACAGRgRAIAMgADYCACAADQFBkNAAQZDQACgCAEF+IAJ3cTYCAAwCCyAHQRBBFCAHKAIQIAZGG2ogADYCACAARQ0BCyAAIAc2AhggBigCECICBEAgACACNgIQIAIgADYCGAsgBkEUaigCACICRQ0AIABBFGogAjYCACACIAA2AhgLIAEgCGohASAGIAhqIgYoAgQhBQsgBiAFQX5xNgIEIAEgBGogATYCACAEIAFBAXI2AgQgAUH/AU0EQCABQXhxQbTQAGohAAJ/QYzQACgCACICQQEgAUEDdnQiAXFFBEBBjNAAIAEgAnI2AgAgAAwBCyAAKAIICyIBIAQ2AgwgACAENgIIIAQgADYCDCAEIAE2AggMAQtBHyEFIAFB////B00EQCABQSYgAUEIdmciAGt2QQFxIABBAXRrQT5qIQULIAQgBTYCHCAEQgA3AhAgBUECdEG80gBqIQBBkNAAKAIAIgJBASAFdCIDcUUEQCAAIAQ2AgBBkNAAIAIgA3I2AgAgBCAANgIYIAQgBDYCCCAEIAQ2AgwMAQsgAUEZIAVBAXZrQQAgBUEfRxt0IQUgACgCACEAAkADQCAAIgIoAgRBeHEgAUYNASAFQR12IQAgBUEBdCEFIAIgAEEEcWpBEGoiAygCACIADQALIAMgBDYCACAEIAI2AhggBCAENgIMIAQgBDYCCAwBCyACKAIIIgAgBDYCDCACIAQ2AgggBEEANgIYIAQgAjYCDCAEIAA2AggLIAlBCGohAQwCCwJAIAdFDQACQCADKAIcIgFBAnRBvNIAaiICKAIAIANGBEAgAiAANgIAIAANAUGQ0AAgCEF+IAF3cSIINgIADAILIAdBEEEUIAcoAhAgA0YbaiAANgIAIABFDQELIAAgBzYCGCADKAIQIgEEQCAAIAE2AhAgASAANgIYCyADQRRqKAIAIgFFDQAgAEEUaiABNgIAIAEgADYCGAsCQCAFQQ9NBEAgAyAEIAVqIgBBA3I2AgQgACADaiIAIAAoAgRBAXI2AgQMAQsgAyAEaiICIAVBAXI2AgQgAyAEQQNyNgIEIAIgBWogBTYCACAFQf8BTQRAIAVBeHFBtNAAaiEAAn9BjNAAKAIAIgFBASAFQQN2dCIFcUUEQEGM0AAgASAFcjYCACAADAELIAAoAggLIgEgAjYCDCAAIAI2AgggAiAANgIMIAIgATYCCAwBC0EfIQEgBUH///8HTQRAIAVBJiAFQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAQsgAiABNgIcIAJCADcCECABQQJ0QbzSAGohAEEBIAF0IgQgCHFFBEAgACACNgIAQZDQACAEIAhyNgIAIAIgADYCGCACIAI2AgggAiACNgIMDAELIAVBGSABQQF2a0EAIAFBH0cbdCEBIAAoAgAhBAJAA0AgBCIAKAIEQXhxIAVGDQEgAUEddiEEIAFBAXQhASAAIARBBHFqQRBqIgYoAgAiBA0ACyAGIAI2AgAgAiAANgIYIAIgAjYCDCACIAI2AggMAQsgACgCCCIBIAI2AgwgACACNgIIIAJBADYCGCACIAA2AgwgAiABNgIICyADQQhqIQEMAQsCQCAJRQ0AAkAgACgCHCIBQQJ0QbzSAGoiAigCACAARgRAIAIgAzYCACADDQFBkNAAIAtBfiABd3E2AgAMAgsgCUEQQRQgCSgCECAARhtqIAM2AgAgA0UNAQsgAyAJNgIYIAAoAhAiAQRAIAMgATYCECABIAM2AhgLIABBFGooAgAiAUUNACADQRRqIAE2AgAgASADNgIYCwJAIAVBD00EQCAAIAQgBWoiAUEDcjYCBCAAIAFqIgEgASgCBEEBcjYCBAwBCyAAIARqIgcgBUEBcjYCBCAAIARBA3I2AgQgBSAHaiAFNgIAIAgEQCAIQXhxQbTQAGohAUGg0AAoAgAhAwJ/QQEgCEEDdnQiAiAGcUUEQEGM0AAgAiAGcjYCACABDAELIAEoAggLIgIgAzYCDCABIAM2AgggAyABNgIMIAMgAjYCCAtBoNAAIAc2AgBBlNAAIAU2AgALIABBCGohAQsgCkEQaiQAIAELQwAgAEUEQD8AQRB0DwsCQCAAQf//A3ENACAAQQBIDQAgAEEQdkAAIgBBf0YEQEH80wBBMDYCAEF/DwsgAEEQdA8LAAsL3D8iAEGACAsJAQAAAAIAAAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==`,`base64`)})),te=/* @__PURE__ */ m(((e,t)=>{let n=[`GET`,`HEAD`,`POST`],r=new Set(n),i=[101,204,205,304],a=[301,302,303,307,308],o=new Set(a),s=/* @__PURE__ */ `1.7.9.11.13.15.17.19.20.21.22.23.25.37.42.43.53.69.77.79.87.95.101.102.103.104.109.110.111.113.115.117.119.123.135.137.139.143.161.179.389.427.465.512.513.514.515.526.530.531.532.540.548.554.556.563.587.601.636.989.990.993.995.1719.1720.1723.2049.3659.4045.4190.5060.5061.6000.6566.6665.6666.6667.6668.6669.6679.6697.10080`.split(`.`),c=new Set(s),l=[``,`no-referrer`,`no-referrer-when-downgrade`,`same-origin`,`origin`,`strict-origin`,`origin-when-cross-origin`,`strict-origin-when-cross-origin`,`unsafe-url`],u=new Set(l),d=[`follow`,`manual`,`error`],f=[`GET`,`HEAD`,`OPTIONS`,`TRACE`],p=new Set(f),m=[`navigate`,`same-origin`,`no-cors`,`cors`],h=[`omit`,`same-origin`,`include`],g=[`default`,`no-store`,`reload`,`no-cache`,`force-cache`,`only-if-cached`],_=[`content-encoding`,`content-language`,`content-location`,`content-type`,`content-length`],v=[`half`],y=[`CONNECT`,`TRACE`,`TRACK`],b=new Set(y),x=[`audio`,`audioworklet`,`font`,`image`,`manifest`,`paintworklet`,`script`,`style`,`track`,`video`,`xslt`,``];t.exports={subresource:x,forbiddenMethods:y,requestBodyHeader:_,referrerPolicy:l,requestRedirect:d,requestMode:m,requestCredentials:h,requestCache:g,redirectStatus:a,corsSafeListedMethods:n,nullBodyStatus:i,safeMethods:f,badPorts:s,requestDuplex:v,subresourceSet:new Set(x),badPortsSet:c,redirectStatusSet:o,corsSafeListedMethodsSet:r,safeMethodsSet:p,forbiddenMethodsSet:b,referrerPolicySet:u}})),R=/* @__PURE__ */ m(((e,t)=>{let n=Symbol.for(`undici.globalOrigin.1`);function r(){return globalThis[n]}function i(e){if(e===void 0){Object.defineProperty(globalThis,n,{value:void 0,writable:!0,enumerable:!1,configurable:!1});return}let t=new URL(e);if(t.protocol!==`http:`&&t.protocol!==`https:`)throw TypeError(`Only http & https urls are allowed, received ${t.protocol}`);Object.defineProperty(globalThis,n,{value:t,writable:!0,enumerable:!1,configurable:!1})}t.exports={getGlobalOrigin:r,setGlobalOrigin:i}})),z=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),r=new TextEncoder,i=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/,a=/[\u000A\u000D\u0009\u0020]/,o=/[\u0009\u000A\u000C\u000D\u0020]/g,s=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function c(e){n(e.protocol===`data:`);let t=l(e,!0);t=t.slice(5);let r={position:0},i=d(`,`,t,r),a=i.length;if(i=w(i,!0,!0),r.position>=t.length)return`failure`;r.position++;let o=f(t.slice(a+1));if(/;(\u0020){0,}base64$/i.test(i)){if(o=v(E(o)),o===`failure`)return`failure`;i=i.slice(0,-6),i=i.replace(/(\u0020)+$/,``),i=i.slice(0,-1)}i.startsWith(`;`)&&(i=`text/plain`+i);let s=_(i);return s===`failure`&&(s=_(`text/plain;charset=US-ASCII`)),{mimeType:s,body:o}}function l(e,t=!1){if(!t)return e.href;let n=e.href,r=e.hash.length,i=r===0?n:n.substring(0,n.length-r);return!r&&n.endsWith(`#`)?i.slice(0,-1):i}function u(e,t,n){let r=``;for(;n.position=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function m(e){return e>=48&&e<=57?e-48:(e&223)-55}function g(e){let t=e.length,n=new Uint8Array(t),r=0;for(let i=0;ie.length)return`failure`;t.position++;let r=d(`;`,e,t);if(r=S(r,!1,!0),r.length===0||!i.test(r))return`failure`;let o=n.toLowerCase(),c=r.toLowerCase(),l={type:o,subtype:c,parameters:/* @__PURE__ */ new Map,essence:`${o}/${c}`};for(;t.positiona.test(e),e,t);let n=u(e=>e!==`;`&&e!==`=`,e,t);if(n=n.toLowerCase(),t.positione.length)break;let r=null;if(e[t.position]===`"`)r=y(e,t,!0),d(`;`,e,t);else if(r=d(`;`,e,t),r=S(r,!1,!0),r.length===0)continue;n.length!==0&&i.test(n)&&(r.length===0||s.test(r))&&!l.parameters.has(n)&&l.parameters.set(n,r)}return l}function v(e){e=e.replace(o,``);let t=e.length;if(t%4==0&&e.charCodeAt(t-1)===61&&(--t,e.charCodeAt(t-1)===61&&--t),t%4==1||/[^+/0-9A-Za-z]/.test(e.length===t?e:e.substring(0,t)))return`failure`;let n=Buffer.from(e,`base64`);return new Uint8Array(n.buffer,n.byteOffset,n.byteLength)}function y(e,t,r){let i=t.position,a=``;for(n(e[t.position]===`"`),t.position++;a+=u(e=>e!==`"`&&e!==`\\`,e,t),!(t.position>=e.length);){let r=e[t.position];if(t.position++,r===`\\`){if(t.position>=e.length){a+=`\\`;break}a+=e[t.position],t.position++}else{n(r===`"`);break}}return r?a:e.slice(i,t.position)}function b(e){n(e!==`failure`);let{parameters:t,essence:r}=e,a=r;for(let[e,n]of t.entries())a+=`;`,a+=e,a+=`=`,i.test(n)||(n=n.replace(/(\\|")/g,`\\$1`),n=`"`+n,n+=`"`),a+=n;return a}function x(e){return e===13||e===10||e===9||e===32}function S(e,t=!0,n=!0){return T(e,t,n,x)}function C(e){return e===13||e===10||e===9||e===12||e===32}function w(e,t=!0,n=!0){return T(e,t,n,C)}function T(e,t,n,r){let i=0,a=e.length-1;if(t)for(;i0&&r(e.charCodeAt(a));)a--;return i===0&&a===e.length-1?e:e.slice(i,a+1)}function E(e){let t=e.length;if(65535>t)return String.fromCharCode.apply(null,e);let n=``,r=0,i=65535;for(;rt&&(i=t-r),n+=String.fromCharCode.apply(null,e.subarray(r,r+=i));return n}function D(e){switch(e.essence){case`application/ecmascript`:case`application/javascript`:case`application/x-ecmascript`:case`application/x-javascript`:case`text/ecmascript`:case`text/javascript`:case`text/javascript1.0`:case`text/javascript1.1`:case`text/javascript1.2`:case`text/javascript1.3`:case`text/javascript1.4`:case`text/javascript1.5`:case`text/jscript`:case`text/livescript`:case`text/x-ecmascript`:case`text/x-javascript`:return`text/javascript`;case`application/json`:case`text/json`:return`application/json`;case`image/svg+xml`:return`image/svg+xml`;case`text/xml`:case`application/xml`:return`application/xml`}return e.subtype.endsWith(`+json`)?`application/json`:e.subtype.endsWith(`+xml`)?`application/xml`:``}t.exports={dataURLProcessor:c,URLSerializer:l,collectASequenceOfCodePoints:u,collectASequenceOfCodePointsFast:d,stringPercentDecode:f,parseMIMEType:_,collectAnHTTPQuotedString:y,serializeAMimeType:b,removeChars:T,removeHTTPWhitespace:S,minimizeSupportedMimeType:D,HTTP_TOKEN_CODEPOINTS:i,isomorphicDecode:E}})),B=/* @__PURE__ */ m(((e,t)=>{let{types:n,inspect:r}=h(`node:util`),{markAsUncloneable:i}=h(`node:worker_threads`),{toUSVString:a}=O(),o={};o.converters={},o.util={},o.errors={},o.errors.exception=function(e){return/* @__PURE__ */ TypeError(`${e.header}: ${e.message}`)},o.errors.conversionFailed=function(e){let t=e.types.length===1?``:` one of`,n=`${e.argument} could not be converted to${t}: ${e.types.join(`, `)}.`;return o.errors.exception({header:e.prefix,message:n})},o.errors.invalidArgument=function(e){return o.errors.exception({header:e.prefix,message:`"${e.value}" is an invalid ${e.type}.`})},o.brandCheck=function(e,t,n){if(n?.strict!==!1){if(!(e instanceof t)){let e=/* @__PURE__ */ TypeError(`Illegal invocation`);throw e.code=`ERR_INVALID_THIS`,e}}else if(e?.[Symbol.toStringTag]!==t.prototype[Symbol.toStringTag]){let e=/* @__PURE__ */ TypeError(`Illegal invocation`);throw e.code=`ERR_INVALID_THIS`,e}},o.argumentLengthCheck=function({length:e},t,n){if(e{}),o.util.ConvertToInt=function(e,t,n,r){let i,a;t===64?(i=2**53-1,a=n===`unsigned`?0:(-2)**53+1):n===`unsigned`?(a=0,i=2**t-1):(a=(-2)**t-1,i=2**(t-1)-1);let s=Number(e);if(s===0&&(s=0),r?.enforceRange===!0){if(Number.isNaN(s)||s===1/0||s===-1/0)throw o.errors.exception({header:`Integer conversion`,message:`Could not convert ${o.util.Stringify(e)} to an integer.`});if(s=o.util.IntegerPart(s),si)throw o.errors.exception({header:`Integer conversion`,message:`Value must be between ${a}-${i}, got ${s}.`});return s}return!Number.isNaN(s)&&r?.clamp===!0?(s=Math.min(Math.max(s,a),i),s=Math.floor(s)%2==0?Math.floor(s):Math.ceil(s),s):Number.isNaN(s)||s===0&&Object.is(0,s)||s===1/0||s===-1/0?0:(s=o.util.IntegerPart(s),s%=2**t,n===`signed`&&s>=2**t-1?s-2**t:s)},o.util.IntegerPart=function(e){let t=Math.floor(Math.abs(e));return e<0?-1*t:t},o.util.Stringify=function(e){switch(o.util.Type(e)){case`Symbol`:return`Symbol(${e.description})`;case`Object`:return r(e);case`String`:return`"${e}"`;default:return`${e}`}},o.sequenceConverter=function(e){return(t,n,r,i)=>{if(o.util.Type(t)!==`Object`)throw o.errors.exception({header:n,message:`${r} (${o.util.Stringify(t)}) is not iterable.`});let a=typeof i==`function`?i():t?.[Symbol.iterator]?.(),s=[],c=0;if(a===void 0||typeof a.next!=`function`)throw o.errors.exception({header:n,message:`${r} is not iterable.`});for(;;){let{done:t,value:i}=a.next();if(t)break;s.push(e(i,n,`${r}[${c++}]`))}return s}},o.recordConverter=function(e,t){return(r,i,a)=>{if(o.util.Type(r)!==`Object`)throw o.errors.exception({header:i,message:`${a} ("${o.util.Type(r)}") is not an Object.`});let s={};if(!n.isProxy(r)){let n=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(let o of n){let n=e(o,i,a);s[n]=t(r[o],i,a)}return s}let c=Reflect.ownKeys(r);for(let n of c)if(Reflect.getOwnPropertyDescriptor(r,n)?.enumerable){let o=e(n,i,a);s[o]=t(r[n],i,a)}return s}},o.interfaceConverter=function(e){return(t,n,r,i)=>{if(i?.strict!==!1&&!(t instanceof e))throw o.errors.exception({header:n,message:`Expected ${r} ("${o.util.Stringify(t)}") to be an instance of ${e.name}.`});return t}},o.dictionaryConverter=function(e){return(t,n,r)=>{let i=o.util.Type(t),a={};if(i===`Null`||i===`Undefined`)return a;if(i!==`Object`)throw o.errors.exception({header:n,message:`Expected ${t} to be one of: Null, Undefined, Object.`});for(let i of e){let{key:e,defaultValue:s,required:c,converter:l}=i;if(c===!0&&!Object.hasOwn(t,e))throw o.errors.exception({header:n,message:`Missing required key "${e}".`});let u=t[e],d=Object.hasOwn(i,`defaultValue`);if(d&&u!==null&&(u??=s()),c||d||u!==void 0){if(u=l(u,n,`${r}.${e}`),i.allowedValues&&!i.allowedValues.includes(u))throw o.errors.exception({header:n,message:`${u} is not an accepted type. Expected one of ${i.allowedValues.join(`, `)}.`});a[e]=u}}return a}},o.nullableConverter=function(e){return(t,n,r)=>t===null?t:e(t,n,r)},o.converters.DOMString=function(e,t,n,r){if(e===null&&r?.legacyNullToEmptyString)return``;if(typeof e==`symbol`)throw o.errors.exception({header:t,message:`${n} is a symbol, which cannot be converted to a DOMString.`});return String(e)},o.converters.ByteString=function(e,t,n){let r=o.converters.DOMString(e,t,n);for(let e=0;e255)throw TypeError(`Cannot convert argument to a ByteString because the character at index ${e} has a value of ${r.charCodeAt(e)} which is greater than 255.`);return r},o.converters.USVString=a,o.converters.boolean=function(e){return!!e},o.converters.any=function(e){return e},o.converters[`long long`]=function(e,t,n){return o.util.ConvertToInt(e,64,`signed`,void 0,t,n)},o.converters[`unsigned long long`]=function(e,t,n){return o.util.ConvertToInt(e,64,`unsigned`,void 0,t,n)},o.converters[`unsigned long`]=function(e,t,n){return o.util.ConvertToInt(e,32,`unsigned`,void 0,t,n)},o.converters[`unsigned short`]=function(e,t,n,r){return o.util.ConvertToInt(e,16,`unsigned`,r,t,n)},o.converters.ArrayBuffer=function(e,t,r,i){if(o.util.Type(e)!==`Object`||!n.isAnyArrayBuffer(e))throw o.errors.conversionFailed({prefix:t,argument:`${r} ("${o.util.Stringify(e)}")`,types:[`ArrayBuffer`]});if(i?.allowShared===!1&&n.isSharedArrayBuffer(e))throw o.errors.exception({header:`ArrayBuffer`,message:`SharedArrayBuffer is not allowed.`});if(e.resizable||e.growable)throw o.errors.exception({header:`ArrayBuffer`,message:`Received a resizable ArrayBuffer.`});return e},o.converters.TypedArray=function(e,t,r,i,a){if(o.util.Type(e)!==`Object`||!n.isTypedArray(e)||e.constructor.name!==t.name)throw o.errors.conversionFailed({prefix:r,argument:`${i} ("${o.util.Stringify(e)}")`,types:[t.name]});if(a?.allowShared===!1&&n.isSharedArrayBuffer(e.buffer))throw o.errors.exception({header:`ArrayBuffer`,message:`SharedArrayBuffer is not allowed.`});if(e.buffer.resizable||e.buffer.growable)throw o.errors.exception({header:`ArrayBuffer`,message:`Received a resizable ArrayBuffer.`});return e},o.converters.DataView=function(e,t,r,i){if(o.util.Type(e)!==`Object`||!n.isDataView(e))throw o.errors.exception({header:t,message:`${r} is not a DataView.`});if(i?.allowShared===!1&&n.isSharedArrayBuffer(e.buffer))throw o.errors.exception({header:`ArrayBuffer`,message:`SharedArrayBuffer is not allowed.`});if(e.buffer.resizable||e.buffer.growable)throw o.errors.exception({header:`ArrayBuffer`,message:`Received a resizable ArrayBuffer.`});return e},o.converters.BufferSource=function(e,t,r,i){if(n.isAnyArrayBuffer(e))return o.converters.ArrayBuffer(e,t,r,{...i,allowShared:!1});if(n.isTypedArray(e))return o.converters.TypedArray(e,e.constructor,t,r,{...i,allowShared:!1});if(n.isDataView(e))return o.converters.DataView(e,t,r,{...i,allowShared:!1});throw o.errors.conversionFailed({prefix:t,argument:`${r} ("${o.util.Stringify(e)}")`,types:[`BufferSource`]})},o.converters[`sequence`]=o.sequenceConverter(o.converters.ByteString),o.converters[`sequence>`]=o.sequenceConverter(o.converters[`sequence`]),o.converters[`record`]=o.recordConverter(o.converters.ByteString,o.converters.ByteString),t.exports={webidl:o}})),V=/* @__PURE__ */ m(((e,t)=>{let{Transform:n}=h(`node:stream`),r=h(`node:zlib`),{redirectStatusSet:i,referrerPolicySet:a,badPortsSet:o}=te(),{getGlobalOrigin:s}=R(),{collectASequenceOfCodePoints:c,collectAnHTTPQuotedString:l,removeChars:u,parseMIMEType:d}=z(),{performance:f}=h(`node:perf_hooks`),{isBlobLike:p,ReadableStreamFrom:m,isValidHTTPToken:g,normalizedMethodRecordsBase:_}=O(),v=h(`node:assert`),{isUint8Array:y}=h(`node:util/types`),{webidl:b}=B(),x=[],S;try{S=h(`node:crypto`);let e=[`sha256`,`sha384`,`sha512`];x=S.getHashes().filter(t=>e.includes(t))}catch{}function C(e){let t=e.urlList,n=t.length;return n===0?null:t[n-1].toString()}function w(e,t){if(!i.has(e.status))return null;let n=e.headersList.get(`location`,!0);return n!==null&&N(n)&&(T(n)||(n=E(n)),n=new URL(n,C(e))),n&&!n.hash&&(n.hash=t),n}function T(e){for(let t=0;t126||n<32)return!1}return!0}function E(e){return Buffer.from(e,`binary`).toString(`utf8`)}function D(e){return e.urlList[e.urlList.length-1]}function k(e){let t=D(e);return we(t)&&o.has(t.port)?`blocked`:`allowed`}function A(e){return e instanceof Error||e?.constructor?.name===`Error`||e?.constructor?.name===`DOMException`}function j(e){for(let t=0;t=32&&n<=126||n>=128&&n<=255))return!1}return!0}let M=g;function N(e){return(e[0]===` `||e[0]===` `||e[e.length-1]===` `||e[e.length-1]===` `||e.includes(` +`)||e.includes(`\r`)||e.includes(`\0`))===!1}function P(e,t){let{headersList:n}=t,r=(n.get(`referrer-policy`,!0)??``).split(`,`),i=``;if(r.length>0)for(let e=r.length;e!==0;e--){let t=r[e-1].trim();if(a.has(t)){i=t;break}}i!==``&&(e.referrerPolicy=i)}function F(){return`allowed`}function I(){return`success`}function L(){return`success`}function ee(e){let t=null;t=e.mode,e.headersList.set(`sec-fetch-mode`,t,!0)}function V(e){let t=e.origin;if(t!==`client`&&t!==void 0){if(e.responseTainting===`cors`||e.mode===`websocket`)e.headersList.append(`origin`,t,!0);else if(e.method!==`GET`&&e.method!==`HEAD`){switch(e.referrerPolicy){case`no-referrer`:t=null;break;case`no-referrer-when-downgrade`:case`strict-origin`:case`strict-origin-when-cross-origin`:e.origin&&Ce(e.origin)&&!Ce(D(e))&&(t=null);break;case`same-origin`:ue(e,D(e))||(t=null)}e.headersList.append(`origin`,t,!0)}}}function H(e,t){return e}function ne(e,t,n){return!e?.startTime||e.startTime4096&&(r=i);let a=ue(e,r),o=G(r)&&!G(e.url);switch(t){case`origin`:return i??W(n,!0);case`unsafe-url`:return r;case`same-origin`:return a?i:`no-referrer`;case`origin-when-cross-origin`:return a?r:i;case`strict-origin-when-cross-origin`:{let t=D(e);return ue(r,t)?r:G(r)&&!G(t)?`no-referrer`:i}default:return o?`no-referrer`:i}}function W(e,t){return v(e instanceof URL),e=new URL(e),e.protocol===`file:`||e.protocol===`about:`||e.protocol===`blank:`?`no-referrer`:(e.username=``,e.password=``,e.hash=``,t&&(e.pathname=``,e.search=``),e)}function G(e){return e instanceof URL?e.href===`about:blank`||e.href===`about:srcdoc`||e.protocol===`data:`||e.protocol===`file:`||t(e.origin):!1;function t(e){if(e==null||e===`null`)return!1;let t=new URL(e);return!!(t.protocol===`https:`||t.protocol===`wss:`||/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(t.hostname)||t.hostname===`localhost`||t.hostname.includes(`localhost.`)||t.hostname.endsWith(`.localhost`))}}function K(e,t){ /* istanbul ignore if: only if node is built with --without-ssl */ -if(S===void 0)return!0;let n=ce(t);if(n===`no metadata`||n.length===0)return!0;let r=le(n,q(n));for(let t of r){let n=t.algo,r=t.hash,i=S.createHash(n).update(e).digest(`base64`);if(i[i.length-1]===`=`&&(i=i[i.length-2]===`=`?i.slice(0,-2):i.slice(0,-1)),J(i,r))return!0}return!1}let K=/(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;function ce(e){let t=[],n=!0;for(let r of e.split(` `)){n=!1;let e=K.exec(r);if(e===null||e.groups===void 0||e.groups.algo===void 0)continue;let i=e.groups.algo.toLowerCase();x.includes(i)&&t.push(e.groups)}return n===!0?`no metadata`:t}function q(e){let t=e[0].algo;if(t[3]===`5`)return t;for(let n=1;n{e=n,t=r}),resolve:e,reject:t}}function fe(e){return e.controller.state===`aborted`}function pe(e){return e.controller.state===`aborted`||e.controller.state===`terminated`}function me(e){return _[e.toLowerCase()]??e}function he(e){let t=JSON.stringify(e);if(t===void 0)throw TypeError(`Value is not JSON serializable`);return v(typeof t==`string`),t}let ge=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function _e(e,t,n=0,r=1){class i{#e;#t;#n;constructor(e,t){this.#e=e,this.#t=t,this.#n=0}next(){if(typeof this!=`object`||this===null||!(#e in this))throw TypeError(`'next' called on an object that does not implement interface ${e} Iterator.`);let i=this.#n,a=this.#e[t];if(i>=a.length)return{value:void 0,done:!0};let{[n]:o,[r]:s}=a[i];this.#n=i+1;let c;switch(this.#t){case`key`:c=o;break;case`value`:c=s;break;case`key+value`:c=[o,s]}return{value:c,done:!1}}}return delete i.prototype.constructor,Object.setPrototypeOf(i.prototype,ge),Object.defineProperties(i.prototype,{[Symbol.toStringTag]:{writable:!1,enumerable:!1,configurable:!0,value:`${e} Iterator`},next:{writable:!0,enumerable:!0,configurable:!0}}),function(e,t){return new i(e,t)}}function ve(e,t,n,r=0,i=1){let a=_e(e,n,r,i),o={keys:{writable:!0,enumerable:!0,configurable:!0,value:function(){return b.brandCheck(this,t),a(this,`key`)}},values:{writable:!0,enumerable:!0,configurable:!0,value:function(){return b.brandCheck(this,t),a(this,`value`)}},entries:{writable:!0,enumerable:!0,configurable:!0,value:function(){return b.brandCheck(this,t),a(this,`key+value`)}},forEach:{writable:!0,enumerable:!0,configurable:!0,value:function(n,r=globalThis){if(b.brandCheck(this,t),b.argumentLengthCheck(arguments,1,`${e}.forEach`),typeof n!=`function`)throw TypeError(`Failed to execute 'forEach' on '${e}': parameter 1 is not of type 'Function'.`);for(let{0:e,1:t}of a(this,`key+value`))n.call(r,t,e,this)}}};return Object.defineProperties(t.prototype,{...o,[Symbol.iterator]:{writable:!0,enumerable:!1,configurable:!0,value:o.entries.value}})}async function ye(e,t,n){let r=t,i=n,a;try{a=e.stream.getReader()}catch(e){i(e);return}try{r(await Se(a))}catch(e){i(e)}}function X(e){return e instanceof ReadableStream||e[Symbol.toStringTag]===`ReadableStream`&&typeof e.tee==`function`}function be(e){try{e.close(),e.byobRequest?.respond(0)}catch(e){if(!e.message.includes(`Controller is already closed`)&&!e.message.includes(`ReadableStream is already closed`))throw e}}let xe=/[^\x00-\xFF]/;function Z(e){return v(!xe.test(e)),e}async function Se(e){let t=[],n=0;for(;;){let{done:r,value:i}=await e.read();if(r)return Buffer.concat(t,n);if(!y(i))throw TypeError(`Received non-Uint8Array chunk`);t.push(i),n+=i.length}}function Ce(e){v(`protocol`in e);let t=e.protocol;return t===`about:`||t===`blob:`||t===`data:`}function we(e){return typeof e==`string`&&e[5]===`:`&&e[0]===`h`&&e[1]===`t`&&e[2]===`t`&&e[3]===`p`&&e[4]===`s`||e.protocol===`https:`}function Te(e){v(`protocol`in e);let t=e.protocol;return t===`http:`||t===`https:`}function Ee(e,t){let n=e;if(!n.startsWith(`bytes`))return`failure`;let r={position:5};if(t&&c(e=>e===` `||e===` `,n,r),n.charCodeAt(r.position)!==61)return`failure`;r.position++,t&&c(e=>e===` `||e===` `,n,r);let i=c(e=>{let t=e.charCodeAt(0);return t>=48&&t<=57},n,r),a=i.length?Number(i):null;if(t&&c(e=>e===` `||e===` `,n,r),n.charCodeAt(r.position)!==45)return`failure`;r.position++,t&&c(e=>e===` `||e===` `,n,r);let o=c(e=>{let t=e.charCodeAt(0);return t>=48&&t<=57},n,r),s=o.length?Number(o):null;return r.positions?`failure`:{rangeStartValue:a,rangeEndValue:s}}function De(e,t,n){let r=`bytes `;return r+=Z(`${e}`),r+=`-`,r+=Z(`${t}`),r+=`/`,r+=Z(`${n}`),r}var Oe=class extends n{#e;constructor(e){super(),this.#e=e}_transform(e,t,n){if(!this._inflateStream){if(e.length===0){n();return}this._inflateStream=(e[0]&15)==8?r.createInflate(this.#e):r.createInflateRaw(this.#e),this._inflateStream.on(`data`,this.push.bind(this)),this._inflateStream.on(`end`,()=>this.push(null)),this._inflateStream.on(`error`,e=>this.destroy(e))}this._inflateStream.write(e,t,n)}_final(e){this._inflateStream&&=(this._inflateStream.end(),null),e()}};function ke(e){return new Oe(e)}function Ae(e){let t=null,n=null,r=null,i=Me(`content-type`,e);if(i===null)return`failure`;for(let e of i){let i=d(e);i!==`failure`&&i.essence!==`*/*`&&(r=i,r.essence===n?!r.parameters.has(`charset`)&&t!==null&&r.parameters.set(`charset`,t):(t=null,r.parameters.has(`charset`)&&(t=r.parameters.get(`charset`)),n=r.essence))}return r??`failure`}function je(e){let t=e,n={position:0},r=[],i=``;for(;n.positione!==`"`&&e!==`,`,t,n),n.positione===9||e===32),r.push(i),i=``}return r}function Me(e,t){let n=t.get(e,!0);return n===null?null:je(n)}let Ne=new TextDecoder;function Pe(e){return e.length===0?``:(e[0]===239&&e[1]===187&&e[2]===191&&(e=e.subarray(3)),Ne.decode(e))}var Fe=class{get baseUrl(){return s()}get origin(){return this.baseUrl?.origin}policyContainer=ie()};t.exports={isAborted:fe,isCancelled:pe,isValidEncodedURL:T,createDeferredPromise:Y,ReadableStreamFrom:m,tryUpgradeRequestToAPotentiallyTrustworthyURL:ue,clampAndCoarsenConnectionTimingInfo:ne,coarsenedSharedCurrentTime:re,determineRequestsReferrer:oe,makePolicyContainer:ie,clonePolicyContainer:ae,appendFetchMetadata:ee,appendRequestOriginHeader:V,TAOCheck:L,corsCheck:I,crossOriginResourcePolicyCheck:F,createOpaqueTimingInfo:U,setRequestReferrerPolicyOnRedirect:P,isValidHTTPToken:g,requestBadPort:k,requestCurrentURL:D,responseURL:C,responseLocationURL:w,isBlobLike:p,isURLPotentiallyTrustworthy:G,isValidReasonPhrase:j,sameOrigin:de,normalizeMethod:me,serializeJavascriptValueToJSONString:he,iteratorMixin:ve,createIterator:_e,isValidHeaderName:M,isValidHeaderValue:N,isErrorLike:A,fullyReadBody:ye,bytesMatch:se,isReadableStreamLike:X,readableStreamClose:be,isomorphicEncode:Z,urlIsLocal:Ce,urlHasHttpsScheme:we,urlIsHttpHttpsScheme:Te,readAllBytes:Se,simpleRangeHeaderValue:Ee,buildContentRange:De,parseMetadata:ce,createInflate:ke,extractMimeType:Ae,getDecodeSplit:Me,utf8DecodeBytes:Pe,environmentSettingsObject:new class{settingsObject=new Fe}}})),H=/* @__PURE__ */ m(((e,t)=>{t.exports={kUrl:Symbol(`url`),kHeaders:Symbol(`headers`),kSignal:Symbol(`signal`),kState:Symbol(`state`),kDispatcher:Symbol(`dispatcher`)}})),ne=/* @__PURE__ */ m(((e,t)=>{let{Blob:n,File:r}=h(`node:buffer`),{kState:i}=H(),{webidl:a}=B();var o=class e{constructor(e,t,n={}){let r=t,a=n.type,o=n.lastModified??Date.now();this[i]={blobLike:e,name:r,type:a,lastModified:o}}stream(...t){return a.brandCheck(this,e),this[i].blobLike.stream(...t)}arrayBuffer(...t){return a.brandCheck(this,e),this[i].blobLike.arrayBuffer(...t)}slice(...t){return a.brandCheck(this,e),this[i].blobLike.slice(...t)}text(...t){return a.brandCheck(this,e),this[i].blobLike.text(...t)}get size(){return a.brandCheck(this,e),this[i].blobLike.size}get type(){return a.brandCheck(this,e),this[i].blobLike.type}get name(){return a.brandCheck(this,e),this[i].name}get lastModified(){return a.brandCheck(this,e),this[i].lastModified}get[Symbol.toStringTag](){return`File`}};a.converters.Blob=a.interfaceConverter(n);function s(e){return e instanceof r||e&&(typeof e.stream==`function`||typeof e.arrayBuffer==`function`)&&e[Symbol.toStringTag]===`File`}t.exports={FileLike:o,isFileLike:s}})),re=/* @__PURE__ */ m(((e,t)=>{let{isBlobLike:n,iteratorMixin:r}=V(),{kState:i}=H(),{kEnumerableProperty:a}=O(),{FileLike:o,isFileLike:s}=ne(),{webidl:c}=B(),{File:l}=h(`node:buffer`),u=h(`node:util`),d=globalThis.File??l;var f=class e{constructor(e){if(c.util.markAsUncloneable(this),e!==void 0)throw c.errors.conversionFailed({prefix:`FormData constructor`,argument:`Argument 1`,types:[`undefined`]});this[i]=[]}append(t,r,a=void 0){c.brandCheck(this,e);let o=`FormData.append`;if(c.argumentLengthCheck(arguments,2,o),arguments.length===3&&!n(r))throw TypeError(`Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'`);t=c.converters.USVString(t,o,`name`),r=n(r)?c.converters.Blob(r,o,`value`,{strict:!1}):c.converters.USVString(r,o,`value`),a=arguments.length===3?c.converters.USVString(a,o,`filename`):void 0;let s=p(t,r,a);this[i].push(s)}delete(t){c.brandCheck(this,e);let n=`FormData.delete`;c.argumentLengthCheck(arguments,1,n),t=c.converters.USVString(t,n,`name`),this[i]=this[i].filter(e=>e.name!==t)}get(t){c.brandCheck(this,e);let n=`FormData.get`;c.argumentLengthCheck(arguments,1,n),t=c.converters.USVString(t,n,`name`);let r=this[i].findIndex(e=>e.name===t);return r===-1?null:this[i][r].value}getAll(t){c.brandCheck(this,e);let n=`FormData.getAll`;return c.argumentLengthCheck(arguments,1,n),t=c.converters.USVString(t,n,`name`),this[i].filter(e=>e.name===t).map(e=>e.value)}has(t){c.brandCheck(this,e);let n=`FormData.has`;return c.argumentLengthCheck(arguments,1,n),t=c.converters.USVString(t,n,`name`),this[i].findIndex(e=>e.name===t)!==-1}set(t,r,a=void 0){c.brandCheck(this,e);let o=`FormData.set`;if(c.argumentLengthCheck(arguments,2,o),arguments.length===3&&!n(r))throw TypeError(`Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'`);t=c.converters.USVString(t,o,`name`),r=n(r)?c.converters.Blob(r,o,`name`,{strict:!1}):c.converters.USVString(r,o,`name`),a=arguments.length===3?c.converters.USVString(a,o,`name`):void 0;let s=p(t,r,a),l=this[i].findIndex(e=>e.name===t);l===-1?this[i].push(s):this[i]=[...this[i].slice(0,l),s,...this[i].slice(l+1).filter(e=>e.name!==t)]}[u.inspect.custom](e,t){let n=this[i].reduce((e,t)=>(e[t.name]?Array.isArray(e[t.name])?e[t.name].push(t.value):e[t.name]=[e[t.name],t.value]:e[t.name]=t.value,e),{__proto__:null});t.depth??=e,t.colors??=!0;let r=u.formatWithOptions(t,n);return`FormData ${r.slice(r.indexOf(`]`)+2)}`}};r(`FormData`,f,i,`name`,`value`),Object.defineProperties(f.prototype,{append:a,delete:a,get:a,getAll:a,has:a,set:a,[Symbol.toStringTag]:{value:`FormData`,configurable:!0}});function p(e,t,n){if(typeof t!=`string`&&(s(t)||(t=t instanceof Blob?new d([t],`blob`,{type:t.type}):new o(t,`blob`,{type:t.type})),n!==void 0)){let e={type:t.type,lastModified:t.lastModified};t=t instanceof l?new d([t],n,e):new o(t,n,e)}return{name:e,value:t}}t.exports={FormData:f,makeEntry:p}})),U=/* @__PURE__ */ m(((e,t)=>{let{isUSVString:n,bufferToLowerCasedHeaderName:r}=O(),{utf8DecodeBytes:i}=V(),{HTTP_TOKEN_CODEPOINTS:a,isomorphicDecode:o}=z(),{isFileLike:s}=ne(),{makeEntry:c}=re(),l=h(`node:assert`),{File:u}=h(`node:buffer`),d=globalThis.File??u,f=Buffer.from(`form-data; name="`),p=Buffer.from(`; filename`),m=Buffer.from(`--`),g=Buffer.from(`--\r +if(S===void 0)return!0;let n=se(t);if(n===`no metadata`||n.length===0)return!0;let r=ce(n,J(n));for(let t of r){let n=t.algo,r=t.hash,i=S.createHash(n).update(e).digest(`base64`);if(i[i.length-1]===`=`&&(i=i[i.length-2]===`=`?i.slice(0,-2):i.slice(0,-1)),Y(i,r))return!0}return!1}let q=/(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;function se(e){let t=[],n=!0;for(let r of e.split(` `)){n=!1;let e=q.exec(r);if(e===null||e.groups===void 0||e.groups.algo===void 0)continue;let i=e.groups.algo.toLowerCase();x.includes(i)&&t.push(e.groups)}return n===!0?`no metadata`:t}function J(e){let t=e[0].algo;if(t[3]===`5`)return t;for(let n=1;n{e=n,t=r}),resolve:e,reject:t}}function de(e){return e.controller.state===`aborted`}function fe(e){return e.controller.state===`aborted`||e.controller.state===`terminated`}function pe(e){return _[e.toLowerCase()]??e}function me(e){let t=JSON.stringify(e);if(t===void 0)throw TypeError(`Value is not JSON serializable`);return v(typeof t==`string`),t}let he=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function ge(e,t,n=0,r=1){class i{#e;#t;#n;constructor(e,t){this.#e=e,this.#t=t,this.#n=0}next(){if(typeof this!=`object`||this===null||!(#e in this))throw TypeError(`'next' called on an object that does not implement interface ${e} Iterator.`);let i=this.#n,a=this.#e[t];if(i>=a.length)return{value:void 0,done:!0};let{[n]:o,[r]:s}=a[i];this.#n=i+1;let c;switch(this.#t){case`key`:c=o;break;case`value`:c=s;break;case`key+value`:c=[o,s]}return{value:c,done:!1}}}return delete i.prototype.constructor,Object.setPrototypeOf(i.prototype,he),Object.defineProperties(i.prototype,{[Symbol.toStringTag]:{writable:!1,enumerable:!1,configurable:!0,value:`${e} Iterator`},next:{writable:!0,enumerable:!0,configurable:!0}}),function(e,t){return new i(e,t)}}function _e(e,t,n,r=0,i=1){let a=ge(e,n,r,i),o={keys:{writable:!0,enumerable:!0,configurable:!0,value:function(){return b.brandCheck(this,t),a(this,`key`)}},values:{writable:!0,enumerable:!0,configurable:!0,value:function(){return b.brandCheck(this,t),a(this,`value`)}},entries:{writable:!0,enumerable:!0,configurable:!0,value:function(){return b.brandCheck(this,t),a(this,`key+value`)}},forEach:{writable:!0,enumerable:!0,configurable:!0,value:function(n,r=globalThis){if(b.brandCheck(this,t),b.argumentLengthCheck(arguments,1,`${e}.forEach`),typeof n!=`function`)throw TypeError(`Failed to execute 'forEach' on '${e}': parameter 1 is not of type 'Function'.`);for(let{0:e,1:t}of a(this,`key+value`))n.call(r,t,e,this)}}};return Object.defineProperties(t.prototype,{...o,[Symbol.iterator]:{writable:!0,enumerable:!1,configurable:!0,value:o.entries.value}})}async function ve(e,t,n){let r=t,i=n,a;try{a=e.stream.getReader()}catch(e){i(e);return}try{r(await xe(a))}catch(e){i(e)}}function Z(e){return e instanceof ReadableStream||e[Symbol.toStringTag]===`ReadableStream`&&typeof e.tee==`function`}function ye(e){try{e.close(),e.byobRequest?.respond(0)}catch(e){if(!e.message.includes(`Controller is already closed`)&&!e.message.includes(`ReadableStream is already closed`))throw e}}let be=/[^\x00-\xFF]/;function Q(e){return v(!be.test(e)),e}async function xe(e){let t=[],n=0;for(;;){let{done:r,value:i}=await e.read();if(r)return Buffer.concat(t,n);if(!y(i))throw TypeError(`Received non-Uint8Array chunk`);t.push(i),n+=i.length}}function Se(e){v(`protocol`in e);let t=e.protocol;return t===`about:`||t===`blob:`||t===`data:`}function Ce(e){return typeof e==`string`&&e[5]===`:`&&e[0]===`h`&&e[1]===`t`&&e[2]===`t`&&e[3]===`p`&&e[4]===`s`||e.protocol===`https:`}function we(e){v(`protocol`in e);let t=e.protocol;return t===`http:`||t===`https:`}function Te(e,t){let n=e;if(!n.startsWith(`bytes`))return`failure`;let r={position:5};if(t&&c(e=>e===` `||e===` `,n,r),n.charCodeAt(r.position)!==61)return`failure`;r.position++,t&&c(e=>e===` `||e===` `,n,r);let i=c(e=>{let t=e.charCodeAt(0);return t>=48&&t<=57},n,r),a=i.length?Number(i):null;if(t&&c(e=>e===` `||e===` `,n,r),n.charCodeAt(r.position)!==45)return`failure`;r.position++,t&&c(e=>e===` `||e===` `,n,r);let o=c(e=>{let t=e.charCodeAt(0);return t>=48&&t<=57},n,r),s=o.length?Number(o):null;return r.positions?`failure`:{rangeStartValue:a,rangeEndValue:s}}function Ee(e,t,n){let r=`bytes `;return r+=Q(`${e}`),r+=`-`,r+=Q(`${t}`),r+=`/`,r+=Q(`${n}`),r}var De=class extends n{#e;constructor(e){super(),this.#e=e}_transform(e,t,n){if(!this._inflateStream){if(e.length===0){n();return}this._inflateStream=(e[0]&15)==8?r.createInflate(this.#e):r.createInflateRaw(this.#e),this._inflateStream.on(`data`,this.push.bind(this)),this._inflateStream.on(`end`,()=>this.push(null)),this._inflateStream.on(`error`,e=>this.destroy(e))}this._inflateStream.write(e,t,n)}_final(e){this._inflateStream&&=(this._inflateStream.end(),null),e()}};function Oe(e){return new De(e)}function ke(e){let t=null,n=null,r=null,i=je(`content-type`,e);if(i===null)return`failure`;for(let e of i){let i=d(e);i!==`failure`&&i.essence!==`*/*`&&(r=i,r.essence===n?!r.parameters.has(`charset`)&&t!==null&&r.parameters.set(`charset`,t):(t=null,r.parameters.has(`charset`)&&(t=r.parameters.get(`charset`)),n=r.essence))}return r??`failure`}function Ae(e){let t=e,n={position:0},r=[],i=``;for(;n.positione!==`"`&&e!==`,`,t,n),n.positione===9||e===32),r.push(i),i=``}return r}function je(e,t){let n=t.get(e,!0);return n===null?null:Ae(n)}let Me=new TextDecoder;function Ne(e){return e.length===0?``:(e[0]===239&&e[1]===187&&e[2]===191&&(e=e.subarray(3)),Me.decode(e))}var Pe=class{get baseUrl(){return s()}get origin(){return this.baseUrl?.origin}policyContainer=ie()};t.exports={isAborted:de,isCancelled:fe,isValidEncodedURL:T,createDeferredPromise:X,ReadableStreamFrom:m,tryUpgradeRequestToAPotentiallyTrustworthyURL:le,clampAndCoarsenConnectionTimingInfo:ne,coarsenedSharedCurrentTime:re,determineRequestsReferrer:oe,makePolicyContainer:ie,clonePolicyContainer:ae,appendFetchMetadata:ee,appendRequestOriginHeader:V,TAOCheck:L,corsCheck:I,crossOriginResourcePolicyCheck:F,createOpaqueTimingInfo:U,setRequestReferrerPolicyOnRedirect:P,isValidHTTPToken:g,requestBadPort:k,requestCurrentURL:D,responseURL:C,responseLocationURL:w,isBlobLike:p,isURLPotentiallyTrustworthy:G,isValidReasonPhrase:j,sameOrigin:ue,normalizeMethod:pe,serializeJavascriptValueToJSONString:me,iteratorMixin:_e,createIterator:ge,isValidHeaderName:M,isValidHeaderValue:N,isErrorLike:A,fullyReadBody:ve,bytesMatch:K,isReadableStreamLike:Z,readableStreamClose:ye,isomorphicEncode:Q,urlIsLocal:Se,urlHasHttpsScheme:Ce,urlIsHttpHttpsScheme:we,readAllBytes:xe,simpleRangeHeaderValue:Te,buildContentRange:Ee,parseMetadata:se,createInflate:Oe,extractMimeType:ke,getDecodeSplit:je,utf8DecodeBytes:Ne,environmentSettingsObject:new class{settingsObject=new Pe}}})),H=/* @__PURE__ */ m(((e,t)=>{t.exports={kUrl:Symbol(`url`),kHeaders:Symbol(`headers`),kSignal:Symbol(`signal`),kState:Symbol(`state`),kDispatcher:Symbol(`dispatcher`)}})),ne=/* @__PURE__ */ m(((e,t)=>{let{Blob:n,File:r}=h(`node:buffer`),{kState:i}=H(),{webidl:a}=B();var o=class e{constructor(e,t,n={}){let r=t,a=n.type,o=n.lastModified??Date.now();this[i]={blobLike:e,name:r,type:a,lastModified:o}}stream(...t){return a.brandCheck(this,e),this[i].blobLike.stream(...t)}arrayBuffer(...t){return a.brandCheck(this,e),this[i].blobLike.arrayBuffer(...t)}slice(...t){return a.brandCheck(this,e),this[i].blobLike.slice(...t)}text(...t){return a.brandCheck(this,e),this[i].blobLike.text(...t)}get size(){return a.brandCheck(this,e),this[i].blobLike.size}get type(){return a.brandCheck(this,e),this[i].blobLike.type}get name(){return a.brandCheck(this,e),this[i].name}get lastModified(){return a.brandCheck(this,e),this[i].lastModified}get[Symbol.toStringTag](){return`File`}};a.converters.Blob=a.interfaceConverter(n);function s(e){return e instanceof r||e&&(typeof e.stream==`function`||typeof e.arrayBuffer==`function`)&&e[Symbol.toStringTag]===`File`}t.exports={FileLike:o,isFileLike:s}})),re=/* @__PURE__ */ m(((e,t)=>{let{isBlobLike:n,iteratorMixin:r}=V(),{kState:i}=H(),{kEnumerableProperty:a}=O(),{FileLike:o,isFileLike:s}=ne(),{webidl:c}=B(),{File:l}=h(`node:buffer`),u=h(`node:util`),d=globalThis.File??l;var f=class e{constructor(e){if(c.util.markAsUncloneable(this),e!==void 0)throw c.errors.conversionFailed({prefix:`FormData constructor`,argument:`Argument 1`,types:[`undefined`]});this[i]=[]}append(t,r,a=void 0){c.brandCheck(this,e);let o=`FormData.append`;if(c.argumentLengthCheck(arguments,2,o),arguments.length===3&&!n(r))throw TypeError(`Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'`);t=c.converters.USVString(t,o,`name`),r=n(r)?c.converters.Blob(r,o,`value`,{strict:!1}):c.converters.USVString(r,o,`value`),a=arguments.length===3?c.converters.USVString(a,o,`filename`):void 0;let s=p(t,r,a);this[i].push(s)}delete(t){c.brandCheck(this,e);let n=`FormData.delete`;c.argumentLengthCheck(arguments,1,n),t=c.converters.USVString(t,n,`name`),this[i]=this[i].filter(e=>e.name!==t)}get(t){c.brandCheck(this,e);let n=`FormData.get`;c.argumentLengthCheck(arguments,1,n),t=c.converters.USVString(t,n,`name`);let r=this[i].findIndex(e=>e.name===t);return r===-1?null:this[i][r].value}getAll(t){c.brandCheck(this,e);let n=`FormData.getAll`;return c.argumentLengthCheck(arguments,1,n),t=c.converters.USVString(t,n,`name`),this[i].filter(e=>e.name===t).map(e=>e.value)}has(t){c.brandCheck(this,e);let n=`FormData.has`;return c.argumentLengthCheck(arguments,1,n),t=c.converters.USVString(t,n,`name`),this[i].findIndex(e=>e.name===t)!==-1}set(t,r,a=void 0){c.brandCheck(this,e);let o=`FormData.set`;if(c.argumentLengthCheck(arguments,2,o),arguments.length===3&&!n(r))throw TypeError(`Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'`);t=c.converters.USVString(t,o,`name`),r=n(r)?c.converters.Blob(r,o,`name`,{strict:!1}):c.converters.USVString(r,o,`name`),a=arguments.length===3?c.converters.USVString(a,o,`name`):void 0;let s=p(t,r,a),l=this[i].findIndex(e=>e.name===t);l===-1?this[i].push(s):this[i]=[...this[i].slice(0,l),s,...this[i].slice(l+1).filter(e=>e.name!==t)]}[u.inspect.custom](e,t){let n=this[i].reduce((e,t)=>(e[t.name]?Array.isArray(e[t.name])?e[t.name].push(t.value):e[t.name]=[e[t.name],t.value]:e[t.name]=t.value,e),{__proto__:null});t.depth??=e,t.colors??=!0;let r=u.formatWithOptions(t,n);return`FormData ${r.slice(r.indexOf(`]`)+2)}`}};r(`FormData`,f,i,`name`,`value`),Object.defineProperties(f.prototype,{append:a,delete:a,get:a,getAll:a,has:a,set:a,[Symbol.toStringTag]:{value:`FormData`,configurable:!0}});function p(e,t,n){if(typeof t!=`string`&&(s(t)||(t=t instanceof Blob?new d([t],`blob`,{type:t.type}):new o(t,`blob`,{type:t.type})),n!==void 0)){let e={type:t.type,lastModified:t.lastModified};t=t instanceof l?new d([t],n,e):new o(t,n,e)}return{name:e,value:t}}t.exports={FormData:f,makeEntry:p}})),U=/* @__PURE__ */ m(((e,t)=>{let{isUSVString:n,bufferToLowerCasedHeaderName:r}=O(),{utf8DecodeBytes:i}=V(),{HTTP_TOKEN_CODEPOINTS:a,isomorphicDecode:o}=z(),{isFileLike:s}=ne(),{makeEntry:c}=re(),l=h(`node:assert`),{File:u}=h(`node:buffer`),d=globalThis.File??u,f=Buffer.from(`form-data; name="`),p=Buffer.from(`; filename`),m=Buffer.from(`--`),g=Buffer.from(`--\r `);function _(e){for(let t=0;t70)return!1;for(let n=0;n=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122||t===39||t===45||t===95))return!1}return!0}function y(e,t){l(t!==`failure`&&t.essence===`multipart/form-data`);let r=t.parameters.get(`boundary`);if(r===void 0)return`failure`;let a=Buffer.from(`--${r}`,`utf8`),o=[],u={position:0};for(;e[u.position]===13&&e[u.position+1]===10;)u.position+=2;let f=e.length;for(;e[f-1]===10&&e[f-2]===13;)f-=2;for(f!==e.length&&(e=e.subarray(0,f));;){if(e.subarray(u.position,u.position+a.length).equals(a))u.position+=a.length;else return`failure`;if(u.position===e.length-2&&w(e,m,u)||u.position===e.length-4&&w(e,g,u))return o;if(e[u.position]!==13||e[u.position+1]!==10)return`failure`;u.position+=2;let t=b(e,u);if(t===`failure`)return`failure`;let{name:r,filename:f,contentType:p,encoding:h}=t;u.position+=2;let v;{let t=e.indexOf(a.subarray(2),u.position);if(t===-1)return`failure`;v=e.subarray(u.position,t-4),u.position+=v.length,h===`base64`&&(v=Buffer.from(v.toString(),`base64`))}if(e[u.position]!==13||e[u.position+1]!==10)return`failure`;u.position+=2;let y;f===null?y=i(Buffer.from(v)):(p??=`text/plain`,_(p)||(p=``),y=new d([v],f,{type:p})),l(n(r)),l(typeof y==`string`&&n(y)||s(y)),o.push(c(r,y,f))}}function b(e,t){let n=null,i=null,s=null,c=null;for(;;){if(e[t.position]===13&&e[t.position+1]===10)return n===null?`failure`:{name:n,filename:i,contentType:s,encoding:c};let l=S(e=>e!==10&&e!==13&&e!==58,e,t);if(l=C(l,!0,!0,e=>e===9||e===32),!a.test(l.toString())||e[t.position]!==58)return`failure`;switch(t.position++,S(e=>e===32||e===9,e,t),r(l)){case`content-disposition`:if(n=i=null,!w(e,f,t)||(t.position+=17,n=x(e,t),n===null))return`failure`;if(w(e,p,t)){let n=t.position+p.length;if(e[n]===42&&(t.position+=1,n+=1),e[n]!==61||e[n+1]!==34||(t.position+=12,i=x(e,t),i===null))return`failure`}break;case`content-type`:{let n=S(e=>e!==10&&e!==13,e,t);n=C(n,!1,!0,e=>e===9||e===32),s=o(n);break}case`content-transfer-encoding`:{let n=S(e=>e!==10&&e!==13,e,t);n=C(n,!1,!0,e=>e===9||e===32),c=o(n);break}default:S(e=>e!==10&&e!==13,e,t)}if(e[t.position]!==13&&e[t.position+1]!==10)return`failure`;t.position+=2}}function x(e,t){l(e[t.position-1]===34);let n=S(e=>e!==10&&e!==13&&e!==34,e,t);return e[t.position]===34?(t.position++,n=new TextDecoder().decode(n).replace(/%0A/gi,` `).replace(/%0D/gi,`\r`).replace(/%22/g,`"`),n):null}function S(e,t,n){let r=n.position;for(;r0&&r(e[a]);)a--;return i===0&&a===e.length-1?e:e.subarray(i,a+1)}function w(e,t,n){if(e.length{let n=O(),{ReadableStreamFrom:r,isBlobLike:i,isReadableStreamLike:a,readableStreamClose:o,createDeferredPromise:s,fullyReadBody:c,extractMimeType:l,utf8DecodeBytes:u}=V(),{FormData:d}=re(),{kState:f}=H(),{webidl:p}=B(),{Blob:m}=h(`node:buffer`),g=h(`node:assert`),{isErrored:_,isDisturbed:v}=h(`node:stream`),{isArrayBuffer:y}=h(`node:util/types`),{serializeAMimeType:b}=z(),{multipartFormDataParser:x}=U(),S;try{let e=h(`node:crypto`);S=t=>e.randomInt(0,t)}catch{S=e=>Math.floor(Math.random(e))}let C=new TextEncoder;function w(){}let T=globalThis.FinalizationRegistry&&process.version.indexOf(`v18`)!==0,E;T&&(E=new FinalizationRegistry(e=>{let t=e.deref();t&&!t.locked&&!v(t)&&!_(t)&&t.cancel(`Response object has been garbage collected`).catch(w)}));function D(e,t=!1){let s=null;s=e instanceof ReadableStream?e:i(e)?e.stream():new ReadableStream({async pull(e){let t=typeof l==`string`?C.encode(l):l;t.byteLength&&e.enqueue(t),queueMicrotask(()=>o(e))},start(){},type:`bytes`}),g(a(s));let c=null,l=null,u=null,d=null;if(typeof e==`string`)l=e,d=`text/plain;charset=UTF-8`;else if(e instanceof URLSearchParams)l=e.toString(),d=`application/x-www-form-urlencoded;charset=UTF-8`;else if(y(e))l=new Uint8Array(e.slice());else if(ArrayBuffer.isView(e))l=new Uint8Array(e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength));else if(n.isFormDataLike(e)){let t=`----formdata-undici-0${`${S(1e11)}`.padStart(11,`0`)}`,n=`--${t}\r\nContent-Disposition: form-data`,r=e=>e.replace(/\n/g,`%0A`).replace(/\r/g,`%0D`).replace(/"/g,`%22`),i=e=>e.replace(/\r?\n|\r/g,`\r `),a=[],o=new Uint8Array([13,10]) @@ -10,38 +10,38 @@ if(S===void 0)return!0;let n=ce(t);if(n===`no metadata`||n.length===0)return!0;l ;u=0;let s=!1;for(let[t,c]of e)if(typeof c==`string`){let e=C.encode(n+`; name="${r(i(t))}"\r\n\r\n${i(c)}\r\n`);a.push(e),u+=e.byteLength}else{let e=C.encode(`${n}; name="${r(i(t))}"`+(c.name?`; filename="${r(c.name)}"`:``)+`\r Content-Type: ${c.type||`application/octet-stream`}\r\n\r\n`);a.push(e,c,o),typeof c.size==`number`?u+=e.byteLength+c.size+o.byteLength:s=!0}let f=C.encode(`--${t}--\r\n`);a.push(f),u+=f.byteLength,s&&(u=null),l=e,c=async function*(){for(let e of a)e.stream?yield*e.stream():yield e},d=`multipart/form-data; boundary=${t}`}else if(i(e))l=e,u=e.size,e.type&&(d=e.type);else if(typeof e[Symbol.asyncIterator]==`function`){if(t)throw TypeError(`keepalive`);if(n.isDisturbed(e)||e.locked)throw TypeError(`Response body object should not be disturbed or locked`);s=e instanceof ReadableStream?e:r(e)}if((typeof l==`string`||n.isBuffer(l))&&(u=Buffer.byteLength(l)),c!=null){let t;s=new ReadableStream({async start(){t=c(e)[Symbol.asyncIterator]()},async pull(e){let{value:n,done:r}=await t.next();if(r)queueMicrotask(()=>{e.close(),e.byobRequest?.respond(0)});else if(!_(s)){let t=new Uint8Array(n);t.byteLength&&e.enqueue(t)}return e.desiredSize>0},async cancel(e){await t.return()},type:`bytes`})}return[{stream:s,source:l,length:u},d]}function k(e,t=!1){return e instanceof ReadableStream&& // istanbul ignore next -(g(!n.isDisturbed(e),`The body has already been consumed.`),g(!e.locked,`The stream is locked.`)),D(e,t)}function A(e,t){let[n,r]=t.stream.tee();return t.stream=n,{stream:r,length:t.length,source:t.source}}function j(e){if(e.aborted)throw new DOMException(`The operation was aborted.`,`AbortError`)}function M(e){return{blob(){return P(this,e=>{let t=L(this);return t===null?t=``:t&&=b(t),new m([e],{type:t})},e)},arrayBuffer(){return P(this,e=>new Uint8Array(e).buffer,e)},text(){return P(this,u,e)},json(){return P(this,I,e)},formData(){return P(this,e=>{let t=L(this);if(t!==null)switch(t.essence){case`multipart/form-data`:{let n=x(e,t);if(n===`failure`)throw TypeError(`Failed to parse body as FormData.`);let r=new d;return r[f]=n,r}case`application/x-www-form-urlencoded`:{let t=new URLSearchParams(e.toString()),n=new d;for(let[e,r]of t)n.append(e,r);return n}}throw TypeError(`Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".`)},e)},bytes(){return P(this,e=>new Uint8Array(e),e)}}}function N(e){Object.assign(e.prototype,M(e))}async function P(e,t,n){if(p.brandCheck(e,n),F(e))throw TypeError(`Body is unusable: Body has already been read`);j(e[f]);let r=s(),i=e=>r.reject(e),a=e=>{try{r.resolve(t(e))}catch(e){i(e)}};return e[f].body==null?(a(Buffer.allocUnsafe(0)),r.promise):(await c(e[f].body,a,i),r.promise)}function F(e){let t=e[f].body;return t!=null&&(t.stream.locked||n.isDisturbed(t.stream))}function I(e){return JSON.parse(u(e))}function L(e){let t=e[f].headersList,n=l(t);return n===`failure`?null:n}t.exports={extractBody:D,safelyExtractBody:k,cloneBody:A,mixinBody:N,streamRegistry:E,hasFinalizationRegistry:T,bodyUnusable:F}})),ae=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),r=O(),{channels:i}=k(),a=N(),{RequestContentLengthMismatchError:o,ResponseContentLengthMismatchError:s,RequestAbortedError:c,InvalidArgumentError:l,HeadersTimeoutError:u,HeadersOverflowError:d,SocketError:f,InformationalError:p,BodyTimeoutError:m,HTTPParserError:g,ResponseExceededMaxSizeError:_}=T(),{kUrl:v,kReset:y,kClient:b,kParser:x,kBlocking:S,kRunning:C,kPending:E,kSize:D,kWriting:A,kQueue:j,kNoRef:M,kKeepAliveDefaultTimeout:P,kHostHeader:F,kPendingIdx:te,kRunningIdx:R,kError:z,kPipelining:B,kSocket:V,kKeepAliveTimeoutValue:H,kMaxHeadersSize:ne,kKeepAliveMaxTimeout:re,kKeepAliveTimeoutThreshold:U,kHeadersTimeout:ae,kBodyTimeout:oe,kStrictContentLength:W,kMaxRequests:G,kCounter:se,kMaxResponseSize:K,kOnError:ce,kResume:q,kHTTPContext:le}=w(),J=I(),ue=Buffer.alloc(0),de=Buffer[Symbol.species],Y=r.addListener,fe=r.removeAllListeners,pe=Symbol(`kIdleSocketValidation`),me=Symbol(`kIdleSocketValidationTimeout`),he=Symbol(`kSocketUsed`),ge;async function _e(){let e=process.env.JEST_WORKER_ID?L():void 0,t;try{t=await WebAssembly.compile(ee())}catch{ +(g(!n.isDisturbed(e),`The body has already been consumed.`),g(!e.locked,`The stream is locked.`)),D(e,t)}function A(e,t){let[n,r]=t.stream.tee();return t.stream=n,{stream:r,length:t.length,source:t.source}}function j(e){if(e.aborted)throw new DOMException(`The operation was aborted.`,`AbortError`)}function M(e){return{blob(){return P(this,e=>{let t=L(this);return t===null?t=``:t&&=b(t),new m([e],{type:t})},e)},arrayBuffer(){return P(this,e=>new Uint8Array(e).buffer,e)},text(){return P(this,u,e)},json(){return P(this,I,e)},formData(){return P(this,e=>{let t=L(this);if(t!==null)switch(t.essence){case`multipart/form-data`:{let n=x(e,t);if(n===`failure`)throw TypeError(`Failed to parse body as FormData.`);let r=new d;return r[f]=n,r}case`application/x-www-form-urlencoded`:{let t=new URLSearchParams(e.toString()),n=new d;for(let[e,r]of t)n.append(e,r);return n}}throw TypeError(`Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".`)},e)},bytes(){return P(this,e=>new Uint8Array(e),e)}}}function N(e){Object.assign(e.prototype,M(e))}async function P(e,t,n){if(p.brandCheck(e,n),F(e))throw TypeError(`Body is unusable: Body has already been read`);j(e[f]);let r=s(),i=e=>r.reject(e),a=e=>{try{r.resolve(t(e))}catch(e){i(e)}};return e[f].body==null?(a(Buffer.allocUnsafe(0)),r.promise):(await c(e[f].body,a,i),r.promise)}function F(e){let t=e[f].body;return t!=null&&(t.stream.locked||n.isDisturbed(t.stream))}function I(e){return JSON.parse(u(e))}function L(e){let t=e[f].headersList,n=l(t);return n===`failure`?null:n}t.exports={extractBody:D,safelyExtractBody:k,cloneBody:A,mixinBody:N,streamRegistry:E,hasFinalizationRegistry:T,bodyUnusable:F}})),ae=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),r=O(),{channels:i}=k(),a=N(),{RequestContentLengthMismatchError:o,ResponseContentLengthMismatchError:s,RequestAbortedError:c,InvalidArgumentError:l,HeadersTimeoutError:u,HeadersOverflowError:d,SocketError:f,InformationalError:p,BodyTimeoutError:m,HTTPParserError:g,ResponseExceededMaxSizeError:_}=T(),{kUrl:v,kReset:y,kClient:b,kParser:x,kBlocking:S,kRunning:C,kPending:E,kSize:D,kWriting:A,kQueue:j,kNoRef:M,kKeepAliveDefaultTimeout:P,kHostHeader:F,kPendingIdx:te,kRunningIdx:R,kError:z,kPipelining:B,kSocket:V,kKeepAliveTimeoutValue:H,kMaxHeadersSize:ne,kKeepAliveMaxTimeout:re,kKeepAliveTimeoutThreshold:U,kHeadersTimeout:ae,kBodyTimeout:oe,kStrictContentLength:W,kMaxRequests:G,kCounter:K,kMaxResponseSize:q,kOnError:se,kResume:J,kHTTPContext:ce}=w(),Y=I(),le=Buffer.alloc(0),ue=Buffer[Symbol.species],X=r.addListener,de=r.removeAllListeners,fe=Symbol(`kIdleSocketValidation`),pe=Symbol(`kIdleSocketValidationTimeout`),me=Symbol(`kSocketUsed`),he;async function ge(){let e=process.env.JEST_WORKER_ID?L():void 0,t;try{t=await WebAssembly.compile(ee())}catch{ /* istanbul ignore next */ -t=await WebAssembly.compile(e||L())}return await WebAssembly.instantiate(t,{env:{wasm_on_url:(e,t,n)=>0,wasm_on_status:(e,t,r)=>{n(X.ptr===e);let i=t-Z+be.byteOffset;return X.onStatus(new de(be.buffer,i,r))||0},wasm_on_message_begin:e=>(n(X.ptr===e),X.onMessageBegin()||0),wasm_on_header_field:(e,t,r)=>{n(X.ptr===e);let i=t-Z+be.byteOffset;return X.onHeaderField(new de(be.buffer,i,r))||0},wasm_on_header_value:(e,t,r)=>{n(X.ptr===e);let i=t-Z+be.byteOffset;return X.onHeaderValue(new de(be.buffer,i,r))||0},wasm_on_headers_complete:(e,t,r,i)=>(n(X.ptr===e),X.onHeadersComplete(t,!!r,!!i)||0),wasm_on_body:(e,t,r)=>{n(X.ptr===e);let i=t-Z+be.byteOffset;return X.onBody(new de(be.buffer,i,r))||0},wasm_on_message_complete:e=>(n(X.ptr===e),X.onMessageComplete()||0)}})}let ve=null,ye=_e();ye.catch();let X=null,be=null,xe=0,Z=null;var Se=class{constructor(e,t,{exports:r}){n(Number.isFinite(e[ne])&&e[ne]>0),this.llhttp=r,this.ptr=this.llhttp.llhttp_alloc(J.TYPE.RESPONSE),this.client=e,this.socket=t,this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.statusCode=null,this.statusText=``,this.upgrade=!1,this.headers=[],this.headersSize=0,this.headersMaxSize=e[ne],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive=``,this.contentLength=``,this.connection=``,this.maxResponseSize=e[K]}setTimeout(e,t){e!==this.timeoutValue||t&1^this.timeoutType&1?(this.timeout&&=(a.clearTimeout(this.timeout),null),e&&(t&1?this.timeout=a.setFastTimeout(Ce,e,new WeakRef(this)):(this.timeout=setTimeout(Ce,e,new WeakRef(this)),this.timeout.unref())),this.timeoutValue=e):this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.timeoutType=t}resume(){!this.socket.destroyed&&this.paused&&(n(this.ptr!=null),n(X==null),this.llhttp.llhttp_resume(this.ptr),n(this.timeoutType===5),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.paused=!1,this.execute(this.socket.read()||ue),this.readMore())}readMore(){for(;!this.paused&&this.ptr;){let e=this.socket.read();if(e===null)break;this.execute(e)}}execute(e){n(this.ptr!=null),n(X==null),n(!this.paused);let{socket:t,llhttp:i}=this;e.length>xe&&(Z&&i.free(Z),xe=Math.ceil(e.length/4096)*4096,Z=i.malloc(xe)),new Uint8Array(i.memory.buffer,Z,xe).set(e);try{let n;try{be=e,X=this,n=i.llhttp_execute(this.ptr,Z,e.length)}catch(e){ +t=await WebAssembly.compile(e||L())}return await WebAssembly.instantiate(t,{env:{wasm_on_url:(e,t,n)=>0,wasm_on_status:(e,t,r)=>{n(Z.ptr===e);let i=t-Q+ye.byteOffset;return Z.onStatus(new ue(ye.buffer,i,r))||0},wasm_on_message_begin:e=>(n(Z.ptr===e),Z.onMessageBegin()||0),wasm_on_header_field:(e,t,r)=>{n(Z.ptr===e);let i=t-Q+ye.byteOffset;return Z.onHeaderField(new ue(ye.buffer,i,r))||0},wasm_on_header_value:(e,t,r)=>{n(Z.ptr===e);let i=t-Q+ye.byteOffset;return Z.onHeaderValue(new ue(ye.buffer,i,r))||0},wasm_on_headers_complete:(e,t,r,i)=>(n(Z.ptr===e),Z.onHeadersComplete(t,!!r,!!i)||0),wasm_on_body:(e,t,r)=>{n(Z.ptr===e);let i=t-Q+ye.byteOffset;return Z.onBody(new ue(ye.buffer,i,r))||0},wasm_on_message_complete:e=>(n(Z.ptr===e),Z.onMessageComplete()||0)}})}let _e=null,ve=ge();ve.catch();let Z=null,ye=null,be=0,Q=null;var xe=class{constructor(e,t,{exports:r}){n(Number.isFinite(e[ne])&&e[ne]>0),this.llhttp=r,this.ptr=this.llhttp.llhttp_alloc(Y.TYPE.RESPONSE),this.client=e,this.socket=t,this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.statusCode=null,this.statusText=``,this.upgrade=!1,this.headers=[],this.headersSize=0,this.headersMaxSize=e[ne],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive=``,this.contentLength=``,this.connection=``,this.maxResponseSize=e[q]}setTimeout(e,t){e!==this.timeoutValue||t&1^this.timeoutType&1?(this.timeout&&=(a.clearTimeout(this.timeout),null),e&&(t&1?this.timeout=a.setFastTimeout(Se,e,new WeakRef(this)):(this.timeout=setTimeout(Se,e,new WeakRef(this)),this.timeout.unref())),this.timeoutValue=e):this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.timeoutType=t}resume(){!this.socket.destroyed&&this.paused&&(n(this.ptr!=null),n(Z==null),this.llhttp.llhttp_resume(this.ptr),n(this.timeoutType===5),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.paused=!1,this.execute(this.socket.read()||le),this.readMore())}readMore(){for(;!this.paused&&this.ptr;){let e=this.socket.read();if(e===null)break;this.execute(e)}}execute(e){n(this.ptr!=null),n(Z==null),n(!this.paused);let{socket:t,llhttp:i}=this;e.length>be&&(Q&&i.free(Q),be=Math.ceil(e.length/4096)*4096,Q=i.malloc(be)),new Uint8Array(i.memory.buffer,Q,be).set(e);try{let n;try{ye=e,Z=this,n=i.llhttp_execute(this.ptr,Q,e.length)}catch(e){ /* istanbul ignore next: difficult to make a test case for */ -throw e}finally{X=null,be=null}let r=i.llhttp_get_error_pos(this.ptr)-Z;if(n!==J.ERROR.OK){let i=e.subarray(r);if(n===J.ERROR.PAUSED_UPGRADE)this.onUpgrade(i);else if(n===J.ERROR.PAUSED)this.paused=!0,t.unshift(i);else throw this.createError(n,i)}}catch(e){r.destroy(t,e)}}finish(){n(X===null),n(this.ptr!=null),n(!this.paused);let{llhttp:e}=this,t;try{X=this,t=e.llhttp_finish(this.ptr)}finally{X=null}return t===J.ERROR.OK?null:t===J.ERROR.PAUSED||t===J.ERROR.PAUSED_UPGRADE?(this.paused=!0,null):this.createError(t,ue)}createError(e,t){let{llhttp:n,contentLength:r,bytesRead:i}=this;if(r&&i!==parseInt(r,10))return new s;let a=n.llhttp_get_error_reason(this.ptr),o=``;if(a){let e=new Uint8Array(n.memory.buffer,a).indexOf(0);o=`Response does not match the HTTP/1.1 protocol (`+Buffer.from(n.memory.buffer,a,e).toString()+`)`}return new g(o,J.ERROR[e],t)}destroy(){n(this.ptr!=null),n(X==null),this.llhttp.llhttp_free(this.ptr),this.ptr=null,this.timeout&&a.clearTimeout(this.timeout),this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.paused=!1}onStatus(e){this.statusText=e.toString()}onMessageBegin(){let{socket:e,client:t}=this; +throw e}finally{Z=null,ye=null}let r=i.llhttp_get_error_pos(this.ptr)-Q;if(n!==Y.ERROR.OK){let i=e.subarray(r);if(n===Y.ERROR.PAUSED_UPGRADE)this.onUpgrade(i);else if(n===Y.ERROR.PAUSED)this.paused=!0,t.unshift(i);else throw this.createError(n,i)}}catch(e){r.destroy(t,e)}}finish(){n(Z===null),n(this.ptr!=null),n(!this.paused);let{llhttp:e}=this,t;try{Z=this,t=e.llhttp_finish(this.ptr)}finally{Z=null}return t===Y.ERROR.OK?null:t===Y.ERROR.PAUSED||t===Y.ERROR.PAUSED_UPGRADE?(this.paused=!0,null):this.createError(t,le)}createError(e,t){let{llhttp:n,contentLength:r,bytesRead:i}=this;if(r&&i!==parseInt(r,10))return new s;let a=n.llhttp_get_error_reason(this.ptr),o=``;if(a){let e=new Uint8Array(n.memory.buffer,a).indexOf(0);o=`Response does not match the HTTP/1.1 protocol (`+Buffer.from(n.memory.buffer,a,e).toString()+`)`}return new g(o,Y.ERROR[e],t)}destroy(){n(this.ptr!=null),n(Z==null),this.llhttp.llhttp_free(this.ptr),this.ptr=null,this.timeout&&a.clearTimeout(this.timeout),this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.paused=!1}onStatus(e){this.statusText=e.toString()}onMessageBegin(){let{socket:e,client:t}=this; /* istanbul ignore next: difficult to make a test case for */ -if(e.destroyed)return-1;if(t[C]===0)return r.destroy(e,new f(`bad response`,r.getSocketInfo(e))),-1;let n=t[j][t[R]];if(!n)return-1;n.onResponseStarted()}onHeaderField(e){let t=this.headers.length;t&1?this.headers[t-1]=Buffer.concat([this.headers[t-1],e]):this.headers.push(e),this.trackHeader(e.length)}onHeaderValue(e){let t=this.headers.length;(t&1)==1?(this.headers.push(e),t+=1):this.headers[t-1]=Buffer.concat([this.headers[t-1],e]);let n=this.headers[t-2];if(n.length===10){let t=r.bufferToLowerCasedHeaderName(n);t===`keep-alive`?this.keepAlive+=e.toString():t===`connection`&&(this.connection+=e.toString())}else n.length===14&&r.bufferToLowerCasedHeaderName(n)===`content-length`&&(this.contentLength+=e.toString());this.trackHeader(e.length)}trackHeader(e){this.headersSize+=e,this.headersSize>=this.headersMaxSize&&r.destroy(this.socket,new d)}onUpgrade(e){let{upgrade:t,client:i,socket:a,headers:o,statusCode:s,statusText:c}=this;n(t),n(i[V]===a),n(!a.destroyed),n(!this.paused),n(!(o.length&1));let l=i[j][i[R]];n(l),n(l.upgrade||l.method===`CONNECT`),this.statusCode=null,this.statusText=``,this.shouldKeepAlive=null,this.headers=[],this.headersSize=0,a.unshift(e),a[x].destroy(),a[x]=null,a[b]=null,a[z]=null,fe(a),i[V]=null,i[le]=null,i[j][i[R]++]=null,i.emit(`disconnect`,i[v],[i],new p(`upgrade`));try{l.onUpgrade(s,o,a,c)}catch(e){r.errorRequest(i,l,e),r.destroy(a,e)}i[q]()}onHeadersComplete(e,t,i){let{client:a,socket:o,headers:s,statusText:c}=this; +if(e.destroyed)return-1;if(t[C]===0)return r.destroy(e,new f(`bad response`,r.getSocketInfo(e))),-1;let n=t[j][t[R]];if(!n)return-1;n.onResponseStarted()}onHeaderField(e){let t=this.headers.length;t&1?this.headers[t-1]=Buffer.concat([this.headers[t-1],e]):this.headers.push(e),this.trackHeader(e.length)}onHeaderValue(e){let t=this.headers.length;(t&1)==1?(this.headers.push(e),t+=1):this.headers[t-1]=Buffer.concat([this.headers[t-1],e]);let n=this.headers[t-2];if(n.length===10){let t=r.bufferToLowerCasedHeaderName(n);t===`keep-alive`?this.keepAlive+=e.toString():t===`connection`&&(this.connection+=e.toString())}else n.length===14&&r.bufferToLowerCasedHeaderName(n)===`content-length`&&(this.contentLength+=e.toString());this.trackHeader(e.length)}trackHeader(e){this.headersSize+=e,this.headersSize>=this.headersMaxSize&&r.destroy(this.socket,new d)}onUpgrade(e){let{upgrade:t,client:i,socket:a,headers:o,statusCode:s,statusText:c}=this;n(t),n(i[V]===a),n(!a.destroyed),n(!this.paused),n(!(o.length&1));let l=i[j][i[R]];n(l),n(l.upgrade||l.method===`CONNECT`),this.statusCode=null,this.statusText=``,this.shouldKeepAlive=null,this.headers=[],this.headersSize=0,a.unshift(e),a[x].destroy(),a[x]=null,a[b]=null,a[z]=null,de(a),i[V]=null,i[ce]=null,i[j][i[R]++]=null,i.emit(`disconnect`,i[v],[i],new p(`upgrade`));try{l.onUpgrade(s,o,a,c)}catch(e){r.errorRequest(i,l,e),r.destroy(a,e)}i[J]()}onHeadersComplete(e,t,i){let{client:a,socket:o,headers:s,statusText:c}=this; /* istanbul ignore next: difficult to make a test case for */ if(o.destroyed)return-1;if(a[C]===0)return r.destroy(o,new f(`bad response`,r.getSocketInfo(o))),-1;let l=a[j][a[R]]; /* istanbul ignore next: difficult to make a test case for */ -if(!l)return-1;if(n(!this.upgrade),n(this.statusCode<200),e===100)return r.destroy(o,new f(`bad response`,r.getSocketInfo(o))),-1;if(t&&!l.upgrade)return r.destroy(o,new f(`bad upgrade`,r.getSocketInfo(o))),-1;if(n(this.timeoutType===3),this.statusCode=e,this.shouldKeepAlive=i||l.method===`HEAD`&&!o[y]&&this.connection.toLowerCase()===`keep-alive`,this.statusCode>=200){let e=l.bodyTimeout==null?a[oe]:l.bodyTimeout;this.setTimeout(e,5)}else this.timeout&&this.timeout.refresh&&this.timeout.refresh();if(l.method===`CONNECT`||t)return n(a[C]===1),this.upgrade=!0,2;if(n(!(this.headers.length&1)),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&a[B]){let e=this.keepAlive?r.parseKeepAliveTimeout(this.keepAlive):null;if(e!=null){let t=Math.min(e-a[U],a[re]);t<=0?o[y]=!0:a[H]=t}else a[H]=a[P]}else o[y]=!0;let u=l.onHeaders(e,s,this.resume,c)===!1;return l.aborted?-1:l.method===`HEAD`||e<200?1:(o[S]&&(o[S]=!1,a[q]()),u?J.ERROR.PAUSED:0)}onBody(e){let{client:t,socket:i,statusCode:a,maxResponseSize:o}=this;if(i.destroyed)return-1;let s=t[j][t[R]];if(n(s),n(this.timeoutType===5),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),n(a>=200),o>-1&&this.bytesRead+e.length>o)return r.destroy(i,new _),-1;if(this.bytesRead+=e.length,s.onData(e)===!1)return J.ERROR.PAUSED}onMessageComplete(){let{client:e,socket:t,statusCode:i,upgrade:a,headers:o,contentLength:c,bytesRead:l,shouldKeepAlive:u}=this;if(t.destroyed&&(!i||u))return-1;if(a)return;n(i>=100),n(!(this.headers.length&1));let d=e[j][e[R]];if(n(d),this.statusCode=null,this.statusText=``,this.bytesRead=0,this.contentLength=``,this.keepAlive=``,this.connection=``,this.headers=[],this.headersSize=0,!(i<200)){ +if(!l)return-1;if(n(!this.upgrade),n(this.statusCode<200),e===100)return r.destroy(o,new f(`bad response`,r.getSocketInfo(o))),-1;if(t&&!l.upgrade)return r.destroy(o,new f(`bad upgrade`,r.getSocketInfo(o))),-1;if(n(this.timeoutType===3),this.statusCode=e,this.shouldKeepAlive=i||l.method===`HEAD`&&!o[y]&&this.connection.toLowerCase()===`keep-alive`,this.statusCode>=200){let e=l.bodyTimeout==null?a[oe]:l.bodyTimeout;this.setTimeout(e,5)}else this.timeout&&this.timeout.refresh&&this.timeout.refresh();if(l.method===`CONNECT`||t)return n(a[C]===1),this.upgrade=!0,2;if(n(!(this.headers.length&1)),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&a[B]){let e=this.keepAlive?r.parseKeepAliveTimeout(this.keepAlive):null;if(e!=null){let t=Math.min(e-a[U],a[re]);t<=0?o[y]=!0:a[H]=t}else a[H]=a[P]}else o[y]=!0;let u=l.onHeaders(e,s,this.resume,c)===!1;return l.aborted?-1:l.method===`HEAD`||e<200?1:(o[S]&&(o[S]=!1,a[J]()),u?Y.ERROR.PAUSED:0)}onBody(e){let{client:t,socket:i,statusCode:a,maxResponseSize:o}=this;if(i.destroyed)return-1;let s=t[j][t[R]];if(n(s),n(this.timeoutType===5),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),n(a>=200),o>-1&&this.bytesRead+e.length>o)return r.destroy(i,new _),-1;if(this.bytesRead+=e.length,s.onData(e)===!1)return Y.ERROR.PAUSED}onMessageComplete(){let{client:e,socket:t,statusCode:i,upgrade:a,headers:o,contentLength:c,bytesRead:l,shouldKeepAlive:u}=this;if(t.destroyed&&(!i||u))return-1;if(a)return;n(i>=100),n(!(this.headers.length&1));let d=e[j][e[R]];if(n(d),this.statusCode=null,this.statusText=``,this.bytesRead=0,this.contentLength=``,this.keepAlive=``,this.connection=``,this.headers=[],this.headersSize=0,!(i<200)){ /* istanbul ignore next: should be handled by llhttp? */ -if(d.method!==`HEAD`&&c&&l!==parseInt(c,10))return r.destroy(t,new s),-1;if(d.onComplete(o),e[j][e[R]++]=null,t[he]=!0,t[A])return n(e[C]===0),r.destroy(t,new p(`reset`)),J.ERROR.PAUSED;if(!u||t[y]&&e[C]===0)return r.destroy(t,new p(`reset`)),J.ERROR.PAUSED;e[B]==null||e[B]===1?setImmediate(()=>e[q]()):e[q]()}}};function Ce(e){let{socket:t,timeoutType:i,client:a,paused:o}=e.deref(); +if(d.method!==`HEAD`&&c&&l!==parseInt(c,10))return r.destroy(t,new s),-1;if(d.onComplete(o),e[j][e[R]++]=null,t[me]=!0,t[A])return n(e[C]===0),r.destroy(t,new p(`reset`)),Y.ERROR.PAUSED;if(!u||t[y]&&e[C]===0)return r.destroy(t,new p(`reset`)),Y.ERROR.PAUSED;e[B]==null||e[B]===1?setImmediate(()=>e[J]()):e[J]()}}};function Se(e){let{socket:t,timeoutType:i,client:a,paused:o}=e.deref(); /* istanbul ignore else */ -i===3?(!t[A]||t.writableNeedDrain||a[C]>1)&&(n(!o,`cannot be paused while waiting for headers`),r.destroy(t,new u)):i===5?o||r.destroy(t,new m):i===8&&(n(a[C]===0&&a[H]),r.destroy(t,new p(`socket idle timeout`)))}async function we(e,t){e[V]=t,ve||(ve=await ye,ye=null),t[M]=!1,t[A]=!1,t[y]=!1,t[S]=!1,t[pe]=0,t[me]=null,t[he]=!1,t[x]=new Se(e,t,ve),Y(t,`error`,function(e){let t=this[x];if(e.code===`ECONNRESET`&&t.statusCode&&!t.shouldKeepAlive){let e=t.finish();e&&(this[z]=e,this[b][ce](e))}else this[z]=e,this[b][ce](e)}),Y(t,`readable`,function(){let e=this[x];e&&e.readMore()}),Y(t,`end`,function(){let e=this[x];if(e.statusCode&&!e.shouldKeepAlive){let t=e.finish();t&&r.destroy(this,t)}else r.destroy(this,new f(`other side closed`,r.getSocketInfo(this)))}),Y(t,`close`,function(){let e=this[b],t=this[x];Te(this),t&&(!this[z]&&t.statusCode&&!t.shouldKeepAlive&&(this[z]=t.finish()||this[z]),this[x].destroy(),this[x]=null);let i=this[z]||new f(`closed`,r.getSocketInfo(this));if(e[V]=null,e[le]=null,e.destroyed){n(e[E]===0);let t=e[j].splice(e[R]);for(let n=0;n0&&i.code!==`UND_ERR_INFO`){let t=e[j][e[R]];e[j][e[R]++]=null,r.errorRequest(e,t,i)}e[te]=e[R],n(e[C]===0),e.emit(`disconnect`,e[v],[e],i),e[q]()});let i=!1;return t.on(`close`,()=>{i=!0}),{version:`h1`,defaultPipelining:1,write(...t){return ke(e,...t)},resume(){De(e)},destroy(e,n){i?queueMicrotask(n):t.destroy(e).on(`close`,n)},get destroyed(){return t.destroyed},busy(n){return!!(t[A]||t[y]||t[S]||t[pe]===1||n&&(e[C]>0&&!n.idempotent||e[C]>0&&(n.upgrade||n.method===`CONNECT`)||e[C]>0&&r.bodyLength(n.body)!==0&&(r.isStream(n.body)||r.isAsyncIterable(n.body)||r.isFormDataLike(n.body))))}}}function Te(e){e[me]&&(clearImmediate(e[me]),e[me]=null),e[pe]=0}function Ee(e,t){t[pe]=1,t[me]=setImmediate(()=>{t[me]=null,t[pe]=2,e[V]===t&&!t.destroyed&&e[q]()})}function De(e){let t=e[V];if(t&&!t.destroyed){if(e[D]===0?!t[M]&&t.unref&&(t.unref(),t[M]=!0):t[M]&&t.ref&&(t.ref(),t[M]=!1),e[C]===0&&e[E]>0&&t[he]){if(t[pe]===0){Ee(e,t),t[x].readMore(),t.destroyed;return}if(t[pe]===1){t[x].readMore(),t.destroyed;return}}if(e[C]===0&&(t[x].readMore(),t.destroyed))return;if(e[D]===0)t[x].timeoutType!==8&&t[x].setTimeout(e[H],8);else if(e[C]>0&&t[x].statusCode<200&&t[x].timeoutType!==3){let n=e[j][e[R]],r=n.headersTimeout==null?e[ae]:n.headersTimeout;t[x].setTimeout(r,3)}}}function Oe(e){return e!==`GET`&&e!==`HEAD`&&e!==`OPTIONS`&&e!==`TRACE`&&e!==`CONNECT`}function ke(e,t){let{method:a,path:s,host:u,upgrade:d,blocking:f,reset:m}=t,{body:h,headers:g,contentLength:_}=t,v=a===`PUT`||a===`POST`||a===`PATCH`||a===`QUERY`||a===`PROPFIND`||a===`PROPPATCH`;if(r.isFormDataLike(h)){ge||=ie().extractBody;let[e,n]=ge(h);t.contentType??g.push(`content-type`,n),h=e.stream,_=e.length}else if(r.isBlobLike(h)&&t.contentType==null){let n=h.type;if(n){let i=`${n}`;if(!r.isValidHeaderValue(i))return r.errorRequest(e,t,new l(`invalid content-type header`)),!1;g.push(`content-type`,i)}}h&&typeof h.read==`function`&&h.read(0);let b=r.bodyLength(h);if(_=b??_,_===null&&(_=t.contentLength),_===0&&!v&&(_=null),Oe(a)&&_>0&&t.contentLength!==null&&t.contentLength!==_){if(e[W])return r.errorRequest(e,t,new o),!1;process.emitWarning(new o)}let x=e[V];Te(x);let C=n=>{t.aborted||(t.completed?(t.upgrade||t.method===`CONNECT`)&&r.destroy(x,new p(`aborted`)):(r.errorRequest(e,t,n||new c),r.destroy(h),r.destroy(x,new p(`aborted`))))};try{t.onConnect(C)}catch(n){r.errorRequest(e,t,n)}if(t.aborted)return!1;a===`HEAD`&&(x[y]=!0),(d||a===`CONNECT`)&&(x[y]=!0),m!=null&&(x[y]=m),e[G]&&x[se]++>=e[G]&&(x[y]=!0),f&&(x[S]=!0);let w=`${a} ${s} HTTP/1.1\r\n`;if(w+=typeof u==`string`?`host: ${u}\r\n`:e[F],d?w+=`connection: upgrade\r\nupgrade: ${d}\r\n`:e[B]&&!x[y]?w+=`connection: keep-alive\r +i===3?(!t[A]||t.writableNeedDrain||a[C]>1)&&(n(!o,`cannot be paused while waiting for headers`),r.destroy(t,new u)):i===5?o||r.destroy(t,new m):i===8&&(n(a[C]===0&&a[H]),r.destroy(t,new p(`socket idle timeout`)))}async function Ce(e,t){e[V]=t,_e||(_e=await ve,ve=null),t[M]=!1,t[A]=!1,t[y]=!1,t[S]=!1,t[fe]=0,t[pe]=null,t[me]=!1,t[x]=new xe(e,t,_e),X(t,`error`,function(e){let t=this[x];if(e.code===`ECONNRESET`&&t.statusCode&&!t.shouldKeepAlive){let e=t.finish();e&&(this[z]=e,this[b][se](e))}else this[z]=e,this[b][se](e)}),X(t,`readable`,function(){let e=this[x];e&&e.readMore()}),X(t,`end`,function(){let e=this[x];if(e.statusCode&&!e.shouldKeepAlive){let t=e.finish();t&&r.destroy(this,t)}else r.destroy(this,new f(`other side closed`,r.getSocketInfo(this)))}),X(t,`close`,function(){let e=this[b],t=this[x];we(this),t&&(!this[z]&&t.statusCode&&!t.shouldKeepAlive&&(this[z]=t.finish()||this[z]),this[x].destroy(),this[x]=null);let i=this[z]||new f(`closed`,r.getSocketInfo(this));if(e[V]=null,e[ce]=null,e.destroyed){n(e[E]===0);let t=e[j].splice(e[R]);for(let n=0;n0&&i.code!==`UND_ERR_INFO`){let t=e[j][e[R]];e[j][e[R]++]=null,r.errorRequest(e,t,i)}e[te]=e[R],n(e[C]===0),e.emit(`disconnect`,e[v],[e],i),e[J]()});let i=!1;return t.on(`close`,()=>{i=!0}),{version:`h1`,defaultPipelining:1,write(...t){return Oe(e,...t)},resume(){Ee(e)},destroy(e,n){i?queueMicrotask(n):t.destroy(e).on(`close`,n)},get destroyed(){return t.destroyed},busy(n){return!!(t[A]||t[y]||t[S]||t[fe]===1||n&&(e[C]>0&&!n.idempotent||e[C]>0&&(n.upgrade||n.method===`CONNECT`)||e[C]>0&&r.bodyLength(n.body)!==0&&(r.isStream(n.body)||r.isAsyncIterable(n.body)||r.isFormDataLike(n.body))))}}}function we(e){e[pe]&&(clearImmediate(e[pe]),e[pe]=null),e[fe]=0}function Te(e,t){t[fe]=1,t[pe]=setImmediate(()=>{t[pe]=null,t[fe]=2,e[V]===t&&!t.destroyed&&e[J]()})}function Ee(e){let t=e[V];if(t&&!t.destroyed){if(e[D]===0?!t[M]&&t.unref&&(t.unref(),t[M]=!0):t[M]&&t.ref&&(t.ref(),t[M]=!1),e[C]===0&&e[E]>0&&t[me]){if(t[fe]===0){Te(e,t),t[x].readMore(),t.destroyed;return}if(t[fe]===1){t[x].readMore(),t.destroyed;return}}if(e[C]===0&&(t[x].readMore(),t.destroyed))return;if(e[D]===0)t[x].timeoutType!==8&&t[x].setTimeout(e[H],8);else if(e[C]>0&&t[x].statusCode<200&&t[x].timeoutType!==3){let n=e[j][e[R]],r=n.headersTimeout==null?e[ae]:n.headersTimeout;t[x].setTimeout(r,3)}}}function De(e){return e!==`GET`&&e!==`HEAD`&&e!==`OPTIONS`&&e!==`TRACE`&&e!==`CONNECT`}function Oe(e,t){let{method:a,path:s,host:u,upgrade:d,blocking:f,reset:m}=t,{body:h,headers:g,contentLength:_}=t,v=a===`PUT`||a===`POST`||a===`PATCH`||a===`QUERY`||a===`PROPFIND`||a===`PROPPATCH`;if(r.isFormDataLike(h)){he||=ie().extractBody;let[e,n]=he(h);t.contentType??g.push(`content-type`,n),h=e.stream,_=e.length}else if(r.isBlobLike(h)&&t.contentType==null){let n=h.type;if(n){let i=`${n}`;if(!r.isValidHeaderValue(i))return r.errorRequest(e,t,new l(`invalid content-type header`)),!1;g.push(`content-type`,i)}}h&&typeof h.read==`function`&&h.read(0);let b=r.bodyLength(h);if(_=b??_,_===null&&(_=t.contentLength),_===0&&!v&&(_=null),De(a)&&_>0&&t.contentLength!==null&&t.contentLength!==_){if(e[W])return r.errorRequest(e,t,new o),!1;process.emitWarning(new o)}let x=e[V];we(x);let C=n=>{t.aborted||(t.completed?(t.upgrade||t.method===`CONNECT`)&&r.destroy(x,new p(`aborted`)):(r.errorRequest(e,t,n||new c),r.destroy(h),r.destroy(x,new p(`aborted`))))};try{t.onConnect(C)}catch(n){r.errorRequest(e,t,n)}if(t.aborted)return!1;a===`HEAD`&&(x[y]=!0),(d||a===`CONNECT`)&&(x[y]=!0),m!=null&&(x[y]=m),e[G]&&x[K]++>=e[G]&&(x[y]=!0),f&&(x[S]=!0);let w=`${a} ${s} HTTP/1.1\r\n`;if(w+=typeof u==`string`?`host: ${u}\r\n`:e[F],d?w+=`connection: upgrade\r\nupgrade: ${d}\r\n`:e[B]&&!x[y]?w+=`connection: keep-alive\r `:w+=`connection: close\r -`,Array.isArray(g))for(let e=0;e{t.removeListener(`error`,g)}),!d){let e=new c;queueMicrotask(()=>g(e))}},g=function(e){if(!d){if(d=!0,n(o.destroyed||o[A]&&i[C]<=1),o.off(`drain`,m).off(`error`,g),t.removeListener(`data`,p).removeListener(`end`,g).removeListener(`close`,h),!e)try{f.end()}catch(t){e=t}f.destroy(e),e&&(e.code!==`UND_ERR_INFO`||e.message!==`reset`)?r.destroy(t,e):r.destroy(t)}};t.on(`data`,p).on(`end`,g).on(`error`,g).on(`close`,h),t.resume&&t.resume(),o.on(`drain`,m).on(`error`,g),t.errorEmitted??t.errored?setImmediate(()=>g(t.errored)):(t.endEmitted??t.readableEnded)&&setImmediate(()=>g(null)),(t.closeEmitted??t.closed)&&setImmediate(h)}function je(e,t,i,a,o,s,c,l){try{t?r.isBuffer(t)&&(n(s===t.byteLength,`buffer body must have content length`),o.cork(),o.write(`${c}content-length: ${s}\r\n\r\n`,`latin1`),o.write(t),o.uncork(),a.onBodySent(t),!l&&a.reset!==!1&&(o[y]=!0)):s===0?o.write(`${c}content-length: 0\r\n\r\n`,`latin1`):(n(s===null,`no body must not have content length`),o.write(`${c}\r\n`,`latin1`)),a.onRequestSent(),i[q]()}catch(t){e(t)}}async function Me(e,t,r,i,a,s,c,l){n(s===t.size,`blob body must have content length`);try{if(s!=null&&s!==t.size)throw new o;let e=Buffer.from(await t.arrayBuffer());a.cork(),a.write(`${c}content-length: ${s}\r\n\r\n`,`latin1`),a.write(e),a.uncork(),i.onBodySent(e),i.onRequestSent(),!l&&i.reset!==!1&&(a[y]=!0),r[q]()}catch(t){e(t)}}async function Ne(e,t,r,i,a,o,s,c){n(o!==0||r[C]===0,`iterator body cannot be pipelined`);let l=null;function u(){if(l){let e=l;l=null,e()}}let d=()=>new Promise((e,t)=>{n(l===null),a[z]?t(a[z]):l=e});a.on(`close`,u).on(`drain`,u);let f=new Pe({abort:e,socket:a,request:i,contentLength:o,client:r,expectsPayload:c,header:s});try{for await(let e of t){if(a[z])throw a[z];f.write(e)||await d()}f.end()}catch(e){f.destroy(e)}finally{a.off(`close`,u).off(`drain`,u)}}var Pe=class{constructor({abort:e,socket:t,request:n,contentLength:r,client:i,expectsPayload:a,header:o}){this.socket=t,this.request=n,this.contentLength=r,this.client=i,this.bytesWritten=0,this.expectsPayload=a,this.header=o,this.abort=e,t[A]=!0}write(e){let{socket:t,request:n,contentLength:r,client:i,bytesWritten:a,expectsPayload:s,header:c}=this;if(t[z])throw t[z];if(t.destroyed)return!1;let l=Buffer.byteLength(e);if(!l)return!0;if(r!==null&&a+l>r){if(i[W])throw new o;process.emitWarning(new o)}t.cork(),a===0&&(!s&&n.reset!==!1&&(t[y]=!0),r===null?t.write(`${c}transfer-encoding: chunked\r\n`,`latin1`):t.write(`${c}content-length: ${r}\r\n\r\n`,`latin1`)),r===null&&t.write(`\r\n${l.toString(16)}\r\n`,`latin1`),this.bytesWritten+=l;let u=t.write(e);return t.uncork(),n.onBodySent(e),u||t[x].timeout&&t[x].timeoutType===3&&t[x].timeout.refresh&&t[x].timeout.refresh(),u}end(){let{socket:e,contentLength:t,client:n,bytesWritten:r,expectsPayload:i,header:a,request:s}=this;if(s.onRequestSent(),e[A]=!1,e[z])throw e[z];if(!e.destroyed){if(r===0?i?e.write(`${a}content-length: 0\r\n\r\n`,`latin1`):e.write(`${a}\r\n`,`latin1`):t===null&&e.write(`\r +`,Array.isArray(g))for(let e=0;e{t.removeListener(`error`,g)}),!d){let e=new c;queueMicrotask(()=>g(e))}},g=function(e){if(!d){if(d=!0,n(o.destroyed||o[A]&&i[C]<=1),o.off(`drain`,m).off(`error`,g),t.removeListener(`data`,p).removeListener(`end`,g).removeListener(`close`,h),!e)try{f.end()}catch(t){e=t}f.destroy(e),e&&(e.code!==`UND_ERR_INFO`||e.message!==`reset`)?r.destroy(t,e):r.destroy(t)}};t.on(`data`,p).on(`end`,g).on(`error`,g).on(`close`,h),t.resume&&t.resume(),o.on(`drain`,m).on(`error`,g),t.errorEmitted??t.errored?setImmediate(()=>g(t.errored)):(t.endEmitted??t.readableEnded)&&setImmediate(()=>g(null)),(t.closeEmitted??t.closed)&&setImmediate(h)}function Ae(e,t,i,a,o,s,c,l){try{t?r.isBuffer(t)&&(n(s===t.byteLength,`buffer body must have content length`),o.cork(),o.write(`${c}content-length: ${s}\r\n\r\n`,`latin1`),o.write(t),o.uncork(),a.onBodySent(t),!l&&a.reset!==!1&&(o[y]=!0)):s===0?o.write(`${c}content-length: 0\r\n\r\n`,`latin1`):(n(s===null,`no body must not have content length`),o.write(`${c}\r\n`,`latin1`)),a.onRequestSent(),i[J]()}catch(t){e(t)}}async function je(e,t,r,i,a,s,c,l){n(s===t.size,`blob body must have content length`);try{if(s!=null&&s!==t.size)throw new o;let e=Buffer.from(await t.arrayBuffer());a.cork(),a.write(`${c}content-length: ${s}\r\n\r\n`,`latin1`),a.write(e),a.uncork(),i.onBodySent(e),i.onRequestSent(),!l&&i.reset!==!1&&(a[y]=!0),r[J]()}catch(t){e(t)}}async function Me(e,t,r,i,a,o,s,c){n(o!==0||r[C]===0,`iterator body cannot be pipelined`);let l=null;function u(){if(l){let e=l;l=null,e()}}let d=()=>new Promise((e,t)=>{n(l===null),a[z]?t(a[z]):l=e});a.on(`close`,u).on(`drain`,u);let f=new Ne({abort:e,socket:a,request:i,contentLength:o,client:r,expectsPayload:c,header:s});try{for await(let e of t){if(a[z])throw a[z];f.write(e)||await d()}f.end()}catch(e){f.destroy(e)}finally{a.off(`close`,u).off(`drain`,u)}}var Ne=class{constructor({abort:e,socket:t,request:n,contentLength:r,client:i,expectsPayload:a,header:o}){this.socket=t,this.request=n,this.contentLength=r,this.client=i,this.bytesWritten=0,this.expectsPayload=a,this.header=o,this.abort=e,t[A]=!0}write(e){let{socket:t,request:n,contentLength:r,client:i,bytesWritten:a,expectsPayload:s,header:c}=this;if(t[z])throw t[z];if(t.destroyed)return!1;let l=Buffer.byteLength(e);if(!l)return!0;if(r!==null&&a+l>r){if(i[W])throw new o;process.emitWarning(new o)}t.cork(),a===0&&(!s&&n.reset!==!1&&(t[y]=!0),r===null?t.write(`${c}transfer-encoding: chunked\r\n`,`latin1`):t.write(`${c}content-length: ${r}\r\n\r\n`,`latin1`)),r===null&&t.write(`\r\n${l.toString(16)}\r\n`,`latin1`),this.bytesWritten+=l;let u=t.write(e);return t.uncork(),n.onBodySent(e),u||t[x].timeout&&t[x].timeoutType===3&&t[x].timeout.refresh&&t[x].timeout.refresh(),u}end(){let{socket:e,contentLength:t,client:n,bytesWritten:r,expectsPayload:i,header:a,request:s}=this;if(s.onRequestSent(),e[A]=!1,e[z])throw e[z];if(!e.destroyed){if(r===0?i?e.write(`${a}content-length: 0\r\n\r\n`,`latin1`):e.write(`${a}\r\n`,`latin1`):t===null&&e.write(`\r 0\r \r -`,`latin1`),t!==null&&r!==t){if(n[W])throw new o;process.emitWarning(new o)}e[x].timeout&&e[x].timeoutType===3&&e[x].timeout.refresh&&e[x].timeout.refresh(),n[q]()}}destroy(e){let{socket:t,client:r,abort:i}=this;t[A]=!1,e&&(n(r[C]<=1,`pipeline should only contain this request`),i(e))}};t.exports=we})),oe=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),{errorMonitor:r}=h(`node:events`),{pipeline:i}=h(`node:stream`),a=O(),{RequestContentLengthMismatchError:o,RequestAbortedError:s,SocketError:c,InformationalError:l}=T(),{kUrl:u,kReset:d,kClient:f,kRunning:p,kPending:m,kQueue:g,kPendingIdx:_,kRunningIdx:v,kError:y,kSocket:b,kStrictContentLength:x,kOnError:S,kMaxConcurrentStreams:C,kHTTP2Session:E,kResume:D,kSize:k,kHTTPContext:A}=w(),j=Symbol(`open streams`),M,N=!1,P;try{P=h(`node:http2`)}catch{P={constants:{}}}let{constants:{HTTP2_HEADER_AUTHORITY:F,HTTP2_HEADER_METHOD:I,HTTP2_HEADER_PATH:L,HTTP2_HEADER_SCHEME:ee,HTTP2_HEADER_CONTENT_LENGTH:te,HTTP2_HEADER_EXPECT:R,HTTP2_HEADER_STATUS:z}}=P;function B(e){let t=[];for(let[n,r]of Object.entries(e))if(Array.isArray(r))for(let e of r)t.push(Buffer.from(n),Buffer.from(e));else t.push(Buffer.from(n),Buffer.from(r));return t}function V(e){let{[z]:t,...n}=e;return B(n)}async function H(e,t){e[b]=t,N||(N=!0,process.emitWarning(`H2 support is experimental, expect them to change at any time.`,{code:`UNDICI-H2`}));let r=P.connect(e[u],{createConnection:()=>t,peerMaxConcurrentStreams:e[C]});r[j]=0,r[f]=e,r[b]=t,a.addListener(r,`error`,re),a.addListener(r,`frameError`,U),a.addListener(r,`end`,ae),a.addListener(r,`goaway`,oe),a.addListener(r,`close`,function(){let{[f]:e}=this,{[b]:t}=e,r=this[b][y]||this[y]||new c(`closed`,a.getSocketInfo(t));if(e[E]=null,e.destroyed){n(e[m]===0);let t=e[g].splice(e[v]);for(let n=0;n{i=!0}),{version:`h2`,defaultPipelining:1/0,write(...t){return G(e,...t)},resume(){ne(e)},destroy(e,n){i?queueMicrotask(n):t.destroy(e).on(`close`,n)},get destroyed(){return t.destroyed},busy(){return!1}}}function ne(e){let t=e[b];t?.destroyed===!1&&(e[k]===0&&e[C]===0?(t.unref(),e[E].unref()):(t.ref(),e[E].ref()))}function re(e){this[b][y]=e,this[f][S](e)}function U(e,t,n){if(n===0){let n=new l(`HTTP/2: "frameError" received - type ${e}, code ${t}`);this[b][y]=n,this[f][S](n)}}function ae(){let e=new c(`other side closed`,a.getSocketInfo(this[b]));this.destroy(e),a.destroy(this[b],e)}function oe(e){let t=this[y]||new c(`HTTP/2: "GOAWAY" frame received with code ${e}`,a.getSocketInfo(this)),r=this[f];if(r[b]=null,r[A]=null,this[E]!=null&&(this[E].destroy(t),this[E]=null),a.destroy(this[b],t),r[v]{t.aborted||(t.completed?c===`CONNECT`&&w!=null&&a.destroy(w,n||new s):(n||=new s,a.errorRequest(e,t,n),w!=null&&a.destroy(w,n),a.destroy(S,n),e[g][e[v]++]=null,e[D]()))};try{t.onConnect(k)}catch(n){a.errorRequest(e,t,n)}if(t.aborted)return!1;if(c===`CONNECT`){i.ref(),w=i.request(C,{endStream:!1,signal:h});let n=!1,a=e=>{n=!0,w.off(r,o),t.onUpgradeResponse(Number(e[z]),e,V)},o=e=>{n=!0,w.off(`response`,a),t.onUpgradeError(e)};return w.once(`response`,a),w.once(`error`,k),++i[j],(()=>{try{t.onUpgrade(null,null,w)}catch(e){w.off(`response`,a),k(e);return}t.aborted||(w.off(`error`,k),w.once(r,o),e[g][e[v]++]=null)})(),w.once(`close`,()=>{!n&&t.completed&&(w.off(`response`,a),w.off(r,o),t.onUpgradeError(new l(`HTTP/2: "stream error" received - code ${w.rstCode}`))),--i[j],i[j]===0&&i.unref()}),!0}C[L]=d,C[ee]=`https`;let A=c===`PUT`||c===`POST`||c===`PATCH`;S&&typeof S.read==`function`&&S.read(0);let N=a.bodyLength(S);if(a.isFormDataLike(S)){M??=ie().extractBody;let[e,t]=M(S);C[`content-type`]=t,S=e.stream,N=e.length}if(N??=t.contentLength,N!==0&&A||(N=null),W(c)&&N>0&&t.contentLength!=null&&t.contentLength!==N){if(e[x])return a.errorRequest(e,t,new o),!1;process.emitWarning(new o)}N!=null&&(n(S,`no body must not have content length`),C[te]=`${N}`),i.ref();let P=c===`GET`||c===`HEAD`||S===null;return m?(C[R]=`100-continue`,w=i.request(C,{endStream:P,signal:h}),w.once(`continue`,H)):(w=i.request(C,{endStream:P,signal:h}),H()),++i[j],w.once(`response`,n=>{let{[z]:r,...i}=n;if(t.onResponseStarted(),t.aborted){let n=new s;a.errorRequest(e,t,n),a.destroy(w,n)}else t.onHeaders(Number(r),B(i),w.resume.bind(w),``)===!1&&w.pause(),w.on(`data`,e=>{t.onData(e)===!1&&w.pause()})}),w.once(`end`,()=>{(w.state?.state==null||w.state.state<6)&&t.onComplete([]),i[j]===0&&i.unref(),k(new l(`HTTP/2: stream half-closed (remote)`)),e[g][e[v]++]=null,e[_]=e[v],e[D]()}),w.once(`close`,()=>{--i[j],i[j]===0&&i.unref()}),w.once(`error`,function(e){k(e)}),w.once(`frameError`,(e,t)=>{k(new l(`HTTP/2: "frameError" received - type ${e}, code ${t}`))}),!0;function H(){ +`,`latin1`),t!==null&&r!==t){if(n[W])throw new o;process.emitWarning(new o)}e[x].timeout&&e[x].timeoutType===3&&e[x].timeout.refresh&&e[x].timeout.refresh(),n[J]()}}destroy(e){let{socket:t,client:r,abort:i}=this;t[A]=!1,e&&(n(r[C]<=1,`pipeline should only contain this request`),i(e))}};t.exports=Ce})),oe=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),{errorMonitor:r}=h(`node:events`),{pipeline:i}=h(`node:stream`),a=O(),{RequestContentLengthMismatchError:o,RequestAbortedError:s,SocketError:c,InformationalError:l}=T(),{kUrl:u,kReset:d,kClient:f,kRunning:p,kPending:m,kQueue:g,kPendingIdx:_,kRunningIdx:v,kError:y,kSocket:b,kStrictContentLength:x,kOnError:S,kMaxConcurrentStreams:C,kHTTP2Session:E,kResume:D,kSize:k,kHTTPContext:A}=w(),j=Symbol(`open streams`),M,N=!1,P;try{P=h(`node:http2`)}catch{P={constants:{}}}let{constants:{HTTP2_HEADER_AUTHORITY:F,HTTP2_HEADER_METHOD:I,HTTP2_HEADER_PATH:L,HTTP2_HEADER_SCHEME:ee,HTTP2_HEADER_CONTENT_LENGTH:te,HTTP2_HEADER_EXPECT:R,HTTP2_HEADER_STATUS:z}}=P;function B(e){let t=[];for(let[n,r]of Object.entries(e))if(Array.isArray(r))for(let e of r)t.push(Buffer.from(n),Buffer.from(e));else t.push(Buffer.from(n),Buffer.from(r));return t}function V(e){let{[z]:t,...n}=e;return B(n)}async function H(e,t){e[b]=t,N||(N=!0,process.emitWarning(`H2 support is experimental, expect them to change at any time.`,{code:`UNDICI-H2`}));let r=P.connect(e[u],{createConnection:()=>t,peerMaxConcurrentStreams:e[C]});r[j]=0,r[f]=e,r[b]=t,a.addListener(r,`error`,re),a.addListener(r,`frameError`,U),a.addListener(r,`end`,ae),a.addListener(r,`goaway`,oe),a.addListener(r,`close`,function(){let{[f]:e}=this,{[b]:t}=e,r=this[b][y]||this[y]||new c(`closed`,a.getSocketInfo(t));if(e[E]=null,e.destroyed){n(e[m]===0);let t=e[g].splice(e[v]);for(let n=0;n{i=!0}),{version:`h2`,defaultPipelining:1/0,write(...t){return G(e,...t)},resume(){ne(e)},destroy(e,n){i?queueMicrotask(n):t.destroy(e).on(`close`,n)},get destroyed(){return t.destroyed},busy(){return!1}}}function ne(e){let t=e[b];t?.destroyed===!1&&(e[k]===0&&e[C]===0?(t.unref(),e[E].unref()):(t.ref(),e[E].ref()))}function re(e){this[b][y]=e,this[f][S](e)}function U(e,t,n){if(n===0){let n=new l(`HTTP/2: "frameError" received - type ${e}, code ${t}`);this[b][y]=n,this[f][S](n)}}function ae(){let e=new c(`other side closed`,a.getSocketInfo(this[b]));this.destroy(e),a.destroy(this[b],e)}function oe(e){let t=this[y]||new c(`HTTP/2: "GOAWAY" frame received with code ${e}`,a.getSocketInfo(this)),r=this[f];if(r[b]=null,r[A]=null,this[E]!=null&&(this[E].destroy(t),this[E]=null),a.destroy(this[b],t),r[v]{t.aborted||(t.completed?c===`CONNECT`&&w!=null&&a.destroy(w,n||new s):(n||=new s,a.errorRequest(e,t,n),w!=null&&a.destroy(w,n),a.destroy(S,n),e[g][e[v]++]=null,e[D]()))};try{t.onConnect(k)}catch(n){a.errorRequest(e,t,n)}if(t.aborted)return!1;if(c===`CONNECT`){i.ref(),w=i.request(C,{endStream:!1,signal:h});let n=!1,a=e=>{n=!0,w.off(r,o),t.onUpgradeResponse(Number(e[z]),e,V)},o=e=>{n=!0,w.off(`response`,a),t.onUpgradeError(e)};return w.once(`response`,a),w.once(`error`,k),++i[j],(()=>{try{t.onUpgrade(null,null,w)}catch(e){w.off(`response`,a),k(e);return}t.aborted||(w.off(`error`,k),w.once(r,o),e[g][e[v]++]=null)})(),w.once(`close`,()=>{!n&&t.completed&&(w.off(`response`,a),w.off(r,o),t.onUpgradeError(new l(`HTTP/2: "stream error" received - code ${w.rstCode}`))),--i[j],i[j]===0&&i.unref()}),!0}C[L]=d,C[ee]=`https`;let A=c===`PUT`||c===`POST`||c===`PATCH`;S&&typeof S.read==`function`&&S.read(0);let N=a.bodyLength(S);if(a.isFormDataLike(S)){M??=ie().extractBody;let[e,t]=M(S);C[`content-type`]=t,S=e.stream,N=e.length}if(N??=t.contentLength,N!==0&&A||(N=null),W(c)&&N>0&&t.contentLength!=null&&t.contentLength!==N){if(e[x])return a.errorRequest(e,t,new o),!1;process.emitWarning(new o)}N!=null&&(n(S,`no body must not have content length`),C[te]=`${N}`),i.ref();let P=c===`GET`||c===`HEAD`||S===null;return m?(C[R]=`100-continue`,w=i.request(C,{endStream:P,signal:h}),w.once(`continue`,H)):(w=i.request(C,{endStream:P,signal:h}),H()),++i[j],w.once(`response`,n=>{let{[z]:r,...i}=n;if(t.onResponseStarted(),t.aborted){let n=new s;a.errorRequest(e,t,n),a.destroy(w,n)}else t.onHeaders(Number(r),B(i),w.resume.bind(w),``)===!1&&w.pause(),w.on(`data`,e=>{t.onData(e)===!1&&w.pause()})}),w.once(`end`,()=>{(w.state?.state==null||w.state.state<6)&&t.onComplete([]),i[j]===0&&i.unref(),k(new l(`HTTP/2: stream half-closed (remote)`)),e[g][e[v]++]=null,e[_]=e[v],e[D]()}),w.once(`close`,()=>{--i[j],i[j]===0&&i.unref()}),w.once(`error`,function(e){k(e)}),w.once(`frameError`,(e,t)=>{k(new l(`HTTP/2: "frameError" received - type ${e}, code ${t}`))}),!0;function H(){ /* istanbul ignore else: assertion */ -!S||N===0?se(k,w,null,e,t,e[b],N,A):a.isBuffer(S)?se(k,w,S,e,t,e[b],N,A):a.isBlobLike(S)?typeof S.stream==`function`?q(k,w,S.stream(),e,t,e[b],N,A):ce(k,w,S,e,t,e[b],N,A):a.isStream(S)?K(k,e[b],A,w,S,e,t,N):a.isIterable(S)?q(k,w,S,e,t,e[b],N,A):n(!1)}}function se(e,t,r,i,o,s,c,l){try{r!=null&&a.isBuffer(r)&&(n(c===r.byteLength,`buffer body must have content length`),t.cork(),t.write(r),t.uncork(),t.end(),o.onBodySent(r)),l||(s[d]=!0),o.onRequestSent(),i[D]()}catch(t){e(t)}}function K(e,t,r,o,s,c,l,u){n(u!==0||c[p]===0,`stream body cannot be pipelined`);let f=i(s,o,n=>{n?(a.destroy(f,n),e(n)):(a.removeAllListeners(f),l.onRequestSent(),r||(t[d]=!0),c[D]())});a.addListener(f,`data`,m);function m(e){l.onBodySent(e)}}async function ce(e,t,r,i,a,s,c,l){n(c===r.size,`blob body must have content length`);try{if(c!=null&&c!==r.size)throw new o;let e=Buffer.from(await r.arrayBuffer());t.cork(),t.write(e),t.uncork(),t.end(),a.onBodySent(e),a.onRequestSent(),l||(s[d]=!0),i[D]()}catch(t){e(t)}}async function q(e,t,r,i,a,o,s,c){n(s!==0||i[p]===0,`iterator body cannot be pipelined`);let l=null;function u(){if(l){let e=l;l=null,e()}}let f=()=>new Promise((e,t)=>{n(l===null),o[y]?t(o[y]):l=e});t.on(`close`,u).on(`drain`,u);try{for await(let e of r){if(o[y])throw o[y];let n=t.write(e);a.onBodySent(e),n||await f()}t.end(),a.onRequestSent(),c||(o[d]=!0),i[D]()}catch(t){e(t)}finally{t.off(`close`,u).off(`drain`,u)}}t.exports=H})),W=/* @__PURE__ */ m(((e,t)=>{let n=O(),{kBodyUsed:r}=w(),i=h(`node:assert`),{InvalidArgumentError:a}=T(),o=h(`node:events`),s=[300,301,302,303,307,308],c=Symbol(`body`);var l=class{constructor(e){this[c]=e,this[r]=!1}async*[Symbol.asyncIterator](){i(!this[r],`disturbed`),this[r]=!0,yield*this[c]}},u=class{constructor(e,t,s,c){if(t!=null&&(!Number.isInteger(t)||t<0))throw new a(`maxRedirections must be a positive number`);n.validateHandler(c,s.method,s.upgrade),this.dispatch=e,this.location=null,this.abort=null,this.opts={...s,maxRedirections:0},this.maxRedirections=t,this.handler=c,this.history=[],this.redirectionLimitReached=!1,n.isStream(this.opts.body)?(n.bodyLength(this.opts.body)===0&&this.opts.body.on(`data`,function(){i(!1)}),typeof this.opts.body.readableDidRead!=`boolean`&&(this.opts.body[r]=!1,o.prototype.on.call(this.opts.body,`data`,function(){this[r]=!0}))):(this.opts.body&&typeof this.opts.body.pipeTo==`function`||this.opts.body&&typeof this.opts.body!=`string`&&!ArrayBuffer.isView(this.opts.body)&&n.isIterable(this.opts.body))&&(this.opts.body=new l(this.opts.body))}onConnect(e){this.abort=e,this.handler.onConnect(e,{history:this.history})}onUpgrade(e,t,n){this.handler.onUpgrade(e,t,n)}onError(e){this.handler.onError(e)}onHeaders(e,t,r,i){if(this.location=this.history.length>=this.maxRedirections||n.isDisturbed(this.opts.body)?null:d(e,t),this.opts.throwOnMaxRedirect&&this.history.length>=this.maxRedirections){this.request&&this.request.abort(/* @__PURE__ */ Error(`max redirects`)),this.redirectionLimitReached=!0,this.abort(/* @__PURE__ */ Error(`max redirects`));return}if(this.opts.origin&&this.history.push(new URL(this.opts.path,this.opts.origin)),!this.location)return this.handler.onHeaders(e,t,r,i);let{origin:a,pathname:o,search:s}=n.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),c=s?`${o}${s}`:o;this.opts.headers=p(this.opts.headers,e===303,this.opts.origin!==a),this.opts.path=c,this.opts.origin=a,this.opts.maxRedirections=0,this.opts.query=null,e===303&&this.opts.method!==`HEAD`&&(this.opts.method=`GET`,this.opts.body=null)}onData(e){if(!this.location)return this.handler.onData(e)}onComplete(e){this.location?(this.location=null,this.abort=null,this.dispatch(this.opts,this)):this.handler.onComplete(e)}onBodySent(e){this.handler.onBodySent&&this.handler.onBodySent(e)}};function d(e,t){if(s.indexOf(e)===-1)return null;for(let e=0;e{let n=W();function r({maxRedirections:e}){return t=>function(r,i){let{maxRedirections:a=e}=r;if(!a)return t(r,i);let o=new n(t,a,r,i);return r={...r,maxRedirections:0},t(r,o)}}t.exports=r})),se=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),r=h(`node:net`),i=h(`node:http`),a=O(),{channels:o}=k(),s=A(),c=M(),{InvalidArgumentError:l,InformationalError:u,ClientDestroyedError:d}=T(),f=P(),{kUrl:p,kServerName:m,kClient:g,kBusy:_,kConnect:v,kResuming:y,kRunning:b,kPending:x,kSize:S,kQueue:C,kConnected:E,kConnecting:D,kNeedDrain:j,kKeepAliveDefaultTimeout:N,kHostHeader:F,kPendingIdx:I,kRunningIdx:L,kError:ee,kPipelining:te,kKeepAliveTimeoutValue:R,kMaxHeadersSize:z,kKeepAliveMaxTimeout:B,kKeepAliveTimeoutThreshold:V,kHeadersTimeout:H,kBodyTimeout:ne,kStrictContentLength:re,kConnector:U,kMaxRedirections:ie,kMaxRequests:W,kCounter:se,kClose:K,kDestroy:ce,kDispatch:q,kInterceptors:le,kLocalAddress:J,kMaxResponseSize:ue,kOnError:de,kHTTPContext:Y,kMaxConcurrentStreams:fe,kResume:pe}=w(),me=ae(),he=oe(),ge=!1,_e=Symbol(`kClosedResolve`),ve=()=>{};function ye(e){return e[te]??e[Y]?.defaultPipelining??1}var X=class extends c{constructor(e,{interceptors:t,maxHeaderSize:n,headersTimeout:o,socketTimeout:s,requestTimeout:c,connectTimeout:u,bodyTimeout:d,idleTimeout:h,keepAlive:g,keepAliveTimeout:_,maxKeepAliveTimeout:v,keepAliveMaxTimeout:b,keepAliveTimeoutThreshold:x,socketPath:S,pipelining:w,tls:T,strictContentLength:E,maxCachedSessions:D,maxRedirections:O,connect:k,maxRequestsPerClient:A,localAddress:M,maxResponseSize:P,autoSelectFamily:ee,autoSelectFamilyAttemptTimeout:ae,maxConcurrentStreams:oe,allowH2:G,webSocket:se,eventSource:K}={}){if(super({webSocket:se,eventSource:K}),g!==void 0)throw new l(`unsupported keepAlive, use pipelining=0 instead`);if(s!==void 0)throw new l(`unsupported socketTimeout, use headersTimeout & bodyTimeout instead`);if(c!==void 0)throw new l(`unsupported requestTimeout, use headersTimeout & bodyTimeout instead`);if(h!==void 0)throw new l(`unsupported idleTimeout, use keepAliveTimeout instead`);if(v!==void 0)throw new l(`unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead`);if(n!=null&&!Number.isFinite(n))throw new l(`invalid maxHeaderSize`);if(S!=null&&typeof S!=`string`)throw new l(`invalid socketPath`);if(u!=null&&(!Number.isFinite(u)||u<0))throw new l(`invalid connectTimeout`);if(_!=null&&(!Number.isFinite(_)||_<=0))throw new l(`invalid keepAliveTimeout`);if(b!=null&&(!Number.isFinite(b)||b<=0))throw new l(`invalid keepAliveMaxTimeout`);if(x!=null&&!Number.isFinite(x))throw new l(`invalid keepAliveTimeoutThreshold`);if(o!=null&&(!Number.isInteger(o)||o<0))throw new l(`headersTimeout must be a positive integer or zero`);if(d!=null&&(!Number.isInteger(d)||d<0))throw new l(`bodyTimeout must be a positive integer or zero`);if(k!=null&&typeof k!=`function`&&typeof k!=`object`)throw new l(`connect must be a function or an object`);if(O!=null&&(!Number.isInteger(O)||O<0))throw new l(`maxRedirections must be a positive number`);if(A!=null&&(!Number.isInteger(A)||A<0))throw new l(`maxRequestsPerClient must be a positive number`);if(M!=null&&(typeof M!=`string`||r.isIP(M)===0))throw new l(`localAddress must be valid string IP address`);if(P!=null&&(!Number.isInteger(P)||P<-1))throw new l(`maxResponseSize must be a positive number`);if(ae!=null&&(!Number.isInteger(ae)||ae<-1))throw new l(`autoSelectFamilyAttemptTimeout must be a positive number`);if(G!=null&&typeof G!=`boolean`)throw new l(`allowH2 must be a valid boolean value`);if(oe!=null&&(typeof oe!=`number`||oe<1))throw new l(`maxConcurrentStreams must be a positive integer, greater than 0`);typeof k!=`function`&&(k=f({...T,maxCachedSessions:D,allowH2:G,socketPath:S,timeout:u,...ee?{autoSelectFamily:ee,autoSelectFamilyAttemptTimeout:ae}:void 0,...k})),t?.Client&&Array.isArray(t.Client)?(this[le]=t.Client,ge||(ge=!0,process.emitWarning(`Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.`,{code:`UNDICI-CLIENT-INTERCEPTOR-DEPRECATED`}))):this[le]=[be({maxRedirections:O})],this[p]=a.parseOrigin(e),this[U]=k,this[te]=w??1,this[z]=n||i.maxHeaderSize,this[N]=_??4e3,this[B]=b??6e5,this[V]=x??2e3,this[R]=this[N],this[m]=null,this[J]=M??null,this[y]=0,this[j]=0,this[F]=`host: ${this[p].hostname}${this[p].port?`:${this[p].port}`:``}\r\n`,this[ne]=d??3e5,this[H]=o??3e5,this[re]=E??!0,this[ie]=O,this[W]=A,this[_e]=null,this[ue]=P>-1?P:-1,this[fe]=oe??100,this[Y]=null,this[C]=[],this[L]=0,this[I]=0,this[pe]=e=>Ce(this,e),this[de]=e=>xe(this,e)}get pipelining(){return this[te]}set pipelining(e){this[te]=e,this[pe](!0)}get[x](){return this[C].length-this[I]}get[b](){return this[I]-this[L]}get[S](){return this[C].length-this[L]}get[E](){return!!this[Y]&&!this[D]&&!this[Y].destroyed}get[_](){return!!(this[Y]?.busy(null)||this[S]>=(ye(this)||1)||this[x]>0)} +!S||N===0?K(k,w,null,e,t,e[b],N,A):a.isBuffer(S)?K(k,w,S,e,t,e[b],N,A):a.isBlobLike(S)?typeof S.stream==`function`?J(k,w,S.stream(),e,t,e[b],N,A):se(k,w,S,e,t,e[b],N,A):a.isStream(S)?q(k,e[b],A,w,S,e,t,N):a.isIterable(S)?J(k,w,S,e,t,e[b],N,A):n(!1)}}function K(e,t,r,i,o,s,c,l){try{r!=null&&a.isBuffer(r)&&(n(c===r.byteLength,`buffer body must have content length`),t.cork(),t.write(r),t.uncork(),t.end(),o.onBodySent(r)),l||(s[d]=!0),o.onRequestSent(),i[D]()}catch(t){e(t)}}function q(e,t,r,o,s,c,l,u){n(u!==0||c[p]===0,`stream body cannot be pipelined`);let f=i(s,o,n=>{n?(a.destroy(f,n),e(n)):(a.removeAllListeners(f),l.onRequestSent(),r||(t[d]=!0),c[D]())});a.addListener(f,`data`,m);function m(e){l.onBodySent(e)}}async function se(e,t,r,i,a,s,c,l){n(c===r.size,`blob body must have content length`);try{if(c!=null&&c!==r.size)throw new o;let e=Buffer.from(await r.arrayBuffer());t.cork(),t.write(e),t.uncork(),t.end(),a.onBodySent(e),a.onRequestSent(),l||(s[d]=!0),i[D]()}catch(t){e(t)}}async function J(e,t,r,i,a,o,s,c){n(s!==0||i[p]===0,`iterator body cannot be pipelined`);let l=null;function u(){if(l){let e=l;l=null,e()}}let f=()=>new Promise((e,t)=>{n(l===null),o[y]?t(o[y]):l=e});t.on(`close`,u).on(`drain`,u);try{for await(let e of r){if(o[y])throw o[y];let n=t.write(e);a.onBodySent(e),n||await f()}t.end(),a.onRequestSent(),c||(o[d]=!0),i[D]()}catch(t){e(t)}finally{t.off(`close`,u).off(`drain`,u)}}t.exports=H})),W=/* @__PURE__ */ m(((e,t)=>{let n=O(),{kBodyUsed:r}=w(),i=h(`node:assert`),{InvalidArgumentError:a}=T(),o=h(`node:events`),s=[300,301,302,303,307,308],c=Symbol(`body`);var l=class{constructor(e){this[c]=e,this[r]=!1}async*[Symbol.asyncIterator](){i(!this[r],`disturbed`),this[r]=!0,yield*this[c]}},u=class{constructor(e,t,s,c){if(t!=null&&(!Number.isInteger(t)||t<0))throw new a(`maxRedirections must be a positive number`);n.validateHandler(c,s.method,s.upgrade),this.dispatch=e,this.location=null,this.abort=null,this.opts={...s,maxRedirections:0},this.maxRedirections=t,this.handler=c,this.history=[],this.redirectionLimitReached=!1,n.isStream(this.opts.body)?(n.bodyLength(this.opts.body)===0&&this.opts.body.on(`data`,function(){i(!1)}),typeof this.opts.body.readableDidRead!=`boolean`&&(this.opts.body[r]=!1,o.prototype.on.call(this.opts.body,`data`,function(){this[r]=!0}))):(this.opts.body&&typeof this.opts.body.pipeTo==`function`||this.opts.body&&typeof this.opts.body!=`string`&&!ArrayBuffer.isView(this.opts.body)&&n.isIterable(this.opts.body))&&(this.opts.body=new l(this.opts.body))}onConnect(e){this.abort=e,this.handler.onConnect(e,{history:this.history})}onUpgrade(e,t,n){this.handler.onUpgrade(e,t,n)}onError(e){this.handler.onError(e)}onHeaders(e,t,r,i){if(this.location=this.history.length>=this.maxRedirections||n.isDisturbed(this.opts.body)?null:d(e,t),this.opts.throwOnMaxRedirect&&this.history.length>=this.maxRedirections){this.request&&this.request.abort(/* @__PURE__ */ Error(`max redirects`)),this.redirectionLimitReached=!0,this.abort(/* @__PURE__ */ Error(`max redirects`));return}if(this.opts.origin&&this.history.push(new URL(this.opts.path,this.opts.origin)),!this.location)return this.handler.onHeaders(e,t,r,i);let{origin:a,pathname:o,search:s}=n.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),c=s?`${o}${s}`:o;this.opts.headers=p(this.opts.headers,e===303,this.opts.origin!==a),this.opts.path=c,this.opts.origin=a,this.opts.maxRedirections=0,this.opts.query=null,e===303&&this.opts.method!==`HEAD`&&(this.opts.method=`GET`,this.opts.body=null)}onData(e){if(!this.location)return this.handler.onData(e)}onComplete(e){this.location?(this.location=null,this.abort=null,this.dispatch(this.opts,this)):this.handler.onComplete(e)}onBodySent(e){this.handler.onBodySent&&this.handler.onBodySent(e)}};function d(e,t){if(s.indexOf(e)===-1)return null;for(let e=0;e{let n=W();function r({maxRedirections:e}){return t=>function(r,i){let{maxRedirections:a=e}=r;if(!a)return t(r,i);let o=new n(t,a,r,i);return r={...r,maxRedirections:0},t(r,o)}}t.exports=r})),K=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),r=h(`node:net`),i=h(`node:http`),a=O(),{channels:o}=k(),s=A(),c=M(),{InvalidArgumentError:l,InformationalError:u,ClientDestroyedError:d}=T(),f=P(),{kUrl:p,kServerName:m,kClient:g,kBusy:_,kConnect:v,kResuming:y,kRunning:b,kPending:x,kSize:S,kQueue:C,kConnected:E,kConnecting:D,kNeedDrain:j,kKeepAliveDefaultTimeout:N,kHostHeader:F,kPendingIdx:I,kRunningIdx:L,kError:ee,kPipelining:te,kKeepAliveTimeoutValue:R,kMaxHeadersSize:z,kKeepAliveMaxTimeout:B,kKeepAliveTimeoutThreshold:V,kHeadersTimeout:H,kBodyTimeout:ne,kStrictContentLength:re,kConnector:U,kMaxRedirections:ie,kMaxRequests:W,kCounter:K,kClose:q,kDestroy:se,kDispatch:J,kInterceptors:ce,kLocalAddress:Y,kMaxResponseSize:le,kOnError:ue,kHTTPContext:X,kMaxConcurrentStreams:de,kResume:fe}=w(),pe=ae(),me=oe(),he=!1,ge=Symbol(`kClosedResolve`),_e=()=>{};function ve(e){return e[te]??e[X]?.defaultPipelining??1}var Z=class extends c{constructor(e,{interceptors:t,maxHeaderSize:n,headersTimeout:o,socketTimeout:s,requestTimeout:c,connectTimeout:u,bodyTimeout:d,idleTimeout:h,keepAlive:g,keepAliveTimeout:_,maxKeepAliveTimeout:v,keepAliveMaxTimeout:b,keepAliveTimeoutThreshold:x,socketPath:S,pipelining:w,tls:T,strictContentLength:E,maxCachedSessions:D,maxRedirections:O,connect:k,maxRequestsPerClient:A,localAddress:M,maxResponseSize:P,autoSelectFamily:ee,autoSelectFamilyAttemptTimeout:ae,maxConcurrentStreams:oe,allowH2:G,webSocket:K,eventSource:q}={}){if(super({webSocket:K,eventSource:q}),g!==void 0)throw new l(`unsupported keepAlive, use pipelining=0 instead`);if(s!==void 0)throw new l(`unsupported socketTimeout, use headersTimeout & bodyTimeout instead`);if(c!==void 0)throw new l(`unsupported requestTimeout, use headersTimeout & bodyTimeout instead`);if(h!==void 0)throw new l(`unsupported idleTimeout, use keepAliveTimeout instead`);if(v!==void 0)throw new l(`unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead`);if(n!=null&&!Number.isFinite(n))throw new l(`invalid maxHeaderSize`);if(S!=null&&typeof S!=`string`)throw new l(`invalid socketPath`);if(u!=null&&(!Number.isFinite(u)||u<0))throw new l(`invalid connectTimeout`);if(_!=null&&(!Number.isFinite(_)||_<=0))throw new l(`invalid keepAliveTimeout`);if(b!=null&&(!Number.isFinite(b)||b<=0))throw new l(`invalid keepAliveMaxTimeout`);if(x!=null&&!Number.isFinite(x))throw new l(`invalid keepAliveTimeoutThreshold`);if(o!=null&&(!Number.isInteger(o)||o<0))throw new l(`headersTimeout must be a positive integer or zero`);if(d!=null&&(!Number.isInteger(d)||d<0))throw new l(`bodyTimeout must be a positive integer or zero`);if(k!=null&&typeof k!=`function`&&typeof k!=`object`)throw new l(`connect must be a function or an object`);if(O!=null&&(!Number.isInteger(O)||O<0))throw new l(`maxRedirections must be a positive number`);if(A!=null&&(!Number.isInteger(A)||A<0))throw new l(`maxRequestsPerClient must be a positive number`);if(M!=null&&(typeof M!=`string`||r.isIP(M)===0))throw new l(`localAddress must be valid string IP address`);if(P!=null&&(!Number.isInteger(P)||P<-1))throw new l(`maxResponseSize must be a positive number`);if(ae!=null&&(!Number.isInteger(ae)||ae<-1))throw new l(`autoSelectFamilyAttemptTimeout must be a positive number`);if(G!=null&&typeof G!=`boolean`)throw new l(`allowH2 must be a valid boolean value`);if(oe!=null&&(typeof oe!=`number`||oe<1))throw new l(`maxConcurrentStreams must be a positive integer, greater than 0`);typeof k!=`function`&&(k=f({...T,maxCachedSessions:D,allowH2:G,socketPath:S,timeout:u,...ee?{autoSelectFamily:ee,autoSelectFamilyAttemptTimeout:ae}:void 0,...k})),t?.Client&&Array.isArray(t.Client)?(this[ce]=t.Client,he||(he=!0,process.emitWarning(`Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.`,{code:`UNDICI-CLIENT-INTERCEPTOR-DEPRECATED`}))):this[ce]=[ye({maxRedirections:O})],this[p]=a.parseOrigin(e),this[U]=k,this[te]=w??1,this[z]=n||i.maxHeaderSize,this[N]=_??4e3,this[B]=b??6e5,this[V]=x??2e3,this[R]=this[N],this[m]=null,this[Y]=M??null,this[y]=0,this[j]=0,this[F]=`host: ${this[p].hostname}${this[p].port?`:${this[p].port}`:``}\r\n`,this[ne]=d??3e5,this[H]=o??3e5,this[re]=E??!0,this[ie]=O,this[W]=A,this[ge]=null,this[le]=P>-1?P:-1,this[de]=oe??100,this[X]=null,this[C]=[],this[L]=0,this[I]=0,this[fe]=e=>Se(this,e),this[ue]=e=>be(this,e)}get pipelining(){return this[te]}set pipelining(e){this[te]=e,this[fe](!0)}get[x](){return this[C].length-this[I]}get[b](){return this[I]-this[L]}get[S](){return this[C].length-this[L]}get[E](){return!!this[X]&&!this[D]&&!this[X].destroyed}get[_](){return!!(this[X]?.busy(null)||this[S]>=(ve(this)||1)||this[x]>0)} /* istanbul ignore: only used for test */ -[v](e){Z(this),this.once(`connect`,e)}[q](e,t){let n=e.origin||this[p].origin,r=new s(n,e,t);return this[C].push(r),this[y]||(a.bodyLength(r.body)==null&&a.isIterable(r.body)?(this[y]=1,queueMicrotask(()=>Ce(this))):this[pe](!0)),this[y]&&this[j]!==2&&this[_]&&(this[j]=2),this[j]<2}async[K](){return new Promise(e=>{this[S]?this[_e]=e:e(null)})}async[ce](e){return new Promise(t=>{let n=this[C].splice(this[I]);for(let t=0;t{this[_e]&&(this[_e](),this[_e]=null),t(null)};this[Y]?(this[Y].destroy(e,r),this[Y]=null):queueMicrotask(r),this[pe]()})}};let be=G();function xe(e,t){if(e[b]===0&&t.code!==`UND_ERR_INFO`&&t.code!==`UND_ERR_SOCKET`){n(e[I]===e[L]);let r=e[C].splice(e[L]);for(let n=0;n{e[U]({host:t,hostname:i,protocol:s,port:c,servername:e[m],localAddress:e[J]},(e,t)=>{e?r(e):n(t)})});if(e.destroyed){a.destroy(r.on(`error`,ve),new d);return}n(r);try{e[Y]=r.alpnProtocol===`h2`?await he(e,r):await me(e,r)}catch(e){throw r.destroy().on(`error`,ve),e}e[D]=!1,r[se]=0,r[W]=e[W],r[g]=e,r[ee]=null,o.connected.hasSubscribers&&o.connected.publish({connectParams:{host:t,hostname:i,protocol:s,port:c,version:e[Y]?.version,servername:e[m],localAddress:e[J]},connector:e[U],socket:r}),e.emit(`connect`,e[p],[e])}catch(r){if(e.destroyed)return;if(e[D]=!1,o.connectError.hasSubscribers&&o.connectError.publish({connectParams:{host:t,hostname:i,protocol:s,port:c,version:e[Y]?.version,servername:e[m],localAddress:e[J]},connector:e[U],error:r}),r.code===`ERR_TLS_CERT_ALTNAME_INVALID`)for(n(e[b]===0);e[x]>0&&e[C][e[I]].servername===e[m];){let t=e[C][e[I]++];a.errorRequest(e,t,r)}else xe(e,r);e.emit(`connectionError`,e[p],[e],r)}e[pe]()}function Se(e){e[j]=0,e.emit(`drain`,e[p],[e])}function Ce(e,t){e[y]!==2&&(e[y]=2,we(e,t),e[y]=0,e[L]>256&&(e[C].splice(0,e[L]),e[I]-=e[L],e[L]=0))}function we(e,t){for(;;){if(e.destroyed){n(e[x]===0);return}if(e[_e]&&!e[S]){e[_e](),e[_e]=null;return}if(e[Y]&&e[Y].resume(),e[_])e[j]=2;else if(e[j]===2){t?(e[j]=1,queueMicrotask(()=>Se(e))):Se(e);continue}if(e[x]===0||e[b]>=(ye(e)||1))return;let r=e[C][e[I]];if(e[p].protocol===`https:`&&e[m]!==r.servername){if(e[b]>0)return;e[m]=r.servername,e[Y]?.destroy(new u(`servername changed`),()=>{e[Y]=null,Ce(e)})}if(e[D])return;if(!e[Y]){Z(e);return}if(e[Y].destroyed||e[Y].busy(r))return;!r.aborted&&e[Y].write(r)?e[I]++:e[C].splice(e[I],1)}}t.exports=X})),K=/* @__PURE__ */ m(((e,t)=>{let n=2047;var r=class{constructor(){this.bottom=0,this.top=0,this.list=Array(2048),this.next=null}isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&n)===this.bottom}push(e){this.list[this.top]=e,this.top=this.top+1&n}shift(){let e=this.list[this.bottom];return e===void 0?null:(this.list[this.bottom]=void 0,this.bottom=this.bottom+1&n,e)}};t.exports=class{constructor(){this.head=this.tail=new r}isEmpty(){return this.head.isEmpty()}push(e){this.head.isFull()&&(this.head=this.head.next=new r),this.head.push(e)}shift(){let e=this.tail,t=e.shift();return e.isEmpty()&&e.next!==null&&(this.tail=e.next),t}}})),ce=/* @__PURE__ */ m(((e,t)=>{let{kFree:n,kConnected:r,kPending:i,kQueued:a,kRunning:o,kSize:s}=w(),c=Symbol(`pool`);t.exports=class{constructor(e){this[c]=e}get connected(){return this[c][r]}get free(){return this[c][n]}get pending(){return this[c][i]}get queued(){return this[c][a]}get running(){return this[c][o]}get size(){return this[c][s]}}})),q=/* @__PURE__ */ m(((e,t)=>{let n=M(),r=K(),{kConnected:i,kSize:a,kRunning:o,kPending:s,kQueued:c,kBusy:l,kFree:u,kUrl:d,kClose:f,kDestroy:p,kDispatch:m}=w(),h=ce(),g=Symbol(`clients`),_=Symbol(`needDrain`),v=Symbol(`queue`),y=Symbol(`closed resolve`),b=Symbol(`onDrain`),x=Symbol(`onConnect`),S=Symbol(`onDisconnect`),C=Symbol(`onConnectionError`),T=Symbol(`get dispatcher`),E=Symbol(`add client`),D=Symbol(`remove client`),O=Symbol(`stats`);t.exports={PoolBase:class extends n{constructor(e){super(e),this[v]=new r,this[g]=[],this[c]=0;let t=this;this[b]=function(e,n){let r=t[v],i=!1;for(;!i;){let e=r.shift();if(!e)break;t[c]--,i=!this.dispatch(e.opts,e.handler)}this[_]=i,!this[_]&&t[_]&&(t[_]=!1,t.emit(`drain`,e,[t,...n])),t[y]&&r.isEmpty()&&Promise.all(t[g].map(e=>e.close())).then(t[y])},this[x]=(e,n)=>{t.emit(`connect`,e,[t,...n])},this[S]=(e,n,r)=>{t.emit(`disconnect`,e,[t,...n],r)},this[C]=(e,n,r)=>{t.emit(`connectionError`,e,[t,...n],r)},this[O]=new h(this)}get[l](){return this[_]}get[i](){return this[g].filter(e=>e[i]).length}get[u](){return this[g].filter(e=>e[i]&&!e[_]).length}get[s](){let e=this[c];for(let{[s]:t}of this[g])e+=t;return e}get[o](){let e=0;for(let{[o]:t}of this[g])e+=t;return e}get[a](){let e=this[c];for(let{[a]:t}of this[g])e+=t;return e}get stats(){return this[O]}async[f](){this[v].isEmpty()?await Promise.all(this[g].map(e=>e.close())):await new Promise(e=>{this[y]=e})}async[p](e){for(;;){let t=this[v].shift();if(!t)break;t.handler.onError(e)}await Promise.all(this[g].map(t=>t.destroy(e)))}[m](e,t){let n=this[T]();return n?n.dispatch(e,t)||(n[_]=!0,this[_]=!this[T]()):(this[_]=!0,this[v].push({opts:e,handler:t}),this[c]++),!this[_]}[E](e){return e.on(`drain`,this[b]).on(`connect`,this[x]).on(`disconnect`,this[S]).on(`connectionError`,this[C]),this[g].push(e),this[_]&&queueMicrotask(()=>{this[_]&&this[b](e[d],[this,e])}),this}[D](e){e.close(()=>{let t=this[g].indexOf(e);t!==-1&&this[g].splice(t,1)}),this[_]=this[g].some(e=>!e[_]&&e.closed!==!0&&e.destroyed!==!0)}},kClients:g,kNeedDrain:_,kAddClient:E,kRemoveClient:D,kGetDispatcher:T}})),le=/* @__PURE__ */ m(((e,t)=>{let{PoolBase:n,kClients:r,kNeedDrain:i,kAddClient:a,kGetDispatcher:o}=q(),s=se(),{InvalidArgumentError:c}=T(),l=O(),{kUrl:u,kInterceptors:d}=w(),f=P(),p=Symbol(`options`),m=Symbol(`connections`),h=Symbol(`factory`);function g(e,t){return new s(e,t)}t.exports=class extends n{constructor(e,{connections:t,factory:n=g,connect:i,connectTimeout:a,tls:o,maxCachedSessions:s,socketPath:_,autoSelectFamily:v,autoSelectFamilyAttemptTimeout:y,allowH2:b,...x}={}){if(t!=null&&(!Number.isFinite(t)||t<0))throw new c(`invalid connections`);if(typeof n!=`function`)throw new c(`factory must be a function.`);if(i!=null&&typeof i!=`function`&&typeof i!=`object`)throw new c(`connect must be a function or an object`);typeof i!=`function`&&(i=f({...o,maxCachedSessions:s,allowH2:b,socketPath:_,timeout:a,...v?{autoSelectFamily:v,autoSelectFamilyAttemptTimeout:y}:void 0,...i})),super(x),this[d]=x.interceptors?.Pool&&Array.isArray(x.interceptors.Pool)?x.interceptors.Pool:[],this[m]=t||null,this[u]=l.parseOrigin(e),this[p]={...l.deepClone(x),connect:i,allowH2:b},this[p].interceptors=x.interceptors?{...x.interceptors}:void 0,this[h]=n,this.on(`connectionError`,(e,t,n)=>{for(let e of t){let t=this[r].indexOf(e);t!==-1&&this[r].splice(t,1)}})}[o](){for(let e of this[r])if(!e[i])return e;if(!this[m]||this[r].length{let{BalancedPoolMissingUpstreamError:n,InvalidArgumentError:r}=T(),{PoolBase:i,kClients:a,kNeedDrain:o,kAddClient:s,kRemoveClient:c,kGetDispatcher:l}=q(),u=le(),{kUrl:d,kInterceptors:f}=w(),{parseOrigin:p}=O(),m=Symbol(`factory`),h=Symbol(`options`),g=Symbol(`kGreatestCommonDivisor`),_=Symbol(`kCurrentWeight`),v=Symbol(`kIndex`),y=Symbol(`kWeight`),b=Symbol(`kMaxWeightPerServer`),x=Symbol(`kErrorPenalty`);function S(e,t){if(e===0)return t;for(;t!==0;){let n=t;t=e%t,e=n}return e}function C(e,t){return new u(e,t)}t.exports=class extends i{constructor(e=[],{factory:t=C,...n}={}){if(super(),this[h]=n,this[v]=-1,this[_]=0,this[b]=this[h].maxWeightPerServer||100,this[x]=this[h].errorPenalty||15,Array.isArray(e)||(e=[e]),typeof t!=`function`)throw new r(`factory must be a function.`);this[f]=n.interceptors?.BalancedPool&&Array.isArray(n.interceptors.BalancedPool)?n.interceptors.BalancedPool:[],this[m]=t;for(let t of e)this.addUpstream(t);this._updateBalancedPoolStats()}addUpstream(e){let t=p(e).origin;if(this[a].find(e=>e[d].origin===t&&e.closed!==!0&&e.destroyed!==!0))return this;let n=this[m](t,Object.assign({},this[h]));this[s](n),n.on(`connect`,()=>{n[y]=Math.min(this[b],n[y]+this[x])}),n.on(`connectionError`,()=>{n[y]=Math.max(1,n[y]-this[x]),this._updateBalancedPoolStats()}),n.on(`disconnect`,(...e)=>{let t=e[2];t&&t.code===`UND_ERR_SOCKET`&&(n[y]=Math.max(1,n[y]-this[x]),this._updateBalancedPoolStats())});for(let e of this[a])e[y]=this[b];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){let e=0;for(let t=0;te[d].origin===t&&e.closed!==!0&&e.destroyed!==!0);return n&&this[c](n),this}get upstreams(){return this[a].filter(e=>e.closed!==!0&&e.destroyed!==!0).map(e=>e[d].origin)}[l](){if(this[a].length===0)throw new n;if(!this[a].find(e=>!e[o]&&e.closed!==!0&&e.destroyed!==!0)||this[a].map(e=>e[o]).reduce((e,t)=>e&&t,!0))return;let e=0,t=this[a].findIndex(e=>!e[o]);for(;e++this[a][t][y]&&!e[o]&&(t=this[v]),this[v]===0&&(this[_]=this[_]-this[g],this[_]<=0&&(this[_]=this[b])),e[y]>=this[_]&&!e[o])return e}return this[_]=this[a][t][y],this[v]=t,this[a][t]}}})),ue=/* @__PURE__ */ m(((e,t)=>{let{InvalidArgumentError:n}=T(),{kClients:r,kRunning:i,kClose:a,kDestroy:o,kDispatch:s,kInterceptors:c}=w(),l=M(),u=le(),d=se(),f=O(),p=G(),m=Symbol(`onConnect`),h=Symbol(`onDisconnect`),g=Symbol(`onConnectionError`),_=Symbol(`maxRedirections`),v=Symbol(`onDrain`),y=Symbol(`factory`),b=Symbol(`options`);function x(e,t){return t&&t.connections===1?new d(e,t):new u(e,t)}t.exports=class extends l{constructor({factory:e=x,maxRedirections:t=0,connect:i,tls:a,...o}={}){if(typeof e!=`function`)throw new n(`factory must be a function.`);if(i!=null&&typeof i!=`function`&&typeof i!=`object`)throw new n(`connect must be a function or an object`);if(!Number.isInteger(t)||t<0)throw new n(`maxRedirections must be a positive number`);super(o),i&&typeof i!=`function`&&(i={...i}),a&&typeof a!=`function`&&(a={...a}),this[c]=o.interceptors?.Agent&&Array.isArray(o.interceptors.Agent)?o.interceptors.Agent:[p({maxRedirections:t})],this[b]={...f.deepClone(o),connect:i,tls:a},this[b].interceptors=o.interceptors?{...o.interceptors}:void 0,this[_]=t,this[y]=e,this[r]=/* @__PURE__ */ new Map,this[v]=(e,t)=>{this.emit(`drain`,e,[this,...t])},this[m]=(e,t)=>{this.emit(`connect`,e,[this,...t])},this[h]=(e,t,n)=>{this.emit(`disconnect`,e,[this,...t],n)},this[g]=(e,t,n)=>{this.emit(`connectionError`,e,[this,...t],n)}}get[i](){let e=0;for(let t of this[r].values())e+=t[i];return e}[s](e,t){let i;if(e.origin&&(typeof e.origin==`string`||e.origin instanceof URL))i=String(e.origin);else throw new n(`opts.origin must be a non-empty string or URL.`);let a=this[r].get(i);return a||(a=this[y](e.origin,this[b]).on(`drain`,this[v]).on(`connect`,this[m]).on(`disconnect`,this[h]).on(`connectionError`,this[g]),this[r].set(i,a)),a.dispatch(e,t)}async[a](){let e=[];for(let t of this[r].values())e.push(t.close());this[r].clear(),await Promise.all(e)}async[o](e){let t=[];for(let n of this[r].values())t.push(n.destroy(e));this[r].clear(),await Promise.all(t)}}})),de=/* @__PURE__ */ m(((e,t)=>{let{kProxy:n,kClose:r,kDestroy:i,kDispatch:a,kInterceptors:o}=w(),{URL:s}=h(`node:url`),c=ue(),l=le(),u=M(),{InvalidArgumentError:d,RequestAbortedError:f,SecureProxyConnectionError:p}=T(),m=P(),g=se(),_=Symbol(`proxy agent`),v=Symbol(`proxy client`),y=Symbol(`proxy headers`),b=Symbol(`request tls settings`),x=Symbol(`proxy tls settings`),S=Symbol(`connect endpoint function`),C=Symbol(`tunnel proxy`);function E(e){return e===`https:`?443:80}function D(e,t){return new l(e,t)}let O=()=>{};function k(e,t){return t.connections===1?new g(e,t):new l(e,t)}var A=class extends u{#e;constructor(e,{headers:t={},connect:n,factory:r}){if(super(),!e)throw new d(`Proxy URL is mandatory`);this[y]=t,this.#e=r?r(e,{connect:n}):new g(e,{connect:n})}[a](e,t){let n=t.onHeaders;t.onHeaders=function(e,r,i){e===407?typeof t.onError==`function`&&t.onError(new d(`Proxy Authentication Required (407)`)):n&&n.call(this,e,r,i)};let{origin:r,path:i=`/`,headers:o={}}=e;if(e.path=r+i,!(`host`in o)&&!(`Host`in o)){let{host:e}=new s(r);o.host=e}return e.headers={...this[y],...o},this.#e[a](e,t)}async[r](){return this.#e.close()}async[i](e){return this.#e.destroy(e)}},j=class extends u{constructor(e){if(super(),!e||typeof e==`object`&&!(e instanceof s)&&!e.uri)throw new d(`Proxy uri is mandatory`);let{clientFactory:t=D}=e;if(typeof t!=`function`)throw new d(`Proxy opts.clientFactory must be a function.`);let{proxyTunnel:r=!0}=e,i=this.#e(e),{href:a,origin:l,port:u,protocol:h,username:g,password:w,hostname:T}=i;if(this[n]={uri:a,protocol:h},this[o]=e.interceptors?.ProxyAgent&&Array.isArray(e.interceptors.ProxyAgent)?e.interceptors.ProxyAgent:[],this[b]=e.requestTls,this[x]=e.proxyTls,this[y]=e.headers||{},this[C]=r,e.auth&&e.token)throw new d(`opts.auth cannot be used in combination with opts.token`);e.auth?this[y][`proxy-authorization`]=`Basic ${e.auth}`:e.token?this[y][`proxy-authorization`]=e.token:g&&w&&(this[y][`proxy-authorization`]=`Basic ${Buffer.from(`${decodeURIComponent(g)}:${decodeURIComponent(w)}`).toString(`base64`)}`);let j=m({...e.proxyTls});this[S]=m({...e.requestTls});let M=e.factory||k,N=(e,t)=>{let{protocol:r}=new s(e);return!this[C]&&r===`http:`&&this[n].protocol===`http:`?new A(this[n].uri,{headers:this[y],connect:j,factory:M}):M(e,t)};this[v]=t(i,{connect:j}),this[_]=new c({...e,factory:N,connect:async(e,t)=>{let n=e.host;e.port||(n+=`:${E(e.protocol)}`);try{let{socket:r,statusCode:i}=await this[v].connect({origin:l,port:u,path:n,signal:e.signal,headers:{...this[y],host:e.host},servername:this[x]?.servername||T});if(i!==200&&(r.on(`error`,O).destroy(),t(new f(`Proxy response (${i}) !== 200 when HTTP Tunneling`))),e.protocol!==`https:`){t(null,r);return}let a;a=this[b]?this[b].servername:e.servername,this[S]({...e,servername:a,httpSocket:r},t)}catch(e){e.code===`ERR_TLS_CERT_ALTNAME_INVALID`?t(new p(e)):t(e)}}})}dispatch(e,t){let n=N(e.headers);if(F(n),n&&!(`host`in n)&&!(`Host`in n)){let{host:t}=new s(e.origin);n.host=t}return this[_].dispatch({...e,headers:n},t)}#e(e){return typeof e==`string`?new s(e):e instanceof s?e:new s(e.uri)}async[r](){await this[_].close(),await this[v].close()}async[i](){await this[_].destroy(),await this[v].destroy()}};function N(e){if(Array.isArray(e)){let t={};for(let n=0;ne.toLowerCase()===`proxy-authorization`))throw new d(`Proxy-Authorization should be sent in ProxyAgent constructor`)}t.exports=j})),Y=/* @__PURE__ */ m(((e,t)=>{let n=M(),{kClose:r,kDestroy:i,kClosed:a,kDestroyed:o,kDispatch:s,kNoProxyAgent:c,kHttpProxyAgent:l,kHttpsProxyAgent:u}=w(),d=de(),f=ue(),p={"http:":80,"https:":443},m=!1;t.exports=class extends n{#e=null;#t=null;#n=null;constructor(e={}){super(),this.#n=e,m||(m=!0,process.emitWarning(`EnvHttpProxyAgent is experimental, expect them to change at any time.`,{code:`UNDICI-EHPA`}));let{httpProxy:t,httpsProxy:n,noProxy:r,...i}=e;this[c]=new f(i);let a=t??process.env.http_proxy??process.env.HTTP_PROXY;a?this[l]=new d({...i,uri:a}):this[l]=this[c];let o=n??process.env.https_proxy??process.env.HTTPS_PROXY;o?this[u]=new d({...i,uri:o}):this[u]=this[l],this.#a()}[s](e,t){let n=new URL(e.origin);return this.#r(n).dispatch(e,t)}async[r](){await this[c].close(),this[l][a]||await this[l].close(),this[u][a]||await this[u].close()}async[i](e){await this[c].destroy(e),this[l][o]||await this[l].destroy(e),this[u][o]||await this[u].destroy(e)}#r(e){let{protocol:t,host:n,port:r}=e;return n=n.replace(/:\d*$/,``).toLowerCase(),r=Number.parseInt(r,10)||p[t]||0,this.#i(n,r)?t===`https:`?this[u]:this[l]:this[c]}#i(e,t){if(this.#o&&this.#a(),this.#t.length===0)return!0;if(this.#e===`*`)return!1;for(let n=0;n{let n=h(`node:assert`),{kRetryHandlerDefaultRetry:r}=w(),{RequestRetryError:i}=T(),{isDisturbed:a,parseHeaders:o,parseRangeHeader:s,wrapRequestBody:c}=O();function l(e){let t=Date.now();return new Date(e).getTime()-t}function u(e,t,n,r){let a=e[`content-length`];if(a==null||!Number.isFinite(t.start)||!Number.isFinite(t.end))return null;let o=Number(a),s=t.end-t.start+1;return!Number.isFinite(o)||o!==s?new i(`Content-Length mismatch`,n,{headers:e,data:{count:r}}):null}t.exports=class e{constructor(t,n){let{retryOptions:i,...a}=t,{retry:o,maxRetries:s,maxTimeout:l,minTimeout:u,timeoutFactor:d,methods:f,errorCodes:p,retryAfter:m,statusCodes:h}=i??{};this.dispatch=n.dispatch,this.handler=n.handler,this.opts={...a,body:c(t.body)},this.abort=null,this.aborted=!1,this.retryOpts={retry:o??e[r],retryAfter:m??!0,maxTimeout:l??3e4,minTimeout:u??500,timeoutFactor:d??2,maxRetries:s??5,methods:f??[`GET`,`HEAD`,`OPTIONS`,`PUT`,`DELETE`,`TRACE`],statusCodes:h??[500,502,503,504,429],errorCodes:p??[`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ENETDOWN`,`ENETUNREACH`,`EHOSTDOWN`,`EHOSTUNREACH`,`EPIPE`,`UND_ERR_SOCKET`]},this.retryCount=0,this.retryCountCheckpoint=0,this.start=0,this.end=null,this.etag=null,this.resume=null,this.headersSent=!1,this.handler.onConnect(e=>{this.aborted=!0,this.abort?this.abort(e):this.reason=e})}checkpointResponseEnd(e,t){if(this.end==null&&this.opts.method!==`HEAD`){let t=e[`content-length`];this.end=t==null?null:Number(t)-1,n(this.end==null||Number.isFinite(this.end),`invalid content-length`)}this.resume=this.end==null?null:t}onRequestSent(){this.handler.onRequestSent&&this.handler.onRequestSent()}onUpgrade(e,t,n){this.handler.onUpgrade&&this.handler.onUpgrade(e,t,n)}onConnect(e){this.aborted?e(this.reason):this.abort=e}onBodySent(e){if(this.handler.onBodySent)return this.handler.onBodySent(e)}static[r](e,{state:t,opts:n},r){let{statusCode:i,code:a,headers:o}=e,{method:s,retryOptions:c}=n,{maxRetries:u,minTimeout:d,maxTimeout:f,timeoutFactor:p,statusCodes:m,errorCodes:h,methods:g}=c,{counter:_}=t;if(a&&a!==`UND_ERR_REQ_RETRY`&&!h.includes(a)||Array.isArray(g)&&!g.includes(s)||i!=null&&Array.isArray(m)&&!m.includes(i)||_>u){r(e);return}let v=o?.[`retry-after`];v&&=(v=Number(v),Number.isNaN(v)?l(v):v*1e3);let y=Math.min(v>0?v:d*p**(_-1),f);setTimeout(()=>r(null),y)}onHeaders(e,t,r,a){let c=o(t);if(this.retryCount+=1,e>=300)return!this.headersSent&&this.retryOpts.statusCodes.includes(e)===!1?(this.headersSent=!0,this.checkpointResponseEnd(c,r),this.handler.onHeaders(e,t,r,a)):(this.abort(new i(`Request failed`,e,{headers:c,data:{count:this.retryCount}})),!1);if(this.resume!=null){if(this.resume=null,e!==206&&(this.start>0||e!==200))return this.abort(new i(`server does not support the range header and the payload was partially consumed`,e,{headers:c,data:{count:this.retryCount}})),!1;let t=s(c[`content-range`]);if(!t)return this.abort(new i(`Content-Range mismatch`,e,{headers:c,data:{count:this.retryCount}})),!1;if(this.etag!=null&&this.etag!==c.etag)return this.abort(new i(`ETag mismatch`,e,{headers:c,data:{count:this.retryCount}})),!1;let n=u(c,t,e,this.retryCount);if(n!=null)return this.abort(n),!1;let{start:a,size:o,end:l=o-1}=t;return this.start!==a||this.end!=null&&this.end!==l?(this.abort(new i(`Content-Range mismatch`,e,{headers:c,data:{count:this.retryCount}})),!1):(this.resume=r,!0)}if(this.end==null){if(e===206){let i=s(c[`content-range`]);if(i==null)return this.headersSent=!0,this.handler.onHeaders(e,t,r,a);let o=u(c,i,e,this.retryCount);if(o!=null)return this.abort(o),!1;let{start:l,size:d,end:f=d-1}=i;n(l!=null&&Number.isFinite(l),`content-range mismatch`),n(f!=null&&Number.isFinite(f),`invalid content-length`),this.start=l,this.end=f}if(this.end==null){let e=c[`content-length`];this.end=e==null?null:Number(e)-1}return n(Number.isFinite(this.start)),n(this.end==null||Number.isFinite(this.end),`invalid content-length`),this.resume=r,this.headersSent=!0,this.etag=c.etag==null?null:c.etag,this.etag!=null&&this.etag.startsWith(`W/`)&&(this.etag=null),this.handler.onHeaders(e,t,r,a)}let l=new i(`Request failed`,e,{headers:c,data:{count:this.retryCount}});return this.abort(l),!1}onData(e){return this.start+=e.length,this.handler.onData(e)}onComplete(e){return this.retryCount=0,this.handler.onComplete(e)}onError(e){if(this.aborted||a(this.opts.body)||this.headersSent&&this.resume==null)return this.handler.onError(e);this.retryCount-this.retryCountCheckpoint>0?this.retryCount=this.retryCountCheckpoint+(this.retryCount-this.retryCountCheckpoint):this.retryCount+=1,this.retryOpts.retry(e,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},t.bind(this));function t(e){if(e!=null||this.aborted||a(this.opts.body))return this.handler.onError(e);if(this.start!==0){let e={range:`bytes=${this.start}-${this.end??``}`};this.etag!=null&&(e[`if-match`]=this.etag),this.opts={...this.opts,headers:{...this.opts.headers,...e}}}try{this.retryCountCheckpoint=this.retryCount,this.dispatch(this.opts,this)}catch(e){this.handler.onError(e)}}}}})),pe=/* @__PURE__ */ m(((e,t)=>{let n=j(),r=fe();t.exports=class extends n{#e=null;#t=null;constructor(e,t={}){super(t),this.#e=e,this.#t=t}dispatch(e,t){let n=new r({...e,retryOptions:this.#t},{dispatch:this.#e.dispatch.bind(this.#e),handler:t});return this.#e.dispatch(e,n)}close(){return this.#e.close()}destroy(){return this.#e.destroy()}}})),me=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),{Readable:r}=h(`node:stream`),{RequestAbortedError:i,NotSupportedError:a,InvalidArgumentError:o,AbortError:s}=T(),c=O(),{ReadableStreamFrom:l}=O(),u=Symbol(`kConsume`),d=Symbol(`kReading`),f=Symbol(`kBody`),p=Symbol(`kAbort`),m=Symbol(`kContentType`),g=Symbol(`kContentLength`),_=()=>{};var v=class extends r{constructor({resume:e,abort:t,contentType:n=``,contentLength:r,highWaterMark:i=65536}){super({autoDestroy:!0,read:e,highWaterMark:i}),this._readableState.dataEmitted=!1,this[p]=t,this[u]=null,this[f]=null,this[m]=n,this[g]=r,this[d]=!1}destroy(e){return!e&&!this._readableState.endEmitted&&(e=new i),e&&this[p](),super.destroy(e)}_destroy(e,t){this[d]?t(e):setImmediate(()=>{t(e)})}on(e,...t){return(e===`data`||e===`readable`)&&(this[d]=!0),super.on(e,...t)}addListener(e,...t){return this.on(e,...t)}off(e,...t){let n=super.off(e,...t);return(e===`data`||e===`readable`)&&(this[d]=this.listenerCount(`data`)>0||this.listenerCount(`readable`)>0),n}removeListener(e,...t){return this.off(e,...t)}push(e){return this[u]&&e!==null?(D(this[u],e),!this[d]||super.push(e)):super.push(e)}async text(){return x(this,`text`)}async json(){return x(this,`json`)}async blob(){return x(this,`blob`)}async bytes(){return x(this,`bytes`)}async arrayBuffer(){return x(this,`arrayBuffer`)}async formData(){throw new a}get bodyUsed(){return c.isDisturbed(this)}get body(){return this[f]||(this[f]=l(this),this[u]&&(this[f].getReader(),n(this[f].locked))),this[f]}async dump(e){let t=Number.isFinite(e?.limit)?e.limit:131072,n=e?.signal;if(n!=null&&(typeof n!=`object`||!(`aborted`in n)))throw new o(`signal must be an AbortSignal`);return n?.throwIfAborted(),this._readableState.closeEmitted?null:await new Promise((e,r)=>{this[g]>t&&this.destroy(new s);let i=()=>{this.destroy(n.reason??new s)};n?.addEventListener(`abort`,i),this.on(`close`,function(){n?.removeEventListener(`abort`,i),n?.aborted?r(n.reason??new s):e(null)}).on(`error`,_).on(`data`,function(e){t-=e.length,t<=0&&this.destroy()}).resume()})}};function y(e){return e[f]&&e[f].locked===!0||e[u]}function b(e){return c.isDisturbed(e)||y(e)}async function x(e,t){return n(!e[u]),new Promise((n,r)=>{if(b(e)){let t=e._readableState;t.destroyed&&t.closeEmitted===!1?e.on(`error`,e=>{r(e)}).on(`close`,()=>{r(/* @__PURE__ */ TypeError(`unusable`))}):r(t.errored??/* @__PURE__ */ TypeError(`unusable`))}else queueMicrotask(()=>{e[u]={type:t,stream:e,resolve:n,reject:r,length:0,body:[]},e.on(`error`,function(e){k(this[u],e)}).on(`close`,function(){this[u].body!==null&&k(this[u],new i)}),S(e[u])})})}function S(e){if(e.body===null)return;let{_readableState:t}=e.stream;if(t.bufferIndex){let n=t.bufferIndex,r=t.buffer.length;for(let i=n;i2&&n[0]===239&&n[1]===187&&n[2]===191?3:0;return n.utf8Slice(i,r)}function w(e,t){if(e.length===0||t===0)return/* @__PURE__ */ new Uint8Array;if(e.length===1)return new Uint8Array(e[0]);let n=new Uint8Array(Buffer.allocUnsafeSlow(t).buffer),r=0;for(let t=0;t{let n=h(`node:assert`),{ResponseStatusCodeError:r}=T(),{chunksDecode:i}=me();async function a({callback:e,body:t,contentType:a,statusCode:c,statusMessage:l,headers:u}){n(t);let d=[],f=0;try{for await(let e of t)if(d.push(e),f+=e.length,f>131072){d=[],f=0;break}}catch{d=[],f=0}let p=`Response status code ${c}${l?`: ${l}`:``}`;if(c===204||!a||!f){queueMicrotask(()=>e(new r(p,c,u)));return}let m=Error.stackTraceLimit;Error.stackTraceLimit=0;let h;try{o(a)?h=JSON.parse(i(d,f)):s(a)&&(h=i(d,f))}catch{}finally{Error.stackTraceLimit=m}queueMicrotask(()=>e(new r(p,c,u,h)))}let o=e=>e.length>15&&e[11]===`/`&&e[0]===`a`&&e[1]===`p`&&e[2]===`p`&&e[3]===`l`&&e[4]===`i`&&e[5]===`c`&&e[6]===`a`&&e[7]===`t`&&e[8]===`i`&&e[9]===`o`&&e[10]===`n`&&e[12]===`j`&&e[13]===`s`&&e[14]===`o`&&e[15]===`n`,s=e=>e.length>4&&e[4]===`/`&&e[0]===`t`&&e[1]===`e`&&e[2]===`x`&&e[3]===`t`;t.exports={getResolveErrorBodyCallback:a,isContentTypeApplicationJson:o,isContentTypeText:s}})),ge=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),{Readable:r}=me(),{InvalidArgumentError:i,RequestAbortedError:a}=T(),o=O(),{getResolveErrorBodyCallback:s}=he(),{AsyncResource:c}=h(`node:async_hooks`);var l=class extends c{constructor(e,t){if(!e||typeof e!=`object`)throw new i(`invalid opts`);let{signal:n,method:r,opaque:s,body:c,onInfo:l,responseHeaders:u,throwOnError:d,highWaterMark:f}=e;try{if(typeof t!=`function`)throw new i(`invalid callback`);if(f&&(typeof f!=`number`||f<0))throw new i(`invalid highWaterMark`);if(n&&typeof n.on!=`function`&&typeof n.addEventListener!=`function`)throw new i(`signal must be an EventEmitter or EventTarget`);if(r===`CONNECT`)throw new i(`invalid method`);if(l&&typeof l!=`function`)throw new i(`invalid onInfo callback`);super(`UNDICI_REQUEST`)}catch(e){throw o.isStream(c)&&o.destroy(c.on(`error`,o.nop),e),e}this.method=r,this.responseHeaders=u||null,this.opaque=s||null,this.callback=t,this.res=null,this.abort=null,this.body=c,this.trailers={},this.context=null,this.onInfo=l||null,this.throwOnError=d,this.highWaterMark=f,this.signal=n,this.reason=null,this.removeAbortListener=null,o.isStream(c)&&c.on(`error`,e=>{this.onError(e)}),this.signal&&(this.signal.aborted?this.reason=this.signal.reason??new a:this.removeAbortListener=o.addAbortListener(this.signal,()=>{this.reason=this.signal.reason??new a,this.res?o.destroy(this.res.on(`error`,o.nop),this.reason):this.abort&&this.abort(this.reason),this.removeAbortListener&&=(this.res?.off(`close`,this.removeAbortListener),this.removeAbortListener(),null)}))}onConnect(e,t){this.reason?e(this.reason):(n(this.callback),this.abort=e,this.context=t)}onHeaders(e,t,n,i){let{callback:a,opaque:c,abort:l,context:u,responseHeaders:d,highWaterMark:f}=this,p=d===`raw`?o.parseRawHeaders(t):o.parseHeaders(t);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:p});return}let m=d===`raw`?o.parseHeaders(t):p,h=m[`content-type`],g=m[`content-length`],_=new r({resume:n,abort:l,contentType:h,contentLength:this.method!==`HEAD`&&g?Number(g):null,highWaterMark:f});this.removeAbortListener&&_.on(`close`,this.removeAbortListener),this.callback=null,this.res=_,a!==null&&(this.throwOnError&&e>=400?this.runInAsyncScope(s,null,{callback:a,body:_,contentType:h,statusCode:e,statusMessage:i,headers:p}):this.runInAsyncScope(a,null,null,{statusCode:e,headers:p,trailers:this.trailers,opaque:c,body:_,context:u}))}onData(e){return this.res.push(e)}onComplete(e){o.parseHeaders(e,this.trailers),this.res.push(null)}onError(e){let{res:t,callback:n,body:r,opaque:i}=this;n&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(n,null,e,{opaque:i})})),t&&(this.res=null,queueMicrotask(()=>{o.destroy(t,e)})),r&&(this.body=null,o.destroy(r,e)),this.removeAbortListener&&=(t?.off(`close`,this.removeAbortListener),this.removeAbortListener(),null)}};function u(e,t){if(t===void 0)return new Promise((t,n)=>{u.call(this,e,(e,r)=>e?n(e):t(r))});try{this.dispatch(e,new l(e,t))}catch(n){if(typeof t!=`function`)throw n;let r=e?.opaque;queueMicrotask(()=>t(n,{opaque:r}))}}t.exports=u,t.exports.RequestHandler=l})),_e=/* @__PURE__ */ m(((e,t)=>{let{addAbortListener:n}=O(),{RequestAbortedError:r}=T(),i=Symbol(`kListener`),a=Symbol(`kSignal`);function o(e){e.abort?e.abort(e[a]?.reason):e.reason=e[a]?.reason??new r,c(e)}function s(e,t){e.reason=null,e[a]=null,e[i]=null,t&&(t.aborted?o(e):(e[a]=t,e[i]=()=>{o(e)},n(e[a],e[i])))}function c(e){e[a]&&(`removeEventListener`in e[a]?e[a].removeEventListener(`abort`,e[i]):e[a].removeListener(`abort`,e[i]),e[a]=null,e[i]=null)}t.exports={addSignal:s,removeSignal:c}})),ve=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),{finished:r,PassThrough:i}=h(`node:stream`),{InvalidArgumentError:a,InvalidReturnValueError:o}=T(),s=O(),{getResolveErrorBodyCallback:c}=he(),{AsyncResource:l}=h(`node:async_hooks`),{addSignal:u,removeSignal:d}=_e();var f=class extends l{constructor(e,t,n){if(!e||typeof e!=`object`)throw new a(`invalid opts`);let{signal:r,method:i,opaque:o,body:c,onInfo:l,responseHeaders:d,throwOnError:f}=e;try{if(typeof n!=`function`)throw new a(`invalid callback`);if(typeof t!=`function`)throw new a(`invalid factory`);if(r&&typeof r.on!=`function`&&typeof r.addEventListener!=`function`)throw new a(`signal must be an EventEmitter or EventTarget`);if(i===`CONNECT`)throw new a(`invalid method`);if(l&&typeof l!=`function`)throw new a(`invalid onInfo callback`);super(`UNDICI_STREAM`)}catch(e){throw s.isStream(c)&&s.destroy(c.on(`error`,s.nop),e),e}this.responseHeaders=d||null,this.opaque=o||null,this.factory=t,this.callback=n,this.res=null,this.abort=null,this.context=null,this.trailers=null,this.body=c,this.onInfo=l||null,this.throwOnError=f||!1,s.isStream(c)&&c.on(`error`,e=>{this.onError(e)}),u(this,r)}onConnect(e,t){this.reason?e(this.reason):(n(this.callback),this.abort=e,this.context=t)}onHeaders(e,t,n,a){let{factory:l,opaque:u,context:d,callback:f,responseHeaders:p}=this,m=p===`raw`?s.parseRawHeaders(t):s.parseHeaders(t);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:m});return}this.factory=null;let h;if(this.throwOnError&&e>=400){let n=(p===`raw`?s.parseHeaders(t):m)[`content-type`];h=new i,this.callback=null,this.runInAsyncScope(c,null,{callback:f,body:h,contentType:n,statusCode:e,statusMessage:a,headers:m})}else{if(l===null)return;if(h=this.runInAsyncScope(l,null,{statusCode:e,headers:m,opaque:u,context:d}),!h||typeof h.write!=`function`||typeof h.end!=`function`||typeof h.on!=`function`)throw new o(`expected Writable`);r(h,{readable:!1},e=>{let{callback:t,res:n,opaque:r,trailers:i,abort:a}=this;this.res=null,(e||!n.readable)&&s.destroy(n,e),this.callback=null,this.runInAsyncScope(t,null,e||null,{opaque:r,trailers:i}),e&&a()})}return h.on(`drain`,n),this.res=h,(h.writableNeedDrain===void 0?h._writableState?.needDrain:h.writableNeedDrain)!==!0}onData(e){let{res:t}=this;return!t||t.write(e)}onComplete(e){let{res:t}=this;d(this),t&&(this.trailers=s.parseHeaders(e),t.end())}onError(e){let{res:t,callback:n,opaque:r,body:i}=this;d(this),this.factory=null,t?(this.res=null,s.destroy(t,e)):n&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(n,null,e,{opaque:r})})),i&&(this.body=null,s.destroy(i,e))}};function p(e,t,n){if(n===void 0)return new Promise((n,r)=>{p.call(this,e,t,(e,t)=>e?r(e):n(t))});try{this.dispatch(e,new f(e,t,n))}catch(t){if(typeof n!=`function`)throw t;let r=e?.opaque;queueMicrotask(()=>n(t,{opaque:r}))}}t.exports=p})),ye=/* @__PURE__ */ m(((e,t)=>{let{Readable:n,Duplex:r,PassThrough:i}=h(`node:stream`),{InvalidArgumentError:a,InvalidReturnValueError:o,RequestAbortedError:s}=T(),c=O(),{AsyncResource:l}=h(`node:async_hooks`),{addSignal:u,removeSignal:d}=_e(),f=h(`node:assert`),p=Symbol(`resume`);var m=class extends n{constructor(){super({autoDestroy:!0}),this[p]=null}_read(){let{[p]:e}=this;e&&(this[p]=null,e())}_destroy(e,t){this._read(),t(e)}},g=class extends n{constructor(e){super({autoDestroy:!0}),this[p]=e}_read(){this[p]()}_destroy(e,t){!e&&!this._readableState.endEmitted&&(e=new s),t(e)}},_=class extends l{constructor(e,t){if(!e||typeof e!=`object`)throw new a(`invalid opts`);if(typeof t!=`function`)throw new a(`invalid handler`);let{signal:n,method:i,opaque:o,onInfo:l,responseHeaders:f}=e;if(n&&typeof n.on!=`function`&&typeof n.addEventListener!=`function`)throw new a(`signal must be an EventEmitter or EventTarget`);if(i===`CONNECT`)throw new a(`invalid method`);if(l&&typeof l!=`function`)throw new a(`invalid onInfo callback`);super(`UNDICI_PIPELINE`),this.opaque=o||null,this.responseHeaders=f||null,this.handler=t,this.abort=null,this.context=null,this.onInfo=l||null,this.req=new m().on(`error`,c.nop),this.ret=new r({readableObjectMode:e.objectMode,autoDestroy:!0,read:()=>{let{body:e}=this;e?.resume&&e.resume()},write:(e,t,n)=>{let{req:r}=this;r.push(e,t)||r._readableState.destroyed?n():r[p]=n},destroy:(e,t)=>{let{body:n,req:r,res:i,ret:a,abort:o}=this;!e&&!a._readableState.endEmitted&&(e=new s),o&&e&&o(),c.destroy(n,e),c.destroy(r,e),c.destroy(i,e),d(this),t(e)}}).on(`prefinish`,()=>{let{req:e}=this;e.push(null)}),this.res=null,u(this,n)}onConnect(e,t){let{ret:n,res:r}=this;this.reason?e(this.reason):(f(!r,`pipeline cannot be retried`),f(!n.destroyed),this.abort=e,this.context=t)}onHeaders(e,t,n){let{opaque:r,handler:i,context:a}=this;if(e<200){if(this.onInfo){let n=this.responseHeaders===`raw`?c.parseRawHeaders(t):c.parseHeaders(t);this.onInfo({statusCode:e,headers:n})}return}this.res=new g(n);let l;try{this.handler=null;let n=this.responseHeaders===`raw`?c.parseRawHeaders(t):c.parseHeaders(t);l=this.runInAsyncScope(i,null,{statusCode:e,headers:n,opaque:r,body:this.res,context:a})}catch(e){throw this.res.on(`error`,c.nop),e}if(!l||typeof l.on!=`function`)throw new o(`expected Readable`);l.on(`data`,e=>{let{ret:t,body:n}=this;!t.push(e)&&n.pause&&n.pause()}).on(`error`,e=>{let{ret:t}=this;c.destroy(t,e)}).on(`end`,()=>{let{ret:e}=this;e.push(null)}).on(`close`,()=>{let{ret:e}=this;e._readableState.ended||c.destroy(e,new s)}),this.body=l}onData(e){let{res:t}=this;return t.push(e)}onComplete(e){let{res:t}=this;t.push(null)}onError(e){let{ret:t}=this;this.handler=null,c.destroy(t,e)}};function v(e,t){try{let n=new _(e,t);return this.dispatch({...e,body:n.req},n),n.ret}catch(e){return new i().destroy(e)}}t.exports=v})),X=/* @__PURE__ */ m(((e,t)=>{let{InvalidArgumentError:n,SocketError:r}=T(),{AsyncResource:i}=h(`node:async_hooks`),a=O(),{addSignal:o,removeSignal:s}=_e(),c=h(`node:assert`);var l=class extends i{constructor(e,t){if(!e||typeof e!=`object`)throw new n(`invalid opts`);if(typeof t!=`function`)throw new n(`invalid callback`);let{signal:r,opaque:i,responseHeaders:a}=e;if(r&&typeof r.on!=`function`&&typeof r.addEventListener!=`function`)throw new n(`signal must be an EventEmitter or EventTarget`);super(`UNDICI_UPGRADE`),this.responseHeaders=a||null,this.opaque=i||null,this.callback=t,this.abort=null,this.context=null,o(this,r)}onConnect(e,t){this.reason?e(this.reason):(c(this.callback),this.abort=e,this.context=null)}onHeaders(){throw new r(`bad upgrade`,null)}onUpgrade(e,t,n){c(e===101);let{callback:r,opaque:i,context:o}=this;s(this),this.callback=null;let l=this.responseHeaders===`raw`?a.parseRawHeaders(t):a.parseHeaders(t);this.runInAsyncScope(r,null,null,{headers:l,socket:n,opaque:i,context:o})}onError(e){let{callback:t,opaque:n}=this;s(this),t&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(t,null,e,{opaque:n})}))}};function u(e,t){if(t===void 0)return new Promise((t,n)=>{u.call(this,e,(e,r)=>e?n(e):t(r))});try{let n=new l(e,t);this.dispatch({...e,method:e.method||`GET`,upgrade:e.protocol||`Websocket`},n)}catch(n){if(typeof t!=`function`)throw n;let r=e?.opaque;queueMicrotask(()=>t(n,{opaque:r}))}}t.exports=u})),be=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),{AsyncResource:r}=h(`node:async_hooks`),{InvalidArgumentError:i,SocketError:a}=T(),o=O(),{addSignal:s,removeSignal:c}=_e();var l=class extends r{constructor(e,t){if(!e||typeof e!=`object`)throw new i(`invalid opts`);if(typeof t!=`function`)throw new i(`invalid callback`);let{signal:n,opaque:r,responseHeaders:a}=e;if(n&&typeof n.on!=`function`&&typeof n.addEventListener!=`function`)throw new i(`signal must be an EventEmitter or EventTarget`);super(`UNDICI_CONNECT`),this.opaque=r||null,this.responseHeaders=a||null,this.callback=t,this.abort=null,s(this,n)}onConnect(e,t){this.reason?e(this.reason):(n(this.callback),this.abort=e,this.context=t)}onHeaders(){throw new a(`bad connect`,null)}onUpgrade(e,t,n){let{callback:r,opaque:i,context:a}=this;c(this),this.callback=null;let s=t;s!=null&&(s=this.responseHeaders===`raw`?o.parseRawHeaders(t):o.parseHeaders(t)),this.runInAsyncScope(r,null,null,{statusCode:e,headers:s,socket:n,opaque:i,context:a})}onError(e){let{callback:t,opaque:n}=this;c(this),t&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(t,null,e,{opaque:n})}))}};function u(e,t){if(t===void 0)return new Promise((t,n)=>{u.call(this,e,(e,r)=>e?n(e):t(r))});try{let n=new l(e,t);this.dispatch({...e,method:`CONNECT`},n)}catch(n){if(typeof t!=`function`)throw n;let r=e?.opaque;queueMicrotask(()=>t(n,{opaque:r}))}}t.exports=u})),xe=/* @__PURE__ */ m(((e,t)=>{t.exports.request=ge(),t.exports.stream=ve(),t.exports.pipeline=ye(),t.exports.upgrade=X(),t.exports.connect=be()})),Z=/* @__PURE__ */ m(((e,t)=>{let{UndiciError:n}=T(),r=Symbol.for(`undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED`);t.exports={MockNotMatchedError:class e extends n{constructor(t){super(t),Error.captureStackTrace(this,e),this.name=`MockNotMatchedError`,this.message=t||`The request does not match any registered mock dispatches`,this.code=`UND_MOCK_ERR_MOCK_NOT_MATCHED`}static[Symbol.hasInstance](e){return e&&e[r]===!0}[r]=!0}}})),Se=/* @__PURE__ */ m(((e,t)=>{t.exports={kAgent:Symbol(`agent`),kOptions:Symbol(`options`),kFactory:Symbol(`factory`),kDispatches:Symbol(`dispatches`),kDispatchKey:Symbol(`dispatch key`),kDefaultHeaders:Symbol(`default headers`),kDefaultTrailers:Symbol(`default trailers`),kContentLength:Symbol(`content length`),kMockAgent:Symbol(`mock agent`),kMockAgentSet:Symbol(`mock agent set`),kMockAgentGet:Symbol(`mock agent get`),kMockDispatch:Symbol(`mock dispatch`),kClose:Symbol(`close`),kOriginalClose:Symbol(`original agent close`),kOrigin:Symbol(`origin`),kIsMockActive:Symbol(`is mock active`),kNetConnect:Symbol(`net connect`),kGetNetConnect:Symbol(`get net connect`),kConnected:Symbol(`connected`)}})),Ce=/* @__PURE__ */ m(((e,t)=>{let{MockNotMatchedError:n}=Z(),{kDispatches:r,kMockAgent:i,kOriginalDispatch:a,kOrigin:o,kGetNetConnect:s}=Se(),{buildURL:c}=O(),{STATUS_CODES:l}=h(`node:http`),{types:{isPromise:u}}=h(`node:util`);function d(e,t){return typeof e==`string`?e===t:e instanceof RegExp?e.test(t):typeof e==`function`&&e(t)===!0}function f(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e.toLocaleLowerCase(),t]))}function p(e,t){if(Array.isArray(e)){for(let n=0;n!e).filter(({path:e})=>d(_(e),i));if(a.length===0)throw new n(`Mock dispatch not matched for path '${i}'`);if(a=a.filter(({method:e})=>d(e,t.method)),a.length===0)throw new n(`Mock dispatch not matched for method '${t.method}' on path '${i}'`);if(a=a.filter(({body:e})=>e===void 0||d(e,t.body)),a.length===0)throw new n(`Mock dispatch not matched for body '${t.body}' on path '${i}'`);if(a=a.filter(e=>g(e,t.headers)),a.length===0){let e=typeof t.headers==`object`?JSON.stringify(t.headers):t.headers;throw new n(`Mock dispatch not matched for headers '${e}' on path '${i}'`)}return a[0]}function x(e,t,n){let r={timesInvoked:0,times:1,persist:!1,consumed:!1},i=typeof n==`function`?{callback:n}:{...n},a={...r,...t,pending:!0,data:{error:null,...i}};return e.push(a),a}function S(e,t){let n=e.findIndex(e=>e.consumed?v(e,t):!1);n!==-1&&e.splice(n,1)}function C(e){let{path:t,method:n,body:r,headers:i,query:a}=e;return{path:t,method:n,body:r,headers:i,query:a}}function w(e){let t=Object.keys(e),n=[];for(let r=0;r=h,i.pending=p0?setTimeout(()=>{g(this[r])},d):g(this[r]);function g(r,i=o){let l=Array.isArray(e.headers)?m(e.headers):e.headers,d=typeof i==`function`?i({...e,headers:l}):i;if(u(d)){d.then(e=>g(r,e));return}let f=y(d),p=w(s),h=w(c);t.onConnect?.(e=>t.onError(e),null),t.onHeaders?.(a,p,_,T(a)),t.onData?.(Buffer.from(f)),t.onComplete?.(h),S(r,n)}function _(){}return!0}function k(){let e=this[i],t=this[o],r=this[a];return function(i,a){if(e.isMockActive)try{D.call(this,i,a)}catch(o){if(o instanceof n){let c=e[s]();if(c===!1)throw new n(`${o.message}: subsequent request to origin ${t} was not allowed (net.connect disabled)`);if(A(c,t))r.call(this,i,a);else throw new n(`${o.message}: subsequent request to origin ${t} was not allowed (net.connect is not enabled for this origin)`)}else throw o}else r.call(this,i,a)}}function A(e,t){let n=new URL(t);return!!(e===!0||Array.isArray(e)&&e.some(e=>d(e,n.host)))}function j(e){if(e){let{agent:t,...n}=e;return n}}t.exports={getResponseData:y,getMockDispatch:b,addMockDispatch:x,deleteMockDispatch:S,buildKey:C,generateKeyValues:w,matchValue:d,getResponse:E,getStatusText:T,mockDispatch:D,buildMockDispatch:k,checkNetConnect:A,buildMockOptions:j,getHeaderByName:p,buildHeadersFromArray:m}})),we=/* @__PURE__ */ m(((e,t)=>{let{getResponseData:n,buildKey:r,addMockDispatch:i}=Ce(),{kDispatches:a,kDispatchKey:o,kDefaultHeaders:s,kDefaultTrailers:c,kContentLength:l,kMockDispatch:u}=Se(),{InvalidArgumentError:d}=T(),{buildURL:f}=O();var p=class{constructor(e){this[u]=e}delay(e){if(typeof e!=`number`||!Number.isInteger(e)||e<=0)throw new d(`waitInMs must be a valid integer > 0`);return this[u].delay=e,this}persist(){return this[u].persist=!0,this}times(e){if(typeof e!=`number`||!Number.isInteger(e)||e<=0)throw new d(`repeatTimes must be a valid integer > 0`);return this[u].times=e,this}},m=class{constructor(e,t){if(typeof e!=`object`)throw new d(`opts must be an object`);if(e.path===void 0)throw new d(`opts.path must be defined`);if(e.method===void 0&&(e.method=`GET`),typeof e.path==`string`){if(e.query)e.path=f(e.path,e.query);else{let t=new URL(e.path,`data://`);e.path=t.pathname+t.search}}typeof e.method==`string`&&(e.method=e.method.toUpperCase()),this[o]=r(e),this[a]=t,this[s]={},this[c]={},this[l]=!1}createMockScopeDispatchData({statusCode:e,data:t,responseOptions:r}){let i=n(t),a=this[l]?{"content-length":i.length}:{};return{statusCode:e,data:t,headers:{...this[s],...a,...r.headers},trailers:{...this[c],...r.trailers}}}validateReplyParameters(e){if(e.statusCode===void 0)throw new d(`statusCode must be defined`);if(typeof e.responseOptions!=`object`||e.responseOptions===null)throw new d(`responseOptions must be an object`)}reply(e){if(typeof e==`function`)return new p(i(this[a],this[o],t=>{let n=e(t);if(typeof n!=`object`||!n)throw new d(`reply options callback must return an object`);let r={data:``,responseOptions:{},...n};return this.validateReplyParameters(r),{...this.createMockScopeDispatchData(r)}}));let t={statusCode:e,data:arguments[1]===void 0?``:arguments[1],responseOptions:arguments[2]===void 0?{}:arguments[2]};this.validateReplyParameters(t);let n=this.createMockScopeDispatchData(t);return new p(i(this[a],this[o],n))}replyWithError(e){if(e===void 0)throw new d(`error must be defined`);return new p(i(this[a],this[o],{error:e}))}defaultReplyHeaders(e){if(e===void 0)throw new d(`headers must be defined`);return this[s]=e,this}defaultReplyTrailers(e){if(e===void 0)throw new d(`trailers must be defined`);return this[c]=e,this}replyContentLength(){return this[l]=!0,this}};t.exports.MockInterceptor=m,t.exports.MockScope=p})),Te=/* @__PURE__ */ m(((e,t)=>{let{promisify:n}=h(`node:util`),r=se(),{buildMockDispatch:i}=Ce(),{kDispatches:a,kMockAgent:o,kClose:s,kOriginalClose:c,kOrigin:l,kOriginalDispatch:u,kConnected:d}=Se(),{MockInterceptor:f}=we(),p=w(),{InvalidArgumentError:m}=T();t.exports=class extends r{constructor(e,t){if(super(e,t),!t||!t.agent||typeof t.agent.dispatch!=`function`)throw new m(`Argument opts.agent must implement Agent`);this[o]=t.agent,this[l]=e,this[a]=[],this[d]=1,this[u]=this.dispatch,this[c]=this.close.bind(this),this.dispatch=i.call(this),this.close=this[s]}get[p.kConnected](){return this[d]}intercept(e){return new f(e,this[a])}async[s](){await n(this[c])(),this[d]=0,this[o][p.kClients].delete(this[l])}}})),Ee=/* @__PURE__ */ m(((e,t)=>{let{promisify:n}=h(`node:util`),r=le(),{buildMockDispatch:i}=Ce(),{kDispatches:a,kMockAgent:o,kClose:s,kOriginalClose:c,kOrigin:l,kOriginalDispatch:u,kConnected:d}=Se(),{MockInterceptor:f}=we(),p=w(),{InvalidArgumentError:m}=T();t.exports=class extends r{constructor(e,t){if(super(e,t),!t||!t.agent||typeof t.agent.dispatch!=`function`)throw new m(`Argument opts.agent must implement Agent`);this[o]=t.agent,this[l]=e,this[a]=[],this[d]=1,this[u]=this.dispatch,this[c]=this.close.bind(this),this.dispatch=i.call(this),this.close=this[s]}get[p.kConnected](){return this[d]}intercept(e){return new f(e,this[a])}async[s](){await n(this[c])(),this[d]=0,this[o][p.kClients].delete(this[l])}}})),De=/* @__PURE__ */ m(((e,t)=>{let n={pronoun:`it`,is:`is`,was:`was`,this:`this`},r={pronoun:`they`,is:`are`,was:`were`,this:`these`};t.exports=class{constructor(e,t){this.singular=e,this.plural=t}pluralize(e){let t=e===1,i=t?n:r,a=t?this.singular:this.plural;return{...i,count:e,noun:a}}}})),Oe=/* @__PURE__ */ m(((e,t)=>{let{Transform:n}=h(`node:stream`),{Console:r}=h(`node:console`),i=process.versions.icu?`✅`:`Y `,a=process.versions.icu?`❌`:`N `;t.exports=class{constructor({disableColors:e}={}){this.transform=new n({transform(e,t,n){n(null,e)}}),this.logger=new r({stdout:this.transform,inspectOptions:{colors:!e&&!process.env.CI}})}format(e){let t=e.map(({method:e,path:t,data:{statusCode:n},persist:r,times:o,timesInvoked:s,origin:c})=>({Method:e,Origin:c,Path:t,"Status code":n,Persistent:r?i:a,Invocations:s,Remaining:r?1/0:o-s}));return this.logger.table(t),this.transform.read().toString()}}})),ke=/* @__PURE__ */ m(((e,t)=>{let{kClients:n}=w(),r=ue(),{kAgent:i,kMockAgentSet:a,kMockAgentGet:o,kDispatches:s,kIsMockActive:c,kNetConnect:l,kGetNetConnect:u,kOptions:d,kFactory:f}=Se(),p=Te(),m=Ee(),{matchValue:h,buildMockOptions:g}=Ce(),{InvalidArgumentError:_,UndiciError:v}=T(),y=j(),b=De(),x=Oe();t.exports=class extends y{constructor(e){if(super(e),this[l]=!0,this[c]=!0,e?.agent&&typeof e.agent.dispatch!=`function`)throw new _(`Argument opts.agent must implement Agent`);let t=e?.agent?e.agent:new r(e);this[i]=t,this[n]=t[n],this[d]=g(e)}get(e){let t=this[o](e);return t||(t=this[f](e),this[a](e,t)),t}dispatch(e,t){return this.get(e.origin),this[i].dispatch(e,t)}async close(){await this[i].close(),this[n].clear()}deactivate(){this[c]=!1}activate(){this[c]=!0}enableNetConnect(e){if(typeof e==`string`||typeof e==`function`||e instanceof RegExp)Array.isArray(this[l])?this[l].push(e):this[l]=[e];else if(e===void 0)this[l]=!0;else throw new _(`Unsupported matcher. Must be one of String|Function|RegExp.`)}disableNetConnect(){this[l]=!1}get isMockActive(){return this[c]}[a](e,t){this[n].set(e,t)}[f](e){let t=Object.assign({agent:this},this[d]);return this[d]&&this[d].connections===1?new p(e,t):new m(e,t)}[o](e){let t=this[n].get(e);if(t)return t;if(typeof e!=`string`){let t=this[f](`http://localhost:9999`);return this[a](e,t),t}for(let[t,r]of Array.from(this[n]))if(r&&typeof t!=`string`&&h(t,e)){let t=this[f](e);return this[a](e,t),t[s]=r[s],t}}[u](){return this[l]}pendingInterceptors(){let e=this[n];return Array.from(e.entries()).flatMap(([e,t])=>t[s].map(t=>({...t,origin:e}))).filter(({pending:e})=>e)}assertNoPendingInterceptors({pendingInterceptorsFormatter:e=new x}={}){let t=this.pendingInterceptors();if(t.length===0)return;let n=new b(`interceptor`,`interceptors`).pluralize(t.length);throw new v(` +[v](e){Q(this),this.once(`connect`,e)}[J](e,t){let n=e.origin||this[p].origin,r=new s(n,e,t);return this[C].push(r),this[y]||(a.bodyLength(r.body)==null&&a.isIterable(r.body)?(this[y]=1,queueMicrotask(()=>Se(this))):this[fe](!0)),this[y]&&this[j]!==2&&this[_]&&(this[j]=2),this[j]<2}async[q](){return new Promise(e=>{this[S]?this[ge]=e:e(null)})}async[se](e){return new Promise(t=>{let n=this[C].splice(this[I]);for(let t=0;t{this[ge]&&(this[ge](),this[ge]=null),t(null)};this[X]?(this[X].destroy(e,r),this[X]=null):queueMicrotask(r),this[fe]()})}};let ye=G();function be(e,t){if(e[b]===0&&t.code!==`UND_ERR_INFO`&&t.code!==`UND_ERR_SOCKET`){n(e[I]===e[L]);let r=e[C].splice(e[L]);for(let n=0;n{e[U]({host:t,hostname:i,protocol:s,port:c,servername:e[m],localAddress:e[Y]},(e,t)=>{e?r(e):n(t)})});if(e.destroyed){a.destroy(r.on(`error`,_e),new d);return}n(r);try{e[X]=r.alpnProtocol===`h2`?await me(e,r):await pe(e,r)}catch(e){throw r.destroy().on(`error`,_e),e}e[D]=!1,r[K]=0,r[W]=e[W],r[g]=e,r[ee]=null,o.connected.hasSubscribers&&o.connected.publish({connectParams:{host:t,hostname:i,protocol:s,port:c,version:e[X]?.version,servername:e[m],localAddress:e[Y]},connector:e[U],socket:r}),e.emit(`connect`,e[p],[e])}catch(r){if(e.destroyed)return;if(e[D]=!1,o.connectError.hasSubscribers&&o.connectError.publish({connectParams:{host:t,hostname:i,protocol:s,port:c,version:e[X]?.version,servername:e[m],localAddress:e[Y]},connector:e[U],error:r}),r.code===`ERR_TLS_CERT_ALTNAME_INVALID`)for(n(e[b]===0);e[x]>0&&e[C][e[I]].servername===e[m];){let t=e[C][e[I]++];a.errorRequest(e,t,r)}else be(e,r);e.emit(`connectionError`,e[p],[e],r)}e[fe]()}function xe(e){e[j]=0,e.emit(`drain`,e[p],[e])}function Se(e,t){e[y]!==2&&(e[y]=2,Ce(e,t),e[y]=0,e[L]>256&&(e[C].splice(0,e[L]),e[I]-=e[L],e[L]=0))}function Ce(e,t){for(;;){if(e.destroyed){n(e[x]===0);return}if(e[ge]&&!e[S]){e[ge](),e[ge]=null;return}if(e[X]&&e[X].resume(),e[_])e[j]=2;else if(e[j]===2){t?(e[j]=1,queueMicrotask(()=>xe(e))):xe(e);continue}if(e[x]===0||e[b]>=(ve(e)||1))return;let r=e[C][e[I]];if(e[p].protocol===`https:`&&e[m]!==r.servername){if(e[b]>0)return;e[m]=r.servername,e[X]?.destroy(new u(`servername changed`),()=>{e[X]=null,Se(e)})}if(e[D])return;if(!e[X]){Q(e);return}if(e[X].destroyed||e[X].busy(r))return;!r.aborted&&e[X].write(r)?e[I]++:e[C].splice(e[I],1)}}t.exports=Z})),q=/* @__PURE__ */ m(((e,t)=>{let n=2047;var r=class{constructor(){this.bottom=0,this.top=0,this.list=Array(2048),this.next=null}isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&n)===this.bottom}push(e){this.list[this.top]=e,this.top=this.top+1&n}shift(){let e=this.list[this.bottom];return e===void 0?null:(this.list[this.bottom]=void 0,this.bottom=this.bottom+1&n,e)}};t.exports=class{constructor(){this.head=this.tail=new r}isEmpty(){return this.head.isEmpty()}push(e){this.head.isFull()&&(this.head=this.head.next=new r),this.head.push(e)}shift(){let e=this.tail,t=e.shift();return e.isEmpty()&&e.next!==null&&(this.tail=e.next),t}}})),se=/* @__PURE__ */ m(((e,t)=>{let{kFree:n,kConnected:r,kPending:i,kQueued:a,kRunning:o,kSize:s}=w(),c=Symbol(`pool`);t.exports=class{constructor(e){this[c]=e}get connected(){return this[c][r]}get free(){return this[c][n]}get pending(){return this[c][i]}get queued(){return this[c][a]}get running(){return this[c][o]}get size(){return this[c][s]}}})),J=/* @__PURE__ */ m(((e,t)=>{let n=M(),r=q(),{kConnected:i,kSize:a,kRunning:o,kPending:s,kQueued:c,kBusy:l,kFree:u,kUrl:d,kClose:f,kDestroy:p,kDispatch:m}=w(),h=se(),g=Symbol(`clients`),_=Symbol(`needDrain`),v=Symbol(`queue`),y=Symbol(`closed resolve`),b=Symbol(`onDrain`),x=Symbol(`onConnect`),S=Symbol(`onDisconnect`),C=Symbol(`onConnectionError`),T=Symbol(`get dispatcher`),E=Symbol(`add client`),D=Symbol(`remove client`),O=Symbol(`stats`);t.exports={PoolBase:class extends n{constructor(e){super(e),this[v]=new r,this[g]=[],this[c]=0;let t=this;this[b]=function(e,n){let r=t[v],i=!1;for(;!i;){let e=r.shift();if(!e)break;t[c]--,i=!this.dispatch(e.opts,e.handler)}this[_]=i,!this[_]&&t[_]&&(t[_]=!1,t.emit(`drain`,e,[t,...n])),t[y]&&r.isEmpty()&&Promise.all(t[g].map(e=>e.close())).then(t[y])},this[x]=(e,n)=>{t.emit(`connect`,e,[t,...n])},this[S]=(e,n,r)=>{t.emit(`disconnect`,e,[t,...n],r)},this[C]=(e,n,r)=>{t.emit(`connectionError`,e,[t,...n],r)},this[O]=new h(this)}get[l](){return this[_]}get[i](){return this[g].filter(e=>e[i]).length}get[u](){return this[g].filter(e=>e[i]&&!e[_]).length}get[s](){let e=this[c];for(let{[s]:t}of this[g])e+=t;return e}get[o](){let e=0;for(let{[o]:t}of this[g])e+=t;return e}get[a](){let e=this[c];for(let{[a]:t}of this[g])e+=t;return e}get stats(){return this[O]}async[f](){this[v].isEmpty()?await Promise.all(this[g].map(e=>e.close())):await new Promise(e=>{this[y]=e})}async[p](e){for(;;){let t=this[v].shift();if(!t)break;t.handler.onError(e)}await Promise.all(this[g].map(t=>t.destroy(e)))}[m](e,t){let n=this[T]();return n?n.dispatch(e,t)||(n[_]=!0,this[_]=!this[T]()):(this[_]=!0,this[v].push({opts:e,handler:t}),this[c]++),!this[_]}[E](e){return e.on(`drain`,this[b]).on(`connect`,this[x]).on(`disconnect`,this[S]).on(`connectionError`,this[C]),this[g].push(e),this[_]&&queueMicrotask(()=>{this[_]&&this[b](e[d],[this,e])}),this}[D](e){e.close(()=>{let t=this[g].indexOf(e);t!==-1&&this[g].splice(t,1)}),this[_]=this[g].some(e=>!e[_]&&e.closed!==!0&&e.destroyed!==!0)}},kClients:g,kNeedDrain:_,kAddClient:E,kRemoveClient:D,kGetDispatcher:T}})),ce=/* @__PURE__ */ m(((e,t)=>{let{PoolBase:n,kClients:r,kNeedDrain:i,kAddClient:a,kGetDispatcher:o}=J(),s=K(),{InvalidArgumentError:c}=T(),l=O(),{kUrl:u,kInterceptors:d}=w(),f=P(),p=Symbol(`options`),m=Symbol(`connections`),h=Symbol(`factory`);function g(e,t){return new s(e,t)}t.exports=class extends n{constructor(e,{connections:t,factory:n=g,connect:i,connectTimeout:a,tls:o,maxCachedSessions:s,socketPath:_,autoSelectFamily:v,autoSelectFamilyAttemptTimeout:y,allowH2:b,...x}={}){if(t!=null&&(!Number.isFinite(t)||t<0))throw new c(`invalid connections`);if(typeof n!=`function`)throw new c(`factory must be a function.`);if(i!=null&&typeof i!=`function`&&typeof i!=`object`)throw new c(`connect must be a function or an object`);typeof i!=`function`&&(i=f({...o,maxCachedSessions:s,allowH2:b,socketPath:_,timeout:a,...v?{autoSelectFamily:v,autoSelectFamilyAttemptTimeout:y}:void 0,...i})),super(x),this[d]=x.interceptors?.Pool&&Array.isArray(x.interceptors.Pool)?x.interceptors.Pool:[],this[m]=t||null,this[u]=l.parseOrigin(e),this[p]={...l.deepClone(x),connect:i,allowH2:b},this[p].interceptors=x.interceptors?{...x.interceptors}:void 0,this[h]=n,this.on(`connectionError`,(e,t,n)=>{for(let e of t){let t=this[r].indexOf(e);t!==-1&&this[r].splice(t,1)}})}[o](){for(let e of this[r])if(!e[i])return e;if(!this[m]||this[r].length{let{BalancedPoolMissingUpstreamError:n,InvalidArgumentError:r}=T(),{PoolBase:i,kClients:a,kNeedDrain:o,kAddClient:s,kRemoveClient:c,kGetDispatcher:l}=J(),u=ce(),{kUrl:d,kInterceptors:f}=w(),{parseOrigin:p}=O(),m=Symbol(`factory`),h=Symbol(`options`),g=Symbol(`kGreatestCommonDivisor`),_=Symbol(`kCurrentWeight`),v=Symbol(`kIndex`),y=Symbol(`kWeight`),b=Symbol(`kMaxWeightPerServer`),x=Symbol(`kErrorPenalty`);function S(e,t){if(e===0)return t;for(;t!==0;){let n=t;t=e%t,e=n}return e}function C(e,t){return new u(e,t)}t.exports=class extends i{constructor(e=[],{factory:t=C,...n}={}){if(super(),this[h]=n,this[v]=-1,this[_]=0,this[b]=this[h].maxWeightPerServer||100,this[x]=this[h].errorPenalty||15,Array.isArray(e)||(e=[e]),typeof t!=`function`)throw new r(`factory must be a function.`);this[f]=n.interceptors?.BalancedPool&&Array.isArray(n.interceptors.BalancedPool)?n.interceptors.BalancedPool:[],this[m]=t;for(let t of e)this.addUpstream(t);this._updateBalancedPoolStats()}addUpstream(e){let t=p(e).origin;if(this[a].find(e=>e[d].origin===t&&e.closed!==!0&&e.destroyed!==!0))return this;let n=this[m](t,Object.assign({},this[h]));this[s](n),n.on(`connect`,()=>{n[y]=Math.min(this[b],n[y]+this[x])}),n.on(`connectionError`,()=>{n[y]=Math.max(1,n[y]-this[x]),this._updateBalancedPoolStats()}),n.on(`disconnect`,(...e)=>{let t=e[2];t&&t.code===`UND_ERR_SOCKET`&&(n[y]=Math.max(1,n[y]-this[x]),this._updateBalancedPoolStats())});for(let e of this[a])e[y]=this[b];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){let e=0;for(let t=0;te[d].origin===t&&e.closed!==!0&&e.destroyed!==!0);return n&&this[c](n),this}get upstreams(){return this[a].filter(e=>e.closed!==!0&&e.destroyed!==!0).map(e=>e[d].origin)}[l](){if(this[a].length===0)throw new n;if(!this[a].find(e=>!e[o]&&e.closed!==!0&&e.destroyed!==!0)||this[a].map(e=>e[o]).reduce((e,t)=>e&&t,!0))return;let e=0,t=this[a].findIndex(e=>!e[o]);for(;e++this[a][t][y]&&!e[o]&&(t=this[v]),this[v]===0&&(this[_]=this[_]-this[g],this[_]<=0&&(this[_]=this[b])),e[y]>=this[_]&&!e[o])return e}return this[_]=this[a][t][y],this[v]=t,this[a][t]}}})),le=/* @__PURE__ */ m(((e,t)=>{let{InvalidArgumentError:n}=T(),{kClients:r,kRunning:i,kClose:a,kDestroy:o,kDispatch:s,kInterceptors:c}=w(),l=M(),u=ce(),d=K(),f=O(),p=G(),m=Symbol(`onConnect`),h=Symbol(`onDisconnect`),g=Symbol(`onConnectionError`),_=Symbol(`maxRedirections`),v=Symbol(`onDrain`),y=Symbol(`factory`),b=Symbol(`options`);function x(e,t){return t&&t.connections===1?new d(e,t):new u(e,t)}t.exports=class extends l{constructor({factory:e=x,maxRedirections:t=0,connect:i,tls:a,...o}={}){if(typeof e!=`function`)throw new n(`factory must be a function.`);if(i!=null&&typeof i!=`function`&&typeof i!=`object`)throw new n(`connect must be a function or an object`);if(!Number.isInteger(t)||t<0)throw new n(`maxRedirections must be a positive number`);super(o),i&&typeof i!=`function`&&(i={...i}),a&&typeof a!=`function`&&(a={...a}),this[c]=o.interceptors?.Agent&&Array.isArray(o.interceptors.Agent)?o.interceptors.Agent:[p({maxRedirections:t})],this[b]={...f.deepClone(o),connect:i,tls:a},this[b].interceptors=o.interceptors?{...o.interceptors}:void 0,this[_]=t,this[y]=e,this[r]=/* @__PURE__ */ new Map,this[v]=(e,t)=>{this.emit(`drain`,e,[this,...t])},this[m]=(e,t)=>{this.emit(`connect`,e,[this,...t])},this[h]=(e,t,n)=>{this.emit(`disconnect`,e,[this,...t],n)},this[g]=(e,t,n)=>{this.emit(`connectionError`,e,[this,...t],n)}}get[i](){let e=0;for(let t of this[r].values())e+=t[i];return e}[s](e,t){let i;if(e.origin&&(typeof e.origin==`string`||e.origin instanceof URL))i=String(e.origin);else throw new n(`opts.origin must be a non-empty string or URL.`);let a=this[r].get(i);return a||(a=this[y](e.origin,this[b]).on(`drain`,this[v]).on(`connect`,this[m]).on(`disconnect`,this[h]).on(`connectionError`,this[g]),this[r].set(i,a)),a.dispatch(e,t)}async[a](){let e=[];for(let t of this[r].values())e.push(t.close());this[r].clear(),await Promise.all(e)}async[o](e){let t=[];for(let n of this[r].values())t.push(n.destroy(e));this[r].clear(),await Promise.all(t)}}})),ue=/* @__PURE__ */ m(((e,t)=>{let{kProxy:n,kClose:r,kDestroy:i,kDispatch:a,kInterceptors:o}=w(),{URL:s}=h(`node:url`),c=le(),l=ce(),u=M(),{InvalidArgumentError:d,RequestAbortedError:f,SecureProxyConnectionError:p}=T(),m=P(),g=K(),_=Symbol(`proxy agent`),v=Symbol(`proxy client`),y=Symbol(`proxy headers`),b=Symbol(`request tls settings`),x=Symbol(`proxy tls settings`),S=Symbol(`connect endpoint function`),C=Symbol(`tunnel proxy`);function E(e){return e===`https:`?443:80}function D(e,t){return new l(e,t)}let O=()=>{};function k(e,t){return t.connections===1?new g(e,t):new l(e,t)}var A=class extends u{#e;constructor(e,{headers:t={},connect:n,factory:r}){if(super(),!e)throw new d(`Proxy URL is mandatory`);this[y]=t,this.#e=r?r(e,{connect:n}):new g(e,{connect:n})}[a](e,t){let n=t.onHeaders;t.onHeaders=function(e,r,i){e===407?typeof t.onError==`function`&&t.onError(new d(`Proxy Authentication Required (407)`)):n&&n.call(this,e,r,i)};let{origin:r,path:i=`/`,headers:o={}}=e;if(e.path=r+i,!(`host`in o)&&!(`Host`in o)){let{host:e}=new s(r);o.host=e}return e.headers={...this[y],...o},this.#e[a](e,t)}async[r](){return this.#e.close()}async[i](e){return this.#e.destroy(e)}},j=class extends u{constructor(e){if(super(),!e||typeof e==`object`&&!(e instanceof s)&&!e.uri)throw new d(`Proxy uri is mandatory`);let{clientFactory:t=D}=e;if(typeof t!=`function`)throw new d(`Proxy opts.clientFactory must be a function.`);let{proxyTunnel:r=!0}=e,i=this.#e(e),{href:a,origin:l,port:u,protocol:h,username:g,password:w,hostname:T}=i;if(this[n]={uri:a,protocol:h},this[o]=e.interceptors?.ProxyAgent&&Array.isArray(e.interceptors.ProxyAgent)?e.interceptors.ProxyAgent:[],this[b]=e.requestTls,this[x]=e.proxyTls,this[y]=e.headers||{},this[C]=r,e.auth&&e.token)throw new d(`opts.auth cannot be used in combination with opts.token`);e.auth?this[y][`proxy-authorization`]=`Basic ${e.auth}`:e.token?this[y][`proxy-authorization`]=e.token:g&&w&&(this[y][`proxy-authorization`]=`Basic ${Buffer.from(`${decodeURIComponent(g)}:${decodeURIComponent(w)}`).toString(`base64`)}`);let j=m({...e.proxyTls});this[S]=m({...e.requestTls});let M=e.factory||k,N=(e,t)=>{let{protocol:r}=new s(e);return!this[C]&&r===`http:`&&this[n].protocol===`http:`?new A(this[n].uri,{headers:this[y],connect:j,factory:M}):M(e,t)};this[v]=t(i,{connect:j}),this[_]=new c({...e,factory:N,connect:async(e,t)=>{let n=e.host;e.port||(n+=`:${E(e.protocol)}`);try{let{socket:r,statusCode:i}=await this[v].connect({origin:l,port:u,path:n,signal:e.signal,headers:{...this[y],host:e.host},servername:this[x]?.servername||T});if(i!==200&&(r.on(`error`,O).destroy(),t(new f(`Proxy response (${i}) !== 200 when HTTP Tunneling`))),e.protocol!==`https:`){t(null,r);return}let a;a=this[b]?this[b].servername:e.servername,this[S]({...e,servername:a,httpSocket:r},t)}catch(e){e.code===`ERR_TLS_CERT_ALTNAME_INVALID`?t(new p(e)):t(e)}}})}dispatch(e,t){let n=N(e.headers);if(F(n),n&&!(`host`in n)&&!(`Host`in n)){let{host:t}=new s(e.origin);n.host=t}return this[_].dispatch({...e,headers:n},t)}#e(e){return typeof e==`string`?new s(e):e instanceof s?e:new s(e.uri)}async[r](){await this[_].close(),await this[v].close()}async[i](){await this[_].destroy(),await this[v].destroy()}};function N(e){if(Array.isArray(e)){let t={};for(let n=0;ne.toLowerCase()===`proxy-authorization`))throw new d(`Proxy-Authorization should be sent in ProxyAgent constructor`)}t.exports=j})),X=/* @__PURE__ */ m(((e,t)=>{let n=M(),{kClose:r,kDestroy:i,kClosed:a,kDestroyed:o,kDispatch:s,kNoProxyAgent:c,kHttpProxyAgent:l,kHttpsProxyAgent:u}=w(),d=ue(),f=le(),p={"http:":80,"https:":443},m=!1;t.exports=class extends n{#e=null;#t=null;#n=null;constructor(e={}){super(),this.#n=e,m||(m=!0,process.emitWarning(`EnvHttpProxyAgent is experimental, expect them to change at any time.`,{code:`UNDICI-EHPA`}));let{httpProxy:t,httpsProxy:n,noProxy:r,...i}=e;this[c]=new f(i);let a=t??process.env.http_proxy??process.env.HTTP_PROXY;a?this[l]=new d({...i,uri:a}):this[l]=this[c];let o=n??process.env.https_proxy??process.env.HTTPS_PROXY;o?this[u]=new d({...i,uri:o}):this[u]=this[l],this.#a()}[s](e,t){let n=new URL(e.origin);return this.#r(n).dispatch(e,t)}async[r](){await this[c].close(),this[l][a]||await this[l].close(),this[u][a]||await this[u].close()}async[i](e){await this[c].destroy(e),this[l][o]||await this[l].destroy(e),this[u][o]||await this[u].destroy(e)}#r(e){let{protocol:t,host:n,port:r}=e;return n=n.replace(/:\d*$/,``).toLowerCase(),r=Number.parseInt(r,10)||p[t]||0,this.#i(n,r)?t===`https:`?this[u]:this[l]:this[c]}#i(e,t){if(this.#o&&this.#a(),this.#t.length===0)return!0;if(this.#e===`*`)return!1;for(let n=0;n{let n=h(`node:assert`),{kRetryHandlerDefaultRetry:r}=w(),{RequestRetryError:i}=T(),{isDisturbed:a,parseHeaders:o,parseRangeHeader:s,wrapRequestBody:c}=O();function l(e){let t=Date.now();return new Date(e).getTime()-t}function u(e,t,n,r){let a=e[`content-length`];if(a==null||!Number.isFinite(t.start)||!Number.isFinite(t.end))return null;let o=Number(a),s=t.end-t.start+1;return!Number.isFinite(o)||o!==s?new i(`Content-Length mismatch`,n,{headers:e,data:{count:r}}):null}t.exports=class e{constructor(t,n){let{retryOptions:i,...a}=t,{retry:o,maxRetries:s,maxTimeout:l,minTimeout:u,timeoutFactor:d,methods:f,errorCodes:p,retryAfter:m,statusCodes:h}=i??{};this.dispatch=n.dispatch,this.handler=n.handler,this.opts={...a,body:c(t.body)},this.abort=null,this.aborted=!1,this.retryOpts={retry:o??e[r],retryAfter:m??!0,maxTimeout:l??3e4,minTimeout:u??500,timeoutFactor:d??2,maxRetries:s??5,methods:f??[`GET`,`HEAD`,`OPTIONS`,`PUT`,`DELETE`,`TRACE`],statusCodes:h??[500,502,503,504,429],errorCodes:p??[`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ENETDOWN`,`ENETUNREACH`,`EHOSTDOWN`,`EHOSTUNREACH`,`EPIPE`,`UND_ERR_SOCKET`]},this.retryCount=0,this.retryCountCheckpoint=0,this.start=0,this.end=null,this.etag=null,this.resume=null,this.headersSent=!1,this.handler.onConnect(e=>{this.aborted=!0,this.abort?this.abort(e):this.reason=e})}checkpointResponseEnd(e,t){if(this.end==null&&this.opts.method!==`HEAD`){let t=e[`content-length`];this.end=t==null?null:Number(t)-1,n(this.end==null||Number.isFinite(this.end),`invalid content-length`)}this.resume=this.end==null?null:t}onRequestSent(){this.handler.onRequestSent&&this.handler.onRequestSent()}onUpgrade(e,t,n){this.handler.onUpgrade&&this.handler.onUpgrade(e,t,n)}onConnect(e){this.aborted?e(this.reason):this.abort=e}onBodySent(e){if(this.handler.onBodySent)return this.handler.onBodySent(e)}static[r](e,{state:t,opts:n},r){let{statusCode:i,code:a,headers:o}=e,{method:s,retryOptions:c}=n,{maxRetries:u,minTimeout:d,maxTimeout:f,timeoutFactor:p,statusCodes:m,errorCodes:h,methods:g}=c,{counter:_}=t;if(a&&a!==`UND_ERR_REQ_RETRY`&&!h.includes(a)||Array.isArray(g)&&!g.includes(s)||i!=null&&Array.isArray(m)&&!m.includes(i)||_>u){r(e);return}let v=o?.[`retry-after`];v&&=(v=Number(v),Number.isNaN(v)?l(v):v*1e3);let y=Math.min(v>0?v:d*p**(_-1),f);setTimeout(()=>r(null),y)}onHeaders(e,t,r,a){let c=o(t);if(this.retryCount+=1,e>=300)return!this.headersSent&&this.retryOpts.statusCodes.includes(e)===!1?(this.headersSent=!0,this.checkpointResponseEnd(c,r),this.handler.onHeaders(e,t,r,a)):(this.abort(new i(`Request failed`,e,{headers:c,data:{count:this.retryCount}})),!1);if(this.resume!=null){if(this.resume=null,e!==206&&(this.start>0||e!==200))return this.abort(new i(`server does not support the range header and the payload was partially consumed`,e,{headers:c,data:{count:this.retryCount}})),!1;let t=s(c[`content-range`]);if(!t)return this.abort(new i(`Content-Range mismatch`,e,{headers:c,data:{count:this.retryCount}})),!1;if(this.etag!=null&&this.etag!==c.etag)return this.abort(new i(`ETag mismatch`,e,{headers:c,data:{count:this.retryCount}})),!1;let n=u(c,t,e,this.retryCount);if(n!=null)return this.abort(n),!1;let{start:a,size:o,end:l=o-1}=t;return this.start!==a||this.end!=null&&this.end!==l?(this.abort(new i(`Content-Range mismatch`,e,{headers:c,data:{count:this.retryCount}})),!1):(this.resume=r,!0)}if(this.end==null){if(e===206){let i=s(c[`content-range`]);if(i==null)return this.headersSent=!0,this.handler.onHeaders(e,t,r,a);let o=u(c,i,e,this.retryCount);if(o!=null)return this.abort(o),!1;let{start:l,size:d,end:f=d-1}=i;n(l!=null&&Number.isFinite(l),`content-range mismatch`),n(f!=null&&Number.isFinite(f),`invalid content-length`),this.start=l,this.end=f}if(this.end==null){let e=c[`content-length`];this.end=e==null?null:Number(e)-1}return n(Number.isFinite(this.start)),n(this.end==null||Number.isFinite(this.end),`invalid content-length`),this.resume=r,this.headersSent=!0,this.etag=c.etag==null?null:c.etag,this.etag!=null&&this.etag.startsWith(`W/`)&&(this.etag=null),this.handler.onHeaders(e,t,r,a)}let l=new i(`Request failed`,e,{headers:c,data:{count:this.retryCount}});return this.abort(l),!1}onData(e){return this.start+=e.length,this.handler.onData(e)}onComplete(e){return this.retryCount=0,this.handler.onComplete(e)}onError(e){if(this.aborted||a(this.opts.body)||this.headersSent&&this.resume==null)return this.handler.onError(e);this.retryCount-this.retryCountCheckpoint>0?this.retryCount=this.retryCountCheckpoint+(this.retryCount-this.retryCountCheckpoint):this.retryCount+=1,this.retryOpts.retry(e,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},t.bind(this));function t(e){if(e!=null||this.aborted||a(this.opts.body))return this.handler.onError(e);if(this.start!==0){let e={range:`bytes=${this.start}-${this.end??``}`};this.etag!=null&&(e[`if-match`]=this.etag),this.opts={...this.opts,headers:{...this.opts.headers,...e}}}try{this.retryCountCheckpoint=this.retryCount,this.dispatch(this.opts,this)}catch(e){this.handler.onError(e)}}}}})),fe=/* @__PURE__ */ m(((e,t)=>{let n=j(),r=de();t.exports=class extends n{#e=null;#t=null;constructor(e,t={}){super(t),this.#e=e,this.#t=t}dispatch(e,t){let n=new r({...e,retryOptions:this.#t},{dispatch:this.#e.dispatch.bind(this.#e),handler:t});return this.#e.dispatch(e,n)}close(){return this.#e.close()}destroy(){return this.#e.destroy()}}})),pe=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),{Readable:r}=h(`node:stream`),{RequestAbortedError:i,NotSupportedError:a,InvalidArgumentError:o,AbortError:s}=T(),c=O(),{ReadableStreamFrom:l}=O(),u=Symbol(`kConsume`),d=Symbol(`kReading`),f=Symbol(`kBody`),p=Symbol(`kAbort`),m=Symbol(`kContentType`),g=Symbol(`kContentLength`),_=()=>{};var v=class extends r{constructor({resume:e,abort:t,contentType:n=``,contentLength:r,highWaterMark:i=65536}){super({autoDestroy:!0,read:e,highWaterMark:i}),this._readableState.dataEmitted=!1,this[p]=t,this[u]=null,this[f]=null,this[m]=n,this[g]=r,this[d]=!1}destroy(e){return!e&&!this._readableState.endEmitted&&(e=new i),e&&this[p](),super.destroy(e)}_destroy(e,t){this[d]?t(e):setImmediate(()=>{t(e)})}on(e,...t){return(e===`data`||e===`readable`)&&(this[d]=!0),super.on(e,...t)}addListener(e,...t){return this.on(e,...t)}off(e,...t){let n=super.off(e,...t);return(e===`data`||e===`readable`)&&(this[d]=this.listenerCount(`data`)>0||this.listenerCount(`readable`)>0),n}removeListener(e,...t){return this.off(e,...t)}push(e){return this[u]&&e!==null?(D(this[u],e),!this[d]||super.push(e)):super.push(e)}async text(){return x(this,`text`)}async json(){return x(this,`json`)}async blob(){return x(this,`blob`)}async bytes(){return x(this,`bytes`)}async arrayBuffer(){return x(this,`arrayBuffer`)}async formData(){throw new a}get bodyUsed(){return c.isDisturbed(this)}get body(){return this[f]||(this[f]=l(this),this[u]&&(this[f].getReader(),n(this[f].locked))),this[f]}async dump(e){let t=Number.isFinite(e?.limit)?e.limit:131072,n=e?.signal;if(n!=null&&(typeof n!=`object`||!(`aborted`in n)))throw new o(`signal must be an AbortSignal`);return n?.throwIfAborted(),this._readableState.closeEmitted?null:await new Promise((e,r)=>{this[g]>t&&this.destroy(new s);let i=()=>{this.destroy(n.reason??new s)};n?.addEventListener(`abort`,i),this.on(`close`,function(){n?.removeEventListener(`abort`,i),n?.aborted?r(n.reason??new s):e(null)}).on(`error`,_).on(`data`,function(e){t-=e.length,t<=0&&this.destroy()}).resume()})}};function y(e){return e[f]&&e[f].locked===!0||e[u]}function b(e){return c.isDisturbed(e)||y(e)}async function x(e,t){return n(!e[u]),new Promise((n,r)=>{if(b(e)){let t=e._readableState;t.destroyed&&t.closeEmitted===!1?e.on(`error`,e=>{r(e)}).on(`close`,()=>{r(/* @__PURE__ */ TypeError(`unusable`))}):r(t.errored??/* @__PURE__ */ TypeError(`unusable`))}else queueMicrotask(()=>{e[u]={type:t,stream:e,resolve:n,reject:r,length:0,body:[]},e.on(`error`,function(e){k(this[u],e)}).on(`close`,function(){this[u].body!==null&&k(this[u],new i)}),S(e[u])})})}function S(e){if(e.body===null)return;let{_readableState:t}=e.stream;if(t.bufferIndex){let n=t.bufferIndex,r=t.buffer.length;for(let i=n;i2&&n[0]===239&&n[1]===187&&n[2]===191?3:0;return n.utf8Slice(i,r)}function w(e,t){if(e.length===0||t===0)return/* @__PURE__ */ new Uint8Array;if(e.length===1)return new Uint8Array(e[0]);let n=new Uint8Array(Buffer.allocUnsafeSlow(t).buffer),r=0;for(let t=0;t{let n=h(`node:assert`),{ResponseStatusCodeError:r}=T(),{chunksDecode:i}=pe();async function a({callback:e,body:t,contentType:a,statusCode:c,statusMessage:l,headers:u}){n(t);let d=[],f=0;try{for await(let e of t)if(d.push(e),f+=e.length,f>131072){d=[],f=0;break}}catch{d=[],f=0}let p=`Response status code ${c}${l?`: ${l}`:``}`;if(c===204||!a||!f){queueMicrotask(()=>e(new r(p,c,u)));return}let m=Error.stackTraceLimit;Error.stackTraceLimit=0;let h;try{o(a)?h=JSON.parse(i(d,f)):s(a)&&(h=i(d,f))}catch{}finally{Error.stackTraceLimit=m}queueMicrotask(()=>e(new r(p,c,u,h)))}let o=e=>e.length>15&&e[11]===`/`&&e[0]===`a`&&e[1]===`p`&&e[2]===`p`&&e[3]===`l`&&e[4]===`i`&&e[5]===`c`&&e[6]===`a`&&e[7]===`t`&&e[8]===`i`&&e[9]===`o`&&e[10]===`n`&&e[12]===`j`&&e[13]===`s`&&e[14]===`o`&&e[15]===`n`,s=e=>e.length>4&&e[4]===`/`&&e[0]===`t`&&e[1]===`e`&&e[2]===`x`&&e[3]===`t`;t.exports={getResolveErrorBodyCallback:a,isContentTypeApplicationJson:o,isContentTypeText:s}})),he=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),{Readable:r}=pe(),{InvalidArgumentError:i,RequestAbortedError:a}=T(),o=O(),{getResolveErrorBodyCallback:s}=me(),{AsyncResource:c}=h(`node:async_hooks`);var l=class extends c{constructor(e,t){if(!e||typeof e!=`object`)throw new i(`invalid opts`);let{signal:n,method:r,opaque:s,body:c,onInfo:l,responseHeaders:u,throwOnError:d,highWaterMark:f}=e;try{if(typeof t!=`function`)throw new i(`invalid callback`);if(f&&(typeof f!=`number`||f<0))throw new i(`invalid highWaterMark`);if(n&&typeof n.on!=`function`&&typeof n.addEventListener!=`function`)throw new i(`signal must be an EventEmitter or EventTarget`);if(r===`CONNECT`)throw new i(`invalid method`);if(l&&typeof l!=`function`)throw new i(`invalid onInfo callback`);super(`UNDICI_REQUEST`)}catch(e){throw o.isStream(c)&&o.destroy(c.on(`error`,o.nop),e),e}this.method=r,this.responseHeaders=u||null,this.opaque=s||null,this.callback=t,this.res=null,this.abort=null,this.body=c,this.trailers={},this.context=null,this.onInfo=l||null,this.throwOnError=d,this.highWaterMark=f,this.signal=n,this.reason=null,this.removeAbortListener=null,o.isStream(c)&&c.on(`error`,e=>{this.onError(e)}),this.signal&&(this.signal.aborted?this.reason=this.signal.reason??new a:this.removeAbortListener=o.addAbortListener(this.signal,()=>{this.reason=this.signal.reason??new a,this.res?o.destroy(this.res.on(`error`,o.nop),this.reason):this.abort&&this.abort(this.reason),this.removeAbortListener&&=(this.res?.off(`close`,this.removeAbortListener),this.removeAbortListener(),null)}))}onConnect(e,t){this.reason?e(this.reason):(n(this.callback),this.abort=e,this.context=t)}onHeaders(e,t,n,i){let{callback:a,opaque:c,abort:l,context:u,responseHeaders:d,highWaterMark:f}=this,p=d===`raw`?o.parseRawHeaders(t):o.parseHeaders(t);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:p});return}let m=d===`raw`?o.parseHeaders(t):p,h=m[`content-type`],g=m[`content-length`],_=new r({resume:n,abort:l,contentType:h,contentLength:this.method!==`HEAD`&&g?Number(g):null,highWaterMark:f});this.removeAbortListener&&_.on(`close`,this.removeAbortListener),this.callback=null,this.res=_,a!==null&&(this.throwOnError&&e>=400?this.runInAsyncScope(s,null,{callback:a,body:_,contentType:h,statusCode:e,statusMessage:i,headers:p}):this.runInAsyncScope(a,null,null,{statusCode:e,headers:p,trailers:this.trailers,opaque:c,body:_,context:u}))}onData(e){return this.res.push(e)}onComplete(e){o.parseHeaders(e,this.trailers),this.res.push(null)}onError(e){let{res:t,callback:n,body:r,opaque:i}=this;n&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(n,null,e,{opaque:i})})),t&&(this.res=null,queueMicrotask(()=>{o.destroy(t,e)})),r&&(this.body=null,o.destroy(r,e)),this.removeAbortListener&&=(t?.off(`close`,this.removeAbortListener),this.removeAbortListener(),null)}};function u(e,t){if(t===void 0)return new Promise((t,n)=>{u.call(this,e,(e,r)=>e?n(e):t(r))});try{this.dispatch(e,new l(e,t))}catch(n){if(typeof t!=`function`)throw n;let r=e?.opaque;queueMicrotask(()=>t(n,{opaque:r}))}}t.exports=u,t.exports.RequestHandler=l})),ge=/* @__PURE__ */ m(((e,t)=>{let{addAbortListener:n}=O(),{RequestAbortedError:r}=T(),i=Symbol(`kListener`),a=Symbol(`kSignal`);function o(e){e.abort?e.abort(e[a]?.reason):e.reason=e[a]?.reason??new r,c(e)}function s(e,t){e.reason=null,e[a]=null,e[i]=null,t&&(t.aborted?o(e):(e[a]=t,e[i]=()=>{o(e)},n(e[a],e[i])))}function c(e){e[a]&&(`removeEventListener`in e[a]?e[a].removeEventListener(`abort`,e[i]):e[a].removeListener(`abort`,e[i]),e[a]=null,e[i]=null)}t.exports={addSignal:s,removeSignal:c}})),_e=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),{finished:r,PassThrough:i}=h(`node:stream`),{InvalidArgumentError:a,InvalidReturnValueError:o}=T(),s=O(),{getResolveErrorBodyCallback:c}=me(),{AsyncResource:l}=h(`node:async_hooks`),{addSignal:u,removeSignal:d}=ge();var f=class extends l{constructor(e,t,n){if(!e||typeof e!=`object`)throw new a(`invalid opts`);let{signal:r,method:i,opaque:o,body:c,onInfo:l,responseHeaders:d,throwOnError:f}=e;try{if(typeof n!=`function`)throw new a(`invalid callback`);if(typeof t!=`function`)throw new a(`invalid factory`);if(r&&typeof r.on!=`function`&&typeof r.addEventListener!=`function`)throw new a(`signal must be an EventEmitter or EventTarget`);if(i===`CONNECT`)throw new a(`invalid method`);if(l&&typeof l!=`function`)throw new a(`invalid onInfo callback`);super(`UNDICI_STREAM`)}catch(e){throw s.isStream(c)&&s.destroy(c.on(`error`,s.nop),e),e}this.responseHeaders=d||null,this.opaque=o||null,this.factory=t,this.callback=n,this.res=null,this.abort=null,this.context=null,this.trailers=null,this.body=c,this.onInfo=l||null,this.throwOnError=f||!1,s.isStream(c)&&c.on(`error`,e=>{this.onError(e)}),u(this,r)}onConnect(e,t){this.reason?e(this.reason):(n(this.callback),this.abort=e,this.context=t)}onHeaders(e,t,n,a){let{factory:l,opaque:u,context:d,callback:f,responseHeaders:p}=this,m=p===`raw`?s.parseRawHeaders(t):s.parseHeaders(t);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:m});return}this.factory=null;let h;if(this.throwOnError&&e>=400){let n=(p===`raw`?s.parseHeaders(t):m)[`content-type`];h=new i,this.callback=null,this.runInAsyncScope(c,null,{callback:f,body:h,contentType:n,statusCode:e,statusMessage:a,headers:m})}else{if(l===null)return;if(h=this.runInAsyncScope(l,null,{statusCode:e,headers:m,opaque:u,context:d}),!h||typeof h.write!=`function`||typeof h.end!=`function`||typeof h.on!=`function`)throw new o(`expected Writable`);r(h,{readable:!1},e=>{let{callback:t,res:n,opaque:r,trailers:i,abort:a}=this;this.res=null,(e||!n.readable)&&s.destroy(n,e),this.callback=null,this.runInAsyncScope(t,null,e||null,{opaque:r,trailers:i}),e&&a()})}return h.on(`drain`,n),this.res=h,(h.writableNeedDrain===void 0?h._writableState?.needDrain:h.writableNeedDrain)!==!0}onData(e){let{res:t}=this;return!t||t.write(e)}onComplete(e){let{res:t}=this;d(this),t&&(this.trailers=s.parseHeaders(e),t.end())}onError(e){let{res:t,callback:n,opaque:r,body:i}=this;d(this),this.factory=null,t?(this.res=null,s.destroy(t,e)):n&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(n,null,e,{opaque:r})})),i&&(this.body=null,s.destroy(i,e))}};function p(e,t,n){if(n===void 0)return new Promise((n,r)=>{p.call(this,e,t,(e,t)=>e?r(e):n(t))});try{this.dispatch(e,new f(e,t,n))}catch(t){if(typeof n!=`function`)throw t;let r=e?.opaque;queueMicrotask(()=>n(t,{opaque:r}))}}t.exports=p})),ve=/* @__PURE__ */ m(((e,t)=>{let{Readable:n,Duplex:r,PassThrough:i}=h(`node:stream`),{InvalidArgumentError:a,InvalidReturnValueError:o,RequestAbortedError:s}=T(),c=O(),{AsyncResource:l}=h(`node:async_hooks`),{addSignal:u,removeSignal:d}=ge(),f=h(`node:assert`),p=Symbol(`resume`);var m=class extends n{constructor(){super({autoDestroy:!0}),this[p]=null}_read(){let{[p]:e}=this;e&&(this[p]=null,e())}_destroy(e,t){this._read(),t(e)}},g=class extends n{constructor(e){super({autoDestroy:!0}),this[p]=e}_read(){this[p]()}_destroy(e,t){!e&&!this._readableState.endEmitted&&(e=new s),t(e)}},_=class extends l{constructor(e,t){if(!e||typeof e!=`object`)throw new a(`invalid opts`);if(typeof t!=`function`)throw new a(`invalid handler`);let{signal:n,method:i,opaque:o,onInfo:l,responseHeaders:f}=e;if(n&&typeof n.on!=`function`&&typeof n.addEventListener!=`function`)throw new a(`signal must be an EventEmitter or EventTarget`);if(i===`CONNECT`)throw new a(`invalid method`);if(l&&typeof l!=`function`)throw new a(`invalid onInfo callback`);super(`UNDICI_PIPELINE`),this.opaque=o||null,this.responseHeaders=f||null,this.handler=t,this.abort=null,this.context=null,this.onInfo=l||null,this.req=new m().on(`error`,c.nop),this.ret=new r({readableObjectMode:e.objectMode,autoDestroy:!0,read:()=>{let{body:e}=this;e?.resume&&e.resume()},write:(e,t,n)=>{let{req:r}=this;r.push(e,t)||r._readableState.destroyed?n():r[p]=n},destroy:(e,t)=>{let{body:n,req:r,res:i,ret:a,abort:o}=this;!e&&!a._readableState.endEmitted&&(e=new s),o&&e&&o(),c.destroy(n,e),c.destroy(r,e),c.destroy(i,e),d(this),t(e)}}).on(`prefinish`,()=>{let{req:e}=this;e.push(null)}),this.res=null,u(this,n)}onConnect(e,t){let{ret:n,res:r}=this;this.reason?e(this.reason):(f(!r,`pipeline cannot be retried`),f(!n.destroyed),this.abort=e,this.context=t)}onHeaders(e,t,n){let{opaque:r,handler:i,context:a}=this;if(e<200){if(this.onInfo){let n=this.responseHeaders===`raw`?c.parseRawHeaders(t):c.parseHeaders(t);this.onInfo({statusCode:e,headers:n})}return}this.res=new g(n);let l;try{this.handler=null;let n=this.responseHeaders===`raw`?c.parseRawHeaders(t):c.parseHeaders(t);l=this.runInAsyncScope(i,null,{statusCode:e,headers:n,opaque:r,body:this.res,context:a})}catch(e){throw this.res.on(`error`,c.nop),e}if(!l||typeof l.on!=`function`)throw new o(`expected Readable`);l.on(`data`,e=>{let{ret:t,body:n}=this;!t.push(e)&&n.pause&&n.pause()}).on(`error`,e=>{let{ret:t}=this;c.destroy(t,e)}).on(`end`,()=>{let{ret:e}=this;e.push(null)}).on(`close`,()=>{let{ret:e}=this;e._readableState.ended||c.destroy(e,new s)}),this.body=l}onData(e){let{res:t}=this;return t.push(e)}onComplete(e){let{res:t}=this;t.push(null)}onError(e){let{ret:t}=this;this.handler=null,c.destroy(t,e)}};function v(e,t){try{let n=new _(e,t);return this.dispatch({...e,body:n.req},n),n.ret}catch(e){return new i().destroy(e)}}t.exports=v})),Z=/* @__PURE__ */ m(((e,t)=>{let{InvalidArgumentError:n,SocketError:r}=T(),{AsyncResource:i}=h(`node:async_hooks`),a=O(),{addSignal:o,removeSignal:s}=ge(),c=h(`node:assert`);var l=class extends i{constructor(e,t){if(!e||typeof e!=`object`)throw new n(`invalid opts`);if(typeof t!=`function`)throw new n(`invalid callback`);let{signal:r,opaque:i,responseHeaders:a}=e;if(r&&typeof r.on!=`function`&&typeof r.addEventListener!=`function`)throw new n(`signal must be an EventEmitter or EventTarget`);super(`UNDICI_UPGRADE`),this.responseHeaders=a||null,this.opaque=i||null,this.callback=t,this.abort=null,this.context=null,o(this,r)}onConnect(e,t){this.reason?e(this.reason):(c(this.callback),this.abort=e,this.context=null)}onHeaders(){throw new r(`bad upgrade`,null)}onUpgrade(e,t,n){c(e===101);let{callback:r,opaque:i,context:o}=this;s(this),this.callback=null;let l=this.responseHeaders===`raw`?a.parseRawHeaders(t):a.parseHeaders(t);this.runInAsyncScope(r,null,null,{headers:l,socket:n,opaque:i,context:o})}onError(e){let{callback:t,opaque:n}=this;s(this),t&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(t,null,e,{opaque:n})}))}};function u(e,t){if(t===void 0)return new Promise((t,n)=>{u.call(this,e,(e,r)=>e?n(e):t(r))});try{let n=new l(e,t);this.dispatch({...e,method:e.method||`GET`,upgrade:e.protocol||`Websocket`},n)}catch(n){if(typeof t!=`function`)throw n;let r=e?.opaque;queueMicrotask(()=>t(n,{opaque:r}))}}t.exports=u})),ye=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),{AsyncResource:r}=h(`node:async_hooks`),{InvalidArgumentError:i,SocketError:a}=T(),o=O(),{addSignal:s,removeSignal:c}=ge();var l=class extends r{constructor(e,t){if(!e||typeof e!=`object`)throw new i(`invalid opts`);if(typeof t!=`function`)throw new i(`invalid callback`);let{signal:n,opaque:r,responseHeaders:a}=e;if(n&&typeof n.on!=`function`&&typeof n.addEventListener!=`function`)throw new i(`signal must be an EventEmitter or EventTarget`);super(`UNDICI_CONNECT`),this.opaque=r||null,this.responseHeaders=a||null,this.callback=t,this.abort=null,s(this,n)}onConnect(e,t){this.reason?e(this.reason):(n(this.callback),this.abort=e,this.context=t)}onHeaders(){throw new a(`bad connect`,null)}onUpgrade(e,t,n){let{callback:r,opaque:i,context:a}=this;c(this),this.callback=null;let s=t;s!=null&&(s=this.responseHeaders===`raw`?o.parseRawHeaders(t):o.parseHeaders(t)),this.runInAsyncScope(r,null,null,{statusCode:e,headers:s,socket:n,opaque:i,context:a})}onError(e){let{callback:t,opaque:n}=this;c(this),t&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(t,null,e,{opaque:n})}))}};function u(e,t){if(t===void 0)return new Promise((t,n)=>{u.call(this,e,(e,r)=>e?n(e):t(r))});try{let n=new l(e,t);this.dispatch({...e,method:`CONNECT`},n)}catch(n){if(typeof t!=`function`)throw n;let r=e?.opaque;queueMicrotask(()=>t(n,{opaque:r}))}}t.exports=u})),be=/* @__PURE__ */ m(((e,t)=>{t.exports.request=he(),t.exports.stream=_e(),t.exports.pipeline=ve(),t.exports.upgrade=Z(),t.exports.connect=ye()})),Q=/* @__PURE__ */ m(((e,t)=>{let{UndiciError:n}=T(),r=Symbol.for(`undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED`);t.exports={MockNotMatchedError:class e extends n{constructor(t){super(t),Error.captureStackTrace(this,e),this.name=`MockNotMatchedError`,this.message=t||`The request does not match any registered mock dispatches`,this.code=`UND_MOCK_ERR_MOCK_NOT_MATCHED`}static[Symbol.hasInstance](e){return e&&e[r]===!0}[r]=!0}}})),xe=/* @__PURE__ */ m(((e,t)=>{t.exports={kAgent:Symbol(`agent`),kOptions:Symbol(`options`),kFactory:Symbol(`factory`),kDispatches:Symbol(`dispatches`),kDispatchKey:Symbol(`dispatch key`),kDefaultHeaders:Symbol(`default headers`),kDefaultTrailers:Symbol(`default trailers`),kContentLength:Symbol(`content length`),kMockAgent:Symbol(`mock agent`),kMockAgentSet:Symbol(`mock agent set`),kMockAgentGet:Symbol(`mock agent get`),kMockDispatch:Symbol(`mock dispatch`),kClose:Symbol(`close`),kOriginalClose:Symbol(`original agent close`),kOrigin:Symbol(`origin`),kIsMockActive:Symbol(`is mock active`),kNetConnect:Symbol(`net connect`),kGetNetConnect:Symbol(`get net connect`),kConnected:Symbol(`connected`)}})),Se=/* @__PURE__ */ m(((e,t)=>{let{MockNotMatchedError:n}=Q(),{kDispatches:r,kMockAgent:i,kOriginalDispatch:a,kOrigin:o,kGetNetConnect:s}=xe(),{buildURL:c}=O(),{STATUS_CODES:l}=h(`node:http`),{types:{isPromise:u}}=h(`node:util`);function d(e,t){return typeof e==`string`?e===t:e instanceof RegExp?e.test(t):typeof e==`function`&&e(t)===!0}function f(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e.toLocaleLowerCase(),t]))}function p(e,t){if(Array.isArray(e)){for(let n=0;n!e).filter(({path:e})=>d(_(e),i));if(a.length===0)throw new n(`Mock dispatch not matched for path '${i}'`);if(a=a.filter(({method:e})=>d(e,t.method)),a.length===0)throw new n(`Mock dispatch not matched for method '${t.method}' on path '${i}'`);if(a=a.filter(({body:e})=>e===void 0||d(e,t.body)),a.length===0)throw new n(`Mock dispatch not matched for body '${t.body}' on path '${i}'`);if(a=a.filter(e=>g(e,t.headers)),a.length===0){let e=typeof t.headers==`object`?JSON.stringify(t.headers):t.headers;throw new n(`Mock dispatch not matched for headers '${e}' on path '${i}'`)}return a[0]}function x(e,t,n){let r={timesInvoked:0,times:1,persist:!1,consumed:!1},i=typeof n==`function`?{callback:n}:{...n},a={...r,...t,pending:!0,data:{error:null,...i}};return e.push(a),a}function S(e,t){let n=e.findIndex(e=>e.consumed?v(e,t):!1);n!==-1&&e.splice(n,1)}function C(e){let{path:t,method:n,body:r,headers:i,query:a}=e;return{path:t,method:n,body:r,headers:i,query:a}}function w(e){let t=Object.keys(e),n=[];for(let r=0;r=h,i.pending=p0?setTimeout(()=>{g(this[r])},d):g(this[r]);function g(r,i=o){let l=Array.isArray(e.headers)?m(e.headers):e.headers,d=typeof i==`function`?i({...e,headers:l}):i;if(u(d)){d.then(e=>g(r,e));return}let f=y(d),p=w(s),h=w(c);t.onConnect?.(e=>t.onError(e),null),t.onHeaders?.(a,p,_,T(a)),t.onData?.(Buffer.from(f)),t.onComplete?.(h),S(r,n)}function _(){}return!0}function k(){let e=this[i],t=this[o],r=this[a];return function(i,a){if(e.isMockActive)try{D.call(this,i,a)}catch(o){if(o instanceof n){let c=e[s]();if(c===!1)throw new n(`${o.message}: subsequent request to origin ${t} was not allowed (net.connect disabled)`);if(A(c,t))r.call(this,i,a);else throw new n(`${o.message}: subsequent request to origin ${t} was not allowed (net.connect is not enabled for this origin)`)}else throw o}else r.call(this,i,a)}}function A(e,t){let n=new URL(t);return!!(e===!0||Array.isArray(e)&&e.some(e=>d(e,n.host)))}function j(e){if(e){let{agent:t,...n}=e;return n}}t.exports={getResponseData:y,getMockDispatch:b,addMockDispatch:x,deleteMockDispatch:S,buildKey:C,generateKeyValues:w,matchValue:d,getResponse:E,getStatusText:T,mockDispatch:D,buildMockDispatch:k,checkNetConnect:A,buildMockOptions:j,getHeaderByName:p,buildHeadersFromArray:m}})),Ce=/* @__PURE__ */ m(((e,t)=>{let{getResponseData:n,buildKey:r,addMockDispatch:i}=Se(),{kDispatches:a,kDispatchKey:o,kDefaultHeaders:s,kDefaultTrailers:c,kContentLength:l,kMockDispatch:u}=xe(),{InvalidArgumentError:d}=T(),{buildURL:f}=O();var p=class{constructor(e){this[u]=e}delay(e){if(typeof e!=`number`||!Number.isInteger(e)||e<=0)throw new d(`waitInMs must be a valid integer > 0`);return this[u].delay=e,this}persist(){return this[u].persist=!0,this}times(e){if(typeof e!=`number`||!Number.isInteger(e)||e<=0)throw new d(`repeatTimes must be a valid integer > 0`);return this[u].times=e,this}},m=class{constructor(e,t){if(typeof e!=`object`)throw new d(`opts must be an object`);if(e.path===void 0)throw new d(`opts.path must be defined`);if(e.method===void 0&&(e.method=`GET`),typeof e.path==`string`){if(e.query)e.path=f(e.path,e.query);else{let t=new URL(e.path,`data://`);e.path=t.pathname+t.search}}typeof e.method==`string`&&(e.method=e.method.toUpperCase()),this[o]=r(e),this[a]=t,this[s]={},this[c]={},this[l]=!1}createMockScopeDispatchData({statusCode:e,data:t,responseOptions:r}){let i=n(t),a=this[l]?{"content-length":i.length}:{};return{statusCode:e,data:t,headers:{...this[s],...a,...r.headers},trailers:{...this[c],...r.trailers}}}validateReplyParameters(e){if(e.statusCode===void 0)throw new d(`statusCode must be defined`);if(typeof e.responseOptions!=`object`||e.responseOptions===null)throw new d(`responseOptions must be an object`)}reply(e){if(typeof e==`function`)return new p(i(this[a],this[o],t=>{let n=e(t);if(typeof n!=`object`||!n)throw new d(`reply options callback must return an object`);let r={data:``,responseOptions:{},...n};return this.validateReplyParameters(r),{...this.createMockScopeDispatchData(r)}}));let t={statusCode:e,data:arguments[1]===void 0?``:arguments[1],responseOptions:arguments[2]===void 0?{}:arguments[2]};this.validateReplyParameters(t);let n=this.createMockScopeDispatchData(t);return new p(i(this[a],this[o],n))}replyWithError(e){if(e===void 0)throw new d(`error must be defined`);return new p(i(this[a],this[o],{error:e}))}defaultReplyHeaders(e){if(e===void 0)throw new d(`headers must be defined`);return this[s]=e,this}defaultReplyTrailers(e){if(e===void 0)throw new d(`trailers must be defined`);return this[c]=e,this}replyContentLength(){return this[l]=!0,this}};t.exports.MockInterceptor=m,t.exports.MockScope=p})),we=/* @__PURE__ */ m(((e,t)=>{let{promisify:n}=h(`node:util`),r=K(),{buildMockDispatch:i}=Se(),{kDispatches:a,kMockAgent:o,kClose:s,kOriginalClose:c,kOrigin:l,kOriginalDispatch:u,kConnected:d}=xe(),{MockInterceptor:f}=Ce(),p=w(),{InvalidArgumentError:m}=T();t.exports=class extends r{constructor(e,t){if(super(e,t),!t||!t.agent||typeof t.agent.dispatch!=`function`)throw new m(`Argument opts.agent must implement Agent`);this[o]=t.agent,this[l]=e,this[a]=[],this[d]=1,this[u]=this.dispatch,this[c]=this.close.bind(this),this.dispatch=i.call(this),this.close=this[s]}get[p.kConnected](){return this[d]}intercept(e){return new f(e,this[a])}async[s](){await n(this[c])(),this[d]=0,this[o][p.kClients].delete(this[l])}}})),Te=/* @__PURE__ */ m(((e,t)=>{let{promisify:n}=h(`node:util`),r=ce(),{buildMockDispatch:i}=Se(),{kDispatches:a,kMockAgent:o,kClose:s,kOriginalClose:c,kOrigin:l,kOriginalDispatch:u,kConnected:d}=xe(),{MockInterceptor:f}=Ce(),p=w(),{InvalidArgumentError:m}=T();t.exports=class extends r{constructor(e,t){if(super(e,t),!t||!t.agent||typeof t.agent.dispatch!=`function`)throw new m(`Argument opts.agent must implement Agent`);this[o]=t.agent,this[l]=e,this[a]=[],this[d]=1,this[u]=this.dispatch,this[c]=this.close.bind(this),this.dispatch=i.call(this),this.close=this[s]}get[p.kConnected](){return this[d]}intercept(e){return new f(e,this[a])}async[s](){await n(this[c])(),this[d]=0,this[o][p.kClients].delete(this[l])}}})),Ee=/* @__PURE__ */ m(((e,t)=>{let n={pronoun:`it`,is:`is`,was:`was`,this:`this`},r={pronoun:`they`,is:`are`,was:`were`,this:`these`};t.exports=class{constructor(e,t){this.singular=e,this.plural=t}pluralize(e){let t=e===1,i=t?n:r,a=t?this.singular:this.plural;return{...i,count:e,noun:a}}}})),De=/* @__PURE__ */ m(((e,t)=>{let{Transform:n}=h(`node:stream`),{Console:r}=h(`node:console`),i=process.versions.icu?`✅`:`Y `,a=process.versions.icu?`❌`:`N `;t.exports=class{constructor({disableColors:e}={}){this.transform=new n({transform(e,t,n){n(null,e)}}),this.logger=new r({stdout:this.transform,inspectOptions:{colors:!e&&!process.env.CI}})}format(e){let t=e.map(({method:e,path:t,data:{statusCode:n},persist:r,times:o,timesInvoked:s,origin:c})=>({Method:e,Origin:c,Path:t,"Status code":n,Persistent:r?i:a,Invocations:s,Remaining:r?1/0:o-s}));return this.logger.table(t),this.transform.read().toString()}}})),Oe=/* @__PURE__ */ m(((e,t)=>{let{kClients:n}=w(),r=le(),{kAgent:i,kMockAgentSet:a,kMockAgentGet:o,kDispatches:s,kIsMockActive:c,kNetConnect:l,kGetNetConnect:u,kOptions:d,kFactory:f}=xe(),p=we(),m=Te(),{matchValue:h,buildMockOptions:g}=Se(),{InvalidArgumentError:_,UndiciError:v}=T(),y=j(),b=Ee(),x=De();t.exports=class extends y{constructor(e){if(super(e),this[l]=!0,this[c]=!0,e?.agent&&typeof e.agent.dispatch!=`function`)throw new _(`Argument opts.agent must implement Agent`);let t=e?.agent?e.agent:new r(e);this[i]=t,this[n]=t[n],this[d]=g(e)}get(e){let t=this[o](e);return t||(t=this[f](e),this[a](e,t)),t}dispatch(e,t){return this.get(e.origin),this[i].dispatch(e,t)}async close(){await this[i].close(),this[n].clear()}deactivate(){this[c]=!1}activate(){this[c]=!0}enableNetConnect(e){if(typeof e==`string`||typeof e==`function`||e instanceof RegExp)Array.isArray(this[l])?this[l].push(e):this[l]=[e];else if(e===void 0)this[l]=!0;else throw new _(`Unsupported matcher. Must be one of String|Function|RegExp.`)}disableNetConnect(){this[l]=!1}get isMockActive(){return this[c]}[a](e,t){this[n].set(e,t)}[f](e){let t=Object.assign({agent:this},this[d]);return this[d]&&this[d].connections===1?new p(e,t):new m(e,t)}[o](e){let t=this[n].get(e);if(t)return t;if(typeof e!=`string`){let t=this[f](`http://localhost:9999`);return this[a](e,t),t}for(let[t,r]of Array.from(this[n]))if(r&&typeof t!=`string`&&h(t,e)){let t=this[f](e);return this[a](e,t),t[s]=r[s],t}}[u](){return this[l]}pendingInterceptors(){let e=this[n];return Array.from(e.entries()).flatMap(([e,t])=>t[s].map(t=>({...t,origin:e}))).filter(({pending:e})=>e)}assertNoPendingInterceptors({pendingInterceptorsFormatter:e=new x}={}){let t=this.pendingInterceptors();if(t.length===0)return;let n=new b(`interceptor`,`interceptors`).pluralize(t.length);throw new v(` ${n.count} ${n.noun} ${n.is} pending: ${e.format(t)} -`.trim())}}})),Ae=/* @__PURE__ */ m(((e,t)=>{let n=Symbol.for(`undici.globalDispatcher.1`),{InvalidArgumentError:r}=T(),i=ue();o()===void 0&&a(new i);function a(e){if(!e||typeof e.dispatch!=`function`)throw new r(`Argument agent must implement Agent`);Object.defineProperty(globalThis,n,{value:e,writable:!0,enumerable:!1,configurable:!1})}function o(){return globalThis[n]}t.exports={setGlobalDispatcher:a,getGlobalDispatcher:o}})),je=/* @__PURE__ */ m(((e,t)=>{t.exports=class{#e;constructor(e){if(typeof e!=`object`||!e)throw TypeError(`handler must be an object`);this.#e=e}onConnect(...e){return this.#e.onConnect?.(...e)}onError(...e){return this.#e.onError?.(...e)}onUpgrade(...e){return this.#e.onUpgrade?.(...e)}onResponseStarted(...e){return this.#e.onResponseStarted?.(...e)}onHeaders(...e){return this.#e.onHeaders?.(...e)}onData(...e){return this.#e.onData?.(...e)}onComplete(...e){return this.#e.onComplete?.(...e)}onBodySent(...e){return this.#e.onBodySent?.(...e)}}})),Me=/* @__PURE__ */ m(((e,t)=>{let n=W();t.exports=e=>{let t=e?.maxRedirections;return e=>function(r,i){let{maxRedirections:a=t,...o}=r;return a?e(o,new n(e,a,r,i)):e(r,i)}}})),Ne=/* @__PURE__ */ m(((e,t)=>{let n=fe();t.exports=e=>t=>function(r,i){return t(r,new n({...r,retryOptions:{...e,...r.retryOptions}},{handler:i,dispatch:t}))}})),Pe=/* @__PURE__ */ m(((e,t)=>{let n=O(),{InvalidArgumentError:r,RequestAbortedError:i}=T(),a=je();var o=class extends a{#e=1048576;#t=null;#n=!1;#r=!1;#i=0;#a=null;#o=null;constructor({maxSize:e},t){if(super(t),e!=null&&(!Number.isFinite(e)||e<1))throw new r(`maxSize must be a number greater than 0`);this.#e=e??this.#e,this.#o=t}onConnect(e){this.#t=e,this.#o.onConnect(this.#s.bind(this))}#s(e){this.#r=!0,this.#a=e}onHeaders(e,t,r,a){let o=n.parseHeaders(t)[`content-length`];if(o!=null&&o>this.#e)throw new i(`Response size (${o}) larger than maxSize (${this.#e})`);return this.#r?!0:this.#o.onHeaders(e,t,r,a)}onError(e){this.#n||(e=this.#a??e,this.#o.onError(e))}onData(e){return this.#i+=e.length,this.#i>=this.#e&&(this.#n=!0,this.#r?this.#o.onError(this.#a):this.#o.onComplete([])),!0}onComplete(e){this.#n||(this.#r?this.#o.onError(this.reason):this.#o.onComplete(e))}};function s({maxSize:e}={maxSize:1048576}){return t=>function(n,r){let{dumpMaxSize:i=e}=n;return t(n,new o({maxSize:i},r))}}t.exports=s})),Fe=/* @__PURE__ */ m(((e,t)=>{let{isIP:n}=h(`node:net`),{lookup:r}=h(`node:dns`),i=je(),{InvalidArgumentError:a,InformationalError:o}=T(),s=2**31-1;var c=class{#e=0;#t=0;#n=/* @__PURE__ */ new Map;dualStack=!0;affinity=null;lookup=null;pick=null;constructor(e){this.#e=e.maxTTL,this.#t=e.maxItems,this.dualStack=e.dualStack,this.affinity=e.affinity,this.lookup=e.lookup??this.#r,this.pick=e.pick??this.#i}get full(){return this.#n.size===this.#t}runLookup(e,t,n){let r=this.#n.get(e.hostname);if(r==null&&this.full){n(null,e.origin);return}let i={affinity:this.affinity,dualStack:this.dualStack,lookup:this.lookup,pick:this.pick,...t.dns,maxTTL:this.#e,maxItems:this.#t};if(r==null)this.lookup(e,i,(t,r)=>{if(t||r==null||r.length===0){n(t??new o(`No DNS entries found`));return}this.setRecords(e,r);let a=this.#n.get(e.hostname),s=this.pick(e,a,i.affinity),c;c=typeof s.port==`number`?`:${s.port}`:e.port===``?``:`:${e.port}`,n(null,`${e.protocol}//${s.family===6?`[${s.address}]`:s.address}${c}`)});else{let a=this.pick(e,r,i.affinity);if(a==null){this.#n.delete(e.hostname),this.runLookup(e,t,n);return}let o;o=typeof a.port==`number`?`:${a.port}`:e.port===``?``:`:${e.port}`,n(null,`${e.protocol}//${a.family===6?`[${a.address}]`:a.address}${o}`)}}#r(e,t,n){r(e.hostname,{all:!0,family:this.dualStack===!1?this.affinity:0,order:`ipv4first`},(e,t)=>{if(e)return n(e);let r=/* @__PURE__ */ new Map;for(let e of t)r.set(`${e.address}:${e.family}`,e);n(null,r.values())})}#i(e,t,n){let r=null,{records:i,offset:a}=t,o;if(this.dualStack?(n??(a==null||a===s?(t.offset=0,n=4):(t.offset++,n=(t.offset&1)==1?6:4)),o=i[n]!=null&&i[n].ips.length>0?i[n]:i[n===4?6:4]):o=i[n],o==null||o.ips.length===0)return r;o.offset==null||o.offset===s?o.offset=0:o.offset++;let c=o.offset%o.ips.length;return r=o.ips[c]??null,r==null?r:Date.now()-r.timestamp>r.ttl?(o.ips.splice(c,1),this.pick(e,t,n)):r}setRecords(e,t){let n=Date.now(),r={records:{4:null,6:null}};for(let e of t){e.timestamp=n,e.ttl=typeof e.ttl==`number`?Math.min(e.ttl,this.#e):this.#e;let t=r.records[e.family]??{ips:[]};t.ips.push(e),r.records[e.family]=t}this.#n.set(e.hostname,r)}getHandler(e,t){return new l(this,e,t)}},l=class extends i{#e=null;#t=null;#n=null;#r=null;#i=null;constructor(e,{origin:t,handler:n,dispatch:r},i){super(n),this.#i=t,this.#r=n,this.#t={...i},this.#e=e,this.#n=r}onError(e){switch(e.code){case`ETIMEDOUT`:case`ECONNREFUSED`:if(this.#e.dualStack){this.#e.runLookup(this.#i,this.#t,(e,t)=>{if(e)return this.#r.onError(e);let n={...this.#t,origin:t};this.#n(n,this)});return}this.#r.onError(e);return;case`ENOTFOUND`:this.#e.deleteRecord(this.#i);default:this.#r.onError(e)}}};t.exports=e=>{if(e?.maxTTL!=null&&(typeof e?.maxTTL!=`number`||e?.maxTTL<0))throw new a(`Invalid maxTTL. Must be a positive number`);if(e?.maxItems!=null&&(typeof e?.maxItems!=`number`||e?.maxItems<1))throw new a(`Invalid maxItems. Must be a positive number and greater than zero`);if(e?.affinity!=null&&e?.affinity!==4&&e?.affinity!==6)throw new a(`Invalid affinity. Must be either 4 or 6`);if(e?.dualStack!=null&&typeof e?.dualStack!=`boolean`)throw new a(`Invalid dualStack. Must be a boolean`);if(e?.lookup!=null&&typeof e?.lookup!=`function`)throw new a(`Invalid lookup. Must be a function`);if(e?.pick!=null&&typeof e?.pick!=`function`)throw new a(`Invalid pick. Must be a function`);let t=e?.dualStack??!0,r;r=t?e?.affinity??null:e?.affinity??4;let i=new c({maxTTL:e?.maxTTL??1e4,lookup:e?.lookup??null,pick:e?.pick??null,dualStack:t,affinity:r,maxItems:e?.maxItems??1/0});return e=>function(t,r){let a=t.origin.constructor===URL?t.origin:new URL(t.origin);return n(a.hostname)===0?(i.runLookup(a,t,(n,o)=>{if(n)return r.onError(n);let s=null;s={...t,servername:a.hostname,origin:o,headers:{host:a.hostname,...t.headers}},e(s,i.getHandler({origin:a,dispatch:e,handler:r},t))}),!0):e(t,r)}}})),Ie=/* @__PURE__ */ m(((e,t)=>{let{kConstruct:n}=w(),{kEnumerableProperty:r}=O(),{iteratorMixin:i,isValidHeaderName:a,isValidHeaderValue:o}=V(),{webidl:s}=B(),c=h(`node:assert`),l=h(`node:util`),u=Symbol(`headers map`),d=Symbol(`headers map sorted`);function f(e){return e===10||e===13||e===9||e===32}function p(e){let t=0,n=e.length;for(;n>t&&f(e.charCodeAt(n-1));)--n;for(;n>t&&f(e.charCodeAt(t));)++t;return t===0&&n===e.length?e:e.substring(t,n)}function m(e,t){if(Array.isArray(t))for(let n=0;n>`,`record`]})}function g(e,t,n){if(n=p(n),!a(t))throw s.errors.invalidArgument({prefix:`Headers.append`,value:t,type:`header name`});if(!o(n))throw s.errors.invalidArgument({prefix:`Headers.append`,value:n,type:`header value`});if(b(e)===`immutable`)throw TypeError(`immutable`);return S(e).append(t,n,!1)}function _(e,t){return e[0]>1),t[s][0]<=l[0]?o=s+1:a=s;if(r!==s){for(i=r;i>o;)t[i]=t[--i];t[o]=l}} +`.trim())}}})),ke=/* @__PURE__ */ m(((e,t)=>{let n=Symbol.for(`undici.globalDispatcher.1`),{InvalidArgumentError:r}=T(),i=le();o()===void 0&&a(new i);function a(e){if(!e||typeof e.dispatch!=`function`)throw new r(`Argument agent must implement Agent`);Object.defineProperty(globalThis,n,{value:e,writable:!0,enumerable:!1,configurable:!1})}function o(){return globalThis[n]}t.exports={setGlobalDispatcher:a,getGlobalDispatcher:o}})),Ae=/* @__PURE__ */ m(((e,t)=>{t.exports=class{#e;constructor(e){if(typeof e!=`object`||!e)throw TypeError(`handler must be an object`);this.#e=e}onConnect(...e){return this.#e.onConnect?.(...e)}onError(...e){return this.#e.onError?.(...e)}onUpgrade(...e){return this.#e.onUpgrade?.(...e)}onResponseStarted(...e){return this.#e.onResponseStarted?.(...e)}onHeaders(...e){return this.#e.onHeaders?.(...e)}onData(...e){return this.#e.onData?.(...e)}onComplete(...e){return this.#e.onComplete?.(...e)}onBodySent(...e){return this.#e.onBodySent?.(...e)}}})),je=/* @__PURE__ */ m(((e,t)=>{let n=W();t.exports=e=>{let t=e?.maxRedirections;return e=>function(r,i){let{maxRedirections:a=t,...o}=r;return a?e(o,new n(e,a,r,i)):e(r,i)}}})),Me=/* @__PURE__ */ m(((e,t)=>{let n=de();t.exports=e=>t=>function(r,i){return t(r,new n({...r,retryOptions:{...e,...r.retryOptions}},{handler:i,dispatch:t}))}})),Ne=/* @__PURE__ */ m(((e,t)=>{let n=O(),{InvalidArgumentError:r,RequestAbortedError:i}=T(),a=Ae();var o=class extends a{#e=1048576;#t=null;#n=!1;#r=!1;#i=0;#a=null;#o=null;constructor({maxSize:e},t){if(super(t),e!=null&&(!Number.isFinite(e)||e<1))throw new r(`maxSize must be a number greater than 0`);this.#e=e??this.#e,this.#o=t}onConnect(e){this.#t=e,this.#o.onConnect(this.#s.bind(this))}#s(e){this.#r=!0,this.#a=e}onHeaders(e,t,r,a){let o=n.parseHeaders(t)[`content-length`];if(o!=null&&o>this.#e)throw new i(`Response size (${o}) larger than maxSize (${this.#e})`);return this.#r?!0:this.#o.onHeaders(e,t,r,a)}onError(e){this.#n||(e=this.#a??e,this.#o.onError(e))}onData(e){return this.#i+=e.length,this.#i>=this.#e&&(this.#n=!0,this.#r?this.#o.onError(this.#a):this.#o.onComplete([])),!0}onComplete(e){this.#n||(this.#r?this.#o.onError(this.reason):this.#o.onComplete(e))}};function s({maxSize:e}={maxSize:1048576}){return t=>function(n,r){let{dumpMaxSize:i=e}=n;return t(n,new o({maxSize:i},r))}}t.exports=s})),Pe=/* @__PURE__ */ m(((e,t)=>{let{isIP:n}=h(`node:net`),{lookup:r}=h(`node:dns`),i=Ae(),{InvalidArgumentError:a,InformationalError:o}=T(),s=2**31-1;var c=class{#e=0;#t=0;#n=/* @__PURE__ */ new Map;dualStack=!0;affinity=null;lookup=null;pick=null;constructor(e){this.#e=e.maxTTL,this.#t=e.maxItems,this.dualStack=e.dualStack,this.affinity=e.affinity,this.lookup=e.lookup??this.#r,this.pick=e.pick??this.#i}get full(){return this.#n.size===this.#t}runLookup(e,t,n){let r=this.#n.get(e.hostname);if(r==null&&this.full){n(null,e.origin);return}let i={affinity:this.affinity,dualStack:this.dualStack,lookup:this.lookup,pick:this.pick,...t.dns,maxTTL:this.#e,maxItems:this.#t};if(r==null)this.lookup(e,i,(t,r)=>{if(t||r==null||r.length===0){n(t??new o(`No DNS entries found`));return}this.setRecords(e,r);let a=this.#n.get(e.hostname),s=this.pick(e,a,i.affinity),c;c=typeof s.port==`number`?`:${s.port}`:e.port===``?``:`:${e.port}`,n(null,`${e.protocol}//${s.family===6?`[${s.address}]`:s.address}${c}`)});else{let a=this.pick(e,r,i.affinity);if(a==null){this.#n.delete(e.hostname),this.runLookup(e,t,n);return}let o;o=typeof a.port==`number`?`:${a.port}`:e.port===``?``:`:${e.port}`,n(null,`${e.protocol}//${a.family===6?`[${a.address}]`:a.address}${o}`)}}#r(e,t,n){r(e.hostname,{all:!0,family:this.dualStack===!1?this.affinity:0,order:`ipv4first`},(e,t)=>{if(e)return n(e);let r=/* @__PURE__ */ new Map;for(let e of t)r.set(`${e.address}:${e.family}`,e);n(null,r.values())})}#i(e,t,n){let r=null,{records:i,offset:a}=t,o;if(this.dualStack?(n??(a==null||a===s?(t.offset=0,n=4):(t.offset++,n=(t.offset&1)==1?6:4)),o=i[n]!=null&&i[n].ips.length>0?i[n]:i[n===4?6:4]):o=i[n],o==null||o.ips.length===0)return r;o.offset==null||o.offset===s?o.offset=0:o.offset++;let c=o.offset%o.ips.length;return r=o.ips[c]??null,r==null?r:Date.now()-r.timestamp>r.ttl?(o.ips.splice(c,1),this.pick(e,t,n)):r}setRecords(e,t){let n=Date.now(),r={records:{4:null,6:null}};for(let e of t){e.timestamp=n,e.ttl=typeof e.ttl==`number`?Math.min(e.ttl,this.#e):this.#e;let t=r.records[e.family]??{ips:[]};t.ips.push(e),r.records[e.family]=t}this.#n.set(e.hostname,r)}getHandler(e,t){return new l(this,e,t)}},l=class extends i{#e=null;#t=null;#n=null;#r=null;#i=null;constructor(e,{origin:t,handler:n,dispatch:r},i){super(n),this.#i=t,this.#r=n,this.#t={...i},this.#e=e,this.#n=r}onError(e){switch(e.code){case`ETIMEDOUT`:case`ECONNREFUSED`:if(this.#e.dualStack){this.#e.runLookup(this.#i,this.#t,(e,t)=>{if(e)return this.#r.onError(e);let n={...this.#t,origin:t};this.#n(n,this)});return}this.#r.onError(e);return;case`ENOTFOUND`:this.#e.deleteRecord(this.#i);default:this.#r.onError(e)}}};t.exports=e=>{if(e?.maxTTL!=null&&(typeof e?.maxTTL!=`number`||e?.maxTTL<0))throw new a(`Invalid maxTTL. Must be a positive number`);if(e?.maxItems!=null&&(typeof e?.maxItems!=`number`||e?.maxItems<1))throw new a(`Invalid maxItems. Must be a positive number and greater than zero`);if(e?.affinity!=null&&e?.affinity!==4&&e?.affinity!==6)throw new a(`Invalid affinity. Must be either 4 or 6`);if(e?.dualStack!=null&&typeof e?.dualStack!=`boolean`)throw new a(`Invalid dualStack. Must be a boolean`);if(e?.lookup!=null&&typeof e?.lookup!=`function`)throw new a(`Invalid lookup. Must be a function`);if(e?.pick!=null&&typeof e?.pick!=`function`)throw new a(`Invalid pick. Must be a function`);let t=e?.dualStack??!0,r;r=t?e?.affinity??null:e?.affinity??4;let i=new c({maxTTL:e?.maxTTL??1e4,lookup:e?.lookup??null,pick:e?.pick??null,dualStack:t,affinity:r,maxItems:e?.maxItems??1/0});return e=>function(t,r){let a=t.origin.constructor===URL?t.origin:new URL(t.origin);return n(a.hostname)===0?(i.runLookup(a,t,(n,o)=>{if(n)return r.onError(n);let s=null;s={...t,servername:a.hostname,origin:o,headers:{host:a.hostname,...t.headers}},e(s,i.getHandler({origin:a,dispatch:e,handler:r},t))}),!0):e(t,r)}}})),Fe=/* @__PURE__ */ m(((e,t)=>{let{kConstruct:n}=w(),{kEnumerableProperty:r}=O(),{iteratorMixin:i,isValidHeaderName:a,isValidHeaderValue:o}=V(),{webidl:s}=B(),c=h(`node:assert`),l=h(`node:util`),u=Symbol(`headers map`),d=Symbol(`headers map sorted`);function f(e){return e===10||e===13||e===9||e===32}function p(e){let t=0,n=e.length;for(;n>t&&f(e.charCodeAt(n-1));)--n;for(;n>t&&f(e.charCodeAt(t));)++t;return t===0&&n===e.length?e:e.substring(t,n)}function m(e,t){if(Array.isArray(t))for(let n=0;n>`,`record`]})}function g(e,t,n){if(n=p(n),!a(t))throw s.errors.invalidArgument({prefix:`Headers.append`,value:t,type:`header name`});if(!o(n))throw s.errors.invalidArgument({prefix:`Headers.append`,value:n,type:`header value`});if(b(e)===`immutable`)throw TypeError(`immutable`);return S(e).append(t,n,!1)}function _(e,t){return e[0]>1),t[s][0]<=l[0]?o=s+1:a=s;if(r!==s){for(i=r;i>o;)t[i]=t[--i];t[o]=l}} /* c8 ignore next 4 */ -if(!n.next().done)throw TypeError(`Unreachable`);return t}{let e=0;for(let{0:n,1:{value:r}}of this[u])t[e++]=[n,r],c(r!==null);return t.sort(_)}}},y=class e{#e;#t;constructor(e=void 0){s.util.markAsUncloneable(this),e!==n&&(this.#t=new v,this.#e=`none`,e!==void 0&&(e=s.converters.HeadersInit(e,`Headers contructor`,`init`),m(this,e)))}append(t,n){s.brandCheck(this,e),s.argumentLengthCheck(arguments,2,`Headers.append`);let r=`Headers.append`;return t=s.converters.ByteString(t,r,`name`),n=s.converters.ByteString(n,r,`value`),g(this,t,n)}delete(t){if(s.brandCheck(this,e),s.argumentLengthCheck(arguments,1,`Headers.delete`),t=s.converters.ByteString(t,`Headers.delete`,`name`),!a(t))throw s.errors.invalidArgument({prefix:`Headers.delete`,value:t,type:`header name`});if(this.#e===`immutable`)throw TypeError(`immutable`);this.#t.contains(t,!1)&&this.#t.delete(t,!1)}get(t){s.brandCheck(this,e),s.argumentLengthCheck(arguments,1,`Headers.get`);let n=`Headers.get`;if(t=s.converters.ByteString(t,n,`name`),!a(t))throw s.errors.invalidArgument({prefix:n,value:t,type:`header name`});return this.#t.get(t,!1)}has(t){s.brandCheck(this,e),s.argumentLengthCheck(arguments,1,`Headers.has`);let n=`Headers.has`;if(t=s.converters.ByteString(t,n,`name`),!a(t))throw s.errors.invalidArgument({prefix:n,value:t,type:`header name`});return this.#t.contains(t,!1)}set(t,n){s.brandCheck(this,e),s.argumentLengthCheck(arguments,2,`Headers.set`);let r=`Headers.set`;if(t=s.converters.ByteString(t,r,`name`),n=s.converters.ByteString(n,r,`value`),n=p(n),!a(t))throw s.errors.invalidArgument({prefix:r,value:t,type:`header name`});if(!o(n))throw s.errors.invalidArgument({prefix:r,value:n,type:`header value`});if(this.#e===`immutable`)throw TypeError(`immutable`);this.#t.set(t,n,!1)}getSetCookie(){s.brandCheck(this,e);let t=this.#t.cookies;return t?[...t]:[]}get[d](){if(this.#t[d])return this.#t[d];let e=[],t=this.#t.toSortedArray(),n=this.#t.cookies;if(n===null||n.length===1)return this.#t[d]=t;for(let r=0;r>`](e,t,n,r.bind(e)):s.converters[`record`](e,t,n)}throw s.errors.conversionFailed({prefix:`Headers constructor`,argument:`Argument 1`,types:[`sequence>`,`record`]})},t.exports={fill:m,compareHeaderName:_,Headers:y,HeadersList:v,getHeadersGuard:b,setHeadersGuard:x,setHeadersList:C,getHeadersList:S}})),Le=/* @__PURE__ */ m(((e,t)=>{let{Headers:n,HeadersList:r,fill:i,getHeadersGuard:a,setHeadersGuard:o,setHeadersList:s}=Ie(),{extractBody:c,cloneBody:l,mixinBody:u,hasFinalizationRegistry:d,streamRegistry:f,bodyUnusable:p}=ie(),m=O(),g=h(`node:util`),{kEnumerableProperty:_}=m,{isValidReasonPhrase:v,isCancelled:y,isAborted:b,isBlobLike:x,serializeJavascriptValueToJSONString:S,isErrorLike:C,isomorphicEncode:T,environmentSettingsObject:E}=V(),{redirectStatusSet:D,nullBodyStatus:k}=te(),{kState:A,kHeaders:j}=H(),{webidl:M}=B(),{FormData:N}=re(),{URLSerializer:P}=z(),{kConstruct:F}=w(),I=h(`node:assert`),{types:L}=h(`node:util`),ee=new TextEncoder(`utf-8`);var R=class e{static error(){return ce(ae(),`immutable`)}static json(e,t={}){M.argumentLengthCheck(arguments,1,`Response.json`),t!==null&&(t=M.converters.ResponseInit(t));let n=ee.encode(S(e)),r=c(n),i=ce(U({}),`response`);return K(i,t,{body:r[0],type:`application/json`}),i}static redirect(e,t=302){M.argumentLengthCheck(arguments,1,`Response.redirect`),e=M.converters.USVString(e),t=M.converters[`unsigned short`](t);let n;try{n=new URL(e,E.settingsObject.baseUrl)}catch(t){throw TypeError(`Failed to parse URL from ${e}`,{cause:t})}if(!D.has(t))throw RangeError(`Invalid status code ${t}`);let r=ce(U({}),`immutable`);r[A].status=t;let i=T(P(n));return r[A].headersList.append(`location`,i,!0),r}constructor(e=null,t={}){if(M.util.markAsUncloneable(this),e===F)return;e!==null&&(e=M.converters.BodyInit(e)),t=M.converters.ResponseInit(t),this[A]=U({}),this[j]=new n(F),o(this[j],`response`),s(this[j],this[A].headersList);let r=null;if(e!=null){let[t,n]=c(e);r={body:t,type:n}}K(this,t,r)}get type(){return M.brandCheck(this,e),this[A].type}get url(){M.brandCheck(this,e);let t=this[A].urlList,n=t[t.length-1]??null;return n===null?``:P(n,!0)}get redirected(){return M.brandCheck(this,e),this[A].urlList.length>1}get status(){return M.brandCheck(this,e),this[A].status}get ok(){return M.brandCheck(this,e),this[A].status>=200&&this[A].status<=299}get statusText(){return M.brandCheck(this,e),this[A].statusText}get headers(){return M.brandCheck(this,e),this[j]}get body(){return M.brandCheck(this,e),this[A].body?this[A].body.stream:null}get bodyUsed(){return M.brandCheck(this,e),!!this[A].body&&m.isDisturbed(this[A].body.stream)}clone(){if(M.brandCheck(this,e),p(this))throw M.errors.exception({header:`Response.clone`,message:`Body has already been consumed.`});let t=ne(this[A]);return d&&this[A].body?.stream&&f.register(this,new WeakRef(this[A].body.stream)),ce(t,a(this[j]))}[g.inspect.custom](e,t){t.depth===null&&(t.depth=2),t.colors??=!0;let n={status:this.status,statusText:this.statusText,headers:this.headers,body:this.body,bodyUsed:this.bodyUsed,ok:this.ok,redirected:this.redirected,type:this.type,url:this.url};return`Response ${g.formatWithOptions(t,n)}`}};u(R),Object.defineProperties(R.prototype,{type:_,url:_,status:_,ok:_,redirected:_,statusText:_,headers:_,clone:_,body:_,bodyUsed:_,[Symbol.toStringTag]:{value:`Response`,configurable:!0}}),Object.defineProperties(R,{json:_,redirect:_,error:_});function ne(e){if(e.internalResponse)return G(ne(e.internalResponse),e.type);let t=U({...e,body:null});return e.body!=null&&(t.body=l(t,e.body)),t}function U(e){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:`default`,status:200,timingInfo:null,cacheState:``,statusText:``,...e,headersList:e?.headersList?new r(e?.headersList):new r,urlList:e?.urlList?[...e.urlList]:[]}}function ae(e){return U({type:`error`,status:0,error:C(e)?e:Error(e&&String(e)),aborted:e&&e.name===`AbortError`})}function oe(e){return e.type===`error`&&e.status===0}function W(e,t){return t={internalResponse:e,...t},new Proxy(e,{get(e,n){return n in t?t[n]:e[n]},set(e,n,r){return I(!(n in t)),e[n]=r,!0}})}function G(e,t){if(t===`basic`)return W(e,{type:`basic`,headersList:e.headersList});if(t===`cors`)return W(e,{type:`cors`,headersList:e.headersList});if(t===`opaque`)return W(e,{type:`opaque`,urlList:Object.freeze([]),status:0,statusText:``,body:null});if(t===`opaqueredirect`)return W(e,{type:`opaqueredirect`,status:0,statusText:``,headersList:[],body:null});I(!1)}function se(e,t=null){return I(y(e)),b(e)?ae(Object.assign(new DOMException(`The operation was aborted.`,`AbortError`),{cause:t})):ae(Object.assign(new DOMException(`Request was cancelled.`),{cause:t}))}function K(e,t,n){if(t.status!==null&&(t.status<200||t.status>599))throw RangeError(`init["status"] must be in the range of 200 to 599, inclusive.`);if(`statusText`in t&&t.statusText!=null&&!v(String(t.statusText)))throw TypeError(`Invalid statusText`);if(`status`in t&&t.status!=null&&(e[A].status=t.status),`statusText`in t&&t.statusText!=null&&(e[A].statusText=t.statusText),`headers`in t&&t.headers!=null&&i(e[j],t.headers),n){if(k.includes(e.status))throw M.errors.exception({header:`Response constructor`,message:`Invalid response status code ${e.status}`});e[A].body=n.body,n.type!=null&&!e[A].headersList.contains(`content-type`,!0)&&e[A].headersList.append(`content-type`,n.type,!0)}}function ce(e,t){let r=new R(F);return r[A]=e,r[j]=new n(F),s(r[j],e.headersList),o(r[j],t),d&&e.body?.stream&&f.register(r,new WeakRef(e.body.stream)),r}M.converters.ReadableStream=M.interfaceConverter(ReadableStream),M.converters.FormData=M.interfaceConverter(N),M.converters.URLSearchParams=M.interfaceConverter(URLSearchParams),M.converters.XMLHttpRequestBodyInit=function(e,t,n){return typeof e==`string`?M.converters.USVString(e,t,n):x(e)?M.converters.Blob(e,t,n,{strict:!1}):ArrayBuffer.isView(e)||L.isArrayBuffer(e)?M.converters.BufferSource(e,t,n):m.isFormDataLike(e)?M.converters.FormData(e,t,n,{strict:!1}):e instanceof URLSearchParams?M.converters.URLSearchParams(e,t,n):M.converters.DOMString(e,t,n)},M.converters.BodyInit=function(e,t,n){return e instanceof ReadableStream?M.converters.ReadableStream(e,t,n):e?.[Symbol.asyncIterator]?e:M.converters.XMLHttpRequestBodyInit(e,t,n)},M.converters.ResponseInit=M.dictionaryConverter([{key:`status`,converter:M.converters[`unsigned short`],defaultValue:()=>200},{key:`statusText`,converter:M.converters.ByteString,defaultValue:()=>``},{key:`headers`,converter:M.converters.HeadersInit}]),t.exports={isNetworkError:oe,makeNetworkError:ae,makeResponse:U,makeAppropriateNetworkError:se,filterResponse:G,Response:R,cloneResponse:ne,fromInnerResponse:ce}})),Re=/* @__PURE__ */ m(((e,t)=>{let{kConnected:n,kSize:r}=w();var i=class{constructor(e){this.value=e}deref(){return this.value[n]===0&&this.value[r]===0?void 0:this.value}},a=class{constructor(e){this.finalizer=e}register(e,t){e.on&&e.on(`disconnect`,()=>{e[n]===0&&e[r]===0&&this.finalizer(t)})}unregister(e){}};t.exports=function(){return process.env.NODE_V8_COVERAGE&&process.version.startsWith(`v18`)?(process._rawDebug(`Using compatibility WeakRef and FinalizationRegistry`),{WeakRef:i,FinalizationRegistry:a}):{WeakRef,FinalizationRegistry}}})),ze=/* @__PURE__ */ m(((e,t)=>{let{extractBody:n,mixinBody:r,cloneBody:i,bodyUnusable:a}=ie(),{Headers:o,fill:s,HeadersList:c,setHeadersGuard:l,getHeadersGuard:u,setHeadersList:d,getHeadersList:f}=Ie(),{FinalizationRegistry:p}=Re()(),m=O(),g=h(`node:util`),{isValidHTTPToken:_,sameOrigin:v,environmentSettingsObject:y}=V(),{forbiddenMethodsSet:b,corsSafeListedMethodsSet:x,referrerPolicy:S,requestRedirect:C,requestMode:T,requestCredentials:E,requestCache:D,requestDuplex:k}=te(),{kEnumerableProperty:A,normalizedMethodRecordsBase:j,normalizedMethodRecords:M}=m,{kHeaders:N,kSignal:P,kState:F,kDispatcher:I}=H(),{webidl:L}=B(),{URLSerializer:ee}=z(),{kConstruct:R}=w(),ne=h(`node:assert`),{getMaxListeners:re,setMaxListeners:U,getEventListeners:ae,defaultMaxListeners:oe}=h(`node:events`),W=Symbol(`abortController`),G=new p(({signal:e,abort:t})=>{e.removeEventListener(`abort`,t)}),se=/* @__PURE__ */ new WeakMap;function K(e){return t;function t(){let n=e.deref();if(n!==void 0){G.unregister(t),this.removeEventListener(`abort`,t),n.abort(this.reason);let e=se.get(n.signal);if(e!==void 0){if(e.size!==0){for(let t of e){let e=t.deref();e!==void 0&&e.abort(this.reason)}e.clear()}se.delete(n.signal)}}}}let ce=!1;var q=class e{constructor(t,r={}){if(L.util.markAsUncloneable(this),t===R)return;let i=`Request constructor`;L.argumentLengthCheck(arguments,1,i),t=L.converters.RequestInfo(t,i,`input`),r=L.converters.RequestInit(r,i,`init`);let u=null,p=null,h=y.settingsObject.baseUrl,g=null;if(typeof t==`string`){this[I]=r.dispatcher;let e;try{e=new URL(t,h)}catch(e){throw TypeError(`Failed to parse URL from `+t,{cause:e})}if(e.username||e.password)throw TypeError(`Request cannot be constructed from a URL that includes credentials: `+t);u=le({urlList:[e]}),p=`cors`}else this[I]=r.dispatcher||t[I],ne(t instanceof e),u=t[F],g=t[P];let S=y.settingsObject.origin,C=`client`;if(u.window?.constructor?.name===`EnvironmentSettingsObject`&&v(u.window,S)&&(C=u.window),r.window!=null)throw TypeError(`'window' option '${C}' must be null`);`window`in r&&(C=`no-window`),u=le({method:u.method,headersList:u.headersList,unsafeRequest:u.unsafeRequest,client:y.settingsObject,window:C,priority:u.priority,origin:u.origin,referrer:u.referrer,referrerPolicy:u.referrerPolicy,mode:u.mode,credentials:u.credentials,cache:u.cache,redirect:u.redirect,integrity:u.integrity,keepalive:u.keepalive,reloadNavigation:u.reloadNavigation,historyNavigation:u.historyNavigation,urlList:[...u.urlList]});let w=Object.keys(r).length!==0;if(w&&(u.mode===`navigate`&&(u.mode=`same-origin`),u.reloadNavigation=!1,u.historyNavigation=!1,u.origin=`client`,u.referrer=`client`,u.referrerPolicy=``,u.url=u.urlList[u.urlList.length-1],u.urlList=[u.url]),r.referrer!==void 0){let e=r.referrer;if(e===``)u.referrer=`no-referrer`;else{let t;try{t=new URL(e,h)}catch(t){throw TypeError(`Referrer "${e}" is not a valid URL.`,{cause:t})}t.protocol===`about:`&&t.hostname===`client`||S&&!v(t,y.settingsObject.baseUrl)?u.referrer=`client`:u.referrer=t}}r.referrerPolicy!==void 0&&(u.referrerPolicy=r.referrerPolicy);let T;if(T=r.mode===void 0?p:r.mode,T===`navigate`)throw L.errors.exception({header:`Request constructor`,message:`invalid request mode navigate.`});if(T!=null&&(u.mode=T),r.credentials!==void 0&&(u.credentials=r.credentials),r.cache!==void 0&&(u.cache=r.cache),u.cache===`only-if-cached`&&u.mode!==`same-origin`)throw TypeError(`'only-if-cached' can be set only with 'same-origin' mode`);if(r.redirect!==void 0&&(u.redirect=r.redirect),r.integrity!=null&&(u.integrity=String(r.integrity)),r.keepalive!==void 0&&(u.keepalive=!!r.keepalive),r.method!==void 0){let e=r.method,t=M[e];if(t!==void 0)u.method=t;else{if(!_(e))throw TypeError(`'${e}' is not a valid HTTP method.`);let t=e.toUpperCase();if(b.has(t))throw TypeError(`'${e}' HTTP method is unsupported.`);e=j[t]??e,u.method=e}!ce&&u.method===`patch`&&(process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.",{code:`UNDICI-FETCH-patch`}),ce=!0)}r.signal!==void 0&&(g=r.signal),this[F]=u;let E=new AbortController;if(this[P]=E.signal,g!=null){if(!g||typeof g.aborted!=`boolean`||typeof g.addEventListener!=`function`)throw TypeError(`Failed to construct 'Request': member signal is not of type AbortSignal.`);if(g.aborted)E.abort(g.reason);else{this[W]=E;let e=K(new WeakRef(E));try{(typeof re==`function`&&re(g)===oe||ae(g,`abort`).length>=oe)&&U(1500,g)}catch{}m.addAbortListener(g,e),G.register(E,{signal:g,abort:e},e)}}if(this[N]=new o(R),d(this[N],u.headersList),l(this[N],`request`),T===`no-cors`){if(!x.has(u.method))throw TypeError(`'${u.method} is unsupported in no-cors mode.`);l(this[N],`request-no-cors`)}if(w){let e=f(this[N]),t=r.headers===void 0?new c(e):r.headers;if(e.clear(),t instanceof c){for(let{name:n,value:r}of t.rawValues())e.append(n,r,!1);e.cookies=t.cookies}else s(this[N],t)}let D=t instanceof e?t[F].body:null;if((r.body!=null||D!=null)&&(u.method===`GET`||u.method===`HEAD`))throw TypeError(`Request with GET/HEAD method cannot have body.`);let O=null;if(r.body!=null){let[e,t]=n(r.body,u.keepalive);O=e,t&&!f(this[N]).contains(`content-type`,!0)&&this[N].append(`content-type`,t)}let k=O??D;if(k!=null&&k.source==null){if(O!=null&&r.duplex==null)throw TypeError(`RequestInit: duplex option is required when sending a body.`);if(u.mode!==`same-origin`&&u.mode!==`cors`)throw TypeError(`If request is made from ReadableStream, mode should be "same-origin" or "cors"`);u.useCORSPreflightFlag=!0}let A=k;if(O==null&&D!=null){if(a(t))throw TypeError(`Cannot construct a Request with a Request object that has already been used.`);let e=new TransformStream;D.stream.pipeThrough(e),A={source:D.source,length:D.length,stream:e.readable}}this[F].body=A}get method(){return L.brandCheck(this,e),this[F].method}get url(){return L.brandCheck(this,e),ee(this[F].url)}get headers(){return L.brandCheck(this,e),this[N]}get destination(){return L.brandCheck(this,e),this[F].destination}get referrer(){return L.brandCheck(this,e),this[F].referrer===`no-referrer`?``:this[F].referrer===`client`?`about:client`:this[F].referrer.toString()}get referrerPolicy(){return L.brandCheck(this,e),this[F].referrerPolicy}get mode(){return L.brandCheck(this,e),this[F].mode}get credentials(){return this[F].credentials}get cache(){return L.brandCheck(this,e),this[F].cache}get redirect(){return L.brandCheck(this,e),this[F].redirect}get integrity(){return L.brandCheck(this,e),this[F].integrity}get keepalive(){return L.brandCheck(this,e),this[F].keepalive}get isReloadNavigation(){return L.brandCheck(this,e),this[F].reloadNavigation}get isHistoryNavigation(){return L.brandCheck(this,e),this[F].historyNavigation}get signal(){return L.brandCheck(this,e),this[P]}get body(){return L.brandCheck(this,e),this[F].body?this[F].body.stream:null}get bodyUsed(){return L.brandCheck(this,e),!!this[F].body&&m.isDisturbed(this[F].body.stream)}get duplex(){return L.brandCheck(this,e),`half`}clone(){if(L.brandCheck(this,e),a(this))throw TypeError(`unusable`);let t=J(this[F]),n=new AbortController;if(this.signal.aborted)n.abort(this.signal.reason);else{let e=se.get(this.signal);e===void 0&&(e=/* @__PURE__ */ new Set,se.set(this.signal,e));let t=new WeakRef(n);e.add(t),m.addAbortListener(n.signal,K(t))}return ue(t,n.signal,u(this[N]))}[g.inspect.custom](e,t){t.depth===null&&(t.depth=2),t.colors??=!0;let n={method:this.method,url:this.url,headers:this.headers,destination:this.destination,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,isReloadNavigation:this.isReloadNavigation,isHistoryNavigation:this.isHistoryNavigation,signal:this.signal};return`Request ${g.formatWithOptions(t,n)}`}};r(q);function le(e){return{method:e.method??`GET`,localURLsOnly:e.localURLsOnly??!1,unsafeRequest:e.unsafeRequest??!1,body:e.body??null,client:e.client??null,reservedClient:e.reservedClient??null,replacesClientId:e.replacesClientId??``,window:e.window??`client`,keepalive:e.keepalive??!1,serviceWorkers:e.serviceWorkers??`all`,initiator:e.initiator??``,destination:e.destination??``,priority:e.priority??null,origin:e.origin??`client`,policyContainer:e.policyContainer??`client`,referrer:e.referrer??`client`,referrerPolicy:e.referrerPolicy??``,mode:e.mode??`no-cors`,useCORSPreflightFlag:e.useCORSPreflightFlag??!1,credentials:e.credentials??`same-origin`,useCredentials:e.useCredentials??!1,cache:e.cache??`default`,redirect:e.redirect??`follow`,integrity:e.integrity??``,cryptoGraphicsNonceMetadata:e.cryptoGraphicsNonceMetadata??``,parserMetadata:e.parserMetadata??``,reloadNavigation:e.reloadNavigation??!1,historyNavigation:e.historyNavigation??!1,userActivation:e.userActivation??!1,taintedOrigin:e.taintedOrigin??!1,redirectCount:e.redirectCount??0,responseTainting:e.responseTainting??`basic`,preventNoCacheCacheControlHeaderModification:e.preventNoCacheCacheControlHeaderModification??!1,done:e.done??!1,timingAllowFailed:e.timingAllowFailed??!1,urlList:e.urlList,url:e.urlList[0],headersList:e.headersList?new c(e.headersList):new c}}function J(e){let t=le({...e,body:null});return e.body!=null&&(t.body=i(t,e.body)),t}function ue(e,t,n){let r=new q(R);return r[F]=e,r[P]=t,r[N]=new o(R),d(r[N],e.headersList),l(r[N],n),r}Object.defineProperties(q.prototype,{method:A,url:A,headers:A,redirect:A,clone:A,signal:A,duplex:A,destination:A,body:A,bodyUsed:A,isHistoryNavigation:A,isReloadNavigation:A,keepalive:A,integrity:A,cache:A,credentials:A,attribute:A,referrerPolicy:A,referrer:A,mode:A,[Symbol.toStringTag]:{value:`Request`,configurable:!0}}),L.converters.Request=L.interfaceConverter(q),L.converters.RequestInfo=function(e,t,n){return typeof e==`string`?L.converters.USVString(e,t,n):e instanceof q?L.converters.Request(e,t,n):L.converters.USVString(e,t,n)},L.converters.AbortSignal=L.interfaceConverter(AbortSignal),L.converters.RequestInit=L.dictionaryConverter([{key:`method`,converter:L.converters.ByteString},{key:`headers`,converter:L.converters.HeadersInit},{key:`body`,converter:L.nullableConverter(L.converters.BodyInit)},{key:`referrer`,converter:L.converters.USVString},{key:`referrerPolicy`,converter:L.converters.DOMString,allowedValues:S},{key:`mode`,converter:L.converters.DOMString,allowedValues:T},{key:`credentials`,converter:L.converters.DOMString,allowedValues:E},{key:`cache`,converter:L.converters.DOMString,allowedValues:D},{key:`redirect`,converter:L.converters.DOMString,allowedValues:C},{key:`integrity`,converter:L.converters.DOMString},{key:`keepalive`,converter:L.converters.boolean},{key:`signal`,converter:L.nullableConverter(e=>L.converters.AbortSignal(e,`RequestInit`,`signal`,{strict:!1}))},{key:`window`,converter:L.converters.any},{key:`duplex`,converter:L.converters.DOMString,allowedValues:k},{key:`dispatcher`,converter:L.converters.any}]),t.exports={Request:q,makeRequest:le,fromInnerRequest:ue,cloneRequest:J}})),Be=/* @__PURE__ */ m(((e,t)=>{let{makeNetworkError:n,makeAppropriateNetworkError:r,filterResponse:i,makeResponse:a,fromInnerResponse:o}=Le(),{HeadersList:s}=Ie(),{Request:c,cloneRequest:l}=ze(),u=h(`node:zlib`),{bytesMatch:d,makePolicyContainer:f,clonePolicyContainer:p,requestBadPort:m,TAOCheck:g,appendRequestOriginHeader:_,responseLocationURL:v,requestCurrentURL:y,setRequestReferrerPolicyOnRedirect:b,tryUpgradeRequestToAPotentiallyTrustworthyURL:x,createOpaqueTimingInfo:S,appendFetchMetadata:C,corsCheck:w,crossOriginResourcePolicyCheck:T,determineRequestsReferrer:E,coarsenedSharedCurrentTime:D,createDeferredPromise:k,isBlobLike:A,sameOrigin:j,isCancelled:M,isAborted:N,isErrorLike:P,fullyReadBody:F,readableStreamClose:I,isomorphicEncode:L,urlIsLocal:ee,urlIsHttpHttpsScheme:R,urlHasHttpsScheme:ne,clampAndCoarsenConnectionTimingInfo:re,simpleRangeHeaderValue:U,buildContentRange:ae,createInflate:oe,extractMimeType:W}=V(),{kState:G,kDispatcher:se}=H(),K=h(`node:assert`),{safelyExtractBody:ce,extractBody:q}=ie(),{redirectStatusSet:le,nullBodyStatus:J,safeMethodsSet:ue,requestBodyHeader:de,subresourceSet:Y}=te(),fe=h(`node:events`),{Readable:pe,pipeline:me,finished:he}=h(`node:stream`),{addAbortListener:ge,isErrored:_e,isReadable:ve,bufferToLowerCasedHeaderName:ye}=O(),{dataURLProcessor:X,serializeAMimeType:be,minimizeSupportedMimeType:xe}=z(),{getGlobalDispatcher:Z}=Ae(),{webidl:Se}=B(),{STATUS_CODES:Ce}=h(`node:http`),we=[`GET`,`HEAD`],Te=typeof __UNDICI_IS_NODE__<`u`||typeof esbuildDetection<`u`?`node`:`undici`,Ee;var De=class extends fe{constructor(e){super(),this.dispatcher=e,this.connection=null,this.dump=!1,this.state=`ongoing`}terminate(e){this.state===`ongoing`&&(this.state=`terminated`,this.connection?.destroy(e),this.emit(`terminated`,e))}abort(e){this.state===`ongoing`&&(this.state=`aborted`,e||=new DOMException(`The operation was aborted.`,`AbortError`),this.serializedAbortReason=e,this.connection?.destroy(e),this.emit(`terminated`,e))}};function Oe(e){je(e,`fetch`)}function ke(e,t=void 0){Se.argumentLengthCheck(arguments,1,`globalThis.fetch`);let n=k(),r;try{r=new c(e,t)}catch(e){return n.reject(e),n.promise}let i=r[G];if(r.signal.aborted)return Ne(n,i,null,r.signal.reason),n.promise;i.client.globalObject?.constructor?.name===`ServiceWorkerGlobalScope`&&(i.serviceWorkers=`none`);let a=null,s=!1,l=null;return ge(r.signal,()=>{s=!0,K(l!=null),l.abort(r.signal.reason);let e=a?.deref();Ne(n,i,e,r.signal.reason)}),l=Pe({request:i,processResponseEndOfBody:Oe,processResponse:e=>{s||(e.aborted?Ne(n,i,a,l.serializedAbortReason):e.type===`error`?n.reject(TypeError(`fetch failed`,{cause:e.error})):(a=new WeakRef(o(e,`immutable`)),n.resolve(a.deref()),n=null))},dispatcher:r[se]}),n.promise}function je(e,t=`other`){if(e.type===`error`&&e.aborted||!e.urlList?.length)return;let n=e.urlList[0],r=e.timingInfo,i=e.cacheState;R(n)&&r!==null&&(e.timingAllowPassed||(r=S({startTime:r.startTime}),i=``),r.endTime=D(),e.timingInfo=r,Me(r,n.href,t,globalThis,i))}let Me=performance.markResourceTiming;function Ne(e,t,n,r){if(e&&e.reject(r),t.body!=null&&ve(t.body?.stream)&&t.body.stream.cancel(r).catch(e=>{if(e.code!==`ERR_INVALID_STATE`)throw e}),n==null)return;let i=n[G];i.body!=null&&ve(i.body?.stream)&&i.body.stream.cancel(r).catch(e=>{if(e.code!==`ERR_INVALID_STATE`)throw e})}function Pe({request:e,processRequestBodyChunkLength:t,processRequestEndOfBody:n,processResponse:r,processResponseEndOfBody:i,processResponseConsumeBody:a,useParallelQueue:o=!1,dispatcher:s=Z()}){K(s);let c=null,l=!1;e.client!=null&&(c=e.client.globalObject,l=e.client.crossOriginIsolatedCapability);let u=D(l),d=S({startTime:u}),m={controller:new De(s),request:e,timingInfo:d,processRequestBodyChunkLength:t,processRequestEndOfBody:n,processResponse:r,processResponseConsumeBody:a,processResponseEndOfBody:i,taskDestination:c,crossOriginIsolatedCapability:l};return K(!e.body||e.body.stream),e.window===`client`&&(e.window=e.client?.globalObject?.constructor?.name===`Window`?e.client:`no-window`),e.origin===`client`&&(e.origin=e.client.origin),e.policyContainer===`client`&&(e.policyContainer=e.client==null?f():p(e.client.policyContainer)),e.headersList.contains(`accept`,!0)||e.headersList.append(`accept`,`*/*`,!0),e.headersList.contains(`accept-language`,!0)||e.headersList.append(`accept-language`,`*`,!0),e.priority,Y.has(e.destination),Fe(m).catch(e=>{m.controller.terminate(e)}),m.controller}async function Fe(e,t=!1){let r=e.request,a=null;if(r.localURLsOnly&&!ee(y(r))&&(a=n(`local URLs only`)),x(r),m(r)===`blocked`&&(a=n(`bad port`)),r.referrerPolicy===``&&(r.referrerPolicy=r.policyContainer.referrerPolicy),r.referrer!==`no-referrer`&&(r.referrer=E(r)),a===null&&(a=await(async()=>{let t=y(r);return j(t,r.url)&&r.responseTainting===`basic`||t.protocol===`data:`||r.mode===`navigate`||r.mode===`websocket`?(r.responseTainting=`basic`,await Re(e)):r.mode===`same-origin`?n(`request mode cannot be "same-origin"`):r.mode===`no-cors`?r.redirect===`follow`?(r.responseTainting=`opaque`,await Re(e)):n(`redirect mode cannot be "follow" for "no-cors" request`):R(y(r))?(r.responseTainting=`cors`,await He(e)):n(`URL scheme must be a HTTP(S) scheme`)})()),t)return a;a.status!==0&&!a.internalResponse&&(r.responseTainting,r.responseTainting===`basic`?a=i(a,`basic`):r.responseTainting===`cors`?a=i(a,`cors`):r.responseTainting===`opaque`?a=i(a,`opaque`):K(!1));let o=a.status===0?a:a.internalResponse;if(o.urlList.length===0&&o.urlList.push(...r.urlList),r.timingAllowFailed||(a.timingAllowPassed=!0),a.type===`opaque`&&o.status===206&&o.rangeRequested&&!r.headers.contains(`range`,!0)&&(a=o=n()),a.status!==0&&(r.method===`HEAD`||r.method===`CONNECT`||J.includes(o.status))&&(o.body=null,e.controller.dump=!0),r.integrity){let t=t=>Ve(e,n(t));if(r.responseTainting===`opaque`||a.body==null){t(a.error);return}await F(a.body,n=>{d(n,r.integrity)?(a.body=ce(n)[0],Ve(e,a)):t(`integrity mismatch`)},t)}else Ve(e,a)}function Re(e){if(M(e)&&e.request.redirectCount===0)return Promise.resolve(r(e));let{request:t}=e,{protocol:i}=y(t);switch(i){case`about:`:return Promise.resolve(n(`about scheme is not supported`));case`blob:`:{Ee||=h(`node:buffer`).resolveObjectURL;let e=y(t);if(e.search.length!==0)return Promise.resolve(n(`NetworkError when attempting to fetch resource.`));let r=Ee(e.toString());if(t.method!==`GET`||!A(r))return Promise.resolve(n(`invalid method`));let i=a(),o=r.size,s=L(`${o}`),c=r.type;if(t.headersList.contains(`range`,!0)){i.rangeRequested=!0;let e=t.headersList.get(`range`,!0),a=U(e,!0);if(a===`failure`)return Promise.resolve(n(`failed to fetch the data URL`));let{rangeStartValue:s,rangeEndValue:l}=a;if(s===null)s=o-l,l=s+l-1;else{if(s>=o)return Promise.resolve(n(`Range start is greater than the blob's size.`));(l===null||l>=o)&&(l=o-1)}let u=r.slice(s,l,c);i.body=q(u)[0];let d=L(`${u.size}`),f=ae(s,l,o);i.status=206,i.statusText=`Partial Content`,i.headersList.set(`content-length`,d,!0),i.headersList.set(`content-type`,c,!0),i.headersList.set(`content-range`,f,!0)}else{let e=q(r);i.statusText=`OK`,i.body=e[0],i.headersList.set(`content-length`,s,!0),i.headersList.set(`content-type`,c,!0)}return Promise.resolve(i)}case`data:`:{let e=y(t),r=X(e);if(r===`failure`)return Promise.resolve(n(`failed to fetch the data URL`));let i=be(r.mimeType);return Promise.resolve(a({statusText:`OK`,headersList:[[`content-type`,{name:`Content-Type`,value:i}]],body:ce(r.body)[0]}))}case`file:`:return Promise.resolve(n(`not implemented... yet...`));case`http:`:case`https:`:return He(e).catch(e=>n(e));default:return Promise.resolve(n(`unknown scheme`))}}function Be(e,t){e.request.done=!0,e.processResponseDone!=null&&queueMicrotask(()=>e.processResponseDone(t))}function Ve(e,t){let n=e.timingInfo,r=()=>{let r=Date.now();e.request.destination===`document`&&(e.controller.fullTimingInfo=n),e.controller.reportTimingSteps=()=>{if(e.request.url.protocol!==`https:`)return;n.endTime=r;let i=t.cacheState,a=t.bodyInfo;t.timingAllowPassed||(n=S(n),i=``);let o=0;if(e.request.mode!==`navigator`||!t.hasCrossOriginRedirects){o=t.status;let e=W(t.headersList);e!==`failure`&&(a.contentType=xe(e))}e.request.initiatorType!=null&&Me(n,e.request.url.href,e.request.initiatorType,globalThis,i,a,o)};let i=()=>{e.request.done=!0,e.processResponseEndOfBody!=null&&queueMicrotask(()=>e.processResponseEndOfBody(t)),e.request.initiatorType!=null&&e.controller.reportTimingSteps()};queueMicrotask(()=>i())};e.processResponse!=null&&queueMicrotask(()=>{e.processResponse(t),e.processResponse=null});let i=t.type===`error`?t:t.internalResponse??t;i.body==null?r():he(i.body.stream,()=>{r()})}async function He(e){let t=e.request,r=null,i=null,a=e.timingInfo;if(t.serviceWorkers,r===null){if(t.redirect===`follow`&&(t.serviceWorkers=`none`),i=r=await We(e),t.responseTainting===`cors`&&w(t,r)===`failure`)return n(`cors failure`);g(t,r)===`failure`&&(t.timingAllowFailed=!0)}return(t.responseTainting===`opaque`||r.type===`opaque`)&&T(t.origin,t.client,t.destination,i)===`blocked`?n(`blocked`):(le.has(i.status)&&(t.redirect!==`manual`&&e.controller.connection.destroy(void 0,!1),t.redirect===`error`?r=n(`unexpected redirect`):t.redirect===`manual`?r=i:t.redirect===`follow`?r=await Ue(e,r):K(!1)),r.timingInfo=a,r)}function Ue(e,t){let r=e.request,i=t.internalResponse?t.internalResponse:t,a;try{if(a=v(i,y(r).hash),a==null)return t}catch(e){return Promise.resolve(n(e))}if(!R(a))return Promise.resolve(n(`URL scheme must be a HTTP(S) scheme`));if(r.redirectCount===20)return Promise.resolve(n(`redirect count exceeded`));if(r.redirectCount+=1,r.mode===`cors`&&(a.username||a.password)&&!j(r,a))return Promise.resolve(n(`cross origin not allowed for request mode "cors"`));if(r.responseTainting===`cors`&&(a.username||a.password))return Promise.resolve(n(`URL cannot contain credentials for request mode "cors"`));if(i.status!==303&&r.body!=null&&r.body.source==null)return Promise.resolve(n());if([301,302].includes(i.status)&&r.method===`POST`||i.status===303&&!we.includes(r.method)){r.method=`GET`,r.body=null;for(let e of de)r.headersList.delete(e)}j(y(r),a)||(r.headersList.delete(`authorization`,!0),r.headersList.delete(`proxy-authorization`,!0),r.headersList.delete(`cookie`,!0),r.headersList.delete(`host`,!0)),r.body!=null&&(K(r.body.source!=null),r.body=ce(r.body.source)[0]);let o=e.timingInfo;return o.redirectEndTime=o.postRedirectStartTime=D(e.crossOriginIsolatedCapability),o.redirectStartTime===0&&(o.redirectStartTime=o.startTime),r.urlList.push(a),b(r,i),Fe(e,!0)}async function We(e,t=!1,i=!1){let a=e.request,o=null,s=null,c=null;a.window===`no-window`&&a.redirect===`error`?(o=e,s=a):(s=l(a),o={...e},o.request=s);let u=a.credentials===`include`||a.credentials===`same-origin`&&a.responseTainting===`basic`,d=s.body?s.body.length:null,f=null;if(s.body==null&&[`POST`,`PUT`].includes(s.method)&&(f=`0`),d!=null&&(f=L(`${d}`)),f!=null&&s.headersList.append(`content-length`,f,!0),d!=null&&s.keepalive,s.referrer instanceof URL&&s.headersList.append(`referer`,L(s.referrer.href),!0),_(s),C(s),s.headersList.contains(`user-agent`,!0)||s.headersList.append(`user-agent`,Te),s.cache==="default"&&(s.headersList.contains(`if-modified-since`,!0)||s.headersList.contains(`if-none-match`,!0)||s.headersList.contains(`if-unmodified-since`,!0)||s.headersList.contains(`if-match`,!0)||s.headersList.contains(`if-range`,!0))&&(s.cache=`no-store`),s.cache===`no-cache`&&!s.preventNoCacheCacheControlHeaderModification&&!s.headersList.contains(`cache-control`,!0)&&s.headersList.append(`cache-control`,`max-age=0`,!0),(s.cache===`no-store`||s.cache===`reload`)&&(s.headersList.contains(`pragma`,!0)||s.headersList.append(`pragma`,`no-cache`,!0),s.headersList.contains(`cache-control`,!0)||s.headersList.append(`cache-control`,`no-cache`,!0)),s.headersList.contains(`range`,!0)&&s.headersList.append(`accept-encoding`,`identity`,!0),s.headersList.contains(`accept-encoding`,!0)||(ne(y(s))?s.headersList.append(`accept-encoding`,`br, gzip, deflate`,!0):s.headersList.append(`accept-encoding`,`gzip, deflate`,!0)),s.headersList.delete(`host`,!0),s.cache=`no-store`,s.cache!==`no-store`&&s.cache,c==null){if(s.cache===`only-if-cached`)return n(`only if cached`);let e=await Ge(o,u,i);!ue.has(s.method)&&e.status>=200&&e.status,c??=e}if(c.urlList=[...s.urlList],s.headersList.contains(`range`,!0)&&(c.rangeRequested=!0),c.requestIncludesCredentials=u,c.status===407)return a.window===`no-window`?n():M(e)?r(e):n(`proxy authentication required`);if(c.status===421&&!i&&(a.body==null||a.body.source!=null)){if(M(e))return r(e);e.controller.connection.destroy(),c=await We(e,t,!0)}return c}async function Ge(e,t=!1,i=!1){K(!e.controller.connection||e.controller.connection.destroyed),e.controller.connection={abort:null,destroyed:!1,destroy(e,t=!0){this.destroyed||(this.destroyed=!0,t&&this.abort?.(e??new DOMException(`The operation was aborted.`,`AbortError`)))}};let o=e.request,c=null,l=e.timingInfo;o.cache=`no-store`,o.mode;let d=null;if(o.body==null&&e.processRequestEndOfBody)queueMicrotask(()=>e.processRequestEndOfBody());else if(o.body!=null){let t=async function*(t){M(e)||(yield t,e.processRequestBodyChunkLength?.(t.byteLength))},n=()=>{M(e)||e.processRequestEndOfBody&&e.processRequestEndOfBody()},r=t=>{M(e)||(t.name===`AbortError`?e.controller.abort():e.controller.terminate(t))};d=(async function*(){try{for await(let e of o.body.stream)yield*t(e);n()}catch(e){r(e)}})()}try{let{body:t,status:n,statusText:r,headersList:i,socket:o}=await g({body:d});if(o)c=a({status:n,statusText:r,headersList:i,socket:o});else{let o=t[Symbol.asyncIterator]();e.controller.next=()=>o.next(),c=a({status:n,statusText:r,headersList:i})}}catch(t){return t.name===`AbortError`?(e.controller.connection.destroy(),r(e,t)):n(t)}let f=async()=>{await e.controller.resume()},p=t=>{M(e)||e.controller.abort(t)},m=new ReadableStream({async start(t){e.controller.controller=t},async pull(e){await f(e)},async cancel(e){await p(e)},type:`bytes`});c.body={stream:m,source:null,length:null},e.controller.resume||e.controller.on(`terminated`,h),e.controller.resume=async()=>{for(;;){let t,n;try{let{done:n,value:r}=await e.controller.next();if(N(e))break;t=n?void 0:r}catch(r){e.controller.ended&&!l.encodedBodySize?t=void 0:(t=r,n=!0)}if(t===void 0){I(e.controller.controller),Be(e,c);return}if(l.decodedBodySize+=t?.byteLength??0,n){e.controller.terminate(t);return}let r=new Uint8Array(t);if(r.byteLength&&e.controller.controller.enqueue(r),_e(m)){e.controller.terminate();return}if(e.controller.controller.desiredSize<=0)return}};function h(t){N(e)?(c.aborted=!0,ve(m)&&e.controller.controller.error(e.controller.serializedAbortReason)):ve(m)&&e.controller.controller.error(TypeError(`terminated`,{cause:P(t)?t:void 0})),e.controller.connection.destroy()}return c;function g({body:t}){let n=y(o),r=e.controller.dispatcher;return new Promise((i,a)=>r.dispatch({path:n.pathname+n.search,origin:n.origin,method:o.method,body:r.isMockActive?o.body&&(o.body.source||o.body.stream):t,headers:o.headersList.entries,maxRedirections:0,upgrade:o.mode===`websocket`?`websocket`:void 0},{body:null,abort:null,onConnect(t){let{connection:n}=e.controller;l.finalConnectionTimingInfo=re(void 0,l.postRedirectStartTime,e.crossOriginIsolatedCapability),n.destroyed?t(new DOMException(`The operation was aborted.`,`AbortError`)):(e.controller.on(`terminated`,t),this.abort=n.abort=t),l.finalNetworkRequestStartTime=D(e.crossOriginIsolatedCapability)},onResponseStarted(){l.finalNetworkResponseStartTime=D(e.crossOriginIsolatedCapability)},onHeaders(e,t,n,r){if(e<200)return;let a=``,c=new s;for(let e=0;e5)return this.abort(/* @__PURE__ */ Error(`too many content-encodings in response: ${t.length}, maximum allowed is 5`)),!0;for(let e=t.length-1;e>=0;--e){let n=t[e].trim();if(n===`x-gzip`||n===`gzip`)l.push(u.createGunzip({flush:u.constants.Z_SYNC_FLUSH,finishFlush:u.constants.Z_SYNC_FLUSH}));else if(n===`deflate`)l.push(oe({flush:u.constants.Z_SYNC_FLUSH,finishFlush:u.constants.Z_SYNC_FLUSH}));else if(n===`br`)l.push(u.createBrotliDecompress({flush:u.constants.BROTLI_OPERATION_FLUSH,finishFlush:u.constants.BROTLI_OPERATION_FLUSH}));else{l.length=0;break}}}this.body=new pe({read:n});let f=this.onError.bind(this);return i({status:e,statusText:r,headersList:c,body:l.length?me(this.body,...l,e=>{e&&this.onError(e)}).on(`error`,f):this.body.on(`error`,f)}),!0},onData(t){if(e.controller.dump)return;let n=t;return l.encodedBodySize+=n.byteLength,this.body.push(n)},onComplete(){this.abort&&e.controller.off(`terminated`,this.abort),e.controller.ended=!0,this.body.push(null)},onError(t){this.abort&&e.controller.off(`terminated`,this.abort),this.body?.destroy(t),e.controller.terminate(t),a(t)},onUpgrade(e,t,n){if(e!==101)return;let r=new s;for(let e=0;e{t.exports={kState:Symbol(`FileReader state`),kResult:Symbol(`FileReader result`),kError:Symbol(`FileReader error`),kLastProgressEventFired:Symbol(`FileReader last progress event fired timestamp`),kEvents:Symbol(`FileReader events`),kAborted:Symbol(`FileReader aborted`)}})),He=/* @__PURE__ */ m(((e,t)=>{let{webidl:n}=B(),r=Symbol(`ProgressEvent state`);var i=class e extends Event{constructor(e,t={}){e=n.converters.DOMString(e,`ProgressEvent constructor`,`type`),t=n.converters.ProgressEventInit(t??{}),super(e,t),this[r]={lengthComputable:t.lengthComputable,loaded:t.loaded,total:t.total}}get lengthComputable(){return n.brandCheck(this,e),this[r].lengthComputable}get loaded(){return n.brandCheck(this,e),this[r].loaded}get total(){return n.brandCheck(this,e),this[r].total}};n.converters.ProgressEventInit=n.dictionaryConverter([{key:`lengthComputable`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`loaded`,converter:n.converters[`unsigned long long`],defaultValue:()=>0},{key:`total`,converter:n.converters[`unsigned long long`],defaultValue:()=>0},{key:`bubbles`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`cancelable`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`composed`,converter:n.converters.boolean,defaultValue:()=>!1}]),t.exports={ProgressEvent:i}})),Ue=/* @__PURE__ */ m(((e,t)=>{function n(e){if(!e)return`failure`;switch(e.trim().toLowerCase()){case`unicode-1-1-utf-8`:case`unicode11utf8`:case`unicode20utf8`:case`utf-8`:case`utf8`:case`x-unicode20utf8`:return`UTF-8`;case`866`:case`cp866`:case`csibm866`:case`ibm866`:return`IBM866`;case`csisolatin2`:case`iso-8859-2`:case`iso-ir-101`:case`iso8859-2`:case`iso88592`:case`iso_8859-2`:case`iso_8859-2:1987`:case`l2`:case`latin2`:return`ISO-8859-2`;case`csisolatin3`:case`iso-8859-3`:case`iso-ir-109`:case`iso8859-3`:case`iso88593`:case`iso_8859-3`:case`iso_8859-3:1988`:case`l3`:case`latin3`:return`ISO-8859-3`;case`csisolatin4`:case`iso-8859-4`:case`iso-ir-110`:case`iso8859-4`:case`iso88594`:case`iso_8859-4`:case`iso_8859-4:1988`:case`l4`:case`latin4`:return`ISO-8859-4`;case`csisolatincyrillic`:case`cyrillic`:case`iso-8859-5`:case`iso-ir-144`:case`iso8859-5`:case`iso88595`:case`iso_8859-5`:case`iso_8859-5:1988`:return`ISO-8859-5`;case`arabic`:case`asmo-708`:case`csiso88596e`:case`csiso88596i`:case`csisolatinarabic`:case`ecma-114`:case`iso-8859-6`:case`iso-8859-6-e`:case`iso-8859-6-i`:case`iso-ir-127`:case`iso8859-6`:case`iso88596`:case`iso_8859-6`:case`iso_8859-6:1987`:return`ISO-8859-6`;case`csisolatingreek`:case`ecma-118`:case`elot_928`:case`greek`:case`greek8`:case`iso-8859-7`:case`iso-ir-126`:case`iso8859-7`:case`iso88597`:case`iso_8859-7`:case`iso_8859-7:1987`:case`sun_eu_greek`:return`ISO-8859-7`;case`csiso88598e`:case`csisolatinhebrew`:case`hebrew`:case`iso-8859-8`:case`iso-8859-8-e`:case`iso-ir-138`:case`iso8859-8`:case`iso88598`:case`iso_8859-8`:case`iso_8859-8:1988`:case`visual`:return`ISO-8859-8`;case`csiso88598i`:case`iso-8859-8-i`:case`logical`:return`ISO-8859-8-I`;case`csisolatin6`:case`iso-8859-10`:case`iso-ir-157`:case`iso8859-10`:case`iso885910`:case`l6`:case`latin6`:return`ISO-8859-10`;case`iso-8859-13`:case`iso8859-13`:case`iso885913`:return`ISO-8859-13`;case`iso-8859-14`:case`iso8859-14`:case`iso885914`:return`ISO-8859-14`;case`csisolatin9`:case`iso-8859-15`:case`iso8859-15`:case`iso885915`:case`iso_8859-15`:case`l9`:return`ISO-8859-15`;case`iso-8859-16`:return`ISO-8859-16`;case`cskoi8r`:case`koi`:case`koi8`:case`koi8-r`:case`koi8_r`:return`KOI8-R`;case`koi8-ru`:case`koi8-u`:return`KOI8-U`;case`csmacintosh`:case`mac`:case`macintosh`:case`x-mac-roman`:return`macintosh`;case`iso-8859-11`:case`iso8859-11`:case`iso885911`:case`tis-620`:case`windows-874`:return`windows-874`;case`cp1250`:case`windows-1250`:case`x-cp1250`:return`windows-1250`;case`cp1251`:case`windows-1251`:case`x-cp1251`:return`windows-1251`;case`ansi_x3.4-1968`:case`ascii`:case`cp1252`:case`cp819`:case`csisolatin1`:case`ibm819`:case`iso-8859-1`:case`iso-ir-100`:case`iso8859-1`:case`iso88591`:case`iso_8859-1`:case`iso_8859-1:1987`:case`l1`:case`latin1`:case`us-ascii`:case`windows-1252`:case`x-cp1252`:return`windows-1252`;case`cp1253`:case`windows-1253`:case`x-cp1253`:return`windows-1253`;case`cp1254`:case`csisolatin5`:case`iso-8859-9`:case`iso-ir-148`:case`iso8859-9`:case`iso88599`:case`iso_8859-9`:case`iso_8859-9:1989`:case`l5`:case`latin5`:case`windows-1254`:case`x-cp1254`:return`windows-1254`;case`cp1255`:case`windows-1255`:case`x-cp1255`:return`windows-1255`;case`cp1256`:case`windows-1256`:case`x-cp1256`:return`windows-1256`;case`cp1257`:case`windows-1257`:case`x-cp1257`:return`windows-1257`;case`cp1258`:case`windows-1258`:case`x-cp1258`:return`windows-1258`;case`x-mac-cyrillic`:case`x-mac-ukrainian`:return`x-mac-cyrillic`;case`chinese`:case`csgb2312`:case`csiso58gb231280`:case`gb2312`:case`gb_2312`:case`gb_2312-80`:case`gbk`:case`iso-ir-58`:case`x-gbk`:return`GBK`;case`gb18030`:return`gb18030`;case`big5`:case`big5-hkscs`:case`cn-big5`:case`csbig5`:case`x-x-big5`:return`Big5`;case`cseucpkdfmtjapanese`:case`euc-jp`:case`x-euc-jp`:return`EUC-JP`;case`csiso2022jp`:case`iso-2022-jp`:return`ISO-2022-JP`;case`csshiftjis`:case`ms932`:case`ms_kanji`:case`shift-jis`:case`shift_jis`:case`sjis`:case`windows-31j`:case`x-sjis`:return`Shift_JIS`;case`cseuckr`:case`csksc56011987`:case`euc-kr`:case`iso-ir-149`:case`korean`:case`ks_c_5601-1987`:case`ks_c_5601-1989`:case`ksc5601`:case`ksc_5601`:case`windows-949`:return`EUC-KR`;case`csiso2022kr`:case`hz-gb-2312`:case`iso-2022-cn`:case`iso-2022-cn-ext`:case`iso-2022-kr`:case`replacement`:return`replacement`;case`unicodefffe`:case`utf-16be`:return`UTF-16BE`;case`csunicode`:case`iso-10646-ucs-2`:case`ucs-2`:case`unicode`:case`unicodefeff`:case`utf-16`:case`utf-16le`:return`UTF-16LE`;case`x-user-defined`:return`x-user-defined`;default:return`failure`}}t.exports={getEncoding:n}})),We=/* @__PURE__ */ m(((e,t)=>{let{kState:n,kError:r,kResult:i,kAborted:a,kLastProgressEventFired:o}=Ve(),{ProgressEvent:s}=He(),{getEncoding:c}=Ue(),{serializeAMimeType:l,parseMIMEType:u}=z(),{types:d}=h(`node:util`),{StringDecoder:f}=h(`string_decoder`),{btoa:p}=h(`node:buffer`),m={enumerable:!0,writable:!1,configurable:!1};function g(e,t,s,c){if(e[n]===`loading`)throw new DOMException(`Invalid state`,`InvalidStateError`);e[n]=`loading`,e[i]=null,e[r]=null;let l=t.stream().getReader(),u=[],f=l.read(),p=!0;(async()=>{for(;!e[a];)try{let{done:m,value:h}=await f;if(p&&!e[a]&&queueMicrotask(()=>{_(`loadstart`,e)}),p=!1,!m&&d.isUint8Array(h))u.push(h),(e[o]===void 0||Date.now()-e[o]>=50)&&!e[a]&&(e[o]=Date.now(),queueMicrotask(()=>{_(`progress`,e)})),f=l.read();else if(m){queueMicrotask(()=>{e[n]=`done`;try{let n=v(u,s,t.type,c);if(e[a])return;e[i]=n,_(`load`,e)}catch(t){e[r]=t,_(`error`,e)}e[n]!==`loading`&&_(`loadend`,e)});break}}catch(t){if(e[a])return;queueMicrotask(()=>{e[n]=`done`,e[r]=t,_(`error`,e),e[n]!==`loading`&&_(`loadend`,e)});break}})()}function _(e,t){let n=new s(e,{bubbles:!1,cancelable:!1});t.dispatchEvent(n)}function v(e,t,n,r){switch(t){case`DataURL`:{let t=`data:`,r=u(n||`application/octet-stream`);r!==`failure`&&(t+=l(r)),t+=`;base64,`;let i=new f(`latin1`);for(let n of e)t+=p(i.write(n));return t+=p(i.end()),t}case`Text`:{let t=`failure`;if(r&&(t=c(r)),t===`failure`&&n){let e=u(n);e!==`failure`&&(t=c(e.parameters.get(`charset`)))}return t===`failure`&&(t=`UTF-8`),y(e,t)}case`ArrayBuffer`:return x(e).buffer;case`BinaryString`:{let t=``,n=new f(`latin1`);for(let r of e)t+=n.write(r);return t+=n.end(),t}}}function y(e,t){let n=x(e),r=b(n),i=0;r!==null&&(t=r,i=r===`UTF-8`?3:2);let a=n.slice(i);return new TextDecoder(t).decode(a)}function b(e){let[t,n,r]=e;return t===239&&n===187&&r===191?`UTF-8`:t===254&&n===255?`UTF-16BE`:t===255&&n===254?`UTF-16LE`:null}function x(e){let t=e.reduce((e,t)=>e+t.byteLength,0),n=0;return e.reduce((e,t)=>(e.set(t,n),n+=t.byteLength,e),new Uint8Array(t))}t.exports={staticPropertyDescriptors:m,readOperation:g,fireAProgressEvent:_}})),Ge=/* @__PURE__ */ m(((e,t)=>{let{staticPropertyDescriptors:n,readOperation:r,fireAProgressEvent:i}=We(),{kState:a,kError:o,kResult:s,kEvents:c,kAborted:l}=Ve(),{webidl:u}=B(),{kEnumerableProperty:d}=O();var f=class e extends EventTarget{constructor(){super(),this[a]=`empty`,this[s]=null,this[o]=null,this[c]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(t){u.brandCheck(this,e),u.argumentLengthCheck(arguments,1,`FileReader.readAsArrayBuffer`),t=u.converters.Blob(t,{strict:!1}),r(this,t,`ArrayBuffer`)}readAsBinaryString(t){u.brandCheck(this,e),u.argumentLengthCheck(arguments,1,`FileReader.readAsBinaryString`),t=u.converters.Blob(t,{strict:!1}),r(this,t,`BinaryString`)}readAsText(t,n=void 0){u.brandCheck(this,e),u.argumentLengthCheck(arguments,1,`FileReader.readAsText`),t=u.converters.Blob(t,{strict:!1}),n!==void 0&&(n=u.converters.DOMString(n,`FileReader.readAsText`,`encoding`)),r(this,t,`Text`,n)}readAsDataURL(t){u.brandCheck(this,e),u.argumentLengthCheck(arguments,1,`FileReader.readAsDataURL`),t=u.converters.Blob(t,{strict:!1}),r(this,t,`DataURL`)}abort(){this[a]===`empty`||this[a]===`done`?this[s]=null:(this[a]===`loading`&&(this[a]=`done`,this[s]=null),this[l]=!0,i(`abort`,this),this[a]!==`loading`&&i(`loadend`,this))}get readyState(){switch(u.brandCheck(this,e),this[a]){case`empty`:return this.EMPTY;case`loading`:return this.LOADING;case`done`:return this.DONE}}get result(){return u.brandCheck(this,e),this[s]}get error(){return u.brandCheck(this,e),this[o]}get onloadend(){return u.brandCheck(this,e),this[c].loadend}set onloadend(t){u.brandCheck(this,e),this[c].loadend&&this.removeEventListener(`loadend`,this[c].loadend),typeof t==`function`?(this[c].loadend=t,this.addEventListener(`loadend`,t)):this[c].loadend=null}get onerror(){return u.brandCheck(this,e),this[c].error}set onerror(t){u.brandCheck(this,e),this[c].error&&this.removeEventListener(`error`,this[c].error),typeof t==`function`?(this[c].error=t,this.addEventListener(`error`,t)):this[c].error=null}get onloadstart(){return u.brandCheck(this,e),this[c].loadstart}set onloadstart(t){u.brandCheck(this,e),this[c].loadstart&&this.removeEventListener(`loadstart`,this[c].loadstart),typeof t==`function`?(this[c].loadstart=t,this.addEventListener(`loadstart`,t)):this[c].loadstart=null}get onprogress(){return u.brandCheck(this,e),this[c].progress}set onprogress(t){u.brandCheck(this,e),this[c].progress&&this.removeEventListener(`progress`,this[c].progress),typeof t==`function`?(this[c].progress=t,this.addEventListener(`progress`,t)):this[c].progress=null}get onload(){return u.brandCheck(this,e),this[c].load}set onload(t){u.brandCheck(this,e),this[c].load&&this.removeEventListener(`load`,this[c].load),typeof t==`function`?(this[c].load=t,this.addEventListener(`load`,t)):this[c].load=null}get onabort(){return u.brandCheck(this,e),this[c].abort}set onabort(t){u.brandCheck(this,e),this[c].abort&&this.removeEventListener(`abort`,this[c].abort),typeof t==`function`?(this[c].abort=t,this.addEventListener(`abort`,t)):this[c].abort=null}};f.EMPTY=f.prototype.EMPTY=0,f.LOADING=f.prototype.LOADING=1,f.DONE=f.prototype.DONE=2,Object.defineProperties(f.prototype,{EMPTY:n,LOADING:n,DONE:n,readAsArrayBuffer:d,readAsBinaryString:d,readAsText:d,readAsDataURL:d,abort:d,readyState:d,result:d,error:d,onloadstart:d,onprogress:d,onload:d,onabort:d,onerror:d,onloadend:d,[Symbol.toStringTag]:{value:`FileReader`,writable:!1,enumerable:!1,configurable:!0}}),Object.defineProperties(f,{EMPTY:n,LOADING:n,DONE:n}),t.exports={FileReader:f}})),Ke=/* @__PURE__ */ m(((e,t)=>{t.exports={kConstruct:w().kConstruct}})),qe=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),{URLSerializer:r}=z(),{isValidHeaderName:i}=V();function a(e,t,n=!1){return r(e,n)===r(t,n)}function o(e){n(e!==null);let t=[];for(let n of e.split(`,`))n=n.trim(),i(n)&&t.push(n);return t}t.exports={urlEquals:a,getFieldValues:o}})),Je=/* @__PURE__ */ m(((e,t)=>{let{kConstruct:n}=Ke(),{urlEquals:r,getFieldValues:i}=qe(),{kEnumerableProperty:a,isDisturbed:o}=O(),{webidl:s}=B(),{Response:c,cloneResponse:l,fromInnerResponse:u}=Le(),{Request:d,fromInnerRequest:f}=ze(),{kState:p}=H(),{fetching:m}=Be(),{urlIsHttpHttpsScheme:g,createDeferredPromise:_,readAllBytes:v}=V(),y=h(`node:assert`);var b=class e{#e;constructor(){arguments[0]!==n&&s.illegalConstructor(),s.util.markAsUncloneable(this),this.#e=arguments[1]}async match(t,n={}){s.brandCheck(this,e);let r=`Cache.match`;s.argumentLengthCheck(arguments,1,r),t=s.converters.RequestInfo(t,r,`request`),n=s.converters.CacheQueryOptions(n,r,`options`);let i=this.#i(t,n,1);if(i.length!==0)return i[0]}async matchAll(t=void 0,n={}){s.brandCheck(this,e);let r=`Cache.matchAll`;return t!==void 0&&(t=s.converters.RequestInfo(t,r,`request`)),n=s.converters.CacheQueryOptions(n,r,`options`),this.#i(t,n)}async add(t){s.brandCheck(this,e);let n=`Cache.add`;s.argumentLengthCheck(arguments,1,n),t=s.converters.RequestInfo(t,n,`request`);let r=[t];return await this.addAll(r)}async addAll(t){s.brandCheck(this,e);let n=`Cache.addAll`;s.argumentLengthCheck(arguments,1,n);let r=[],a=[];for(let e of t){if(e===void 0)throw s.errors.conversionFailed({prefix:n,argument:`Argument 1`,types:[`undefined is not allowed`]});if(e=s.converters.RequestInfo(e),typeof e==`string`)continue;let t=e[p];if(!g(t.url)||t.method!==`GET`)throw s.errors.exception({header:n,message:`Expected http/s scheme when method is not GET.`})}let o=[];for(let e of t){let t=new d(e)[p];if(!g(t.url))throw s.errors.exception({header:n,message:`Expected http/s scheme.`});t.initiator=`fetch`,t.destination=`subresource`,a.push(t);let c=_();o.push(m({request:t,processResponse(e){if(e.type===`error`||e.status===206||e.status<200||e.status>299)c.reject(s.errors.exception({header:`Cache.addAll`,message:`Received an invalid status code or the request failed.`}));else if(e.headersList.contains(`vary`)){let t=i(e.headersList.get(`vary`));for(let e of t)if(e===`*`){c.reject(s.errors.exception({header:`Cache.addAll`,message:`invalid vary field value`}));for(let e of o)e.abort();return}}},processResponseEndOfBody(e){e.aborted?c.reject(new DOMException(`aborted`,`AbortError`)):c.resolve(e)}})),r.push(c.promise)}let c=await Promise.all(r),l=[],u=0;for(let e of c){let t={type:`put`,request:a[u],response:e};l.push(t),u++}let f=_(),h=null;try{this.#t(l)}catch(e){h=e}return queueMicrotask(()=>{h===null?f.resolve(void 0):f.reject(h)}),f.promise}async put(t,n){s.brandCheck(this,e);let r=`Cache.put`;s.argumentLengthCheck(arguments,2,r),t=s.converters.RequestInfo(t,r,`request`),n=s.converters.Response(n,r,`response`);let a=null;if(a=t instanceof d?t[p]:new d(t)[p],!g(a.url)||a.method!==`GET`)throw s.errors.exception({header:r,message:`Expected an http/s scheme when method is not GET`});let c=n[p];if(c.status===206)throw s.errors.exception({header:r,message:`Got 206 status`});if(c.headersList.contains(`vary`)){let e=i(c.headersList.get(`vary`));for(let t of e)if(t===`*`)throw s.errors.exception({header:r,message:`Got * vary field value`})}if(c.body&&(o(c.body.stream)||c.body.stream.locked))throw s.errors.exception({header:r,message:`Response body is locked or disturbed`});let u=l(c),f=_();if(c.body!=null){let e=c.body.stream.getReader();v(e).then(f.resolve,f.reject)}else f.resolve(void 0);let m=[],h={type:`put`,request:a,response:u};m.push(h);let y=await f.promise;u.body!=null&&(u.body.source=y);let b=_(),x=null;try{this.#t(m)}catch(e){x=e}return queueMicrotask(()=>{x===null?b.resolve():b.reject(x)}),b.promise}async delete(t,n={}){s.brandCheck(this,e);let r=`Cache.delete`;s.argumentLengthCheck(arguments,1,r),t=s.converters.RequestInfo(t,r,`request`),n=s.converters.CacheQueryOptions(n,r,`options`);let i=null;if(t instanceof d){if(i=t[p],i.method!==`GET`&&!n.ignoreMethod)return!1}else y(typeof t==`string`),i=new d(t)[p];let a=[],o={type:`delete`,request:i,options:n};a.push(o);let c=_(),l=null,u;try{u=this.#t(a)}catch(e){l=e}return queueMicrotask(()=>{l===null?c.resolve(!!u?.length):c.reject(l)}),c.promise}async keys(t=void 0,n={}){s.brandCheck(this,e);let r=`Cache.keys`;t!==void 0&&(t=s.converters.RequestInfo(t,r,`request`)),n=s.converters.CacheQueryOptions(n,r,`options`);let i=null;if(t!==void 0){if(t instanceof d){if(i=t[p],i.method!==`GET`&&!n.ignoreMethod)return[]}else typeof t==`string`&&(i=new d(t)[p])}let a=_(),o=[];if(t===void 0)for(let e of this.#e)o.push(e[0]);else{let e=this.#n(i,n);for(let t of e)o.push(t[0])}return queueMicrotask(()=>{let e=[];for(let t of o){let n=f(t,new AbortController().signal,`immutable`);e.push(n)}a.resolve(Object.freeze(e))}),a.promise}#t(e){let t=this.#e,n=[...t],r=[],i=[];try{for(let n of e){if(n.type!==`delete`&&n.type!==`put`)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`operation type does not match "delete" or "put"`});if(n.type===`delete`&&n.response!=null)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`delete operation should not have an associated response`});if(this.#n(n.request,n.options,r).length)throw new DOMException(`???`,`InvalidStateError`);let e;if(n.type===`delete`){if(e=this.#n(n.request,n.options),e.length===0)return[];for(let n of e){let e=t.indexOf(n);y(e!==-1),t.splice(e,1)}}else if(n.type===`put`){if(n.response==null)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`put operation should have an associated response`});let i=n.request;if(!g(i.url))throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`expected http or https scheme`});if(i.method!==`GET`)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`not get method`});if(n.options!=null)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`options must not be defined`});e=this.#n(n.request);for(let n of e){let e=t.indexOf(n);y(e!==-1),t.splice(e,1)}t.push([n.request,n.response]),r.push([n.request,n.response])}i.push([n.request,n.response])}return i}catch(e){throw this.#e.length=0,this.#e=n,e}}#n(e,t,n){let r=[],i=n??this.#e;for(let n of i){let[i,a]=n;this.#r(e,i,a,t)&&r.push(n)}return r}#r(e,t,n=null,a){let o=new URL(e.url),s=new URL(t.url);if(a?.ignoreSearch&&(s.search=``,o.search=``),!r(o,s,!0))return!1;if(n==null||a?.ignoreVary||!n.headersList.contains(`vary`))return!0;let c=i(n.headersList.get(`vary`));for(let n of c)if(n===`*`||t.headersList.get(n)!==e.headersList.get(n))return!1;return!0}#i(e,t,n=1/0){let r=null;if(e!==void 0){if(e instanceof d){if(r=e[p],r.method!==`GET`&&!t.ignoreMethod)return[]}else typeof e==`string`&&(r=new d(e)[p])}let i=[];if(e===void 0)for(let e of this.#e)i.push(e[1]);else{let e=this.#n(r,t);for(let t of e)i.push(t[1])}let a=[];for(let e of i){let t=u(e,`immutable`);if(a.push(t.clone()),a.length>=n)break}return Object.freeze(a)}};Object.defineProperties(b.prototype,{[Symbol.toStringTag]:{value:`Cache`,configurable:!0},match:a,matchAll:a,add:a,addAll:a,put:a,delete:a,keys:a});let x=[{key:`ignoreSearch`,converter:s.converters.boolean,defaultValue:()=>!1},{key:`ignoreMethod`,converter:s.converters.boolean,defaultValue:()=>!1},{key:`ignoreVary`,converter:s.converters.boolean,defaultValue:()=>!1}];s.converters.CacheQueryOptions=s.dictionaryConverter(x),s.converters.MultiCacheQueryOptions=s.dictionaryConverter([...x,{key:`cacheName`,converter:s.converters.DOMString}]),s.converters.Response=s.interfaceConverter(c),s.converters[`sequence`]=s.sequenceConverter(s.converters.RequestInfo),t.exports={Cache:b}})),Ye=/* @__PURE__ */ m(((e,t)=>{let{kConstruct:n}=Ke(),{Cache:r}=Je(),{webidl:i}=B(),{kEnumerableProperty:a}=O();var o=class e{#e=/* @__PURE__ */ new Map;constructor(){arguments[0]!==n&&i.illegalConstructor(),i.util.markAsUncloneable(this)}async match(t,a={}){if(i.brandCheck(this,e),i.argumentLengthCheck(arguments,1,`CacheStorage.match`),t=i.converters.RequestInfo(t),a=i.converters.MultiCacheQueryOptions(a),a.cacheName!=null){if(this.#e.has(a.cacheName)){let e=this.#e.get(a.cacheName);return await new r(n,e).match(t,a)}}else for(let e of this.#e.values()){let i=await new r(n,e).match(t,a);if(i!==void 0)return i}}async has(t){i.brandCheck(this,e);let n=`CacheStorage.has`;return i.argumentLengthCheck(arguments,1,n),t=i.converters.DOMString(t,n,`cacheName`),this.#e.has(t)}async open(t){i.brandCheck(this,e);let a=`CacheStorage.open`;if(i.argumentLengthCheck(arguments,1,a),t=i.converters.DOMString(t,a,`cacheName`),this.#e.has(t)){let e=this.#e.get(t);return new r(n,e)}let o=[];return this.#e.set(t,o),new r(n,o)}async delete(t){i.brandCheck(this,e);let n=`CacheStorage.delete`;return i.argumentLengthCheck(arguments,1,n),t=i.converters.DOMString(t,n,`cacheName`),this.#e.delete(t)}async keys(){return i.brandCheck(this,e),[...this.#e.keys()]}};Object.defineProperties(o.prototype,{[Symbol.toStringTag]:{value:`CacheStorage`,configurable:!0},match:a,has:a,open:a,delete:a,keys:a}),t.exports={CacheStorage:o}})),Xe=/* @__PURE__ */ m(((e,t)=>{t.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}})),Ze=/* @__PURE__ */ m(((e,t)=>{function n(e){for(let t=0;t=0&&n<=8||n>=10&&n<=31||n===127)return!0}return!1}function r(e){for(let t=0;t126||n===34||n===40||n===41||n===60||n===62||n===64||n===44||n===59||n===58||n===92||n===47||n===91||n===93||n===63||n===61||n===123||n===125)throw Error(`Invalid cookie name`)}}function i(e){let t=e.length,n=0;if(e[0]===`"`){if(t===1||e[t-1]!==`"`)throw Error(`Invalid cookie value`);--t,++n}for(;n126||t===34||t===44||t===59||t===92)throw Error(`Invalid cookie value`)}}function a(e){for(let t=0;t126||n===59)throw Error(`Invalid cookie path`)}}function o(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function s(e){if(e===` `)return;if(e.length>255)throw Error(`Invalid cookie domain`);let t=0;for(let n=0;n63)throw Error(`Invalid cookie domain`)}if(t===0||e.charCodeAt(e.length-1)===45)throw Error(`Invalid cookie domain`)}let c=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],l=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],u=Array(61).fill(0).map((e,t)=>t.toString().padStart(2,`0`));function d(e){return typeof e==`number`&&(e=new Date(e)),`${c[e.getUTCDay()]}, ${u[e.getUTCDate()]} ${l[e.getUTCMonth()]} ${e.getUTCFullYear()} ${u[e.getUTCHours()]}:${u[e.getUTCMinutes()]}:${u[e.getUTCSeconds()]} GMT`}function f(e){if(e<0)throw Error(`Invalid cookie max-age`)}function p(e){if(e.name.length===0)return null;r(e.name),i(e.value);let t=[`${e.name}=${e.value}`];e.name.startsWith(`__Secure-`)&&(e.secure=!0),e.name.startsWith(`__Host-`)&&(e.secure=!0,e.domain=null,e.path=`/`),e.secure&&t.push(`Secure`),e.httpOnly&&t.push(`HttpOnly`),typeof e.maxAge==`number`&&(f(e.maxAge),t.push(`Max-Age=${e.maxAge}`)),e.domain&&(s(e.domain),t.push(`Domain=${e.domain}`)),e.path&&(a(e.path),t.push(`Path=${e.path}`)),e.expires&&e.expires.toString()!==`Invalid Date`&&t.push(`Expires=${d(e.expires)}`),e.sameSite&&t.push(`SameSite=${e.sameSite}`);for(let n of e.unparsed){if(!n.includes(`=`))throw Error(`Invalid unparsed`);let[e,...a]=n.split(`=`),o=e.trim(),s=a.join(`=`);r(o),i(s),t.push(`${o}=${s}`)}return t.join(`; `)}t.exports={isCTLExcludingHtab:n,validateCookieName:r,validateCookiePath:a,validateCookieValue:i,toIMFDate:d,stringify:p}})),Qe=/* @__PURE__ */ m(((e,t)=>{let{maxNameValuePairSize:n,maxAttributeValueSize:r}=Xe(),{isCTLExcludingHtab:i}=Ze(),{collectASequenceOfCodePointsFast:a}=z(),o=h(`node:assert`);function s(e){if(i(e))return null;let t=``,r=``,o=``,s=``;if(e.includes(`;`)){let n={position:0};t=a(`;`,e,n),r=e.slice(n.position)}else t=e;if(!t.includes(`=`))s=t;else{let e={position:0};o=a(`=`,t,e),s=t.slice(e.position+1)}return o=o.trim(),s=s.trim(),o.length+s.length>n?null:{name:o,value:s,...c(r)}}function c(e,t={}){if(e.length===0)return t;o(e[0]===`;`),e=e.slice(1);let n=``;e.includes(`;`)?(n=a(`;`,e,{position:0}),e=e.slice(n.length)):(n=e,e=``);let i=``,s=``;if(n.includes(`=`)){let e={position:0};i=a(`=`,n,e),s=n.slice(e.position+1)}else i=n;if(i=i.trim(),s=s.trim(),s.length>r)return c(e,t);let l=i.toLowerCase();if(l===`expires`)t.expires=new Date(s);else if(l===`max-age`){let n=s.charCodeAt(0);if((n<48||n>57)&&s[0]!==`-`||!/^\d+$/.test(s))return c(e,t);t.maxAge=Number(s)}else if(l===`domain`){let e=s;e[0]===`.`&&(e=e.slice(1)),e=e.toLowerCase(),t.domain=e}else if(l===`path`){let e=``;e=s.length===0||s[0]!==`/`?`/`:s,t.path=e}else if(l===`secure`)t.secure=!0;else if(l===`httponly`)t.httpOnly=!0;else if(l===`samesite`){let e=s.toLowerCase();e===`none`?t.sameSite=`None`:e===`strict`?t.sameSite=`Strict`:e===`lax`&&(t.sameSite=`Lax`)}else t.unparsed??=[],t.unparsed.push(`${i}=${s}`);return c(e,t)}t.exports={parseSetCookie:s,parseUnparsedAttributes:c}})),$e=/* @__PURE__ */ m(((e,t)=>{let{parseSetCookie:n}=Qe(),{stringify:r}=Ze(),{webidl:i}=B(),{Headers:a}=Ie();function o(e){i.argumentLengthCheck(arguments,1,`getCookies`),i.brandCheck(e,a,{strict:!1});let t=e.get(`cookie`),n={};if(!t)return n;for(let e of t.split(`;`)){let[t,...r]=e.split(`=`);n[t.trim()]=r.join(`=`)}return n}function s(e,t,n){i.brandCheck(e,a,{strict:!1});let r=`deleteCookie`;i.argumentLengthCheck(arguments,2,r),t=i.converters.DOMString(t,r,`name`),n=i.converters.DeleteCookieAttributes(n),l(e,{name:t,value:``,expires:/* @__PURE__ */ new Date(0),...n})}function c(e){i.argumentLengthCheck(arguments,1,`getSetCookies`),i.brandCheck(e,a,{strict:!1});let t=e.getSetCookie();return t?t.map(e=>n(e)):[]}function l(e,t){i.argumentLengthCheck(arguments,2,`setCookie`),i.brandCheck(e,a,{strict:!1}),t=i.converters.Cookie(t);let n=r(t);n&&e.append(`Set-Cookie`,n)}i.converters.DeleteCookieAttributes=i.dictionaryConverter([{converter:i.nullableConverter(i.converters.DOMString),key:`path`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.DOMString),key:`domain`,defaultValue:()=>null}]),i.converters.Cookie=i.dictionaryConverter([{converter:i.converters.DOMString,key:`name`},{converter:i.converters.DOMString,key:`value`},{converter:i.nullableConverter(e=>typeof e==`number`?i.converters[`unsigned long long`](e):new Date(e)),key:`expires`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters[`long long`]),key:`maxAge`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.DOMString),key:`domain`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.DOMString),key:`path`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.boolean),key:`secure`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.boolean),key:`httpOnly`,defaultValue:()=>null},{converter:i.converters.USVString,key:`sameSite`,allowedValues:[`Strict`,`Lax`,`None`]},{converter:i.sequenceConverter(i.converters.DOMString),key:`unparsed`,defaultValue:()=>[]}]),t.exports={getCookies:o,deleteCookie:s,getSetCookies:c,setCookie:l}})),et=/* @__PURE__ */ m(((e,t)=>{let{webidl:n}=B(),{kEnumerableProperty:r}=O(),{kConstruct:i}=w(),{MessagePort:a}=h(`node:worker_threads`);var o=class e extends Event{#e;constructor(e,t={}){if(e===i){super(arguments[1],arguments[2]),n.util.markAsUncloneable(this);return}let r=`MessageEvent constructor`;n.argumentLengthCheck(arguments,1,r),e=n.converters.DOMString(e,r,`type`),t=n.converters.MessageEventInit(t,r,`eventInitDict`),super(e,t),this.#e=t,n.util.markAsUncloneable(this)}get data(){return n.brandCheck(this,e),this.#e.data}get origin(){return n.brandCheck(this,e),this.#e.origin}get lastEventId(){return n.brandCheck(this,e),this.#e.lastEventId}get source(){return n.brandCheck(this,e),this.#e.source}get ports(){return n.brandCheck(this,e),Object.isFrozen(this.#e.ports)||Object.freeze(this.#e.ports),this.#e.ports}initMessageEvent(t,r=!1,i=!1,a=null,o=``,s=``,c=null,l=[]){return n.brandCheck(this,e),n.argumentLengthCheck(arguments,1,`MessageEvent.initMessageEvent`),new e(t,{bubbles:r,cancelable:i,data:a,origin:o,lastEventId:s,source:c,ports:l})}static createFastMessageEvent(t,n){let r=new e(i,t,n);return r.#e=n,r.#e.data??=null,r.#e.origin??=``,r.#e.lastEventId??=``,r.#e.source??=null,r.#e.ports??=[],r}};let{createFastMessageEvent:s}=o;delete o.createFastMessageEvent;var c=class e extends Event{#e;constructor(e,t={}){let r=`CloseEvent constructor`;n.argumentLengthCheck(arguments,1,r),e=n.converters.DOMString(e,r,`type`),t=n.converters.CloseEventInit(t),super(e,t),this.#e=t,n.util.markAsUncloneable(this)}get wasClean(){return n.brandCheck(this,e),this.#e.wasClean}get code(){return n.brandCheck(this,e),this.#e.code}get reason(){return n.brandCheck(this,e),this.#e.reason}},l=class e extends Event{#e;constructor(e,t){let r=`ErrorEvent constructor`;n.argumentLengthCheck(arguments,1,r),super(e,t),n.util.markAsUncloneable(this),e=n.converters.DOMString(e,r,`type`),t=n.converters.ErrorEventInit(t??{}),this.#e=t}get message(){return n.brandCheck(this,e),this.#e.message}get filename(){return n.brandCheck(this,e),this.#e.filename}get lineno(){return n.brandCheck(this,e),this.#e.lineno}get colno(){return n.brandCheck(this,e),this.#e.colno}get error(){return n.brandCheck(this,e),this.#e.error}};Object.defineProperties(o.prototype,{[Symbol.toStringTag]:{value:`MessageEvent`,configurable:!0},data:r,origin:r,lastEventId:r,source:r,ports:r,initMessageEvent:r}),Object.defineProperties(c.prototype,{[Symbol.toStringTag]:{value:`CloseEvent`,configurable:!0},reason:r,code:r,wasClean:r}),Object.defineProperties(l.prototype,{[Symbol.toStringTag]:{value:`ErrorEvent`,configurable:!0},message:r,filename:r,lineno:r,colno:r,error:r}),n.converters.MessagePort=n.interfaceConverter(a),n.converters[`sequence`]=n.sequenceConverter(n.converters.MessagePort);let u=[{key:`bubbles`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`cancelable`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`composed`,converter:n.converters.boolean,defaultValue:()=>!1}];n.converters.MessageEventInit=n.dictionaryConverter([...u,{key:`data`,converter:n.converters.any,defaultValue:()=>null},{key:`origin`,converter:n.converters.USVString,defaultValue:()=>``},{key:`lastEventId`,converter:n.converters.DOMString,defaultValue:()=>``},{key:`source`,converter:n.nullableConverter(n.converters.MessagePort),defaultValue:()=>null},{key:`ports`,converter:n.converters[`sequence`],defaultValue:()=>[]}]),n.converters.CloseEventInit=n.dictionaryConverter([...u,{key:`wasClean`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`code`,converter:n.converters[`unsigned short`],defaultValue:()=>0},{key:`reason`,converter:n.converters.USVString,defaultValue:()=>``}]),n.converters.ErrorEventInit=n.dictionaryConverter([...u,{key:`message`,converter:n.converters.DOMString,defaultValue:()=>``},{key:`filename`,converter:n.converters.USVString,defaultValue:()=>``},{key:`lineno`,converter:n.converters[`unsigned long`],defaultValue:()=>0},{key:`colno`,converter:n.converters[`unsigned long`],defaultValue:()=>0},{key:`error`,converter:n.converters.any}]),t.exports={MessageEvent:o,CloseEvent:c,ErrorEvent:l,createFastMessageEvent:s}})),tt=/* @__PURE__ */ m(((e,t)=>{t.exports={uid:`258EAFA5-E914-47DA-95CA-C5AB0DC85B11`,sentCloseFrameState:{NOT_SENT:0,PROCESSING:1,SENT:2},staticPropertyDescriptors:{enumerable:!0,writable:!1,configurable:!1},states:{CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},opcodes:{CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},maxUnsigned16Bit:2**16-1,parserStates:{INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},emptyBuffer:Buffer.allocUnsafe(0),sendHints:{string:1,typedArray:2,arrayBuffer:3,blob:4}}})),nt=/* @__PURE__ */ m(((e,t)=>{t.exports={kWebSocketURL:Symbol(`url`),kReadyState:Symbol(`ready state`),kController:Symbol(`controller`),kResponse:Symbol(`response`),kBinaryType:Symbol(`binary type`),kSentClose:Symbol(`sent close`),kReceivedClose:Symbol(`received close`),kByteParser:Symbol(`byte parser`)}})),rt=/* @__PURE__ */ m(((e,t)=>{let{kReadyState:n,kController:r,kResponse:i,kBinaryType:a,kWebSocketURL:o}=nt(),{states:s,opcodes:c}=tt(),{ErrorEvent:l,createFastMessageEvent:u}=et(),{isUtf8:d}=h(`node:buffer`),{collectASequenceOfCodePointsFast:f,removeHTTPWhitespace:p}=z();function m(e){return e[n]===s.CONNECTING}function g(e){return e[n]===s.OPEN}function _(e){return e[n]===s.CLOSING}function v(e){return e[n]===s.CLOSED}function y(e,t,n=(e,t)=>new Event(e,t),r={}){let i=n(e,r);t.dispatchEvent(i)}function b(e,t,r){if(e[n]!==s.OPEN)return;let i;if(t===c.TEXT)try{i=N(r)}catch{w(e,`Received invalid UTF-8 in text frame.`);return}else t===c.BINARY&&(i=e[a]===`blob`?new Blob([r]):x(r));y(`message`,e,u,{origin:e[o].origin,data:i})}function x(e){return e.byteLength===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function S(e){if(e.length===0)return!1;for(let t=0;t126||n===34||n===40||n===41||n===44||n===47||n===58||n===59||n===60||n===61||n===62||n===63||n===64||n===91||n===92||n===93||n===123||n===125)return!1}return!0}function C(e){return e>=1e3&&e<1015?e!==1004&&e!==1005&&e!==1006:e>=3e3&&e<=4999}function w(e,t){let{[r]:n,[i]:a}=e;n.abort(),a?.socket&&!a.socket.destroyed&&a.socket.destroy(),t&&y(`error`,e,(e,t)=>new l(e,t),{error:Error(t),message:t})}function T(e){return e===c.CLOSE||e===c.PING||e===c.PONG}function E(e){return e===c.CONTINUATION}function D(e){return e===c.TEXT||e===c.BINARY}function O(e){return D(e)||E(e)||T(e)}function k(e){let t={position:0},n=/* @__PURE__ */ new Map;for(;t.position57)return!1}let t=Number.parseInt(e,10);return t>=8&&t<=15}let j=typeof process.versions.icu==`string`,M=j?new TextDecoder(`utf-8`,{fatal:!0}):void 0,N=j?M.decode.bind(M):function(e){if(d(e))return e.toString(`utf-8`);throw TypeError(`Invalid utf-8 received.`)};t.exports={isConnecting:m,isEstablished:g,isClosing:_,isClosed:v,fireEvent:y,isValidSubprotocol:S,isValidStatusCode:C,failWebsocketConnection:w,websocketMessageReceived:b,utf8Decode:N,isControlFrame:T,isContinuationFrame:E,isTextBinaryFrame:D,isValidOpcode:O,parseExtensions:k,isValidClientWindowBits:A}})),it=/* @__PURE__ */ m(((e,t)=>{let{maxUnsigned16Bit:n}=tt(),r=16386,i,a=null,o=r;try{i=h(`node:crypto`)}catch{i={randomFillSync:function(e,t,n){for(let t=0;t>`](e,t,n,r.bind(e)):s.converters[`record`](e,t,n)}throw s.errors.conversionFailed({prefix:`Headers constructor`,argument:`Argument 1`,types:[`sequence>`,`record`]})},t.exports={fill:m,compareHeaderName:_,Headers:y,HeadersList:v,getHeadersGuard:b,setHeadersGuard:x,setHeadersList:C,getHeadersList:S}})),Ie=/* @__PURE__ */ m(((e,t)=>{let{Headers:n,HeadersList:r,fill:i,getHeadersGuard:a,setHeadersGuard:o,setHeadersList:s}=Fe(),{extractBody:c,cloneBody:l,mixinBody:u,hasFinalizationRegistry:d,streamRegistry:f,bodyUnusable:p}=ie(),m=O(),g=h(`node:util`),{kEnumerableProperty:_}=m,{isValidReasonPhrase:v,isCancelled:y,isAborted:b,isBlobLike:x,serializeJavascriptValueToJSONString:S,isErrorLike:C,isomorphicEncode:T,environmentSettingsObject:E}=V(),{redirectStatusSet:D,nullBodyStatus:k}=te(),{kState:A,kHeaders:j}=H(),{webidl:M}=B(),{FormData:N}=re(),{URLSerializer:P}=z(),{kConstruct:F}=w(),I=h(`node:assert`),{types:L}=h(`node:util`),ee=new TextEncoder(`utf-8`);var R=class e{static error(){return se(ae(),`immutable`)}static json(e,t={}){M.argumentLengthCheck(arguments,1,`Response.json`),t!==null&&(t=M.converters.ResponseInit(t));let n=ee.encode(S(e)),r=c(n),i=se(U({}),`response`);return q(i,t,{body:r[0],type:`application/json`}),i}static redirect(e,t=302){M.argumentLengthCheck(arguments,1,`Response.redirect`),e=M.converters.USVString(e),t=M.converters[`unsigned short`](t);let n;try{n=new URL(e,E.settingsObject.baseUrl)}catch(t){throw TypeError(`Failed to parse URL from ${e}`,{cause:t})}if(!D.has(t))throw RangeError(`Invalid status code ${t}`);let r=se(U({}),`immutable`);r[A].status=t;let i=T(P(n));return r[A].headersList.append(`location`,i,!0),r}constructor(e=null,t={}){if(M.util.markAsUncloneable(this),e===F)return;e!==null&&(e=M.converters.BodyInit(e)),t=M.converters.ResponseInit(t),this[A]=U({}),this[j]=new n(F),o(this[j],`response`),s(this[j],this[A].headersList);let r=null;if(e!=null){let[t,n]=c(e);r={body:t,type:n}}q(this,t,r)}get type(){return M.brandCheck(this,e),this[A].type}get url(){M.brandCheck(this,e);let t=this[A].urlList,n=t[t.length-1]??null;return n===null?``:P(n,!0)}get redirected(){return M.brandCheck(this,e),this[A].urlList.length>1}get status(){return M.brandCheck(this,e),this[A].status}get ok(){return M.brandCheck(this,e),this[A].status>=200&&this[A].status<=299}get statusText(){return M.brandCheck(this,e),this[A].statusText}get headers(){return M.brandCheck(this,e),this[j]}get body(){return M.brandCheck(this,e),this[A].body?this[A].body.stream:null}get bodyUsed(){return M.brandCheck(this,e),!!this[A].body&&m.isDisturbed(this[A].body.stream)}clone(){if(M.brandCheck(this,e),p(this))throw M.errors.exception({header:`Response.clone`,message:`Body has already been consumed.`});let t=ne(this[A]);return d&&this[A].body?.stream&&f.register(this,new WeakRef(this[A].body.stream)),se(t,a(this[j]))}[g.inspect.custom](e,t){t.depth===null&&(t.depth=2),t.colors??=!0;let n={status:this.status,statusText:this.statusText,headers:this.headers,body:this.body,bodyUsed:this.bodyUsed,ok:this.ok,redirected:this.redirected,type:this.type,url:this.url};return`Response ${g.formatWithOptions(t,n)}`}};u(R),Object.defineProperties(R.prototype,{type:_,url:_,status:_,ok:_,redirected:_,statusText:_,headers:_,clone:_,body:_,bodyUsed:_,[Symbol.toStringTag]:{value:`Response`,configurable:!0}}),Object.defineProperties(R,{json:_,redirect:_,error:_});function ne(e){if(e.internalResponse)return G(ne(e.internalResponse),e.type);let t=U({...e,body:null});return e.body!=null&&(t.body=l(t,e.body)),t}function U(e){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:`default`,status:200,timingInfo:null,cacheState:``,statusText:``,...e,headersList:e?.headersList?new r(e?.headersList):new r,urlList:e?.urlList?[...e.urlList]:[]}}function ae(e){return U({type:`error`,status:0,error:C(e)?e:Error(e&&String(e)),aborted:e&&e.name===`AbortError`})}function oe(e){return e.type===`error`&&e.status===0}function W(e,t){return t={internalResponse:e,...t},new Proxy(e,{get(e,n){return n in t?t[n]:e[n]},set(e,n,r){return I(!(n in t)),e[n]=r,!0}})}function G(e,t){if(t===`basic`)return W(e,{type:`basic`,headersList:e.headersList});if(t===`cors`)return W(e,{type:`cors`,headersList:e.headersList});if(t===`opaque`)return W(e,{type:`opaque`,urlList:Object.freeze([]),status:0,statusText:``,body:null});if(t===`opaqueredirect`)return W(e,{type:`opaqueredirect`,status:0,statusText:``,headersList:[],body:null});I(!1)}function K(e,t=null){return I(y(e)),b(e)?ae(Object.assign(new DOMException(`The operation was aborted.`,`AbortError`),{cause:t})):ae(Object.assign(new DOMException(`Request was cancelled.`),{cause:t}))}function q(e,t,n){if(t.status!==null&&(t.status<200||t.status>599))throw RangeError(`init["status"] must be in the range of 200 to 599, inclusive.`);if(`statusText`in t&&t.statusText!=null&&!v(String(t.statusText)))throw TypeError(`Invalid statusText`);if(`status`in t&&t.status!=null&&(e[A].status=t.status),`statusText`in t&&t.statusText!=null&&(e[A].statusText=t.statusText),`headers`in t&&t.headers!=null&&i(e[j],t.headers),n){if(k.includes(e.status))throw M.errors.exception({header:`Response constructor`,message:`Invalid response status code ${e.status}`});e[A].body=n.body,n.type!=null&&!e[A].headersList.contains(`content-type`,!0)&&e[A].headersList.append(`content-type`,n.type,!0)}}function se(e,t){let r=new R(F);return r[A]=e,r[j]=new n(F),s(r[j],e.headersList),o(r[j],t),d&&e.body?.stream&&f.register(r,new WeakRef(e.body.stream)),r}M.converters.ReadableStream=M.interfaceConverter(ReadableStream),M.converters.FormData=M.interfaceConverter(N),M.converters.URLSearchParams=M.interfaceConverter(URLSearchParams),M.converters.XMLHttpRequestBodyInit=function(e,t,n){return typeof e==`string`?M.converters.USVString(e,t,n):x(e)?M.converters.Blob(e,t,n,{strict:!1}):ArrayBuffer.isView(e)||L.isArrayBuffer(e)?M.converters.BufferSource(e,t,n):m.isFormDataLike(e)?M.converters.FormData(e,t,n,{strict:!1}):e instanceof URLSearchParams?M.converters.URLSearchParams(e,t,n):M.converters.DOMString(e,t,n)},M.converters.BodyInit=function(e,t,n){return e instanceof ReadableStream?M.converters.ReadableStream(e,t,n):e?.[Symbol.asyncIterator]?e:M.converters.XMLHttpRequestBodyInit(e,t,n)},M.converters.ResponseInit=M.dictionaryConverter([{key:`status`,converter:M.converters[`unsigned short`],defaultValue:()=>200},{key:`statusText`,converter:M.converters.ByteString,defaultValue:()=>``},{key:`headers`,converter:M.converters.HeadersInit}]),t.exports={isNetworkError:oe,makeNetworkError:ae,makeResponse:U,makeAppropriateNetworkError:K,filterResponse:G,Response:R,cloneResponse:ne,fromInnerResponse:se}})),Le=/* @__PURE__ */ m(((e,t)=>{let{kConnected:n,kSize:r}=w();var i=class{constructor(e){this.value=e}deref(){return this.value[n]===0&&this.value[r]===0?void 0:this.value}},a=class{constructor(e){this.finalizer=e}register(e,t){e.on&&e.on(`disconnect`,()=>{e[n]===0&&e[r]===0&&this.finalizer(t)})}unregister(e){}};t.exports=function(){return process.env.NODE_V8_COVERAGE&&process.version.startsWith(`v18`)?(process._rawDebug(`Using compatibility WeakRef and FinalizationRegistry`),{WeakRef:i,FinalizationRegistry:a}):{WeakRef,FinalizationRegistry}}})),Re=/* @__PURE__ */ m(((e,t)=>{let{extractBody:n,mixinBody:r,cloneBody:i,bodyUnusable:a}=ie(),{Headers:o,fill:s,HeadersList:c,setHeadersGuard:l,getHeadersGuard:u,setHeadersList:d,getHeadersList:f}=Fe(),{FinalizationRegistry:p}=Le()(),m=O(),g=h(`node:util`),{isValidHTTPToken:_,sameOrigin:v,environmentSettingsObject:y}=V(),{forbiddenMethodsSet:b,corsSafeListedMethodsSet:x,referrerPolicy:S,requestRedirect:C,requestMode:T,requestCredentials:E,requestCache:D,requestDuplex:k}=te(),{kEnumerableProperty:A,normalizedMethodRecordsBase:j,normalizedMethodRecords:M}=m,{kHeaders:N,kSignal:P,kState:F,kDispatcher:I}=H(),{webidl:L}=B(),{URLSerializer:ee}=z(),{kConstruct:R}=w(),ne=h(`node:assert`),{getMaxListeners:re,setMaxListeners:U,getEventListeners:ae,defaultMaxListeners:oe}=h(`node:events`),W=Symbol(`abortController`),G=new p(({signal:e,abort:t})=>{e.removeEventListener(`abort`,t)}),K=/* @__PURE__ */ new WeakMap;function q(e){return t;function t(){let n=e.deref();if(n!==void 0){G.unregister(t),this.removeEventListener(`abort`,t),n.abort(this.reason);let e=K.get(n.signal);if(e!==void 0){if(e.size!==0){for(let t of e){let e=t.deref();e!==void 0&&e.abort(this.reason)}e.clear()}K.delete(n.signal)}}}}let se=!1;var J=class e{constructor(t,r={}){if(L.util.markAsUncloneable(this),t===R)return;let i=`Request constructor`;L.argumentLengthCheck(arguments,1,i),t=L.converters.RequestInfo(t,i,`input`),r=L.converters.RequestInit(r,i,`init`);let u=null,p=null,h=y.settingsObject.baseUrl,g=null;if(typeof t==`string`){this[I]=r.dispatcher;let e;try{e=new URL(t,h)}catch(e){throw TypeError(`Failed to parse URL from `+t,{cause:e})}if(e.username||e.password)throw TypeError(`Request cannot be constructed from a URL that includes credentials: `+t);u=ce({urlList:[e]}),p=`cors`}else this[I]=r.dispatcher||t[I],ne(t instanceof e),u=t[F],g=t[P];let S=y.settingsObject.origin,C=`client`;if(u.window?.constructor?.name===`EnvironmentSettingsObject`&&v(u.window,S)&&(C=u.window),r.window!=null)throw TypeError(`'window' option '${C}' must be null`);`window`in r&&(C=`no-window`),u=ce({method:u.method,headersList:u.headersList,unsafeRequest:u.unsafeRequest,client:y.settingsObject,window:C,priority:u.priority,origin:u.origin,referrer:u.referrer,referrerPolicy:u.referrerPolicy,mode:u.mode,credentials:u.credentials,cache:u.cache,redirect:u.redirect,integrity:u.integrity,keepalive:u.keepalive,reloadNavigation:u.reloadNavigation,historyNavigation:u.historyNavigation,urlList:[...u.urlList]});let w=Object.keys(r).length!==0;if(w&&(u.mode===`navigate`&&(u.mode=`same-origin`),u.reloadNavigation=!1,u.historyNavigation=!1,u.origin=`client`,u.referrer=`client`,u.referrerPolicy=``,u.url=u.urlList[u.urlList.length-1],u.urlList=[u.url]),r.referrer!==void 0){let e=r.referrer;if(e===``)u.referrer=`no-referrer`;else{let t;try{t=new URL(e,h)}catch(t){throw TypeError(`Referrer "${e}" is not a valid URL.`,{cause:t})}t.protocol===`about:`&&t.hostname===`client`||S&&!v(t,y.settingsObject.baseUrl)?u.referrer=`client`:u.referrer=t}}r.referrerPolicy!==void 0&&(u.referrerPolicy=r.referrerPolicy);let T;if(T=r.mode===void 0?p:r.mode,T===`navigate`)throw L.errors.exception({header:`Request constructor`,message:`invalid request mode navigate.`});if(T!=null&&(u.mode=T),r.credentials!==void 0&&(u.credentials=r.credentials),r.cache!==void 0&&(u.cache=r.cache),u.cache===`only-if-cached`&&u.mode!==`same-origin`)throw TypeError(`'only-if-cached' can be set only with 'same-origin' mode`);if(r.redirect!==void 0&&(u.redirect=r.redirect),r.integrity!=null&&(u.integrity=String(r.integrity)),r.keepalive!==void 0&&(u.keepalive=!!r.keepalive),r.method!==void 0){let e=r.method,t=M[e];if(t!==void 0)u.method=t;else{if(!_(e))throw TypeError(`'${e}' is not a valid HTTP method.`);let t=e.toUpperCase();if(b.has(t))throw TypeError(`'${e}' HTTP method is unsupported.`);e=j[t]??e,u.method=e}!se&&u.method===`patch`&&(process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.",{code:`UNDICI-FETCH-patch`}),se=!0)}r.signal!==void 0&&(g=r.signal),this[F]=u;let E=new AbortController;if(this[P]=E.signal,g!=null){if(!g||typeof g.aborted!=`boolean`||typeof g.addEventListener!=`function`)throw TypeError(`Failed to construct 'Request': member signal is not of type AbortSignal.`);if(g.aborted)E.abort(g.reason);else{this[W]=E;let e=q(new WeakRef(E));try{(typeof re==`function`&&re(g)===oe||ae(g,`abort`).length>=oe)&&U(1500,g)}catch{}m.addAbortListener(g,e),G.register(E,{signal:g,abort:e},e)}}if(this[N]=new o(R),d(this[N],u.headersList),l(this[N],`request`),T===`no-cors`){if(!x.has(u.method))throw TypeError(`'${u.method} is unsupported in no-cors mode.`);l(this[N],`request-no-cors`)}if(w){let e=f(this[N]),t=r.headers===void 0?new c(e):r.headers;if(e.clear(),t instanceof c){for(let{name:n,value:r}of t.rawValues())e.append(n,r,!1);e.cookies=t.cookies}else s(this[N],t)}let D=t instanceof e?t[F].body:null;if((r.body!=null||D!=null)&&(u.method===`GET`||u.method===`HEAD`))throw TypeError(`Request with GET/HEAD method cannot have body.`);let O=null;if(r.body!=null){let[e,t]=n(r.body,u.keepalive);O=e,t&&!f(this[N]).contains(`content-type`,!0)&&this[N].append(`content-type`,t)}let k=O??D;if(k!=null&&k.source==null){if(O!=null&&r.duplex==null)throw TypeError(`RequestInit: duplex option is required when sending a body.`);if(u.mode!==`same-origin`&&u.mode!==`cors`)throw TypeError(`If request is made from ReadableStream, mode should be "same-origin" or "cors"`);u.useCORSPreflightFlag=!0}let A=k;if(O==null&&D!=null){if(a(t))throw TypeError(`Cannot construct a Request with a Request object that has already been used.`);let e=new TransformStream;D.stream.pipeThrough(e),A={source:D.source,length:D.length,stream:e.readable}}this[F].body=A}get method(){return L.brandCheck(this,e),this[F].method}get url(){return L.brandCheck(this,e),ee(this[F].url)}get headers(){return L.brandCheck(this,e),this[N]}get destination(){return L.brandCheck(this,e),this[F].destination}get referrer(){return L.brandCheck(this,e),this[F].referrer===`no-referrer`?``:this[F].referrer===`client`?`about:client`:this[F].referrer.toString()}get referrerPolicy(){return L.brandCheck(this,e),this[F].referrerPolicy}get mode(){return L.brandCheck(this,e),this[F].mode}get credentials(){return this[F].credentials}get cache(){return L.brandCheck(this,e),this[F].cache}get redirect(){return L.brandCheck(this,e),this[F].redirect}get integrity(){return L.brandCheck(this,e),this[F].integrity}get keepalive(){return L.brandCheck(this,e),this[F].keepalive}get isReloadNavigation(){return L.brandCheck(this,e),this[F].reloadNavigation}get isHistoryNavigation(){return L.brandCheck(this,e),this[F].historyNavigation}get signal(){return L.brandCheck(this,e),this[P]}get body(){return L.brandCheck(this,e),this[F].body?this[F].body.stream:null}get bodyUsed(){return L.brandCheck(this,e),!!this[F].body&&m.isDisturbed(this[F].body.stream)}get duplex(){return L.brandCheck(this,e),`half`}clone(){if(L.brandCheck(this,e),a(this))throw TypeError(`unusable`);let t=Y(this[F]),n=new AbortController;if(this.signal.aborted)n.abort(this.signal.reason);else{let e=K.get(this.signal);e===void 0&&(e=/* @__PURE__ */ new Set,K.set(this.signal,e));let t=new WeakRef(n);e.add(t),m.addAbortListener(n.signal,q(t))}return le(t,n.signal,u(this[N]))}[g.inspect.custom](e,t){t.depth===null&&(t.depth=2),t.colors??=!0;let n={method:this.method,url:this.url,headers:this.headers,destination:this.destination,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,isReloadNavigation:this.isReloadNavigation,isHistoryNavigation:this.isHistoryNavigation,signal:this.signal};return`Request ${g.formatWithOptions(t,n)}`}};r(J);function ce(e){return{method:e.method??`GET`,localURLsOnly:e.localURLsOnly??!1,unsafeRequest:e.unsafeRequest??!1,body:e.body??null,client:e.client??null,reservedClient:e.reservedClient??null,replacesClientId:e.replacesClientId??``,window:e.window??`client`,keepalive:e.keepalive??!1,serviceWorkers:e.serviceWorkers??`all`,initiator:e.initiator??``,destination:e.destination??``,priority:e.priority??null,origin:e.origin??`client`,policyContainer:e.policyContainer??`client`,referrer:e.referrer??`client`,referrerPolicy:e.referrerPolicy??``,mode:e.mode??`no-cors`,useCORSPreflightFlag:e.useCORSPreflightFlag??!1,credentials:e.credentials??`same-origin`,useCredentials:e.useCredentials??!1,cache:e.cache??`default`,redirect:e.redirect??`follow`,integrity:e.integrity??``,cryptoGraphicsNonceMetadata:e.cryptoGraphicsNonceMetadata??``,parserMetadata:e.parserMetadata??``,reloadNavigation:e.reloadNavigation??!1,historyNavigation:e.historyNavigation??!1,userActivation:e.userActivation??!1,taintedOrigin:e.taintedOrigin??!1,redirectCount:e.redirectCount??0,responseTainting:e.responseTainting??`basic`,preventNoCacheCacheControlHeaderModification:e.preventNoCacheCacheControlHeaderModification??!1,done:e.done??!1,timingAllowFailed:e.timingAllowFailed??!1,urlList:e.urlList,url:e.urlList[0],headersList:e.headersList?new c(e.headersList):new c}}function Y(e){let t=ce({...e,body:null});return e.body!=null&&(t.body=i(t,e.body)),t}function le(e,t,n){let r=new J(R);return r[F]=e,r[P]=t,r[N]=new o(R),d(r[N],e.headersList),l(r[N],n),r}Object.defineProperties(J.prototype,{method:A,url:A,headers:A,redirect:A,clone:A,signal:A,duplex:A,destination:A,body:A,bodyUsed:A,isHistoryNavigation:A,isReloadNavigation:A,keepalive:A,integrity:A,cache:A,credentials:A,attribute:A,referrerPolicy:A,referrer:A,mode:A,[Symbol.toStringTag]:{value:`Request`,configurable:!0}}),L.converters.Request=L.interfaceConverter(J),L.converters.RequestInfo=function(e,t,n){return typeof e==`string`?L.converters.USVString(e,t,n):e instanceof J?L.converters.Request(e,t,n):L.converters.USVString(e,t,n)},L.converters.AbortSignal=L.interfaceConverter(AbortSignal),L.converters.RequestInit=L.dictionaryConverter([{key:`method`,converter:L.converters.ByteString},{key:`headers`,converter:L.converters.HeadersInit},{key:`body`,converter:L.nullableConverter(L.converters.BodyInit)},{key:`referrer`,converter:L.converters.USVString},{key:`referrerPolicy`,converter:L.converters.DOMString,allowedValues:S},{key:`mode`,converter:L.converters.DOMString,allowedValues:T},{key:`credentials`,converter:L.converters.DOMString,allowedValues:E},{key:`cache`,converter:L.converters.DOMString,allowedValues:D},{key:`redirect`,converter:L.converters.DOMString,allowedValues:C},{key:`integrity`,converter:L.converters.DOMString},{key:`keepalive`,converter:L.converters.boolean},{key:`signal`,converter:L.nullableConverter(e=>L.converters.AbortSignal(e,`RequestInit`,`signal`,{strict:!1}))},{key:`window`,converter:L.converters.any},{key:`duplex`,converter:L.converters.DOMString,allowedValues:k},{key:`dispatcher`,converter:L.converters.any}]),t.exports={Request:J,makeRequest:ce,fromInnerRequest:le,cloneRequest:Y}})),ze=/* @__PURE__ */ m(((e,t)=>{let{makeNetworkError:n,makeAppropriateNetworkError:r,filterResponse:i,makeResponse:a,fromInnerResponse:o}=Ie(),{HeadersList:s}=Fe(),{Request:c,cloneRequest:l}=Re(),u=h(`node:zlib`),{bytesMatch:d,makePolicyContainer:f,clonePolicyContainer:p,requestBadPort:m,TAOCheck:g,appendRequestOriginHeader:_,responseLocationURL:v,requestCurrentURL:y,setRequestReferrerPolicyOnRedirect:b,tryUpgradeRequestToAPotentiallyTrustworthyURL:x,createOpaqueTimingInfo:S,appendFetchMetadata:C,corsCheck:w,crossOriginResourcePolicyCheck:T,determineRequestsReferrer:E,coarsenedSharedCurrentTime:D,createDeferredPromise:k,isBlobLike:A,sameOrigin:j,isCancelled:M,isAborted:N,isErrorLike:P,fullyReadBody:F,readableStreamClose:I,isomorphicEncode:L,urlIsLocal:ee,urlIsHttpHttpsScheme:R,urlHasHttpsScheme:ne,clampAndCoarsenConnectionTimingInfo:re,simpleRangeHeaderValue:U,buildContentRange:ae,createInflate:oe,extractMimeType:W}=V(),{kState:G,kDispatcher:K}=H(),q=h(`node:assert`),{safelyExtractBody:se,extractBody:J}=ie(),{redirectStatusSet:ce,nullBodyStatus:Y,safeMethodsSet:le,requestBodyHeader:ue,subresourceSet:X}=te(),de=h(`node:events`),{Readable:fe,pipeline:pe,finished:me}=h(`node:stream`),{addAbortListener:he,isErrored:ge,isReadable:_e,bufferToLowerCasedHeaderName:ve}=O(),{dataURLProcessor:Z,serializeAMimeType:ye,minimizeSupportedMimeType:be}=z(),{getGlobalDispatcher:Q}=ke(),{webidl:xe}=B(),{STATUS_CODES:Se}=h(`node:http`),Ce=[`GET`,`HEAD`],we=typeof __UNDICI_IS_NODE__<`u`||typeof esbuildDetection<`u`?`node`:`undici`,Te;var Ee=class extends de{constructor(e){super(),this.dispatcher=e,this.connection=null,this.dump=!1,this.state=`ongoing`}terminate(e){this.state===`ongoing`&&(this.state=`terminated`,this.connection?.destroy(e),this.emit(`terminated`,e))}abort(e){this.state===`ongoing`&&(this.state=`aborted`,e||=new DOMException(`The operation was aborted.`,`AbortError`),this.serializedAbortReason=e,this.connection?.destroy(e),this.emit(`terminated`,e))}};function De(e){Ae(e,`fetch`)}function Oe(e,t=void 0){xe.argumentLengthCheck(arguments,1,`globalThis.fetch`);let n=k(),r;try{r=new c(e,t)}catch(e){return n.reject(e),n.promise}let i=r[G];if(r.signal.aborted)return Me(n,i,null,r.signal.reason),n.promise;i.client.globalObject?.constructor?.name===`ServiceWorkerGlobalScope`&&(i.serviceWorkers=`none`);let a=null,s=!1,l=null;return he(r.signal,()=>{s=!0,q(l!=null),l.abort(r.signal.reason);let e=a?.deref();Me(n,i,e,r.signal.reason)}),l=Ne({request:i,processResponseEndOfBody:De,processResponse:e=>{s||(e.aborted?Me(n,i,a,l.serializedAbortReason):e.type===`error`?n.reject(TypeError(`fetch failed`,{cause:e.error})):(a=new WeakRef(o(e,`immutable`)),n.resolve(a.deref()),n=null))},dispatcher:r[K]}),n.promise}function Ae(e,t=`other`){if(e.type===`error`&&e.aborted||!e.urlList?.length)return;let n=e.urlList[0],r=e.timingInfo,i=e.cacheState;R(n)&&r!==null&&(e.timingAllowPassed||(r=S({startTime:r.startTime}),i=``),r.endTime=D(),e.timingInfo=r,je(r,n.href,t,globalThis,i))}let je=performance.markResourceTiming;function Me(e,t,n,r){if(e&&e.reject(r),t.body!=null&&_e(t.body?.stream)&&t.body.stream.cancel(r).catch(e=>{if(e.code!==`ERR_INVALID_STATE`)throw e}),n==null)return;let i=n[G];i.body!=null&&_e(i.body?.stream)&&i.body.stream.cancel(r).catch(e=>{if(e.code!==`ERR_INVALID_STATE`)throw e})}function Ne({request:e,processRequestBodyChunkLength:t,processRequestEndOfBody:n,processResponse:r,processResponseEndOfBody:i,processResponseConsumeBody:a,useParallelQueue:o=!1,dispatcher:s=Q()}){q(s);let c=null,l=!1;e.client!=null&&(c=e.client.globalObject,l=e.client.crossOriginIsolatedCapability);let u=D(l),d=S({startTime:u}),m={controller:new Ee(s),request:e,timingInfo:d,processRequestBodyChunkLength:t,processRequestEndOfBody:n,processResponse:r,processResponseConsumeBody:a,processResponseEndOfBody:i,taskDestination:c,crossOriginIsolatedCapability:l};return q(!e.body||e.body.stream),e.window===`client`&&(e.window=e.client?.globalObject?.constructor?.name===`Window`?e.client:`no-window`),e.origin===`client`&&(e.origin=e.client.origin),e.policyContainer===`client`&&(e.policyContainer=e.client==null?f():p(e.client.policyContainer)),e.headersList.contains(`accept`,!0)||e.headersList.append(`accept`,`*/*`,!0),e.headersList.contains(`accept-language`,!0)||e.headersList.append(`accept-language`,`*`,!0),e.priority,X.has(e.destination),Pe(m).catch(e=>{m.controller.terminate(e)}),m.controller}async function Pe(e,t=!1){let r=e.request,a=null;if(r.localURLsOnly&&!ee(y(r))&&(a=n(`local URLs only`)),x(r),m(r)===`blocked`&&(a=n(`bad port`)),r.referrerPolicy===``&&(r.referrerPolicy=r.policyContainer.referrerPolicy),r.referrer!==`no-referrer`&&(r.referrer=E(r)),a===null&&(a=await(async()=>{let t=y(r);return j(t,r.url)&&r.responseTainting===`basic`||t.protocol===`data:`||r.mode===`navigate`||r.mode===`websocket`?(r.responseTainting=`basic`,await Le(e)):r.mode===`same-origin`?n(`request mode cannot be "same-origin"`):r.mode===`no-cors`?r.redirect===`follow`?(r.responseTainting=`opaque`,await Le(e)):n(`redirect mode cannot be "follow" for "no-cors" request`):R(y(r))?(r.responseTainting=`cors`,await Ve(e)):n(`URL scheme must be a HTTP(S) scheme`)})()),t)return a;a.status!==0&&!a.internalResponse&&(r.responseTainting,r.responseTainting===`basic`?a=i(a,`basic`):r.responseTainting===`cors`?a=i(a,`cors`):r.responseTainting===`opaque`?a=i(a,`opaque`):q(!1));let o=a.status===0?a:a.internalResponse;if(o.urlList.length===0&&o.urlList.push(...r.urlList),r.timingAllowFailed||(a.timingAllowPassed=!0),a.type===`opaque`&&o.status===206&&o.rangeRequested&&!r.headers.contains(`range`,!0)&&(a=o=n()),a.status!==0&&(r.method===`HEAD`||r.method===`CONNECT`||Y.includes(o.status))&&(o.body=null,e.controller.dump=!0),r.integrity){let t=t=>Be(e,n(t));if(r.responseTainting===`opaque`||a.body==null){t(a.error);return}await F(a.body,n=>{d(n,r.integrity)?(a.body=se(n)[0],Be(e,a)):t(`integrity mismatch`)},t)}else Be(e,a)}function Le(e){if(M(e)&&e.request.redirectCount===0)return Promise.resolve(r(e));let{request:t}=e,{protocol:i}=y(t);switch(i){case`about:`:return Promise.resolve(n(`about scheme is not supported`));case`blob:`:{Te||=h(`node:buffer`).resolveObjectURL;let e=y(t);if(e.search.length!==0)return Promise.resolve(n(`NetworkError when attempting to fetch resource.`));let r=Te(e.toString());if(t.method!==`GET`||!A(r))return Promise.resolve(n(`invalid method`));let i=a(),o=r.size,s=L(`${o}`),c=r.type;if(t.headersList.contains(`range`,!0)){i.rangeRequested=!0;let e=t.headersList.get(`range`,!0),a=U(e,!0);if(a===`failure`)return Promise.resolve(n(`failed to fetch the data URL`));let{rangeStartValue:s,rangeEndValue:l}=a;if(s===null)s=o-l,l=s+l-1;else{if(s>=o)return Promise.resolve(n(`Range start is greater than the blob's size.`));(l===null||l>=o)&&(l=o-1)}let u=r.slice(s,l,c);i.body=J(u)[0];let d=L(`${u.size}`),f=ae(s,l,o);i.status=206,i.statusText=`Partial Content`,i.headersList.set(`content-length`,d,!0),i.headersList.set(`content-type`,c,!0),i.headersList.set(`content-range`,f,!0)}else{let e=J(r);i.statusText=`OK`,i.body=e[0],i.headersList.set(`content-length`,s,!0),i.headersList.set(`content-type`,c,!0)}return Promise.resolve(i)}case`data:`:{let e=y(t),r=Z(e);if(r===`failure`)return Promise.resolve(n(`failed to fetch the data URL`));let i=ye(r.mimeType);return Promise.resolve(a({statusText:`OK`,headersList:[[`content-type`,{name:`Content-Type`,value:i}]],body:se(r.body)[0]}))}case`file:`:return Promise.resolve(n(`not implemented... yet...`));case`http:`:case`https:`:return Ve(e).catch(e=>n(e));default:return Promise.resolve(n(`unknown scheme`))}}function ze(e,t){e.request.done=!0,e.processResponseDone!=null&&queueMicrotask(()=>e.processResponseDone(t))}function Be(e,t){let n=e.timingInfo,r=()=>{let r=Date.now();e.request.destination===`document`&&(e.controller.fullTimingInfo=n),e.controller.reportTimingSteps=()=>{if(e.request.url.protocol!==`https:`)return;n.endTime=r;let i=t.cacheState,a=t.bodyInfo;t.timingAllowPassed||(n=S(n),i=``);let o=0;if(e.request.mode!==`navigator`||!t.hasCrossOriginRedirects){o=t.status;let e=W(t.headersList);e!==`failure`&&(a.contentType=be(e))}e.request.initiatorType!=null&&je(n,e.request.url.href,e.request.initiatorType,globalThis,i,a,o)};let i=()=>{e.request.done=!0,e.processResponseEndOfBody!=null&&queueMicrotask(()=>e.processResponseEndOfBody(t)),e.request.initiatorType!=null&&e.controller.reportTimingSteps()};queueMicrotask(()=>i())};e.processResponse!=null&&queueMicrotask(()=>{e.processResponse(t),e.processResponse=null});let i=t.type===`error`?t:t.internalResponse??t;i.body==null?r():me(i.body.stream,()=>{r()})}async function Ve(e){let t=e.request,r=null,i=null,a=e.timingInfo;if(t.serviceWorkers,r===null){if(t.redirect===`follow`&&(t.serviceWorkers=`none`),i=r=await Ue(e),t.responseTainting===`cors`&&w(t,r)===`failure`)return n(`cors failure`);g(t,r)===`failure`&&(t.timingAllowFailed=!0)}return(t.responseTainting===`opaque`||r.type===`opaque`)&&T(t.origin,t.client,t.destination,i)===`blocked`?n(`blocked`):(ce.has(i.status)&&(t.redirect!==`manual`&&e.controller.connection.destroy(void 0,!1),t.redirect===`error`?r=n(`unexpected redirect`):t.redirect===`manual`?r=i:t.redirect===`follow`?r=await He(e,r):q(!1)),r.timingInfo=a,r)}function He(e,t){let r=e.request,i=t.internalResponse?t.internalResponse:t,a;try{if(a=v(i,y(r).hash),a==null)return t}catch(e){return Promise.resolve(n(e))}if(!R(a))return Promise.resolve(n(`URL scheme must be a HTTP(S) scheme`));if(r.redirectCount===20)return Promise.resolve(n(`redirect count exceeded`));if(r.redirectCount+=1,r.mode===`cors`&&(a.username||a.password)&&!j(r,a))return Promise.resolve(n(`cross origin not allowed for request mode "cors"`));if(r.responseTainting===`cors`&&(a.username||a.password))return Promise.resolve(n(`URL cannot contain credentials for request mode "cors"`));if(i.status!==303&&r.body!=null&&r.body.source==null)return Promise.resolve(n());if([301,302].includes(i.status)&&r.method===`POST`||i.status===303&&!Ce.includes(r.method)){r.method=`GET`,r.body=null;for(let e of ue)r.headersList.delete(e)}j(y(r),a)||(r.headersList.delete(`authorization`,!0),r.headersList.delete(`proxy-authorization`,!0),r.headersList.delete(`cookie`,!0),r.headersList.delete(`host`,!0)),r.body!=null&&(q(r.body.source!=null),r.body=se(r.body.source)[0]);let o=e.timingInfo;return o.redirectEndTime=o.postRedirectStartTime=D(e.crossOriginIsolatedCapability),o.redirectStartTime===0&&(o.redirectStartTime=o.startTime),r.urlList.push(a),b(r,i),Pe(e,!0)}async function Ue(e,t=!1,i=!1){let a=e.request,o=null,s=null,c=null;a.window===`no-window`&&a.redirect===`error`?(o=e,s=a):(s=l(a),o={...e},o.request=s);let u=a.credentials===`include`||a.credentials===`same-origin`&&a.responseTainting===`basic`,d=s.body?s.body.length:null,f=null;if(s.body==null&&[`POST`,`PUT`].includes(s.method)&&(f=`0`),d!=null&&(f=L(`${d}`)),f!=null&&s.headersList.append(`content-length`,f,!0),d!=null&&s.keepalive,s.referrer instanceof URL&&s.headersList.append(`referer`,L(s.referrer.href),!0),_(s),C(s),s.headersList.contains(`user-agent`,!0)||s.headersList.append(`user-agent`,we),s.cache==="default"&&(s.headersList.contains(`if-modified-since`,!0)||s.headersList.contains(`if-none-match`,!0)||s.headersList.contains(`if-unmodified-since`,!0)||s.headersList.contains(`if-match`,!0)||s.headersList.contains(`if-range`,!0))&&(s.cache=`no-store`),s.cache===`no-cache`&&!s.preventNoCacheCacheControlHeaderModification&&!s.headersList.contains(`cache-control`,!0)&&s.headersList.append(`cache-control`,`max-age=0`,!0),(s.cache===`no-store`||s.cache===`reload`)&&(s.headersList.contains(`pragma`,!0)||s.headersList.append(`pragma`,`no-cache`,!0),s.headersList.contains(`cache-control`,!0)||s.headersList.append(`cache-control`,`no-cache`,!0)),s.headersList.contains(`range`,!0)&&s.headersList.append(`accept-encoding`,`identity`,!0),s.headersList.contains(`accept-encoding`,!0)||(ne(y(s))?s.headersList.append(`accept-encoding`,`br, gzip, deflate`,!0):s.headersList.append(`accept-encoding`,`gzip, deflate`,!0)),s.headersList.delete(`host`,!0),s.cache=`no-store`,s.cache!==`no-store`&&s.cache,c==null){if(s.cache===`only-if-cached`)return n(`only if cached`);let e=await We(o,u,i);!le.has(s.method)&&e.status>=200&&e.status,c??=e}if(c.urlList=[...s.urlList],s.headersList.contains(`range`,!0)&&(c.rangeRequested=!0),c.requestIncludesCredentials=u,c.status===407)return a.window===`no-window`?n():M(e)?r(e):n(`proxy authentication required`);if(c.status===421&&!i&&(a.body==null||a.body.source!=null)){if(M(e))return r(e);e.controller.connection.destroy(),c=await Ue(e,t,!0)}return c}async function We(e,t=!1,i=!1){q(!e.controller.connection||e.controller.connection.destroyed),e.controller.connection={abort:null,destroyed:!1,destroy(e,t=!0){this.destroyed||(this.destroyed=!0,t&&this.abort?.(e??new DOMException(`The operation was aborted.`,`AbortError`)))}};let o=e.request,c=null,l=e.timingInfo;o.cache=`no-store`,o.mode;let d=null;if(o.body==null&&e.processRequestEndOfBody)queueMicrotask(()=>e.processRequestEndOfBody());else if(o.body!=null){let t=async function*(t){M(e)||(yield t,e.processRequestBodyChunkLength?.(t.byteLength))},n=()=>{M(e)||e.processRequestEndOfBody&&e.processRequestEndOfBody()},r=t=>{M(e)||(t.name===`AbortError`?e.controller.abort():e.controller.terminate(t))};d=(async function*(){try{for await(let e of o.body.stream)yield*t(e);n()}catch(e){r(e)}})()}try{let{body:t,status:n,statusText:r,headersList:i,socket:o}=await g({body:d});if(o)c=a({status:n,statusText:r,headersList:i,socket:o});else{let o=t[Symbol.asyncIterator]();e.controller.next=()=>o.next(),c=a({status:n,statusText:r,headersList:i})}}catch(t){return t.name===`AbortError`?(e.controller.connection.destroy(),r(e,t)):n(t)}let f=async()=>{await e.controller.resume()},p=t=>{M(e)||e.controller.abort(t)},m=new ReadableStream({async start(t){e.controller.controller=t},async pull(e){await f(e)},async cancel(e){await p(e)},type:`bytes`});c.body={stream:m,source:null,length:null},e.controller.resume||e.controller.on(`terminated`,h),e.controller.resume=async()=>{for(;;){let t,n;try{let{done:n,value:r}=await e.controller.next();if(N(e))break;t=n?void 0:r}catch(r){e.controller.ended&&!l.encodedBodySize?t=void 0:(t=r,n=!0)}if(t===void 0){I(e.controller.controller),ze(e,c);return}if(l.decodedBodySize+=t?.byteLength??0,n){e.controller.terminate(t);return}let r=new Uint8Array(t);if(r.byteLength&&e.controller.controller.enqueue(r),ge(m)){e.controller.terminate();return}if(e.controller.controller.desiredSize<=0)return}};function h(t){N(e)?(c.aborted=!0,_e(m)&&e.controller.controller.error(e.controller.serializedAbortReason)):_e(m)&&e.controller.controller.error(TypeError(`terminated`,{cause:P(t)?t:void 0})),e.controller.connection.destroy()}return c;function g({body:t}){let n=y(o),r=e.controller.dispatcher;return new Promise((i,a)=>r.dispatch({path:n.pathname+n.search,origin:n.origin,method:o.method,body:r.isMockActive?o.body&&(o.body.source||o.body.stream):t,headers:o.headersList.entries,maxRedirections:0,upgrade:o.mode===`websocket`?`websocket`:void 0},{body:null,abort:null,onConnect(t){let{connection:n}=e.controller;l.finalConnectionTimingInfo=re(void 0,l.postRedirectStartTime,e.crossOriginIsolatedCapability),n.destroyed?t(new DOMException(`The operation was aborted.`,`AbortError`)):(e.controller.on(`terminated`,t),this.abort=n.abort=t),l.finalNetworkRequestStartTime=D(e.crossOriginIsolatedCapability)},onResponseStarted(){l.finalNetworkResponseStartTime=D(e.crossOriginIsolatedCapability)},onHeaders(e,t,n,r){if(e<200)return;let a=``,c=new s;for(let e=0;e5)return this.abort(/* @__PURE__ */ Error(`too many content-encodings in response: ${t.length}, maximum allowed is 5`)),!0;for(let e=t.length-1;e>=0;--e){let n=t[e].trim();if(n===`x-gzip`||n===`gzip`)l.push(u.createGunzip({flush:u.constants.Z_SYNC_FLUSH,finishFlush:u.constants.Z_SYNC_FLUSH}));else if(n===`deflate`)l.push(oe({flush:u.constants.Z_SYNC_FLUSH,finishFlush:u.constants.Z_SYNC_FLUSH}));else if(n===`br`)l.push(u.createBrotliDecompress({flush:u.constants.BROTLI_OPERATION_FLUSH,finishFlush:u.constants.BROTLI_OPERATION_FLUSH}));else{l.length=0;break}}}this.body=new fe({read:n});let f=this.onError.bind(this);return i({status:e,statusText:r,headersList:c,body:l.length?pe(this.body,...l,e=>{e&&this.onError(e)}).on(`error`,f):this.body.on(`error`,f)}),!0},onData(t){if(e.controller.dump)return;let n=t;return l.encodedBodySize+=n.byteLength,this.body.push(n)},onComplete(){this.abort&&e.controller.off(`terminated`,this.abort),e.controller.ended=!0,this.body.push(null)},onError(t){this.abort&&e.controller.off(`terminated`,this.abort),this.body?.destroy(t),e.controller.terminate(t),a(t)},onUpgrade(e,t,n){if(e!==101)return;let r=new s;for(let e=0;e{t.exports={kState:Symbol(`FileReader state`),kResult:Symbol(`FileReader result`),kError:Symbol(`FileReader error`),kLastProgressEventFired:Symbol(`FileReader last progress event fired timestamp`),kEvents:Symbol(`FileReader events`),kAborted:Symbol(`FileReader aborted`)}})),Ve=/* @__PURE__ */ m(((e,t)=>{let{webidl:n}=B(),r=Symbol(`ProgressEvent state`);var i=class e extends Event{constructor(e,t={}){e=n.converters.DOMString(e,`ProgressEvent constructor`,`type`),t=n.converters.ProgressEventInit(t??{}),super(e,t),this[r]={lengthComputable:t.lengthComputable,loaded:t.loaded,total:t.total}}get lengthComputable(){return n.brandCheck(this,e),this[r].lengthComputable}get loaded(){return n.brandCheck(this,e),this[r].loaded}get total(){return n.brandCheck(this,e),this[r].total}};n.converters.ProgressEventInit=n.dictionaryConverter([{key:`lengthComputable`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`loaded`,converter:n.converters[`unsigned long long`],defaultValue:()=>0},{key:`total`,converter:n.converters[`unsigned long long`],defaultValue:()=>0},{key:`bubbles`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`cancelable`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`composed`,converter:n.converters.boolean,defaultValue:()=>!1}]),t.exports={ProgressEvent:i}})),He=/* @__PURE__ */ m(((e,t)=>{function n(e){if(!e)return`failure`;switch(e.trim().toLowerCase()){case`unicode-1-1-utf-8`:case`unicode11utf8`:case`unicode20utf8`:case`utf-8`:case`utf8`:case`x-unicode20utf8`:return`UTF-8`;case`866`:case`cp866`:case`csibm866`:case`ibm866`:return`IBM866`;case`csisolatin2`:case`iso-8859-2`:case`iso-ir-101`:case`iso8859-2`:case`iso88592`:case`iso_8859-2`:case`iso_8859-2:1987`:case`l2`:case`latin2`:return`ISO-8859-2`;case`csisolatin3`:case`iso-8859-3`:case`iso-ir-109`:case`iso8859-3`:case`iso88593`:case`iso_8859-3`:case`iso_8859-3:1988`:case`l3`:case`latin3`:return`ISO-8859-3`;case`csisolatin4`:case`iso-8859-4`:case`iso-ir-110`:case`iso8859-4`:case`iso88594`:case`iso_8859-4`:case`iso_8859-4:1988`:case`l4`:case`latin4`:return`ISO-8859-4`;case`csisolatincyrillic`:case`cyrillic`:case`iso-8859-5`:case`iso-ir-144`:case`iso8859-5`:case`iso88595`:case`iso_8859-5`:case`iso_8859-5:1988`:return`ISO-8859-5`;case`arabic`:case`asmo-708`:case`csiso88596e`:case`csiso88596i`:case`csisolatinarabic`:case`ecma-114`:case`iso-8859-6`:case`iso-8859-6-e`:case`iso-8859-6-i`:case`iso-ir-127`:case`iso8859-6`:case`iso88596`:case`iso_8859-6`:case`iso_8859-6:1987`:return`ISO-8859-6`;case`csisolatingreek`:case`ecma-118`:case`elot_928`:case`greek`:case`greek8`:case`iso-8859-7`:case`iso-ir-126`:case`iso8859-7`:case`iso88597`:case`iso_8859-7`:case`iso_8859-7:1987`:case`sun_eu_greek`:return`ISO-8859-7`;case`csiso88598e`:case`csisolatinhebrew`:case`hebrew`:case`iso-8859-8`:case`iso-8859-8-e`:case`iso-ir-138`:case`iso8859-8`:case`iso88598`:case`iso_8859-8`:case`iso_8859-8:1988`:case`visual`:return`ISO-8859-8`;case`csiso88598i`:case`iso-8859-8-i`:case`logical`:return`ISO-8859-8-I`;case`csisolatin6`:case`iso-8859-10`:case`iso-ir-157`:case`iso8859-10`:case`iso885910`:case`l6`:case`latin6`:return`ISO-8859-10`;case`iso-8859-13`:case`iso8859-13`:case`iso885913`:return`ISO-8859-13`;case`iso-8859-14`:case`iso8859-14`:case`iso885914`:return`ISO-8859-14`;case`csisolatin9`:case`iso-8859-15`:case`iso8859-15`:case`iso885915`:case`iso_8859-15`:case`l9`:return`ISO-8859-15`;case`iso-8859-16`:return`ISO-8859-16`;case`cskoi8r`:case`koi`:case`koi8`:case`koi8-r`:case`koi8_r`:return`KOI8-R`;case`koi8-ru`:case`koi8-u`:return`KOI8-U`;case`csmacintosh`:case`mac`:case`macintosh`:case`x-mac-roman`:return`macintosh`;case`iso-8859-11`:case`iso8859-11`:case`iso885911`:case`tis-620`:case`windows-874`:return`windows-874`;case`cp1250`:case`windows-1250`:case`x-cp1250`:return`windows-1250`;case`cp1251`:case`windows-1251`:case`x-cp1251`:return`windows-1251`;case`ansi_x3.4-1968`:case`ascii`:case`cp1252`:case`cp819`:case`csisolatin1`:case`ibm819`:case`iso-8859-1`:case`iso-ir-100`:case`iso8859-1`:case`iso88591`:case`iso_8859-1`:case`iso_8859-1:1987`:case`l1`:case`latin1`:case`us-ascii`:case`windows-1252`:case`x-cp1252`:return`windows-1252`;case`cp1253`:case`windows-1253`:case`x-cp1253`:return`windows-1253`;case`cp1254`:case`csisolatin5`:case`iso-8859-9`:case`iso-ir-148`:case`iso8859-9`:case`iso88599`:case`iso_8859-9`:case`iso_8859-9:1989`:case`l5`:case`latin5`:case`windows-1254`:case`x-cp1254`:return`windows-1254`;case`cp1255`:case`windows-1255`:case`x-cp1255`:return`windows-1255`;case`cp1256`:case`windows-1256`:case`x-cp1256`:return`windows-1256`;case`cp1257`:case`windows-1257`:case`x-cp1257`:return`windows-1257`;case`cp1258`:case`windows-1258`:case`x-cp1258`:return`windows-1258`;case`x-mac-cyrillic`:case`x-mac-ukrainian`:return`x-mac-cyrillic`;case`chinese`:case`csgb2312`:case`csiso58gb231280`:case`gb2312`:case`gb_2312`:case`gb_2312-80`:case`gbk`:case`iso-ir-58`:case`x-gbk`:return`GBK`;case`gb18030`:return`gb18030`;case`big5`:case`big5-hkscs`:case`cn-big5`:case`csbig5`:case`x-x-big5`:return`Big5`;case`cseucpkdfmtjapanese`:case`euc-jp`:case`x-euc-jp`:return`EUC-JP`;case`csiso2022jp`:case`iso-2022-jp`:return`ISO-2022-JP`;case`csshiftjis`:case`ms932`:case`ms_kanji`:case`shift-jis`:case`shift_jis`:case`sjis`:case`windows-31j`:case`x-sjis`:return`Shift_JIS`;case`cseuckr`:case`csksc56011987`:case`euc-kr`:case`iso-ir-149`:case`korean`:case`ks_c_5601-1987`:case`ks_c_5601-1989`:case`ksc5601`:case`ksc_5601`:case`windows-949`:return`EUC-KR`;case`csiso2022kr`:case`hz-gb-2312`:case`iso-2022-cn`:case`iso-2022-cn-ext`:case`iso-2022-kr`:case`replacement`:return`replacement`;case`unicodefffe`:case`utf-16be`:return`UTF-16BE`;case`csunicode`:case`iso-10646-ucs-2`:case`ucs-2`:case`unicode`:case`unicodefeff`:case`utf-16`:case`utf-16le`:return`UTF-16LE`;case`x-user-defined`:return`x-user-defined`;default:return`failure`}}t.exports={getEncoding:n}})),Ue=/* @__PURE__ */ m(((e,t)=>{let{kState:n,kError:r,kResult:i,kAborted:a,kLastProgressEventFired:o}=Be(),{ProgressEvent:s}=Ve(),{getEncoding:c}=He(),{serializeAMimeType:l,parseMIMEType:u}=z(),{types:d}=h(`node:util`),{StringDecoder:f}=h(`string_decoder`),{btoa:p}=h(`node:buffer`),m={enumerable:!0,writable:!1,configurable:!1};function g(e,t,s,c){if(e[n]===`loading`)throw new DOMException(`Invalid state`,`InvalidStateError`);e[n]=`loading`,e[i]=null,e[r]=null;let l=t.stream().getReader(),u=[],f=l.read(),p=!0;(async()=>{for(;!e[a];)try{let{done:m,value:h}=await f;if(p&&!e[a]&&queueMicrotask(()=>{_(`loadstart`,e)}),p=!1,!m&&d.isUint8Array(h))u.push(h),(e[o]===void 0||Date.now()-e[o]>=50)&&!e[a]&&(e[o]=Date.now(),queueMicrotask(()=>{_(`progress`,e)})),f=l.read();else if(m){queueMicrotask(()=>{e[n]=`done`;try{let n=v(u,s,t.type,c);if(e[a])return;e[i]=n,_(`load`,e)}catch(t){e[r]=t,_(`error`,e)}e[n]!==`loading`&&_(`loadend`,e)});break}}catch(t){if(e[a])return;queueMicrotask(()=>{e[n]=`done`,e[r]=t,_(`error`,e),e[n]!==`loading`&&_(`loadend`,e)});break}})()}function _(e,t){let n=new s(e,{bubbles:!1,cancelable:!1});t.dispatchEvent(n)}function v(e,t,n,r){switch(t){case`DataURL`:{let t=`data:`,r=u(n||`application/octet-stream`);r!==`failure`&&(t+=l(r)),t+=`;base64,`;let i=new f(`latin1`);for(let n of e)t+=p(i.write(n));return t+=p(i.end()),t}case`Text`:{let t=`failure`;if(r&&(t=c(r)),t===`failure`&&n){let e=u(n);e!==`failure`&&(t=c(e.parameters.get(`charset`)))}return t===`failure`&&(t=`UTF-8`),y(e,t)}case`ArrayBuffer`:return x(e).buffer;case`BinaryString`:{let t=``,n=new f(`latin1`);for(let r of e)t+=n.write(r);return t+=n.end(),t}}}function y(e,t){let n=x(e),r=b(n),i=0;r!==null&&(t=r,i=r===`UTF-8`?3:2);let a=n.slice(i);return new TextDecoder(t).decode(a)}function b(e){let[t,n,r]=e;return t===239&&n===187&&r===191?`UTF-8`:t===254&&n===255?`UTF-16BE`:t===255&&n===254?`UTF-16LE`:null}function x(e){let t=e.reduce((e,t)=>e+t.byteLength,0),n=0;return e.reduce((e,t)=>(e.set(t,n),n+=t.byteLength,e),new Uint8Array(t))}t.exports={staticPropertyDescriptors:m,readOperation:g,fireAProgressEvent:_}})),We=/* @__PURE__ */ m(((e,t)=>{let{staticPropertyDescriptors:n,readOperation:r,fireAProgressEvent:i}=Ue(),{kState:a,kError:o,kResult:s,kEvents:c,kAborted:l}=Be(),{webidl:u}=B(),{kEnumerableProperty:d}=O();var f=class e extends EventTarget{constructor(){super(),this[a]=`empty`,this[s]=null,this[o]=null,this[c]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(t){u.brandCheck(this,e),u.argumentLengthCheck(arguments,1,`FileReader.readAsArrayBuffer`),t=u.converters.Blob(t,{strict:!1}),r(this,t,`ArrayBuffer`)}readAsBinaryString(t){u.brandCheck(this,e),u.argumentLengthCheck(arguments,1,`FileReader.readAsBinaryString`),t=u.converters.Blob(t,{strict:!1}),r(this,t,`BinaryString`)}readAsText(t,n=void 0){u.brandCheck(this,e),u.argumentLengthCheck(arguments,1,`FileReader.readAsText`),t=u.converters.Blob(t,{strict:!1}),n!==void 0&&(n=u.converters.DOMString(n,`FileReader.readAsText`,`encoding`)),r(this,t,`Text`,n)}readAsDataURL(t){u.brandCheck(this,e),u.argumentLengthCheck(arguments,1,`FileReader.readAsDataURL`),t=u.converters.Blob(t,{strict:!1}),r(this,t,`DataURL`)}abort(){this[a]===`empty`||this[a]===`done`?this[s]=null:(this[a]===`loading`&&(this[a]=`done`,this[s]=null),this[l]=!0,i(`abort`,this),this[a]!==`loading`&&i(`loadend`,this))}get readyState(){switch(u.brandCheck(this,e),this[a]){case`empty`:return this.EMPTY;case`loading`:return this.LOADING;case`done`:return this.DONE}}get result(){return u.brandCheck(this,e),this[s]}get error(){return u.brandCheck(this,e),this[o]}get onloadend(){return u.brandCheck(this,e),this[c].loadend}set onloadend(t){u.brandCheck(this,e),this[c].loadend&&this.removeEventListener(`loadend`,this[c].loadend),typeof t==`function`?(this[c].loadend=t,this.addEventListener(`loadend`,t)):this[c].loadend=null}get onerror(){return u.brandCheck(this,e),this[c].error}set onerror(t){u.brandCheck(this,e),this[c].error&&this.removeEventListener(`error`,this[c].error),typeof t==`function`?(this[c].error=t,this.addEventListener(`error`,t)):this[c].error=null}get onloadstart(){return u.brandCheck(this,e),this[c].loadstart}set onloadstart(t){u.brandCheck(this,e),this[c].loadstart&&this.removeEventListener(`loadstart`,this[c].loadstart),typeof t==`function`?(this[c].loadstart=t,this.addEventListener(`loadstart`,t)):this[c].loadstart=null}get onprogress(){return u.brandCheck(this,e),this[c].progress}set onprogress(t){u.brandCheck(this,e),this[c].progress&&this.removeEventListener(`progress`,this[c].progress),typeof t==`function`?(this[c].progress=t,this.addEventListener(`progress`,t)):this[c].progress=null}get onload(){return u.brandCheck(this,e),this[c].load}set onload(t){u.brandCheck(this,e),this[c].load&&this.removeEventListener(`load`,this[c].load),typeof t==`function`?(this[c].load=t,this.addEventListener(`load`,t)):this[c].load=null}get onabort(){return u.brandCheck(this,e),this[c].abort}set onabort(t){u.brandCheck(this,e),this[c].abort&&this.removeEventListener(`abort`,this[c].abort),typeof t==`function`?(this[c].abort=t,this.addEventListener(`abort`,t)):this[c].abort=null}};f.EMPTY=f.prototype.EMPTY=0,f.LOADING=f.prototype.LOADING=1,f.DONE=f.prototype.DONE=2,Object.defineProperties(f.prototype,{EMPTY:n,LOADING:n,DONE:n,readAsArrayBuffer:d,readAsBinaryString:d,readAsText:d,readAsDataURL:d,abort:d,readyState:d,result:d,error:d,onloadstart:d,onprogress:d,onload:d,onabort:d,onerror:d,onloadend:d,[Symbol.toStringTag]:{value:`FileReader`,writable:!1,enumerable:!1,configurable:!0}}),Object.defineProperties(f,{EMPTY:n,LOADING:n,DONE:n}),t.exports={FileReader:f}})),Ge=/* @__PURE__ */ m(((e,t)=>{t.exports={kConstruct:w().kConstruct}})),Ke=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:assert`),{URLSerializer:r}=z(),{isValidHeaderName:i}=V();function a(e,t,n=!1){return r(e,n)===r(t,n)}function o(e){n(e!==null);let t=[];for(let n of e.split(`,`))n=n.trim(),i(n)&&t.push(n);return t}t.exports={urlEquals:a,getFieldValues:o}})),qe=/* @__PURE__ */ m(((e,t)=>{let{kConstruct:n}=Ge(),{urlEquals:r,getFieldValues:i}=Ke(),{kEnumerableProperty:a,isDisturbed:o}=O(),{webidl:s}=B(),{Response:c,cloneResponse:l,fromInnerResponse:u}=Ie(),{Request:d,fromInnerRequest:f}=Re(),{kState:p}=H(),{fetching:m}=ze(),{urlIsHttpHttpsScheme:g,createDeferredPromise:_,readAllBytes:v}=V(),y=h(`node:assert`);var b=class e{#e;constructor(){arguments[0]!==n&&s.illegalConstructor(),s.util.markAsUncloneable(this),this.#e=arguments[1]}async match(t,n={}){s.brandCheck(this,e);let r=`Cache.match`;s.argumentLengthCheck(arguments,1,r),t=s.converters.RequestInfo(t,r,`request`),n=s.converters.CacheQueryOptions(n,r,`options`);let i=this.#i(t,n,1);if(i.length!==0)return i[0]}async matchAll(t=void 0,n={}){s.brandCheck(this,e);let r=`Cache.matchAll`;return t!==void 0&&(t=s.converters.RequestInfo(t,r,`request`)),n=s.converters.CacheQueryOptions(n,r,`options`),this.#i(t,n)}async add(t){s.brandCheck(this,e);let n=`Cache.add`;s.argumentLengthCheck(arguments,1,n),t=s.converters.RequestInfo(t,n,`request`);let r=[t];return await this.addAll(r)}async addAll(t){s.brandCheck(this,e);let n=`Cache.addAll`;s.argumentLengthCheck(arguments,1,n);let r=[],a=[];for(let e of t){if(e===void 0)throw s.errors.conversionFailed({prefix:n,argument:`Argument 1`,types:[`undefined is not allowed`]});if(e=s.converters.RequestInfo(e),typeof e==`string`)continue;let t=e[p];if(!g(t.url)||t.method!==`GET`)throw s.errors.exception({header:n,message:`Expected http/s scheme when method is not GET.`})}let o=[];for(let e of t){let t=new d(e)[p];if(!g(t.url))throw s.errors.exception({header:n,message:`Expected http/s scheme.`});t.initiator=`fetch`,t.destination=`subresource`,a.push(t);let c=_();o.push(m({request:t,processResponse(e){if(e.type===`error`||e.status===206||e.status<200||e.status>299)c.reject(s.errors.exception({header:`Cache.addAll`,message:`Received an invalid status code or the request failed.`}));else if(e.headersList.contains(`vary`)){let t=i(e.headersList.get(`vary`));for(let e of t)if(e===`*`){c.reject(s.errors.exception({header:`Cache.addAll`,message:`invalid vary field value`}));for(let e of o)e.abort();return}}},processResponseEndOfBody(e){e.aborted?c.reject(new DOMException(`aborted`,`AbortError`)):c.resolve(e)}})),r.push(c.promise)}let c=await Promise.all(r),l=[],u=0;for(let e of c){let t={type:`put`,request:a[u],response:e};l.push(t),u++}let f=_(),h=null;try{this.#t(l)}catch(e){h=e}return queueMicrotask(()=>{h===null?f.resolve(void 0):f.reject(h)}),f.promise}async put(t,n){s.brandCheck(this,e);let r=`Cache.put`;s.argumentLengthCheck(arguments,2,r),t=s.converters.RequestInfo(t,r,`request`),n=s.converters.Response(n,r,`response`);let a=null;if(a=t instanceof d?t[p]:new d(t)[p],!g(a.url)||a.method!==`GET`)throw s.errors.exception({header:r,message:`Expected an http/s scheme when method is not GET`});let c=n[p];if(c.status===206)throw s.errors.exception({header:r,message:`Got 206 status`});if(c.headersList.contains(`vary`)){let e=i(c.headersList.get(`vary`));for(let t of e)if(t===`*`)throw s.errors.exception({header:r,message:`Got * vary field value`})}if(c.body&&(o(c.body.stream)||c.body.stream.locked))throw s.errors.exception({header:r,message:`Response body is locked or disturbed`});let u=l(c),f=_();if(c.body!=null){let e=c.body.stream.getReader();v(e).then(f.resolve,f.reject)}else f.resolve(void 0);let m=[],h={type:`put`,request:a,response:u};m.push(h);let y=await f.promise;u.body!=null&&(u.body.source=y);let b=_(),x=null;try{this.#t(m)}catch(e){x=e}return queueMicrotask(()=>{x===null?b.resolve():b.reject(x)}),b.promise}async delete(t,n={}){s.brandCheck(this,e);let r=`Cache.delete`;s.argumentLengthCheck(arguments,1,r),t=s.converters.RequestInfo(t,r,`request`),n=s.converters.CacheQueryOptions(n,r,`options`);let i=null;if(t instanceof d){if(i=t[p],i.method!==`GET`&&!n.ignoreMethod)return!1}else y(typeof t==`string`),i=new d(t)[p];let a=[],o={type:`delete`,request:i,options:n};a.push(o);let c=_(),l=null,u;try{u=this.#t(a)}catch(e){l=e}return queueMicrotask(()=>{l===null?c.resolve(!!u?.length):c.reject(l)}),c.promise}async keys(t=void 0,n={}){s.brandCheck(this,e);let r=`Cache.keys`;t!==void 0&&(t=s.converters.RequestInfo(t,r,`request`)),n=s.converters.CacheQueryOptions(n,r,`options`);let i=null;if(t!==void 0){if(t instanceof d){if(i=t[p],i.method!==`GET`&&!n.ignoreMethod)return[]}else typeof t==`string`&&(i=new d(t)[p])}let a=_(),o=[];if(t===void 0)for(let e of this.#e)o.push(e[0]);else{let e=this.#n(i,n);for(let t of e)o.push(t[0])}return queueMicrotask(()=>{let e=[];for(let t of o){let n=f(t,new AbortController().signal,`immutable`);e.push(n)}a.resolve(Object.freeze(e))}),a.promise}#t(e){let t=this.#e,n=[...t],r=[],i=[];try{for(let n of e){if(n.type!==`delete`&&n.type!==`put`)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`operation type does not match "delete" or "put"`});if(n.type===`delete`&&n.response!=null)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`delete operation should not have an associated response`});if(this.#n(n.request,n.options,r).length)throw new DOMException(`???`,`InvalidStateError`);let e;if(n.type===`delete`){if(e=this.#n(n.request,n.options),e.length===0)return[];for(let n of e){let e=t.indexOf(n);y(e!==-1),t.splice(e,1)}}else if(n.type===`put`){if(n.response==null)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`put operation should have an associated response`});let i=n.request;if(!g(i.url))throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`expected http or https scheme`});if(i.method!==`GET`)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`not get method`});if(n.options!=null)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`options must not be defined`});e=this.#n(n.request);for(let n of e){let e=t.indexOf(n);y(e!==-1),t.splice(e,1)}t.push([n.request,n.response]),r.push([n.request,n.response])}i.push([n.request,n.response])}return i}catch(e){throw this.#e.length=0,this.#e=n,e}}#n(e,t,n){let r=[],i=n??this.#e;for(let n of i){let[i,a]=n;this.#r(e,i,a,t)&&r.push(n)}return r}#r(e,t,n=null,a){let o=new URL(e.url),s=new URL(t.url);if(a?.ignoreSearch&&(s.search=``,o.search=``),!r(o,s,!0))return!1;if(n==null||a?.ignoreVary||!n.headersList.contains(`vary`))return!0;let c=i(n.headersList.get(`vary`));for(let n of c)if(n===`*`||t.headersList.get(n)!==e.headersList.get(n))return!1;return!0}#i(e,t,n=1/0){let r=null;if(e!==void 0){if(e instanceof d){if(r=e[p],r.method!==`GET`&&!t.ignoreMethod)return[]}else typeof e==`string`&&(r=new d(e)[p])}let i=[];if(e===void 0)for(let e of this.#e)i.push(e[1]);else{let e=this.#n(r,t);for(let t of e)i.push(t[1])}let a=[];for(let e of i){let t=u(e,`immutable`);if(a.push(t.clone()),a.length>=n)break}return Object.freeze(a)}};Object.defineProperties(b.prototype,{[Symbol.toStringTag]:{value:`Cache`,configurable:!0},match:a,matchAll:a,add:a,addAll:a,put:a,delete:a,keys:a});let x=[{key:`ignoreSearch`,converter:s.converters.boolean,defaultValue:()=>!1},{key:`ignoreMethod`,converter:s.converters.boolean,defaultValue:()=>!1},{key:`ignoreVary`,converter:s.converters.boolean,defaultValue:()=>!1}];s.converters.CacheQueryOptions=s.dictionaryConverter(x),s.converters.MultiCacheQueryOptions=s.dictionaryConverter([...x,{key:`cacheName`,converter:s.converters.DOMString}]),s.converters.Response=s.interfaceConverter(c),s.converters[`sequence`]=s.sequenceConverter(s.converters.RequestInfo),t.exports={Cache:b}})),Je=/* @__PURE__ */ m(((e,t)=>{let{kConstruct:n}=Ge(),{Cache:r}=qe(),{webidl:i}=B(),{kEnumerableProperty:a}=O();var o=class e{#e=/* @__PURE__ */ new Map;constructor(){arguments[0]!==n&&i.illegalConstructor(),i.util.markAsUncloneable(this)}async match(t,a={}){if(i.brandCheck(this,e),i.argumentLengthCheck(arguments,1,`CacheStorage.match`),t=i.converters.RequestInfo(t),a=i.converters.MultiCacheQueryOptions(a),a.cacheName!=null){if(this.#e.has(a.cacheName)){let e=this.#e.get(a.cacheName);return await new r(n,e).match(t,a)}}else for(let e of this.#e.values()){let i=await new r(n,e).match(t,a);if(i!==void 0)return i}}async has(t){i.brandCheck(this,e);let n=`CacheStorage.has`;return i.argumentLengthCheck(arguments,1,n),t=i.converters.DOMString(t,n,`cacheName`),this.#e.has(t)}async open(t){i.brandCheck(this,e);let a=`CacheStorage.open`;if(i.argumentLengthCheck(arguments,1,a),t=i.converters.DOMString(t,a,`cacheName`),this.#e.has(t)){let e=this.#e.get(t);return new r(n,e)}let o=[];return this.#e.set(t,o),new r(n,o)}async delete(t){i.brandCheck(this,e);let n=`CacheStorage.delete`;return i.argumentLengthCheck(arguments,1,n),t=i.converters.DOMString(t,n,`cacheName`),this.#e.delete(t)}async keys(){return i.brandCheck(this,e),[...this.#e.keys()]}};Object.defineProperties(o.prototype,{[Symbol.toStringTag]:{value:`CacheStorage`,configurable:!0},match:a,has:a,open:a,delete:a,keys:a}),t.exports={CacheStorage:o}})),Ye=/* @__PURE__ */ m(((e,t)=>{t.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}})),Xe=/* @__PURE__ */ m(((e,t)=>{function n(e){for(let t=0;t=0&&n<=8||n>=10&&n<=31||n===127)return!0}return!1}function r(e){for(let t=0;t126||n===34||n===40||n===41||n===60||n===62||n===64||n===44||n===59||n===58||n===92||n===47||n===91||n===93||n===63||n===61||n===123||n===125)throw Error(`Invalid cookie name`)}}function i(e){let t=e.length,n=0;if(e[0]===`"`){if(t===1||e[t-1]!==`"`)throw Error(`Invalid cookie value`);--t,++n}for(;n126||t===34||t===44||t===59||t===92)throw Error(`Invalid cookie value`)}}function a(e){for(let t=0;t126||n===59)throw Error(`Invalid cookie path`)}}function o(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function s(e){if(e===` `)return;if(e.length>255)throw Error(`Invalid cookie domain`);let t=0;for(let n=0;n63)throw Error(`Invalid cookie domain`)}if(t===0||e.charCodeAt(e.length-1)===45)throw Error(`Invalid cookie domain`)}let c=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],l=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],u=Array(61).fill(0).map((e,t)=>t.toString().padStart(2,`0`));function d(e){return typeof e==`number`&&(e=new Date(e)),`${c[e.getUTCDay()]}, ${u[e.getUTCDate()]} ${l[e.getUTCMonth()]} ${e.getUTCFullYear()} ${u[e.getUTCHours()]}:${u[e.getUTCMinutes()]}:${u[e.getUTCSeconds()]} GMT`}function f(e){if(e<0)throw Error(`Invalid cookie max-age`)}function p(e){if(e.name.length===0)return null;r(e.name),i(e.value);let t=[`${e.name}=${e.value}`];e.name.startsWith(`__Secure-`)&&(e.secure=!0),e.name.startsWith(`__Host-`)&&(e.secure=!0,e.domain=null,e.path=`/`),e.secure&&t.push(`Secure`),e.httpOnly&&t.push(`HttpOnly`),typeof e.maxAge==`number`&&(f(e.maxAge),t.push(`Max-Age=${e.maxAge}`)),e.domain&&(s(e.domain),t.push(`Domain=${e.domain}`)),e.path&&(a(e.path),t.push(`Path=${e.path}`)),e.expires&&e.expires.toString()!==`Invalid Date`&&t.push(`Expires=${d(e.expires)}`),e.sameSite&&t.push(`SameSite=${e.sameSite}`);for(let n of e.unparsed){if(!n.includes(`=`))throw Error(`Invalid unparsed`);let[e,...a]=n.split(`=`),o=e.trim(),s=a.join(`=`);r(o),i(s),t.push(`${o}=${s}`)}return t.join(`; `)}t.exports={isCTLExcludingHtab:n,validateCookieName:r,validateCookiePath:a,validateCookieValue:i,toIMFDate:d,stringify:p}})),Ze=/* @__PURE__ */ m(((e,t)=>{let{maxNameValuePairSize:n,maxAttributeValueSize:r}=Ye(),{isCTLExcludingHtab:i}=Xe(),{collectASequenceOfCodePointsFast:a}=z(),o=h(`node:assert`);function s(e){if(i(e))return null;let t=``,r=``,o=``,s=``;if(e.includes(`;`)){let n={position:0};t=a(`;`,e,n),r=e.slice(n.position)}else t=e;if(!t.includes(`=`))s=t;else{let e={position:0};o=a(`=`,t,e),s=t.slice(e.position+1)}return o=o.trim(),s=s.trim(),o.length+s.length>n?null:{name:o,value:s,...c(r)}}function c(e,t={}){if(e.length===0)return t;o(e[0]===`;`),e=e.slice(1);let n=``;e.includes(`;`)?(n=a(`;`,e,{position:0}),e=e.slice(n.length)):(n=e,e=``);let i=``,s=``;if(n.includes(`=`)){let e={position:0};i=a(`=`,n,e),s=n.slice(e.position+1)}else i=n;if(i=i.trim(),s=s.trim(),s.length>r)return c(e,t);let l=i.toLowerCase();if(l===`expires`)t.expires=new Date(s);else if(l===`max-age`){let n=s.charCodeAt(0);if((n<48||n>57)&&s[0]!==`-`||!/^\d+$/.test(s))return c(e,t);t.maxAge=Number(s)}else if(l===`domain`){let e=s;e[0]===`.`&&(e=e.slice(1)),e=e.toLowerCase(),t.domain=e}else if(l===`path`){let e=``;e=s.length===0||s[0]!==`/`?`/`:s,t.path=e}else if(l===`secure`)t.secure=!0;else if(l===`httponly`)t.httpOnly=!0;else if(l===`samesite`){let e=s.toLowerCase();e===`none`?t.sameSite=`None`:e===`strict`?t.sameSite=`Strict`:e===`lax`&&(t.sameSite=`Lax`)}else t.unparsed??=[],t.unparsed.push(`${i}=${s}`);return c(e,t)}t.exports={parseSetCookie:s,parseUnparsedAttributes:c}})),Qe=/* @__PURE__ */ m(((e,t)=>{let{parseSetCookie:n}=Ze(),{stringify:r}=Xe(),{webidl:i}=B(),{Headers:a}=Fe();function o(e){i.argumentLengthCheck(arguments,1,`getCookies`),i.brandCheck(e,a,{strict:!1});let t=e.get(`cookie`),n={};if(!t)return n;for(let e of t.split(`;`)){let[t,...r]=e.split(`=`);n[t.trim()]=r.join(`=`)}return n}function s(e,t,n){i.brandCheck(e,a,{strict:!1});let r=`deleteCookie`;i.argumentLengthCheck(arguments,2,r),t=i.converters.DOMString(t,r,`name`),n=i.converters.DeleteCookieAttributes(n),l(e,{name:t,value:``,expires:/* @__PURE__ */ new Date(0),...n})}function c(e){i.argumentLengthCheck(arguments,1,`getSetCookies`),i.brandCheck(e,a,{strict:!1});let t=e.getSetCookie();return t?t.map(e=>n(e)):[]}function l(e,t){i.argumentLengthCheck(arguments,2,`setCookie`),i.brandCheck(e,a,{strict:!1}),t=i.converters.Cookie(t);let n=r(t);n&&e.append(`Set-Cookie`,n)}i.converters.DeleteCookieAttributes=i.dictionaryConverter([{converter:i.nullableConverter(i.converters.DOMString),key:`path`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.DOMString),key:`domain`,defaultValue:()=>null}]),i.converters.Cookie=i.dictionaryConverter([{converter:i.converters.DOMString,key:`name`},{converter:i.converters.DOMString,key:`value`},{converter:i.nullableConverter(e=>typeof e==`number`?i.converters[`unsigned long long`](e):new Date(e)),key:`expires`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters[`long long`]),key:`maxAge`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.DOMString),key:`domain`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.DOMString),key:`path`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.boolean),key:`secure`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.boolean),key:`httpOnly`,defaultValue:()=>null},{converter:i.converters.USVString,key:`sameSite`,allowedValues:[`Strict`,`Lax`,`None`]},{converter:i.sequenceConverter(i.converters.DOMString),key:`unparsed`,defaultValue:()=>[]}]),t.exports={getCookies:o,deleteCookie:s,getSetCookies:c,setCookie:l}})),$e=/* @__PURE__ */ m(((e,t)=>{let{webidl:n}=B(),{kEnumerableProperty:r}=O(),{kConstruct:i}=w(),{MessagePort:a}=h(`node:worker_threads`);var o=class e extends Event{#e;constructor(e,t={}){if(e===i){super(arguments[1],arguments[2]),n.util.markAsUncloneable(this);return}let r=`MessageEvent constructor`;n.argumentLengthCheck(arguments,1,r),e=n.converters.DOMString(e,r,`type`),t=n.converters.MessageEventInit(t,r,`eventInitDict`),super(e,t),this.#e=t,n.util.markAsUncloneable(this)}get data(){return n.brandCheck(this,e),this.#e.data}get origin(){return n.brandCheck(this,e),this.#e.origin}get lastEventId(){return n.brandCheck(this,e),this.#e.lastEventId}get source(){return n.brandCheck(this,e),this.#e.source}get ports(){return n.brandCheck(this,e),Object.isFrozen(this.#e.ports)||Object.freeze(this.#e.ports),this.#e.ports}initMessageEvent(t,r=!1,i=!1,a=null,o=``,s=``,c=null,l=[]){return n.brandCheck(this,e),n.argumentLengthCheck(arguments,1,`MessageEvent.initMessageEvent`),new e(t,{bubbles:r,cancelable:i,data:a,origin:o,lastEventId:s,source:c,ports:l})}static createFastMessageEvent(t,n){let r=new e(i,t,n);return r.#e=n,r.#e.data??=null,r.#e.origin??=``,r.#e.lastEventId??=``,r.#e.source??=null,r.#e.ports??=[],r}};let{createFastMessageEvent:s}=o;delete o.createFastMessageEvent;var c=class e extends Event{#e;constructor(e,t={}){let r=`CloseEvent constructor`;n.argumentLengthCheck(arguments,1,r),e=n.converters.DOMString(e,r,`type`),t=n.converters.CloseEventInit(t),super(e,t),this.#e=t,n.util.markAsUncloneable(this)}get wasClean(){return n.brandCheck(this,e),this.#e.wasClean}get code(){return n.brandCheck(this,e),this.#e.code}get reason(){return n.brandCheck(this,e),this.#e.reason}},l=class e extends Event{#e;constructor(e,t){let r=`ErrorEvent constructor`;n.argumentLengthCheck(arguments,1,r),super(e,t),n.util.markAsUncloneable(this),e=n.converters.DOMString(e,r,`type`),t=n.converters.ErrorEventInit(t??{}),this.#e=t}get message(){return n.brandCheck(this,e),this.#e.message}get filename(){return n.brandCheck(this,e),this.#e.filename}get lineno(){return n.brandCheck(this,e),this.#e.lineno}get colno(){return n.brandCheck(this,e),this.#e.colno}get error(){return n.brandCheck(this,e),this.#e.error}};Object.defineProperties(o.prototype,{[Symbol.toStringTag]:{value:`MessageEvent`,configurable:!0},data:r,origin:r,lastEventId:r,source:r,ports:r,initMessageEvent:r}),Object.defineProperties(c.prototype,{[Symbol.toStringTag]:{value:`CloseEvent`,configurable:!0},reason:r,code:r,wasClean:r}),Object.defineProperties(l.prototype,{[Symbol.toStringTag]:{value:`ErrorEvent`,configurable:!0},message:r,filename:r,lineno:r,colno:r,error:r}),n.converters.MessagePort=n.interfaceConverter(a),n.converters[`sequence`]=n.sequenceConverter(n.converters.MessagePort);let u=[{key:`bubbles`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`cancelable`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`composed`,converter:n.converters.boolean,defaultValue:()=>!1}];n.converters.MessageEventInit=n.dictionaryConverter([...u,{key:`data`,converter:n.converters.any,defaultValue:()=>null},{key:`origin`,converter:n.converters.USVString,defaultValue:()=>``},{key:`lastEventId`,converter:n.converters.DOMString,defaultValue:()=>``},{key:`source`,converter:n.nullableConverter(n.converters.MessagePort),defaultValue:()=>null},{key:`ports`,converter:n.converters[`sequence`],defaultValue:()=>[]}]),n.converters.CloseEventInit=n.dictionaryConverter([...u,{key:`wasClean`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`code`,converter:n.converters[`unsigned short`],defaultValue:()=>0},{key:`reason`,converter:n.converters.USVString,defaultValue:()=>``}]),n.converters.ErrorEventInit=n.dictionaryConverter([...u,{key:`message`,converter:n.converters.DOMString,defaultValue:()=>``},{key:`filename`,converter:n.converters.USVString,defaultValue:()=>``},{key:`lineno`,converter:n.converters[`unsigned long`],defaultValue:()=>0},{key:`colno`,converter:n.converters[`unsigned long`],defaultValue:()=>0},{key:`error`,converter:n.converters.any}]),t.exports={MessageEvent:o,CloseEvent:c,ErrorEvent:l,createFastMessageEvent:s}})),et=/* @__PURE__ */ m(((e,t)=>{t.exports={uid:`258EAFA5-E914-47DA-95CA-C5AB0DC85B11`,sentCloseFrameState:{NOT_SENT:0,PROCESSING:1,SENT:2},staticPropertyDescriptors:{enumerable:!0,writable:!1,configurable:!1},states:{CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},opcodes:{CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},maxUnsigned16Bit:2**16-1,parserStates:{INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},emptyBuffer:Buffer.allocUnsafe(0),sendHints:{string:1,typedArray:2,arrayBuffer:3,blob:4}}})),tt=/* @__PURE__ */ m(((e,t)=>{t.exports={kWebSocketURL:Symbol(`url`),kReadyState:Symbol(`ready state`),kController:Symbol(`controller`),kResponse:Symbol(`response`),kBinaryType:Symbol(`binary type`),kSentClose:Symbol(`sent close`),kReceivedClose:Symbol(`received close`),kByteParser:Symbol(`byte parser`)}})),nt=/* @__PURE__ */ m(((e,t)=>{let{kReadyState:n,kController:r,kResponse:i,kBinaryType:a,kWebSocketURL:o}=tt(),{states:s,opcodes:c}=et(),{ErrorEvent:l,createFastMessageEvent:u}=$e(),{isUtf8:d}=h(`node:buffer`),{collectASequenceOfCodePointsFast:f,removeHTTPWhitespace:p}=z();function m(e){return e[n]===s.CONNECTING}function g(e){return e[n]===s.OPEN}function _(e){return e[n]===s.CLOSING}function v(e){return e[n]===s.CLOSED}function y(e,t,n=(e,t)=>new Event(e,t),r={}){let i=n(e,r);t.dispatchEvent(i)}function b(e,t,r){if(e[n]!==s.OPEN)return;let i;if(t===c.TEXT)try{i=N(r)}catch{w(e,`Received invalid UTF-8 in text frame.`);return}else t===c.BINARY&&(i=e[a]===`blob`?new Blob([r]):x(r));y(`message`,e,u,{origin:e[o].origin,data:i})}function x(e){return e.byteLength===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function S(e){if(e.length===0)return!1;for(let t=0;t126||n===34||n===40||n===41||n===44||n===47||n===58||n===59||n===60||n===61||n===62||n===63||n===64||n===91||n===92||n===93||n===123||n===125)return!1}return!0}function C(e){return e>=1e3&&e<1015?e!==1004&&e!==1005&&e!==1006:e>=3e3&&e<=4999}function w(e,t){let{[r]:n,[i]:a}=e;n.abort(),a?.socket&&!a.socket.destroyed&&a.socket.destroy(),t&&y(`error`,e,(e,t)=>new l(e,t),{error:Error(t),message:t})}function T(e){return e===c.CLOSE||e===c.PING||e===c.PONG}function E(e){return e===c.CONTINUATION}function D(e){return e===c.TEXT||e===c.BINARY}function O(e){return D(e)||E(e)||T(e)}function k(e){let t={position:0},n=/* @__PURE__ */ new Map;for(;t.position57)return!1}let t=Number.parseInt(e,10);return t>=8&&t<=15}let j=typeof process.versions.icu==`string`,M=j?new TextDecoder(`utf-8`,{fatal:!0}):void 0,N=j?M.decode.bind(M):function(e){if(d(e))return e.toString(`utf-8`);throw TypeError(`Invalid utf-8 received.`)};t.exports={isConnecting:m,isEstablished:g,isClosing:_,isClosed:v,fireEvent:y,isValidSubprotocol:S,isValidStatusCode:C,failWebsocketConnection:w,websocketMessageReceived:b,utf8Decode:N,isControlFrame:T,isContinuationFrame:E,isTextBinaryFrame:D,isValidOpcode:O,parseExtensions:k,isValidClientWindowBits:A}})),rt=/* @__PURE__ */ m(((e,t)=>{let{maxUnsigned16Bit:n}=et(),r=16386,i,a=null,o=r;try{i=h(`node:crypto`)}catch{i={randomFillSync:function(e,t,n){for(let t=0;t */ -t.exports={WebsocketFrameSend:class{constructor(e){this.frameData=e}createFrame(e){let t=this.frameData,r=s(),i=t?.byteLength??0,a=i,o=6;i>n?(o+=8,a=127):i>125&&(o+=2,a=126);let c=Buffer.allocUnsafe(i+o);c[0]=c[1]=0,c[0]|=128,c[0]=(c[0]&240)+e,c[o-4]=r[0],c[o-3]=r[1],c[o-2]=r[2],c[o-1]=r[3],c[1]=a,a===126?c.writeUInt16BE(i,2):a===127&&(c[2]=c[3]=0,c.writeUIntBE(i,4,6)),c[1]|=128;for(let e=0;e{let{uid:n,states:r,sentCloseFrameState:i,emptyBuffer:a,opcodes:o}=tt(),{kReadyState:s,kSentClose:c,kByteParser:l,kReceivedClose:u,kResponse:d}=nt(),{fireEvent:f,failWebsocketConnection:p,isClosing:m,isClosed:g,isEstablished:_,parseExtensions:v}=rt(),{channels:y}=k(),{CloseEvent:b}=et(),{makeRequest:x}=ze(),{fetching:S}=Be(),{Headers:C,getHeadersList:w}=Ie(),{getDecodeSplit:T}=V(),{WebsocketFrameSend:E}=it(),D;try{D=h(`node:crypto`)}catch{}function O(e,t,r,i,a,o){let s=e;s.protocol=e.protocol===`ws:`?`http:`:`https:`;let c=x({urlList:[s],client:r,serviceWorkers:`none`,referrer:`no-referrer`,mode:`websocket`,credentials:`include`,cache:`no-store`,redirect:`error`});o.headers&&(c.headersList=w(new C(o.headers)));let l=D.randomBytes(16).toString(`base64`);c.headersList.append(`sec-websocket-key`,l),c.headersList.append(`sec-websocket-version`,`13`);for(let e of t)c.headersList.append(`sec-websocket-protocol`,e);return c.headersList.append(`sec-websocket-extensions`,`permessage-deflate; client_max_window_bits`),S({request:c,useParallelQueue:!0,dispatcher:o.dispatcher,processResponse(e){if(e.type===`error`||e.status!==101){p(i,`Received network error or non-101 status code.`);return}if(t.length!==0&&!e.headersList.get(`Sec-WebSocket-Protocol`)){p(i,`Server did not respond with sent protocols.`);return}if(e.headersList.get(`Upgrade`)?.toLowerCase()!==`websocket`){p(i,`Server did not set Upgrade header to "websocket".`);return}if(e.headersList.get(`Connection`)?.toLowerCase()!==`upgrade`){p(i,`Server did not set Connection header to "upgrade".`);return}if(e.headersList.get(`Sec-WebSocket-Accept`)!==D.createHash(`sha1`).update(l+n).digest(`base64`)){p(i,`Incorrect hash received in Sec-WebSocket-Accept header.`);return}let r=e.headersList.get(`Sec-WebSocket-Extensions`),o;if(r!==null&&(o=v(r),!o.has(`permessage-deflate`))){p(i,`Sec-WebSocket-Extensions header does not match.`);return}let s=e.headersList.get(`Sec-WebSocket-Protocol`);if(s!==null){let e=T(`sec-websocket-protocol`,c.headersList);if(e===null||!e.includes(s)){p(i,`Protocol was not set in the opening handshake.`);return}}e.socket.on(`data`,j),e.socket.on(`close`,M),e.socket.on(`error`,N),y.open.hasSubscribers&&y.open.publish({address:e.socket.address(),protocol:s,extensions:r}),a(e,o)}})}function A(e,t,n,l){if(!(m(e)||g(e))){if(!_(e))p(e,`Connection was closed before it was established.`),e[s]=r.CLOSING;else if(e[c]===i.NOT_SENT){e[c]=i.PROCESSING;let u=new E;t!==void 0&&n===void 0?(u.frameData=Buffer.allocUnsafe(2),u.frameData.writeUInt16BE(t,0)):t!==void 0&&n!==void 0?(u.frameData=Buffer.allocUnsafe(2+l),u.frameData.writeUInt16BE(t,0),u.frameData.write(n,2,`utf-8`)):u.frameData=a,e[d].socket.write(u.createFrame(o.CLOSE)),e[c]=i.SENT,e[s]=r.CLOSING}else e[s]=r.CLOSING}}function j(e){this.ws[l].write(e)||this.pause()}function M(){let{ws:e}=this,{[d]:t}=e;t.socket.off(`data`,j),t.socket.off(`close`,M),t.socket.off(`error`,N);let n=e[c]===i.SENT&&e[u],a=1005,o=``,p=e[l].closingInfo;p&&!p.error?(a=p.code??1005,o=p.reason):e[u]||(a=1006),e[s]=r.CLOSED,f(`close`,e,(e,t)=>new b(e,t),{wasClean:n,code:a,reason:o}),y.close.hasSubscribers&&y.close.publish({websocket:e,code:a,reason:o})}function N(e){let{ws:t}=this;t[s]=r.CLOSING,y.socketError.hasSubscribers&&y.socketError.publish(e),this.destroy()}t.exports={establishWebSocketConnection:O,closeWebSocketConnection:A}})),ot=/* @__PURE__ */ m(((e,t)=>{let{createInflateRaw:n,Z_DEFAULT_WINDOWBITS:r}=h(`node:zlib`),{isValidClientWindowBits:i}=rt(),{MessageSizeExceededError:a}=T(),o=Buffer.from([0,0,255,255]),s=Symbol(`kBuffer`),c=Symbol(`kLength`);t.exports={PerMessageDeflate:class{#e;#t={};#n=0;constructor(e,t){this.#t.serverNoContextTakeover=e.has(`server_no_context_takeover`),this.#t.serverMaxWindowBits=e.get(`server_max_window_bits`),this.#n=t.maxPayloadSize}decompress(e,t,l){if(!this.#e){let e=r;if(this.#t.serverMaxWindowBits){if(!i(this.#t.serverMaxWindowBits)){l(/* @__PURE__ */ Error(`Invalid server_max_window_bits`));return}e=Number.parseInt(this.#t.serverMaxWindowBits)}try{this.#e=n({windowBits:e})}catch(e){l(e);return}this.#e[s]=[],this.#e[c]=0,this.#e.on(`data`,e=>{this.#e[c]+=e.length,this.#n>0&&this.#e[c]>this.#n?(l(new a),this.#e.removeAllListeners(),this.#e.destroy(),this.#e=null):this.#e[s].push(e)}),this.#e.on(`error`,e=>{this.#e=null,l(e)})}this.#e.write(e),t&&this.#e.write(o),this.#e.flush(()=>{if(!this.#e)return;let e=Buffer.concat(this.#e[s],this.#e[c]);this.#e[s].length=0,this.#e[c]=0,l(null,e)})}}}})),st=/* @__PURE__ */ m(((e,t)=>{let{Writable:n}=h(`node:stream`),r=h(`node:assert`),{parserStates:i,opcodes:a,states:o,emptyBuffer:s,sentCloseFrameState:c}=tt(),{kReadyState:l,kSentClose:u,kResponse:d,kReceivedClose:f}=nt(),{channels:p}=k(),{isValidStatusCode:m,isValidOpcode:g,failWebsocketConnection:_,websocketMessageReceived:v,utf8Decode:y,isControlFrame:b,isTextBinaryFrame:x,isContinuationFrame:S}=rt(),{WebsocketFrameSend:C}=it(),{closeWebSocketConnection:w}=at(),{PerMessageDeflate:E}=ot(),{MessageSizeExceededError:D}=T();function O(e,t,n){w(e,t,n,Buffer.byteLength(n)),_(e,n)}t.exports={ByteParser:class extends n{#e=[];#t=0;#n=0;#r=!1;#i=i.INFO;#a={};#o=[];#s;#c;#l;constructor(e,t,n={}){super(),this.ws=e,this.#s=t??/* @__PURE__ */ new Map,this.#c=n.maxFragments??0,this.#l=n.maxPayloadSize??0,this.#s.has(`permessage-deflate`)&&this.#s.set(`permessage-deflate`,new E(t,n))}_write(e,t,n){this.#e.push(e),this.#n+=e.length,this.#r=!0,this.run(n)}#u(){return this.#l>0&&!b(this.#a.opcode)&&this.#a.payloadLength+this.#t>this.#l?(O(this.ws,1009,`Payload size exceeds maximum allowed size`),!1):!0}run(e){for(;this.#r;)if(this.#i===i.INFO){if(this.#n<2)return e();let t=this.consume(2),n=!!(t[0]&128),r=t[0]&15,o=(t[1]&128)==128,s=!n&&r!==a.CONTINUATION,c=t[1]&127,l=t[0]&64,u=t[0]&32,d=t[0]&16;if(!g(r))return _(this.ws,`Invalid opcode received`),e();if(o)return _(this.ws,`Frame cannot be masked`),e();if(l!==0&&!this.#s.has(`permessage-deflate`)){_(this.ws,`Expected RSV1 to be clear.`);return}if(u!==0||d!==0){_(this.ws,`RSV1, RSV2, RSV3 must be clear`);return}if(s&&!x(r)){_(this.ws,`Invalid frame type was fragmented.`);return}if(x(r)&&this.#o.length>0){_(this.ws,`Expected continuation frame`);return}if(this.#a.fragmented&&s){_(this.ws,`Fragmented frame exceeded 125 bytes.`);return}if((c>125||s)&&b(r)){_(this.ws,`Control frame either too large or fragmented`);return}if(S(r)&&this.#o.length===0&&!this.#a.compressed){_(this.ws,`Unexpected continuation frame`);return}if(c<=125){if(this.#a.payloadLength=c,this.#i=i.READ_DATA,!this.#u())return}else c===126?this.#i=i.PAYLOADLENGTH_16:c===127&&(this.#i=i.PAYLOADLENGTH_64);x(r)&&(this.#a.binaryType=r,this.#a.compressed=l!==0),this.#a.opcode=r,this.#a.masked=o,this.#a.fin=n,this.#a.fragmented=s}else if(this.#i===i.PAYLOADLENGTH_16){if(this.#n<2)return e();let t=this.consume(2);if(this.#a.payloadLength=t.readUInt16BE(0),this.#i=i.READ_DATA,!this.#u())return}else if(this.#i===i.PAYLOADLENGTH_64){if(this.#n<8)return e();let t=this.consume(8),n=t.readUInt32BE(0),r=t.readUInt32BE(4);if(n!==0||r>2**31-1){_(this.ws,`Received payload length > 2^31 bytes.`);return}if(this.#a.payloadLength=r,this.#i=i.READ_DATA,!this.#u())return}else if(this.#i===i.READ_DATA){if(this.#n{this.destroyed||(this.#r=!0,this.run(e))});return}}else if(this.#a.compressed){this.#s.get(`permessage-deflate`).decompress(t,this.#a.fin,(t,n)=>{if(t){let e=t instanceof D?1009:1007;O(this.ws,e,t.message)}else this.writeFragments(n)&&(this.#l>0&&this.#t>this.#l?O(this.ws,1009,new D().message):this.#a.fin?(v(this.ws,this.#a.binaryType,this.consumeFragments()),this.#r=!0,this.#i=i.INFO,this.run(e)):(this.#i=i.INFO,this.#r=!0,this.run(e)))}),this.#r=!1;break}else{if(!this.writeFragments(t))return;if(this.#l>0&&this.#t>this.#l){O(this.ws,1009,new D().message);return}!this.#a.fragmented&&this.#a.fin&&v(this.ws,this.#a.binaryType,this.consumeFragments()),this.#i=i.INFO}}}consume(e){if(e>this.#n)throw Error(`Called consume() before buffers satiated.`);if(e===0)return s;if(this.#e[0].length===e)return this.#n-=this.#e[0].length,this.#e.shift();let t=Buffer.allocUnsafe(e),n=0;for(;n!==e;){let r=this.#e[0],{length:i}=r;if(i+n===e){t.set(this.#e.shift(),n);break}if(i+n>e){t.set(r.subarray(0,e-n),n),this.#e[0]=r.subarray(e-n);break}t.set(this.#e.shift(),n),n+=r.length}return this.#n-=e,t}writeFragments(e){return this.#c>0&&this.#o.length===this.#c?(O(this.ws,1008,`Too many message fragments`),!1):(this.#t+=e.length,this.#o.push(e),!0)}consumeFragments(){let e=this.#o;if(e.length===1)return this.#t=0,e.shift();let t=Buffer.concat(e,this.#t);return this.#o=[],this.#t=0,t}parseCloseBody(e){r(e.length!==1);let t;if(e.length>=2&&(t=e.readUInt16BE(0)),t!==void 0&&!m(t))return{code:1002,reason:`Invalid status code`,error:!0};let n=e.subarray(2);n[0]===239&&n[1]===187&&n[2]===191&&(n=n.subarray(3));try{n=y(n)}catch{return{code:1007,reason:`Invalid UTF-8`,error:!0}}return{code:t,reason:n,error:!1}}parseControlFrame(e){let{opcode:t,payloadLength:n}=this.#a;if(t===a.CLOSE){if(n===1)return _(this.ws,`Received close frame with a 1-byte body.`),!1;if(this.#a.closeInfo=this.parseCloseBody(e),this.#a.closeInfo.error){let{code:e,reason:t}=this.#a.closeInfo;return w(this.ws,e,t,t.length),_(this.ws,t),!1}if(this.ws[u]!==c.SENT){let e=s;this.#a.closeInfo.code&&(e=Buffer.allocUnsafe(2),e.writeUInt16BE(this.#a.closeInfo.code,0));let t=new C(e);this.ws[d].socket.write(t.createFrame(a.CLOSE),e=>{e||(this.ws[u]=c.SENT)})}return this.ws[l]=o.CLOSING,this.ws[f]=!0,!1}if(t===a.PING){if(!this.ws[f]){let t=new C(e);this.ws[d].socket.write(t.createFrame(a.PONG)),p.ping.hasSubscribers&&p.ping.publish({payload:e})}}else t===a.PONG&&p.pong.hasSubscribers&&p.pong.publish({payload:e});return!0}get closingInfo(){return this.#a.closeInfo}}}})),ct=/* @__PURE__ */ m(((e,t)=>{let{WebsocketFrameSend:n}=it(),{opcodes:r,sendHints:i}=tt(),a=K(),o=Buffer[Symbol.species];var s=class{#e=new a;#t=!1;#n;constructor(e){this.#n=e}add(e,t,n){if(n!==i.blob){let r=c(e,n);if(!this.#t)this.#n.write(r,t);else{let e={promise:null,callback:t,frame:r};this.#e.push(e)}return}let r={promise:e.arrayBuffer().then(e=>{r.promise=null,r.frame=c(e,n)}),callback:t,frame:null};this.#e.push(r),this.#t||this.#r()}async#r(){this.#t=!0;let e=this.#e;for(;!e.isEmpty();){let t=e.shift();t.promise!==null&&await t.promise,this.#n.write(t.frame,t.callback),t.callback=t.frame=null}this.#t=!1}};function c(e,t){return new n(l(e,t)).createFrame(t===i.string?r.TEXT:r.BINARY)}function l(e,t){switch(t){case i.string:return Buffer.from(e);case i.arrayBuffer:case i.blob:return new o(e);case i.typedArray:return new o(e.buffer,e.byteOffset,e.byteLength)}}t.exports={SendQueue:s}})),lt=/* @__PURE__ */ m(((e,t)=>{let{webidl:n}=B(),{URLSerializer:r}=z(),{environmentSettingsObject:i}=V(),{staticPropertyDescriptors:a,states:o,sentCloseFrameState:s,sendHints:c}=tt(),{kWebSocketURL:l,kReadyState:u,kController:d,kBinaryType:f,kResponse:p,kSentClose:m,kByteParser:g}=nt(),{isConnecting:_,isEstablished:v,isClosing:y,isValidSubprotocol:b,fireEvent:x}=rt(),{establishWebSocketConnection:S,closeWebSocketConnection:C}=at(),{ByteParser:w}=st(),{kEnumerableProperty:T,isBlobLike:E}=O(),{getGlobalDispatcher:D}=Ae(),{types:k}=h(`node:util`),{ErrorEvent:A,CloseEvent:j}=et(),{SendQueue:M}=ct();var N=class e extends EventTarget{#e={open:null,error:null,close:null,message:null};#t=0;#n=``;#r=``;#i;constructor(t,r=[]){super(),n.util.markAsUncloneable(this);let a=`WebSocket constructor`;n.argumentLengthCheck(arguments,1,a);let o=n.converters[`DOMString or sequence or WebSocketInit`](r,a,`options`);t=n.converters.USVString(t,a,`url`),r=o.protocols;let c=i.settingsObject.baseUrl,p;try{p=new URL(t,c)}catch(e){throw new DOMException(e,`SyntaxError`)}if(p.protocol===`http:`?p.protocol=`ws:`:p.protocol===`https:`&&(p.protocol=`wss:`),p.protocol!==`ws:`&&p.protocol!==`wss:`)throw new DOMException(`Expected a ws: or wss: protocol, got ${p.protocol}`,`SyntaxError`);if(p.hash||p.href.endsWith(`#`))throw new DOMException(`Got fragment`,`SyntaxError`);if(typeof r==`string`&&(r=[r]),r.length!==new Set(r.map(e=>e.toLowerCase())).size||r.length>0&&!r.every(e=>b(e)))throw new DOMException(`Invalid Sec-WebSocket-Protocol value`,`SyntaxError`);this[l]=new URL(p.href);let h=i.settingsObject;this[d]=S(p,r,h,this,(e,t)=>this.#a(e,t),o),this[u]=e.CONNECTING,this[m]=s.NOT_SENT,this[f]=`blob`}close(t=void 0,r=void 0){n.brandCheck(this,e);let i=`WebSocket.close`;if(t!==void 0&&(t=n.converters[`unsigned short`](t,i,`code`,{clamp:!0})),r!==void 0&&(r=n.converters.USVString(r,i,`reason`)),t!==void 0&&t!==1e3&&(t<3e3||t>4999))throw new DOMException(`invalid code`,`InvalidAccessError`);let a=0;if(r!==void 0&&(a=Buffer.byteLength(r),a>123))throw new DOMException(`Reason must be less than 123 bytes; received ${a}`,`SyntaxError`);C(this,t,r,a)}send(t){n.brandCheck(this,e);let r=`WebSocket.send`;if(n.argumentLengthCheck(arguments,1,r),t=n.converters.WebSocketSendData(t,r,`data`),_(this))throw new DOMException(`Sent before connected.`,`InvalidStateError`);if(v(this)&&!y(this)){if(typeof t==`string`){let e=Buffer.byteLength(t);this.#t+=e,this.#i.add(t,()=>{this.#t-=e},c.string)}else k.isArrayBuffer(t)?(this.#t+=t.byteLength,this.#i.add(t,()=>{this.#t-=t.byteLength},c.arrayBuffer)):ArrayBuffer.isView(t)?(this.#t+=t.byteLength,this.#i.add(t,()=>{this.#t-=t.byteLength},c.typedArray)):E(t)&&(this.#t+=t.size,this.#i.add(t,()=>{this.#t-=t.size},c.blob))}}get readyState(){return n.brandCheck(this,e),this[u]}get bufferedAmount(){return n.brandCheck(this,e),this.#t}get url(){return n.brandCheck(this,e),r(this[l])}get extensions(){return n.brandCheck(this,e),this.#r}get protocol(){return n.brandCheck(this,e),this.#n}get onopen(){return n.brandCheck(this,e),this.#e.open}set onopen(t){n.brandCheck(this,e),this.#e.open&&this.removeEventListener(`open`,this.#e.open),typeof t==`function`?(this.#e.open=t,this.addEventListener(`open`,t)):this.#e.open=null}get onerror(){return n.brandCheck(this,e),this.#e.error}set onerror(t){n.brandCheck(this,e),this.#e.error&&this.removeEventListener(`error`,this.#e.error),typeof t==`function`?(this.#e.error=t,this.addEventListener(`error`,t)):this.#e.error=null}get onclose(){return n.brandCheck(this,e),this.#e.close}set onclose(t){n.brandCheck(this,e),this.#e.close&&this.removeEventListener(`close`,this.#e.close),typeof t==`function`?(this.#e.close=t,this.addEventListener(`close`,t)):this.#e.close=null}get onmessage(){return n.brandCheck(this,e),this.#e.message}set onmessage(t){n.brandCheck(this,e),this.#e.message&&this.removeEventListener(`message`,this.#e.message),typeof t==`function`?(this.#e.message=t,this.addEventListener(`message`,t)):this.#e.message=null}get binaryType(){return n.brandCheck(this,e),this[f]}set binaryType(t){n.brandCheck(this,e),t!==`blob`&&t!==`arraybuffer`?this[f]=`blob`:this[f]=t}#a(e,t){this[p]=e;let n=this[d]?.dispatcher?.webSocketOptions,r=n?.maxFragments,i=n?.maxPayloadSize,a=new w(this,t,{maxFragments:r,maxPayloadSize:i});a.on(`drain`,P),a.on(`error`,F.bind(this)),e.socket.ws=this,this[g]=a,this.#i=new M(e.socket),this[u]=o.OPEN;let s=e.headersList.get(`sec-websocket-extensions`);s!==null&&(this.#r=s);let c=e.headersList.get(`sec-websocket-protocol`);c!==null&&(this.#n=c),x(`open`,this)}};N.CONNECTING=N.prototype.CONNECTING=o.CONNECTING,N.OPEN=N.prototype.OPEN=o.OPEN,N.CLOSING=N.prototype.CLOSING=o.CLOSING,N.CLOSED=N.prototype.CLOSED=o.CLOSED,Object.defineProperties(N.prototype,{CONNECTING:a,OPEN:a,CLOSING:a,CLOSED:a,url:T,readyState:T,bufferedAmount:T,onopen:T,onerror:T,onclose:T,close:T,onmessage:T,binaryType:T,send:T,extensions:T,protocol:T,[Symbol.toStringTag]:{value:`WebSocket`,writable:!1,enumerable:!1,configurable:!0}}),Object.defineProperties(N,{CONNECTING:a,OPEN:a,CLOSING:a,CLOSED:a}),n.converters[`sequence`]=n.sequenceConverter(n.converters.DOMString),n.converters[`DOMString or sequence`]=function(e,t,r){return n.util.Type(e)===`Object`&&Symbol.iterator in e?n.converters[`sequence`](e):n.converters.DOMString(e,t,r)},n.converters.WebSocketInit=n.dictionaryConverter([{key:`protocols`,converter:n.converters[`DOMString or sequence`],defaultValue:()=>[]},{key:`dispatcher`,converter:n.converters.any,defaultValue:()=>D()},{key:`headers`,converter:n.nullableConverter(n.converters.HeadersInit)}]),n.converters[`DOMString or sequence or WebSocketInit`]=function(e){return n.util.Type(e)===`Object`&&!(Symbol.iterator in e)?n.converters.WebSocketInit(e):{protocols:n.converters[`DOMString or sequence`](e)}},n.converters.WebSocketSendData=function(e){if(n.util.Type(e)===`Object`){if(E(e))return n.converters.Blob(e,{strict:!1});if(ArrayBuffer.isView(e)||k.isArrayBuffer(e))return n.converters.BufferSource(e)}return n.converters.USVString(e)};function P(){this.ws[p].socket.resume()}function F(e){let t,n;e instanceof j?(t=e.reason,n=e.code):t=e.message,x(`error`,this,()=>new A(`error`,{error:e,message:t})),C(this,n)}t.exports={WebSocket:N}})),ut=/* @__PURE__ */ m(((e,t)=>{function n(e){return e.indexOf(`\0`)===-1}function r(e){if(e.length===0)return!1;for(let t=0;t57)return!1;return!0}function i(e){return new Promise(t=>{setTimeout(t,e).unref()})}t.exports={isValidLastEventId:n,isASCIINumber:r,delay:i}})),dt=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:buffer`),{Transform:r}=h(`node:stream`),{isASCIINumber:i,isValidLastEventId:a}=ut(),o=[239,187,191],s=n.kStringMaxLength,c=Buffer.from(`data`),l=Buffer.from(`event`),u=Buffer.from(`id`),d=Buffer.from(`retry`);function f(e,t){if(t>=e.length)return!1;for(let n=t;n57)return!1;return!0}function p(e,t){for(let n=t;n0?Math.min(131072,Math.max(1024,Math.floor(this.maxEventSize/128))):0;this.maxDataLines=t,this.maxBufferedChunks=t,e.push&&(this.push=e.push)}_transform(e,t,n){if(e.length===0)n();else if(this.maxEventSize>0&&this.chunks.length>=this.maxBufferedChunks&&e[0]!==10&&e[0]!==13)n(g());else if(this.chunks.push(e),this.checkBOM&&this.handleBOM())n();else{for(;this.hasCurrentByte();){let e=this.currentByte();if(this.eventEndCheck){if(this.crlfCheck){if(e===10){this.crlfCheck=!1,this.consumeCurrentByte();continue}this.crlfCheck=!1}if(e===10||e===13){e===13&&(this.crlfCheck=!0),this.consumeCurrentByte(),this.hasPendingEvent()&&this.processEvent(this.event),this.clearEvent();continue}this.eventEndCheck=!1}else if(e===10||e===13){e===13&&(this.crlfCheck=!0);try{this.parseLine(this.readLine(),this.event)}catch(e){n(e);return}this.consumeCurrentByte(),this.eventEndCheck=!0}else{if(this.maxEventSize>0&&++this.lineLength>this.maxEventSize+7){n(g());return}this.advanceCursor()}}n()}}_destroy(e,t){this.chunks.length=0,this.clearEvent(),super._destroy(e,t)}parseLine(e,t){if(e.length===0)return;let n=e.indexOf(58);if(n===0)return;let r=e.length,i=e.length;if(n!==-1&&(r=n,i=n+1,e[i]===32&&++i),m(e,r,c)){if(this.maxEventSize>0&&this.dataLineCount>=this.maxDataLines)throw g();let n=e.length-i,r=this.eventFieldSizes.data+(t.data===void 0?0:1)+n;this.setEventFieldSize(`data`,r);let a=e.toString(`utf8`,i);t.data===void 0?t.data=a:t.data+=`\n${a}`,this.dataLineCount++}else m(e,r,d)?f(e,i)&&(this.setEventFieldSize(`retry`,e.length-i),t.retry=e.toString(`utf8`,i)):m(e,r,u)?p(e,i)&&(this.setEventFieldSize(`id`,e.length-i),t.id=e.toString(`utf8`,i)):m(e,r,l)&&i0&&n>this.maxEventSize)throw g();this.eventSize=n,this.eventFieldSizes[e]=t}processEvent(e){e.retry&&i(e.retry)&&(this.state.reconnectionTime=parseInt(e.retry,10)),e.id&&a(e.id)&&(this.state.lastEventId=e.id),e.data!==void 0&&this.push({type:e.event||`message`,options:{data:e.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}clearEvent(){this.event.data=void 0,this.event.event=void 0,this.event.id=void 0,this.event.retry=void 0,this.eventSize=0,this.dataLineCount=0,this.eventFieldSizes.data=0,this.eventFieldSizes.event=0,this.eventFieldSizes.id=0,this.eventFieldSizes.retry=0}hasPendingEvent(){return this.event.data!==void 0||this.event.event!==void 0||this.event.id!==void 0||this.event.retry!==void 0}hasCurrentByte(){return this.chunkIndex=this.chunks[this.chunkIndex].length;)this.chunkIndex++,this.pos=0}syncLineStartToCursor(){this.lineChunkIndex=this.chunkIndex,this.linePos=this.pos,this.lineLength=0,this.dropConsumedChunks()}dropConsumedChunks(){if(this.lineChunkIndex>0){let e=this.lineChunkIndex;this.chunks.splice(0,e),this.lineChunkIndex=0,this.chunkIndex-=e}this.chunkIndex===this.chunks.length&&(this.chunks.length=0,this.chunkIndex=0,this.pos=0,this.lineChunkIndex=0,this.linePos=0)}readLine(){if(this.lineChunkIndex===this.chunkIndex)return this.chunks[this.chunkIndex].subarray(this.linePos,this.pos);let e=[],t=0;for(let n=this.lineChunkIndex;n<=this.chunkIndex;n++){let r=this.chunks[n],i=n===this.lineChunkIndex?this.linePos:0,a=n===this.chunkIndex?this.pos:r.length,o=r.subarray(i,a);t+=o.length,e.push(o)}return Buffer.concat(e,t)}peekBufferedByte(e){let t=this.lineChunkIndex,n=this.linePos;for(;t0&&this.lineChunkIndex{let{pipeline:n}=h(`node:stream`),{fetching:r}=Be(),{makeRequest:i}=ze(),{webidl:a}=B(),{EventSourceStream:o}=dt(),{parseMIMEType:s}=z(),{createFastMessageEvent:c}=et(),{isNetworkError:l}=Le(),{delay:u}=ut(),{kEnumerableProperty:d}=O(),{environmentSettingsObject:f}=V(),{getGlobalDispatcher:p}=Ae(),m=!1,g=3e3;var _=class e extends EventTarget{#e={open:null,error:null,message:null};#t=null;#n=!1;#r=0;#i=null;#a=null;#o;#s;constructor(e,t={}){super(),a.util.markAsUncloneable(this);let n=`EventSource constructor`;a.argumentLengthCheck(arguments,1,n),m||(m=!0,process.emitWarning(`EventSource is experimental, expect them to change at any time.`,{code:`UNDICI-ES`})),e=a.converters.USVString(e,n,`url`),t=a.converters.EventSourceInitDict(t,n,`eventSourceInitDict`),this.#o=t.dispatcher,this.#s={lastEventId:``,reconnectionTime:g};let r=f,o;try{o=new URL(e,r.settingsObject.baseUrl),this.#s.origin=o.origin}catch(e){throw new DOMException(e,`SyntaxError`)}this.#t=o.href;let s=`anonymous`;t.withCredentials&&(s=`use-credentials`,this.#n=!0);let c={redirect:`follow`,keepalive:!0,mode:`cors`,credentials:s===`anonymous`?`same-origin`:`omit`,referrer:`no-referrer`};c.client=f.settingsObject,c.headersList=[[`accept`,{name:`accept`,value:`text/event-stream`}]],c.cache=`no-store`,c.initiator=`other`,c.urlList=[new URL(this.#t)],this.#i=i(c),this.#c()}get readyState(){return this.#r}get url(){return this.#t}get withCredentials(){return this.#n}#c(){if(this.#r===2)return;this.#r=0;let e={request:this.#i,dispatcher:this.#o};e.processResponseEndOfBody=e=>{l(e)&&(this.dispatchEvent(new Event(`error`)),this.close()),this.#l()},e.processResponse=e=>{if(l(e)){if(e.aborted){this.close(),this.dispatchEvent(new Event(`error`));return}this.#l();return}let t=e.headersList.get(`content-type`,!0),r=t===null?`failure`:s(t),i=r!==`failure`&&r.essence===`text/event-stream`;if(e.status!==200||i===!1){this.close(),this.dispatchEvent(new Event(`error`));return}this.#r=1,this.dispatchEvent(new Event(`open`)),this.#s.origin=e.urlList[e.urlList.length-1].origin;let a=new o({eventSourceSettings:this.#s,maxEventSize:this.#o.eventSourceOptions?.maxEventSize,push:e=>{this.dispatchEvent(c(e.type,e.options))}});n(e.body.stream,a,e=>{e?.aborted===!1&&(this.close(),this.dispatchEvent(new Event(`error`)))})},this.#a=r(e)}async#l(){this.#r!==2&&(this.#r=0,this.dispatchEvent(new Event(`error`)),await u(this.#s.reconnectionTime),this.#r===0&&(this.#s.lastEventId.length&&this.#i.headersList.set(`last-event-id`,this.#s.lastEventId,!0),this.#c()))}close(){a.brandCheck(this,e),this.#r!==2&&(this.#r=2,this.#a.abort(),this.#i=null)}get onopen(){return this.#e.open}set onopen(e){this.#e.open&&this.removeEventListener(`open`,this.#e.open),typeof e==`function`?(this.#e.open=e,this.addEventListener(`open`,e)):this.#e.open=null}get onmessage(){return this.#e.message}set onmessage(e){this.#e.message&&this.removeEventListener(`message`,this.#e.message),typeof e==`function`?(this.#e.message=e,this.addEventListener(`message`,e)):this.#e.message=null}get onerror(){return this.#e.error}set onerror(e){this.#e.error&&this.removeEventListener(`error`,this.#e.error),typeof e==`function`?(this.#e.error=e,this.addEventListener(`error`,e)):this.#e.error=null}};let v={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:0,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:1,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:2,writable:!1}};Object.defineProperties(_,v),Object.defineProperties(_.prototype,v),Object.defineProperties(_.prototype,{close:d,onerror:d,onmessage:d,onopen:d,readyState:d,url:d,withCredentials:d}),a.converters.EventSourceInitDict=a.dictionaryConverter([{key:`withCredentials`,converter:a.converters.boolean,defaultValue:()=>!1},{key:`dispatcher`,converter:a.converters.any,defaultValue:()=>p()}]),t.exports={EventSource:_,defaultReconnectionTime:g}})),pt=/* @__PURE__ */ m(((e,t)=>{let n=se(),r=j(),i=le(),a=J(),o=ue(),s=de(),c=Y(),l=pe(),u=T(),d=O(),{InvalidArgumentError:f}=u,p=xe(),m=P(),g=Te(),_=ke(),v=Ee(),y=Z(),b=fe(),{getGlobalDispatcher:x,setGlobalDispatcher:S}=Ae(),C=je(),w=W(),E=G();Object.assign(r.prototype,p),t.exports.Dispatcher=r,t.exports.Client=n,t.exports.Pool=i,t.exports.BalancedPool=a,t.exports.Agent=o,t.exports.ProxyAgent=s,t.exports.EnvHttpProxyAgent=c,t.exports.RetryAgent=l,t.exports.RetryHandler=b,t.exports.DecoratorHandler=C,t.exports.RedirectHandler=w,t.exports.createRedirectInterceptor=E,t.exports.interceptors={redirect:Me(),retry:Ne(),dump:Pe(),dns:Fe()},t.exports.buildConnector=m,t.exports.errors=u,t.exports.util={parseHeaders:d.parseHeaders,headerNameToString:d.headerNameToString};function D(e){return(t,n,r)=>{if(typeof n==`function`&&(r=n,n=null),!t||typeof t!=`string`&&typeof t!=`object`&&!(t instanceof URL))throw new f(`invalid url`);if(n!=null&&typeof n!=`object`)throw new f(`invalid opts`);if(n&&n.path!=null){if(typeof n.path!=`string`)throw new f(`invalid opts.path`);let e=n.path;n.path.startsWith(`/`)||(e=`/${e}`),t=new URL(d.parseOrigin(t).origin+e)}else n||=typeof t==`object`?t:{},t=d.parseURL(t);let{agent:i,dispatcher:a=x()}=n;if(i)throw new f(`unsupported opts.agent. Did you mean opts.client?`);return e.call(a,{...n,origin:t.origin,path:t.search?`${t.pathname}${t.search}`:t.pathname,method:n.method||(n.body?`PUT`:`GET`)},r)}}t.exports.setGlobalDispatcher=S,t.exports.getGlobalDispatcher=x;let k=Be().fetch;t.exports.fetch=async function(e,t=void 0){try{return await k(e,t)}catch(e){throw e&&typeof e==`object`&&Error.captureStackTrace(e),e}},t.exports.Headers=Ie().Headers,t.exports.Response=Le().Response,t.exports.Request=ze().Request,t.exports.FormData=re().FormData,t.exports.File=globalThis.File??h(`node:buffer`).File,t.exports.FileReader=Ge().FileReader;let{setGlobalOrigin:A,getGlobalOrigin:M}=R();t.exports.setGlobalOrigin=A,t.exports.getGlobalOrigin=M;let{CacheStorage:N}=Ye(),{kConstruct:F}=Ke();t.exports.caches=new N(F);let{deleteCookie:I,getCookies:L,getSetCookies:ee,setCookie:te}=$e();t.exports.deleteCookie=I,t.exports.getCookies=L,t.exports.getSetCookies=ee,t.exports.setCookie=te;let{parseMIMEType:B,serializeAMimeType:V}=z();t.exports.parseMIMEType=B,t.exports.serializeAMimeType=V;let{CloseEvent:H,ErrorEvent:ne,MessageEvent:U}=et();t.exports.WebSocket=lt().WebSocket,t.exports.CloseEvent=H,t.exports.ErrorEvent=ne,t.exports.MessageEvent=U,t.exports.request=D(p.request),t.exports.stream=D(p.stream),t.exports.pipeline=D(p.pipeline),t.exports.connect=D(p.connect),t.exports.upgrade=D(p.upgrade),t.exports.MockClient=g,t.exports.MockPool=v,t.exports.MockAgent=_,t.exports.mockErrors=y;let{EventSource:ie}=ft();t.exports.EventSource=ie}));C(),pt();var mt;(function(e){e[e.OK=200]=`OK`,e[e.MultipleChoices=300]=`MultipleChoices`,e[e.MovedPermanently=301]=`MovedPermanently`,e[e.ResourceMoved=302]=`ResourceMoved`,e[e.SeeOther=303]=`SeeOther`,e[e.NotModified=304]=`NotModified`,e[e.UseProxy=305]=`UseProxy`,e[e.SwitchProxy=306]=`SwitchProxy`,e[e.TemporaryRedirect=307]=`TemporaryRedirect`,e[e.PermanentRedirect=308]=`PermanentRedirect`,e[e.BadRequest=400]=`BadRequest`,e[e.Unauthorized=401]=`Unauthorized`,e[e.PaymentRequired=402]=`PaymentRequired`,e[e.Forbidden=403]=`Forbidden`,e[e.NotFound=404]=`NotFound`,e[e.MethodNotAllowed=405]=`MethodNotAllowed`,e[e.NotAcceptable=406]=`NotAcceptable`,e[e.ProxyAuthenticationRequired=407]=`ProxyAuthenticationRequired`,e[e.RequestTimeout=408]=`RequestTimeout`,e[e.Conflict=409]=`Conflict`,e[e.Gone=410]=`Gone`,e[e.TooManyRequests=429]=`TooManyRequests`,e[e.InternalServerError=500]=`InternalServerError`,e[e.NotImplemented=501]=`NotImplemented`,e[e.BadGateway=502]=`BadGateway`,e[e.ServiceUnavailable=503]=`ServiceUnavailable`,e[e.GatewayTimeout=504]=`GatewayTimeout`})(mt||={});var ht;(function(e){e.Accept=`accept`,e.ContentType=`content-type`})(ht||={});var gt;(function(e){e.ApplicationJson=`application/json`})(gt||={}),mt.MovedPermanently,mt.ResourceMoved,mt.SeeOther,mt.TemporaryRedirect,mt.PermanentRedirect,mt.BadGateway,mt.ServiceUnavailable,mt.GatewayTimeout;var _t=function(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})};const{access:vt,appendFile:yt,writeFile:bt}=o,xt=`GITHUB_STEP_SUMMARY`;new class{constructor(){this._buffer=``}filePath(){return _t(this,void 0,void 0,function*(){if(this._filePath)return this._filePath;let e=process.env[xt];if(!e)throw Error(`Unable to find environment variable for $${xt}. Check if your runtime environment supports job summaries.`);try{yield vt(e,a.R_OK|a.W_OK)}catch{throw Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}return this._filePath=e,this._filePath})}wrap(e,t,n={}){let r=Object.entries(n).map(([e,t])=>` ${e}="${t}"`).join(``);return t?`<${e}${r}>${t}`:`<${e}${r}>`}write(e){return _t(this,void 0,void 0,function*(){let t=!!e?.overwrite,n=yield this.filePath();return yield(t?bt:yt)(n,this._buffer,{encoding:`utf8`}),this.emptyBuffer()})}clear(){return _t(this,void 0,void 0,function*(){return this.emptyBuffer().write({overwrite:!0})})}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){return this._buffer=``,this}addRaw(e,t=!1){return this._buffer+=e,t?this.addEOL():this}addEOL(){return this.addRaw(r)}addCodeBlock(e,t){let n=Object.assign({},t&&{lang:t}),r=this.wrap(`pre`,this.wrap(`code`,e),n);return this.addRaw(r).addEOL()}addList(e,t=!1){let n=t?`ol`:`ul`,r=e.map(e=>this.wrap(`li`,e)).join(``),i=this.wrap(n,r);return this.addRaw(i).addEOL()}addTable(e){let t=e.map(e=>{let t=e.map(e=>{if(typeof e==`string`)return this.wrap(`td`,e);let{header:t,data:n,colspan:r,rowspan:i}=e,a=t?`th`:`td`,o=Object.assign(Object.assign({},r&&{colspan:r}),i&&{rowspan:i});return this.wrap(a,n,o)}).join(``);return this.wrap(`tr`,t)}).join(``),n=this.wrap(`table`,t);return this.addRaw(n).addEOL()}addDetails(e,t){let n=this.wrap(`details`,this.wrap(`summary`,e)+t);return this.addRaw(n).addEOL()}addImage(e,t,n){let{width:r,height:i}=n||{},a=Object.assign(Object.assign({},r&&{width:r}),i&&{height:i}),o=this.wrap(`img`,null,Object.assign({src:e,alt:t},a));return this.addRaw(o).addEOL()}addHeading(e,t){let n=`h${t}`,r=[`h1`,`h2`,`h3`,`h4`,`h5`,`h6`].includes(n)?n:`h1`,i=this.wrap(r,e);return this.addRaw(i).addEOL()}addSeparator(){let e=this.wrap(`hr`,null);return this.addRaw(e).addEOL()}addBreak(){let e=this.wrap(`br`,null);return this.addRaw(e).addEOL()}addQuote(e,t){let n=Object.assign({},t&&{cite:t}),r=this.wrap(`blockquote`,e,n);return this.addRaw(r).addEOL()}addLink(e,t){let n=this.wrap(`a`,e,{href:t});return this.addRaw(n).addEOL()}};var St=function(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})};const{chmod:Ct,copyFile:wt,lstat:Tt,mkdir:Et,open:Dt,readdir:Ot,rename:kt,rm:At,rmdir:jt,stat:Mt,symlink:Nt,unlink:Pt}=i.promises,Ft=process.platform===`win32`;i.constants.O_RDONLY;function It(e){return St(this,void 0,void 0,function*(){try{yield Mt(e)}catch(e){if(e.code===`ENOENT`)return!1;throw e}return!0})}function Lt(e){if(e=zt(e),!e)throw Error(`isRooted() parameter "p" cannot be empty`);return Ft?e.startsWith(`\\`)||/^[A-Z]:/i.test(e):e.startsWith(`/`)}function Rt(e,t){return St(this,void 0,void 0,function*(){let n;try{n=yield Mt(e)}catch(t){t.code!==`ENOENT`&&console.log(`Unexpected error attempting to determine if executable file exists '${e}': ${t}`)}if(n&&n.isFile()){if(Ft){let n=s.extname(e).toUpperCase();if(t.some(e=>e.toUpperCase()===n))return e}else if(Bt(n))return e}let r=e;for(let i of t){e=r+i,n=void 0;try{n=yield Mt(e)}catch(t){t.code!==`ENOENT`&&console.log(`Unexpected error attempting to determine if executable file exists '${e}': ${t}`)}if(n&&n.isFile()){if(Ft){try{let t=s.dirname(e),n=s.basename(e).toUpperCase();for(let r of yield Ot(t))if(n===r.toUpperCase()){e=s.join(t,r);break}}catch(t){console.log(`Unexpected error attempting to determine the actual case of the file '${e}': ${t}`)}return e}if(Bt(n))return e}}return``})}function zt(e){return e||=``,Ft?(e=e.replace(/\//g,`\\`),e.replace(/\\\\+/g,`\\`)):e.replace(/\/\/+/g,`/`)}function Bt(e){return(e.mode&1)>0||(e.mode&8)>0&&process.getgid!==void 0&&e.gid===process.getgid()||(e.mode&64)>0&&process.getuid!==void 0&&e.uid===process.getuid()}var Vt=function(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})};function Ht(e,t){return Vt(this,void 0,void 0,function*(){if(!e)throw Error(`parameter 'tool' is required`);if(t){let t=yield Ht(e,!1);if(!t)throw Error(Ft?`Unable to locate executable file: ${e}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`:`Unable to locate executable file: ${e}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`);return t}let n=yield Ut(e);return n&&n.length>0?n[0]:``})}function Ut(e){return Vt(this,void 0,void 0,function*(){if(!e)throw Error(`parameter 'tool' is required`);let t=[];if(Ft&&process.env.PATHEXT)for(let e of process.env.PATHEXT.split(s.delimiter))e&&t.push(e);if(Lt(e)){let n=yield Rt(e,t);return n?[n]:[]}if(e.includes(s.sep))return[];let n=[];if(process.env.PATH)for(let e of process.env.PATH.split(s.delimiter))e&&n.push(e);let r=[];for(let i of n){let n=yield Rt(s.join(i,e),t);n&&r.push(n)}return r})}var Wt=function(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})};const Gt=process.platform===`win32`;var Kt=class extends c.EventEmitter{constructor(e,t,n){if(super(),!e)throw Error(`Parameter 'toolPath' cannot be null or empty.`);this.toolPath=e,this.args=t||[],this.options=n||{}}_debug(e){this.options.listeners&&this.options.listeners.debug&&this.options.listeners.debug(e)}_getCommandString(e,t){let n=this._getSpawnFileName(),r=this._getSpawnArgs(e),i=t?``:`[command]`;if(Gt){if(this._isCmdFile()){i+=n;for(let e of r)i+=` ${e}`}else if(e.windowsVerbatimArguments){i+=`"${n}"`;for(let e of r)i+=` ${e}`}else{i+=this._windowsQuoteCmdArg(n);for(let e of r)i+=` ${this._windowsQuoteCmdArg(e)}`}}else{i+=n;for(let e of r)i+=` ${e}`}return i}_processLineBuffer(e,n,r){try{let i=n+e.toString(),a=i.indexOf(t.EOL);for(;a>-1;)r(i.substring(0,a)),i=i.substring(a+t.EOL.length),a=i.indexOf(t.EOL);return i}catch(e){return this._debug(`error processing line. Failed with error ${e}`),``}}_getSpawnFileName(){return Gt&&this._isCmdFile()?process.env.COMSPEC||`cmd.exe`:this.toolPath}_getSpawnArgs(e){if(Gt&&this._isCmdFile()){let t=`/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;for(let n of this.args)t+=` `,t+=e.windowsVerbatimArguments?n:this._windowsQuoteCmdArg(n);return t+=`"`,[t]}return this.args}_endsWith(e,t){return e.endsWith(t)}_isCmdFile(){let e=this.toolPath.toUpperCase();return this._endsWith(e,`.CMD`)||this._endsWith(e,`.BAT`)}_windowsQuoteCmdArg(e){if(!this._isCmdFile())return this._uvQuoteCmdArg(e);if(!e)return`""`;let t=[` `,` `,`&`,`(`,`)`,`[`,`]`,`{`,`}`,`^`,`=`,`;`,`!`,`'`,`+`,`,`,"`",`~`,`|`,`<`,`>`,`"`],n=!1;for(let r of e)if(t.some(e=>e===r)){n=!0;break}if(!n)return e;let r=`"`,i=!0;for(let t=e.length;t>0;t--)r+=e[t-1],i&&e[t-1]===`\\`?r+=`\\`:e[t-1]===`"`?(i=!0,r+=`"`):i=!1;return r+=`"`,r.split(``).reverse().join(``)}_uvQuoteCmdArg(e){if(!e)return`""`;if(!e.includes(` `)&&!e.includes(` `)&&!e.includes(`"`))return e;if(!e.includes(`"`)&&!e.includes(`\\`))return`"${e}"`;let t=`"`,n=!0;for(let r=e.length;r>0;r--)t+=e[r-1],n&&e[r-1]===`\\`?t+=`\\`:e[r-1]===`"`?(n=!0,t+=`\\`):n=!1;return t+=`"`,t.split(``).reverse().join(``)}_cloneExecOptions(e){e||={};let t={cwd:e.cwd||process.cwd(),env:e.env||process.env,silent:e.silent||!1,windowsVerbatimArguments:e.windowsVerbatimArguments||!1,failOnStdErr:e.failOnStdErr||!1,ignoreReturnCode:e.ignoreReturnCode||!1,delay:e.delay||1e4};return t.outStream=e.outStream||process.stdout,t.errStream=e.errStream||process.stderr,t}_getSpawnOptions(e,t){e||={};let n={};return n.cwd=e.cwd,n.env=e.env,n.windowsVerbatimArguments=e.windowsVerbatimArguments||this._isCmdFile(),e.windowsVerbatimArguments&&(n.argv0=`"${t}"`),n}exec(){return Wt(this,void 0,void 0,function*(){return!Lt(this.toolPath)&&(this.toolPath.includes(`/`)||Gt&&this.toolPath.includes(`\\`))&&(this.toolPath=s.resolve(process.cwd(),this.options.cwd||process.cwd(),this.toolPath)),this.toolPath=yield Ht(this.toolPath,!0),new Promise((e,n)=>Wt(this,void 0,void 0,function*(){this._debug(`exec tool: ${this.toolPath}`),this._debug(`arguments:`);for(let e of this.args)this._debug(` ${e}`);let r=this._cloneExecOptions(this.options);!r.silent&&r.outStream&&r.outStream.write(this._getCommandString(r)+t.EOL);let i=new Jt(r,this.toolPath);if(i.on(`debug`,e=>{this._debug(e)}),this.options.cwd&&!(yield It(this.options.cwd)))return n(/* @__PURE__ */ Error(`The cwd: ${this.options.cwd} does not exist!`));let a=this._getSpawnFileName(),o=u.spawn(a,this._getSpawnArgs(r),this._getSpawnOptions(this.options,a)),s=``;o.stdout&&o.stdout.on(`data`,e=>{this.options.listeners&&this.options.listeners.stdout&&this.options.listeners.stdout(e),!r.silent&&r.outStream&&r.outStream.write(e),s=this._processLineBuffer(e,s,e=>{this.options.listeners&&this.options.listeners.stdline&&this.options.listeners.stdline(e)})});let c=``;if(o.stderr&&o.stderr.on(`data`,e=>{i.processStderr=!0,this.options.listeners&&this.options.listeners.stderr&&this.options.listeners.stderr(e),!r.silent&&r.errStream&&r.outStream&&(r.failOnStdErr?r.errStream:r.outStream).write(e),c=this._processLineBuffer(e,c,e=>{this.options.listeners&&this.options.listeners.errline&&this.options.listeners.errline(e)})}),o.on(`error`,e=>{i.processError=e.message,i.processExited=!0,i.processClosed=!0,i.CheckComplete()}),o.on(`exit`,e=>{i.processExitCode=e,i.processExited=!0,this._debug(`Exit code ${e} received from tool '${this.toolPath}'`),i.CheckComplete()}),o.on(`close`,e=>{i.processExitCode=e,i.processExited=!0,i.processClosed=!0,this._debug(`STDIO streams have closed for tool '${this.toolPath}'`),i.CheckComplete()}),i.on(`done`,(t,r)=>{s.length>0&&this.emit(`stdline`,s),c.length>0&&this.emit(`errline`,c),o.removeAllListeners(),t?n(t):e(r)}),this.options.input){if(!o.stdin)throw Error(`child process missing stdin`);o.stdin.end(this.options.input)}}))})}};function qt(e){let t=[],n=!1,r=!1,i=``;function a(e){r&&e!==`"`&&(i+=`\\`),i+=e,r=!1}for(let o=0;o0&&(t.push(i),i=``):a(s)}return i.length>0&&t.push(i.trim()),t}var Jt=class e extends c.EventEmitter{constructor(e,t){if(super(),this.processClosed=!1,this.processError=``,this.processExitCode=0,this.processExited=!1,this.processStderr=!1,this.delay=1e4,this.done=!1,this.timeout=null,!t)throw Error(`toolPath must not be empty`);this.options=e,this.toolPath=t,e.delay&&(this.delay=e.delay)}CheckComplete(){this.done||(this.processClosed?this._setResult():this.processExited&&(this.timeout=d(e.HandleTimeout,this.delay,this)))}_debug(e){this.emit(`debug`,e)}_setResult(){let e;this.processExited&&(this.processError?e=/* @__PURE__ */ Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`):this.processExitCode!==0&&!this.options.ignoreReturnCode?e=/* @__PURE__ */ Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`):this.processStderr&&this.options.failOnStdErr&&(e=/* @__PURE__ */ Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`))),this.timeout&&=(clearTimeout(this.timeout),null),this.done=!0,this.emit(`done`,e,this.processExitCode)}static HandleTimeout(e){if(!e.done){if(!e.processClosed&&e.processExited){let t=`The STDIO streams did not close within ${e.delay/1e3} seconds of the exit event from process '${e.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;e._debug(t)}e._setResult()}}},Yt=function(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})};function Xt(e,t,n){return Yt(this,void 0,void 0,function*(){let r=qt(e);if(r.length===0)throw Error(`Parameter 'commandLine' cannot be null or empty.`);let i=r[0];return t=r.slice(1).concat(t||[]),new Kt(i,t,n).exec()})}n.platform(),n.arch();var Zt;(function(e){e[e.Success=0]=`Success`,e[e.Failure=1]=`Failure`})(Zt||={});function Qt(e){process.exitCode=Zt.Failure,$t(e)}function $t(e,t={}){v(`error`,_(t),e instanceof Error?e.toString():e)}function en(e,t={}){v(`warning`,_(t),e instanceof Error?e.toString():e)}function tn(e){process.stdout.write(e+t.EOL)}function nn(e){return e===`npm`||e===`pnpm`||e===`bun`}function rn(e){let t=e.trim().toLowerCase();return/^[a-z0-9_.-]+$/.test(t)?t:`npm`}function an(e,t){return t===process.cwd()?e:p.join(t,e)}function on(e){let t=an(`package.json`,e);if(!f.existsSync(t))return{hasPackageJson:!1};let n;try{n=f.readFileSync(t,`utf8`)}catch(e){return{hasPackageJson:!0,packageJsonError:`Failed to read package.json: ${e instanceof Error?e.message:String(e)}`,packageJsonErrorType:`read`,packageJsonErrorCause:e}}try{return{hasPackageJson:!0,packageJson:JSON.parse(n)}}catch(e){return{hasPackageJson:!0,packageJsonError:`Failed to parse package.json: ${e instanceof Error?e.message:String(e)}`,packageJsonErrorType:`parse`,packageJsonErrorCause:e}}}function sn(e){let t=!1,n=!1,r=!1;try{t=f.existsSync(an(`pnpm-lock.yaml`,e)),n=f.existsSync(an(`package-lock.json`,e)),r=f.existsSync(an(`bun.lock`,e))}catch{}return{hasPnpmLock:t,hasPackageLock:n,hasBunLock:r}}function cn(e=process.cwd()){let t=on(e),n=sn(e),r=f.existsSync(an(`.bun-version`,e)),i=f.existsSync(an(`.nvmrc`,e)),a=f.existsSync(an(`.node-version`,e)),o=i||a,s=i?`.nvmrc`:a?`.node-version`:void 0;return{hasPackageJson:t.hasPackageJson,packageJson:t.packageJson,packageJsonError:t.packageJsonError,packageJsonErrorType:t.packageJsonErrorType,packageJsonErrorCause:t.packageJsonErrorCause,hasBunVersionFile:r,hasNodeVersionFile:o,nodeFileVersionFile:s,hasPnpmLock:n.hasPnpmLock,hasPackageLock:n.hasPackageLock,hasBunLock:n.hasBunLock}}function ln(e){if(typeof e==`string`){let t=e.trim();if(!t)return;let n=t.indexOf(`@`),r=(n===-1?t:t.slice(0,n)).trim().toLowerCase();if(nn(r))return{name:r}}else if(typeof e==`object`&&e){let t=e;if(typeof t.name==`string`||typeof t.name==`number`){let e=String(t.name).trim().toLowerCase();if(nn(e))return{name:e}}}}function un(e){if(e.devEngines&&typeof e.devEngines==`object`&&e.devEngines.packageManager){let t=Array.isArray(e.devEngines.packageManager)?e.devEngines.packageManager:[e.devEngines.packageManager];for(let e of t){let t=ln(e);if(t)return t}}}function dn(e){if(e.packageJsonError){e.hasPackageJson&&en(`Failed to detect package manager: ${e.packageJsonError}`);return}if(!e.packageJson)return;let t=e.packageJson;if(t.packageManager&&typeof t.packageManager==`string`){let e=t.packageManager.trim(),n=e.indexOf(`@`),r=(n===-1?e:e.slice(0,n)).trim(),i=r.toLowerCase();if(!nn(i))throw Error(`Unsupported package manager '${r}'. Supported package managers are npm, pnpm, and bun.`);return{name:i,source:`packageManager`}}let n=un(t);if(n)return{...n,source:`devEngines`}}function fn(e){let t=[];if(e.hasPnpmLock&&t.push({name:`pnpm`,file:`pnpm-lock.yaml`}),e.hasPackageLock&&t.push({name:`npm`,file:`package-lock.json`}),e.hasBunLock&&t.push({name:`bun`,file:`bun lockfile`}),t.length!==0){if(t.length>1){let n=t.map(e=>e.file).join(`, `);e.hasPackageJson&&en(`Multiple conflicting lockfiles found (${n}). Selecting '${t[0].file}' (${t[0].name}) based on priority precedence.`)}return{name:t[0].name,source:`lockfile`}}}function pn(e){return dn(e)||fn(e)||{name:`npm`,source:`default`}}function mn(e){let t=typeof e==`string`?rn(e):e.name;if(!nn(t))throw Error(`Unsupported package manager '${t}'. Supported package managers are npm, pnpm, and bun.`);switch(t){case`npm`:return{packageManager:`npm`,command:`npm`,args:[`install`]};case`pnpm`:return{packageManager:`pnpm`,command:`pnpm`,args:[`install`,`--no-frozen-lockfile`]};case`bun`:return{packageManager:`bun`,command:`bun`,args:[`install`]}}}function hn(e){return e?e.fix?[`fix`]:e.format&&e.lint?[`format`,`lint`]:e.fmt&&e.lint?[`fmt`,`lint`]:e.format?[`format`]:e.fmt?[`fmt`]:e.lint?[`lint`]:e.check?[`check`]:[]:[]} +t.exports={WebsocketFrameSend:class{constructor(e){this.frameData=e}createFrame(e){let t=this.frameData,r=s(),i=t?.byteLength??0,a=i,o=6;i>n?(o+=8,a=127):i>125&&(o+=2,a=126);let c=Buffer.allocUnsafe(i+o);c[0]=c[1]=0,c[0]|=128,c[0]=(c[0]&240)+e,c[o-4]=r[0],c[o-3]=r[1],c[o-2]=r[2],c[o-1]=r[3],c[1]=a,a===126?c.writeUInt16BE(i,2):a===127&&(c[2]=c[3]=0,c.writeUIntBE(i,4,6)),c[1]|=128;for(let e=0;e{let{uid:n,states:r,sentCloseFrameState:i,emptyBuffer:a,opcodes:o}=et(),{kReadyState:s,kSentClose:c,kByteParser:l,kReceivedClose:u,kResponse:d}=tt(),{fireEvent:f,failWebsocketConnection:p,isClosing:m,isClosed:g,isEstablished:_,parseExtensions:v}=nt(),{channels:y}=k(),{CloseEvent:b}=$e(),{makeRequest:x}=Re(),{fetching:S}=ze(),{Headers:C,getHeadersList:w}=Fe(),{getDecodeSplit:T}=V(),{WebsocketFrameSend:E}=rt(),D;try{D=h(`node:crypto`)}catch{}function O(e,t,r,i,a,o){let s=e;s.protocol=e.protocol===`ws:`?`http:`:`https:`;let c=x({urlList:[s],client:r,serviceWorkers:`none`,referrer:`no-referrer`,mode:`websocket`,credentials:`include`,cache:`no-store`,redirect:`error`});o.headers&&(c.headersList=w(new C(o.headers)));let l=D.randomBytes(16).toString(`base64`);c.headersList.append(`sec-websocket-key`,l),c.headersList.append(`sec-websocket-version`,`13`);for(let e of t)c.headersList.append(`sec-websocket-protocol`,e);return c.headersList.append(`sec-websocket-extensions`,`permessage-deflate; client_max_window_bits`),S({request:c,useParallelQueue:!0,dispatcher:o.dispatcher,processResponse(e){if(e.type===`error`||e.status!==101){p(i,`Received network error or non-101 status code.`);return}if(t.length!==0&&!e.headersList.get(`Sec-WebSocket-Protocol`)){p(i,`Server did not respond with sent protocols.`);return}if(e.headersList.get(`Upgrade`)?.toLowerCase()!==`websocket`){p(i,`Server did not set Upgrade header to "websocket".`);return}if(e.headersList.get(`Connection`)?.toLowerCase()!==`upgrade`){p(i,`Server did not set Connection header to "upgrade".`);return}if(e.headersList.get(`Sec-WebSocket-Accept`)!==D.createHash(`sha1`).update(l+n).digest(`base64`)){p(i,`Incorrect hash received in Sec-WebSocket-Accept header.`);return}let r=e.headersList.get(`Sec-WebSocket-Extensions`),o;if(r!==null&&(o=v(r),!o.has(`permessage-deflate`))){p(i,`Sec-WebSocket-Extensions header does not match.`);return}let s=e.headersList.get(`Sec-WebSocket-Protocol`);if(s!==null){let e=T(`sec-websocket-protocol`,c.headersList);if(e===null||!e.includes(s)){p(i,`Protocol was not set in the opening handshake.`);return}}e.socket.on(`data`,j),e.socket.on(`close`,M),e.socket.on(`error`,N),y.open.hasSubscribers&&y.open.publish({address:e.socket.address(),protocol:s,extensions:r}),a(e,o)}})}function A(e,t,n,l){if(!(m(e)||g(e))){if(!_(e))p(e,`Connection was closed before it was established.`),e[s]=r.CLOSING;else if(e[c]===i.NOT_SENT){e[c]=i.PROCESSING;let u=new E;t!==void 0&&n===void 0?(u.frameData=Buffer.allocUnsafe(2),u.frameData.writeUInt16BE(t,0)):t!==void 0&&n!==void 0?(u.frameData=Buffer.allocUnsafe(2+l),u.frameData.writeUInt16BE(t,0),u.frameData.write(n,2,`utf-8`)):u.frameData=a,e[d].socket.write(u.createFrame(o.CLOSE)),e[c]=i.SENT,e[s]=r.CLOSING}else e[s]=r.CLOSING}}function j(e){this.ws[l].write(e)||this.pause()}function M(){let{ws:e}=this,{[d]:t}=e;t.socket.off(`data`,j),t.socket.off(`close`,M),t.socket.off(`error`,N);let n=e[c]===i.SENT&&e[u],a=1005,o=``,p=e[l].closingInfo;p&&!p.error?(a=p.code??1005,o=p.reason):e[u]||(a=1006),e[s]=r.CLOSED,f(`close`,e,(e,t)=>new b(e,t),{wasClean:n,code:a,reason:o}),y.close.hasSubscribers&&y.close.publish({websocket:e,code:a,reason:o})}function N(e){let{ws:t}=this;t[s]=r.CLOSING,y.socketError.hasSubscribers&&y.socketError.publish(e),this.destroy()}t.exports={establishWebSocketConnection:O,closeWebSocketConnection:A}})),at=/* @__PURE__ */ m(((e,t)=>{let{createInflateRaw:n,Z_DEFAULT_WINDOWBITS:r}=h(`node:zlib`),{isValidClientWindowBits:i}=nt(),{MessageSizeExceededError:a}=T(),o=Buffer.from([0,0,255,255]),s=Symbol(`kBuffer`),c=Symbol(`kLength`);t.exports={PerMessageDeflate:class{#e;#t={};#n=0;constructor(e,t){this.#t.serverNoContextTakeover=e.has(`server_no_context_takeover`),this.#t.serverMaxWindowBits=e.get(`server_max_window_bits`),this.#n=t.maxPayloadSize}decompress(e,t,l){if(!this.#e){let e=r;if(this.#t.serverMaxWindowBits){if(!i(this.#t.serverMaxWindowBits)){l(/* @__PURE__ */ Error(`Invalid server_max_window_bits`));return}e=Number.parseInt(this.#t.serverMaxWindowBits)}try{this.#e=n({windowBits:e})}catch(e){l(e);return}this.#e[s]=[],this.#e[c]=0,this.#e.on(`data`,e=>{this.#e[c]+=e.length,this.#n>0&&this.#e[c]>this.#n?(l(new a),this.#e.removeAllListeners(),this.#e.destroy(),this.#e=null):this.#e[s].push(e)}),this.#e.on(`error`,e=>{this.#e=null,l(e)})}this.#e.write(e),t&&this.#e.write(o),this.#e.flush(()=>{if(!this.#e)return;let e=Buffer.concat(this.#e[s],this.#e[c]);this.#e[s].length=0,this.#e[c]=0,l(null,e)})}}}})),ot=/* @__PURE__ */ m(((e,t)=>{let{Writable:n}=h(`node:stream`),r=h(`node:assert`),{parserStates:i,opcodes:a,states:o,emptyBuffer:s,sentCloseFrameState:c}=et(),{kReadyState:l,kSentClose:u,kResponse:d,kReceivedClose:f}=tt(),{channels:p}=k(),{isValidStatusCode:m,isValidOpcode:g,failWebsocketConnection:_,websocketMessageReceived:v,utf8Decode:y,isControlFrame:b,isTextBinaryFrame:x,isContinuationFrame:S}=nt(),{WebsocketFrameSend:C}=rt(),{closeWebSocketConnection:w}=it(),{PerMessageDeflate:E}=at(),{MessageSizeExceededError:D}=T();function O(e,t,n){w(e,t,n,Buffer.byteLength(n)),_(e,n)}t.exports={ByteParser:class extends n{#e=[];#t=0;#n=0;#r=!1;#i=i.INFO;#a={};#o=[];#s;#c;#l;constructor(e,t,n={}){super(),this.ws=e,this.#s=t??/* @__PURE__ */ new Map,this.#c=n.maxFragments??0,this.#l=n.maxPayloadSize??0,this.#s.has(`permessage-deflate`)&&this.#s.set(`permessage-deflate`,new E(t,n))}_write(e,t,n){this.#e.push(e),this.#n+=e.length,this.#r=!0,this.run(n)}#u(){return this.#l>0&&!b(this.#a.opcode)&&this.#a.payloadLength+this.#t>this.#l?(O(this.ws,1009,`Payload size exceeds maximum allowed size`),!1):!0}run(e){for(;this.#r;)if(this.#i===i.INFO){if(this.#n<2)return e();let t=this.consume(2),n=!!(t[0]&128),r=t[0]&15,o=(t[1]&128)==128,s=!n&&r!==a.CONTINUATION,c=t[1]&127,l=t[0]&64,u=t[0]&32,d=t[0]&16;if(!g(r))return _(this.ws,`Invalid opcode received`),e();if(o)return _(this.ws,`Frame cannot be masked`),e();if(l!==0&&!this.#s.has(`permessage-deflate`)){_(this.ws,`Expected RSV1 to be clear.`);return}if(u!==0||d!==0){_(this.ws,`RSV1, RSV2, RSV3 must be clear`);return}if(s&&!x(r)){_(this.ws,`Invalid frame type was fragmented.`);return}if(x(r)&&this.#o.length>0){_(this.ws,`Expected continuation frame`);return}if(this.#a.fragmented&&s){_(this.ws,`Fragmented frame exceeded 125 bytes.`);return}if((c>125||s)&&b(r)){_(this.ws,`Control frame either too large or fragmented`);return}if(S(r)&&this.#o.length===0&&!this.#a.compressed){_(this.ws,`Unexpected continuation frame`);return}if(c<=125){if(this.#a.payloadLength=c,this.#i=i.READ_DATA,!this.#u())return}else c===126?this.#i=i.PAYLOADLENGTH_16:c===127&&(this.#i=i.PAYLOADLENGTH_64);x(r)&&(this.#a.binaryType=r,this.#a.compressed=l!==0),this.#a.opcode=r,this.#a.masked=o,this.#a.fin=n,this.#a.fragmented=s}else if(this.#i===i.PAYLOADLENGTH_16){if(this.#n<2)return e();let t=this.consume(2);if(this.#a.payloadLength=t.readUInt16BE(0),this.#i=i.READ_DATA,!this.#u())return}else if(this.#i===i.PAYLOADLENGTH_64){if(this.#n<8)return e();let t=this.consume(8),n=t.readUInt32BE(0),r=t.readUInt32BE(4);if(n!==0||r>2**31-1){_(this.ws,`Received payload length > 2^31 bytes.`);return}if(this.#a.payloadLength=r,this.#i=i.READ_DATA,!this.#u())return}else if(this.#i===i.READ_DATA){if(this.#n{this.destroyed||(this.#r=!0,this.run(e))});return}}else if(this.#a.compressed){this.#s.get(`permessage-deflate`).decompress(t,this.#a.fin,(t,n)=>{if(t){let e=t instanceof D?1009:1007;O(this.ws,e,t.message)}else this.writeFragments(n)&&(this.#l>0&&this.#t>this.#l?O(this.ws,1009,new D().message):this.#a.fin?(v(this.ws,this.#a.binaryType,this.consumeFragments()),this.#r=!0,this.#i=i.INFO,this.run(e)):(this.#i=i.INFO,this.#r=!0,this.run(e)))}),this.#r=!1;break}else{if(!this.writeFragments(t))return;if(this.#l>0&&this.#t>this.#l){O(this.ws,1009,new D().message);return}!this.#a.fragmented&&this.#a.fin&&v(this.ws,this.#a.binaryType,this.consumeFragments()),this.#i=i.INFO}}}consume(e){if(e>this.#n)throw Error(`Called consume() before buffers satiated.`);if(e===0)return s;if(this.#e[0].length===e)return this.#n-=this.#e[0].length,this.#e.shift();let t=Buffer.allocUnsafe(e),n=0;for(;n!==e;){let r=this.#e[0],{length:i}=r;if(i+n===e){t.set(this.#e.shift(),n);break}if(i+n>e){t.set(r.subarray(0,e-n),n),this.#e[0]=r.subarray(e-n);break}t.set(this.#e.shift(),n),n+=r.length}return this.#n-=e,t}writeFragments(e){return this.#c>0&&this.#o.length===this.#c?(O(this.ws,1008,`Too many message fragments`),!1):(this.#t+=e.length,this.#o.push(e),!0)}consumeFragments(){let e=this.#o;if(e.length===1)return this.#t=0,e.shift();let t=Buffer.concat(e,this.#t);return this.#o=[],this.#t=0,t}parseCloseBody(e){r(e.length!==1);let t;if(e.length>=2&&(t=e.readUInt16BE(0)),t!==void 0&&!m(t))return{code:1002,reason:`Invalid status code`,error:!0};let n=e.subarray(2);n[0]===239&&n[1]===187&&n[2]===191&&(n=n.subarray(3));try{n=y(n)}catch{return{code:1007,reason:`Invalid UTF-8`,error:!0}}return{code:t,reason:n,error:!1}}parseControlFrame(e){let{opcode:t,payloadLength:n}=this.#a;if(t===a.CLOSE){if(n===1)return _(this.ws,`Received close frame with a 1-byte body.`),!1;if(this.#a.closeInfo=this.parseCloseBody(e),this.#a.closeInfo.error){let{code:e,reason:t}=this.#a.closeInfo;return w(this.ws,e,t,t.length),_(this.ws,t),!1}if(this.ws[u]!==c.SENT){let e=s;this.#a.closeInfo.code&&(e=Buffer.allocUnsafe(2),e.writeUInt16BE(this.#a.closeInfo.code,0));let t=new C(e);this.ws[d].socket.write(t.createFrame(a.CLOSE),e=>{e||(this.ws[u]=c.SENT)})}return this.ws[l]=o.CLOSING,this.ws[f]=!0,!1}if(t===a.PING){if(!this.ws[f]){let t=new C(e);this.ws[d].socket.write(t.createFrame(a.PONG)),p.ping.hasSubscribers&&p.ping.publish({payload:e})}}else t===a.PONG&&p.pong.hasSubscribers&&p.pong.publish({payload:e});return!0}get closingInfo(){return this.#a.closeInfo}}}})),st=/* @__PURE__ */ m(((e,t)=>{let{WebsocketFrameSend:n}=rt(),{opcodes:r,sendHints:i}=et(),a=q(),o=Buffer[Symbol.species];var s=class{#e=new a;#t=!1;#n;constructor(e){this.#n=e}add(e,t,n){if(n!==i.blob){let r=c(e,n);if(!this.#t)this.#n.write(r,t);else{let e={promise:null,callback:t,frame:r};this.#e.push(e)}return}let r={promise:e.arrayBuffer().then(e=>{r.promise=null,r.frame=c(e,n)}),callback:t,frame:null};this.#e.push(r),this.#t||this.#r()}async#r(){this.#t=!0;let e=this.#e;for(;!e.isEmpty();){let t=e.shift();t.promise!==null&&await t.promise,this.#n.write(t.frame,t.callback),t.callback=t.frame=null}this.#t=!1}};function c(e,t){return new n(l(e,t)).createFrame(t===i.string?r.TEXT:r.BINARY)}function l(e,t){switch(t){case i.string:return Buffer.from(e);case i.arrayBuffer:case i.blob:return new o(e);case i.typedArray:return new o(e.buffer,e.byteOffset,e.byteLength)}}t.exports={SendQueue:s}})),ct=/* @__PURE__ */ m(((e,t)=>{let{webidl:n}=B(),{URLSerializer:r}=z(),{environmentSettingsObject:i}=V(),{staticPropertyDescriptors:a,states:o,sentCloseFrameState:s,sendHints:c}=et(),{kWebSocketURL:l,kReadyState:u,kController:d,kBinaryType:f,kResponse:p,kSentClose:m,kByteParser:g}=tt(),{isConnecting:_,isEstablished:v,isClosing:y,isValidSubprotocol:b,fireEvent:x}=nt(),{establishWebSocketConnection:S,closeWebSocketConnection:C}=it(),{ByteParser:w}=ot(),{kEnumerableProperty:T,isBlobLike:E}=O(),{getGlobalDispatcher:D}=ke(),{types:k}=h(`node:util`),{ErrorEvent:A,CloseEvent:j}=$e(),{SendQueue:M}=st();var N=class e extends EventTarget{#e={open:null,error:null,close:null,message:null};#t=0;#n=``;#r=``;#i;constructor(t,r=[]){super(),n.util.markAsUncloneable(this);let a=`WebSocket constructor`;n.argumentLengthCheck(arguments,1,a);let o=n.converters[`DOMString or sequence or WebSocketInit`](r,a,`options`);t=n.converters.USVString(t,a,`url`),r=o.protocols;let c=i.settingsObject.baseUrl,p;try{p=new URL(t,c)}catch(e){throw new DOMException(e,`SyntaxError`)}if(p.protocol===`http:`?p.protocol=`ws:`:p.protocol===`https:`&&(p.protocol=`wss:`),p.protocol!==`ws:`&&p.protocol!==`wss:`)throw new DOMException(`Expected a ws: or wss: protocol, got ${p.protocol}`,`SyntaxError`);if(p.hash||p.href.endsWith(`#`))throw new DOMException(`Got fragment`,`SyntaxError`);if(typeof r==`string`&&(r=[r]),r.length!==new Set(r.map(e=>e.toLowerCase())).size||r.length>0&&!r.every(e=>b(e)))throw new DOMException(`Invalid Sec-WebSocket-Protocol value`,`SyntaxError`);this[l]=new URL(p.href);let h=i.settingsObject;this[d]=S(p,r,h,this,(e,t)=>this.#a(e,t),o),this[u]=e.CONNECTING,this[m]=s.NOT_SENT,this[f]=`blob`}close(t=void 0,r=void 0){n.brandCheck(this,e);let i=`WebSocket.close`;if(t!==void 0&&(t=n.converters[`unsigned short`](t,i,`code`,{clamp:!0})),r!==void 0&&(r=n.converters.USVString(r,i,`reason`)),t!==void 0&&t!==1e3&&(t<3e3||t>4999))throw new DOMException(`invalid code`,`InvalidAccessError`);let a=0;if(r!==void 0&&(a=Buffer.byteLength(r),a>123))throw new DOMException(`Reason must be less than 123 bytes; received ${a}`,`SyntaxError`);C(this,t,r,a)}send(t){n.brandCheck(this,e);let r=`WebSocket.send`;if(n.argumentLengthCheck(arguments,1,r),t=n.converters.WebSocketSendData(t,r,`data`),_(this))throw new DOMException(`Sent before connected.`,`InvalidStateError`);if(v(this)&&!y(this)){if(typeof t==`string`){let e=Buffer.byteLength(t);this.#t+=e,this.#i.add(t,()=>{this.#t-=e},c.string)}else k.isArrayBuffer(t)?(this.#t+=t.byteLength,this.#i.add(t,()=>{this.#t-=t.byteLength},c.arrayBuffer)):ArrayBuffer.isView(t)?(this.#t+=t.byteLength,this.#i.add(t,()=>{this.#t-=t.byteLength},c.typedArray)):E(t)&&(this.#t+=t.size,this.#i.add(t,()=>{this.#t-=t.size},c.blob))}}get readyState(){return n.brandCheck(this,e),this[u]}get bufferedAmount(){return n.brandCheck(this,e),this.#t}get url(){return n.brandCheck(this,e),r(this[l])}get extensions(){return n.brandCheck(this,e),this.#r}get protocol(){return n.brandCheck(this,e),this.#n}get onopen(){return n.brandCheck(this,e),this.#e.open}set onopen(t){n.brandCheck(this,e),this.#e.open&&this.removeEventListener(`open`,this.#e.open),typeof t==`function`?(this.#e.open=t,this.addEventListener(`open`,t)):this.#e.open=null}get onerror(){return n.brandCheck(this,e),this.#e.error}set onerror(t){n.brandCheck(this,e),this.#e.error&&this.removeEventListener(`error`,this.#e.error),typeof t==`function`?(this.#e.error=t,this.addEventListener(`error`,t)):this.#e.error=null}get onclose(){return n.brandCheck(this,e),this.#e.close}set onclose(t){n.brandCheck(this,e),this.#e.close&&this.removeEventListener(`close`,this.#e.close),typeof t==`function`?(this.#e.close=t,this.addEventListener(`close`,t)):this.#e.close=null}get onmessage(){return n.brandCheck(this,e),this.#e.message}set onmessage(t){n.brandCheck(this,e),this.#e.message&&this.removeEventListener(`message`,this.#e.message),typeof t==`function`?(this.#e.message=t,this.addEventListener(`message`,t)):this.#e.message=null}get binaryType(){return n.brandCheck(this,e),this[f]}set binaryType(t){n.brandCheck(this,e),t!==`blob`&&t!==`arraybuffer`?this[f]=`blob`:this[f]=t}#a(e,t){this[p]=e;let n=this[d]?.dispatcher?.webSocketOptions,r=n?.maxFragments,i=n?.maxPayloadSize,a=new w(this,t,{maxFragments:r,maxPayloadSize:i});a.on(`drain`,P),a.on(`error`,F.bind(this)),e.socket.ws=this,this[g]=a,this.#i=new M(e.socket),this[u]=o.OPEN;let s=e.headersList.get(`sec-websocket-extensions`);s!==null&&(this.#r=s);let c=e.headersList.get(`sec-websocket-protocol`);c!==null&&(this.#n=c),x(`open`,this)}};N.CONNECTING=N.prototype.CONNECTING=o.CONNECTING,N.OPEN=N.prototype.OPEN=o.OPEN,N.CLOSING=N.prototype.CLOSING=o.CLOSING,N.CLOSED=N.prototype.CLOSED=o.CLOSED,Object.defineProperties(N.prototype,{CONNECTING:a,OPEN:a,CLOSING:a,CLOSED:a,url:T,readyState:T,bufferedAmount:T,onopen:T,onerror:T,onclose:T,close:T,onmessage:T,binaryType:T,send:T,extensions:T,protocol:T,[Symbol.toStringTag]:{value:`WebSocket`,writable:!1,enumerable:!1,configurable:!0}}),Object.defineProperties(N,{CONNECTING:a,OPEN:a,CLOSING:a,CLOSED:a}),n.converters[`sequence`]=n.sequenceConverter(n.converters.DOMString),n.converters[`DOMString or sequence`]=function(e,t,r){return n.util.Type(e)===`Object`&&Symbol.iterator in e?n.converters[`sequence`](e):n.converters.DOMString(e,t,r)},n.converters.WebSocketInit=n.dictionaryConverter([{key:`protocols`,converter:n.converters[`DOMString or sequence`],defaultValue:()=>[]},{key:`dispatcher`,converter:n.converters.any,defaultValue:()=>D()},{key:`headers`,converter:n.nullableConverter(n.converters.HeadersInit)}]),n.converters[`DOMString or sequence or WebSocketInit`]=function(e){return n.util.Type(e)===`Object`&&!(Symbol.iterator in e)?n.converters.WebSocketInit(e):{protocols:n.converters[`DOMString or sequence`](e)}},n.converters.WebSocketSendData=function(e){if(n.util.Type(e)===`Object`){if(E(e))return n.converters.Blob(e,{strict:!1});if(ArrayBuffer.isView(e)||k.isArrayBuffer(e))return n.converters.BufferSource(e)}return n.converters.USVString(e)};function P(){this.ws[p].socket.resume()}function F(e){let t,n;e instanceof j?(t=e.reason,n=e.code):t=e.message,x(`error`,this,()=>new A(`error`,{error:e,message:t})),C(this,n)}t.exports={WebSocket:N}})),lt=/* @__PURE__ */ m(((e,t)=>{function n(e){return e.indexOf(`\0`)===-1}function r(e){if(e.length===0)return!1;for(let t=0;t57)return!1;return!0}function i(e){return new Promise(t=>{setTimeout(t,e).unref()})}t.exports={isValidLastEventId:n,isASCIINumber:r,delay:i}})),ut=/* @__PURE__ */ m(((e,t)=>{let n=h(`node:buffer`),{Transform:r}=h(`node:stream`),{isASCIINumber:i,isValidLastEventId:a}=lt(),o=[239,187,191],s=n.kStringMaxLength,c=Buffer.from(`data`),l=Buffer.from(`event`),u=Buffer.from(`id`),d=Buffer.from(`retry`);function f(e,t){if(t>=e.length)return!1;for(let n=t;n57)return!1;return!0}function p(e,t){for(let n=t;n0?Math.min(131072,Math.max(1024,Math.floor(this.maxEventSize/128))):0;this.maxDataLines=t,this.maxBufferedChunks=t,e.push&&(this.push=e.push)}_transform(e,t,n){if(e.length===0)n();else if(this.maxEventSize>0&&this.chunks.length>=this.maxBufferedChunks&&e[0]!==10&&e[0]!==13)n(g());else if(this.chunks.push(e),this.checkBOM&&this.handleBOM())n();else{for(;this.hasCurrentByte();){let e=this.currentByte();if(this.eventEndCheck){if(this.crlfCheck){if(e===10){this.crlfCheck=!1,this.consumeCurrentByte();continue}this.crlfCheck=!1}if(e===10||e===13){e===13&&(this.crlfCheck=!0),this.consumeCurrentByte(),this.hasPendingEvent()&&this.processEvent(this.event),this.clearEvent();continue}this.eventEndCheck=!1}else if(e===10||e===13){e===13&&(this.crlfCheck=!0);try{this.parseLine(this.readLine(),this.event)}catch(e){n(e);return}this.consumeCurrentByte(),this.eventEndCheck=!0}else{if(this.maxEventSize>0&&++this.lineLength>this.maxEventSize+7){n(g());return}this.advanceCursor()}}n()}}_destroy(e,t){this.chunks.length=0,this.clearEvent(),super._destroy(e,t)}parseLine(e,t){if(e.length===0)return;let n=e.indexOf(58);if(n===0)return;let r=e.length,i=e.length;if(n!==-1&&(r=n,i=n+1,e[i]===32&&++i),m(e,r,c)){if(this.maxEventSize>0&&this.dataLineCount>=this.maxDataLines)throw g();let n=e.length-i,r=this.eventFieldSizes.data+(t.data===void 0?0:1)+n;this.setEventFieldSize(`data`,r);let a=e.toString(`utf8`,i);t.data===void 0?t.data=a:t.data+=`\n${a}`,this.dataLineCount++}else m(e,r,d)?f(e,i)&&(this.setEventFieldSize(`retry`,e.length-i),t.retry=e.toString(`utf8`,i)):m(e,r,u)?p(e,i)&&(this.setEventFieldSize(`id`,e.length-i),t.id=e.toString(`utf8`,i)):m(e,r,l)&&i0&&n>this.maxEventSize)throw g();this.eventSize=n,this.eventFieldSizes[e]=t}processEvent(e){e.retry&&i(e.retry)&&(this.state.reconnectionTime=parseInt(e.retry,10)),e.id&&a(e.id)&&(this.state.lastEventId=e.id),e.data!==void 0&&this.push({type:e.event||`message`,options:{data:e.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}clearEvent(){this.event.data=void 0,this.event.event=void 0,this.event.id=void 0,this.event.retry=void 0,this.eventSize=0,this.dataLineCount=0,this.eventFieldSizes.data=0,this.eventFieldSizes.event=0,this.eventFieldSizes.id=0,this.eventFieldSizes.retry=0}hasPendingEvent(){return this.event.data!==void 0||this.event.event!==void 0||this.event.id!==void 0||this.event.retry!==void 0}hasCurrentByte(){return this.chunkIndex=this.chunks[this.chunkIndex].length;)this.chunkIndex++,this.pos=0}syncLineStartToCursor(){this.lineChunkIndex=this.chunkIndex,this.linePos=this.pos,this.lineLength=0,this.dropConsumedChunks()}dropConsumedChunks(){if(this.lineChunkIndex>0){let e=this.lineChunkIndex;this.chunks.splice(0,e),this.lineChunkIndex=0,this.chunkIndex-=e}this.chunkIndex===this.chunks.length&&(this.chunks.length=0,this.chunkIndex=0,this.pos=0,this.lineChunkIndex=0,this.linePos=0)}readLine(){if(this.lineChunkIndex===this.chunkIndex)return this.chunks[this.chunkIndex].subarray(this.linePos,this.pos);let e=[],t=0;for(let n=this.lineChunkIndex;n<=this.chunkIndex;n++){let r=this.chunks[n],i=n===this.lineChunkIndex?this.linePos:0,a=n===this.chunkIndex?this.pos:r.length,o=r.subarray(i,a);t+=o.length,e.push(o)}return Buffer.concat(e,t)}peekBufferedByte(e){let t=this.lineChunkIndex,n=this.linePos;for(;t0&&this.lineChunkIndex{let{pipeline:n}=h(`node:stream`),{fetching:r}=ze(),{makeRequest:i}=Re(),{webidl:a}=B(),{EventSourceStream:o}=ut(),{parseMIMEType:s}=z(),{createFastMessageEvent:c}=$e(),{isNetworkError:l}=Ie(),{delay:u}=lt(),{kEnumerableProperty:d}=O(),{environmentSettingsObject:f}=V(),{getGlobalDispatcher:p}=ke(),m=!1,g=3e3;var _=class e extends EventTarget{#e={open:null,error:null,message:null};#t=null;#n=!1;#r=0;#i=null;#a=null;#o;#s;constructor(e,t={}){super(),a.util.markAsUncloneable(this);let n=`EventSource constructor`;a.argumentLengthCheck(arguments,1,n),m||(m=!0,process.emitWarning(`EventSource is experimental, expect them to change at any time.`,{code:`UNDICI-ES`})),e=a.converters.USVString(e,n,`url`),t=a.converters.EventSourceInitDict(t,n,`eventSourceInitDict`),this.#o=t.dispatcher,this.#s={lastEventId:``,reconnectionTime:g};let r=f,o;try{o=new URL(e,r.settingsObject.baseUrl),this.#s.origin=o.origin}catch(e){throw new DOMException(e,`SyntaxError`)}this.#t=o.href;let s=`anonymous`;t.withCredentials&&(s=`use-credentials`,this.#n=!0);let c={redirect:`follow`,keepalive:!0,mode:`cors`,credentials:s===`anonymous`?`same-origin`:`omit`,referrer:`no-referrer`};c.client=f.settingsObject,c.headersList=[[`accept`,{name:`accept`,value:`text/event-stream`}]],c.cache=`no-store`,c.initiator=`other`,c.urlList=[new URL(this.#t)],this.#i=i(c),this.#c()}get readyState(){return this.#r}get url(){return this.#t}get withCredentials(){return this.#n}#c(){if(this.#r===2)return;this.#r=0;let e={request:this.#i,dispatcher:this.#o};e.processResponseEndOfBody=e=>{l(e)&&(this.dispatchEvent(new Event(`error`)),this.close()),this.#l()},e.processResponse=e=>{if(l(e)){if(e.aborted){this.close(),this.dispatchEvent(new Event(`error`));return}this.#l();return}let t=e.headersList.get(`content-type`,!0),r=t===null?`failure`:s(t),i=r!==`failure`&&r.essence===`text/event-stream`;if(e.status!==200||i===!1){this.close(),this.dispatchEvent(new Event(`error`));return}this.#r=1,this.dispatchEvent(new Event(`open`)),this.#s.origin=e.urlList[e.urlList.length-1].origin;let a=new o({eventSourceSettings:this.#s,maxEventSize:this.#o.eventSourceOptions?.maxEventSize,push:e=>{this.dispatchEvent(c(e.type,e.options))}});n(e.body.stream,a,e=>{e?.aborted===!1&&(this.close(),this.dispatchEvent(new Event(`error`)))})},this.#a=r(e)}async#l(){this.#r!==2&&(this.#r=0,this.dispatchEvent(new Event(`error`)),await u(this.#s.reconnectionTime),this.#r===0&&(this.#s.lastEventId.length&&this.#i.headersList.set(`last-event-id`,this.#s.lastEventId,!0),this.#c()))}close(){a.brandCheck(this,e),this.#r!==2&&(this.#r=2,this.#a.abort(),this.#i=null)}get onopen(){return this.#e.open}set onopen(e){this.#e.open&&this.removeEventListener(`open`,this.#e.open),typeof e==`function`?(this.#e.open=e,this.addEventListener(`open`,e)):this.#e.open=null}get onmessage(){return this.#e.message}set onmessage(e){this.#e.message&&this.removeEventListener(`message`,this.#e.message),typeof e==`function`?(this.#e.message=e,this.addEventListener(`message`,e)):this.#e.message=null}get onerror(){return this.#e.error}set onerror(e){this.#e.error&&this.removeEventListener(`error`,this.#e.error),typeof e==`function`?(this.#e.error=e,this.addEventListener(`error`,e)):this.#e.error=null}};let v={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:0,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:1,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:2,writable:!1}};Object.defineProperties(_,v),Object.defineProperties(_.prototype,v),Object.defineProperties(_.prototype,{close:d,onerror:d,onmessage:d,onopen:d,readyState:d,url:d,withCredentials:d}),a.converters.EventSourceInitDict=a.dictionaryConverter([{key:`withCredentials`,converter:a.converters.boolean,defaultValue:()=>!1},{key:`dispatcher`,converter:a.converters.any,defaultValue:()=>p()}]),t.exports={EventSource:_,defaultReconnectionTime:g}})),ft=/* @__PURE__ */ m(((e,t)=>{let n=K(),r=j(),i=ce(),a=Y(),o=le(),s=ue(),c=X(),l=fe(),u=T(),d=O(),{InvalidArgumentError:f}=u,p=be(),m=P(),g=we(),_=Oe(),v=Te(),y=Q(),b=de(),{getGlobalDispatcher:x,setGlobalDispatcher:S}=ke(),C=Ae(),w=W(),E=G();Object.assign(r.prototype,p),t.exports.Dispatcher=r,t.exports.Client=n,t.exports.Pool=i,t.exports.BalancedPool=a,t.exports.Agent=o,t.exports.ProxyAgent=s,t.exports.EnvHttpProxyAgent=c,t.exports.RetryAgent=l,t.exports.RetryHandler=b,t.exports.DecoratorHandler=C,t.exports.RedirectHandler=w,t.exports.createRedirectInterceptor=E,t.exports.interceptors={redirect:je(),retry:Me(),dump:Ne(),dns:Pe()},t.exports.buildConnector=m,t.exports.errors=u,t.exports.util={parseHeaders:d.parseHeaders,headerNameToString:d.headerNameToString};function D(e){return(t,n,r)=>{if(typeof n==`function`&&(r=n,n=null),!t||typeof t!=`string`&&typeof t!=`object`&&!(t instanceof URL))throw new f(`invalid url`);if(n!=null&&typeof n!=`object`)throw new f(`invalid opts`);if(n&&n.path!=null){if(typeof n.path!=`string`)throw new f(`invalid opts.path`);let e=n.path;n.path.startsWith(`/`)||(e=`/${e}`),t=new URL(d.parseOrigin(t).origin+e)}else n||=typeof t==`object`?t:{},t=d.parseURL(t);let{agent:i,dispatcher:a=x()}=n;if(i)throw new f(`unsupported opts.agent. Did you mean opts.client?`);return e.call(a,{...n,origin:t.origin,path:t.search?`${t.pathname}${t.search}`:t.pathname,method:n.method||(n.body?`PUT`:`GET`)},r)}}t.exports.setGlobalDispatcher=S,t.exports.getGlobalDispatcher=x;let k=ze().fetch;t.exports.fetch=async function(e,t=void 0){try{return await k(e,t)}catch(e){throw e&&typeof e==`object`&&Error.captureStackTrace(e),e}},t.exports.Headers=Fe().Headers,t.exports.Response=Ie().Response,t.exports.Request=Re().Request,t.exports.FormData=re().FormData,t.exports.File=globalThis.File??h(`node:buffer`).File,t.exports.FileReader=We().FileReader;let{setGlobalOrigin:A,getGlobalOrigin:M}=R();t.exports.setGlobalOrigin=A,t.exports.getGlobalOrigin=M;let{CacheStorage:N}=Je(),{kConstruct:F}=Ge();t.exports.caches=new N(F);let{deleteCookie:I,getCookies:L,getSetCookies:ee,setCookie:te}=Qe();t.exports.deleteCookie=I,t.exports.getCookies=L,t.exports.getSetCookies=ee,t.exports.setCookie=te;let{parseMIMEType:B,serializeAMimeType:V}=z();t.exports.parseMIMEType=B,t.exports.serializeAMimeType=V;let{CloseEvent:H,ErrorEvent:ne,MessageEvent:U}=$e();t.exports.WebSocket=ct().WebSocket,t.exports.CloseEvent=H,t.exports.ErrorEvent=ne,t.exports.MessageEvent=U,t.exports.request=D(p.request),t.exports.stream=D(p.stream),t.exports.pipeline=D(p.pipeline),t.exports.connect=D(p.connect),t.exports.upgrade=D(p.upgrade),t.exports.MockClient=g,t.exports.MockPool=v,t.exports.MockAgent=_,t.exports.mockErrors=y;let{EventSource:ie}=dt();t.exports.EventSource=ie}));C(),ft();var pt;(function(e){e[e.OK=200]=`OK`,e[e.MultipleChoices=300]=`MultipleChoices`,e[e.MovedPermanently=301]=`MovedPermanently`,e[e.ResourceMoved=302]=`ResourceMoved`,e[e.SeeOther=303]=`SeeOther`,e[e.NotModified=304]=`NotModified`,e[e.UseProxy=305]=`UseProxy`,e[e.SwitchProxy=306]=`SwitchProxy`,e[e.TemporaryRedirect=307]=`TemporaryRedirect`,e[e.PermanentRedirect=308]=`PermanentRedirect`,e[e.BadRequest=400]=`BadRequest`,e[e.Unauthorized=401]=`Unauthorized`,e[e.PaymentRequired=402]=`PaymentRequired`,e[e.Forbidden=403]=`Forbidden`,e[e.NotFound=404]=`NotFound`,e[e.MethodNotAllowed=405]=`MethodNotAllowed`,e[e.NotAcceptable=406]=`NotAcceptable`,e[e.ProxyAuthenticationRequired=407]=`ProxyAuthenticationRequired`,e[e.RequestTimeout=408]=`RequestTimeout`,e[e.Conflict=409]=`Conflict`,e[e.Gone=410]=`Gone`,e[e.TooManyRequests=429]=`TooManyRequests`,e[e.InternalServerError=500]=`InternalServerError`,e[e.NotImplemented=501]=`NotImplemented`,e[e.BadGateway=502]=`BadGateway`,e[e.ServiceUnavailable=503]=`ServiceUnavailable`,e[e.GatewayTimeout=504]=`GatewayTimeout`})(pt||={});var mt;(function(e){e.Accept=`accept`,e.ContentType=`content-type`})(mt||={});var ht;(function(e){e.ApplicationJson=`application/json`})(ht||={}),pt.MovedPermanently,pt.ResourceMoved,pt.SeeOther,pt.TemporaryRedirect,pt.PermanentRedirect,pt.BadGateway,pt.ServiceUnavailable,pt.GatewayTimeout;var gt=function(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})};const{access:_t,appendFile:vt,writeFile:yt}=o,bt=`GITHUB_STEP_SUMMARY`;new class{constructor(){this._buffer=``}filePath(){return gt(this,void 0,void 0,function*(){if(this._filePath)return this._filePath;let e=process.env[bt];if(!e)throw Error(`Unable to find environment variable for $${bt}. Check if your runtime environment supports job summaries.`);try{yield _t(e,a.R_OK|a.W_OK)}catch{throw Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}return this._filePath=e,this._filePath})}wrap(e,t,n={}){let r=Object.entries(n).map(([e,t])=>` ${e}="${t}"`).join(``);return t?`<${e}${r}>${t}`:`<${e}${r}>`}write(e){return gt(this,void 0,void 0,function*(){let t=!!e?.overwrite,n=yield this.filePath();return yield(t?yt:vt)(n,this._buffer,{encoding:`utf8`}),this.emptyBuffer()})}clear(){return gt(this,void 0,void 0,function*(){return this.emptyBuffer().write({overwrite:!0})})}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){return this._buffer=``,this}addRaw(e,t=!1){return this._buffer+=e,t?this.addEOL():this}addEOL(){return this.addRaw(r)}addCodeBlock(e,t){let n=Object.assign({},t&&{lang:t}),r=this.wrap(`pre`,this.wrap(`code`,e),n);return this.addRaw(r).addEOL()}addList(e,t=!1){let n=t?`ol`:`ul`,r=e.map(e=>this.wrap(`li`,e)).join(``),i=this.wrap(n,r);return this.addRaw(i).addEOL()}addTable(e){let t=e.map(e=>{let t=e.map(e=>{if(typeof e==`string`)return this.wrap(`td`,e);let{header:t,data:n,colspan:r,rowspan:i}=e,a=t?`th`:`td`,o=Object.assign(Object.assign({},r&&{colspan:r}),i&&{rowspan:i});return this.wrap(a,n,o)}).join(``);return this.wrap(`tr`,t)}).join(``),n=this.wrap(`table`,t);return this.addRaw(n).addEOL()}addDetails(e,t){let n=this.wrap(`details`,this.wrap(`summary`,e)+t);return this.addRaw(n).addEOL()}addImage(e,t,n){let{width:r,height:i}=n||{},a=Object.assign(Object.assign({},r&&{width:r}),i&&{height:i}),o=this.wrap(`img`,null,Object.assign({src:e,alt:t},a));return this.addRaw(o).addEOL()}addHeading(e,t){let n=`h${t}`,r=[`h1`,`h2`,`h3`,`h4`,`h5`,`h6`].includes(n)?n:`h1`,i=this.wrap(r,e);return this.addRaw(i).addEOL()}addSeparator(){let e=this.wrap(`hr`,null);return this.addRaw(e).addEOL()}addBreak(){let e=this.wrap(`br`,null);return this.addRaw(e).addEOL()}addQuote(e,t){let n=Object.assign({},t&&{cite:t}),r=this.wrap(`blockquote`,e,n);return this.addRaw(r).addEOL()}addLink(e,t){let n=this.wrap(`a`,e,{href:t});return this.addRaw(n).addEOL()}};var xt=function(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})};const{chmod:St,copyFile:Ct,lstat:wt,mkdir:Tt,open:Et,readdir:Dt,rename:Ot,rm:kt,rmdir:At,stat:jt,symlink:Mt,unlink:Nt}=i.promises,Pt=process.platform===`win32`;i.constants.O_RDONLY;function Ft(e){return xt(this,void 0,void 0,function*(){try{yield jt(e)}catch(e){if(e.code===`ENOENT`)return!1;throw e}return!0})}function It(e){if(e=Rt(e),!e)throw Error(`isRooted() parameter "p" cannot be empty`);return Pt?e.startsWith(`\\`)||/^[A-Z]:/i.test(e):e.startsWith(`/`)}function Lt(e,t){return xt(this,void 0,void 0,function*(){let n;try{n=yield jt(e)}catch(t){t.code!==`ENOENT`&&console.log(`Unexpected error attempting to determine if executable file exists '${e}': ${t}`)}if(n&&n.isFile()){if(Pt){let n=s.extname(e).toUpperCase();if(t.some(e=>e.toUpperCase()===n))return e}else if(zt(n))return e}let r=e;for(let i of t){e=r+i,n=void 0;try{n=yield jt(e)}catch(t){t.code!==`ENOENT`&&console.log(`Unexpected error attempting to determine if executable file exists '${e}': ${t}`)}if(n&&n.isFile()){if(Pt){try{let t=s.dirname(e),n=s.basename(e).toUpperCase();for(let r of yield Dt(t))if(n===r.toUpperCase()){e=s.join(t,r);break}}catch(t){console.log(`Unexpected error attempting to determine the actual case of the file '${e}': ${t}`)}return e}if(zt(n))return e}}return``})}function Rt(e){return e||=``,Pt?(e=e.replace(/\//g,`\\`),e.replace(/\\\\+/g,`\\`)):e.replace(/\/\/+/g,`/`)}function zt(e){return(e.mode&1)>0||(e.mode&8)>0&&process.getgid!==void 0&&e.gid===process.getgid()||(e.mode&64)>0&&process.getuid!==void 0&&e.uid===process.getuid()}var Bt=function(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})};function Vt(e,t){return Bt(this,void 0,void 0,function*(){if(!e)throw Error(`parameter 'tool' is required`);if(t){let t=yield Vt(e,!1);if(!t)throw Error(Pt?`Unable to locate executable file: ${e}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`:`Unable to locate executable file: ${e}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`);return t}let n=yield Ht(e);return n&&n.length>0?n[0]:``})}function Ht(e){return Bt(this,void 0,void 0,function*(){if(!e)throw Error(`parameter 'tool' is required`);let t=[];if(Pt&&process.env.PATHEXT)for(let e of process.env.PATHEXT.split(s.delimiter))e&&t.push(e);if(It(e)){let n=yield Lt(e,t);return n?[n]:[]}if(e.includes(s.sep))return[];let n=[];if(process.env.PATH)for(let e of process.env.PATH.split(s.delimiter))e&&n.push(e);let r=[];for(let i of n){let n=yield Lt(s.join(i,e),t);n&&r.push(n)}return r})}var Ut=function(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})};const Wt=process.platform===`win32`;var Gt=class extends c.EventEmitter{constructor(e,t,n){if(super(),!e)throw Error(`Parameter 'toolPath' cannot be null or empty.`);this.toolPath=e,this.args=t||[],this.options=n||{}}_debug(e){this.options.listeners&&this.options.listeners.debug&&this.options.listeners.debug(e)}_getCommandString(e,t){let n=this._getSpawnFileName(),r=this._getSpawnArgs(e),i=t?``:`[command]`;if(Wt){if(this._isCmdFile()){i+=n;for(let e of r)i+=` ${e}`}else if(e.windowsVerbatimArguments){i+=`"${n}"`;for(let e of r)i+=` ${e}`}else{i+=this._windowsQuoteCmdArg(n);for(let e of r)i+=` ${this._windowsQuoteCmdArg(e)}`}}else{i+=n;for(let e of r)i+=` ${e}`}return i}_processLineBuffer(e,n,r){try{let i=n+e.toString(),a=i.indexOf(t.EOL);for(;a>-1;)r(i.substring(0,a)),i=i.substring(a+t.EOL.length),a=i.indexOf(t.EOL);return i}catch(e){return this._debug(`error processing line. Failed with error ${e}`),``}}_getSpawnFileName(){return Wt&&this._isCmdFile()?process.env.COMSPEC||`cmd.exe`:this.toolPath}_getSpawnArgs(e){if(Wt&&this._isCmdFile()){let t=`/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;for(let n of this.args)t+=` `,t+=e.windowsVerbatimArguments?n:this._windowsQuoteCmdArg(n);return t+=`"`,[t]}return this.args}_endsWith(e,t){return e.endsWith(t)}_isCmdFile(){let e=this.toolPath.toUpperCase();return this._endsWith(e,`.CMD`)||this._endsWith(e,`.BAT`)}_windowsQuoteCmdArg(e){if(!this._isCmdFile())return this._uvQuoteCmdArg(e);if(!e)return`""`;let t=[` `,` `,`&`,`(`,`)`,`[`,`]`,`{`,`}`,`^`,`=`,`;`,`!`,`'`,`+`,`,`,"`",`~`,`|`,`<`,`>`,`"`],n=!1;for(let r of e)if(t.some(e=>e===r)){n=!0;break}if(!n)return e;let r=`"`,i=!0;for(let t=e.length;t>0;t--)r+=e[t-1],i&&e[t-1]===`\\`?r+=`\\`:e[t-1]===`"`?(i=!0,r+=`"`):i=!1;return r+=`"`,r.split(``).reverse().join(``)}_uvQuoteCmdArg(e){if(!e)return`""`;if(!e.includes(` `)&&!e.includes(` `)&&!e.includes(`"`))return e;if(!e.includes(`"`)&&!e.includes(`\\`))return`"${e}"`;let t=`"`,n=!0;for(let r=e.length;r>0;r--)t+=e[r-1],n&&e[r-1]===`\\`?t+=`\\`:e[r-1]===`"`?(n=!0,t+=`\\`):n=!1;return t+=`"`,t.split(``).reverse().join(``)}_cloneExecOptions(e){e||={};let t={cwd:e.cwd||process.cwd(),env:e.env||process.env,silent:e.silent||!1,windowsVerbatimArguments:e.windowsVerbatimArguments||!1,failOnStdErr:e.failOnStdErr||!1,ignoreReturnCode:e.ignoreReturnCode||!1,delay:e.delay||1e4};return t.outStream=e.outStream||process.stdout,t.errStream=e.errStream||process.stderr,t}_getSpawnOptions(e,t){e||={};let n={};return n.cwd=e.cwd,n.env=e.env,n.windowsVerbatimArguments=e.windowsVerbatimArguments||this._isCmdFile(),e.windowsVerbatimArguments&&(n.argv0=`"${t}"`),n}exec(){return Ut(this,void 0,void 0,function*(){return!It(this.toolPath)&&(this.toolPath.includes(`/`)||Wt&&this.toolPath.includes(`\\`))&&(this.toolPath=s.resolve(process.cwd(),this.options.cwd||process.cwd(),this.toolPath)),this.toolPath=yield Vt(this.toolPath,!0),new Promise((e,n)=>Ut(this,void 0,void 0,function*(){this._debug(`exec tool: ${this.toolPath}`),this._debug(`arguments:`);for(let e of this.args)this._debug(` ${e}`);let r=this._cloneExecOptions(this.options);!r.silent&&r.outStream&&r.outStream.write(this._getCommandString(r)+t.EOL);let i=new qt(r,this.toolPath);if(i.on(`debug`,e=>{this._debug(e)}),this.options.cwd&&!(yield Ft(this.options.cwd)))return n(/* @__PURE__ */ Error(`The cwd: ${this.options.cwd} does not exist!`));let a=this._getSpawnFileName(),o=u.spawn(a,this._getSpawnArgs(r),this._getSpawnOptions(this.options,a)),s=``;o.stdout&&o.stdout.on(`data`,e=>{this.options.listeners&&this.options.listeners.stdout&&this.options.listeners.stdout(e),!r.silent&&r.outStream&&r.outStream.write(e),s=this._processLineBuffer(e,s,e=>{this.options.listeners&&this.options.listeners.stdline&&this.options.listeners.stdline(e)})});let c=``;if(o.stderr&&o.stderr.on(`data`,e=>{i.processStderr=!0,this.options.listeners&&this.options.listeners.stderr&&this.options.listeners.stderr(e),!r.silent&&r.errStream&&r.outStream&&(r.failOnStdErr?r.errStream:r.outStream).write(e),c=this._processLineBuffer(e,c,e=>{this.options.listeners&&this.options.listeners.errline&&this.options.listeners.errline(e)})}),o.on(`error`,e=>{i.processError=e.message,i.processExited=!0,i.processClosed=!0,i.CheckComplete()}),o.on(`exit`,e=>{i.processExitCode=e,i.processExited=!0,this._debug(`Exit code ${e} received from tool '${this.toolPath}'`),i.CheckComplete()}),o.on(`close`,e=>{i.processExitCode=e,i.processExited=!0,i.processClosed=!0,this._debug(`STDIO streams have closed for tool '${this.toolPath}'`),i.CheckComplete()}),i.on(`done`,(t,r)=>{s.length>0&&this.emit(`stdline`,s),c.length>0&&this.emit(`errline`,c),o.removeAllListeners(),t?n(t):e(r)}),this.options.input){if(!o.stdin)throw Error(`child process missing stdin`);o.stdin.end(this.options.input)}}))})}};function Kt(e){let t=[],n=!1,r=!1,i=``;function a(e){r&&e!==`"`&&(i+=`\\`),i+=e,r=!1}for(let o=0;o0&&(t.push(i),i=``):a(s)}return i.length>0&&t.push(i.trim()),t}var qt=class e extends c.EventEmitter{constructor(e,t){if(super(),this.processClosed=!1,this.processError=``,this.processExitCode=0,this.processExited=!1,this.processStderr=!1,this.delay=1e4,this.done=!1,this.timeout=null,!t)throw Error(`toolPath must not be empty`);this.options=e,this.toolPath=t,e.delay&&(this.delay=e.delay)}CheckComplete(){this.done||(this.processClosed?this._setResult():this.processExited&&(this.timeout=d(e.HandleTimeout,this.delay,this)))}_debug(e){this.emit(`debug`,e)}_setResult(){let e;this.processExited&&(this.processError?e=/* @__PURE__ */ Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`):this.processExitCode!==0&&!this.options.ignoreReturnCode?e=/* @__PURE__ */ Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`):this.processStderr&&this.options.failOnStdErr&&(e=/* @__PURE__ */ Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`))),this.timeout&&=(clearTimeout(this.timeout),null),this.done=!0,this.emit(`done`,e,this.processExitCode)}static HandleTimeout(e){if(!e.done){if(!e.processClosed&&e.processExited){let t=`The STDIO streams did not close within ${e.delay/1e3} seconds of the exit event from process '${e.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;e._debug(t)}e._setResult()}}},Jt=function(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})};function Yt(e,t,n){return Jt(this,void 0,void 0,function*(){let r=Kt(e);if(r.length===0)throw Error(`Parameter 'commandLine' cannot be null or empty.`);let i=r[0];return t=r.slice(1).concat(t||[]),new Gt(i,t,n).exec()})}n.platform(),n.arch();var Xt;(function(e){e[e.Success=0]=`Success`,e[e.Failure=1]=`Failure`})(Xt||={});function Zt(e){process.exitCode=Xt.Failure,Qt(e)}function Qt(e,t={}){v(`error`,_(t),e instanceof Error?e.toString():e)}function $t(e,t={}){v(`warning`,_(t),e instanceof Error?e.toString():e)}function en(e){process.stdout.write(e+t.EOL)}function tn(e){return e===`npm`||e===`pnpm`||e===`bun`}function nn(e){let t=e.toLowerCase();return t===`vite-plus`||t===`@voidzero-dev/vite-plus`||t===`@voidzero-dev/vite-plus-core`||t.startsWith(`@voidzero-dev/vite-plus-`)}function rn(e){if(typeof e!=`string`)return!1;let t=e.toLowerCase();return t.includes(`@voidzero-dev/vite-plus`)||t.includes(`vite-plus-core`)}function an(e){if(!e||typeof e!=`object`)return!1;for(let[t,n]of Object.entries(e))if(typeof t==`string`&&(nn(t)||rn(n)))return!0;return!1}function on(e){let t=e.catalog||e.catalogs;if(!t||typeof t!=`object`)return!1;let n=Array.isArray(t)?t:Object.values(t);for(let e of n)if(e&&typeof e==`object`){for(let t of Object.keys(e))if(typeof t==`string`&&nn(t))return!0}return!1}function sn(e){if(!e)return!1;let t=[e.dependencies,e.devDependencies,e.optionalDependencies,e.peerDependencies];for(let e of t)if(an(e))return!0;return on(e)}function cn(e){let t=e.trim().toLowerCase();return/^[a-z0-9_.-]+$/.test(t)?t:`npm`}function ln(e,t){return t===process.cwd()?e:p.join(t,e)}function un(e){let t=ln(`package.json`,e);if(!f.existsSync(t))return{hasPackageJson:!1};let n;try{n=f.readFileSync(t,`utf8`)}catch(e){return{hasPackageJson:!0,packageJsonError:`Failed to read package.json: ${e instanceof Error?e.message:String(e)}`,packageJsonErrorType:`read`,packageJsonErrorCause:e}}try{return{hasPackageJson:!0,packageJson:JSON.parse(n)}}catch(e){return{hasPackageJson:!0,packageJsonError:`Failed to parse package.json: ${e instanceof Error?e.message:String(e)}`,packageJsonErrorType:`parse`,packageJsonErrorCause:e}}}function dn(e){let t=!1,n=!1,r=!1;try{t=f.existsSync(ln(`pnpm-lock.yaml`,e)),n=f.existsSync(ln(`package-lock.json`,e)),r=f.existsSync(ln(`bun.lock`,e))}catch{}return{hasPnpmLock:t,hasPackageLock:n,hasBunLock:r}}function fn(e=process.cwd()){let t=un(e),n=dn(e),r=f.existsSync(ln(`.bun-version`,e)),i=f.existsSync(ln(`.nvmrc`,e)),a=f.existsSync(ln(`.node-version`,e)),o=i||a,s=i?`.nvmrc`:a?`.node-version`:void 0;return{hasPackageJson:t.hasPackageJson,packageJson:t.packageJson,packageJsonError:t.packageJsonError,packageJsonErrorType:t.packageJsonErrorType,packageJsonErrorCause:t.packageJsonErrorCause,hasBunVersionFile:r,hasNodeVersionFile:o,nodeFileVersionFile:s,hasPnpmLock:n.hasPnpmLock,hasPackageLock:n.hasPackageLock,hasBunLock:n.hasBunLock}}function pn(e){if(typeof e==`string`){let t=e.trim();if(!t)return;let n=t.indexOf(`@`),r=(n===-1?t:t.slice(0,n)).trim().toLowerCase();if(tn(r))return{name:r}}else if(typeof e==`object`&&e){let t=e;if(typeof t.name==`string`||typeof t.name==`number`){let e=String(t.name).trim().toLowerCase();if(tn(e))return{name:e}}}}function mn(e){if(e.devEngines&&typeof e.devEngines==`object`&&e.devEngines.packageManager){let t=Array.isArray(e.devEngines.packageManager)?e.devEngines.packageManager:[e.devEngines.packageManager];for(let e of t){let t=pn(e);if(t)return t}}}function hn(e){if(e.packageJsonError){e.hasPackageJson&&$t(`Failed to detect package manager: ${e.packageJsonError}`);return}if(!e.packageJson)return;let t=e.packageJson;if(t.packageManager&&typeof t.packageManager==`string`){let e=t.packageManager.trim(),n=e.indexOf(`@`),r=(n===-1?e:e.slice(0,n)).trim(),i=r.toLowerCase();if(!tn(i))throw Error(`Unsupported package manager '${r}'. Supported package managers are npm, pnpm, and bun.`);return{name:i,source:`packageManager`}}let n=mn(t);if(n)return{...n,source:`devEngines`}}function gn(e){let t=[];if(e.hasPnpmLock&&t.push({name:`pnpm`,file:`pnpm-lock.yaml`}),e.hasPackageLock&&t.push({name:`npm`,file:`package-lock.json`}),e.hasBunLock&&t.push({name:`bun`,file:`bun lockfile`}),t.length!==0){if(t.length>1){let n=t.map(e=>e.file).join(`, `);e.hasPackageJson&&$t(`Multiple conflicting lockfiles found (${n}). Selecting '${t[0].file}' (${t[0].name}) based on priority precedence.`)}return{name:t[0].name,source:`lockfile`}}}function _n(e){return hn(e)||gn(e)||{name:`npm`,source:`default`}}function vn(e){let t=typeof e==`string`?cn(e):e.name;if(!tn(t))throw Error(`Unsupported package manager '${t}'. Supported package managers are npm, pnpm, and bun.`);switch(t){case`npm`:return{packageManager:`npm`,command:`npm`,args:[`install`]};case`pnpm`:return{packageManager:`pnpm`,command:`pnpm`,args:[`install`,`--no-frozen-lockfile`]};case`bun`:return{packageManager:`bun`,command:`bun`,args:[`install`]}}} /*! * Copyright (c) Squirrel Chat et al., All rights reserved. * SPDX-License-Identifier: BSD-3-Clause @@ -69,9 +69,9 @@ t.exports={WebsocketFrameSend:class{constructor(e){this.frameData=e}createFrame( * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -function gn(e,t){let n=e.slice(0,t).split(/\r?\n/);return[n.length,n.pop().length+1]}function _n(e,t,n){let r=e.split(/\r?\n/),i=``,a=(Math.log10(t+1)|0)+1;for(let e=t-1;e<=t+1;e++){let o=r[e-1];o&&(i+=e.toString().padEnd(a,` `),i+=`: `,i+=o,i+=` +function yn(e,t){let n=e.slice(0,t).split(/\r?\n/);return[n.length,n.pop().length+1]}function bn(e,t,n){let r=e.split(/\r?\n/),i=``,a=(Math.log10(t+1)|0)+1;for(let e=t-1;e<=t+1;e++){let o=r[e-1];o&&(i+=e.toString().padEnd(a,` `),i+=`: `,i+=o,i+=` `,e===t&&(i+=` `.repeat(a+n+2),i+=`^ -`))}return i}var Q=class e extends Error{line;column;codeblock;constructor(e,t){let[n,r]=gn(t.toml,t.ptr),i=_n(t.toml,n,r);super(`Invalid TOML document: ${e}\n\n${i}`,t),this.line=n,this.column=r,this.codeblock=i}static x(t,n,r){throw new e(t,{toml:n.s,ptr:r??n.p})}}; +`))}return i}var $=class e extends Error{line;column;codeblock;constructor(e,t){let[n,r]=yn(t.toml,t.ptr),i=bn(t.toml,n,r);super(`Invalid TOML document: ${e}\n\n${i}`,t),this.line=n,this.column=r,this.codeblock=i}static x(t,n,r){throw new e(t,{toml:n.s,ptr:r??n.p})}}; /*! * Copyright (c) Squirrel Chat et al., All rights reserved. * SPDX-License-Identifier: BSD-3-Clause @@ -99,8 +99,8 @@ function gn(e,t){let n=e.slice(0,t).split(/\r?\n/);return[n.length,n.pop().lengt * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -function vn(e){let t=e.p,n=e.s.charCodeAt(e.p++),r=n,i=n===39,a=n===e.s.charCodeAt(e.p)&&n===e.s.charCodeAt(e.p+1);a&&((n=e.s.charCodeAt(e.p+=2))===10?e.p++:n===13&&e.s.charCodeAt(e.p+1)===10&&(e.p+=2));let o=``,s=e.p,c=0;for(;e.p=48&&t<=57?t-48:t>=65&&t<=70?t-65+10:t>=97&&t<=102?t-97+10:-1;n<0&&Q.x(`invalid non-hex character in unicode escape`,e),r=r<<4|n}(r<0||r>1114111||r>=55296&&r<=57343)&&Q.x(`invalid unicode escape`,e,t),o+=String.fromCodePoint(r),s=e.p--,c=0}else a&&(n===32||n===9)?c=2:(n===98?o+=`\b`:n===116?o+=` `:n===110?o+=` -`:n===102?o+=`\f`:n===114?o+=`\r`:n===101?o+=`\x1B`:n===34?o+=`"`:n===92?o+=`\\`:Q.x(`unrecognised escape sequence`,e),s=e.p+1,c=0)}else n!==32&&n!==9&&(c===2&&Q.x(`invalid escape: only line-ending whitespace may be escaped`,e,s),c=+(!i&&n===92),s=e.p);Q.x(`unfinished string`,e,t)} +function xn(e){let t=e.p,n=e.s.charCodeAt(e.p++),r=n,i=n===39,a=n===e.s.charCodeAt(e.p)&&n===e.s.charCodeAt(e.p+1);a&&((n=e.s.charCodeAt(e.p+=2))===10?e.p++:n===13&&e.s.charCodeAt(e.p+1)===10&&(e.p+=2));let o=``,s=e.p,c=0;for(;e.p=48&&t<=57?t-48:t>=65&&t<=70?t-65+10:t>=97&&t<=102?t-97+10:-1;n<0&&$.x(`invalid non-hex character in unicode escape`,e),r=r<<4|n}(r<0||r>1114111||r>=55296&&r<=57343)&&$.x(`invalid unicode escape`,e,t),o+=String.fromCodePoint(r),s=e.p--,c=0}else a&&(n===32||n===9)?c=2:(n===98?o+=`\b`:n===116?o+=` `:n===110?o+=` +`:n===102?o+=`\f`:n===114?o+=`\r`:n===101?o+=`\x1B`:n===34?o+=`"`:n===92?o+=`\\`:$.x(`unrecognised escape sequence`,e),s=e.p+1,c=0)}else n!==32&&n!==9&&(c===2&&$.x(`invalid escape: only line-ending whitespace may be escaped`,e,s),c=+(!i&&n===92),s=e.p);$.x(`unfinished string`,e,t)} /*! * Copyright (c) Squirrel Chat et al., All rights reserved. * SPDX-License-Identifier: BSD-3-Clause @@ -128,7 +128,7 @@ function vn(e){let t=e.p,n=e.s.charCodeAt(e.p++),r=n,i=n===39,a=n===e.s.charCode * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -let yn=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i;var bn=class e extends Date{#e=!1;#t=!1;#n=null;constructor(e,t,n){let r=!0,i=!0,a=`Z`,o;if(typeof e==`string`){if(t)prep:{if(t<3){if(+e.slice(11,13)>23){e=``;break prep}t===2?(a=null,e+=`Z`):(o=e.charCodeAt(e.length-1))!==90&&o!==122&&(a=e.slice(e.length-6)),n&&(e=e.slice(0,10)+`T`+e.slice(11))}else t===4&&(e=+e.slice(0,2)>23?``:`0000-01-01T${e}Z`);r=t!==4,i=t!==3}else{let t=e.match(yn);t?(t[1]||(r=!1,e=`0000-01-01T${e}`),i=!!t[2],i&&e[10]===` `&&(e=e.replace(` `,`T`)),t[2]&&+t[2]>23?e=``:(a=t[3]||null,!a&&i&&(e+=`Z`))):e=``}}super(e),isNaN(this.getTime())||(this.#e=r,this.#t=i,this.#n=a)}isDateTime(){return this.#e&&this.#t}isLocal(){return!this.#e||!this.#t||!this.#n}isDate(){return this.#e&&!this.#t}isTime(){return this.#t&&!this.#e}isValid(){return this.#e||this.#t}toISOString(){let e=super.toISOString();if(this.isDate())return e.slice(0,10);if(this.isTime())return e.slice(11,23);if(this.#n===null)return e.slice(0,-1);if(this.#n===`Z`||this.#n===`z`)return e;let t=this.#n.slice(1,3)*60+ +this.#n.slice(4,6);return t=this.#n[0]===`-`?t:-t,(/* @__PURE__ */ new Date(this.getTime()-t*6e4)).toISOString().slice(0,-1)+this.#n}static wrapAsOffsetDateTime(t,n=`Z`){let r=new e(t);return r.#n=n,r}static wrapAsLocalDateTime(t){let n=new e(t);return n.#n=null,n}static wrapAsLocalDate(t){let n=new e(t);return n.#t=!1,n.#n=null,n}static wrapAsLocalTime(t){let n=new e(t);return n.#e=!1,n.#n=null,n}}; +let Sn=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i;var Cn=class e extends Date{#e=!1;#t=!1;#n=null;constructor(e,t,n){let r=!0,i=!0,a=`Z`,o;if(typeof e==`string`){if(t)prep:{if(t<3){if(+e.slice(11,13)>23){e=``;break prep}t===2?(a=null,e+=`Z`):(o=e.charCodeAt(e.length-1))!==90&&o!==122&&(a=e.slice(e.length-6)),n&&(e=e.slice(0,10)+`T`+e.slice(11))}else t===4&&(e=+e.slice(0,2)>23?``:`0000-01-01T${e}Z`);r=t!==4,i=t!==3}else{let t=e.match(Sn);t?(t[1]||(r=!1,e=`0000-01-01T${e}`),i=!!t[2],i&&e[10]===` `&&(e=e.replace(` `,`T`)),t[2]&&+t[2]>23?e=``:(a=t[3]||null,!a&&i&&(e+=`Z`))):e=``}}super(e),isNaN(this.getTime())||(this.#e=r,this.#t=i,this.#n=a)}isDateTime(){return this.#e&&this.#t}isLocal(){return!this.#e||!this.#t||!this.#n}isDate(){return this.#e&&!this.#t}isTime(){return this.#t&&!this.#e}isValid(){return this.#e||this.#t}toISOString(){let e=super.toISOString();if(this.isDate())return e.slice(0,10);if(this.isTime())return e.slice(11,23);if(this.#n===null)return e.slice(0,-1);if(this.#n===`Z`||this.#n===`z`)return e;let t=this.#n.slice(1,3)*60+ +this.#n.slice(4,6);return t=this.#n[0]===`-`?t:-t,(/* @__PURE__ */ new Date(this.getTime()-t*6e4)).toISOString().slice(0,-1)+this.#n}static wrapAsOffsetDateTime(t,n=`Z`){let r=new e(t);return r.#n=n,r}static wrapAsLocalDateTime(t){let n=new e(t);return n.#n=null,n}static wrapAsLocalDate(t){let n=new e(t);return n.#t=!1,n.#n=null,n}static wrapAsLocalTime(t){let n=new e(t);return n.#e=!1,n.#n=null,n}}; /*! * Copyright (c) Squirrel Chat et al., All rights reserved. * SPDX-License-Identifier: BSD-3-Clause @@ -156,7 +156,7 @@ let yn=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -function xn(e,t=10){return t===16?e>47&&e<58||e>64&&e<71||e>96&&e<103:e>47&&e<48+t}function Sn(e,t){return e===32||e===9||e===10||e===13||t&&(e===t||e===44)||e===35}function Cn(e,t){let n=e.p,r=e.s.charCodeAt(e.p);if(r===91||r===123){e.d--||Q.x(`document contains excessively nested structures. aborting.`,e);let t=r===91?Pn(e):Nn(e);return e.d++,t}return r===34||r===39?vn(e):r===116?((e.s.charCodeAt(++e.p)!==114||e.s.charCodeAt(++e.p)!==117||e.s.charCodeAt(++e.p)!==101)&&Q.x(`invalid value`,e,n),e.p++,!0):r===102?((e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==108||e.s.charCodeAt(++e.p)!==115||e.s.charCodeAt(++e.p)!==101)&&Q.x(`invalid value`,e,n),e.p++,!1):r===43||r===45?wn(e,e.p,e.s.charCodeAt(++e.p),44-r,t):e.s.charCodeAt(e.p+4)===45&&e.s.charCodeAt(e.p+7)===45?Dn(e,r,t):e.s.charCodeAt(e.p+2)===58?On(e,r,t):wn(e,e.p,r,0,t)}function wn(e,t,n,r,i){let a=n,o=0,s=!1;if(a===105)return(e.s.charCodeAt(++e.p)!==110||e.s.charCodeAt(++e.p)!==102)&&Q.x(`invalid value`,e,t),e.p++,(r||1)/0;if(a===110)return(e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==110)&&Q.x(`invalid value`,e,t),e.p++,NaN;if(a===48){if(++e.p>=e.s.length||Sn(a=e.s.charCodeAt(e.p),i))return e.bi===!0?0n:0;if(!r){if(a===120)return Tn(e,t,16,i);if(a===98)return Tn(e,t,2,i);if(a===111)return Tn(e,t,8,i)}a===46?o=2:a===101||a===69?o=4:Q.x(`illegal leading zero`,e,t)}else xn(a)||Q.x(`invalid value`,e,t);for(;++e.p9?o-=11:o&1||o++:Q.x(`illegal character in numeric literal`,e);if(!o){let t=(n-48)*(r||1);return e.bi===!0?BigInt(t):t}o&1||Q.x(`unfinished numeric value`,e,t);let c=e.s.slice(t,e.p);return s&&(c=c.replaceAll(`_`,``)),o>1?parseFloat(c):En(e,c,10,t)}function Tn(e,t,n,r){let i,a=1;for(;++e.p=e.s.length||((t=e.s.charCodeAt(e.p))!==32||(i=!0,!xn(e.s.charCodeAt(e.p+1))))&&t!==84&&t!==116)return kn(e,e.s.slice(r,e.p),3,!1,r);if(e.s.charCodeAt(e.p+=3)!==58&&Q.x(`invalid date-time: time part is malformed`,e,r),e.s.charCodeAt(e.p+=3)===58&&(e.p+=3),e.s.charCodeAt(e.p)===46)for(;xn(e.s.charCodeAt(++e.p)););if(t=e.s.charCodeAt(e.p)){if(t===90||t===122)return kn(e,e.s.slice(r,++e.p),1,i,r,`[+00:00]`);if(t===43||t===45)return kn(e,e.s.slice(r,e.p+=6),1,i,r,!e.ld&&`[`+e.s.slice(e.p-6,e.p)+`]`)}return kn(e,e.s.slice(r,e.p),2,i,r)}function On(e,t,n){let r=e.p;if(!xn(t)||!xn(e.s.charCodeAt(++e.p)))return wn(e,--e.p,t,0,n);if(e.s.charCodeAt(e.p+=4)===58&&(e.p+=3),e.s.charCodeAt(e.p)===46)for(;xn(e.s.charCodeAt(++e.p)););return kn(e,e.s.slice(r,e.p),4,!1,r)}function kn(e,t,n,r,i,a){if(e.ld){let a=new bn(t,n,r);return a.isValid()||Q.x(`invalid date`,e,i),a}try{switch(a&&(t+=a),n){case 1:return Temporal.ZonedDateTime.from(t);case 2:return Temporal.PlainDateTime.from(t);case 3:return Temporal.PlainDate.from(t);case 4:return Temporal.PlainTime.from(t)}}catch(t){Q.x(t instanceof Error?t.message:``+t,e,i)}} +function wn(e,t=10){return t===16?e>47&&e<58||e>64&&e<71||e>96&&e<103:e>47&&e<48+t}function Tn(e,t){return e===32||e===9||e===10||e===13||t&&(e===t||e===44)||e===35}function En(e,t){let n=e.p,r=e.s.charCodeAt(e.p);if(r===91||r===123){e.d--||$.x(`document contains excessively nested structures. aborting.`,e);let t=r===91?Ln(e):In(e);return e.d++,t}return r===34||r===39?xn(e):r===116?((e.s.charCodeAt(++e.p)!==114||e.s.charCodeAt(++e.p)!==117||e.s.charCodeAt(++e.p)!==101)&&$.x(`invalid value`,e,n),e.p++,!0):r===102?((e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==108||e.s.charCodeAt(++e.p)!==115||e.s.charCodeAt(++e.p)!==101)&&$.x(`invalid value`,e,n),e.p++,!1):r===43||r===45?Dn(e,e.p,e.s.charCodeAt(++e.p),44-r,t):e.s.charCodeAt(e.p+4)===45&&e.s.charCodeAt(e.p+7)===45?An(e,r,t):e.s.charCodeAt(e.p+2)===58?jn(e,r,t):Dn(e,e.p,r,0,t)}function Dn(e,t,n,r,i){let a=n,o=0,s=!1;if(a===105)return(e.s.charCodeAt(++e.p)!==110||e.s.charCodeAt(++e.p)!==102)&&$.x(`invalid value`,e,t),e.p++,(r||1)/0;if(a===110)return(e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==110)&&$.x(`invalid value`,e,t),e.p++,NaN;if(a===48){if(++e.p>=e.s.length||Tn(a=e.s.charCodeAt(e.p),i))return e.bi===!0?0n:0;if(!r){if(a===120)return On(e,t,16,i);if(a===98)return On(e,t,2,i);if(a===111)return On(e,t,8,i)}a===46?o=2:a===101||a===69?o=4:$.x(`illegal leading zero`,e,t)}else wn(a)||$.x(`invalid value`,e,t);for(;++e.p9?o-=11:o&1||o++:$.x(`illegal character in numeric literal`,e);if(!o){let t=(n-48)*(r||1);return e.bi===!0?BigInt(t):t}o&1||$.x(`unfinished numeric value`,e,t);let c=e.s.slice(t,e.p);return s&&(c=c.replaceAll(`_`,``)),o>1?parseFloat(c):kn(e,c,10,t)}function On(e,t,n,r){let i,a=1;for(;++e.p=e.s.length||((t=e.s.charCodeAt(e.p))!==32||(i=!0,!wn(e.s.charCodeAt(e.p+1))))&&t!==84&&t!==116)return Mn(e,e.s.slice(r,e.p),3,!1,r);if(e.s.charCodeAt(e.p+=3)!==58&&$.x(`invalid date-time: time part is malformed`,e,r),e.s.charCodeAt(e.p+=3)===58&&(e.p+=3),e.s.charCodeAt(e.p)===46)for(;wn(e.s.charCodeAt(++e.p)););if(t=e.s.charCodeAt(e.p)){if(t===90||t===122)return Mn(e,e.s.slice(r,++e.p),1,i,r,`[+00:00]`);if(t===43||t===45)return Mn(e,e.s.slice(r,e.p+=6),1,i,r,!e.ld&&`[`+e.s.slice(e.p-6,e.p)+`]`)}return Mn(e,e.s.slice(r,e.p),2,i,r)}function jn(e,t,n){let r=e.p;if(!wn(t)||!wn(e.s.charCodeAt(++e.p)))return Dn(e,--e.p,t,0,n);if(e.s.charCodeAt(e.p+=4)===58&&(e.p+=3),e.s.charCodeAt(e.p)===46)for(;wn(e.s.charCodeAt(++e.p)););return Mn(e,e.s.slice(r,e.p),4,!1,r)}function Mn(e,t,n,r,i,a){if(e.ld){let a=new Cn(t,n,r);return a.isValid()||$.x(`invalid date`,e,i),a}try{switch(a&&(t+=a),n){case 1:return Temporal.ZonedDateTime.from(t);case 2:return Temporal.PlainDateTime.from(t);case 3:return Temporal.PlainDate.from(t);case 4:return Temporal.PlainTime.from(t)}}catch(t){$.x(t instanceof Error?t.message:``+t,e,i)}} /*! * Copyright (c) Squirrel Chat et al., All rights reserved. * SPDX-License-Identifier: BSD-3-Clause @@ -184,7 +184,7 @@ function xn(e,t=10){return t===16?e>47&&e<58||e>64&&e<71||e>96&&e<103:e>47&&e<48 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -function An(e){for(;e.p57&&o<65||o>90&&o<97&&o!==95||o>122?Q.x(`illegal character in key`,e):r||(r=1,a=e.p);while(o=e.s.charCodeAt(++e.p));Q.x(`incomplete key-value: cannot find end of key`,e,n)}function Nn(e){let t=e.p++,n=Object.create(null),r=/* @__PURE__ */ new Set,i;for(;e.p57&&o<65||o>90&&o<97&&o!==95||o>122?$.x(`illegal character in key`,e):r||(r=1,a=e.p);while(o=e.s.charCodeAt(++e.p));$.x(`incomplete key-value: cannot find end of key`,e,n)}function In(e){let t=e.p++,n=Object.create(null),r=/* @__PURE__ */ new Set,i;for(;e.ptypeof e==`string`)}function Kn(e,t,n){let r=p.resolve(e),i=p.resolve(t),a=p.relative(r,i).replace(/\\/g,`/`);if(a.startsWith(`..`)||p.isAbsolute(a))return!1;let o=Array.isArray(n.members)?n.members.filter(e=>typeof e==`string`):[],s=Array.isArray(n.exclude)?n.exclude.filter(e=>typeof e==`string`):[],c=a===``?`.`:a;return!(s.length>0&&Wn(c,s)||!Wn(c,o)||i!==r&&!f.existsSync(p.join(i,`pyproject.toml`)))}function qn(e){let t=tr(e);return t?.success===!0&&$(t.data.tool)&&$(t.data.tool.uv)&&Gn(t.data.tool.uv.workspace)?{dir:e,toml:t,config:t.data.tool.uv.workspace}:null}function Jn(e,t,n=0){for(let r=n;r0;){let e=n.pop(),r;try{r=f.readdirSync(e,{withFileTypes:!0})}catch{continue}for(let i of r){let r=i.name;if(i.isDirectory()){if(t.includes(r)||r.endsWith(`.egg-info`))continue;n.push(p.join(e,r))}else if(i.isFile()&&(r.endsWith(`.py`)||r.endsWith(`.pyi`)))return!0}}return!1}function rr(e,t,n){let r=``,i=t;for(;i=t+3&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+3]}r+=e[i]===` +const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virtualenv`,`conda-env`,`.conda`,`node_modules`,`site-packages`,`__pycache__`,`.tox`,`.nox`,`.pytest_cache`,`.mypy_cache`,`.ruff_cache`,`dist`,`build`,`.egg-info`,`.next`,`.astro`,`out`,`vendor`,`.yarn`];function Un(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Wn(e){try{let t=Bn(e);return Un(t)?{success:!0,data:t,rawContent:e}:{success:!1,error:/* @__PURE__ */ Error(`Invalid TOML: root must be an object`)}}catch(e){return{success:!1,error:e instanceof Error?e:Error(String(e))}}}function Gn(e){if(!f.existsSync(e))return null;try{return Wn(f.readFileSync(e,`utf8`))}catch(e){return{success:!1,error:e instanceof Error?e:Error(String(e))}}}function Kn(e){let t=[],n=e;for(;t.push(n),!f.existsSync(p.join(n,`.git`));){let e=p.dirname(n);if(e===n)break;n=e}return t}function qn(e){let t=e.replace(/\\/g,`/`).replace(/^\.\//,``).replace(/\/$/,``);if(t===`.`||t===``)return/^$/;let n=`^`,r=0;for(;rtypeof e==`string`)}function Xn(e,t,n){let r=p.resolve(e),i=p.resolve(t),a=p.relative(r,i).replace(/\\/g,`/`);if(a.startsWith(`..`)||p.isAbsolute(a))return!1;let o=Array.isArray(n.members)?n.members.filter(e=>typeof e==`string`):[],s=Array.isArray(n.exclude)?n.exclude.filter(e=>typeof e==`string`):[],c=a===``?`.`:a;return!(s.length>0&&Jn(c,s)||!Jn(c,o)||i!==r&&!f.existsSync(p.join(i,`pyproject.toml`)))}function Zn(e){let t=ar(e);return t?.success===!0&&Un(t.data.tool)&&Un(t.data.tool.uv)&&Yn(t.data.tool.uv.workspace)?{dir:e,toml:t,config:t.data.tool.uv.workspace}:null}function Qn(e,t,n=0){for(let r=n;r0;){let e=n.pop(),r;try{r=f.readdirSync(e,{withFileTypes:!0})}catch{continue}for(let i of r){let r=i.name;if(i.isDirectory()){if(t.includes(r)||r.endsWith(`.egg-info`))continue;n.push(p.join(e,r))}else if(i.isFile()&&(r.endsWith(`.py`)||r.endsWith(`.pyi`)))return!0}}return!1}function sr(e,t,n){let r=``,i=t;for(;i=t+3&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+3]}r+=e[i]===` `?` -`:` `,i++}return[r,i]}function ar(e,t,n){let r=` `,i=t+3;for(;i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function sr(e,t,n){let r=` `,i=t+1;for(;i!$(e))}function ur(e,t){if(!$(e[`build-system`]))return!1;if(typeof t==`string`){let e=cr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!$(e))}function dr(e,t){if(lr(e,t)||ur(e,t))return!0;if($(e.tool)&&$(e.tool.uv)){let t=e.tool.uv;return Gn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function fr(e){return $(e.tool)&&$(e.tool.uv)}function pr(e,t){return lr(e,t)||ur(e,t)}function mr(e,t){return p.relative(e,t)||`.`}function hr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function gr(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=mr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function _r(e){let t=e.pyprojectToml?.success===!0&&dr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&dr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&fr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&fr(e.workspaceRootToml.data);return e.hasUvLock?hr(e,r):a||i?gr(e,r):null}function vr(e){let t=e.pyprojectToml?.success===!0&&pr(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?mr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=mr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}const yr=/^ruff\s*(?:\[[^\]]*\])?\s*(?:[=<>!~@;]|\s|$)/i;function br(e){for(let t of e)if(typeof t==`string`){let e=t.trim();if(yr.test(e))return{declared:!0}}else if($(t)){let e=typeof t.package==`string`?t.package:typeof t.name==`string`?t.name:void 0;if(e&&e.toLowerCase()===`ruff`)return{declared:!0}}}function xr(e){for(let t of Object.keys(e))if(t.toLowerCase()===`ruff`)return{declared:!0}}function Sr(e){if(Array.isArray(e.dependencies)){let t=br(e.dependencies);if(t)return t}if($(e[`optional-dependencies`])){for(let t of Object.values(e[`optional-dependencies`]))if(Array.isArray(t)){let e=br(t);if(e)return e}}}function Cr(e){for(let t of Object.values(e))if(Array.isArray(t)){let e=br(t);if(e)return e}}function wr(e){for(let t of[`dev-dependencies`,`override-dependencies`,`constraint-dependencies`])if(Array.isArray(e[t])){let n=br(e[t]);if(n)return n}}function Tr(e){if($(e.dependencies)){let t=xr(e.dependencies);if(t)return t}if($(e[`dev-dependencies`])){let t=xr(e[`dev-dependencies`]);if(t)return t}if($(e.group)){for(let t of Object.values(e.group))if($(t)&&$(t.dependencies)){let e=xr(t.dependencies);if(e)return e}}}function Er(e){if($(e[`dev-dependencies`])){for(let t of Object.values(e[`dev-dependencies`]))if(Array.isArray(t)){let e=br(t);if(e)return e}}}function Dr(e){if($(e.envs)){for(let t of Object.values(e.envs))if($(t)){if(Array.isArray(t.dependencies)){let e=br(t.dependencies);if(e)return e}if(Array.isArray(t[`extra-dependencies`])){let e=br(t[`extra-dependencies`]);if(e)return e}}}}function Or(e){if($(e.dependencies)){let t=xr(e.dependencies);if(t)return t}if($(e[`dev-dependencies`])){let t=xr(e[`dev-dependencies`]);if(t)return t}if($(e.feature)){for(let t of Object.values(e.feature))if($(t)){if($(t.dependencies)){let e=xr(t.dependencies);if(e)return e}if($(t[`dev-dependencies`])){let e=xr(t[`dev-dependencies`]);if(e)return e}}}}function kr(e){if($(e.uv)){let t=wr(e.uv);if(t)return t}if($(e.poetry)){let t=Tr(e.poetry);if(t)return t}if($(e.pdm)){let t=Er(e.pdm);if(t)return t}if($(e.hatch)){let t=Dr(e.hatch);if(t)return t}if($(e.pixi)){let t=Or(e.pixi);if(t)return t}}function Ar(e){if($(e.project)){let t=Sr(e.project);if(t)return t}if($(e[`dependency-groups`])){let t=Cr(e[`dependency-groups`]);if(t)return t}if($(e.tool)){let t=kr(e.tool);if(t)return t}return{declared:!1}}function jr(e){let t=p.join(e,`uv.lock`);if(!f.existsSync(t))return!1;try{let e=f.readFileSync(t,`utf8`).split(/^\[\[package\]\]/m);for(let t of e)if(/^\s*name\s*=\s*["']ruff["']/m.test(t))return!0}catch{}return!1}function Mr(e){let t=p.join(e,`requirements.txt`);if(!f.existsSync(t))return!1;try{let e=f.readFileSync(t,`utf8`).replace(/#.*/g,``);if(/^\s*ruff\b/im.test(e))return!0}catch{}return!1}function Nr(e,t,n){if(t?.isStandalone)return!1;if(jr(e.uvLockDir||e.cwd))return!0;let r=n??e.pyprojectToml;return!!(r?.success===!0&&Ar(r.data).declared||e.workspaceRootToml?.success===!0&&Ar(e.workspaceRootToml.data).declared||e.uvToml?.success===!0&&Ar(e.uvToml.data).declared||Mr(e.requirementsDir||e.cwd))}function Pr(e=process.cwd(),t){if(t?.hasSource??nr(e))return!0;let n=t?.ctx??er(e);if(n.projectDir===n.cwd&&Zn(n.cwd)&&(n.pyprojectToml?.success===!0&&(dr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||Nr(n,void 0,n.pyprojectToml))||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=qn(n.workspaceRootDir);if(t&&Kn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function Fr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Rn)if(t===`uv`){let t=_r(e);if(t)return t}else if(t===`pip`){let t=vr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Ir(e=process.cwd(),t,n){let r=n?.ctx??er(e);return n?.isProject??Pr(e,{ctx:r,hasSource:n?.hasSource})?Fr(r,t):null}function Lr(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Rr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Lr(n.installCommands),n}function zr(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function Br(e,t,n=process.cwd()){let r=rn(e),i=`${r} run ${t}`;if(tn(`Executing: ${i}`),await Xt(r,[`run`,t],{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Script "${t}" failed while executing "${i}".`)}async function Vr(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(tn(`Installing JS dependencies: ${n}`),await Xt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function Hr(e,t,n=process.cwd()){for(let r of e)await Br(t,r,n)}async function Ur(e=process.cwd()){let t=cn(e);if(!t.hasPackageJson){tn(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=hn(t.packageJson?.scripts||{});if(n.length===0){tn(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}let r=rn(process.env.PACKAGE_MANAGER||pn(t).name);await Vr(mn(r),e),await Hr(n,r,e)}async function Wr(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(tn(`Executing: ${r}`),await Xt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function Gr(e,t=process.cwd()){Rr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Ht(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;tn(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await Wr(e,r,t)}}async function Kr(e=process.cwd(),t){if(t??nr(e)){if(!await Ht(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);for(let{executable:t,args:n}of[{executable:`ruff`,args:[`check`,`--fix`,`.`]},{executable:`ruff`,args:[`format`,`.`]}]){let r=`${t} ${n.join(` `)}`;if(tn(`Executing: ${r}`),await Xt(t,n,{cwd:e,ignoreReturnCode:!0})!==0)throw Error(`Ruff command "${r}" failed. Check Python and Ruff configuration.`)}}}async function qr(e){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{return await Ur(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Jr(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Ir(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await Gr(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Yr(e,t){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await Kr(e,t),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Xr(e,t){let n=t??nr(e);if(!n)return[];let r=[],i=er(e),a=await Jr(e,{ctx:i,hasSource:!0,pmInfo:Ir(e,void 0,{ctx:i,hasSource:!0,isProject:!0})});a&&r.push(a);let o=await Yr(e,n);return o&&r.push(o),r}async function Zr(e=process.cwd()){let t=[],n=await qr(e);n&&t.push(n);let r=await Xr(e,nr(e));t.push(...r),t.length>0&&(Qt(`Failed to run scripts: ${t.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&zr(import.meta.url)&&Zr();export{Ur as executeJsWorkflow,Gr as executePythonWorkflow,Kr as executeRuffAutofix,Zr as run,rn as sanitizePackageManager}; \ No newline at end of file +`:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}var kr=class{async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();en(`Executing: ${e}`);try{let r=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,i=await Yt(n.executable,n.args,{cwd:n.cwd,env:r,ignoreReturnCode:!0});if(i!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${i}.`;t.push({task:n,exitCode:i,error:Error(r)})}else t.push({task:n,exitCode:i})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};async function Ar(e,t,n=`fix`){let r=[],i=[],a=[],o=e.getProviders(),s=/* @__PURE__ */ new Map;for(let e of o){if(!await e.detect(t))continue;let o=/* @__PURE__ */ new Set;s.set(e.id,o);let c=e.getAdapters(t),l=[];for(let e of c){let n=await e.detect(t);n.detected?l.push({adapter:e,reason:n.reason}):n.reason&&!n.reason.startsWith(`no `)&&i.push({id:e.id,name:e.name,reason:n.reason})}for(let e of l){let s=e.adapter,c=s.capabilities,l=o.has(`autofix`),u=o.has(`format`),d=o.has(`lint`);if(c.includes(`autofix`)&&(l||u&&d)){i.push({id:s.id,name:s.name,reason:`overlapping capabilities already covered by higher priority tool`});continue}if(c.length===1&&c[0]===`format`&&(l||u)){i.push({id:s.id,name:s.name,reason:`formatting capability already covered by higher priority tool`});continue}if(c.length===1&&c[0]===`lint`&&(l||d)){i.push({id:s.id,name:s.name,reason:`linting capability already covered by higher priority tool`});continue}r.push({id:s.id,name:s.name,reason:e.reason});for(let e of c)o.add(e);let f=await s.plan(t,n);a.push(...f)}}for(let i of e.getStandaloneAdapters()){let e=await i.detect(t);if(e.detected){r.push({id:i.id,name:i.name,reason:e.reason});let o=await i.plan(t,n);a.push(...o)}}let c=[],l=/* @__PURE__ */ new Set;for(let e of a)l.has(e.id)||(l.add(e.id),c.push(e));return{tasks:c,selectedTools:r,skippedTools:i,summary:jr(e,t,r,i,c)}}function jr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` +`)}function Mr(e,t){let n=[];if(t===`fix`){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,r=e[`format:write`]?`format:write`:e.format?`format`:e.fmt?`fmt`:void 0,i=e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:e.lint?`lint`:void 0;t?n.push({capability:`autofix`,scriptName:t}):(r&&n.push({capability:`format`,scriptName:r}),i&&n.push({capability:`lint`,scriptName:i}))}else{let t=e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0,r=e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0;t&&n.push({capability:`format`,scriptName:t}),r&&n.push({capability:`lint`,scriptName:r})}return n}var Nr=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Mr(t,`fix`);return n.length>0?{detected:!0,reason:`found autofix scripts: ${n.map(e=>`"${e.scriptName}"`).join(`, `)}`}:{detected:!1,reason:`no supported autofix scripts found in package.json`}}plan(e,t){let n=Mr(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Pr(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function Fr(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var Ir=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=Fr(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}async plan(e,t){let n=!!await Vt(`vp`,!1),r=n?`vp`:`npx`,i=n?[]:[`vp`];return t===`fix`?[{id:`vite-plus-fix`,toolId:this.id,capability:`autofix`,executable:r,args:[...i,`check`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp check --fix`}]:[{id:`vite-plus-check`,toolId:this.id,capability:`autofix`,executable:r,args:[...i,`check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp check`}]}},Lr=class{id=`biome`;name=`Biome`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Pr(t,`@biomejs/biome`),r=Fr(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}async plan(e,t){let n=!!await Vt(`biome`,!1),r=n?`biome`:`npx`,i=n?[]:[`biome`];return t===`fix`?[{id:`biome-check-fix`,toolId:this.id,capability:`autofix`,executable:r,args:[...i,`check`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: check --write .`}]:[{id:`biome-check`,toolId:this.id,capability:`autofix`,executable:r,args:[...i,`check`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check .`}]}},Rr=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Pr(t,`prettier`),r=!!t?.prettier,i=Fr(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}async plan(e,t){let n=!!await Vt(`prettier`,!1),r=n?`prettier`:`npx`,i=n?[]:[`prettier`];return t===`fix`?[{id:`prettier-format`,toolId:this.id,capability:`format`,executable:r,args:[...i,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,capability:`format`,executable:r,args:[...i,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},zr=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Pr(t,`eslint`),r=!!t?.eslintConfig,i=Fr(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}async plan(e,t){let n=!!await Vt(`eslint`,!1),r=n?`eslint`:`npx`,i=n?[]:[`eslint`];return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,capability:`lint`,executable:r,args:[...i,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,capability:`lint`,executable:r,args:[...i,`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},Br=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Pr(t,`oxlint`),r=Fr(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}async plan(e,t){let n=!!await Vt(`oxlint`,!1),r=n?`oxlint`:`npx`,i=n?[]:[`oxlint`];return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,capability:`lint`,executable:r,args:[...i,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,capability:`lint`,executable:r,args:[...i,`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},Vr=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Pr(t,`oxfmt`),r=Fr(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}async plan(e,t){let n=!!await Vt(`oxfmt`,!1),r=n?`oxfmt`:`npx`,i=n?[]:[`oxfmt`];return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,capability:`format`,executable:r,args:[...i,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,capability:`format`,executable:r,args:[...i,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},Hr=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Nr;vitePlusAdapter=new Ir;biomeAdapter=new Lr;prettierAdapter=new Rr;eslintAdapter=new zr;oxlintAdapter=new Br;oxfmtAdapter=new Vr;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},Ur=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??!1?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}async plan(e,t){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},Wr=class{id=`python`;name=`Python`;ruffAdapter=new Ur;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},Gr=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function Kr(){let e=new Gr;return e.registerProvider(new Wr),e.registerProvider(new Hr),e}const qr=Kr();async function Jr(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function Yr(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ar(qr,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await Jr(vn(n),e);let i=(await new kr().executeTasks(r)).find(e=>e.error);if(i?.error)throw i.error}async function Xr(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function Zr(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await Xr(e,r,t)}}async function Qr(e=process.cwd(),t){if(!(t??or(e)))return;if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);let n={cwd:e,hasPythonSource:!0},r=qr.getProvider(`python`)?.getAdapters(n).find(e=>e.id===`ruff`);if(!r)throw Error(`Ruff adapter not found in registry.`);let i=await r.plan(n,`fix`),a=(await new kr().executeTasks(i)).find(e=>e.error);if(a?.error)throw a.error}async function $r(e){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{return await Yr(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ei(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await Zr(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ti(e,t){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await Qr(e,t),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ni(e,t){let n=t??or(e);if(!n)return[];let r=[],i=ir(e),a=await ei(e,{ctx:i,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:i,hasSource:!0,isProject:!0})});a&&r.push(a);let o=await ti(e,n);return o&&r.push(o),r}async function ri(e=process.cwd()){let t=[],n=await $r(e);n&&t.push(n);let r=await ni(e,or(e));t.push(...r),t.length>0&&(Zt(`Failed to run scripts: ${t.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&ri();export{Yr as executeJsWorkflow,Zr as executePythonWorkflow,Qr as executeRuffAutofix,ri as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/dist/resolve-environment.mjs b/dist/resolve-environment.mjs index 4c530c20..0ad731ed 100644 --- a/dist/resolve-environment.mjs +++ b/dist/resolve-environment.mjs @@ -1,8 +1,8 @@ import{createRequire as e}from"node:module";import*as t from"os";import n,{EOL as r}from"os";import*as i from"crypto";import*as a from"fs";import{constants as o,promises as s}from"fs";import"path";import*as c from"events";import{fileURLToPath as l}from"node:url";import"child_process";import"timers";import u from"node:fs";import d from"node:path";var f=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t,t.exports),e=null),t.exports),p=/* @__PURE__ */ e(import.meta.url);function m(e){return e==null?``:typeof e==`string`||e instanceof String?e:JSON.stringify(e)}function h(e){return Object.keys(e).length?{title:e.title,file:e.file,line:e.startLine,endLine:e.endLine,col:e.startColumn,endColumn:e.endColumn}:{}}function g(e,n,r){let i=new _(e,n,r);process.stdout.write(i.toString()+t.EOL)}var _=class{constructor(e,t,n){e||=`missing.command`,this.command=e,this.properties=t,this.message=n}toString(){let e=`::`+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=` `;let t=!0;for(let n in this.properties)if(this.properties.hasOwnProperty(n)){let r=this.properties[n];r&&(t?t=!1:e+=`,`,e+=`${n}=${y(r)}`)}}return e+=`::${v(this.message)}`,e}};function v(e){return m(e).replace(/%/g,`%25`).replace(/\r/g,`%0D`).replace(/\n/g,`%0A`)}function y(e){return m(e).replace(/%/g,`%25`).replace(/\r/g,`%0D`).replace(/\n/g,`%0A`).replace(/:/g,`%3A`).replace(/,/g,`%2C`)}function b(e,n){let r=process.env[`GITHUB_${e}`];if(!r)throw Error(`Unable to find environment variable for file command ${e}`);if(!a.existsSync(r))throw Error(`Missing file at path: ${r}`);a.appendFileSync(r,`${m(n)}${t.EOL}`,{encoding:`utf8`})}function x(e,n){let r=`ghadelimiter_${i.randomUUID()}`,a=m(n);if(e.includes(r))throw Error(`Unexpected input: name should not contain the delimiter "${r}"`);if(a.includes(r))throw Error(`Unexpected input: value should not contain the delimiter "${r}"`);return`${e}<<${r}${t.EOL}${a}${t.EOL}${r}`}var S=/* @__PURE__ */ f((e=>{p(`net`),p(`tls`);var t=p(`http`);p(`https`);var n=p(`events`);p(`assert`);var r=p(`util`);function i(e){var n=this;n.options=e||{},n.proxyOptions=n.options.proxy||{},n.maxSockets=n.options.maxSockets||t.Agent.defaultMaxSockets,n.requests=[],n.sockets=[],n.on(`free`,function(e,t,r,i){for(var o=a(t,r,i),s=0,c=n.requests.length;s=this.maxSockets?i.requests.push(s):i.createSocket(s,function(t){t.on(`free`,n),t.on(`close`,r),t.on(`agentRemove`,r),e.onSocket(t);function n(){i.emit(`free`,t,s)}function r(e){i.removeSocket(t),t.removeListener(`free`,n),t.removeListener(`close`,r),t.removeListener(`agentRemove`,r)}})},i.prototype.createSocket=function(e,t){var n=this,r={};n.sockets.push(r);var i=o({},n.proxyOptions,{method:`CONNECT`,path:e.host+`:`+e.port,agent:!1,headers:{host:e.host+`:`+e.port}});e.localAddress&&(i.localAddress=e.localAddress),i.proxyAuth&&(i.headers=i.headers||{},i.headers[`Proxy-Authorization`]=`Basic `+new Buffer(i.proxyAuth).toString(`base64`)),s(`making CONNECT request`);var a=n.request(i);a.useChunkedEncodingByDefault=!1,a.once(`response`,c),a.once(`upgrade`,l),a.once(`connect`,u),a.once(`error`,d),a.end();function c(e){e.upgrade=!0}function l(e,t,n){process.nextTick(function(){u(e,t,n)})}function u(i,o,c){if(a.removeAllListeners(),o.removeAllListeners(),i.statusCode!==200){s(`tunneling socket could not be established, statusCode=%d`,i.statusCode),o.destroy();var l=/* @__PURE__ */ Error(`tunneling socket could not be established, statusCode=`+i.statusCode);l.code=`ECONNRESET`,e.request.emit(`error`,l),n.removeSocket(r)}else if(c.length>0){s(`got illegal response body from proxy`),o.destroy();var l=/* @__PURE__ */ Error(`got illegal response body from proxy`);l.code=`ECONNRESET`,e.request.emit(`error`,l),n.removeSocket(r)}else return s(`tunneling connection has established`),n.sockets[n.sockets.indexOf(r)]=o,t(o)}function d(t){a.removeAllListeners(),s(`tunneling socket could not be established, cause=%s -`,t.message,t.stack);var i=/* @__PURE__ */ Error(`tunneling socket could not be established, cause=`+t.message);i.code=`ECONNRESET`,e.request.emit(`error`,i),n.removeSocket(r)}},i.prototype.removeSocket=function(e){var t=this.sockets.indexOf(e);if(t!==-1){this.sockets.splice(t,1);var n=this.requests.shift();n&&this.createSocket(n,function(e){n.request.onSocket(e)})}};function a(e,t,n){return typeof e==`string`?{host:e,port:t,localAddress:n}:e}function o(e){for(var t=1,n=arguments.length;t{t.exports=S()})),w=/* @__PURE__ */ f(((e,t)=>{t.exports={kClose:Symbol(`close`),kDestroy:Symbol(`destroy`),kDispatch:Symbol(`dispatch`),kUrl:Symbol(`url`),kWriting:Symbol(`writing`),kResuming:Symbol(`resuming`),kQueue:Symbol(`queue`),kConnect:Symbol(`connect`),kConnecting:Symbol(`connecting`),kKeepAliveDefaultTimeout:Symbol(`default keep alive timeout`),kKeepAliveMaxTimeout:Symbol(`max keep alive timeout`),kKeepAliveTimeoutThreshold:Symbol(`keep alive timeout threshold`),kKeepAliveTimeoutValue:Symbol(`keep alive timeout`),kKeepAlive:Symbol(`keep alive`),kHeadersTimeout:Symbol(`headers timeout`),kBodyTimeout:Symbol(`body timeout`),kServerName:Symbol(`server name`),kLocalAddress:Symbol(`local address`),kHost:Symbol(`host`),kNoRef:Symbol(`no ref`),kBodyUsed:Symbol(`used`),kBody:Symbol(`abstracted request body`),kRunning:Symbol(`running`),kBlocking:Symbol(`blocking`),kPending:Symbol(`pending`),kSize:Symbol(`size`),kBusy:Symbol(`busy`),kQueued:Symbol(`queued`),kFree:Symbol(`free`),kConnected:Symbol(`connected`),kClosed:Symbol(`closed`),kNeedDrain:Symbol(`need drain`),kReset:Symbol(`reset`),kDestroyed:Symbol.for(`nodejs.stream.destroyed`),kResume:Symbol(`resume`),kOnError:Symbol(`on error`),kMaxHeadersSize:Symbol(`max headers size`),kRunningIdx:Symbol(`running index`),kPendingIdx:Symbol(`pending index`),kError:Symbol(`error`),kClients:Symbol(`clients`),kClient:Symbol(`client`),kParser:Symbol(`parser`),kOnDestroyed:Symbol(`destroy callbacks`),kPipelining:Symbol(`pipelining`),kSocket:Symbol(`socket`),kHostHeader:Symbol(`host header`),kConnector:Symbol(`connector`),kStrictContentLength:Symbol(`strict content length`),kMaxRedirections:Symbol(`maxRedirections`),kMaxRequests:Symbol(`maxRequestsPerClient`),kProxy:Symbol(`proxy agent options`),kCounter:Symbol(`socket request counter`),kInterceptors:Symbol(`dispatch interceptors`),kMaxResponseSize:Symbol(`max response size`),kHTTP2Session:Symbol(`http2Session`),kHTTP2SessionState:Symbol(`http2Session state`),kRetryHandlerDefaultRetry:Symbol(`retry agent default retry`),kConstruct:Symbol(`constructable`),kListeners:Symbol(`listeners`),kHTTPContext:Symbol(`http context`),kMaxConcurrentStreams:Symbol(`max concurrent streams`),kNoProxyAgent:Symbol(`no proxy agent`),kHttpProxyAgent:Symbol(`http proxy agent`),kHttpsProxyAgent:Symbol(`https proxy agent`)}})),T=/* @__PURE__ */ f(((e,t)=>{let n=Symbol.for(`undici.error.UND_ERR`);var r=class extends Error{constructor(e){super(e),this.name=`UndiciError`,this.code=`UND_ERR`}static[Symbol.hasInstance](e){return e&&e[n]===!0}[n]=!0};let i=Symbol.for(`undici.error.UND_ERR_CONNECT_TIMEOUT`);var a=class extends r{constructor(e){super(e),this.name=`ConnectTimeoutError`,this.message=e||`Connect Timeout Error`,this.code=`UND_ERR_CONNECT_TIMEOUT`}static[Symbol.hasInstance](e){return e&&e[i]===!0}[i]=!0};let o=Symbol.for(`undici.error.UND_ERR_HEADERS_TIMEOUT`);var s=class extends r{constructor(e){super(e),this.name=`HeadersTimeoutError`,this.message=e||`Headers Timeout Error`,this.code=`UND_ERR_HEADERS_TIMEOUT`}static[Symbol.hasInstance](e){return e&&e[o]===!0}[o]=!0};let c=Symbol.for(`undici.error.UND_ERR_HEADERS_OVERFLOW`);var l=class extends r{constructor(e){super(e),this.name=`HeadersOverflowError`,this.message=e||`Headers Overflow Error`,this.code=`UND_ERR_HEADERS_OVERFLOW`}static[Symbol.hasInstance](e){return e&&e[c]===!0}[c]=!0};let u=Symbol.for(`undici.error.UND_ERR_BODY_TIMEOUT`);var d=class extends r{constructor(e){super(e),this.name=`BodyTimeoutError`,this.message=e||`Body Timeout Error`,this.code=`UND_ERR_BODY_TIMEOUT`}static[Symbol.hasInstance](e){return e&&e[u]===!0}[u]=!0};let f=Symbol.for(`undici.error.UND_ERR_RESPONSE_STATUS_CODE`);var p=class extends r{constructor(e,t,n,r){super(e),this.name=`ResponseStatusCodeError`,this.message=e||`Response Status Code Error`,this.code=`UND_ERR_RESPONSE_STATUS_CODE`,this.body=r,this.status=t,this.statusCode=t,this.headers=n}static[Symbol.hasInstance](e){return e&&e[f]===!0}[f]=!0};let m=Symbol.for(`undici.error.UND_ERR_INVALID_ARG`);var h=class extends r{constructor(e){super(e),this.name=`InvalidArgumentError`,this.message=e||`Invalid Argument Error`,this.code=`UND_ERR_INVALID_ARG`}static[Symbol.hasInstance](e){return e&&e[m]===!0}[m]=!0};let g=Symbol.for(`undici.error.UND_ERR_INVALID_RETURN_VALUE`);var _=class extends r{constructor(e){super(e),this.name=`InvalidReturnValueError`,this.message=e||`Invalid Return Value Error`,this.code=`UND_ERR_INVALID_RETURN_VALUE`}static[Symbol.hasInstance](e){return e&&e[g]===!0}[g]=!0};let v=Symbol.for(`undici.error.UND_ERR_ABORT`);var y=class extends r{constructor(e){super(e),this.name=`AbortError`,this.message=e||`The operation was aborted`,this.code=`UND_ERR_ABORT`}static[Symbol.hasInstance](e){return e&&e[v]===!0}[v]=!0};let b=Symbol.for(`undici.error.UND_ERR_ABORTED`);var x=class extends y{constructor(e){super(e),this.name=`AbortError`,this.message=e||`Request aborted`,this.code=`UND_ERR_ABORTED`}static[Symbol.hasInstance](e){return e&&e[b]===!0}[b]=!0};let S=Symbol.for(`undici.error.UND_ERR_INFO`);var C=class extends r{constructor(e){super(e),this.name=`InformationalError`,this.message=e||`Request information`,this.code=`UND_ERR_INFO`}static[Symbol.hasInstance](e){return e&&e[S]===!0}[S]=!0};let w=Symbol.for(`undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH`);var T=class extends r{constructor(e){super(e),this.name=`RequestContentLengthMismatchError`,this.message=e||`Request body length does not match content-length header`,this.code=`UND_ERR_REQ_CONTENT_LENGTH_MISMATCH`}static[Symbol.hasInstance](e){return e&&e[w]===!0}[w]=!0};let E=Symbol.for(`undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH`);var D=class extends r{constructor(e){super(e),this.name=`ResponseContentLengthMismatchError`,this.message=e||`Response body length does not match content-length header`,this.code=`UND_ERR_RES_CONTENT_LENGTH_MISMATCH`}static[Symbol.hasInstance](e){return e&&e[E]===!0}[E]=!0};let O=Symbol.for(`undici.error.UND_ERR_DESTROYED`);var k=class extends r{constructor(e){super(e),this.name=`ClientDestroyedError`,this.message=e||`The client is destroyed`,this.code=`UND_ERR_DESTROYED`}static[Symbol.hasInstance](e){return e&&e[O]===!0}[O]=!0};let A=Symbol.for(`undici.error.UND_ERR_CLOSED`);var j=class extends r{constructor(e){super(e),this.name=`ClientClosedError`,this.message=e||`The client is closed`,this.code=`UND_ERR_CLOSED`}static[Symbol.hasInstance](e){return e&&e[A]===!0}[A]=!0};let M=Symbol.for(`undici.error.UND_ERR_SOCKET`);var N=class extends r{constructor(e,t){super(e),this.name=`SocketError`,this.message=e||`Socket error`,this.code=`UND_ERR_SOCKET`,this.socket=t}static[Symbol.hasInstance](e){return e&&e[M]===!0}[M]=!0};let P=Symbol.for(`undici.error.UND_ERR_NOT_SUPPORTED`);var F=class extends r{constructor(e){super(e),this.name=`NotSupportedError`,this.message=e||`Not supported error`,this.code=`UND_ERR_NOT_SUPPORTED`}static[Symbol.hasInstance](e){return e&&e[P]===!0}[P]=!0};let I=Symbol.for(`undici.error.UND_ERR_BPL_MISSING_UPSTREAM`);var L=class extends r{constructor(e){super(e),this.name=`MissingUpstreamError`,this.message=e||`No upstream has been added to the BalancedPool`,this.code=`UND_ERR_BPL_MISSING_UPSTREAM`}static[Symbol.hasInstance](e){return e&&e[I]===!0}[I]=!0};let ee=Symbol.for(`undici.error.UND_ERR_HTTP_PARSER`);var te=class extends Error{constructor(e,t,n){super(e),this.name=`HTTPParserError`,this.code=t?`HPE_${t}`:void 0,this.data=n?n.toString():void 0}static[Symbol.hasInstance](e){return e&&e[ee]===!0}[ee]=!0};let R=Symbol.for(`undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE`);var z=class extends r{constructor(e){super(e),this.name=`ResponseExceededMaxSizeError`,this.message=e||`Response content exceeded max size`,this.code=`UND_ERR_RES_EXCEEDED_MAX_SIZE`}static[Symbol.hasInstance](e){return e&&e[R]===!0}[R]=!0};let B=Symbol.for(`undici.error.UND_ERR_REQ_RETRY`);var V=class extends r{constructor(e,t,{headers:n,data:r}){super(e),this.name=`RequestRetryError`,this.message=e||`Request retry error`,this.code=`UND_ERR_REQ_RETRY`,this.statusCode=t,this.data=r,this.headers=n}static[Symbol.hasInstance](e){return e&&e[B]===!0}[B]=!0};let H=Symbol.for(`undici.error.UND_ERR_RESPONSE`);var ne=class extends r{constructor(e,t,{headers:n,data:r}){super(e),this.name=`ResponseError`,this.message=e||`Response error`,this.code=`UND_ERR_RESPONSE`,this.statusCode=t,this.data=r,this.headers=n}static[Symbol.hasInstance](e){return e&&e[H]===!0}[H]=!0};let re=Symbol.for(`undici.error.UND_ERR_PRX_TLS`);var U=class extends r{constructor(e,t,n){super(t,{cause:e,...n??{}}),this.name=`SecureProxyConnectionError`,this.message=t||`Secure Proxy Connection failed`,this.code=`UND_ERR_PRX_TLS`,this.cause=e}static[Symbol.hasInstance](e){return e&&e[re]===!0}[re]=!0};let ie=Symbol.for(`undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED`);t.exports={AbortError:y,HTTPParserError:te,UndiciError:r,HeadersTimeoutError:s,HeadersOverflowError:l,BodyTimeoutError:d,RequestContentLengthMismatchError:T,ConnectTimeoutError:a,ResponseStatusCodeError:p,InvalidArgumentError:h,InvalidReturnValueError:_,RequestAbortedError:x,ClientDestroyedError:k,ClientClosedError:j,InformationalError:C,SocketError:N,NotSupportedError:F,ResponseContentLengthMismatchError:D,BalancedPoolMissingUpstreamError:L,ResponseExceededMaxSizeError:z,RequestRetryError:V,ResponseError:ne,SecureProxyConnectionError:U,MessageSizeExceededError:class extends r{constructor(e){super(e),this.name=`MessageSizeExceededError`,this.message=e||`Max decompressed message size exceeded`,this.code=`UND_ERR_WS_MESSAGE_SIZE_EXCEEDED`}static[Symbol.hasInstance](e){return e&&e[ie]===!0}get[ie](){return!0}}}})),E=/* @__PURE__ */ f(((e,t)=>{let n={},r=/* @__PURE__ */ `Accept.Accept-Encoding.Accept-Language.Accept-Ranges.Access-Control-Allow-Credentials.Access-Control-Allow-Headers.Access-Control-Allow-Methods.Access-Control-Allow-Origin.Access-Control-Expose-Headers.Access-Control-Max-Age.Access-Control-Request-Headers.Access-Control-Request-Method.Age.Allow.Alt-Svc.Alt-Used.Authorization.Cache-Control.Clear-Site-Data.Connection.Content-Disposition.Content-Encoding.Content-Language.Content-Length.Content-Location.Content-Range.Content-Security-Policy.Content-Security-Policy-Report-Only.Content-Type.Cookie.Cross-Origin-Embedder-Policy.Cross-Origin-Opener-Policy.Cross-Origin-Resource-Policy.Date.Device-Memory.Downlink.ECT.ETag.Expect.Expect-CT.Expires.Forwarded.From.Host.If-Match.If-Modified-Since.If-None-Match.If-Range.If-Unmodified-Since.Keep-Alive.Last-Modified.Link.Location.Max-Forwards.Origin.Permissions-Policy.Pragma.Proxy-Authenticate.Proxy-Authorization.RTT.Range.Referer.Referrer-Policy.Refresh.Retry-After.Sec-WebSocket-Accept.Sec-WebSocket-Extensions.Sec-WebSocket-Key.Sec-WebSocket-Protocol.Sec-WebSocket-Version.Server.Server-Timing.Service-Worker-Allowed.Service-Worker-Navigation-Preload.Set-Cookie.SourceMap.Strict-Transport-Security.Supports-Loading-Mode.TE.Timing-Allow-Origin.Trailer.Transfer-Encoding.Upgrade.Upgrade-Insecure-Requests.User-Agent.Vary.Via.WWW-Authenticate.X-Content-Type-Options.X-DNS-Prefetch-Control.X-Frame-Options.X-Permitted-Cross-Domain-Policies.X-Powered-By.X-Requested-With.X-XSS-Protection`.split(`.`);for(let e=0;e{let{wellknownHeaderNames:n,headerNameLowerCasedRecord:r}=E();var i=class e{value=null;left=null;middle=null;right=null;code;constructor(t,n,r){if(r===void 0||r>=t.length)throw TypeError(`Unreachable`);if((this.code=t.charCodeAt(r))>127)throw TypeError(`key must be ascii string`);t.length===++r?this.value=n:this.middle=new e(t,n,r)}add(t,n){let r=t.length;if(r===0)throw TypeError(`Unreachable`);let i=0,a=this;for(;;){let o=t.charCodeAt(i);if(o>127)throw TypeError(`key must be ascii string`);if(a.code===o){if(r===++i){a.value=n;break}if(a.middle!==null)a=a.middle;else{a.middle=new e(t,n,i);break}}else if(a.code=65&&(i|=32);r!==null;){if(i===r.code){if(t===++n)return r;r=r.middle;break}r=r.code{let n=p(`node:assert`),{kDestroyed:r,kBodyUsed:i,kListeners:a,kBody:o}=w(),{IncomingMessage:s}=p(`node:http`),c=p(`node:stream`),l=p(`node:net`),{Blob:u}=p(`node:buffer`),d=p(`node:util`),{stringify:f}=p(`node:querystring`),{EventEmitter:m}=p(`node:events`),{InvalidArgumentError:h}=T(),{headerNameLowerCasedRecord:g}=E(),{tree:_}=D(),[v,y]=process.versions.node.split(`.`).map(e=>Number(e));var b=class{constructor(e){this[o]=e,this[i]=!1}async*[Symbol.asyncIterator](){n(!this[i],`disturbed`),this[i]=!0,yield*this[o]}};function x(e){return C(e)?(te(e)===0&&e.on(`data`,function(){n(!1)}),typeof e.readableDidRead!=`boolean`&&(e[i]=!1,m.prototype.on.call(e,`data`,function(){this[i]=!0})),e):e&&typeof e.pipeTo==`function`||e&&typeof e!=`string`&&!ArrayBuffer.isView(e)&&ee(e)?new b(e):e}function S(){}function C(e){return e&&typeof e==`object`&&typeof e.pipe==`function`&&typeof e.on==`function`}function O(e){if(e===null)return!1;if(e instanceof u)return!0;if(typeof e!=`object`)return!1;{let t=e[Symbol.toStringTag];return(t===`Blob`||t===`File`)&&(`stream`in e&&typeof e.stream==`function`||`arrayBuffer`in e&&typeof e.arrayBuffer==`function`)}}function k(e,t){if(e.includes(`?`)||e.includes(`#`))throw Error(`Query params cannot be passed when url already contains "?" or "#".`);let n=f(t);return n&&(e+=`?`+n),e}function A(e){let t=parseInt(e,10);return t===Number(e)&&t>=0&&t<=65535}function j(e){return e!=null&&e[0]===`h`&&e[1]===`t`&&e[2]===`t`&&e[3]===`p`&&(e[4]===`:`||e[4]===`s`&&e[5]===`:`)}function M(e){if(typeof e==`string`){if(e=new URL(e),!j(e.origin||e.protocol))throw new h("Invalid URL protocol: the URL must start with `http:` or `https:`.");return e}if(!e||typeof e!=`object`)throw new h(`Invalid URL: The URL argument must be a non-null object.`);if(!(e instanceof URL)){if(e.port!=null&&e.port!==``&&A(e.port)===!1)throw new h(`Invalid URL: port must be a valid integer or a string representation of an integer.`);if(e.path!=null&&typeof e.path!=`string`)throw new h(`Invalid URL path: the path must be a string or null/undefined.`);if(e.pathname!=null&&typeof e.pathname!=`string`)throw new h(`Invalid URL pathname: the pathname must be a string or null/undefined.`);if(e.hostname!=null&&typeof e.hostname!=`string`)throw new h(`Invalid URL hostname: the hostname must be a string or null/undefined.`);if(e.origin!=null&&typeof e.origin!=`string`)throw new h(`Invalid URL origin: the origin must be a string or null/undefined.`);if(!j(e.origin||e.protocol))throw new h("Invalid URL protocol: the URL must start with `http:` or `https:`.");let t=e.port==null?e.protocol===`https:`?443:80:e.port,n=e.origin==null?`${e.protocol||``}//${e.hostname||``}:${t}`:e.origin,r=e.path==null?`${e.pathname||``}${e.search||``}`:e.path;return n[n.length-1]===`/`&&(n=n.slice(0,n.length-1)),r&&r[0]!==`/`&&(r=`/${r}`),new URL(`${n}${r}`)}if(!j(e.origin||e.protocol))throw new h("Invalid URL protocol: the URL must start with `http:` or `https:`.");return e}function N(e){if(e=M(e),e.pathname!==`/`||e.search||e.hash)throw new h(`invalid url`);return e}function P(e){if(e[0]===`[`){let t=e.indexOf(`]`);return n(t!==-1),e.substring(1,t)}let t=e.indexOf(`:`);return t===-1?e:e.substring(0,t)}function F(e){if(!e)return null;n(typeof e==`string`);let t=P(e);return l.isIP(t)?``:t}function I(e){return JSON.parse(JSON.stringify(e))}function L(e){return e!=null&&typeof e[Symbol.asyncIterator]==`function`}function ee(e){return!(e==null||typeof e[Symbol.iterator]!=`function`&&typeof e[Symbol.asyncIterator]!=`function`)}function te(e){if(e==null)return 0;if(C(e)){let t=e._readableState;return t&&t.objectMode===!1&&t.ended===!0&&Number.isFinite(t.length)?t.length:null}return O(e)?e.size==null?null:e.size:ie(e)?e.byteLength:null}function R(e){return e&&!!(e.destroyed||e[r]||c.isDestroyed?.(e))}function z(e,t){e!=null&&C(e)&&!R(e)&&(typeof e.destroy==`function`?(Object.getPrototypeOf(e).constructor===s&&(e.socket=null),e.destroy(t)):t&&queueMicrotask(()=>{e.emit(`error`,t)}),e.destroyed!==!0&&(e[r]=!0))}let B=/timeout=(\d+)/;function V(e){let t=e.toString().match(B);return t?parseInt(t[1],10)*1e3:null}function H(e){return typeof e==`string`?g[e]??e.toLowerCase():_.lookup(e)??e.toString(`latin1`).toLowerCase()}function ne(e){return _.lookup(e)??e.toString(`latin1`).toLowerCase()}function re(e,t){t===void 0&&(t={});for(let n=0;ne.toString(`utf8`)):i.toString(`utf8`)}}return`content-length`in t&&`content-disposition`in t&&(t[`content-disposition`]=Buffer.from(t[`content-disposition`]).toString(`latin1`)),t}function U(e){let t=e.length,n=Array(t),r=!1,i=-1,a,o,s=0;for(let t=0;t{e.close(),e.byobRequest?.respond(0)});else{let t=Buffer.isBuffer(r)?r:Buffer.from(r);t.byteLength&&e.enqueue(new Uint8Array(t))}return e.desiredSize>0},async cancel(e){await t.return()},type:`bytes`})}function ce(e){return e&&typeof e==`object`&&typeof e.append==`function`&&typeof e.delete==`function`&&typeof e.get==`function`&&typeof e.getAll==`function`&&typeof e.has==`function`&&typeof e.set==`function`&&e[Symbol.toStringTag]===`FormData`}function q(e,t){return`addEventListener`in e?(e.addEventListener(`abort`,t,{once:!0}),()=>e.removeEventListener(`abort`,t)):(e.addListener(`abort`,t),()=>e.removeListener(`abort`,t))}let le=typeof String.prototype.toWellFormed==`function`,J=typeof String.prototype.isWellFormed==`function`;function ue(e){return le?`${e}`.toWellFormed():d.toUSVString(e)}function de(e){return J?`${e}`.isWellFormed():ue(e)===`${e}`}function Y(e){switch(e){case 34:case 40:case 41:case 44:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 123:case 125:return!1;default:return e>=33&&e<=126}}function fe(e){if(e.length===0)return!1;for(let t=0;t{let n=p(`node:diagnostics_channel`),r=p(`node:util`),i=r.debuglog(`undici`),a=r.debuglog(`fetch`),o=r.debuglog(`websocket`),s=!1,c={beforeConnect:n.channel(`undici:client:beforeConnect`),connected:n.channel(`undici:client:connected`),connectError:n.channel(`undici:client:connectError`),sendHeaders:n.channel(`undici:client:sendHeaders`),create:n.channel(`undici:request:create`),bodySent:n.channel(`undici:request:bodySent`),headers:n.channel(`undici:request:headers`),trailers:n.channel(`undici:request:trailers`),error:n.channel(`undici:request:error`),open:n.channel(`undici:websocket:open`),close:n.channel(`undici:websocket:close`),socketError:n.channel(`undici:websocket:socket_error`),ping:n.channel(`undici:websocket:ping`),pong:n.channel(`undici:websocket:pong`)};if(i.enabled||a.enabled){let e=a.enabled?a:i;n.channel(`undici:client:beforeConnect`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a}}=t;e(`connecting to %s using %s%s`,`${a}${i?`:${i}`:``}`,r,n)}),n.channel(`undici:client:connected`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a}}=t;e(`connected to %s using %s%s`,`${a}${i?`:${i}`:``}`,r,n)}),n.channel(`undici:client:connectError`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a},error:o}=t;e(`connection to %s using %s%s errored - %s`,`${a}${i?`:${i}`:``}`,r,n,o.message)}),n.channel(`undici:client:sendHeaders`).subscribe(t=>{let{request:{method:n,path:r,origin:i}}=t;e(`sending request to %s %s/%s`,n,i,r)}),n.channel(`undici:request:headers`).subscribe(t=>{let{request:{method:n,path:r,origin:i},response:{statusCode:a}}=t;e(`received response to %s %s/%s - HTTP %d`,n,i,r,a)}),n.channel(`undici:request:trailers`).subscribe(t=>{let{request:{method:n,path:r,origin:i}}=t;e(`trailers received from %s %s/%s`,n,i,r)}),n.channel(`undici:request:error`).subscribe(t=>{let{request:{method:n,path:r,origin:i},error:a}=t;e(`request to %s %s/%s errored - %s`,n,i,r,a.message)}),s=!0}if(o.enabled){if(!s){let e=i.enabled?i:o;n.channel(`undici:client:beforeConnect`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a}}=t;e(`connecting to %s%s using %s%s`,a,i?`:${i}`:``,r,n)}),n.channel(`undici:client:connected`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a}}=t;e(`connected to %s%s using %s%s`,a,i?`:${i}`:``,r,n)}),n.channel(`undici:client:connectError`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a},error:o}=t;e(`connection to %s%s using %s%s errored - %s`,a,i?`:${i}`:``,r,n,o.message)}),n.channel(`undici:client:sendHeaders`).subscribe(t=>{let{request:{method:n,path:r,origin:i}}=t;e(`sending request to %s %s/%s`,n,i,r)})}n.channel(`undici:websocket:open`).subscribe(e=>{let{address:{address:t,port:n}}=e;o(`connection opened %s%s`,t,n?`:${n}`:``)}),n.channel(`undici:websocket:close`).subscribe(e=>{let{websocket:t,code:n,reason:r}=e;o(`closed connection to %s - %s %s`,t.url,n,r)}),n.channel(`undici:websocket:socket_error`).subscribe(e=>{o(`connection errored - %s`,e.message)}),n.channel(`undici:websocket:ping`).subscribe(e=>{o(`ping received`)}),n.channel(`undici:websocket:pong`).subscribe(e=>{o(`pong received`)})}t.exports={channels:c}})),A=/* @__PURE__ */ f(((e,t)=>{let{InvalidArgumentError:n,NotSupportedError:r}=T(),i=p(`node:assert`),{isValidHTTPToken:a,isValidHeaderValue:o,isStream:s,destroy:c,isBuffer:l,isFormDataLike:u,isIterable:d,isBlobLike:f,buildURL:m,validateHandler:h,getServerName:g,normalizedMethodRecords:_}=O(),{channels:v}=k(),{headerNameLowerCasedRecord:y}=E(),b=/[^\u0021-\u00ff]/,x=Symbol(`handler`);var S=class{constructor(e,{path:t,method:r,body:i,headers:p,query:y,idempotent:S,blocking:w,upgrade:T,headersTimeout:E,bodyTimeout:D,reset:O,throwOnError:k,expectContinue:A,servername:j},M){if(typeof t!=`string`)throw new n(`path must be a string`);if(t[0]!==`/`&&!(t.startsWith(`http://`)||t.startsWith(`https://`))&&r!==`CONNECT`)throw new n(`path must be an absolute URL or start with a slash`);if(b.test(t))throw new n(`invalid request path`);if(typeof r!=`string`)throw new n(`method must be a string`);if(_[r]===void 0&&!a(r))throw new n(`invalid request method`);if(T&&typeof T!=`string`)throw new n(`upgrade must be a string`);if(T&&!o(T))throw new n(`invalid upgrade header`);if(E!=null&&(!Number.isFinite(E)||E<0))throw new n(`invalid headersTimeout`);if(D!=null&&(!Number.isFinite(D)||D<0))throw new n(`invalid bodyTimeout`);if(O!=null&&typeof O!=`boolean`)throw new n(`invalid reset`);if(A!=null&&typeof A!=`boolean`)throw new n(`invalid expectContinue`);if(this.headersTimeout=E,this.bodyTimeout=D,this.throwOnError=k===!0,this.method=r,this.abort=null,i==null)this.body=null;else if(s(i)){this.body=i;let e=this.body._readableState;e&&e.autoDestroy||(this.endHandler=function(){c(this)},this.body.on(`end`,this.endHandler)),this.errorHandler=e=>{this.abort?this.abort(e):this.error=e},this.body.on(`error`,this.errorHandler)}else if(l(i))this.body=i.byteLength?i:null;else if(ArrayBuffer.isView(i))this.body=i.buffer.byteLength?Buffer.from(i.buffer,i.byteOffset,i.byteLength):null;else if(i instanceof ArrayBuffer)this.body=i.byteLength?Buffer.from(i):null;else if(typeof i==`string`)this.body=i.length?Buffer.from(i):null;else if(u(i)||d(i)||f(i))this.body=i;else throw new n(`body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable`);if(this.completed=!1,this.aborted=!1,this.upgrade=T||null,this.path=y?m(t,y):t,this.origin=e,this.idempotent=S??(r===`HEAD`||r===`GET`),this.blocking=w??!1,this.reset=O??null,this.host=null,this.contentLength=null,this.contentType=null,this.headers=[],this.expectContinue=A??!1,Array.isArray(p)){if(p.length%2!=0)throw new n(`headers array must be even`);for(let e=0;e{let n=p(`node:events`);var r=class extends n{dispatch(){throw Error(`not implemented`)}close(){throw Error(`not implemented`)}destroy(){throw Error(`not implemented`)}compose(...e){let t=Array.isArray(e[0])?e[0]:e,n=this.dispatch.bind(this);for(let e of t)if(e!=null){if(typeof e!=`function`)throw TypeError(`invalid interceptor, expected function received ${typeof e}`);if(n=e(n),n==null||typeof n!=`function`||n.length!==2)throw TypeError(`invalid interceptor`)}return new i(this,n)}},i=class extends r{#e=null;#t=null;constructor(e,t){super(),this.#e=e,this.#t=t}dispatch(...e){this.#t(...e)}close(...e){return this.#e.close(...e)}destroy(...e){return this.#e.destroy(...e)}};t.exports=r})),M=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:buffer`),r=j(),{ClientDestroyedError:i,ClientClosedError:a,InvalidArgumentError:o}=T(),{kDestroy:s,kClose:c,kClosed:l,kDestroyed:u,kDispatch:d,kInterceptors:f}=w(),m=Symbol(`onDestroyed`),h=Symbol(`onClosed`),g=Symbol(`Intercepted Dispatch`),_=Symbol(`webSocketOptions`),v=Symbol(`eventSourceOptions`);t.exports=class extends r{constructor(e){super(),this[u]=!1,this[m]=null,this[l]=!1,this[h]=[],this[_]=e?.webSocket??{},this[v]=e?.eventSource??{}}get webSocketOptions(){return{maxFragments:this[_].maxFragments??131072,maxPayloadSize:this[_].maxPayloadSize??134217728}}get eventSourceOptions(){return{maxEventSize:this[v].maxEventSize??n.kStringMaxLength}}get destroyed(){return this[u]}get closed(){return this[l]}get interceptors(){return this[f]}set interceptors(e){if(e){for(let t=e.length-1;t>=0;t--)if(typeof this[f][t]!=`function`)throw new o(`interceptor must be an function`)}this[f]=e}close(e){if(e===void 0)return new Promise((e,t)=>{this.close((n,r)=>n?t(n):e(r))});if(typeof e!=`function`)throw new o(`invalid callback`);if(this[u]){queueMicrotask(()=>e(new i,null));return}if(this[l]){this[h]?this[h].push(e):queueMicrotask(()=>e(null,null));return}this[l]=!0,this[h].push(e);let t=()=>{let e=this[h];this[h]=null;for(let t=0;tthis.destroy()).then(()=>{queueMicrotask(t)})}destroy(e,t){if(typeof e==`function`&&(t=e,e=null),t===void 0)return new Promise((t,n)=>{this.destroy(e,(e,r)=>e?/* istanbul ignore next: should never error */n(e):t(r))});if(typeof t!=`function`)throw new o(`invalid callback`);if(this[u]){this[m]?this[m].push(t):queueMicrotask(()=>t(null,null));return}e||=new i,this[u]=!0,this[m]=this[m]||[],this[m].push(t);let n=()=>{let e=this[m];this[m]=null;for(let t=0;t{queueMicrotask(n)})}[g](e,t){if(!this[f]||this[f].length===0)return this[g]=this[d],this[d](e,t);let n=this[d].bind(this);for(let e=this[f].length-1;e>=0;e--)n=this[f][e](n);return this[g]=n,n(e,t)}dispatch(e,t){if(!t||typeof t!=`object`)throw new o(`handler must be an object`);try{if(!e||typeof e!=`object`)throw new o(`opts must be an object.`);if(this[u]||this[m])throw new i;if(this[l])throw new a;return this[g](e,t)}catch(e){if(typeof t.onError!=`function`)throw new o(`invalid onError method`);return t.onError(e),!1}}}})),N=/* @__PURE__ */ f(((e,t)=>{let n=0,r=1e3,i,a=Symbol(`kFastTimer`),o=[];function s(){n+=499;let e=0,t=o.length;for(;e=r._idleStart+r._idleTimeout&&(r._state=-1,r._idleStart=-1,r._onTimeout(r._timerArg)),r._state===-1?(r._state=-2,--t!==0&&(o[e]=o[t])):++e}o.length=t,o.length!==0&&c()}function c(){i?i.refresh():(clearTimeout(i),i=setTimeout(s,499),i.unref&&i.unref())}var l=class{[a]=!0;_state=-2;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(e,t,n){this._onTimeout=e,this._idleTimeout=t,this._timerArg=n,this.refresh()}refresh(){this._state===-2&&o.push(this),i&&o.length!==1||c(),this._state=0}clear(){this._state=-1,this._idleStart=-1}};t.exports={setTimeout(e,t,n){return t<=r?setTimeout(e,t,n):new l(e,t,n)},clearTimeout(e){e[a]?e.clear():clearTimeout(e)},setFastTimeout(e,t,n){return new l(e,t,n)},clearFastTimeout(e){e.clear()},now(){return n},tick(e=0){n+=e-r+1,s(),s()},reset(){n=0,o.length=0,clearTimeout(i),i=null},kFastTimer:a}})),P=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:net`),r=p(`node:assert`),i=O(),{InvalidArgumentError:a,ConnectTimeoutError:o}=T(),s=N();function c(){}let l,u;u=global.FinalizationRegistry&&!(process.env.NODE_V8_COVERAGE||process.env.UNDICI_NO_FG)?class{constructor(e){this._maxCachedSessions=e,this._sessionCache=/* @__PURE__ */ new Map,this._sessionRegistry=new global.FinalizationRegistry(e=>{if(this._sessionCache.size=this._maxCachedSessions){let{value:e}=this._sessionCache.keys().next();this._sessionCache.delete(e)}this._sessionCache.set(e,t)}}};function d({allowH2:e,maxCachedSessions:t,socketPath:o,timeout:s,session:c,...d}){if(t!=null&&(!Number.isInteger(t)||t<0))throw new a(`maxCachedSessions must be a positive integer or zero`);let m={path:o,...d},h=new u(t??100);return s??=1e4,e??=!1,function({hostname:t,host:a,protocol:o,port:u,servername:d,localAddress:g,httpSocket:_},v){let y;if(o===`https:`){l||=p(`node:tls`),d=d||m.servername||i.getServerName(a)||null;let n=d||t;r(n);let o=c||h.get(n)||null;u||=443,y=l.connect({highWaterMark:16384,...m,servername:d,session:o,localAddress:g,ALPNProtocols:e?[`http/1.1`,`h2`]:[`http/1.1`],socket:_,port:u,host:t}),y.on(`session`,function(e){h.set(n,e)})}else r(!_,`httpSocket can only be sent on TLS update`),u||=80,y=n.connect({highWaterMark:65536,...m,localAddress:g,port:u,host:t});if(m.keepAlive==null||m.keepAlive){let e=m.keepAliveInitialDelay===void 0?6e4:m.keepAliveInitialDelay;y.setKeepAlive(!0,e)}let b=f(new WeakRef(y),{timeout:s,hostname:t,port:u});return y.setNoDelay(!0).once(o===`https:`?`secureConnect`:`connect`,function(){if(queueMicrotask(b),v){let e=v;v=null,e(null,this)}}).on(`error`,function(e){if(queueMicrotask(b),v){let t=v;v=null,t(e)}}),y}}let f=process.platform===`win32`?(e,t)=>{if(!t.timeout)return c;let n=null,r=null,i=s.setFastTimeout(()=>{n=setImmediate(()=>{r=setImmediate(()=>m(e.deref(),t))})},t.timeout);return()=>{s.clearFastTimeout(i),clearImmediate(n),clearImmediate(r)}}:(e,t)=>{if(!t.timeout)return c;let n=null,r=s.setFastTimeout(()=>{n=setImmediate(()=>{m(e.deref(),t)})},t.timeout);return()=>{s.clearFastTimeout(r),clearImmediate(n)}};function m(e,t){if(e==null)return;let n=`Connect Timeout Error`;Array.isArray(e.autoSelectFamilyAttemptedAddresses)?n+=` (attempted addresses: ${e.autoSelectFamilyAttemptedAddresses.join(`, `)},`:n+=` (attempted address: ${t.hostname}:${t.port},`,n+=` timeout: ${t.timeout}ms)`,i.destroy(e,new o(n))}t.exports=d})),F=/* @__PURE__ */ f((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.enumToMap=void 0;function t(e){let t={};return Object.keys(e).forEach(n=>{let r=e[n];typeof r==`number`&&(t[n]=r)}),t}e.enumToMap=t})),I=/* @__PURE__ */ f((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.SPECIAL_HEADERS=e.HEADER_STATE=e.MINOR=e.MAJOR=e.CONNECTION_TOKEN_CHARS=e.HEADER_CHARS=e.TOKEN=e.STRICT_TOKEN=e.HEX=e.URL_CHAR=e.STRICT_URL_CHAR=e.USERINFO_CHARS=e.MARK=e.ALPHANUM=e.NUM=e.HEX_MAP=e.NUM_MAP=e.ALPHA=e.FINISH=e.H_METHOD_MAP=e.METHOD_MAP=e.METHODS_RTSP=e.METHODS_ICE=e.METHODS_HTTP=e.METHODS=e.LENIENT_FLAGS=e.FLAGS=e.TYPE=e.ERROR=void 0;let t=F();(function(e){e[e.OK=0]=`OK`,e[e.INTERNAL=1]=`INTERNAL`,e[e.STRICT=2]=`STRICT`,e[e.LF_EXPECTED=3]=`LF_EXPECTED`,e[e.UNEXPECTED_CONTENT_LENGTH=4]=`UNEXPECTED_CONTENT_LENGTH`,e[e.CLOSED_CONNECTION=5]=`CLOSED_CONNECTION`,e[e.INVALID_METHOD=6]=`INVALID_METHOD`,e[e.INVALID_URL=7]=`INVALID_URL`,e[e.INVALID_CONSTANT=8]=`INVALID_CONSTANT`,e[e.INVALID_VERSION=9]=`INVALID_VERSION`,e[e.INVALID_HEADER_TOKEN=10]=`INVALID_HEADER_TOKEN`,e[e.INVALID_CONTENT_LENGTH=11]=`INVALID_CONTENT_LENGTH`,e[e.INVALID_CHUNK_SIZE=12]=`INVALID_CHUNK_SIZE`,e[e.INVALID_STATUS=13]=`INVALID_STATUS`,e[e.INVALID_EOF_STATE=14]=`INVALID_EOF_STATE`,e[e.INVALID_TRANSFER_ENCODING=15]=`INVALID_TRANSFER_ENCODING`,e[e.CB_MESSAGE_BEGIN=16]=`CB_MESSAGE_BEGIN`,e[e.CB_HEADERS_COMPLETE=17]=`CB_HEADERS_COMPLETE`,e[e.CB_MESSAGE_COMPLETE=18]=`CB_MESSAGE_COMPLETE`,e[e.CB_CHUNK_HEADER=19]=`CB_CHUNK_HEADER`,e[e.CB_CHUNK_COMPLETE=20]=`CB_CHUNK_COMPLETE`,e[e.PAUSED=21]=`PAUSED`,e[e.PAUSED_UPGRADE=22]=`PAUSED_UPGRADE`,e[e.PAUSED_H2_UPGRADE=23]=`PAUSED_H2_UPGRADE`,e[e.USER=24]=`USER`})(e.ERROR||={}),(function(e){e[e.BOTH=0]=`BOTH`,e[e.REQUEST=1]=`REQUEST`,e[e.RESPONSE=2]=`RESPONSE`})(e.TYPE||={}),(function(e){e[e.CONNECTION_KEEP_ALIVE=1]=`CONNECTION_KEEP_ALIVE`,e[e.CONNECTION_CLOSE=2]=`CONNECTION_CLOSE`,e[e.CONNECTION_UPGRADE=4]=`CONNECTION_UPGRADE`,e[e.CHUNKED=8]=`CHUNKED`,e[e.UPGRADE=16]=`UPGRADE`,e[e.CONTENT_LENGTH=32]=`CONTENT_LENGTH`,e[e.SKIPBODY=64]=`SKIPBODY`,e[e.TRAILING=128]=`TRAILING`,e[e.TRANSFER_ENCODING=512]=`TRANSFER_ENCODING`})(e.FLAGS||={}),(function(e){e[e.HEADERS=1]=`HEADERS`,e[e.CHUNKED_LENGTH=2]=`CHUNKED_LENGTH`,e[e.KEEP_ALIVE=4]=`KEEP_ALIVE`})(e.LENIENT_FLAGS||={});var n;(function(e){e[e.DELETE=0]=`DELETE`,e[e.GET=1]=`GET`,e[e.HEAD=2]=`HEAD`,e[e.POST=3]=`POST`,e[e.PUT=4]=`PUT`,e[e.CONNECT=5]=`CONNECT`,e[e.OPTIONS=6]=`OPTIONS`,e[e.TRACE=7]=`TRACE`,e[e.COPY=8]=`COPY`,e[e.LOCK=9]=`LOCK`,e[e.MKCOL=10]=`MKCOL`,e[e.MOVE=11]=`MOVE`,e[e.PROPFIND=12]=`PROPFIND`,e[e.PROPPATCH=13]=`PROPPATCH`,e[e.SEARCH=14]=`SEARCH`,e[e.UNLOCK=15]=`UNLOCK`,e[e.BIND=16]=`BIND`,e[e.REBIND=17]=`REBIND`,e[e.UNBIND=18]=`UNBIND`,e[e.ACL=19]=`ACL`,e[e.REPORT=20]=`REPORT`,e[e.MKACTIVITY=21]=`MKACTIVITY`,e[e.CHECKOUT=22]=`CHECKOUT`,e[e.MERGE=23]=`MERGE`,e[e[`M-SEARCH`]=24]=`M-SEARCH`,e[e.NOTIFY=25]=`NOTIFY`,e[e.SUBSCRIBE=26]=`SUBSCRIBE`,e[e.UNSUBSCRIBE=27]=`UNSUBSCRIBE`,e[e.PATCH=28]=`PATCH`,e[e.PURGE=29]=`PURGE`,e[e.MKCALENDAR=30]=`MKCALENDAR`,e[e.LINK=31]=`LINK`,e[e.UNLINK=32]=`UNLINK`,e[e.SOURCE=33]=`SOURCE`,e[e.PRI=34]=`PRI`,e[e.DESCRIBE=35]=`DESCRIBE`,e[e.ANNOUNCE=36]=`ANNOUNCE`,e[e.SETUP=37]=`SETUP`,e[e.PLAY=38]=`PLAY`,e[e.PAUSE=39]=`PAUSE`,e[e.TEARDOWN=40]=`TEARDOWN`,e[e.GET_PARAMETER=41]=`GET_PARAMETER`,e[e.SET_PARAMETER=42]=`SET_PARAMETER`,e[e.REDIRECT=43]=`REDIRECT`,e[e.RECORD=44]=`RECORD`,e[e.FLUSH=45]=`FLUSH`})(n=e.METHODS||={}),e.METHODS_HTTP=[n.DELETE,n.GET,n.HEAD,n.POST,n.PUT,n.CONNECT,n.OPTIONS,n.TRACE,n.COPY,n.LOCK,n.MKCOL,n.MOVE,n.PROPFIND,n.PROPPATCH,n.SEARCH,n.UNLOCK,n.BIND,n.REBIND,n.UNBIND,n.ACL,n.REPORT,n.MKACTIVITY,n.CHECKOUT,n.MERGE,n[`M-SEARCH`],n.NOTIFY,n.SUBSCRIBE,n.UNSUBSCRIBE,n.PATCH,n.PURGE,n.MKCALENDAR,n.LINK,n.UNLINK,n.PRI,n.SOURCE],e.METHODS_ICE=[n.SOURCE],e.METHODS_RTSP=[n.OPTIONS,n.DESCRIBE,n.ANNOUNCE,n.SETUP,n.PLAY,n.PAUSE,n.TEARDOWN,n.GET_PARAMETER,n.SET_PARAMETER,n.REDIRECT,n.RECORD,n.FLUSH,n.GET,n.POST],e.METHOD_MAP=t.enumToMap(n),e.H_METHOD_MAP={},Object.keys(e.METHOD_MAP).forEach(t=>{/^H/.test(t)&&(e.H_METHOD_MAP[t]=e.METHOD_MAP[t])}),(function(e){e[e.SAFE=0]=`SAFE`,e[e.SAFE_WITH_CB=1]=`SAFE_WITH_CB`,e[e.UNSAFE=2]=`UNSAFE`})(e.FINISH||={}),e.ALPHA=[];for(let t=65;t<=90;t++)e.ALPHA.push(String.fromCharCode(t)),e.ALPHA.push(String.fromCharCode(t+32));e.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9},e.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},e.NUM=[`0`,`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`],e.ALPHANUM=e.ALPHA.concat(e.NUM),e.MARK=[`-`,`_`,`.`,`!`,`~`,`*`,`'`,`(`,`)`],e.USERINFO_CHARS=e.ALPHANUM.concat(e.MARK).concat([`%`,`;`,`:`,`&`,`=`,`+`,`$`,`,`]),e.STRICT_URL_CHAR=(/* @__PURE__ */ `!"$%&'()*+,-./:;<=>@[\\]^_\`{|}~`.split(``)).concat(e.ALPHANUM),e.URL_CHAR=e.STRICT_URL_CHAR.concat([` `,`\f`]);for(let t=128;t<=255;t++)e.URL_CHAR.push(t);e.HEX=e.NUM.concat([`a`,`b`,`c`,`d`,`e`,`f`,`A`,`B`,`C`,`D`,`E`,`F`]),e.STRICT_TOKEN=[`!`,`#`,`$`,`%`,`&`,`'`,`*`,`+`,`-`,`.`,`^`,`_`,"`",`|`,`~`].concat(e.ALPHANUM),e.TOKEN=e.STRICT_TOKEN.concat([` `]),e.HEADER_CHARS=[` `];for(let t=32;t<=255;t++)t!==127&&e.HEADER_CHARS.push(t);e.CONNECTION_TOKEN_CHARS=e.HEADER_CHARS.filter(e=>e!==44),e.MAJOR=e.NUM_MAP,e.MINOR=e.MAJOR;var r;(function(e){e[e.GENERAL=0]=`GENERAL`,e[e.CONNECTION=1]=`CONNECTION`,e[e.CONTENT_LENGTH=2]=`CONTENT_LENGTH`,e[e.TRANSFER_ENCODING=3]=`TRANSFER_ENCODING`,e[e.UPGRADE=4]=`UPGRADE`,e[e.CONNECTION_KEEP_ALIVE=5]=`CONNECTION_KEEP_ALIVE`,e[e.CONNECTION_CLOSE=6]=`CONNECTION_CLOSE`,e[e.CONNECTION_UPGRADE=7]=`CONNECTION_UPGRADE`,e[e.TRANSFER_ENCODING_CHUNKED=8]=`TRANSFER_ENCODING_CHUNKED`})(r=e.HEADER_STATE||={}),e.SPECIAL_HEADERS={connection:r.CONNECTION,"content-length":r.CONTENT_LENGTH,"proxy-connection":r.CONNECTION,"transfer-encoding":r.TRANSFER_ENCODING,upgrade:r.UPGRADE}})),L=/* @__PURE__ */ f(((e,t)=>{let{Buffer:n}=p(`node:buffer`);t.exports=n.from(`AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEVDF8LQZIBIQMgASAERg2aAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGhzwBqLQAARw1dIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAybAgsgAkEANgIAIAZBAWohAUEeDF4LIAEgBEYEQEGTASEDDJoCCyABLQAAQcwARw1bIAFBAWohAUEKDF0LIAEgBEYEQEGUASEDDJkCCwJAAkAgAS0AAEHBAGsODwBcXFxcXFxcXFxcXFxcAVwLIAFBAWohAUH+ACEDDIACCyABQQFqIQFB/wAhAwz/AQsgASAERgRAQZUBIQMMmAILAkACQCABLQAAQcEAaw4DAFsBWwsgAUEBaiEBQf0AIQMM/wELIAFBAWohAUGAASEDDP4BC0GWASEDIAEgBEYNlgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBp88Aai0AAEcNWSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlwILIAJBADYCACAGQQFqIQFBCwxaCyABIARGBEBBlwEhAwyWAgsCQAJAAkACQCABLQAAQS1rDiMAW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1sBW1tbW1sCW1tbA1sLIAFBAWohAUH7ACEDDP8BCyABQQFqIQFB/AAhAwz+AQsgAUEBaiEBQYEBIQMM/QELIAFBAWohAUGCASEDDPwBC0GYASEDIAEgBEYNlAIgAigCACIAIAQgAWtqIQUgASAAa0EEaiEGAkADQCABLQAAIABBqc8Aai0AAEcNVyAAQQRGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlQILIAJBADYCACAGQQFqIQFBGQxYC0GZASEDIAEgBEYNkwIgAigCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBrs8Aai0AAEcNViAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlAILIAJBADYCACAGQQFqIQFBBgxXC0GaASEDIAEgBEYNkgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBtM8Aai0AAEcNVSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkwILIAJBADYCACAGQQFqIQFBHAxWC0GbASEDIAEgBEYNkQIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBts8Aai0AAEcNVCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkgILIAJBADYCACAGQQFqIQFBJwxVCyABIARGBEBBnAEhAwyRAgsCQAJAIAEtAABB1ABrDgIAAVQLIAFBAWohAUGGASEDDPgBCyABQQFqIQFBhwEhAwz3AQtBnQEhAyABIARGDY8CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjPAGotAABHDVIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADJACCyACQQA2AgAgBkEBaiEBQSYMUwtBngEhAyABIARGDY4CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbrPAGotAABHDVEgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI8CCyACQQA2AgAgBkEBaiEBQQMMUgtBnwEhAyABIARGDY0CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDVAgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI4CCyACQQA2AgAgBkEBaiEBQQwMUQtBoAEhAyABIARGDYwCIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQbzPAGotAABHDU8gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI0CCyACQQA2AgAgBkEBaiEBQQ0MUAsgASAERgRAQaEBIQMMjAILAkACQCABLQAAQcYAaw4LAE9PT09PT09PTwFPCyABQQFqIQFBiwEhAwzzAQsgAUEBaiEBQYwBIQMM8gELIAEgBEYEQEGiASEDDIsCCyABLQAAQdAARw1MIAFBAWohAQxGCyABIARGBEBBowEhAwyKAgsCQAJAIAEtAABByQBrDgcBTU1NTU0ATQsgAUEBaiEBQY4BIQMM8QELIAFBAWohAUEiDE0LQaQBIQMgASAERg2IAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHAzwBqLQAARw1LIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyJAgsgAkEANgIAIAZBAWohAUEdDEwLIAEgBEYEQEGlASEDDIgCCwJAAkAgAS0AAEHSAGsOAwBLAUsLIAFBAWohAUGQASEDDO8BCyABQQFqIQFBBAxLCyABIARGBEBBpgEhAwyHAgsCQAJAAkACQAJAIAEtAABBwQBrDhUATU1NTU1NTU1NTQFNTQJNTQNNTQRNCyABQQFqIQFBiAEhAwzxAQsgAUEBaiEBQYkBIQMM8AELIAFBAWohAUGKASEDDO8BCyABQQFqIQFBjwEhAwzuAQsgAUEBaiEBQZEBIQMM7QELQacBIQMgASAERg2FAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHtzwBqLQAARw1IIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyGAgsgAkEANgIAIAZBAWohAUERDEkLQagBIQMgASAERg2EAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHCzwBqLQAARw1HIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyFAgsgAkEANgIAIAZBAWohAUEsDEgLQakBIQMgASAERg2DAiACKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHFzwBqLQAARw1GIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyEAgsgAkEANgIAIAZBAWohAUErDEcLQaoBIQMgASAERg2CAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHKzwBqLQAARw1FIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyDAgsgAkEANgIAIAZBAWohAUEUDEYLIAEgBEYEQEGrASEDDIICCwJAAkACQAJAIAEtAABBwgBrDg8AAQJHR0dHR0dHR0dHRwNHCyABQQFqIQFBkwEhAwzrAQsgAUEBaiEBQZQBIQMM6gELIAFBAWohAUGVASEDDOkBCyABQQFqIQFBlgEhAwzoAQsgASAERgRAQawBIQMMgQILIAEtAABBxQBHDUIgAUEBaiEBDD0LQa0BIQMgASAERg3/ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHNzwBqLQAARw1CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyAAgsgAkEANgIAIAZBAWohAUEODEMLIAEgBEYEQEGuASEDDP8BCyABLQAAQdAARw1AIAFBAWohAUElDEILQa8BIQMgASAERg39ASACKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEHQzwBqLQAARw1AIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz+AQsgAkEANgIAIAZBAWohAUEqDEELIAEgBEYEQEGwASEDDP0BCwJAAkAgAS0AAEHVAGsOCwBAQEBAQEBAQEABQAsgAUEBaiEBQZoBIQMM5AELIAFBAWohAUGbASEDDOMBCyABIARGBEBBsQEhAwz8AQsCQAJAIAEtAABBwQBrDhQAPz8/Pz8/Pz8/Pz8/Pz8/Pz8/AT8LIAFBAWohAUGZASEDDOMBCyABQQFqIQFBnAEhAwziAQtBsgEhAyABIARGDfoBIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQdnPAGotAABHDT0gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPsBCyACQQA2AgAgBkEBaiEBQSEMPgtBswEhAyABIARGDfkBIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAS0AACAAQd3PAGotAABHDTwgAEEGRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPoBCyACQQA2AgAgBkEBaiEBQRoMPQsgASAERgRAQbQBIQMM+QELAkACQAJAIAEtAABBxQBrDhEAPT09PT09PT09AT09PT09Aj0LIAFBAWohAUGdASEDDOEBCyABQQFqIQFBngEhAwzgAQsgAUEBaiEBQZ8BIQMM3wELQbUBIQMgASAERg33ASACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHkzwBqLQAARw06IABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz4AQsgAkEANgIAIAZBAWohAUEoDDsLQbYBIQMgASAERg32ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHqzwBqLQAARw05IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz3AQsgAkEANgIAIAZBAWohAUEHDDoLIAEgBEYEQEG3ASEDDPYBCwJAAkAgAS0AAEHFAGsODgA5OTk5OTk5OTk5OTkBOQsgAUEBaiEBQaEBIQMM3QELIAFBAWohAUGiASEDDNwBC0G4ASEDIAEgBEYN9AEgAigCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB7c8Aai0AAEcNNyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9QELIAJBADYCACAGQQFqIQFBEgw4C0G5ASEDIAEgBEYN8wEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8M8Aai0AAEcNNiAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9AELIAJBADYCACAGQQFqIQFBIAw3C0G6ASEDIAEgBEYN8gEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8s8Aai0AAEcNNSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8wELIAJBADYCACAGQQFqIQFBDww2CyABIARGBEBBuwEhAwzyAQsCQAJAIAEtAABByQBrDgcANTU1NTUBNQsgAUEBaiEBQaUBIQMM2QELIAFBAWohAUGmASEDDNgBC0G8ASEDIAEgBEYN8AEgAigCACIAIAQgAWtqIQUgASAAa0EHaiEGAkADQCABLQAAIABB9M8Aai0AAEcNMyAAQQdGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8QELIAJBADYCACAGQQFqIQFBGww0CyABIARGBEBBvQEhAwzwAQsCQAJAAkAgAS0AAEHCAGsOEgA0NDQ0NDQ0NDQBNDQ0NDQ0AjQLIAFBAWohAUGkASEDDNgBCyABQQFqIQFBpwEhAwzXAQsgAUEBaiEBQagBIQMM1gELIAEgBEYEQEG+ASEDDO8BCyABLQAAQc4ARw0wIAFBAWohAQwsCyABIARGBEBBvwEhAwzuAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAAQcEAaw4VAAECAz8EBQY/Pz8HCAkKCz8MDQ4PPwsgAUEBaiEBQegAIQMM4wELIAFBAWohAUHpACEDDOIBCyABQQFqIQFB7gAhAwzhAQsgAUEBaiEBQfIAIQMM4AELIAFBAWohAUHzACEDDN8BCyABQQFqIQFB9gAhAwzeAQsgAUEBaiEBQfcAIQMM3QELIAFBAWohAUH6ACEDDNwBCyABQQFqIQFBgwEhAwzbAQsgAUEBaiEBQYQBIQMM2gELIAFBAWohAUGFASEDDNkBCyABQQFqIQFBkgEhAwzYAQsgAUEBaiEBQZgBIQMM1wELIAFBAWohAUGgASEDDNYBCyABQQFqIQFBowEhAwzVAQsgAUEBaiEBQaoBIQMM1AELIAEgBEcEQCACQRA2AgggAiABNgIEQasBIQMM1AELQcABIQMM7AELQQAhAAJAIAIoAjgiA0UNACADKAI0IgNFDQAgAiADEQAAIQALIABFDV4gAEEVRw0HIAJB0QA2AhwgAiABNgIUIAJBsBc2AhAgAkEVNgIMQQAhAwzrAQsgAUEBaiABIARHDQgaQcIBIQMM6gELA0ACQCABLQAAQQprDgQIAAALAAsgBCABQQFqIgFHDQALQcMBIQMM6QELIAEgBEcEQCACQRE2AgggAiABNgIEQQEhAwzQAQtBxAEhAwzoAQsgASAERgRAQcUBIQMM6AELAkACQCABLQAAQQprDgQBKCgAKAsgAUEBagwJCyABQQFqDAULIAEgBEYEQEHGASEDDOcBCwJAAkAgAS0AAEEKaw4XAQsLAQsLCwsLCwsLCwsLCwsLCwsLCwALCyABQQFqIQELQbABIQMMzQELIAEgBEYEQEHIASEDDOYBCyABLQAAQSBHDQkgAkEAOwEyIAFBAWohAUGzASEDDMwBCwNAIAEhAAJAIAEgBEcEQCABLQAAQTBrQf8BcSIDQQpJDQEMJwtBxwEhAwzmAQsCQCACLwEyIgFBmTNLDQAgAiABQQpsIgU7ATIgBUH+/wNxIANB//8Dc0sNACAAQQFqIQEgAiADIAVqIgM7ATIgA0H//wNxQegHSQ0BCwtBACEDIAJBADYCHCACQcEJNgIQIAJBDTYCDCACIABBAWo2AhQM5AELIAJBADYCHCACIAE2AhQgAkHwDDYCECACQRs2AgxBACEDDOMBCyACKAIEIQAgAkEANgIEIAIgACABECYiAA0BIAFBAWoLIQFBrQEhAwzIAQsgAkHBATYCHCACIAA2AgwgAiABQQFqNgIUQQAhAwzgAQsgAigCBCEAIAJBADYCBCACIAAgARAmIgANASABQQFqCyEBQa4BIQMMxQELIAJBwgE2AhwgAiAANgIMIAIgAUEBajYCFEEAIQMM3QELIAJBADYCHCACIAE2AhQgAkGXCzYCECACQQ02AgxBACEDDNwBCyACQQA2AhwgAiABNgIUIAJB4xA2AhAgAkEJNgIMQQAhAwzbAQsgAkECOgAoDKwBC0EAIQMgAkEANgIcIAJBrws2AhAgAkECNgIMIAIgAUEBajYCFAzZAQtBAiEDDL8BC0ENIQMMvgELQSYhAwy9AQtBFSEDDLwBC0EWIQMMuwELQRghAwy6AQtBHCEDDLkBC0EdIQMMuAELQSAhAwy3AQtBISEDDLYBC0EjIQMMtQELQcYAIQMMtAELQS4hAwyzAQtBPSEDDLIBC0HLACEDDLEBC0HOACEDDLABC0HYACEDDK8BC0HZACEDDK4BC0HbACEDDK0BC0HxACEDDKwBC0H0ACEDDKsBC0GNASEDDKoBC0GXASEDDKkBC0GpASEDDKgBC0GvASEDDKcBC0GxASEDDKYBCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB8Rs2AhAgAkEGNgIMDL0BCyACQQA2AgAgBkEBaiEBQSQLOgApIAIoAgQhACACQQA2AgQgAiAAIAEQJyIARQRAQeUAIQMMowELIAJB+QA2AhwgAiABNgIUIAIgADYCDEEAIQMMuwELIABBFUcEQCACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwy7AQsgAkH4ADYCHCACIAE2AhQgAkHKGDYCECACQRU2AgxBACEDDLoBCyACQQA2AhwgAiABNgIUIAJBjhs2AhAgAkEGNgIMQQAhAwy5AQsgAkEANgIcIAIgATYCFCACQf4RNgIQIAJBBzYCDEEAIQMMuAELIAJBADYCHCACIAE2AhQgAkGMHDYCECACQQc2AgxBACEDDLcBCyACQQA2AhwgAiABNgIUIAJBww82AhAgAkEHNgIMQQAhAwy2AQsgAkEANgIcIAIgATYCFCACQcMPNgIQIAJBBzYCDEEAIQMMtQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv`,`base64`)})),ee=/* @__PURE__ */ f(((e,t)=>{let{Buffer:n}=p(`node:buffer`);t.exports=n.from(`AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADDsYBAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHyAhIyUmKCorLC8wMTIzNDU2Nzk6Ozw9lANAQkRFRklLTk9QUVJTVFVWWFpbXF1eX2BhYmNkZWZnaGpsb3Bxc3V2eHl6e3x/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcsBzAHNAc4BzwGKA4kDiAOHA4QDgwOAA/sC+gL5AvgC9wL0AvMC8gLLAsECsALZAQsgASAERw3wAkHdASEDDLMDCyABIARHDcgBQcMBIQMMsgMLIAEgBEcNe0H3ACEDDLEDCyABIARHDXBB7wAhAwywAwsgASAERw1pQeoAIQMMrwMLIAEgBEcNZUHoACEDDK4DCyABIARHDWJB5gAhAwytAwsgASAERw0aQRghAwysAwsgASAERw0VQRIhAwyrAwsgASAERw1CQcUAIQMMqgMLIAEgBEcNNEE/IQMMqQMLIAEgBEcNMkE8IQMMqAMLIAEgBEcNK0ExIQMMpwMLIAItAC5BAUYNnwMMwQILQQAhAAJAAkACQCACLQAqRQ0AIAItACtFDQAgAi8BMCIDQQJxRQ0BDAILIAIvATAiA0EBcUUNAQtBASEAIAItAChBAUYNACACLwEyIgVB5ABrQeQASQ0AIAVBzAFGDQAgBUGwAkYNACADQcAAcQ0AQQAhACADQYgEcUGABEYNACADQShxQQBHIQALIAJBADsBMCACQQA6AC8gAEUN3wIgAkIANwMgDOACC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAARQ3MASAAQRVHDd0CIAJBBDYCHCACIAE2AhQgAkGwGDYCECACQRU2AgxBACEDDKQDCyABIARGBEBBBiEDDKQDCyABQQFqIQFBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAA3ZAgwcCyACQgA3AyBBEiEDDIkDCyABIARHDRZBHSEDDKEDCyABIARHBEAgAUEBaiEBQRAhAwyIAwtBByEDDKADCyACIAIpAyAiCiAEIAFrrSILfSIMQgAgCiAMWhs3AyAgCiALWA3UAkEIIQMMnwMLIAEgBEcEQCACQQk2AgggAiABNgIEQRQhAwyGAwtBCSEDDJ4DCyACKQMgQgBSDccBIAIgAi8BMEGAAXI7ATAMQgsgASAERw0/QdAAIQMMnAMLIAEgBEYEQEELIQMMnAMLIAFBAWohAUEAIQACQCACKAI4IgNFDQAgAygCUCIDRQ0AIAIgAxEAACEACyAADc8CDMYBC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ3GASAAQRVHDc0CIAJBCzYCHCACIAE2AhQgAkGCGTYCECACQRU2AgxBACEDDJoDC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ0MIABBFUcNygIgAkEaNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMmQMLQQAhAAJAIAIoAjgiA0UNACADKAJMIgNFDQAgAiADEQAAIQALIABFDcQBIABBFUcNxwIgAkELNgIcIAIgATYCFCACQZEXNgIQIAJBFTYCDEEAIQMMmAMLIAEgBEYEQEEPIQMMmAMLIAEtAAAiAEE7Rg0HIABBDUcNxAIgAUEBaiEBDMMBC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3DASAAQRVHDcICIAJBDzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJYDCwNAIAEtAABB8DVqLQAAIgBBAUcEQCAAQQJHDcECIAIoAgQhAEEAIQMgAkEANgIEIAIgACABQQFqIgEQLSIADcICDMUBCyAEIAFBAWoiAUcNAAtBEiEDDJUDC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3FASAAQRVHDb0CIAJBGzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJQDCyABIARGBEBBFiEDDJQDCyACQQo2AgggAiABNgIEQQAhAAJAIAIoAjgiA0UNACADKAJIIgNFDQAgAiADEQAAIQALIABFDcIBIABBFUcNuQIgAkEVNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMkwMLIAEgBEcEQANAIAEtAABB8DdqLQAAIgBBAkcEQAJAIABBAWsOBMQCvQIAvgK9AgsgAUEBaiEBQQghAwz8AgsgBCABQQFqIgFHDQALQRUhAwyTAwtBFSEDDJIDCwNAIAEtAABB8DlqLQAAIgBBAkcEQCAAQQFrDgTFArcCwwK4ArcCCyAEIAFBAWoiAUcNAAtBGCEDDJEDCyABIARHBEAgAkELNgIIIAIgATYCBEEHIQMM+AILQRkhAwyQAwsgAUEBaiEBDAILIAEgBEYEQEEaIQMMjwMLAkAgAS0AAEENaw4UtQG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwEAvwELQQAhAyACQQA2AhwgAkGvCzYCECACQQI2AgwgAiABQQFqNgIUDI4DCyABIARGBEBBGyEDDI4DCyABLQAAIgBBO0cEQCAAQQ1HDbECIAFBAWohAQy6AQsgAUEBaiEBC0EiIQMM8wILIAEgBEYEQEEcIQMMjAMLQgAhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AAEEwaw43wQLAAgABAgMEBQYH0AHQAdAB0AHQAdAB0AEICQoLDA3QAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdABDg8QERIT0AELQgIhCgzAAgtCAyEKDL8CC0IEIQoMvgILQgUhCgy9AgtCBiEKDLwCC0IHIQoMuwILQgghCgy6AgtCCSEKDLkCC0IKIQoMuAILQgshCgy3AgtCDCEKDLYCC0INIQoMtQILQg4hCgy0AgtCDyEKDLMCC0IKIQoMsgILQgshCgyxAgtCDCEKDLACC0INIQoMrwILQg4hCgyuAgtCDyEKDK0CC0IAIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBMGsON8ACvwIAAQIDBAUGB74CvgK+Ar4CvgK+Ar4CCAkKCwwNvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ag4PEBESE74CC0ICIQoMvwILQgMhCgy+AgtCBCEKDL0CC0IFIQoMvAILQgYhCgy7AgtCByEKDLoCC0IIIQoMuQILQgkhCgy4AgtCCiEKDLcCC0ILIQoMtgILQgwhCgy1AgtCDSEKDLQCC0IOIQoMswILQg8hCgyyAgtCCiEKDLECC0ILIQoMsAILQgwhCgyvAgtCDSEKDK4CC0IOIQoMrQILQg8hCgysAgsgAiACKQMgIgogBCABa60iC30iDEIAIAogDFobNwMgIAogC1gNpwJBHyEDDIkDCyABIARHBEAgAkEJNgIIIAIgATYCBEElIQMM8AILQSAhAwyIAwtBASEFIAIvATAiA0EIcUUEQCACKQMgQgBSIQULAkAgAi0ALgRAQQEhACACLQApQQVGDQEgA0HAAHFFIAVxRQ0BC0EAIQAgA0HAAHENAEECIQAgA0EIcQ0AIANBgARxBEACQCACLQAoQQFHDQAgAi0ALUEKcQ0AQQUhAAwCC0EEIQAMAQsgA0EgcUUEQAJAIAItAChBAUYNACACLwEyIgBB5ABrQeQASQ0AIABBzAFGDQAgAEGwAkYNAEEEIQAgA0EocUUNAiADQYgEcUGABEYNAgtBACEADAELQQBBAyACKQMgUBshAAsgAEEBaw4FvgIAsAEBpAKhAgtBESEDDO0CCyACQQE6AC8MhAMLIAEgBEcNnQJBJCEDDIQDCyABIARHDRxBxgAhAwyDAwtBACEAAkAgAigCOCIDRQ0AIAMoAkQiA0UNACACIAMRAAAhAAsgAEUNJyAAQRVHDZgCIAJB0AA2AhwgAiABNgIUIAJBkRg2AhAgAkEVNgIMQQAhAwyCAwsgASAERgRAQSghAwyCAwtBACEDIAJBADYCBCACQQw2AgggAiABIAEQKiIARQ2UAiACQSc2AhwgAiABNgIUIAIgADYCDAyBAwsgASAERgRAQSkhAwyBAwsgAS0AACIAQSBGDRMgAEEJRw2VAiABQQFqIQEMFAsgASAERwRAIAFBAWohAQwWC0EqIQMM/wILIAEgBEYEQEErIQMM/wILIAEtAAAiAEEJRyAAQSBHcQ2QAiACLQAsQQhHDd0CIAJBADoALAzdAgsgASAERgRAQSwhAwz+AgsgAS0AAEEKRw2OAiABQQFqIQEMsAELIAEgBEcNigJBLyEDDPwCCwNAIAEtAAAiAEEgRwRAIABBCmsOBIQCiAKIAoQChgILIAQgAUEBaiIBRw0AC0ExIQMM+wILQTIhAyABIARGDfoCIAIoAgAiACAEIAFraiEHIAEgAGtBA2ohBgJAA0AgAEHwO2otAAAgAS0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQEgAEEDRgRAQQYhAQziAgsgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAc2AgAM+wILIAJBADYCAAyGAgtBMyEDIAQgASIARg35AiAEIAFrIAIoAgAiAWohByAAIAFrQQhqIQYCQANAIAFB9DtqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBCEYEQEEFIQEM4QILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPoCCyACQQA2AgAgACEBDIUCC0E0IQMgBCABIgBGDfgCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgJAA0AgAUHQwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBBUYEQEEHIQEM4AILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPkCCyACQQA2AgAgACEBDIQCCyABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRg0JDIECCyAEIAFBAWoiAUcNAAtBMCEDDPgCC0EwIQMM9wILIAEgBEcEQANAIAEtAAAiAEEgRwRAIABBCmsOBP8B/gH+Af8B/gELIAQgAUEBaiIBRw0AC0E4IQMM9wILQTghAwz2AgsDQCABLQAAIgBBIEcgAEEJR3EN9gEgBCABQQFqIgFHDQALQTwhAwz1AgsDQCABLQAAIgBBIEcEQAJAIABBCmsOBPkBBAT5AQALIABBLEYN9QEMAwsgBCABQQFqIgFHDQALQT8hAwz0AgtBwAAhAyABIARGDfMCIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAEGAQGstAAAgAS0AAEEgckcNASAAQQZGDdsCIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPQCCyACQQA2AgALQTYhAwzZAgsgASAERgRAQcEAIQMM8gILIAJBDDYCCCACIAE2AgQgAi0ALEEBaw4E+wHuAewB6wHUAgsgAUEBaiEBDPoBCyABIARHBEADQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxIgBBCUYNACAAQSBGDQACQAJAAkACQCAAQeMAaw4TAAMDAwMDAwMBAwMDAwMDAwMDAgMLIAFBAWohAUExIQMM3AILIAFBAWohAUEyIQMM2wILIAFBAWohAUEzIQMM2gILDP4BCyAEIAFBAWoiAUcNAAtBNSEDDPACC0E1IQMM7wILIAEgBEcEQANAIAEtAABBgDxqLQAAQQFHDfcBIAQgAUEBaiIBRw0AC0E9IQMM7wILQT0hAwzuAgtBACEAAkAgAigCOCIDRQ0AIAMoAkAiA0UNACACIAMRAAAhAAsgAEUNASAAQRVHDeYBIAJBwgA2AhwgAiABNgIUIAJB4xg2AhAgAkEVNgIMQQAhAwztAgsgAUEBaiEBC0E8IQMM0gILIAEgBEYEQEHCACEDDOsCCwJAA0ACQCABLQAAQQlrDhgAAswCzALRAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAgDMAgsgBCABQQFqIgFHDQALQcIAIQMM6wILIAFBAWohASACLQAtQQFxRQ3+AQtBLCEDDNACCyABIARHDd4BQcQAIQMM6AILA0AgAS0AAEGQwABqLQAAQQFHDZwBIAQgAUEBaiIBRw0AC0HFACEDDOcCCyABLQAAIgBBIEYN/gEgAEE6Rw3AAiACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgAN3gEM3QELQccAIQMgBCABIgBGDeUCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFBkMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvwIgAUEFRg3CAiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzlAgtByAAhAyAEIAEiAEYN5AIgBCABayACKAIAIgFqIQcgACABa0EJaiEGA0AgAUGWwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw2+AkECIAFBCUYNwgIaIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOQCCyABIARGBEBByQAhAwzkAgsCQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxQe4Aaw4HAL8CvwK/Ar8CvwIBvwILIAFBAWohAUE+IQMMywILIAFBAWohAUE/IQMMygILQcoAIQMgBCABIgBGDeICIAQgAWsgAigCACIBaiEGIAAgAWtBAWohBwNAIAFBoMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvAIgAUEBRg2+AiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBjYCAAziAgtBywAhAyAEIAEiAEYN4QIgBCABayACKAIAIgFqIQcgACABa0EOaiEGA0AgAUGiwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw27AiABQQ5GDb4CIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOECC0HMACEDIAQgASIARg3gAiAEIAFrIAIoAgAiAWohByAAIAFrQQ9qIQYDQCABQcDCAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDboCQQMgAUEPRg2+AhogAUEBaiEBIAQgAEEBaiIARw0ACyACIAc2AgAM4AILQc0AIQMgBCABIgBGDd8CIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFB0MIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNuQJBBCABQQVGDb0CGiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzfAgsgASAERgRAQc4AIQMM3wILAkACQAJAAkAgAS0AACIAQSByIAAgAEHBAGtB/wFxQRpJG0H/AXFB4wBrDhMAvAK8ArwCvAK8ArwCvAK8ArwCvAK8ArwCAbwCvAK8AgIDvAILIAFBAWohAUHBACEDDMgCCyABQQFqIQFBwgAhAwzHAgsgAUEBaiEBQcMAIQMMxgILIAFBAWohAUHEACEDDMUCCyABIARHBEAgAkENNgIIIAIgATYCBEHFACEDDMUCC0HPACEDDN0CCwJAAkAgAS0AAEEKaw4EAZABkAEAkAELIAFBAWohAQtBKCEDDMMCCyABIARGBEBB0QAhAwzcAgsgAS0AAEEgRw0AIAFBAWohASACLQAtQQFxRQ3QAQtBFyEDDMECCyABIARHDcsBQdIAIQMM2QILQdMAIQMgASAERg3YAiACKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABB1sIAai0AAEcNxwEgAEEBRg3KASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBjYCAAzYAgsgASAERgRAQdUAIQMM2AILIAEtAABBCkcNwgEgAUEBaiEBDMoBCyABIARGBEBB1gAhAwzXAgsCQAJAIAEtAABBCmsOBADDAcMBAcMBCyABQQFqIQEMygELIAFBAWohAUHKACEDDL0CC0EAIQACQCACKAI4IgNFDQAgAygCPCIDRQ0AIAIgAxEAACEACyAADb8BQc0AIQMMvAILIAItAClBIkYNzwIMiQELIAQgASIFRgRAQdsAIQMM1AILQQAhAEEBIQFBASEGQQAhAwJAAn8CQAJAAkACQAJAAkACQCAFLQAAQTBrDgrFAcQBAAECAwQFBgjDAQtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshA0EAIQFBACEGDL0BC0EJIQNBASEAQQAhAUEAIQYMvAELIAEgBEYEQEHdACEDDNMCCyABLQAAQS5HDbgBIAFBAWohAQyIAQsgASAERw22AUHfACEDDNECCyABIARHBEAgAkEONgIIIAIgATYCBEHQACEDDLgCC0HgACEDDNACC0HhACEDIAEgBEYNzwIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGA0AgAS0AACAAQeLCAGotAABHDbEBIABBA0YNswEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMzwILQeIAIQMgASAERg3OAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYDQCABLQAAIABB5sIAai0AAEcNsAEgAEECRg2vASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAzOAgtB4wAhAyABIARGDc0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgNAIAEtAAAgAEHpwgBqLQAARw2vASAAQQNGDa0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADM0CCyABIARGBEBB5QAhAwzNAgsgAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANqgFB1gAhAwyzAgsgASAERwRAA0AgAS0AACIAQSBHBEACQAJAAkAgAEHIAGsOCwABswGzAbMBswGzAbMBswGzAQKzAQsgAUEBaiEBQdIAIQMMtwILIAFBAWohAUHTACEDDLYCCyABQQFqIQFB1AAhAwy1AgsgBCABQQFqIgFHDQALQeQAIQMMzAILQeQAIQMMywILA0AgAS0AAEHwwgBqLQAAIgBBAUcEQCAAQQJrDgOnAaYBpQGkAQsgBCABQQFqIgFHDQALQeYAIQMMygILIAFBAWogASAERw0CGkHnACEDDMkCCwNAIAEtAABB8MQAai0AACIAQQFHBEACQCAAQQJrDgSiAaEBoAEAnwELQdcAIQMMsQILIAQgAUEBaiIBRw0AC0HoACEDDMgCCyABIARGBEBB6QAhAwzIAgsCQCABLQAAIgBBCmsOGrcBmwGbAbQBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBpAGbAZsBAJkBCyABQQFqCyEBQQYhAwytAgsDQCABLQAAQfDGAGotAABBAUcNfSAEIAFBAWoiAUcNAAtB6gAhAwzFAgsgAUEBaiABIARHDQIaQesAIQMMxAILIAEgBEYEQEHsACEDDMQCCyABQQFqDAELIAEgBEYEQEHtACEDDMMCCyABQQFqCyEBQQQhAwyoAgsgASAERgRAQe4AIQMMwQILAkACQAJAIAEtAABB8MgAai0AAEEBaw4HkAGPAY4BAHwBAo0BCyABQQFqIQEMCwsgAUEBagyTAQtBACEDIAJBADYCHCACQZsSNgIQIAJBBzYCDCACIAFBAWo2AhQMwAILAkADQCABLQAAQfDIAGotAAAiAEEERwRAAkACQCAAQQFrDgeUAZMBkgGNAQAEAY0BC0HaACEDDKoCCyABQQFqIQFB3AAhAwypAgsgBCABQQFqIgFHDQALQe8AIQMMwAILIAFBAWoMkQELIAQgASIARgRAQfAAIQMMvwILIAAtAABBL0cNASAAQQFqIQEMBwsgBCABIgBGBEBB8QAhAwy+AgsgAC0AACIBQS9GBEAgAEEBaiEBQd0AIQMMpQILIAFBCmsiA0EWSw0AIAAhAUEBIAN0QYmAgAJxDfkBC0EAIQMgAkEANgIcIAIgADYCFCACQYwcNgIQIAJBBzYCDAy8AgsgASAERwRAIAFBAWohAUHeACEDDKMCC0HyACEDDLsCCyABIARGBEBB9AAhAwy7AgsCQCABLQAAQfDMAGotAABBAWsOA/cBcwCCAQtB4QAhAwyhAgsgASAERwRAA0AgAS0AAEHwygBqLQAAIgBBA0cEQAJAIABBAWsOAvkBAIUBC0HfACEDDKMCCyAEIAFBAWoiAUcNAAtB8wAhAwy6AgtB8wAhAwy5AgsgASAERwRAIAJBDzYCCCACIAE2AgRB4AAhAwygAgtB9QAhAwy4AgsgASAERgRAQfYAIQMMuAILIAJBDzYCCCACIAE2AgQLQQMhAwydAgsDQCABLQAAQSBHDY4CIAQgAUEBaiIBRw0AC0H3ACEDDLUCCyABIARGBEBB+AAhAwy1AgsgAS0AAEEgRw16IAFBAWohAQxbC0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAADXgMgAILIAEgBEYEQEH6ACEDDLMCCyABLQAAQcwARw10IAFBAWohAUETDHYLQfsAIQMgASAERg2xAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYDQCABLQAAIABB8M4Aai0AAEcNcyAAQQVGDXUgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMsQILIAEgBEYEQEH8ACEDDLECCwJAAkAgAS0AAEHDAGsODAB0dHR0dHR0dHR0AXQLIAFBAWohAUHmACEDDJgCCyABQQFqIQFB5wAhAwyXAgtB/QAhAyABIARGDa8CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDXIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADLACCyACQQA2AgAgBkEBaiEBQRAMcwtB/gAhAyABIARGDa4CIAIoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQfbOAGotAABHDXEgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK8CCyACQQA2AgAgBkEBaiEBQRYMcgtB/wAhAyABIARGDa0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQfzOAGotAABHDXAgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK4CCyACQQA2AgAgBkEBaiEBQQUMcQsgASAERgRAQYABIQMMrQILIAEtAABB2QBHDW4gAUEBaiEBQQgMcAsgASAERgRAQYEBIQMMrAILAkACQCABLQAAQc4Aaw4DAG8BbwsgAUEBaiEBQesAIQMMkwILIAFBAWohAUHsACEDDJICCyABIARGBEBBggEhAwyrAgsCQAJAIAEtAABByABrDggAbm5ubm5uAW4LIAFBAWohAUHqACEDDJICCyABQQFqIQFB7QAhAwyRAgtBgwEhAyABIARGDakCIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQYDPAGotAABHDWwgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKoCCyACQQA2AgAgBkEBaiEBQQAMbQtBhAEhAyABIARGDagCIAIoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQYPPAGotAABHDWsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKkCCyACQQA2AgAgBkEBaiEBQSMMbAsgASAERgRAQYUBIQMMqAILAkACQCABLQAAQcwAaw4IAGtra2trawFrCyABQQFqIQFB7wAhAwyPAgsgAUEBaiEBQfAAIQMMjgILIAEgBEYEQEGGASEDDKcCCyABLQAAQcUARw1oIAFBAWohAQxgC0GHASEDIAEgBEYNpQIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBiM8Aai0AAEcNaCAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpgILIAJBADYCACAGQQFqIQFBLQxpC0GIASEDIAEgBEYNpAIgAigCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABB0M8Aai0AAEcNZyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpQILIAJBADYCACAGQQFqIQFBKQxoCyABIARGBEBBiQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==`,`base64`)})),te=/* @__PURE__ */ f(((e,t)=>{let n=[`GET`,`HEAD`,`POST`],r=new Set(n),i=[101,204,205,304],a=[301,302,303,307,308],o=new Set(a),s=/* @__PURE__ */ `1.7.9.11.13.15.17.19.20.21.22.23.25.37.42.43.53.69.77.79.87.95.101.102.103.104.109.110.111.113.115.117.119.123.135.137.139.143.161.179.389.427.465.512.513.514.515.526.530.531.532.540.548.554.556.563.587.601.636.989.990.993.995.1719.1720.1723.2049.3659.4045.4190.5060.5061.6000.6566.6665.6666.6667.6668.6669.6679.6697.10080`.split(`.`),c=new Set(s),l=[``,`no-referrer`,`no-referrer-when-downgrade`,`same-origin`,`origin`,`strict-origin`,`origin-when-cross-origin`,`strict-origin-when-cross-origin`,`unsafe-url`],u=new Set(l),d=[`follow`,`manual`,`error`],f=[`GET`,`HEAD`,`OPTIONS`,`TRACE`],p=new Set(f),m=[`navigate`,`same-origin`,`no-cors`,`cors`],h=[`omit`,`same-origin`,`include`],g=[`default`,`no-store`,`reload`,`no-cache`,`force-cache`,`only-if-cached`],_=[`content-encoding`,`content-language`,`content-location`,`content-type`,`content-length`],v=[`half`],y=[`CONNECT`,`TRACE`,`TRACK`],b=new Set(y),x=[`audio`,`audioworklet`,`font`,`image`,`manifest`,`paintworklet`,`script`,`style`,`track`,`video`,`xslt`,``];t.exports={subresource:x,forbiddenMethods:y,requestBodyHeader:_,referrerPolicy:l,requestRedirect:d,requestMode:m,requestCredentials:h,requestCache:g,redirectStatus:a,corsSafeListedMethods:n,nullBodyStatus:i,safeMethods:f,badPorts:s,requestDuplex:v,subresourceSet:new Set(x),badPortsSet:c,redirectStatusSet:o,corsSafeListedMethodsSet:r,safeMethodsSet:p,forbiddenMethodsSet:b,referrerPolicySet:u}})),R=/* @__PURE__ */ f(((e,t)=>{let n=Symbol.for(`undici.globalOrigin.1`);function r(){return globalThis[n]}function i(e){if(e===void 0){Object.defineProperty(globalThis,n,{value:void 0,writable:!0,enumerable:!1,configurable:!1});return}let t=new URL(e);if(t.protocol!==`http:`&&t.protocol!==`https:`)throw TypeError(`Only http & https urls are allowed, received ${t.protocol}`);Object.defineProperty(globalThis,n,{value:t,writable:!0,enumerable:!1,configurable:!1})}t.exports={getGlobalOrigin:r,setGlobalOrigin:i}})),z=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),r=new TextEncoder,i=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/,a=/[\u000A\u000D\u0009\u0020]/,o=/[\u0009\u000A\u000C\u000D\u0020]/g,s=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function c(e){n(e.protocol===`data:`);let t=l(e,!0);t=t.slice(5);let r={position:0},i=d(`,`,t,r),a=i.length;if(i=w(i,!0,!0),r.position>=t.length)return`failure`;r.position++;let o=f(t.slice(a+1));if(/;(\u0020){0,}base64$/i.test(i)){if(o=v(E(o)),o===`failure`)return`failure`;i=i.slice(0,-6),i=i.replace(/(\u0020)+$/,``),i=i.slice(0,-1)}i.startsWith(`;`)&&(i=`text/plain`+i);let s=_(i);return s===`failure`&&(s=_(`text/plain;charset=US-ASCII`)),{mimeType:s,body:o}}function l(e,t=!1){if(!t)return e.href;let n=e.href,r=e.hash.length,i=r===0?n:n.substring(0,n.length-r);return!r&&n.endsWith(`#`)?i.slice(0,-1):i}function u(e,t,n){let r=``;for(;n.position=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function h(e){return e>=48&&e<=57?e-48:(e&223)-55}function g(e){let t=e.length,n=new Uint8Array(t),r=0;for(let i=0;ie.length)return`failure`;t.position++;let r=d(`;`,e,t);if(r=S(r,!1,!0),r.length===0||!i.test(r))return`failure`;let o=n.toLowerCase(),c=r.toLowerCase(),l={type:o,subtype:c,parameters:/* @__PURE__ */ new Map,essence:`${o}/${c}`};for(;t.positiona.test(e),e,t);let n=u(e=>e!==`;`&&e!==`=`,e,t);if(n=n.toLowerCase(),t.positione.length)break;let r=null;if(e[t.position]===`"`)r=y(e,t,!0),d(`;`,e,t);else if(r=d(`;`,e,t),r=S(r,!1,!0),r.length===0)continue;n.length!==0&&i.test(n)&&(r.length===0||s.test(r))&&!l.parameters.has(n)&&l.parameters.set(n,r)}return l}function v(e){e=e.replace(o,``);let t=e.length;if(t%4==0&&e.charCodeAt(t-1)===61&&(--t,e.charCodeAt(t-1)===61&&--t),t%4==1||/[^+/0-9A-Za-z]/.test(e.length===t?e:e.substring(0,t)))return`failure`;let n=Buffer.from(e,`base64`);return new Uint8Array(n.buffer,n.byteOffset,n.byteLength)}function y(e,t,r){let i=t.position,a=``;for(n(e[t.position]===`"`),t.position++;a+=u(e=>e!==`"`&&e!==`\\`,e,t),!(t.position>=e.length);){let r=e[t.position];if(t.position++,r===`\\`){if(t.position>=e.length){a+=`\\`;break}a+=e[t.position],t.position++}else{n(r===`"`);break}}return r?a:e.slice(i,t.position)}function b(e){n(e!==`failure`);let{parameters:t,essence:r}=e,a=r;for(let[e,n]of t.entries())a+=`;`,a+=e,a+=`=`,i.test(n)||(n=n.replace(/(\\|")/g,`\\$1`),n=`"`+n,n+=`"`),a+=n;return a}function x(e){return e===13||e===10||e===9||e===32}function S(e,t=!0,n=!0){return T(e,t,n,x)}function C(e){return e===13||e===10||e===9||e===12||e===32}function w(e,t=!0,n=!0){return T(e,t,n,C)}function T(e,t,n,r){let i=0,a=e.length-1;if(t)for(;i0&&r(e.charCodeAt(a));)a--;return i===0&&a===e.length-1?e:e.slice(i,a+1)}function E(e){let t=e.length;if(65535>t)return String.fromCharCode.apply(null,e);let n=``,r=0,i=65535;for(;rt&&(i=t-r),n+=String.fromCharCode.apply(null,e.subarray(r,r+=i));return n}function D(e){switch(e.essence){case`application/ecmascript`:case`application/javascript`:case`application/x-ecmascript`:case`application/x-javascript`:case`text/ecmascript`:case`text/javascript`:case`text/javascript1.0`:case`text/javascript1.1`:case`text/javascript1.2`:case`text/javascript1.3`:case`text/javascript1.4`:case`text/javascript1.5`:case`text/jscript`:case`text/livescript`:case`text/x-ecmascript`:case`text/x-javascript`:return`text/javascript`;case`application/json`:case`text/json`:return`application/json`;case`image/svg+xml`:return`image/svg+xml`;case`text/xml`:case`application/xml`:return`application/xml`}return e.subtype.endsWith(`+json`)?`application/json`:e.subtype.endsWith(`+xml`)?`application/xml`:``}t.exports={dataURLProcessor:c,URLSerializer:l,collectASequenceOfCodePoints:u,collectASequenceOfCodePointsFast:d,stringPercentDecode:f,parseMIMEType:_,collectAnHTTPQuotedString:y,serializeAMimeType:b,removeChars:T,removeHTTPWhitespace:S,minimizeSupportedMimeType:D,HTTP_TOKEN_CODEPOINTS:i,isomorphicDecode:E}})),B=/* @__PURE__ */ f(((e,t)=>{let{types:n,inspect:r}=p(`node:util`),{markAsUncloneable:i}=p(`node:worker_threads`),{toUSVString:a}=O(),o={};o.converters={},o.util={},o.errors={},o.errors.exception=function(e){return/* @__PURE__ */ TypeError(`${e.header}: ${e.message}`)},o.errors.conversionFailed=function(e){let t=e.types.length===1?``:` one of`,n=`${e.argument} could not be converted to${t}: ${e.types.join(`, `)}.`;return o.errors.exception({header:e.prefix,message:n})},o.errors.invalidArgument=function(e){return o.errors.exception({header:e.prefix,message:`"${e.value}" is an invalid ${e.type}.`})},o.brandCheck=function(e,t,n){if(n?.strict!==!1){if(!(e instanceof t)){let e=/* @__PURE__ */ TypeError(`Illegal invocation`);throw e.code=`ERR_INVALID_THIS`,e}}else if(e?.[Symbol.toStringTag]!==t.prototype[Symbol.toStringTag]){let e=/* @__PURE__ */ TypeError(`Illegal invocation`);throw e.code=`ERR_INVALID_THIS`,e}},o.argumentLengthCheck=function({length:e},t,n){if(e{}),o.util.ConvertToInt=function(e,t,n,r){let i,a;t===64?(i=2**53-1,a=n===`unsigned`?0:(-2)**53+1):n===`unsigned`?(a=0,i=2**t-1):(a=(-2)**t-1,i=2**(t-1)-1);let s=Number(e);if(s===0&&(s=0),r?.enforceRange===!0){if(Number.isNaN(s)||s===1/0||s===-1/0)throw o.errors.exception({header:`Integer conversion`,message:`Could not convert ${o.util.Stringify(e)} to an integer.`});if(s=o.util.IntegerPart(s),si)throw o.errors.exception({header:`Integer conversion`,message:`Value must be between ${a}-${i}, got ${s}.`});return s}return!Number.isNaN(s)&&r?.clamp===!0?(s=Math.min(Math.max(s,a),i),s=Math.floor(s)%2==0?Math.floor(s):Math.ceil(s),s):Number.isNaN(s)||s===0&&Object.is(0,s)||s===1/0||s===-1/0?0:(s=o.util.IntegerPart(s),s%=2**t,n===`signed`&&s>=2**t-1?s-2**t:s)},o.util.IntegerPart=function(e){let t=Math.floor(Math.abs(e));return e<0?-1*t:t},o.util.Stringify=function(e){switch(o.util.Type(e)){case`Symbol`:return`Symbol(${e.description})`;case`Object`:return r(e);case`String`:return`"${e}"`;default:return`${e}`}},o.sequenceConverter=function(e){return(t,n,r,i)=>{if(o.util.Type(t)!==`Object`)throw o.errors.exception({header:n,message:`${r} (${o.util.Stringify(t)}) is not iterable.`});let a=typeof i==`function`?i():t?.[Symbol.iterator]?.(),s=[],c=0;if(a===void 0||typeof a.next!=`function`)throw o.errors.exception({header:n,message:`${r} is not iterable.`});for(;;){let{done:t,value:i}=a.next();if(t)break;s.push(e(i,n,`${r}[${c++}]`))}return s}},o.recordConverter=function(e,t){return(r,i,a)=>{if(o.util.Type(r)!==`Object`)throw o.errors.exception({header:i,message:`${a} ("${o.util.Type(r)}") is not an Object.`});let s={};if(!n.isProxy(r)){let n=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(let o of n){let n=e(o,i,a);s[n]=t(r[o],i,a)}return s}let c=Reflect.ownKeys(r);for(let n of c)if(Reflect.getOwnPropertyDescriptor(r,n)?.enumerable){let o=e(n,i,a);s[o]=t(r[n],i,a)}return s}},o.interfaceConverter=function(e){return(t,n,r,i)=>{if(i?.strict!==!1&&!(t instanceof e))throw o.errors.exception({header:n,message:`Expected ${r} ("${o.util.Stringify(t)}") to be an instance of ${e.name}.`});return t}},o.dictionaryConverter=function(e){return(t,n,r)=>{let i=o.util.Type(t),a={};if(i===`Null`||i===`Undefined`)return a;if(i!==`Object`)throw o.errors.exception({header:n,message:`Expected ${t} to be one of: Null, Undefined, Object.`});for(let i of e){let{key:e,defaultValue:s,required:c,converter:l}=i;if(c===!0&&!Object.hasOwn(t,e))throw o.errors.exception({header:n,message:`Missing required key "${e}".`});let u=t[e],d=Object.hasOwn(i,`defaultValue`);if(d&&u!==null&&(u??=s()),c||d||u!==void 0){if(u=l(u,n,`${r}.${e}`),i.allowedValues&&!i.allowedValues.includes(u))throw o.errors.exception({header:n,message:`${u} is not an accepted type. Expected one of ${i.allowedValues.join(`, `)}.`});a[e]=u}}return a}},o.nullableConverter=function(e){return(t,n,r)=>t===null?t:e(t,n,r)},o.converters.DOMString=function(e,t,n,r){if(e===null&&r?.legacyNullToEmptyString)return``;if(typeof e==`symbol`)throw o.errors.exception({header:t,message:`${n} is a symbol, which cannot be converted to a DOMString.`});return String(e)},o.converters.ByteString=function(e,t,n){let r=o.converters.DOMString(e,t,n);for(let e=0;e255)throw TypeError(`Cannot convert argument to a ByteString because the character at index ${e} has a value of ${r.charCodeAt(e)} which is greater than 255.`);return r},o.converters.USVString=a,o.converters.boolean=function(e){return!!e},o.converters.any=function(e){return e},o.converters[`long long`]=function(e,t,n){return o.util.ConvertToInt(e,64,`signed`,void 0,t,n)},o.converters[`unsigned long long`]=function(e,t,n){return o.util.ConvertToInt(e,64,`unsigned`,void 0,t,n)},o.converters[`unsigned long`]=function(e,t,n){return o.util.ConvertToInt(e,32,`unsigned`,void 0,t,n)},o.converters[`unsigned short`]=function(e,t,n,r){return o.util.ConvertToInt(e,16,`unsigned`,r,t,n)},o.converters.ArrayBuffer=function(e,t,r,i){if(o.util.Type(e)!==`Object`||!n.isAnyArrayBuffer(e))throw o.errors.conversionFailed({prefix:t,argument:`${r} ("${o.util.Stringify(e)}")`,types:[`ArrayBuffer`]});if(i?.allowShared===!1&&n.isSharedArrayBuffer(e))throw o.errors.exception({header:`ArrayBuffer`,message:`SharedArrayBuffer is not allowed.`});if(e.resizable||e.growable)throw o.errors.exception({header:`ArrayBuffer`,message:`Received a resizable ArrayBuffer.`});return e},o.converters.TypedArray=function(e,t,r,i,a){if(o.util.Type(e)!==`Object`||!n.isTypedArray(e)||e.constructor.name!==t.name)throw o.errors.conversionFailed({prefix:r,argument:`${i} ("${o.util.Stringify(e)}")`,types:[t.name]});if(a?.allowShared===!1&&n.isSharedArrayBuffer(e.buffer))throw o.errors.exception({header:`ArrayBuffer`,message:`SharedArrayBuffer is not allowed.`});if(e.buffer.resizable||e.buffer.growable)throw o.errors.exception({header:`ArrayBuffer`,message:`Received a resizable ArrayBuffer.`});return e},o.converters.DataView=function(e,t,r,i){if(o.util.Type(e)!==`Object`||!n.isDataView(e))throw o.errors.exception({header:t,message:`${r} is not a DataView.`});if(i?.allowShared===!1&&n.isSharedArrayBuffer(e.buffer))throw o.errors.exception({header:`ArrayBuffer`,message:`SharedArrayBuffer is not allowed.`});if(e.buffer.resizable||e.buffer.growable)throw o.errors.exception({header:`ArrayBuffer`,message:`Received a resizable ArrayBuffer.`});return e},o.converters.BufferSource=function(e,t,r,i){if(n.isAnyArrayBuffer(e))return o.converters.ArrayBuffer(e,t,r,{...i,allowShared:!1});if(n.isTypedArray(e))return o.converters.TypedArray(e,e.constructor,t,r,{...i,allowShared:!1});if(n.isDataView(e))return o.converters.DataView(e,t,r,{...i,allowShared:!1});throw o.errors.conversionFailed({prefix:t,argument:`${r} ("${o.util.Stringify(e)}")`,types:[`BufferSource`]})},o.converters[`sequence`]=o.sequenceConverter(o.converters.ByteString),o.converters[`sequence>`]=o.sequenceConverter(o.converters[`sequence`]),o.converters[`record`]=o.recordConverter(o.converters.ByteString,o.converters.ByteString),t.exports={webidl:o}})),V=/* @__PURE__ */ f(((e,t)=>{let{Transform:n}=p(`node:stream`),r=p(`node:zlib`),{redirectStatusSet:i,referrerPolicySet:a,badPortsSet:o}=te(),{getGlobalOrigin:s}=R(),{collectASequenceOfCodePoints:c,collectAnHTTPQuotedString:l,removeChars:u,parseMIMEType:d}=z(),{performance:f}=p(`node:perf_hooks`),{isBlobLike:m,ReadableStreamFrom:h,isValidHTTPToken:g,normalizedMethodRecordsBase:_}=O(),v=p(`node:assert`),{isUint8Array:y}=p(`node:util/types`),{webidl:b}=B(),x=[],S;try{S=p(`node:crypto`);let e=[`sha256`,`sha384`,`sha512`];x=S.getHashes().filter(t=>e.includes(t))}catch{}function C(e){let t=e.urlList,n=t.length;return n===0?null:t[n-1].toString()}function w(e,t){if(!i.has(e.status))return null;let n=e.headersList.get(`location`,!0);return n!==null&&N(n)&&(T(n)||(n=E(n)),n=new URL(n,C(e))),n&&!n.hash&&(n.hash=t),n}function T(e){for(let t=0;t126||n<32)return!1}return!0}function E(e){return Buffer.from(e,`binary`).toString(`utf8`)}function D(e){return e.urlList[e.urlList.length-1]}function k(e){let t=D(e);return Te(t)&&o.has(t.port)?`blocked`:`allowed`}function A(e){return e instanceof Error||e?.constructor?.name===`Error`||e?.constructor?.name===`DOMException`}function j(e){for(let t=0;t=32&&n<=126||n>=128&&n<=255))return!1}return!0}let M=g;function N(e){return(e[0]===` `||e[0]===` `||e[e.length-1]===` `||e[e.length-1]===` `||e.includes(` -`)||e.includes(`\r`)||e.includes(`\0`))===!1}function P(e,t){let{headersList:n}=t,r=(n.get(`referrer-policy`,!0)??``).split(`,`),i=``;if(r.length>0)for(let e=r.length;e!==0;e--){let t=r[e-1].trim();if(a.has(t)){i=t;break}}i!==``&&(e.referrerPolicy=i)}function F(){return`allowed`}function I(){return`success`}function L(){return`success`}function ee(e){let t=null;t=e.mode,e.headersList.set(`sec-fetch-mode`,t,!0)}function V(e){let t=e.origin;if(t!==`client`&&t!==void 0){if(e.responseTainting===`cors`||e.mode===`websocket`)e.headersList.append(`origin`,t,!0);else if(e.method!==`GET`&&e.method!==`HEAD`){switch(e.referrerPolicy){case`no-referrer`:t=null;break;case`no-referrer-when-downgrade`:case`strict-origin`:case`strict-origin-when-cross-origin`:e.origin&&we(e.origin)&&!we(D(e))&&(t=null);break;case`same-origin`:de(e,D(e))||(t=null)}e.headersList.append(`origin`,t,!0)}}}function H(e,t){return e}function ne(e,t,n){return!e?.startTime||e.startTime4096&&(r=i);let a=de(e,r),o=G(r)&&!G(e.url);switch(t){case`origin`:return i??W(n,!0);case`unsafe-url`:return r;case`same-origin`:return a?i:`no-referrer`;case`origin-when-cross-origin`:return a?r:i;case`strict-origin-when-cross-origin`:{let t=D(e);return de(r,t)?r:G(r)&&!G(t)?`no-referrer`:i}default:return o?`no-referrer`:i}}function W(e,t){return v(e instanceof URL),e=new URL(e),e.protocol===`file:`||e.protocol===`about:`||e.protocol===`blank:`?`no-referrer`:(e.username=``,e.password=``,e.hash=``,t&&(e.pathname=``,e.search=``),e)}function G(e){return e instanceof URL?e.href===`about:blank`||e.href===`about:srcdoc`||e.protocol===`data:`||e.protocol===`file:`||t(e.origin):!1;function t(e){if(e==null||e===`null`)return!1;let t=new URL(e);return!!(t.protocol===`https:`||t.protocol===`wss:`||/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(t.hostname)||t.hostname===`localhost`||t.hostname.includes(`localhost.`)||t.hostname.endsWith(`.localhost`))}}function se(e,t){ +`,t.message,t.stack);var i=/* @__PURE__ */ Error(`tunneling socket could not be established, cause=`+t.message);i.code=`ECONNRESET`,e.request.emit(`error`,i),n.removeSocket(r)}},i.prototype.removeSocket=function(e){var t=this.sockets.indexOf(e);if(t!==-1){this.sockets.splice(t,1);var n=this.requests.shift();n&&this.createSocket(n,function(e){n.request.onSocket(e)})}};function a(e,t,n){return typeof e==`string`?{host:e,port:t,localAddress:n}:e}function o(e){for(var t=1,n=arguments.length;t{t.exports=S()})),w=/* @__PURE__ */ f(((e,t)=>{t.exports={kClose:Symbol(`close`),kDestroy:Symbol(`destroy`),kDispatch:Symbol(`dispatch`),kUrl:Symbol(`url`),kWriting:Symbol(`writing`),kResuming:Symbol(`resuming`),kQueue:Symbol(`queue`),kConnect:Symbol(`connect`),kConnecting:Symbol(`connecting`),kKeepAliveDefaultTimeout:Symbol(`default keep alive timeout`),kKeepAliveMaxTimeout:Symbol(`max keep alive timeout`),kKeepAliveTimeoutThreshold:Symbol(`keep alive timeout threshold`),kKeepAliveTimeoutValue:Symbol(`keep alive timeout`),kKeepAlive:Symbol(`keep alive`),kHeadersTimeout:Symbol(`headers timeout`),kBodyTimeout:Symbol(`body timeout`),kServerName:Symbol(`server name`),kLocalAddress:Symbol(`local address`),kHost:Symbol(`host`),kNoRef:Symbol(`no ref`),kBodyUsed:Symbol(`used`),kBody:Symbol(`abstracted request body`),kRunning:Symbol(`running`),kBlocking:Symbol(`blocking`),kPending:Symbol(`pending`),kSize:Symbol(`size`),kBusy:Symbol(`busy`),kQueued:Symbol(`queued`),kFree:Symbol(`free`),kConnected:Symbol(`connected`),kClosed:Symbol(`closed`),kNeedDrain:Symbol(`need drain`),kReset:Symbol(`reset`),kDestroyed:Symbol.for(`nodejs.stream.destroyed`),kResume:Symbol(`resume`),kOnError:Symbol(`on error`),kMaxHeadersSize:Symbol(`max headers size`),kRunningIdx:Symbol(`running index`),kPendingIdx:Symbol(`pending index`),kError:Symbol(`error`),kClients:Symbol(`clients`),kClient:Symbol(`client`),kParser:Symbol(`parser`),kOnDestroyed:Symbol(`destroy callbacks`),kPipelining:Symbol(`pipelining`),kSocket:Symbol(`socket`),kHostHeader:Symbol(`host header`),kConnector:Symbol(`connector`),kStrictContentLength:Symbol(`strict content length`),kMaxRedirections:Symbol(`maxRedirections`),kMaxRequests:Symbol(`maxRequestsPerClient`),kProxy:Symbol(`proxy agent options`),kCounter:Symbol(`socket request counter`),kInterceptors:Symbol(`dispatch interceptors`),kMaxResponseSize:Symbol(`max response size`),kHTTP2Session:Symbol(`http2Session`),kHTTP2SessionState:Symbol(`http2Session state`),kRetryHandlerDefaultRetry:Symbol(`retry agent default retry`),kConstruct:Symbol(`constructable`),kListeners:Symbol(`listeners`),kHTTPContext:Symbol(`http context`),kMaxConcurrentStreams:Symbol(`max concurrent streams`),kNoProxyAgent:Symbol(`no proxy agent`),kHttpProxyAgent:Symbol(`http proxy agent`),kHttpsProxyAgent:Symbol(`https proxy agent`)}})),T=/* @__PURE__ */ f(((e,t)=>{let n=Symbol.for(`undici.error.UND_ERR`);var r=class extends Error{constructor(e){super(e),this.name=`UndiciError`,this.code=`UND_ERR`}static[Symbol.hasInstance](e){return e&&e[n]===!0}[n]=!0};let i=Symbol.for(`undici.error.UND_ERR_CONNECT_TIMEOUT`);var a=class extends r{constructor(e){super(e),this.name=`ConnectTimeoutError`,this.message=e||`Connect Timeout Error`,this.code=`UND_ERR_CONNECT_TIMEOUT`}static[Symbol.hasInstance](e){return e&&e[i]===!0}[i]=!0};let o=Symbol.for(`undici.error.UND_ERR_HEADERS_TIMEOUT`);var s=class extends r{constructor(e){super(e),this.name=`HeadersTimeoutError`,this.message=e||`Headers Timeout Error`,this.code=`UND_ERR_HEADERS_TIMEOUT`}static[Symbol.hasInstance](e){return e&&e[o]===!0}[o]=!0};let c=Symbol.for(`undici.error.UND_ERR_HEADERS_OVERFLOW`);var l=class extends r{constructor(e){super(e),this.name=`HeadersOverflowError`,this.message=e||`Headers Overflow Error`,this.code=`UND_ERR_HEADERS_OVERFLOW`}static[Symbol.hasInstance](e){return e&&e[c]===!0}[c]=!0};let u=Symbol.for(`undici.error.UND_ERR_BODY_TIMEOUT`);var d=class extends r{constructor(e){super(e),this.name=`BodyTimeoutError`,this.message=e||`Body Timeout Error`,this.code=`UND_ERR_BODY_TIMEOUT`}static[Symbol.hasInstance](e){return e&&e[u]===!0}[u]=!0};let f=Symbol.for(`undici.error.UND_ERR_RESPONSE_STATUS_CODE`);var p=class extends r{constructor(e,t,n,r){super(e),this.name=`ResponseStatusCodeError`,this.message=e||`Response Status Code Error`,this.code=`UND_ERR_RESPONSE_STATUS_CODE`,this.body=r,this.status=t,this.statusCode=t,this.headers=n}static[Symbol.hasInstance](e){return e&&e[f]===!0}[f]=!0};let m=Symbol.for(`undici.error.UND_ERR_INVALID_ARG`);var h=class extends r{constructor(e){super(e),this.name=`InvalidArgumentError`,this.message=e||`Invalid Argument Error`,this.code=`UND_ERR_INVALID_ARG`}static[Symbol.hasInstance](e){return e&&e[m]===!0}[m]=!0};let g=Symbol.for(`undici.error.UND_ERR_INVALID_RETURN_VALUE`);var _=class extends r{constructor(e){super(e),this.name=`InvalidReturnValueError`,this.message=e||`Invalid Return Value Error`,this.code=`UND_ERR_INVALID_RETURN_VALUE`}static[Symbol.hasInstance](e){return e&&e[g]===!0}[g]=!0};let v=Symbol.for(`undici.error.UND_ERR_ABORT`);var y=class extends r{constructor(e){super(e),this.name=`AbortError`,this.message=e||`The operation was aborted`,this.code=`UND_ERR_ABORT`}static[Symbol.hasInstance](e){return e&&e[v]===!0}[v]=!0};let b=Symbol.for(`undici.error.UND_ERR_ABORTED`);var x=class extends y{constructor(e){super(e),this.name=`AbortError`,this.message=e||`Request aborted`,this.code=`UND_ERR_ABORTED`}static[Symbol.hasInstance](e){return e&&e[b]===!0}[b]=!0};let S=Symbol.for(`undici.error.UND_ERR_INFO`);var C=class extends r{constructor(e){super(e),this.name=`InformationalError`,this.message=e||`Request information`,this.code=`UND_ERR_INFO`}static[Symbol.hasInstance](e){return e&&e[S]===!0}[S]=!0};let w=Symbol.for(`undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH`);var T=class extends r{constructor(e){super(e),this.name=`RequestContentLengthMismatchError`,this.message=e||`Request body length does not match content-length header`,this.code=`UND_ERR_REQ_CONTENT_LENGTH_MISMATCH`}static[Symbol.hasInstance](e){return e&&e[w]===!0}[w]=!0};let E=Symbol.for(`undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH`);var D=class extends r{constructor(e){super(e),this.name=`ResponseContentLengthMismatchError`,this.message=e||`Response body length does not match content-length header`,this.code=`UND_ERR_RES_CONTENT_LENGTH_MISMATCH`}static[Symbol.hasInstance](e){return e&&e[E]===!0}[E]=!0};let O=Symbol.for(`undici.error.UND_ERR_DESTROYED`);var k=class extends r{constructor(e){super(e),this.name=`ClientDestroyedError`,this.message=e||`The client is destroyed`,this.code=`UND_ERR_DESTROYED`}static[Symbol.hasInstance](e){return e&&e[O]===!0}[O]=!0};let A=Symbol.for(`undici.error.UND_ERR_CLOSED`);var j=class extends r{constructor(e){super(e),this.name=`ClientClosedError`,this.message=e||`The client is closed`,this.code=`UND_ERR_CLOSED`}static[Symbol.hasInstance](e){return e&&e[A]===!0}[A]=!0};let M=Symbol.for(`undici.error.UND_ERR_SOCKET`);var N=class extends r{constructor(e,t){super(e),this.name=`SocketError`,this.message=e||`Socket error`,this.code=`UND_ERR_SOCKET`,this.socket=t}static[Symbol.hasInstance](e){return e&&e[M]===!0}[M]=!0};let P=Symbol.for(`undici.error.UND_ERR_NOT_SUPPORTED`);var F=class extends r{constructor(e){super(e),this.name=`NotSupportedError`,this.message=e||`Not supported error`,this.code=`UND_ERR_NOT_SUPPORTED`}static[Symbol.hasInstance](e){return e&&e[P]===!0}[P]=!0};let I=Symbol.for(`undici.error.UND_ERR_BPL_MISSING_UPSTREAM`);var L=class extends r{constructor(e){super(e),this.name=`MissingUpstreamError`,this.message=e||`No upstream has been added to the BalancedPool`,this.code=`UND_ERR_BPL_MISSING_UPSTREAM`}static[Symbol.hasInstance](e){return e&&e[I]===!0}[I]=!0};let ee=Symbol.for(`undici.error.UND_ERR_HTTP_PARSER`);var te=class extends Error{constructor(e,t,n){super(e),this.name=`HTTPParserError`,this.code=t?`HPE_${t}`:void 0,this.data=n?n.toString():void 0}static[Symbol.hasInstance](e){return e&&e[ee]===!0}[ee]=!0};let R=Symbol.for(`undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE`);var z=class extends r{constructor(e){super(e),this.name=`ResponseExceededMaxSizeError`,this.message=e||`Response content exceeded max size`,this.code=`UND_ERR_RES_EXCEEDED_MAX_SIZE`}static[Symbol.hasInstance](e){return e&&e[R]===!0}[R]=!0};let B=Symbol.for(`undici.error.UND_ERR_REQ_RETRY`);var V=class extends r{constructor(e,t,{headers:n,data:r}){super(e),this.name=`RequestRetryError`,this.message=e||`Request retry error`,this.code=`UND_ERR_REQ_RETRY`,this.statusCode=t,this.data=r,this.headers=n}static[Symbol.hasInstance](e){return e&&e[B]===!0}[B]=!0};let H=Symbol.for(`undici.error.UND_ERR_RESPONSE`);var ne=class extends r{constructor(e,t,{headers:n,data:r}){super(e),this.name=`ResponseError`,this.message=e||`Response error`,this.code=`UND_ERR_RESPONSE`,this.statusCode=t,this.data=r,this.headers=n}static[Symbol.hasInstance](e){return e&&e[H]===!0}[H]=!0};let re=Symbol.for(`undici.error.UND_ERR_PRX_TLS`);var U=class extends r{constructor(e,t,n){super(t,{cause:e,...n??{}}),this.name=`SecureProxyConnectionError`,this.message=t||`Secure Proxy Connection failed`,this.code=`UND_ERR_PRX_TLS`,this.cause=e}static[Symbol.hasInstance](e){return e&&e[re]===!0}[re]=!0};let ie=Symbol.for(`undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED`);t.exports={AbortError:y,HTTPParserError:te,UndiciError:r,HeadersTimeoutError:s,HeadersOverflowError:l,BodyTimeoutError:d,RequestContentLengthMismatchError:T,ConnectTimeoutError:a,ResponseStatusCodeError:p,InvalidArgumentError:h,InvalidReturnValueError:_,RequestAbortedError:x,ClientDestroyedError:k,ClientClosedError:j,InformationalError:C,SocketError:N,NotSupportedError:F,ResponseContentLengthMismatchError:D,BalancedPoolMissingUpstreamError:L,ResponseExceededMaxSizeError:z,RequestRetryError:V,ResponseError:ne,SecureProxyConnectionError:U,MessageSizeExceededError:class extends r{constructor(e){super(e),this.name=`MessageSizeExceededError`,this.message=e||`Max decompressed message size exceeded`,this.code=`UND_ERR_WS_MESSAGE_SIZE_EXCEEDED`}static[Symbol.hasInstance](e){return e&&e[ie]===!0}get[ie](){return!0}}}})),E=/* @__PURE__ */ f(((e,t)=>{let n={},r=/* @__PURE__ */ `Accept.Accept-Encoding.Accept-Language.Accept-Ranges.Access-Control-Allow-Credentials.Access-Control-Allow-Headers.Access-Control-Allow-Methods.Access-Control-Allow-Origin.Access-Control-Expose-Headers.Access-Control-Max-Age.Access-Control-Request-Headers.Access-Control-Request-Method.Age.Allow.Alt-Svc.Alt-Used.Authorization.Cache-Control.Clear-Site-Data.Connection.Content-Disposition.Content-Encoding.Content-Language.Content-Length.Content-Location.Content-Range.Content-Security-Policy.Content-Security-Policy-Report-Only.Content-Type.Cookie.Cross-Origin-Embedder-Policy.Cross-Origin-Opener-Policy.Cross-Origin-Resource-Policy.Date.Device-Memory.Downlink.ECT.ETag.Expect.Expect-CT.Expires.Forwarded.From.Host.If-Match.If-Modified-Since.If-None-Match.If-Range.If-Unmodified-Since.Keep-Alive.Last-Modified.Link.Location.Max-Forwards.Origin.Permissions-Policy.Pragma.Proxy-Authenticate.Proxy-Authorization.RTT.Range.Referer.Referrer-Policy.Refresh.Retry-After.Sec-WebSocket-Accept.Sec-WebSocket-Extensions.Sec-WebSocket-Key.Sec-WebSocket-Protocol.Sec-WebSocket-Version.Server.Server-Timing.Service-Worker-Allowed.Service-Worker-Navigation-Preload.Set-Cookie.SourceMap.Strict-Transport-Security.Supports-Loading-Mode.TE.Timing-Allow-Origin.Trailer.Transfer-Encoding.Upgrade.Upgrade-Insecure-Requests.User-Agent.Vary.Via.WWW-Authenticate.X-Content-Type-Options.X-DNS-Prefetch-Control.X-Frame-Options.X-Permitted-Cross-Domain-Policies.X-Powered-By.X-Requested-With.X-XSS-Protection`.split(`.`);for(let e=0;e{let{wellknownHeaderNames:n,headerNameLowerCasedRecord:r}=E();var i=class e{value=null;left=null;middle=null;right=null;code;constructor(t,n,r){if(r===void 0||r>=t.length)throw TypeError(`Unreachable`);if((this.code=t.charCodeAt(r))>127)throw TypeError(`key must be ascii string`);t.length===++r?this.value=n:this.middle=new e(t,n,r)}add(t,n){let r=t.length;if(r===0)throw TypeError(`Unreachable`);let i=0,a=this;for(;;){let o=t.charCodeAt(i);if(o>127)throw TypeError(`key must be ascii string`);if(a.code===o){if(r===++i){a.value=n;break}if(a.middle!==null)a=a.middle;else{a.middle=new e(t,n,i);break}}else if(a.code=65&&(i|=32);r!==null;){if(i===r.code){if(t===++n)return r;r=r.middle;break}r=r.code{let n=p(`node:assert`),{kDestroyed:r,kBodyUsed:i,kListeners:a,kBody:o}=w(),{IncomingMessage:s}=p(`node:http`),c=p(`node:stream`),l=p(`node:net`),{Blob:u}=p(`node:buffer`),d=p(`node:util`),{stringify:f}=p(`node:querystring`),{EventEmitter:m}=p(`node:events`),{InvalidArgumentError:h}=T(),{headerNameLowerCasedRecord:g}=E(),{tree:_}=D(),[v,y]=process.versions.node.split(`.`).map(e=>Number(e));var b=class{constructor(e){this[o]=e,this[i]=!1}async*[Symbol.asyncIterator](){n(!this[i],`disturbed`),this[i]=!0,yield*this[o]}};function x(e){return C(e)?(te(e)===0&&e.on(`data`,function(){n(!1)}),typeof e.readableDidRead!=`boolean`&&(e[i]=!1,m.prototype.on.call(e,`data`,function(){this[i]=!0})),e):e&&typeof e.pipeTo==`function`||e&&typeof e!=`string`&&!ArrayBuffer.isView(e)&&ee(e)?new b(e):e}function S(){}function C(e){return e&&typeof e==`object`&&typeof e.pipe==`function`&&typeof e.on==`function`}function O(e){if(e===null)return!1;if(e instanceof u)return!0;if(typeof e!=`object`)return!1;{let t=e[Symbol.toStringTag];return(t===`Blob`||t===`File`)&&(`stream`in e&&typeof e.stream==`function`||`arrayBuffer`in e&&typeof e.arrayBuffer==`function`)}}function k(e,t){if(e.includes(`?`)||e.includes(`#`))throw Error(`Query params cannot be passed when url already contains "?" or "#".`);let n=f(t);return n&&(e+=`?`+n),e}function A(e){let t=parseInt(e,10);return t===Number(e)&&t>=0&&t<=65535}function j(e){return e!=null&&e[0]===`h`&&e[1]===`t`&&e[2]===`t`&&e[3]===`p`&&(e[4]===`:`||e[4]===`s`&&e[5]===`:`)}function M(e){if(typeof e==`string`){if(e=new URL(e),!j(e.origin||e.protocol))throw new h("Invalid URL protocol: the URL must start with `http:` or `https:`.");return e}if(!e||typeof e!=`object`)throw new h(`Invalid URL: The URL argument must be a non-null object.`);if(!(e instanceof URL)){if(e.port!=null&&e.port!==``&&A(e.port)===!1)throw new h(`Invalid URL: port must be a valid integer or a string representation of an integer.`);if(e.path!=null&&typeof e.path!=`string`)throw new h(`Invalid URL path: the path must be a string or null/undefined.`);if(e.pathname!=null&&typeof e.pathname!=`string`)throw new h(`Invalid URL pathname: the pathname must be a string or null/undefined.`);if(e.hostname!=null&&typeof e.hostname!=`string`)throw new h(`Invalid URL hostname: the hostname must be a string or null/undefined.`);if(e.origin!=null&&typeof e.origin!=`string`)throw new h(`Invalid URL origin: the origin must be a string or null/undefined.`);if(!j(e.origin||e.protocol))throw new h("Invalid URL protocol: the URL must start with `http:` or `https:`.");let t=e.port==null?e.protocol===`https:`?443:80:e.port,n=e.origin==null?`${e.protocol||``}//${e.hostname||``}:${t}`:e.origin,r=e.path==null?`${e.pathname||``}${e.search||``}`:e.path;return n[n.length-1]===`/`&&(n=n.slice(0,n.length-1)),r&&r[0]!==`/`&&(r=`/${r}`),new URL(`${n}${r}`)}if(!j(e.origin||e.protocol))throw new h("Invalid URL protocol: the URL must start with `http:` or `https:`.");return e}function N(e){if(e=M(e),e.pathname!==`/`||e.search||e.hash)throw new h(`invalid url`);return e}function P(e){if(e[0]===`[`){let t=e.indexOf(`]`);return n(t!==-1),e.substring(1,t)}let t=e.indexOf(`:`);return t===-1?e:e.substring(0,t)}function F(e){if(!e)return null;n(typeof e==`string`);let t=P(e);return l.isIP(t)?``:t}function I(e){return JSON.parse(JSON.stringify(e))}function L(e){return e!=null&&typeof e[Symbol.asyncIterator]==`function`}function ee(e){return!(e==null||typeof e[Symbol.iterator]!=`function`&&typeof e[Symbol.asyncIterator]!=`function`)}function te(e){if(e==null)return 0;if(C(e)){let t=e._readableState;return t&&t.objectMode===!1&&t.ended===!0&&Number.isFinite(t.length)?t.length:null}return O(e)?e.size==null?null:e.size:ie(e)?e.byteLength:null}function R(e){return e&&!!(e.destroyed||e[r]||c.isDestroyed?.(e))}function z(e,t){e!=null&&C(e)&&!R(e)&&(typeof e.destroy==`function`?(Object.getPrototypeOf(e).constructor===s&&(e.socket=null),e.destroy(t)):t&&queueMicrotask(()=>{e.emit(`error`,t)}),e.destroyed!==!0&&(e[r]=!0))}let B=/timeout=(\d+)/;function V(e){let t=e.toString().match(B);return t?parseInt(t[1],10)*1e3:null}function H(e){return typeof e==`string`?g[e]??e.toLowerCase():_.lookup(e)??e.toString(`latin1`).toLowerCase()}function ne(e){return _.lookup(e)??e.toString(`latin1`).toLowerCase()}function re(e,t){t===void 0&&(t={});for(let n=0;ne.toString(`utf8`)):i.toString(`utf8`)}}return`content-length`in t&&`content-disposition`in t&&(t[`content-disposition`]=Buffer.from(t[`content-disposition`]).toString(`latin1`)),t}function U(e){let t=e.length,n=Array(t),r=!1,i=-1,a,o,s=0;for(let t=0;t{e.close(),e.byobRequest?.respond(0)});else{let t=Buffer.isBuffer(r)?r:Buffer.from(r);t.byteLength&&e.enqueue(new Uint8Array(t))}return e.desiredSize>0},async cancel(e){await t.return()},type:`bytes`})}function se(e){return e&&typeof e==`object`&&typeof e.append==`function`&&typeof e.delete==`function`&&typeof e.get==`function`&&typeof e.getAll==`function`&&typeof e.has==`function`&&typeof e.set==`function`&&e[Symbol.toStringTag]===`FormData`}function J(e,t){return`addEventListener`in e?(e.addEventListener(`abort`,t,{once:!0}),()=>e.removeEventListener(`abort`,t)):(e.addListener(`abort`,t),()=>e.removeListener(`abort`,t))}let ce=typeof String.prototype.toWellFormed==`function`,Y=typeof String.prototype.isWellFormed==`function`;function le(e){return ce?`${e}`.toWellFormed():d.toUSVString(e)}function ue(e){return Y?`${e}`.isWellFormed():le(e)===`${e}`}function X(e){switch(e){case 34:case 40:case 41:case 44:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 123:case 125:return!1;default:return e>=33&&e<=126}}function de(e){if(e.length===0)return!1;for(let t=0;t{let n=p(`node:diagnostics_channel`),r=p(`node:util`),i=r.debuglog(`undici`),a=r.debuglog(`fetch`),o=r.debuglog(`websocket`),s=!1,c={beforeConnect:n.channel(`undici:client:beforeConnect`),connected:n.channel(`undici:client:connected`),connectError:n.channel(`undici:client:connectError`),sendHeaders:n.channel(`undici:client:sendHeaders`),create:n.channel(`undici:request:create`),bodySent:n.channel(`undici:request:bodySent`),headers:n.channel(`undici:request:headers`),trailers:n.channel(`undici:request:trailers`),error:n.channel(`undici:request:error`),open:n.channel(`undici:websocket:open`),close:n.channel(`undici:websocket:close`),socketError:n.channel(`undici:websocket:socket_error`),ping:n.channel(`undici:websocket:ping`),pong:n.channel(`undici:websocket:pong`)};if(i.enabled||a.enabled){let e=a.enabled?a:i;n.channel(`undici:client:beforeConnect`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a}}=t;e(`connecting to %s using %s%s`,`${a}${i?`:${i}`:``}`,r,n)}),n.channel(`undici:client:connected`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a}}=t;e(`connected to %s using %s%s`,`${a}${i?`:${i}`:``}`,r,n)}),n.channel(`undici:client:connectError`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a},error:o}=t;e(`connection to %s using %s%s errored - %s`,`${a}${i?`:${i}`:``}`,r,n,o.message)}),n.channel(`undici:client:sendHeaders`).subscribe(t=>{let{request:{method:n,path:r,origin:i}}=t;e(`sending request to %s %s/%s`,n,i,r)}),n.channel(`undici:request:headers`).subscribe(t=>{let{request:{method:n,path:r,origin:i},response:{statusCode:a}}=t;e(`received response to %s %s/%s - HTTP %d`,n,i,r,a)}),n.channel(`undici:request:trailers`).subscribe(t=>{let{request:{method:n,path:r,origin:i}}=t;e(`trailers received from %s %s/%s`,n,i,r)}),n.channel(`undici:request:error`).subscribe(t=>{let{request:{method:n,path:r,origin:i},error:a}=t;e(`request to %s %s/%s errored - %s`,n,i,r,a.message)}),s=!0}if(o.enabled){if(!s){let e=i.enabled?i:o;n.channel(`undici:client:beforeConnect`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a}}=t;e(`connecting to %s%s using %s%s`,a,i?`:${i}`:``,r,n)}),n.channel(`undici:client:connected`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a}}=t;e(`connected to %s%s using %s%s`,a,i?`:${i}`:``,r,n)}),n.channel(`undici:client:connectError`).subscribe(t=>{let{connectParams:{version:n,protocol:r,port:i,host:a},error:o}=t;e(`connection to %s%s using %s%s errored - %s`,a,i?`:${i}`:``,r,n,o.message)}),n.channel(`undici:client:sendHeaders`).subscribe(t=>{let{request:{method:n,path:r,origin:i}}=t;e(`sending request to %s %s/%s`,n,i,r)})}n.channel(`undici:websocket:open`).subscribe(e=>{let{address:{address:t,port:n}}=e;o(`connection opened %s%s`,t,n?`:${n}`:``)}),n.channel(`undici:websocket:close`).subscribe(e=>{let{websocket:t,code:n,reason:r}=e;o(`closed connection to %s - %s %s`,t.url,n,r)}),n.channel(`undici:websocket:socket_error`).subscribe(e=>{o(`connection errored - %s`,e.message)}),n.channel(`undici:websocket:ping`).subscribe(e=>{o(`ping received`)}),n.channel(`undici:websocket:pong`).subscribe(e=>{o(`pong received`)})}t.exports={channels:c}})),A=/* @__PURE__ */ f(((e,t)=>{let{InvalidArgumentError:n,NotSupportedError:r}=T(),i=p(`node:assert`),{isValidHTTPToken:a,isValidHeaderValue:o,isStream:s,destroy:c,isBuffer:l,isFormDataLike:u,isIterable:d,isBlobLike:f,buildURL:m,validateHandler:h,getServerName:g,normalizedMethodRecords:_}=O(),{channels:v}=k(),{headerNameLowerCasedRecord:y}=E(),b=/[^\u0021-\u00ff]/,x=Symbol(`handler`);var S=class{constructor(e,{path:t,method:r,body:i,headers:p,query:y,idempotent:S,blocking:w,upgrade:T,headersTimeout:E,bodyTimeout:D,reset:O,throwOnError:k,expectContinue:A,servername:j},M){if(typeof t!=`string`)throw new n(`path must be a string`);if(t[0]!==`/`&&!(t.startsWith(`http://`)||t.startsWith(`https://`))&&r!==`CONNECT`)throw new n(`path must be an absolute URL or start with a slash`);if(b.test(t))throw new n(`invalid request path`);if(typeof r!=`string`)throw new n(`method must be a string`);if(_[r]===void 0&&!a(r))throw new n(`invalid request method`);if(T&&typeof T!=`string`)throw new n(`upgrade must be a string`);if(T&&!o(T))throw new n(`invalid upgrade header`);if(E!=null&&(!Number.isFinite(E)||E<0))throw new n(`invalid headersTimeout`);if(D!=null&&(!Number.isFinite(D)||D<0))throw new n(`invalid bodyTimeout`);if(O!=null&&typeof O!=`boolean`)throw new n(`invalid reset`);if(A!=null&&typeof A!=`boolean`)throw new n(`invalid expectContinue`);if(this.headersTimeout=E,this.bodyTimeout=D,this.throwOnError=k===!0,this.method=r,this.abort=null,i==null)this.body=null;else if(s(i)){this.body=i;let e=this.body._readableState;e&&e.autoDestroy||(this.endHandler=function(){c(this)},this.body.on(`end`,this.endHandler)),this.errorHandler=e=>{this.abort?this.abort(e):this.error=e},this.body.on(`error`,this.errorHandler)}else if(l(i))this.body=i.byteLength?i:null;else if(ArrayBuffer.isView(i))this.body=i.buffer.byteLength?Buffer.from(i.buffer,i.byteOffset,i.byteLength):null;else if(i instanceof ArrayBuffer)this.body=i.byteLength?Buffer.from(i):null;else if(typeof i==`string`)this.body=i.length?Buffer.from(i):null;else if(u(i)||d(i)||f(i))this.body=i;else throw new n(`body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable`);if(this.completed=!1,this.aborted=!1,this.upgrade=T||null,this.path=y?m(t,y):t,this.origin=e,this.idempotent=S??(r===`HEAD`||r===`GET`),this.blocking=w??!1,this.reset=O??null,this.host=null,this.contentLength=null,this.contentType=null,this.headers=[],this.expectContinue=A??!1,Array.isArray(p)){if(p.length%2!=0)throw new n(`headers array must be even`);for(let e=0;e{let n=p(`node:events`);var r=class extends n{dispatch(){throw Error(`not implemented`)}close(){throw Error(`not implemented`)}destroy(){throw Error(`not implemented`)}compose(...e){let t=Array.isArray(e[0])?e[0]:e,n=this.dispatch.bind(this);for(let e of t)if(e!=null){if(typeof e!=`function`)throw TypeError(`invalid interceptor, expected function received ${typeof e}`);if(n=e(n),n==null||typeof n!=`function`||n.length!==2)throw TypeError(`invalid interceptor`)}return new i(this,n)}},i=class extends r{#e=null;#t=null;constructor(e,t){super(),this.#e=e,this.#t=t}dispatch(...e){this.#t(...e)}close(...e){return this.#e.close(...e)}destroy(...e){return this.#e.destroy(...e)}};t.exports=r})),M=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:buffer`),r=j(),{ClientDestroyedError:i,ClientClosedError:a,InvalidArgumentError:o}=T(),{kDestroy:s,kClose:c,kClosed:l,kDestroyed:u,kDispatch:d,kInterceptors:f}=w(),m=Symbol(`onDestroyed`),h=Symbol(`onClosed`),g=Symbol(`Intercepted Dispatch`),_=Symbol(`webSocketOptions`),v=Symbol(`eventSourceOptions`);t.exports=class extends r{constructor(e){super(),this[u]=!1,this[m]=null,this[l]=!1,this[h]=[],this[_]=e?.webSocket??{},this[v]=e?.eventSource??{}}get webSocketOptions(){return{maxFragments:this[_].maxFragments??131072,maxPayloadSize:this[_].maxPayloadSize??134217728}}get eventSourceOptions(){return{maxEventSize:this[v].maxEventSize??n.kStringMaxLength}}get destroyed(){return this[u]}get closed(){return this[l]}get interceptors(){return this[f]}set interceptors(e){if(e){for(let t=e.length-1;t>=0;t--)if(typeof this[f][t]!=`function`)throw new o(`interceptor must be an function`)}this[f]=e}close(e){if(e===void 0)return new Promise((e,t)=>{this.close((n,r)=>n?t(n):e(r))});if(typeof e!=`function`)throw new o(`invalid callback`);if(this[u]){queueMicrotask(()=>e(new i,null));return}if(this[l]){this[h]?this[h].push(e):queueMicrotask(()=>e(null,null));return}this[l]=!0,this[h].push(e);let t=()=>{let e=this[h];this[h]=null;for(let t=0;tthis.destroy()).then(()=>{queueMicrotask(t)})}destroy(e,t){if(typeof e==`function`&&(t=e,e=null),t===void 0)return new Promise((t,n)=>{this.destroy(e,(e,r)=>e?/* istanbul ignore next: should never error */n(e):t(r))});if(typeof t!=`function`)throw new o(`invalid callback`);if(this[u]){this[m]?this[m].push(t):queueMicrotask(()=>t(null,null));return}e||=new i,this[u]=!0,this[m]=this[m]||[],this[m].push(t);let n=()=>{let e=this[m];this[m]=null;for(let t=0;t{queueMicrotask(n)})}[g](e,t){if(!this[f]||this[f].length===0)return this[g]=this[d],this[d](e,t);let n=this[d].bind(this);for(let e=this[f].length-1;e>=0;e--)n=this[f][e](n);return this[g]=n,n(e,t)}dispatch(e,t){if(!t||typeof t!=`object`)throw new o(`handler must be an object`);try{if(!e||typeof e!=`object`)throw new o(`opts must be an object.`);if(this[u]||this[m])throw new i;if(this[l])throw new a;return this[g](e,t)}catch(e){if(typeof t.onError!=`function`)throw new o(`invalid onError method`);return t.onError(e),!1}}}})),N=/* @__PURE__ */ f(((e,t)=>{let n=0,r=1e3,i,a=Symbol(`kFastTimer`),o=[];function s(){n+=499;let e=0,t=o.length;for(;e=r._idleStart+r._idleTimeout&&(r._state=-1,r._idleStart=-1,r._onTimeout(r._timerArg)),r._state===-1?(r._state=-2,--t!==0&&(o[e]=o[t])):++e}o.length=t,o.length!==0&&c()}function c(){i?i.refresh():(clearTimeout(i),i=setTimeout(s,499),i.unref&&i.unref())}var l=class{[a]=!0;_state=-2;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(e,t,n){this._onTimeout=e,this._idleTimeout=t,this._timerArg=n,this.refresh()}refresh(){this._state===-2&&o.push(this),i&&o.length!==1||c(),this._state=0}clear(){this._state=-1,this._idleStart=-1}};t.exports={setTimeout(e,t,n){return t<=r?setTimeout(e,t,n):new l(e,t,n)},clearTimeout(e){e[a]?e.clear():clearTimeout(e)},setFastTimeout(e,t,n){return new l(e,t,n)},clearFastTimeout(e){e.clear()},now(){return n},tick(e=0){n+=e-r+1,s(),s()},reset(){n=0,o.length=0,clearTimeout(i),i=null},kFastTimer:a}})),P=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:net`),r=p(`node:assert`),i=O(),{InvalidArgumentError:a,ConnectTimeoutError:o}=T(),s=N();function c(){}let l,u;u=global.FinalizationRegistry&&!(process.env.NODE_V8_COVERAGE||process.env.UNDICI_NO_FG)?class{constructor(e){this._maxCachedSessions=e,this._sessionCache=/* @__PURE__ */ new Map,this._sessionRegistry=new global.FinalizationRegistry(e=>{if(this._sessionCache.size=this._maxCachedSessions){let{value:e}=this._sessionCache.keys().next();this._sessionCache.delete(e)}this._sessionCache.set(e,t)}}};function d({allowH2:e,maxCachedSessions:t,socketPath:o,timeout:s,session:c,...d}){if(t!=null&&(!Number.isInteger(t)||t<0))throw new a(`maxCachedSessions must be a positive integer or zero`);let m={path:o,...d},h=new u(t??100);return s??=1e4,e??=!1,function({hostname:t,host:a,protocol:o,port:u,servername:d,localAddress:g,httpSocket:_},v){let y;if(o===`https:`){l||=p(`node:tls`),d=d||m.servername||i.getServerName(a)||null;let n=d||t;r(n);let o=c||h.get(n)||null;u||=443,y=l.connect({highWaterMark:16384,...m,servername:d,session:o,localAddress:g,ALPNProtocols:e?[`http/1.1`,`h2`]:[`http/1.1`],socket:_,port:u,host:t}),y.on(`session`,function(e){h.set(n,e)})}else r(!_,`httpSocket can only be sent on TLS update`),u||=80,y=n.connect({highWaterMark:65536,...m,localAddress:g,port:u,host:t});if(m.keepAlive==null||m.keepAlive){let e=m.keepAliveInitialDelay===void 0?6e4:m.keepAliveInitialDelay;y.setKeepAlive(!0,e)}let b=f(new WeakRef(y),{timeout:s,hostname:t,port:u});return y.setNoDelay(!0).once(o===`https:`?`secureConnect`:`connect`,function(){if(queueMicrotask(b),v){let e=v;v=null,e(null,this)}}).on(`error`,function(e){if(queueMicrotask(b),v){let t=v;v=null,t(e)}}),y}}let f=process.platform===`win32`?(e,t)=>{if(!t.timeout)return c;let n=null,r=null,i=s.setFastTimeout(()=>{n=setImmediate(()=>{r=setImmediate(()=>m(e.deref(),t))})},t.timeout);return()=>{s.clearFastTimeout(i),clearImmediate(n),clearImmediate(r)}}:(e,t)=>{if(!t.timeout)return c;let n=null,r=s.setFastTimeout(()=>{n=setImmediate(()=>{m(e.deref(),t)})},t.timeout);return()=>{s.clearFastTimeout(r),clearImmediate(n)}};function m(e,t){if(e==null)return;let n=`Connect Timeout Error`;Array.isArray(e.autoSelectFamilyAttemptedAddresses)?n+=` (attempted addresses: ${e.autoSelectFamilyAttemptedAddresses.join(`, `)},`:n+=` (attempted address: ${t.hostname}:${t.port},`,n+=` timeout: ${t.timeout}ms)`,i.destroy(e,new o(n))}t.exports=d})),F=/* @__PURE__ */ f((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.enumToMap=void 0;function t(e){let t={};return Object.keys(e).forEach(n=>{let r=e[n];typeof r==`number`&&(t[n]=r)}),t}e.enumToMap=t})),I=/* @__PURE__ */ f((e=>{Object.defineProperty(e,"__esModule",{value:!0}),e.SPECIAL_HEADERS=e.HEADER_STATE=e.MINOR=e.MAJOR=e.CONNECTION_TOKEN_CHARS=e.HEADER_CHARS=e.TOKEN=e.STRICT_TOKEN=e.HEX=e.URL_CHAR=e.STRICT_URL_CHAR=e.USERINFO_CHARS=e.MARK=e.ALPHANUM=e.NUM=e.HEX_MAP=e.NUM_MAP=e.ALPHA=e.FINISH=e.H_METHOD_MAP=e.METHOD_MAP=e.METHODS_RTSP=e.METHODS_ICE=e.METHODS_HTTP=e.METHODS=e.LENIENT_FLAGS=e.FLAGS=e.TYPE=e.ERROR=void 0;let t=F();(function(e){e[e.OK=0]=`OK`,e[e.INTERNAL=1]=`INTERNAL`,e[e.STRICT=2]=`STRICT`,e[e.LF_EXPECTED=3]=`LF_EXPECTED`,e[e.UNEXPECTED_CONTENT_LENGTH=4]=`UNEXPECTED_CONTENT_LENGTH`,e[e.CLOSED_CONNECTION=5]=`CLOSED_CONNECTION`,e[e.INVALID_METHOD=6]=`INVALID_METHOD`,e[e.INVALID_URL=7]=`INVALID_URL`,e[e.INVALID_CONSTANT=8]=`INVALID_CONSTANT`,e[e.INVALID_VERSION=9]=`INVALID_VERSION`,e[e.INVALID_HEADER_TOKEN=10]=`INVALID_HEADER_TOKEN`,e[e.INVALID_CONTENT_LENGTH=11]=`INVALID_CONTENT_LENGTH`,e[e.INVALID_CHUNK_SIZE=12]=`INVALID_CHUNK_SIZE`,e[e.INVALID_STATUS=13]=`INVALID_STATUS`,e[e.INVALID_EOF_STATE=14]=`INVALID_EOF_STATE`,e[e.INVALID_TRANSFER_ENCODING=15]=`INVALID_TRANSFER_ENCODING`,e[e.CB_MESSAGE_BEGIN=16]=`CB_MESSAGE_BEGIN`,e[e.CB_HEADERS_COMPLETE=17]=`CB_HEADERS_COMPLETE`,e[e.CB_MESSAGE_COMPLETE=18]=`CB_MESSAGE_COMPLETE`,e[e.CB_CHUNK_HEADER=19]=`CB_CHUNK_HEADER`,e[e.CB_CHUNK_COMPLETE=20]=`CB_CHUNK_COMPLETE`,e[e.PAUSED=21]=`PAUSED`,e[e.PAUSED_UPGRADE=22]=`PAUSED_UPGRADE`,e[e.PAUSED_H2_UPGRADE=23]=`PAUSED_H2_UPGRADE`,e[e.USER=24]=`USER`})(e.ERROR||={}),(function(e){e[e.BOTH=0]=`BOTH`,e[e.REQUEST=1]=`REQUEST`,e[e.RESPONSE=2]=`RESPONSE`})(e.TYPE||={}),(function(e){e[e.CONNECTION_KEEP_ALIVE=1]=`CONNECTION_KEEP_ALIVE`,e[e.CONNECTION_CLOSE=2]=`CONNECTION_CLOSE`,e[e.CONNECTION_UPGRADE=4]=`CONNECTION_UPGRADE`,e[e.CHUNKED=8]=`CHUNKED`,e[e.UPGRADE=16]=`UPGRADE`,e[e.CONTENT_LENGTH=32]=`CONTENT_LENGTH`,e[e.SKIPBODY=64]=`SKIPBODY`,e[e.TRAILING=128]=`TRAILING`,e[e.TRANSFER_ENCODING=512]=`TRANSFER_ENCODING`})(e.FLAGS||={}),(function(e){e[e.HEADERS=1]=`HEADERS`,e[e.CHUNKED_LENGTH=2]=`CHUNKED_LENGTH`,e[e.KEEP_ALIVE=4]=`KEEP_ALIVE`})(e.LENIENT_FLAGS||={});var n;(function(e){e[e.DELETE=0]=`DELETE`,e[e.GET=1]=`GET`,e[e.HEAD=2]=`HEAD`,e[e.POST=3]=`POST`,e[e.PUT=4]=`PUT`,e[e.CONNECT=5]=`CONNECT`,e[e.OPTIONS=6]=`OPTIONS`,e[e.TRACE=7]=`TRACE`,e[e.COPY=8]=`COPY`,e[e.LOCK=9]=`LOCK`,e[e.MKCOL=10]=`MKCOL`,e[e.MOVE=11]=`MOVE`,e[e.PROPFIND=12]=`PROPFIND`,e[e.PROPPATCH=13]=`PROPPATCH`,e[e.SEARCH=14]=`SEARCH`,e[e.UNLOCK=15]=`UNLOCK`,e[e.BIND=16]=`BIND`,e[e.REBIND=17]=`REBIND`,e[e.UNBIND=18]=`UNBIND`,e[e.ACL=19]=`ACL`,e[e.REPORT=20]=`REPORT`,e[e.MKACTIVITY=21]=`MKACTIVITY`,e[e.CHECKOUT=22]=`CHECKOUT`,e[e.MERGE=23]=`MERGE`,e[e[`M-SEARCH`]=24]=`M-SEARCH`,e[e.NOTIFY=25]=`NOTIFY`,e[e.SUBSCRIBE=26]=`SUBSCRIBE`,e[e.UNSUBSCRIBE=27]=`UNSUBSCRIBE`,e[e.PATCH=28]=`PATCH`,e[e.PURGE=29]=`PURGE`,e[e.MKCALENDAR=30]=`MKCALENDAR`,e[e.LINK=31]=`LINK`,e[e.UNLINK=32]=`UNLINK`,e[e.SOURCE=33]=`SOURCE`,e[e.PRI=34]=`PRI`,e[e.DESCRIBE=35]=`DESCRIBE`,e[e.ANNOUNCE=36]=`ANNOUNCE`,e[e.SETUP=37]=`SETUP`,e[e.PLAY=38]=`PLAY`,e[e.PAUSE=39]=`PAUSE`,e[e.TEARDOWN=40]=`TEARDOWN`,e[e.GET_PARAMETER=41]=`GET_PARAMETER`,e[e.SET_PARAMETER=42]=`SET_PARAMETER`,e[e.REDIRECT=43]=`REDIRECT`,e[e.RECORD=44]=`RECORD`,e[e.FLUSH=45]=`FLUSH`})(n=e.METHODS||={}),e.METHODS_HTTP=[n.DELETE,n.GET,n.HEAD,n.POST,n.PUT,n.CONNECT,n.OPTIONS,n.TRACE,n.COPY,n.LOCK,n.MKCOL,n.MOVE,n.PROPFIND,n.PROPPATCH,n.SEARCH,n.UNLOCK,n.BIND,n.REBIND,n.UNBIND,n.ACL,n.REPORT,n.MKACTIVITY,n.CHECKOUT,n.MERGE,n[`M-SEARCH`],n.NOTIFY,n.SUBSCRIBE,n.UNSUBSCRIBE,n.PATCH,n.PURGE,n.MKCALENDAR,n.LINK,n.UNLINK,n.PRI,n.SOURCE],e.METHODS_ICE=[n.SOURCE],e.METHODS_RTSP=[n.OPTIONS,n.DESCRIBE,n.ANNOUNCE,n.SETUP,n.PLAY,n.PAUSE,n.TEARDOWN,n.GET_PARAMETER,n.SET_PARAMETER,n.REDIRECT,n.RECORD,n.FLUSH,n.GET,n.POST],e.METHOD_MAP=t.enumToMap(n),e.H_METHOD_MAP={},Object.keys(e.METHOD_MAP).forEach(t=>{/^H/.test(t)&&(e.H_METHOD_MAP[t]=e.METHOD_MAP[t])}),(function(e){e[e.SAFE=0]=`SAFE`,e[e.SAFE_WITH_CB=1]=`SAFE_WITH_CB`,e[e.UNSAFE=2]=`UNSAFE`})(e.FINISH||={}),e.ALPHA=[];for(let t=65;t<=90;t++)e.ALPHA.push(String.fromCharCode(t)),e.ALPHA.push(String.fromCharCode(t+32));e.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9},e.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},e.NUM=[`0`,`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`],e.ALPHANUM=e.ALPHA.concat(e.NUM),e.MARK=[`-`,`_`,`.`,`!`,`~`,`*`,`'`,`(`,`)`],e.USERINFO_CHARS=e.ALPHANUM.concat(e.MARK).concat([`%`,`;`,`:`,`&`,`=`,`+`,`$`,`,`]),e.STRICT_URL_CHAR=(/* @__PURE__ */ `!"$%&'()*+,-./:;<=>@[\\]^_\`{|}~`.split(``)).concat(e.ALPHANUM),e.URL_CHAR=e.STRICT_URL_CHAR.concat([` `,`\f`]);for(let t=128;t<=255;t++)e.URL_CHAR.push(t);e.HEX=e.NUM.concat([`a`,`b`,`c`,`d`,`e`,`f`,`A`,`B`,`C`,`D`,`E`,`F`]),e.STRICT_TOKEN=[`!`,`#`,`$`,`%`,`&`,`'`,`*`,`+`,`-`,`.`,`^`,`_`,"`",`|`,`~`].concat(e.ALPHANUM),e.TOKEN=e.STRICT_TOKEN.concat([` `]),e.HEADER_CHARS=[` `];for(let t=32;t<=255;t++)t!==127&&e.HEADER_CHARS.push(t);e.CONNECTION_TOKEN_CHARS=e.HEADER_CHARS.filter(e=>e!==44),e.MAJOR=e.NUM_MAP,e.MINOR=e.MAJOR;var r;(function(e){e[e.GENERAL=0]=`GENERAL`,e[e.CONNECTION=1]=`CONNECTION`,e[e.CONTENT_LENGTH=2]=`CONTENT_LENGTH`,e[e.TRANSFER_ENCODING=3]=`TRANSFER_ENCODING`,e[e.UPGRADE=4]=`UPGRADE`,e[e.CONNECTION_KEEP_ALIVE=5]=`CONNECTION_KEEP_ALIVE`,e[e.CONNECTION_CLOSE=6]=`CONNECTION_CLOSE`,e[e.CONNECTION_UPGRADE=7]=`CONNECTION_UPGRADE`,e[e.TRANSFER_ENCODING_CHUNKED=8]=`TRANSFER_ENCODING_CHUNKED`})(r=e.HEADER_STATE||={}),e.SPECIAL_HEADERS={connection:r.CONNECTION,"content-length":r.CONTENT_LENGTH,"proxy-connection":r.CONNECTION,"transfer-encoding":r.TRANSFER_ENCODING,upgrade:r.UPGRADE}})),L=/* @__PURE__ */ f(((e,t)=>{let{Buffer:n}=p(`node:buffer`);t.exports=n.from(`AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv`,`base64`)})),ee=/* @__PURE__ */ f(((e,t)=>{let{Buffer:n}=p(`node:buffer`);t.exports=n.from(`AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==`,`base64`)})),te=/* @__PURE__ */ f(((e,t)=>{let n=[`GET`,`HEAD`,`POST`],r=new Set(n),i=[101,204,205,304],a=[301,302,303,307,308],o=new Set(a),s=/* @__PURE__ */ `1.7.9.11.13.15.17.19.20.21.22.23.25.37.42.43.53.69.77.79.87.95.101.102.103.104.109.110.111.113.115.117.119.123.135.137.139.143.161.179.389.427.465.512.513.514.515.526.530.531.532.540.548.554.556.563.587.601.636.989.990.993.995.1719.1720.1723.2049.3659.4045.4190.5060.5061.6000.6566.6665.6666.6667.6668.6669.6679.6697.10080`.split(`.`),c=new Set(s),l=[``,`no-referrer`,`no-referrer-when-downgrade`,`same-origin`,`origin`,`strict-origin`,`origin-when-cross-origin`,`strict-origin-when-cross-origin`,`unsafe-url`],u=new Set(l),d=[`follow`,`manual`,`error`],f=[`GET`,`HEAD`,`OPTIONS`,`TRACE`],p=new Set(f),m=[`navigate`,`same-origin`,`no-cors`,`cors`],h=[`omit`,`same-origin`,`include`],g=[`default`,`no-store`,`reload`,`no-cache`,`force-cache`,`only-if-cached`],_=[`content-encoding`,`content-language`,`content-location`,`content-type`,`content-length`],v=[`half`],y=[`CONNECT`,`TRACE`,`TRACK`],b=new Set(y),x=[`audio`,`audioworklet`,`font`,`image`,`manifest`,`paintworklet`,`script`,`style`,`track`,`video`,`xslt`,``];t.exports={subresource:x,forbiddenMethods:y,requestBodyHeader:_,referrerPolicy:l,requestRedirect:d,requestMode:m,requestCredentials:h,requestCache:g,redirectStatus:a,corsSafeListedMethods:n,nullBodyStatus:i,safeMethods:f,badPorts:s,requestDuplex:v,subresourceSet:new Set(x),badPortsSet:c,redirectStatusSet:o,corsSafeListedMethodsSet:r,safeMethodsSet:p,forbiddenMethodsSet:b,referrerPolicySet:u}})),R=/* @__PURE__ */ f(((e,t)=>{let n=Symbol.for(`undici.globalOrigin.1`);function r(){return globalThis[n]}function i(e){if(e===void 0){Object.defineProperty(globalThis,n,{value:void 0,writable:!0,enumerable:!1,configurable:!1});return}let t=new URL(e);if(t.protocol!==`http:`&&t.protocol!==`https:`)throw TypeError(`Only http & https urls are allowed, received ${t.protocol}`);Object.defineProperty(globalThis,n,{value:t,writable:!0,enumerable:!1,configurable:!1})}t.exports={getGlobalOrigin:r,setGlobalOrigin:i}})),z=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),r=new TextEncoder,i=/^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/,a=/[\u000A\u000D\u0009\u0020]/,o=/[\u0009\u000A\u000C\u000D\u0020]/g,s=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;function c(e){n(e.protocol===`data:`);let t=l(e,!0);t=t.slice(5);let r={position:0},i=d(`,`,t,r),a=i.length;if(i=w(i,!0,!0),r.position>=t.length)return`failure`;r.position++;let o=f(t.slice(a+1));if(/;(\u0020){0,}base64$/i.test(i)){if(o=v(E(o)),o===`failure`)return`failure`;i=i.slice(0,-6),i=i.replace(/(\u0020)+$/,``),i=i.slice(0,-1)}i.startsWith(`;`)&&(i=`text/plain`+i);let s=_(i);return s===`failure`&&(s=_(`text/plain;charset=US-ASCII`)),{mimeType:s,body:o}}function l(e,t=!1){if(!t)return e.href;let n=e.href,r=e.hash.length,i=r===0?n:n.substring(0,n.length-r);return!r&&n.endsWith(`#`)?i.slice(0,-1):i}function u(e,t,n){let r=``;for(;n.position=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function h(e){return e>=48&&e<=57?e-48:(e&223)-55}function g(e){let t=e.length,n=new Uint8Array(t),r=0;for(let i=0;ie.length)return`failure`;t.position++;let r=d(`;`,e,t);if(r=S(r,!1,!0),r.length===0||!i.test(r))return`failure`;let o=n.toLowerCase(),c=r.toLowerCase(),l={type:o,subtype:c,parameters:/* @__PURE__ */ new Map,essence:`${o}/${c}`};for(;t.positiona.test(e),e,t);let n=u(e=>e!==`;`&&e!==`=`,e,t);if(n=n.toLowerCase(),t.positione.length)break;let r=null;if(e[t.position]===`"`)r=y(e,t,!0),d(`;`,e,t);else if(r=d(`;`,e,t),r=S(r,!1,!0),r.length===0)continue;n.length!==0&&i.test(n)&&(r.length===0||s.test(r))&&!l.parameters.has(n)&&l.parameters.set(n,r)}return l}function v(e){e=e.replace(o,``);let t=e.length;if(t%4==0&&e.charCodeAt(t-1)===61&&(--t,e.charCodeAt(t-1)===61&&--t),t%4==1||/[^+/0-9A-Za-z]/.test(e.length===t?e:e.substring(0,t)))return`failure`;let n=Buffer.from(e,`base64`);return new Uint8Array(n.buffer,n.byteOffset,n.byteLength)}function y(e,t,r){let i=t.position,a=``;for(n(e[t.position]===`"`),t.position++;a+=u(e=>e!==`"`&&e!==`\\`,e,t),!(t.position>=e.length);){let r=e[t.position];if(t.position++,r===`\\`){if(t.position>=e.length){a+=`\\`;break}a+=e[t.position],t.position++}else{n(r===`"`);break}}return r?a:e.slice(i,t.position)}function b(e){n(e!==`failure`);let{parameters:t,essence:r}=e,a=r;for(let[e,n]of t.entries())a+=`;`,a+=e,a+=`=`,i.test(n)||(n=n.replace(/(\\|")/g,`\\$1`),n=`"`+n,n+=`"`),a+=n;return a}function x(e){return e===13||e===10||e===9||e===32}function S(e,t=!0,n=!0){return T(e,t,n,x)}function C(e){return e===13||e===10||e===9||e===12||e===32}function w(e,t=!0,n=!0){return T(e,t,n,C)}function T(e,t,n,r){let i=0,a=e.length-1;if(t)for(;i0&&r(e.charCodeAt(a));)a--;return i===0&&a===e.length-1?e:e.slice(i,a+1)}function E(e){let t=e.length;if(65535>t)return String.fromCharCode.apply(null,e);let n=``,r=0,i=65535;for(;rt&&(i=t-r),n+=String.fromCharCode.apply(null,e.subarray(r,r+=i));return n}function D(e){switch(e.essence){case`application/ecmascript`:case`application/javascript`:case`application/x-ecmascript`:case`application/x-javascript`:case`text/ecmascript`:case`text/javascript`:case`text/javascript1.0`:case`text/javascript1.1`:case`text/javascript1.2`:case`text/javascript1.3`:case`text/javascript1.4`:case`text/javascript1.5`:case`text/jscript`:case`text/livescript`:case`text/x-ecmascript`:case`text/x-javascript`:return`text/javascript`;case`application/json`:case`text/json`:return`application/json`;case`image/svg+xml`:return`image/svg+xml`;case`text/xml`:case`application/xml`:return`application/xml`}return e.subtype.endsWith(`+json`)?`application/json`:e.subtype.endsWith(`+xml`)?`application/xml`:``}t.exports={dataURLProcessor:c,URLSerializer:l,collectASequenceOfCodePoints:u,collectASequenceOfCodePointsFast:d,stringPercentDecode:f,parseMIMEType:_,collectAnHTTPQuotedString:y,serializeAMimeType:b,removeChars:T,removeHTTPWhitespace:S,minimizeSupportedMimeType:D,HTTP_TOKEN_CODEPOINTS:i,isomorphicDecode:E}})),B=/* @__PURE__ */ f(((e,t)=>{let{types:n,inspect:r}=p(`node:util`),{markAsUncloneable:i}=p(`node:worker_threads`),{toUSVString:a}=O(),o={};o.converters={},o.util={},o.errors={},o.errors.exception=function(e){return/* @__PURE__ */ TypeError(`${e.header}: ${e.message}`)},o.errors.conversionFailed=function(e){let t=e.types.length===1?``:` one of`,n=`${e.argument} could not be converted to${t}: ${e.types.join(`, `)}.`;return o.errors.exception({header:e.prefix,message:n})},o.errors.invalidArgument=function(e){return o.errors.exception({header:e.prefix,message:`"${e.value}" is an invalid ${e.type}.`})},o.brandCheck=function(e,t,n){if(n?.strict!==!1){if(!(e instanceof t)){let e=/* @__PURE__ */ TypeError(`Illegal invocation`);throw e.code=`ERR_INVALID_THIS`,e}}else if(e?.[Symbol.toStringTag]!==t.prototype[Symbol.toStringTag]){let e=/* @__PURE__ */ TypeError(`Illegal invocation`);throw e.code=`ERR_INVALID_THIS`,e}},o.argumentLengthCheck=function({length:e},t,n){if(e{}),o.util.ConvertToInt=function(e,t,n,r){let i,a;t===64?(i=2**53-1,a=n===`unsigned`?0:(-2)**53+1):n===`unsigned`?(a=0,i=2**t-1):(a=(-2)**t-1,i=2**(t-1)-1);let s=Number(e);if(s===0&&(s=0),r?.enforceRange===!0){if(Number.isNaN(s)||s===1/0||s===-1/0)throw o.errors.exception({header:`Integer conversion`,message:`Could not convert ${o.util.Stringify(e)} to an integer.`});if(s=o.util.IntegerPart(s),si)throw o.errors.exception({header:`Integer conversion`,message:`Value must be between ${a}-${i}, got ${s}.`});return s}return!Number.isNaN(s)&&r?.clamp===!0?(s=Math.min(Math.max(s,a),i),s=Math.floor(s)%2==0?Math.floor(s):Math.ceil(s),s):Number.isNaN(s)||s===0&&Object.is(0,s)||s===1/0||s===-1/0?0:(s=o.util.IntegerPart(s),s%=2**t,n===`signed`&&s>=2**t-1?s-2**t:s)},o.util.IntegerPart=function(e){let t=Math.floor(Math.abs(e));return e<0?-1*t:t},o.util.Stringify=function(e){switch(o.util.Type(e)){case`Symbol`:return`Symbol(${e.description})`;case`Object`:return r(e);case`String`:return`"${e}"`;default:return`${e}`}},o.sequenceConverter=function(e){return(t,n,r,i)=>{if(o.util.Type(t)!==`Object`)throw o.errors.exception({header:n,message:`${r} (${o.util.Stringify(t)}) is not iterable.`});let a=typeof i==`function`?i():t?.[Symbol.iterator]?.(),s=[],c=0;if(a===void 0||typeof a.next!=`function`)throw o.errors.exception({header:n,message:`${r} is not iterable.`});for(;;){let{done:t,value:i}=a.next();if(t)break;s.push(e(i,n,`${r}[${c++}]`))}return s}},o.recordConverter=function(e,t){return(r,i,a)=>{if(o.util.Type(r)!==`Object`)throw o.errors.exception({header:i,message:`${a} ("${o.util.Type(r)}") is not an Object.`});let s={};if(!n.isProxy(r)){let n=[...Object.getOwnPropertyNames(r),...Object.getOwnPropertySymbols(r)];for(let o of n){let n=e(o,i,a);s[n]=t(r[o],i,a)}return s}let c=Reflect.ownKeys(r);for(let n of c)if(Reflect.getOwnPropertyDescriptor(r,n)?.enumerable){let o=e(n,i,a);s[o]=t(r[n],i,a)}return s}},o.interfaceConverter=function(e){return(t,n,r,i)=>{if(i?.strict!==!1&&!(t instanceof e))throw o.errors.exception({header:n,message:`Expected ${r} ("${o.util.Stringify(t)}") to be an instance of ${e.name}.`});return t}},o.dictionaryConverter=function(e){return(t,n,r)=>{let i=o.util.Type(t),a={};if(i===`Null`||i===`Undefined`)return a;if(i!==`Object`)throw o.errors.exception({header:n,message:`Expected ${t} to be one of: Null, Undefined, Object.`});for(let i of e){let{key:e,defaultValue:s,required:c,converter:l}=i;if(c===!0&&!Object.hasOwn(t,e))throw o.errors.exception({header:n,message:`Missing required key "${e}".`});let u=t[e],d=Object.hasOwn(i,`defaultValue`);if(d&&u!==null&&(u??=s()),c||d||u!==void 0){if(u=l(u,n,`${r}.${e}`),i.allowedValues&&!i.allowedValues.includes(u))throw o.errors.exception({header:n,message:`${u} is not an accepted type. Expected one of ${i.allowedValues.join(`, `)}.`});a[e]=u}}return a}},o.nullableConverter=function(e){return(t,n,r)=>t===null?t:e(t,n,r)},o.converters.DOMString=function(e,t,n,r){if(e===null&&r?.legacyNullToEmptyString)return``;if(typeof e==`symbol`)throw o.errors.exception({header:t,message:`${n} is a symbol, which cannot be converted to a DOMString.`});return String(e)},o.converters.ByteString=function(e,t,n){let r=o.converters.DOMString(e,t,n);for(let e=0;e255)throw TypeError(`Cannot convert argument to a ByteString because the character at index ${e} has a value of ${r.charCodeAt(e)} which is greater than 255.`);return r},o.converters.USVString=a,o.converters.boolean=function(e){return!!e},o.converters.any=function(e){return e},o.converters[`long long`]=function(e,t,n){return o.util.ConvertToInt(e,64,`signed`,void 0,t,n)},o.converters[`unsigned long long`]=function(e,t,n){return o.util.ConvertToInt(e,64,`unsigned`,void 0,t,n)},o.converters[`unsigned long`]=function(e,t,n){return o.util.ConvertToInt(e,32,`unsigned`,void 0,t,n)},o.converters[`unsigned short`]=function(e,t,n,r){return o.util.ConvertToInt(e,16,`unsigned`,r,t,n)},o.converters.ArrayBuffer=function(e,t,r,i){if(o.util.Type(e)!==`Object`||!n.isAnyArrayBuffer(e))throw o.errors.conversionFailed({prefix:t,argument:`${r} ("${o.util.Stringify(e)}")`,types:[`ArrayBuffer`]});if(i?.allowShared===!1&&n.isSharedArrayBuffer(e))throw o.errors.exception({header:`ArrayBuffer`,message:`SharedArrayBuffer is not allowed.`});if(e.resizable||e.growable)throw o.errors.exception({header:`ArrayBuffer`,message:`Received a resizable ArrayBuffer.`});return e},o.converters.TypedArray=function(e,t,r,i,a){if(o.util.Type(e)!==`Object`||!n.isTypedArray(e)||e.constructor.name!==t.name)throw o.errors.conversionFailed({prefix:r,argument:`${i} ("${o.util.Stringify(e)}")`,types:[t.name]});if(a?.allowShared===!1&&n.isSharedArrayBuffer(e.buffer))throw o.errors.exception({header:`ArrayBuffer`,message:`SharedArrayBuffer is not allowed.`});if(e.buffer.resizable||e.buffer.growable)throw o.errors.exception({header:`ArrayBuffer`,message:`Received a resizable ArrayBuffer.`});return e},o.converters.DataView=function(e,t,r,i){if(o.util.Type(e)!==`Object`||!n.isDataView(e))throw o.errors.exception({header:t,message:`${r} is not a DataView.`});if(i?.allowShared===!1&&n.isSharedArrayBuffer(e.buffer))throw o.errors.exception({header:`ArrayBuffer`,message:`SharedArrayBuffer is not allowed.`});if(e.buffer.resizable||e.buffer.growable)throw o.errors.exception({header:`ArrayBuffer`,message:`Received a resizable ArrayBuffer.`});return e},o.converters.BufferSource=function(e,t,r,i){if(n.isAnyArrayBuffer(e))return o.converters.ArrayBuffer(e,t,r,{...i,allowShared:!1});if(n.isTypedArray(e))return o.converters.TypedArray(e,e.constructor,t,r,{...i,allowShared:!1});if(n.isDataView(e))return o.converters.DataView(e,t,r,{...i,allowShared:!1});throw o.errors.conversionFailed({prefix:t,argument:`${r} ("${o.util.Stringify(e)}")`,types:[`BufferSource`]})},o.converters[`sequence`]=o.sequenceConverter(o.converters.ByteString),o.converters[`sequence>`]=o.sequenceConverter(o.converters[`sequence`]),o.converters[`record`]=o.recordConverter(o.converters.ByteString,o.converters.ByteString),t.exports={webidl:o}})),V=/* @__PURE__ */ f(((e,t)=>{let{Transform:n}=p(`node:stream`),r=p(`node:zlib`),{redirectStatusSet:i,referrerPolicySet:a,badPortsSet:o}=te(),{getGlobalOrigin:s}=R(),{collectASequenceOfCodePoints:c,collectAnHTTPQuotedString:l,removeChars:u,parseMIMEType:d}=z(),{performance:f}=p(`node:perf_hooks`),{isBlobLike:m,ReadableStreamFrom:h,isValidHTTPToken:g,normalizedMethodRecordsBase:_}=O(),v=p(`node:assert`),{isUint8Array:y}=p(`node:util/types`),{webidl:b}=B(),x=[],S;try{S=p(`node:crypto`);let e=[`sha256`,`sha384`,`sha512`];x=S.getHashes().filter(t=>e.includes(t))}catch{}function C(e){let t=e.urlList,n=t.length;return n===0?null:t[n-1].toString()}function w(e,t){if(!i.has(e.status))return null;let n=e.headersList.get(`location`,!0);return n!==null&&N(n)&&(T(n)||(n=E(n)),n=new URL(n,C(e))),n&&!n.hash&&(n.hash=t),n}function T(e){for(let t=0;t126||n<32)return!1}return!0}function E(e){return Buffer.from(e,`binary`).toString(`utf8`)}function D(e){return e.urlList[e.urlList.length-1]}function k(e){let t=D(e);return we(t)&&o.has(t.port)?`blocked`:`allowed`}function A(e){return e instanceof Error||e?.constructor?.name===`Error`||e?.constructor?.name===`DOMException`}function j(e){for(let t=0;t=32&&n<=126||n>=128&&n<=255))return!1}return!0}let M=g;function N(e){return(e[0]===` `||e[0]===` `||e[e.length-1]===` `||e[e.length-1]===` `||e.includes(` +`)||e.includes(`\r`)||e.includes(`\0`))===!1}function P(e,t){let{headersList:n}=t,r=(n.get(`referrer-policy`,!0)??``).split(`,`),i=``;if(r.length>0)for(let e=r.length;e!==0;e--){let t=r[e-1].trim();if(a.has(t)){i=t;break}}i!==``&&(e.referrerPolicy=i)}function F(){return`allowed`}function I(){return`success`}function L(){return`success`}function ee(e){let t=null;t=e.mode,e.headersList.set(`sec-fetch-mode`,t,!0)}function V(e){let t=e.origin;if(t!==`client`&&t!==void 0){if(e.responseTainting===`cors`||e.mode===`websocket`)e.headersList.append(`origin`,t,!0);else if(e.method!==`GET`&&e.method!==`HEAD`){switch(e.referrerPolicy){case`no-referrer`:t=null;break;case`no-referrer-when-downgrade`:case`strict-origin`:case`strict-origin-when-cross-origin`:e.origin&&Ce(e.origin)&&!Ce(D(e))&&(t=null);break;case`same-origin`:ue(e,D(e))||(t=null)}e.headersList.append(`origin`,t,!0)}}}function H(e,t){return e}function ne(e,t,n){return!e?.startTime||e.startTime4096&&(r=i);let a=ue(e,r),o=G(r)&&!G(e.url);switch(t){case`origin`:return i??W(n,!0);case`unsafe-url`:return r;case`same-origin`:return a?i:`no-referrer`;case`origin-when-cross-origin`:return a?r:i;case`strict-origin-when-cross-origin`:{let t=D(e);return ue(r,t)?r:G(r)&&!G(t)?`no-referrer`:i}default:return o?`no-referrer`:i}}function W(e,t){return v(e instanceof URL),e=new URL(e),e.protocol===`file:`||e.protocol===`about:`||e.protocol===`blank:`?`no-referrer`:(e.username=``,e.password=``,e.hash=``,t&&(e.pathname=``,e.search=``),e)}function G(e){return e instanceof URL?e.href===`about:blank`||e.href===`about:srcdoc`||e.protocol===`data:`||e.protocol===`file:`||t(e.origin):!1;function t(e){if(e==null||e===`null`)return!1;let t=new URL(e);return!!(t.protocol===`https:`||t.protocol===`wss:`||/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(t.hostname)||t.hostname===`localhost`||t.hostname.includes(`localhost.`)||t.hostname.endsWith(`.localhost`))}}function K(e,t){ /* istanbul ignore if: only if node is built with --without-ssl */ -if(S===void 0)return!0;let n=ce(t);if(n===`no metadata`||n.length===0)return!0;let r=le(n,q(n));for(let t of r){let n=t.algo,r=t.hash,i=S.createHash(n).update(e).digest(`base64`);if(i[i.length-1]===`=`&&(i=i[i.length-2]===`=`?i.slice(0,-2):i.slice(0,-1)),J(i,r))return!0}return!1}let K=/(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;function ce(e){let t=[],n=!0;for(let r of e.split(` `)){n=!1;let e=K.exec(r);if(e===null||e.groups===void 0||e.groups.algo===void 0)continue;let i=e.groups.algo.toLowerCase();x.includes(i)&&t.push(e.groups)}return n===!0?`no metadata`:t}function q(e){let t=e[0].algo;if(t[3]===`5`)return t;for(let n=1;n{e=n,t=r}),resolve:e,reject:t}}function fe(e){return e.controller.state===`aborted`}function pe(e){return e.controller.state===`aborted`||e.controller.state===`terminated`}function me(e){return _[e.toLowerCase()]??e}function he(e){let t=JSON.stringify(e);if(t===void 0)throw TypeError(`Value is not JSON serializable`);return v(typeof t==`string`),t}let ge=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function _e(e,t,n=0,r=1){class i{#e;#t;#n;constructor(e,t){this.#e=e,this.#t=t,this.#n=0}next(){if(typeof this!=`object`||this===null||!(#e in this))throw TypeError(`'next' called on an object that does not implement interface ${e} Iterator.`);let i=this.#n,a=this.#e[t];if(i>=a.length)return{value:void 0,done:!0};let{[n]:o,[r]:s}=a[i];this.#n=i+1;let c;switch(this.#t){case`key`:c=o;break;case`value`:c=s;break;case`key+value`:c=[o,s]}return{value:c,done:!1}}}return delete i.prototype.constructor,Object.setPrototypeOf(i.prototype,ge),Object.defineProperties(i.prototype,{[Symbol.toStringTag]:{writable:!1,enumerable:!1,configurable:!0,value:`${e} Iterator`},next:{writable:!0,enumerable:!0,configurable:!0}}),function(e,t){return new i(e,t)}}function ve(e,t,n,r=0,i=1){let a=_e(e,n,r,i),o={keys:{writable:!0,enumerable:!0,configurable:!0,value:function(){return b.brandCheck(this,t),a(this,`key`)}},values:{writable:!0,enumerable:!0,configurable:!0,value:function(){return b.brandCheck(this,t),a(this,`value`)}},entries:{writable:!0,enumerable:!0,configurable:!0,value:function(){return b.brandCheck(this,t),a(this,`key+value`)}},forEach:{writable:!0,enumerable:!0,configurable:!0,value:function(n,r=globalThis){if(b.brandCheck(this,t),b.argumentLengthCheck(arguments,1,`${e}.forEach`),typeof n!=`function`)throw TypeError(`Failed to execute 'forEach' on '${e}': parameter 1 is not of type 'Function'.`);for(let{0:e,1:t}of a(this,`key+value`))n.call(r,t,e,this)}}};return Object.defineProperties(t.prototype,{...o,[Symbol.iterator]:{writable:!0,enumerable:!1,configurable:!0,value:o.entries.value}})}async function ye(e,t,n){let r=t,i=n,a;try{a=e.stream.getReader()}catch(e){i(e);return}try{r(await Se(a))}catch(e){i(e)}}function X(e){return e instanceof ReadableStream||e[Symbol.toStringTag]===`ReadableStream`&&typeof e.tee==`function`}function be(e){try{e.close(),e.byobRequest?.respond(0)}catch(e){if(!e.message.includes(`Controller is already closed`)&&!e.message.includes(`ReadableStream is already closed`))throw e}}let xe=/[^\x00-\xFF]/;function Z(e){return v(!xe.test(e)),e}async function Se(e){let t=[],n=0;for(;;){let{done:r,value:i}=await e.read();if(r)return Buffer.concat(t,n);if(!y(i))throw TypeError(`Received non-Uint8Array chunk`);t.push(i),n+=i.length}}function Ce(e){v(`protocol`in e);let t=e.protocol;return t===`about:`||t===`blob:`||t===`data:`}function we(e){return typeof e==`string`&&e[5]===`:`&&e[0]===`h`&&e[1]===`t`&&e[2]===`t`&&e[3]===`p`&&e[4]===`s`||e.protocol===`https:`}function Te(e){v(`protocol`in e);let t=e.protocol;return t===`http:`||t===`https:`}function Ee(e,t){let n=e;if(!n.startsWith(`bytes`))return`failure`;let r={position:5};if(t&&c(e=>e===` `||e===` `,n,r),n.charCodeAt(r.position)!==61)return`failure`;r.position++,t&&c(e=>e===` `||e===` `,n,r);let i=c(e=>{let t=e.charCodeAt(0);return t>=48&&t<=57},n,r),a=i.length?Number(i):null;if(t&&c(e=>e===` `||e===` `,n,r),n.charCodeAt(r.position)!==45)return`failure`;r.position++,t&&c(e=>e===` `||e===` `,n,r);let o=c(e=>{let t=e.charCodeAt(0);return t>=48&&t<=57},n,r),s=o.length?Number(o):null;return r.positions?`failure`:{rangeStartValue:a,rangeEndValue:s}}function De(e,t,n){let r=`bytes `;return r+=Z(`${e}`),r+=`-`,r+=Z(`${t}`),r+=`/`,r+=Z(`${n}`),r}var Oe=class extends n{#e;constructor(e){super(),this.#e=e}_transform(e,t,n){if(!this._inflateStream){if(e.length===0){n();return}this._inflateStream=(e[0]&15)==8?r.createInflate(this.#e):r.createInflateRaw(this.#e),this._inflateStream.on(`data`,this.push.bind(this)),this._inflateStream.on(`end`,()=>this.push(null)),this._inflateStream.on(`error`,e=>this.destroy(e))}this._inflateStream.write(e,t,n)}_final(e){this._inflateStream&&=(this._inflateStream.end(),null),e()}};function ke(e){return new Oe(e)}function Ae(e){let t=null,n=null,r=null,i=Me(`content-type`,e);if(i===null)return`failure`;for(let e of i){let i=d(e);i!==`failure`&&i.essence!==`*/*`&&(r=i,r.essence===n?!r.parameters.has(`charset`)&&t!==null&&r.parameters.set(`charset`,t):(t=null,r.parameters.has(`charset`)&&(t=r.parameters.get(`charset`)),n=r.essence))}return r??`failure`}function je(e){let t=e,n={position:0},r=[],i=``;for(;n.positione!==`"`&&e!==`,`,t,n),n.positione===9||e===32),r.push(i),i=``}return r}function Me(e,t){let n=t.get(e,!0);return n===null?null:je(n)}let Ne=new TextDecoder;function Pe(e){return e.length===0?``:(e[0]===239&&e[1]===187&&e[2]===191&&(e=e.subarray(3)),Ne.decode(e))}var Fe=class{get baseUrl(){return s()}get origin(){return this.baseUrl?.origin}policyContainer=ie()};t.exports={isAborted:fe,isCancelled:pe,isValidEncodedURL:T,createDeferredPromise:Y,ReadableStreamFrom:h,tryUpgradeRequestToAPotentiallyTrustworthyURL:ue,clampAndCoarsenConnectionTimingInfo:ne,coarsenedSharedCurrentTime:re,determineRequestsReferrer:oe,makePolicyContainer:ie,clonePolicyContainer:ae,appendFetchMetadata:ee,appendRequestOriginHeader:V,TAOCheck:L,corsCheck:I,crossOriginResourcePolicyCheck:F,createOpaqueTimingInfo:U,setRequestReferrerPolicyOnRedirect:P,isValidHTTPToken:g,requestBadPort:k,requestCurrentURL:D,responseURL:C,responseLocationURL:w,isBlobLike:m,isURLPotentiallyTrustworthy:G,isValidReasonPhrase:j,sameOrigin:de,normalizeMethod:me,serializeJavascriptValueToJSONString:he,iteratorMixin:ve,createIterator:_e,isValidHeaderName:M,isValidHeaderValue:N,isErrorLike:A,fullyReadBody:ye,bytesMatch:se,isReadableStreamLike:X,readableStreamClose:be,isomorphicEncode:Z,urlIsLocal:Ce,urlHasHttpsScheme:we,urlIsHttpHttpsScheme:Te,readAllBytes:Se,simpleRangeHeaderValue:Ee,buildContentRange:De,parseMetadata:ce,createInflate:ke,extractMimeType:Ae,getDecodeSplit:Me,utf8DecodeBytes:Pe,environmentSettingsObject:new class{settingsObject=new Fe}}})),H=/* @__PURE__ */ f(((e,t)=>{t.exports={kUrl:Symbol(`url`),kHeaders:Symbol(`headers`),kSignal:Symbol(`signal`),kState:Symbol(`state`),kDispatcher:Symbol(`dispatcher`)}})),ne=/* @__PURE__ */ f(((e,t)=>{let{Blob:n,File:r}=p(`node:buffer`),{kState:i}=H(),{webidl:a}=B();var o=class e{constructor(e,t,n={}){let r=t,a=n.type,o=n.lastModified??Date.now();this[i]={blobLike:e,name:r,type:a,lastModified:o}}stream(...t){return a.brandCheck(this,e),this[i].blobLike.stream(...t)}arrayBuffer(...t){return a.brandCheck(this,e),this[i].blobLike.arrayBuffer(...t)}slice(...t){return a.brandCheck(this,e),this[i].blobLike.slice(...t)}text(...t){return a.brandCheck(this,e),this[i].blobLike.text(...t)}get size(){return a.brandCheck(this,e),this[i].blobLike.size}get type(){return a.brandCheck(this,e),this[i].blobLike.type}get name(){return a.brandCheck(this,e),this[i].name}get lastModified(){return a.brandCheck(this,e),this[i].lastModified}get[Symbol.toStringTag](){return`File`}};a.converters.Blob=a.interfaceConverter(n);function s(e){return e instanceof r||e&&(typeof e.stream==`function`||typeof e.arrayBuffer==`function`)&&e[Symbol.toStringTag]===`File`}t.exports={FileLike:o,isFileLike:s}})),re=/* @__PURE__ */ f(((e,t)=>{let{isBlobLike:n,iteratorMixin:r}=V(),{kState:i}=H(),{kEnumerableProperty:a}=O(),{FileLike:o,isFileLike:s}=ne(),{webidl:c}=B(),{File:l}=p(`node:buffer`),u=p(`node:util`),d=globalThis.File??l;var f=class e{constructor(e){if(c.util.markAsUncloneable(this),e!==void 0)throw c.errors.conversionFailed({prefix:`FormData constructor`,argument:`Argument 1`,types:[`undefined`]});this[i]=[]}append(t,r,a=void 0){c.brandCheck(this,e);let o=`FormData.append`;if(c.argumentLengthCheck(arguments,2,o),arguments.length===3&&!n(r))throw TypeError(`Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'`);t=c.converters.USVString(t,o,`name`),r=n(r)?c.converters.Blob(r,o,`value`,{strict:!1}):c.converters.USVString(r,o,`value`),a=arguments.length===3?c.converters.USVString(a,o,`filename`):void 0;let s=m(t,r,a);this[i].push(s)}delete(t){c.brandCheck(this,e);let n=`FormData.delete`;c.argumentLengthCheck(arguments,1,n),t=c.converters.USVString(t,n,`name`),this[i]=this[i].filter(e=>e.name!==t)}get(t){c.brandCheck(this,e);let n=`FormData.get`;c.argumentLengthCheck(arguments,1,n),t=c.converters.USVString(t,n,`name`);let r=this[i].findIndex(e=>e.name===t);return r===-1?null:this[i][r].value}getAll(t){c.brandCheck(this,e);let n=`FormData.getAll`;return c.argumentLengthCheck(arguments,1,n),t=c.converters.USVString(t,n,`name`),this[i].filter(e=>e.name===t).map(e=>e.value)}has(t){c.brandCheck(this,e);let n=`FormData.has`;return c.argumentLengthCheck(arguments,1,n),t=c.converters.USVString(t,n,`name`),this[i].findIndex(e=>e.name===t)!==-1}set(t,r,a=void 0){c.brandCheck(this,e);let o=`FormData.set`;if(c.argumentLengthCheck(arguments,2,o),arguments.length===3&&!n(r))throw TypeError(`Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'`);t=c.converters.USVString(t,o,`name`),r=n(r)?c.converters.Blob(r,o,`name`,{strict:!1}):c.converters.USVString(r,o,`name`),a=arguments.length===3?c.converters.USVString(a,o,`name`):void 0;let s=m(t,r,a),l=this[i].findIndex(e=>e.name===t);l===-1?this[i].push(s):this[i]=[...this[i].slice(0,l),s,...this[i].slice(l+1).filter(e=>e.name!==t)]}[u.inspect.custom](e,t){let n=this[i].reduce((e,t)=>(e[t.name]?Array.isArray(e[t.name])?e[t.name].push(t.value):e[t.name]=[e[t.name],t.value]:e[t.name]=t.value,e),{__proto__:null});t.depth??=e,t.colors??=!0;let r=u.formatWithOptions(t,n);return`FormData ${r.slice(r.indexOf(`]`)+2)}`}};r(`FormData`,f,i,`name`,`value`),Object.defineProperties(f.prototype,{append:a,delete:a,get:a,getAll:a,has:a,set:a,[Symbol.toStringTag]:{value:`FormData`,configurable:!0}});function m(e,t,n){if(typeof t!=`string`&&(s(t)||(t=t instanceof Blob?new d([t],`blob`,{type:t.type}):new o(t,`blob`,{type:t.type})),n!==void 0)){let e={type:t.type,lastModified:t.lastModified};t=t instanceof l?new d([t],n,e):new o(t,n,e)}return{name:e,value:t}}t.exports={FormData:f,makeEntry:m}})),U=/* @__PURE__ */ f(((e,t)=>{let{isUSVString:n,bufferToLowerCasedHeaderName:r}=O(),{utf8DecodeBytes:i}=V(),{HTTP_TOKEN_CODEPOINTS:a,isomorphicDecode:o}=z(),{isFileLike:s}=ne(),{makeEntry:c}=re(),l=p(`node:assert`),{File:u}=p(`node:buffer`),d=globalThis.File??u,f=Buffer.from(`form-data; name="`),m=Buffer.from(`; filename`),h=Buffer.from(`--`),g=Buffer.from(`--\r +if(S===void 0)return!0;let n=se(t);if(n===`no metadata`||n.length===0)return!0;let r=ce(n,J(n));for(let t of r){let n=t.algo,r=t.hash,i=S.createHash(n).update(e).digest(`base64`);if(i[i.length-1]===`=`&&(i=i[i.length-2]===`=`?i.slice(0,-2):i.slice(0,-1)),Y(i,r))return!0}return!1}let q=/(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;function se(e){let t=[],n=!0;for(let r of e.split(` `)){n=!1;let e=q.exec(r);if(e===null||e.groups===void 0||e.groups.algo===void 0)continue;let i=e.groups.algo.toLowerCase();x.includes(i)&&t.push(e.groups)}return n===!0?`no metadata`:t}function J(e){let t=e[0].algo;if(t[3]===`5`)return t;for(let n=1;n{e=n,t=r}),resolve:e,reject:t}}function de(e){return e.controller.state===`aborted`}function fe(e){return e.controller.state===`aborted`||e.controller.state===`terminated`}function pe(e){return _[e.toLowerCase()]??e}function me(e){let t=JSON.stringify(e);if(t===void 0)throw TypeError(`Value is not JSON serializable`);return v(typeof t==`string`),t}let he=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function ge(e,t,n=0,r=1){class i{#e;#t;#n;constructor(e,t){this.#e=e,this.#t=t,this.#n=0}next(){if(typeof this!=`object`||this===null||!(#e in this))throw TypeError(`'next' called on an object that does not implement interface ${e} Iterator.`);let i=this.#n,a=this.#e[t];if(i>=a.length)return{value:void 0,done:!0};let{[n]:o,[r]:s}=a[i];this.#n=i+1;let c;switch(this.#t){case`key`:c=o;break;case`value`:c=s;break;case`key+value`:c=[o,s]}return{value:c,done:!1}}}return delete i.prototype.constructor,Object.setPrototypeOf(i.prototype,he),Object.defineProperties(i.prototype,{[Symbol.toStringTag]:{writable:!1,enumerable:!1,configurable:!0,value:`${e} Iterator`},next:{writable:!0,enumerable:!0,configurable:!0}}),function(e,t){return new i(e,t)}}function _e(e,t,n,r=0,i=1){let a=ge(e,n,r,i),o={keys:{writable:!0,enumerable:!0,configurable:!0,value:function(){return b.brandCheck(this,t),a(this,`key`)}},values:{writable:!0,enumerable:!0,configurable:!0,value:function(){return b.brandCheck(this,t),a(this,`value`)}},entries:{writable:!0,enumerable:!0,configurable:!0,value:function(){return b.brandCheck(this,t),a(this,`key+value`)}},forEach:{writable:!0,enumerable:!0,configurable:!0,value:function(n,r=globalThis){if(b.brandCheck(this,t),b.argumentLengthCheck(arguments,1,`${e}.forEach`),typeof n!=`function`)throw TypeError(`Failed to execute 'forEach' on '${e}': parameter 1 is not of type 'Function'.`);for(let{0:e,1:t}of a(this,`key+value`))n.call(r,t,e,this)}}};return Object.defineProperties(t.prototype,{...o,[Symbol.iterator]:{writable:!0,enumerable:!1,configurable:!0,value:o.entries.value}})}async function ve(e,t,n){let r=t,i=n,a;try{a=e.stream.getReader()}catch(e){i(e);return}try{r(await xe(a))}catch(e){i(e)}}function Z(e){return e instanceof ReadableStream||e[Symbol.toStringTag]===`ReadableStream`&&typeof e.tee==`function`}function ye(e){try{e.close(),e.byobRequest?.respond(0)}catch(e){if(!e.message.includes(`Controller is already closed`)&&!e.message.includes(`ReadableStream is already closed`))throw e}}let be=/[^\x00-\xFF]/;function Q(e){return v(!be.test(e)),e}async function xe(e){let t=[],n=0;for(;;){let{done:r,value:i}=await e.read();if(r)return Buffer.concat(t,n);if(!y(i))throw TypeError(`Received non-Uint8Array chunk`);t.push(i),n+=i.length}}function Se(e){v(`protocol`in e);let t=e.protocol;return t===`about:`||t===`blob:`||t===`data:`}function Ce(e){return typeof e==`string`&&e[5]===`:`&&e[0]===`h`&&e[1]===`t`&&e[2]===`t`&&e[3]===`p`&&e[4]===`s`||e.protocol===`https:`}function we(e){v(`protocol`in e);let t=e.protocol;return t===`http:`||t===`https:`}function Te(e,t){let n=e;if(!n.startsWith(`bytes`))return`failure`;let r={position:5};if(t&&c(e=>e===` `||e===` `,n,r),n.charCodeAt(r.position)!==61)return`failure`;r.position++,t&&c(e=>e===` `||e===` `,n,r);let i=c(e=>{let t=e.charCodeAt(0);return t>=48&&t<=57},n,r),a=i.length?Number(i):null;if(t&&c(e=>e===` `||e===` `,n,r),n.charCodeAt(r.position)!==45)return`failure`;r.position++,t&&c(e=>e===` `||e===` `,n,r);let o=c(e=>{let t=e.charCodeAt(0);return t>=48&&t<=57},n,r),s=o.length?Number(o):null;return r.positions?`failure`:{rangeStartValue:a,rangeEndValue:s}}function Ee(e,t,n){let r=`bytes `;return r+=Q(`${e}`),r+=`-`,r+=Q(`${t}`),r+=`/`,r+=Q(`${n}`),r}var De=class extends n{#e;constructor(e){super(),this.#e=e}_transform(e,t,n){if(!this._inflateStream){if(e.length===0){n();return}this._inflateStream=(e[0]&15)==8?r.createInflate(this.#e):r.createInflateRaw(this.#e),this._inflateStream.on(`data`,this.push.bind(this)),this._inflateStream.on(`end`,()=>this.push(null)),this._inflateStream.on(`error`,e=>this.destroy(e))}this._inflateStream.write(e,t,n)}_final(e){this._inflateStream&&=(this._inflateStream.end(),null),e()}};function Oe(e){return new De(e)}function ke(e){let t=null,n=null,r=null,i=je(`content-type`,e);if(i===null)return`failure`;for(let e of i){let i=d(e);i!==`failure`&&i.essence!==`*/*`&&(r=i,r.essence===n?!r.parameters.has(`charset`)&&t!==null&&r.parameters.set(`charset`,t):(t=null,r.parameters.has(`charset`)&&(t=r.parameters.get(`charset`)),n=r.essence))}return r??`failure`}function Ae(e){let t=e,n={position:0},r=[],i=``;for(;n.positione!==`"`&&e!==`,`,t,n),n.positione===9||e===32),r.push(i),i=``}return r}function je(e,t){let n=t.get(e,!0);return n===null?null:Ae(n)}let Me=new TextDecoder;function Ne(e){return e.length===0?``:(e[0]===239&&e[1]===187&&e[2]===191&&(e=e.subarray(3)),Me.decode(e))}var Pe=class{get baseUrl(){return s()}get origin(){return this.baseUrl?.origin}policyContainer=ie()};t.exports={isAborted:de,isCancelled:fe,isValidEncodedURL:T,createDeferredPromise:X,ReadableStreamFrom:h,tryUpgradeRequestToAPotentiallyTrustworthyURL:le,clampAndCoarsenConnectionTimingInfo:ne,coarsenedSharedCurrentTime:re,determineRequestsReferrer:oe,makePolicyContainer:ie,clonePolicyContainer:ae,appendFetchMetadata:ee,appendRequestOriginHeader:V,TAOCheck:L,corsCheck:I,crossOriginResourcePolicyCheck:F,createOpaqueTimingInfo:U,setRequestReferrerPolicyOnRedirect:P,isValidHTTPToken:g,requestBadPort:k,requestCurrentURL:D,responseURL:C,responseLocationURL:w,isBlobLike:m,isURLPotentiallyTrustworthy:G,isValidReasonPhrase:j,sameOrigin:ue,normalizeMethod:pe,serializeJavascriptValueToJSONString:me,iteratorMixin:_e,createIterator:ge,isValidHeaderName:M,isValidHeaderValue:N,isErrorLike:A,fullyReadBody:ve,bytesMatch:K,isReadableStreamLike:Z,readableStreamClose:ye,isomorphicEncode:Q,urlIsLocal:Se,urlHasHttpsScheme:Ce,urlIsHttpHttpsScheme:we,readAllBytes:xe,simpleRangeHeaderValue:Te,buildContentRange:Ee,parseMetadata:se,createInflate:Oe,extractMimeType:ke,getDecodeSplit:je,utf8DecodeBytes:Ne,environmentSettingsObject:new class{settingsObject=new Pe}}})),H=/* @__PURE__ */ f(((e,t)=>{t.exports={kUrl:Symbol(`url`),kHeaders:Symbol(`headers`),kSignal:Symbol(`signal`),kState:Symbol(`state`),kDispatcher:Symbol(`dispatcher`)}})),ne=/* @__PURE__ */ f(((e,t)=>{let{Blob:n,File:r}=p(`node:buffer`),{kState:i}=H(),{webidl:a}=B();var o=class e{constructor(e,t,n={}){let r=t,a=n.type,o=n.lastModified??Date.now();this[i]={blobLike:e,name:r,type:a,lastModified:o}}stream(...t){return a.brandCheck(this,e),this[i].blobLike.stream(...t)}arrayBuffer(...t){return a.brandCheck(this,e),this[i].blobLike.arrayBuffer(...t)}slice(...t){return a.brandCheck(this,e),this[i].blobLike.slice(...t)}text(...t){return a.brandCheck(this,e),this[i].blobLike.text(...t)}get size(){return a.brandCheck(this,e),this[i].blobLike.size}get type(){return a.brandCheck(this,e),this[i].blobLike.type}get name(){return a.brandCheck(this,e),this[i].name}get lastModified(){return a.brandCheck(this,e),this[i].lastModified}get[Symbol.toStringTag](){return`File`}};a.converters.Blob=a.interfaceConverter(n);function s(e){return e instanceof r||e&&(typeof e.stream==`function`||typeof e.arrayBuffer==`function`)&&e[Symbol.toStringTag]===`File`}t.exports={FileLike:o,isFileLike:s}})),re=/* @__PURE__ */ f(((e,t)=>{let{isBlobLike:n,iteratorMixin:r}=V(),{kState:i}=H(),{kEnumerableProperty:a}=O(),{FileLike:o,isFileLike:s}=ne(),{webidl:c}=B(),{File:l}=p(`node:buffer`),u=p(`node:util`),d=globalThis.File??l;var f=class e{constructor(e){if(c.util.markAsUncloneable(this),e!==void 0)throw c.errors.conversionFailed({prefix:`FormData constructor`,argument:`Argument 1`,types:[`undefined`]});this[i]=[]}append(t,r,a=void 0){c.brandCheck(this,e);let o=`FormData.append`;if(c.argumentLengthCheck(arguments,2,o),arguments.length===3&&!n(r))throw TypeError(`Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'`);t=c.converters.USVString(t,o,`name`),r=n(r)?c.converters.Blob(r,o,`value`,{strict:!1}):c.converters.USVString(r,o,`value`),a=arguments.length===3?c.converters.USVString(a,o,`filename`):void 0;let s=m(t,r,a);this[i].push(s)}delete(t){c.brandCheck(this,e);let n=`FormData.delete`;c.argumentLengthCheck(arguments,1,n),t=c.converters.USVString(t,n,`name`),this[i]=this[i].filter(e=>e.name!==t)}get(t){c.brandCheck(this,e);let n=`FormData.get`;c.argumentLengthCheck(arguments,1,n),t=c.converters.USVString(t,n,`name`);let r=this[i].findIndex(e=>e.name===t);return r===-1?null:this[i][r].value}getAll(t){c.brandCheck(this,e);let n=`FormData.getAll`;return c.argumentLengthCheck(arguments,1,n),t=c.converters.USVString(t,n,`name`),this[i].filter(e=>e.name===t).map(e=>e.value)}has(t){c.brandCheck(this,e);let n=`FormData.has`;return c.argumentLengthCheck(arguments,1,n),t=c.converters.USVString(t,n,`name`),this[i].findIndex(e=>e.name===t)!==-1}set(t,r,a=void 0){c.brandCheck(this,e);let o=`FormData.set`;if(c.argumentLengthCheck(arguments,2,o),arguments.length===3&&!n(r))throw TypeError(`Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'`);t=c.converters.USVString(t,o,`name`),r=n(r)?c.converters.Blob(r,o,`name`,{strict:!1}):c.converters.USVString(r,o,`name`),a=arguments.length===3?c.converters.USVString(a,o,`name`):void 0;let s=m(t,r,a),l=this[i].findIndex(e=>e.name===t);l===-1?this[i].push(s):this[i]=[...this[i].slice(0,l),s,...this[i].slice(l+1).filter(e=>e.name!==t)]}[u.inspect.custom](e,t){let n=this[i].reduce((e,t)=>(e[t.name]?Array.isArray(e[t.name])?e[t.name].push(t.value):e[t.name]=[e[t.name],t.value]:e[t.name]=t.value,e),{__proto__:null});t.depth??=e,t.colors??=!0;let r=u.formatWithOptions(t,n);return`FormData ${r.slice(r.indexOf(`]`)+2)}`}};r(`FormData`,f,i,`name`,`value`),Object.defineProperties(f.prototype,{append:a,delete:a,get:a,getAll:a,has:a,set:a,[Symbol.toStringTag]:{value:`FormData`,configurable:!0}});function m(e,t,n){if(typeof t!=`string`&&(s(t)||(t=t instanceof Blob?new d([t],`blob`,{type:t.type}):new o(t,`blob`,{type:t.type})),n!==void 0)){let e={type:t.type,lastModified:t.lastModified};t=t instanceof l?new d([t],n,e):new o(t,n,e)}return{name:e,value:t}}t.exports={FormData:f,makeEntry:m}})),U=/* @__PURE__ */ f(((e,t)=>{let{isUSVString:n,bufferToLowerCasedHeaderName:r}=O(),{utf8DecodeBytes:i}=V(),{HTTP_TOKEN_CODEPOINTS:a,isomorphicDecode:o}=z(),{isFileLike:s}=ne(),{makeEntry:c}=re(),l=p(`node:assert`),{File:u}=p(`node:buffer`),d=globalThis.File??u,f=Buffer.from(`form-data; name="`),m=Buffer.from(`; filename`),h=Buffer.from(`--`),g=Buffer.from(`--\r `);function _(e){for(let t=0;t70)return!1;for(let n=0;n=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122||t===39||t===45||t===95))return!1}return!0}function y(e,t){l(t!==`failure`&&t.essence===`multipart/form-data`);let r=t.parameters.get(`boundary`);if(r===void 0)return`failure`;let a=Buffer.from(`--${r}`,`utf8`),o=[],u={position:0};for(;e[u.position]===13&&e[u.position+1]===10;)u.position+=2;let f=e.length;for(;e[f-1]===10&&e[f-2]===13;)f-=2;for(f!==e.length&&(e=e.subarray(0,f));;){if(e.subarray(u.position,u.position+a.length).equals(a))u.position+=a.length;else return`failure`;if(u.position===e.length-2&&w(e,h,u)||u.position===e.length-4&&w(e,g,u))return o;if(e[u.position]!==13||e[u.position+1]!==10)return`failure`;u.position+=2;let t=b(e,u);if(t===`failure`)return`failure`;let{name:r,filename:f,contentType:p,encoding:m}=t;u.position+=2;let v;{let t=e.indexOf(a.subarray(2),u.position);if(t===-1)return`failure`;v=e.subarray(u.position,t-4),u.position+=v.length,m===`base64`&&(v=Buffer.from(v.toString(),`base64`))}if(e[u.position]!==13||e[u.position+1]!==10)return`failure`;u.position+=2;let y;f===null?y=i(Buffer.from(v)):(p??=`text/plain`,_(p)||(p=``),y=new d([v],f,{type:p})),l(n(r)),l(typeof y==`string`&&n(y)||s(y)),o.push(c(r,y,f))}}function b(e,t){let n=null,i=null,s=null,c=null;for(;;){if(e[t.position]===13&&e[t.position+1]===10)return n===null?`failure`:{name:n,filename:i,contentType:s,encoding:c};let l=S(e=>e!==10&&e!==13&&e!==58,e,t);if(l=C(l,!0,!0,e=>e===9||e===32),!a.test(l.toString())||e[t.position]!==58)return`failure`;switch(t.position++,S(e=>e===32||e===9,e,t),r(l)){case`content-disposition`:if(n=i=null,!w(e,f,t)||(t.position+=17,n=x(e,t),n===null))return`failure`;if(w(e,m,t)){let n=t.position+m.length;if(e[n]===42&&(t.position+=1,n+=1),e[n]!==61||e[n+1]!==34||(t.position+=12,i=x(e,t),i===null))return`failure`}break;case`content-type`:{let n=S(e=>e!==10&&e!==13,e,t);n=C(n,!1,!0,e=>e===9||e===32),s=o(n);break}case`content-transfer-encoding`:{let n=S(e=>e!==10&&e!==13,e,t);n=C(n,!1,!0,e=>e===9||e===32),c=o(n);break}default:S(e=>e!==10&&e!==13,e,t)}if(e[t.position]!==13&&e[t.position+1]!==10)return`failure`;t.position+=2}}function x(e,t){l(e[t.position-1]===34);let n=S(e=>e!==10&&e!==13&&e!==34,e,t);return e[t.position]===34?(t.position++,n=new TextDecoder().decode(n).replace(/%0A/gi,` `).replace(/%0D/gi,`\r`).replace(/%22/g,`"`),n):null}function S(e,t,n){let r=n.position;for(;r0&&r(e[a]);)a--;return i===0&&a===e.length-1?e:e.subarray(i,a+1)}function w(e,t,n){if(e.length{let n=O(),{ReadableStreamFrom:r,isBlobLike:i,isReadableStreamLike:a,readableStreamClose:o,createDeferredPromise:s,fullyReadBody:c,extractMimeType:l,utf8DecodeBytes:u}=V(),{FormData:d}=re(),{kState:f}=H(),{webidl:m}=B(),{Blob:h}=p(`node:buffer`),g=p(`node:assert`),{isErrored:_,isDisturbed:v}=p(`node:stream`),{isArrayBuffer:y}=p(`node:util/types`),{serializeAMimeType:b}=z(),{multipartFormDataParser:x}=U(),S;try{let e=p(`node:crypto`);S=t=>e.randomInt(0,t)}catch{S=e=>Math.floor(Math.random(e))}let C=new TextEncoder;function w(){}let T=globalThis.FinalizationRegistry&&process.version.indexOf(`v18`)!==0,E;T&&(E=new FinalizationRegistry(e=>{let t=e.deref();t&&!t.locked&&!v(t)&&!_(t)&&t.cancel(`Response object has been garbage collected`).catch(w)}));function D(e,t=!1){let s=null;s=e instanceof ReadableStream?e:i(e)?e.stream():new ReadableStream({async pull(e){let t=typeof l==`string`?C.encode(l):l;t.byteLength&&e.enqueue(t),queueMicrotask(()=>o(e))},start(){},type:`bytes`}),g(a(s));let c=null,l=null,u=null,d=null;if(typeof e==`string`)l=e,d=`text/plain;charset=UTF-8`;else if(e instanceof URLSearchParams)l=e.toString(),d=`application/x-www-form-urlencoded;charset=UTF-8`;else if(y(e))l=new Uint8Array(e.slice());else if(ArrayBuffer.isView(e))l=new Uint8Array(e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength));else if(n.isFormDataLike(e)){let t=`----formdata-undici-0${`${S(1e11)}`.padStart(11,`0`)}`,n=`--${t}\r\nContent-Disposition: form-data`,r=e=>e.replace(/\n/g,`%0A`).replace(/\r/g,`%0D`).replace(/"/g,`%22`),i=e=>e.replace(/\r?\n|\r/g,`\r `),a=[],o=new Uint8Array([13,10]) @@ -10,38 +10,38 @@ if(S===void 0)return!0;let n=ce(t);if(n===`no metadata`||n.length===0)return!0;l ;u=0;let s=!1;for(let[t,c]of e)if(typeof c==`string`){let e=C.encode(n+`; name="${r(i(t))}"\r\n\r\n${i(c)}\r\n`);a.push(e),u+=e.byteLength}else{let e=C.encode(`${n}; name="${r(i(t))}"`+(c.name?`; filename="${r(c.name)}"`:``)+`\r Content-Type: ${c.type||`application/octet-stream`}\r\n\r\n`);a.push(e,c,o),typeof c.size==`number`?u+=e.byteLength+c.size+o.byteLength:s=!0}let f=C.encode(`--${t}--\r\n`);a.push(f),u+=f.byteLength,s&&(u=null),l=e,c=async function*(){for(let e of a)e.stream?yield*e.stream():yield e},d=`multipart/form-data; boundary=${t}`}else if(i(e))l=e,u=e.size,e.type&&(d=e.type);else if(typeof e[Symbol.asyncIterator]==`function`){if(t)throw TypeError(`keepalive`);if(n.isDisturbed(e)||e.locked)throw TypeError(`Response body object should not be disturbed or locked`);s=e instanceof ReadableStream?e:r(e)}if((typeof l==`string`||n.isBuffer(l))&&(u=Buffer.byteLength(l)),c!=null){let t;s=new ReadableStream({async start(){t=c(e)[Symbol.asyncIterator]()},async pull(e){let{value:n,done:r}=await t.next();if(r)queueMicrotask(()=>{e.close(),e.byobRequest?.respond(0)});else if(!_(s)){let t=new Uint8Array(n);t.byteLength&&e.enqueue(t)}return e.desiredSize>0},async cancel(e){await t.return()},type:`bytes`})}return[{stream:s,source:l,length:u},d]}function k(e,t=!1){return e instanceof ReadableStream&& // istanbul ignore next -(g(!n.isDisturbed(e),`The body has already been consumed.`),g(!e.locked,`The stream is locked.`)),D(e,t)}function A(e,t){let[n,r]=t.stream.tee();return t.stream=n,{stream:r,length:t.length,source:t.source}}function j(e){if(e.aborted)throw new DOMException(`The operation was aborted.`,`AbortError`)}function M(e){return{blob(){return P(this,e=>{let t=L(this);return t===null?t=``:t&&=b(t),new h([e],{type:t})},e)},arrayBuffer(){return P(this,e=>new Uint8Array(e).buffer,e)},text(){return P(this,u,e)},json(){return P(this,I,e)},formData(){return P(this,e=>{let t=L(this);if(t!==null)switch(t.essence){case`multipart/form-data`:{let n=x(e,t);if(n===`failure`)throw TypeError(`Failed to parse body as FormData.`);let r=new d;return r[f]=n,r}case`application/x-www-form-urlencoded`:{let t=new URLSearchParams(e.toString()),n=new d;for(let[e,r]of t)n.append(e,r);return n}}throw TypeError(`Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".`)},e)},bytes(){return P(this,e=>new Uint8Array(e),e)}}}function N(e){Object.assign(e.prototype,M(e))}async function P(e,t,n){if(m.brandCheck(e,n),F(e))throw TypeError(`Body is unusable: Body has already been read`);j(e[f]);let r=s(),i=e=>r.reject(e),a=e=>{try{r.resolve(t(e))}catch(e){i(e)}};return e[f].body==null?(a(Buffer.allocUnsafe(0)),r.promise):(await c(e[f].body,a,i),r.promise)}function F(e){let t=e[f].body;return t!=null&&(t.stream.locked||n.isDisturbed(t.stream))}function I(e){return JSON.parse(u(e))}function L(e){let t=e[f].headersList,n=l(t);return n===`failure`?null:n}t.exports={extractBody:D,safelyExtractBody:k,cloneBody:A,mixinBody:N,streamRegistry:E,hasFinalizationRegistry:T,bodyUnusable:F}})),ae=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),r=O(),{channels:i}=k(),a=N(),{RequestContentLengthMismatchError:o,ResponseContentLengthMismatchError:s,RequestAbortedError:c,InvalidArgumentError:l,HeadersTimeoutError:u,HeadersOverflowError:d,SocketError:f,InformationalError:m,BodyTimeoutError:h,HTTPParserError:g,ResponseExceededMaxSizeError:_}=T(),{kUrl:v,kReset:y,kClient:b,kParser:x,kBlocking:S,kRunning:C,kPending:E,kSize:D,kWriting:A,kQueue:j,kNoRef:M,kKeepAliveDefaultTimeout:P,kHostHeader:F,kPendingIdx:te,kRunningIdx:R,kError:z,kPipelining:B,kSocket:V,kKeepAliveTimeoutValue:H,kMaxHeadersSize:ne,kKeepAliveMaxTimeout:re,kKeepAliveTimeoutThreshold:U,kHeadersTimeout:ae,kBodyTimeout:oe,kStrictContentLength:W,kMaxRequests:G,kCounter:se,kMaxResponseSize:K,kOnError:ce,kResume:q,kHTTPContext:le}=w(),J=I(),ue=Buffer.alloc(0),de=Buffer[Symbol.species],Y=r.addListener,fe=r.removeAllListeners,pe=Symbol(`kIdleSocketValidation`),me=Symbol(`kIdleSocketValidationTimeout`),he=Symbol(`kSocketUsed`),ge;async function _e(){let e=process.env.JEST_WORKER_ID?L():void 0,t;try{t=await WebAssembly.compile(ee())}catch{ +(g(!n.isDisturbed(e),`The body has already been consumed.`),g(!e.locked,`The stream is locked.`)),D(e,t)}function A(e,t){let[n,r]=t.stream.tee();return t.stream=n,{stream:r,length:t.length,source:t.source}}function j(e){if(e.aborted)throw new DOMException(`The operation was aborted.`,`AbortError`)}function M(e){return{blob(){return P(this,e=>{let t=L(this);return t===null?t=``:t&&=b(t),new h([e],{type:t})},e)},arrayBuffer(){return P(this,e=>new Uint8Array(e).buffer,e)},text(){return P(this,u,e)},json(){return P(this,I,e)},formData(){return P(this,e=>{let t=L(this);if(t!==null)switch(t.essence){case`multipart/form-data`:{let n=x(e,t);if(n===`failure`)throw TypeError(`Failed to parse body as FormData.`);let r=new d;return r[f]=n,r}case`application/x-www-form-urlencoded`:{let t=new URLSearchParams(e.toString()),n=new d;for(let[e,r]of t)n.append(e,r);return n}}throw TypeError(`Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".`)},e)},bytes(){return P(this,e=>new Uint8Array(e),e)}}}function N(e){Object.assign(e.prototype,M(e))}async function P(e,t,n){if(m.brandCheck(e,n),F(e))throw TypeError(`Body is unusable: Body has already been read`);j(e[f]);let r=s(),i=e=>r.reject(e),a=e=>{try{r.resolve(t(e))}catch(e){i(e)}};return e[f].body==null?(a(Buffer.allocUnsafe(0)),r.promise):(await c(e[f].body,a,i),r.promise)}function F(e){let t=e[f].body;return t!=null&&(t.stream.locked||n.isDisturbed(t.stream))}function I(e){return JSON.parse(u(e))}function L(e){let t=e[f].headersList,n=l(t);return n===`failure`?null:n}t.exports={extractBody:D,safelyExtractBody:k,cloneBody:A,mixinBody:N,streamRegistry:E,hasFinalizationRegistry:T,bodyUnusable:F}})),ae=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),r=O(),{channels:i}=k(),a=N(),{RequestContentLengthMismatchError:o,ResponseContentLengthMismatchError:s,RequestAbortedError:c,InvalidArgumentError:l,HeadersTimeoutError:u,HeadersOverflowError:d,SocketError:f,InformationalError:m,BodyTimeoutError:h,HTTPParserError:g,ResponseExceededMaxSizeError:_}=T(),{kUrl:v,kReset:y,kClient:b,kParser:x,kBlocking:S,kRunning:C,kPending:E,kSize:D,kWriting:A,kQueue:j,kNoRef:M,kKeepAliveDefaultTimeout:P,kHostHeader:F,kPendingIdx:te,kRunningIdx:R,kError:z,kPipelining:B,kSocket:V,kKeepAliveTimeoutValue:H,kMaxHeadersSize:ne,kKeepAliveMaxTimeout:re,kKeepAliveTimeoutThreshold:U,kHeadersTimeout:ae,kBodyTimeout:oe,kStrictContentLength:W,kMaxRequests:G,kCounter:K,kMaxResponseSize:q,kOnError:se,kResume:J,kHTTPContext:ce}=w(),Y=I(),le=Buffer.alloc(0),ue=Buffer[Symbol.species],X=r.addListener,de=r.removeAllListeners,fe=Symbol(`kIdleSocketValidation`),pe=Symbol(`kIdleSocketValidationTimeout`),me=Symbol(`kSocketUsed`),he;async function ge(){let e=process.env.JEST_WORKER_ID?L():void 0,t;try{t=await WebAssembly.compile(ee())}catch{ /* istanbul ignore next */ -t=await WebAssembly.compile(e||L())}return await WebAssembly.instantiate(t,{env:{wasm_on_url:(e,t,n)=>0,wasm_on_status:(e,t,r)=>{n(X.ptr===e);let i=t-Z+be.byteOffset;return X.onStatus(new de(be.buffer,i,r))||0},wasm_on_message_begin:e=>(n(X.ptr===e),X.onMessageBegin()||0),wasm_on_header_field:(e,t,r)=>{n(X.ptr===e);let i=t-Z+be.byteOffset;return X.onHeaderField(new de(be.buffer,i,r))||0},wasm_on_header_value:(e,t,r)=>{n(X.ptr===e);let i=t-Z+be.byteOffset;return X.onHeaderValue(new de(be.buffer,i,r))||0},wasm_on_headers_complete:(e,t,r,i)=>(n(X.ptr===e),X.onHeadersComplete(t,!!r,!!i)||0),wasm_on_body:(e,t,r)=>{n(X.ptr===e);let i=t-Z+be.byteOffset;return X.onBody(new de(be.buffer,i,r))||0},wasm_on_message_complete:e=>(n(X.ptr===e),X.onMessageComplete()||0)}})}let ve=null,ye=_e();ye.catch();let X=null,be=null,xe=0,Z=null;var Se=class{constructor(e,t,{exports:r}){n(Number.isFinite(e[ne])&&e[ne]>0),this.llhttp=r,this.ptr=this.llhttp.llhttp_alloc(J.TYPE.RESPONSE),this.client=e,this.socket=t,this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.statusCode=null,this.statusText=``,this.upgrade=!1,this.headers=[],this.headersSize=0,this.headersMaxSize=e[ne],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive=``,this.contentLength=``,this.connection=``,this.maxResponseSize=e[K]}setTimeout(e,t){e!==this.timeoutValue||t&1^this.timeoutType&1?(this.timeout&&=(a.clearTimeout(this.timeout),null),e&&(t&1?this.timeout=a.setFastTimeout(Ce,e,new WeakRef(this)):(this.timeout=setTimeout(Ce,e,new WeakRef(this)),this.timeout.unref())),this.timeoutValue=e):this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.timeoutType=t}resume(){!this.socket.destroyed&&this.paused&&(n(this.ptr!=null),n(X==null),this.llhttp.llhttp_resume(this.ptr),n(this.timeoutType===5),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.paused=!1,this.execute(this.socket.read()||ue),this.readMore())}readMore(){for(;!this.paused&&this.ptr;){let e=this.socket.read();if(e===null)break;this.execute(e)}}execute(e){n(this.ptr!=null),n(X==null),n(!this.paused);let{socket:t,llhttp:i}=this;e.length>xe&&(Z&&i.free(Z),xe=Math.ceil(e.length/4096)*4096,Z=i.malloc(xe)),new Uint8Array(i.memory.buffer,Z,xe).set(e);try{let n;try{be=e,X=this,n=i.llhttp_execute(this.ptr,Z,e.length)}catch(e){ +t=await WebAssembly.compile(e||L())}return await WebAssembly.instantiate(t,{env:{wasm_on_url:(e,t,n)=>0,wasm_on_status:(e,t,r)=>{n(Z.ptr===e);let i=t-Q+ye.byteOffset;return Z.onStatus(new ue(ye.buffer,i,r))||0},wasm_on_message_begin:e=>(n(Z.ptr===e),Z.onMessageBegin()||0),wasm_on_header_field:(e,t,r)=>{n(Z.ptr===e);let i=t-Q+ye.byteOffset;return Z.onHeaderField(new ue(ye.buffer,i,r))||0},wasm_on_header_value:(e,t,r)=>{n(Z.ptr===e);let i=t-Q+ye.byteOffset;return Z.onHeaderValue(new ue(ye.buffer,i,r))||0},wasm_on_headers_complete:(e,t,r,i)=>(n(Z.ptr===e),Z.onHeadersComplete(t,!!r,!!i)||0),wasm_on_body:(e,t,r)=>{n(Z.ptr===e);let i=t-Q+ye.byteOffset;return Z.onBody(new ue(ye.buffer,i,r))||0},wasm_on_message_complete:e=>(n(Z.ptr===e),Z.onMessageComplete()||0)}})}let _e=null,ve=ge();ve.catch();let Z=null,ye=null,be=0,Q=null;var xe=class{constructor(e,t,{exports:r}){n(Number.isFinite(e[ne])&&e[ne]>0),this.llhttp=r,this.ptr=this.llhttp.llhttp_alloc(Y.TYPE.RESPONSE),this.client=e,this.socket=t,this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.statusCode=null,this.statusText=``,this.upgrade=!1,this.headers=[],this.headersSize=0,this.headersMaxSize=e[ne],this.shouldKeepAlive=!1,this.paused=!1,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive=``,this.contentLength=``,this.connection=``,this.maxResponseSize=e[q]}setTimeout(e,t){e!==this.timeoutValue||t&1^this.timeoutType&1?(this.timeout&&=(a.clearTimeout(this.timeout),null),e&&(t&1?this.timeout=a.setFastTimeout(Se,e,new WeakRef(this)):(this.timeout=setTimeout(Se,e,new WeakRef(this)),this.timeout.unref())),this.timeoutValue=e):this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.timeoutType=t}resume(){!this.socket.destroyed&&this.paused&&(n(this.ptr!=null),n(Z==null),this.llhttp.llhttp_resume(this.ptr),n(this.timeoutType===5),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),this.paused=!1,this.execute(this.socket.read()||le),this.readMore())}readMore(){for(;!this.paused&&this.ptr;){let e=this.socket.read();if(e===null)break;this.execute(e)}}execute(e){n(this.ptr!=null),n(Z==null),n(!this.paused);let{socket:t,llhttp:i}=this;e.length>be&&(Q&&i.free(Q),be=Math.ceil(e.length/4096)*4096,Q=i.malloc(be)),new Uint8Array(i.memory.buffer,Q,be).set(e);try{let n;try{ye=e,Z=this,n=i.llhttp_execute(this.ptr,Q,e.length)}catch(e){ /* istanbul ignore next: difficult to make a test case for */ -throw e}finally{X=null,be=null}let r=i.llhttp_get_error_pos(this.ptr)-Z;if(n!==J.ERROR.OK){let i=e.subarray(r);if(n===J.ERROR.PAUSED_UPGRADE)this.onUpgrade(i);else if(n===J.ERROR.PAUSED)this.paused=!0,t.unshift(i);else throw this.createError(n,i)}}catch(e){r.destroy(t,e)}}finish(){n(X===null),n(this.ptr!=null),n(!this.paused);let{llhttp:e}=this,t;try{X=this,t=e.llhttp_finish(this.ptr)}finally{X=null}return t===J.ERROR.OK?null:t===J.ERROR.PAUSED||t===J.ERROR.PAUSED_UPGRADE?(this.paused=!0,null):this.createError(t,ue)}createError(e,t){let{llhttp:n,contentLength:r,bytesRead:i}=this;if(r&&i!==parseInt(r,10))return new s;let a=n.llhttp_get_error_reason(this.ptr),o=``;if(a){let e=new Uint8Array(n.memory.buffer,a).indexOf(0);o=`Response does not match the HTTP/1.1 protocol (`+Buffer.from(n.memory.buffer,a,e).toString()+`)`}return new g(o,J.ERROR[e],t)}destroy(){n(this.ptr!=null),n(X==null),this.llhttp.llhttp_free(this.ptr),this.ptr=null,this.timeout&&a.clearTimeout(this.timeout),this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.paused=!1}onStatus(e){this.statusText=e.toString()}onMessageBegin(){let{socket:e,client:t}=this; +throw e}finally{Z=null,ye=null}let r=i.llhttp_get_error_pos(this.ptr)-Q;if(n!==Y.ERROR.OK){let i=e.subarray(r);if(n===Y.ERROR.PAUSED_UPGRADE)this.onUpgrade(i);else if(n===Y.ERROR.PAUSED)this.paused=!0,t.unshift(i);else throw this.createError(n,i)}}catch(e){r.destroy(t,e)}}finish(){n(Z===null),n(this.ptr!=null),n(!this.paused);let{llhttp:e}=this,t;try{Z=this,t=e.llhttp_finish(this.ptr)}finally{Z=null}return t===Y.ERROR.OK?null:t===Y.ERROR.PAUSED||t===Y.ERROR.PAUSED_UPGRADE?(this.paused=!0,null):this.createError(t,le)}createError(e,t){let{llhttp:n,contentLength:r,bytesRead:i}=this;if(r&&i!==parseInt(r,10))return new s;let a=n.llhttp_get_error_reason(this.ptr),o=``;if(a){let e=new Uint8Array(n.memory.buffer,a).indexOf(0);o=`Response does not match the HTTP/1.1 protocol (`+Buffer.from(n.memory.buffer,a,e).toString()+`)`}return new g(o,Y.ERROR[e],t)}destroy(){n(this.ptr!=null),n(Z==null),this.llhttp.llhttp_free(this.ptr),this.ptr=null,this.timeout&&a.clearTimeout(this.timeout),this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.paused=!1}onStatus(e){this.statusText=e.toString()}onMessageBegin(){let{socket:e,client:t}=this; /* istanbul ignore next: difficult to make a test case for */ -if(e.destroyed)return-1;if(t[C]===0)return r.destroy(e,new f(`bad response`,r.getSocketInfo(e))),-1;let n=t[j][t[R]];if(!n)return-1;n.onResponseStarted()}onHeaderField(e){let t=this.headers.length;t&1?this.headers[t-1]=Buffer.concat([this.headers[t-1],e]):this.headers.push(e),this.trackHeader(e.length)}onHeaderValue(e){let t=this.headers.length;(t&1)==1?(this.headers.push(e),t+=1):this.headers[t-1]=Buffer.concat([this.headers[t-1],e]);let n=this.headers[t-2];if(n.length===10){let t=r.bufferToLowerCasedHeaderName(n);t===`keep-alive`?this.keepAlive+=e.toString():t===`connection`&&(this.connection+=e.toString())}else n.length===14&&r.bufferToLowerCasedHeaderName(n)===`content-length`&&(this.contentLength+=e.toString());this.trackHeader(e.length)}trackHeader(e){this.headersSize+=e,this.headersSize>=this.headersMaxSize&&r.destroy(this.socket,new d)}onUpgrade(e){let{upgrade:t,client:i,socket:a,headers:o,statusCode:s,statusText:c}=this;n(t),n(i[V]===a),n(!a.destroyed),n(!this.paused),n(!(o.length&1));let l=i[j][i[R]];n(l),n(l.upgrade||l.method===`CONNECT`),this.statusCode=null,this.statusText=``,this.shouldKeepAlive=null,this.headers=[],this.headersSize=0,a.unshift(e),a[x].destroy(),a[x]=null,a[b]=null,a[z]=null,fe(a),i[V]=null,i[le]=null,i[j][i[R]++]=null,i.emit(`disconnect`,i[v],[i],new m(`upgrade`));try{l.onUpgrade(s,o,a,c)}catch(e){r.errorRequest(i,l,e),r.destroy(a,e)}i[q]()}onHeadersComplete(e,t,i){let{client:a,socket:o,headers:s,statusText:c}=this; +if(e.destroyed)return-1;if(t[C]===0)return r.destroy(e,new f(`bad response`,r.getSocketInfo(e))),-1;let n=t[j][t[R]];if(!n)return-1;n.onResponseStarted()}onHeaderField(e){let t=this.headers.length;t&1?this.headers[t-1]=Buffer.concat([this.headers[t-1],e]):this.headers.push(e),this.trackHeader(e.length)}onHeaderValue(e){let t=this.headers.length;(t&1)==1?(this.headers.push(e),t+=1):this.headers[t-1]=Buffer.concat([this.headers[t-1],e]);let n=this.headers[t-2];if(n.length===10){let t=r.bufferToLowerCasedHeaderName(n);t===`keep-alive`?this.keepAlive+=e.toString():t===`connection`&&(this.connection+=e.toString())}else n.length===14&&r.bufferToLowerCasedHeaderName(n)===`content-length`&&(this.contentLength+=e.toString());this.trackHeader(e.length)}trackHeader(e){this.headersSize+=e,this.headersSize>=this.headersMaxSize&&r.destroy(this.socket,new d)}onUpgrade(e){let{upgrade:t,client:i,socket:a,headers:o,statusCode:s,statusText:c}=this;n(t),n(i[V]===a),n(!a.destroyed),n(!this.paused),n(!(o.length&1));let l=i[j][i[R]];n(l),n(l.upgrade||l.method===`CONNECT`),this.statusCode=null,this.statusText=``,this.shouldKeepAlive=null,this.headers=[],this.headersSize=0,a.unshift(e),a[x].destroy(),a[x]=null,a[b]=null,a[z]=null,de(a),i[V]=null,i[ce]=null,i[j][i[R]++]=null,i.emit(`disconnect`,i[v],[i],new m(`upgrade`));try{l.onUpgrade(s,o,a,c)}catch(e){r.errorRequest(i,l,e),r.destroy(a,e)}i[J]()}onHeadersComplete(e,t,i){let{client:a,socket:o,headers:s,statusText:c}=this; /* istanbul ignore next: difficult to make a test case for */ if(o.destroyed)return-1;if(a[C]===0)return r.destroy(o,new f(`bad response`,r.getSocketInfo(o))),-1;let l=a[j][a[R]]; /* istanbul ignore next: difficult to make a test case for */ -if(!l)return-1;if(n(!this.upgrade),n(this.statusCode<200),e===100)return r.destroy(o,new f(`bad response`,r.getSocketInfo(o))),-1;if(t&&!l.upgrade)return r.destroy(o,new f(`bad upgrade`,r.getSocketInfo(o))),-1;if(n(this.timeoutType===3),this.statusCode=e,this.shouldKeepAlive=i||l.method===`HEAD`&&!o[y]&&this.connection.toLowerCase()===`keep-alive`,this.statusCode>=200){let e=l.bodyTimeout==null?a[oe]:l.bodyTimeout;this.setTimeout(e,5)}else this.timeout&&this.timeout.refresh&&this.timeout.refresh();if(l.method===`CONNECT`||t)return n(a[C]===1),this.upgrade=!0,2;if(n(!(this.headers.length&1)),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&a[B]){let e=this.keepAlive?r.parseKeepAliveTimeout(this.keepAlive):null;if(e!=null){let t=Math.min(e-a[U],a[re]);t<=0?o[y]=!0:a[H]=t}else a[H]=a[P]}else o[y]=!0;let u=l.onHeaders(e,s,this.resume,c)===!1;return l.aborted?-1:l.method===`HEAD`||e<200?1:(o[S]&&(o[S]=!1,a[q]()),u?J.ERROR.PAUSED:0)}onBody(e){let{client:t,socket:i,statusCode:a,maxResponseSize:o}=this;if(i.destroyed)return-1;let s=t[j][t[R]];if(n(s),n(this.timeoutType===5),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),n(a>=200),o>-1&&this.bytesRead+e.length>o)return r.destroy(i,new _),-1;if(this.bytesRead+=e.length,s.onData(e)===!1)return J.ERROR.PAUSED}onMessageComplete(){let{client:e,socket:t,statusCode:i,upgrade:a,headers:o,contentLength:c,bytesRead:l,shouldKeepAlive:u}=this;if(t.destroyed&&(!i||u))return-1;if(a)return;n(i>=100),n(!(this.headers.length&1));let d=e[j][e[R]];if(n(d),this.statusCode=null,this.statusText=``,this.bytesRead=0,this.contentLength=``,this.keepAlive=``,this.connection=``,this.headers=[],this.headersSize=0,!(i<200)){ +if(!l)return-1;if(n(!this.upgrade),n(this.statusCode<200),e===100)return r.destroy(o,new f(`bad response`,r.getSocketInfo(o))),-1;if(t&&!l.upgrade)return r.destroy(o,new f(`bad upgrade`,r.getSocketInfo(o))),-1;if(n(this.timeoutType===3),this.statusCode=e,this.shouldKeepAlive=i||l.method===`HEAD`&&!o[y]&&this.connection.toLowerCase()===`keep-alive`,this.statusCode>=200){let e=l.bodyTimeout==null?a[oe]:l.bodyTimeout;this.setTimeout(e,5)}else this.timeout&&this.timeout.refresh&&this.timeout.refresh();if(l.method===`CONNECT`||t)return n(a[C]===1),this.upgrade=!0,2;if(n(!(this.headers.length&1)),this.headers=[],this.headersSize=0,this.shouldKeepAlive&&a[B]){let e=this.keepAlive?r.parseKeepAliveTimeout(this.keepAlive):null;if(e!=null){let t=Math.min(e-a[U],a[re]);t<=0?o[y]=!0:a[H]=t}else a[H]=a[P]}else o[y]=!0;let u=l.onHeaders(e,s,this.resume,c)===!1;return l.aborted?-1:l.method===`HEAD`||e<200?1:(o[S]&&(o[S]=!1,a[J]()),u?Y.ERROR.PAUSED:0)}onBody(e){let{client:t,socket:i,statusCode:a,maxResponseSize:o}=this;if(i.destroyed)return-1;let s=t[j][t[R]];if(n(s),n(this.timeoutType===5),this.timeout&&this.timeout.refresh&&this.timeout.refresh(),n(a>=200),o>-1&&this.bytesRead+e.length>o)return r.destroy(i,new _),-1;if(this.bytesRead+=e.length,s.onData(e)===!1)return Y.ERROR.PAUSED}onMessageComplete(){let{client:e,socket:t,statusCode:i,upgrade:a,headers:o,contentLength:c,bytesRead:l,shouldKeepAlive:u}=this;if(t.destroyed&&(!i||u))return-1;if(a)return;n(i>=100),n(!(this.headers.length&1));let d=e[j][e[R]];if(n(d),this.statusCode=null,this.statusText=``,this.bytesRead=0,this.contentLength=``,this.keepAlive=``,this.connection=``,this.headers=[],this.headersSize=0,!(i<200)){ /* istanbul ignore next: should be handled by llhttp? */ -if(d.method!==`HEAD`&&c&&l!==parseInt(c,10))return r.destroy(t,new s),-1;if(d.onComplete(o),e[j][e[R]++]=null,t[he]=!0,t[A])return n(e[C]===0),r.destroy(t,new m(`reset`)),J.ERROR.PAUSED;if(!u||t[y]&&e[C]===0)return r.destroy(t,new m(`reset`)),J.ERROR.PAUSED;e[B]==null||e[B]===1?setImmediate(()=>e[q]()):e[q]()}}};function Ce(e){let{socket:t,timeoutType:i,client:a,paused:o}=e.deref(); +if(d.method!==`HEAD`&&c&&l!==parseInt(c,10))return r.destroy(t,new s),-1;if(d.onComplete(o),e[j][e[R]++]=null,t[me]=!0,t[A])return n(e[C]===0),r.destroy(t,new m(`reset`)),Y.ERROR.PAUSED;if(!u||t[y]&&e[C]===0)return r.destroy(t,new m(`reset`)),Y.ERROR.PAUSED;e[B]==null||e[B]===1?setImmediate(()=>e[J]()):e[J]()}}};function Se(e){let{socket:t,timeoutType:i,client:a,paused:o}=e.deref(); /* istanbul ignore else */ -i===3?(!t[A]||t.writableNeedDrain||a[C]>1)&&(n(!o,`cannot be paused while waiting for headers`),r.destroy(t,new u)):i===5?o||r.destroy(t,new h):i===8&&(n(a[C]===0&&a[H]),r.destroy(t,new m(`socket idle timeout`)))}async function we(e,t){e[V]=t,ve||(ve=await ye,ye=null),t[M]=!1,t[A]=!1,t[y]=!1,t[S]=!1,t[pe]=0,t[me]=null,t[he]=!1,t[x]=new Se(e,t,ve),Y(t,`error`,function(e){let t=this[x];if(e.code===`ECONNRESET`&&t.statusCode&&!t.shouldKeepAlive){let e=t.finish();e&&(this[z]=e,this[b][ce](e))}else this[z]=e,this[b][ce](e)}),Y(t,`readable`,function(){let e=this[x];e&&e.readMore()}),Y(t,`end`,function(){let e=this[x];if(e.statusCode&&!e.shouldKeepAlive){let t=e.finish();t&&r.destroy(this,t)}else r.destroy(this,new f(`other side closed`,r.getSocketInfo(this)))}),Y(t,`close`,function(){let e=this[b],t=this[x];Te(this),t&&(!this[z]&&t.statusCode&&!t.shouldKeepAlive&&(this[z]=t.finish()||this[z]),this[x].destroy(),this[x]=null);let i=this[z]||new f(`closed`,r.getSocketInfo(this));if(e[V]=null,e[le]=null,e.destroyed){n(e[E]===0);let t=e[j].splice(e[R]);for(let n=0;n0&&i.code!==`UND_ERR_INFO`){let t=e[j][e[R]];e[j][e[R]++]=null,r.errorRequest(e,t,i)}e[te]=e[R],n(e[C]===0),e.emit(`disconnect`,e[v],[e],i),e[q]()});let i=!1;return t.on(`close`,()=>{i=!0}),{version:`h1`,defaultPipelining:1,write(...t){return ke(e,...t)},resume(){De(e)},destroy(e,n){i?queueMicrotask(n):t.destroy(e).on(`close`,n)},get destroyed(){return t.destroyed},busy(n){return!!(t[A]||t[y]||t[S]||t[pe]===1||n&&(e[C]>0&&!n.idempotent||e[C]>0&&(n.upgrade||n.method===`CONNECT`)||e[C]>0&&r.bodyLength(n.body)!==0&&(r.isStream(n.body)||r.isAsyncIterable(n.body)||r.isFormDataLike(n.body))))}}}function Te(e){e[me]&&(clearImmediate(e[me]),e[me]=null),e[pe]=0}function Ee(e,t){t[pe]=1,t[me]=setImmediate(()=>{t[me]=null,t[pe]=2,e[V]===t&&!t.destroyed&&e[q]()})}function De(e){let t=e[V];if(t&&!t.destroyed){if(e[D]===0?!t[M]&&t.unref&&(t.unref(),t[M]=!0):t[M]&&t.ref&&(t.ref(),t[M]=!1),e[C]===0&&e[E]>0&&t[he]){if(t[pe]===0){Ee(e,t),t[x].readMore(),t.destroyed;return}if(t[pe]===1){t[x].readMore(),t.destroyed;return}}if(e[C]===0&&(t[x].readMore(),t.destroyed))return;if(e[D]===0)t[x].timeoutType!==8&&t[x].setTimeout(e[H],8);else if(e[C]>0&&t[x].statusCode<200&&t[x].timeoutType!==3){let n=e[j][e[R]],r=n.headersTimeout==null?e[ae]:n.headersTimeout;t[x].setTimeout(r,3)}}}function Oe(e){return e!==`GET`&&e!==`HEAD`&&e!==`OPTIONS`&&e!==`TRACE`&&e!==`CONNECT`}function ke(e,t){let{method:a,path:s,host:u,upgrade:d,blocking:f,reset:p}=t,{body:h,headers:g,contentLength:_}=t,v=a===`PUT`||a===`POST`||a===`PATCH`||a===`QUERY`||a===`PROPFIND`||a===`PROPPATCH`;if(r.isFormDataLike(h)){ge||=ie().extractBody;let[e,n]=ge(h);t.contentType??g.push(`content-type`,n),h=e.stream,_=e.length}else if(r.isBlobLike(h)&&t.contentType==null){let n=h.type;if(n){let i=`${n}`;if(!r.isValidHeaderValue(i))return r.errorRequest(e,t,new l(`invalid content-type header`)),!1;g.push(`content-type`,i)}}h&&typeof h.read==`function`&&h.read(0);let b=r.bodyLength(h);if(_=b??_,_===null&&(_=t.contentLength),_===0&&!v&&(_=null),Oe(a)&&_>0&&t.contentLength!==null&&t.contentLength!==_){if(e[W])return r.errorRequest(e,t,new o),!1;process.emitWarning(new o)}let x=e[V];Te(x);let C=n=>{t.aborted||(t.completed?(t.upgrade||t.method===`CONNECT`)&&r.destroy(x,new m(`aborted`)):(r.errorRequest(e,t,n||new c),r.destroy(h),r.destroy(x,new m(`aborted`))))};try{t.onConnect(C)}catch(n){r.errorRequest(e,t,n)}if(t.aborted)return!1;a===`HEAD`&&(x[y]=!0),(d||a===`CONNECT`)&&(x[y]=!0),p!=null&&(x[y]=p),e[G]&&x[se]++>=e[G]&&(x[y]=!0),f&&(x[S]=!0);let w=`${a} ${s} HTTP/1.1\r\n`;if(w+=typeof u==`string`?`host: ${u}\r\n`:e[F],d?w+=`connection: upgrade\r\nupgrade: ${d}\r\n`:e[B]&&!x[y]?w+=`connection: keep-alive\r +i===3?(!t[A]||t.writableNeedDrain||a[C]>1)&&(n(!o,`cannot be paused while waiting for headers`),r.destroy(t,new u)):i===5?o||r.destroy(t,new h):i===8&&(n(a[C]===0&&a[H]),r.destroy(t,new m(`socket idle timeout`)))}async function Ce(e,t){e[V]=t,_e||(_e=await ve,ve=null),t[M]=!1,t[A]=!1,t[y]=!1,t[S]=!1,t[fe]=0,t[pe]=null,t[me]=!1,t[x]=new xe(e,t,_e),X(t,`error`,function(e){let t=this[x];if(e.code===`ECONNRESET`&&t.statusCode&&!t.shouldKeepAlive){let e=t.finish();e&&(this[z]=e,this[b][se](e))}else this[z]=e,this[b][se](e)}),X(t,`readable`,function(){let e=this[x];e&&e.readMore()}),X(t,`end`,function(){let e=this[x];if(e.statusCode&&!e.shouldKeepAlive){let t=e.finish();t&&r.destroy(this,t)}else r.destroy(this,new f(`other side closed`,r.getSocketInfo(this)))}),X(t,`close`,function(){let e=this[b],t=this[x];we(this),t&&(!this[z]&&t.statusCode&&!t.shouldKeepAlive&&(this[z]=t.finish()||this[z]),this[x].destroy(),this[x]=null);let i=this[z]||new f(`closed`,r.getSocketInfo(this));if(e[V]=null,e[ce]=null,e.destroyed){n(e[E]===0);let t=e[j].splice(e[R]);for(let n=0;n0&&i.code!==`UND_ERR_INFO`){let t=e[j][e[R]];e[j][e[R]++]=null,r.errorRequest(e,t,i)}e[te]=e[R],n(e[C]===0),e.emit(`disconnect`,e[v],[e],i),e[J]()});let i=!1;return t.on(`close`,()=>{i=!0}),{version:`h1`,defaultPipelining:1,write(...t){return Oe(e,...t)},resume(){Ee(e)},destroy(e,n){i?queueMicrotask(n):t.destroy(e).on(`close`,n)},get destroyed(){return t.destroyed},busy(n){return!!(t[A]||t[y]||t[S]||t[fe]===1||n&&(e[C]>0&&!n.idempotent||e[C]>0&&(n.upgrade||n.method===`CONNECT`)||e[C]>0&&r.bodyLength(n.body)!==0&&(r.isStream(n.body)||r.isAsyncIterable(n.body)||r.isFormDataLike(n.body))))}}}function we(e){e[pe]&&(clearImmediate(e[pe]),e[pe]=null),e[fe]=0}function Te(e,t){t[fe]=1,t[pe]=setImmediate(()=>{t[pe]=null,t[fe]=2,e[V]===t&&!t.destroyed&&e[J]()})}function Ee(e){let t=e[V];if(t&&!t.destroyed){if(e[D]===0?!t[M]&&t.unref&&(t.unref(),t[M]=!0):t[M]&&t.ref&&(t.ref(),t[M]=!1),e[C]===0&&e[E]>0&&t[me]){if(t[fe]===0){Te(e,t),t[x].readMore(),t.destroyed;return}if(t[fe]===1){t[x].readMore(),t.destroyed;return}}if(e[C]===0&&(t[x].readMore(),t.destroyed))return;if(e[D]===0)t[x].timeoutType!==8&&t[x].setTimeout(e[H],8);else if(e[C]>0&&t[x].statusCode<200&&t[x].timeoutType!==3){let n=e[j][e[R]],r=n.headersTimeout==null?e[ae]:n.headersTimeout;t[x].setTimeout(r,3)}}}function De(e){return e!==`GET`&&e!==`HEAD`&&e!==`OPTIONS`&&e!==`TRACE`&&e!==`CONNECT`}function Oe(e,t){let{method:a,path:s,host:u,upgrade:d,blocking:f,reset:p}=t,{body:h,headers:g,contentLength:_}=t,v=a===`PUT`||a===`POST`||a===`PATCH`||a===`QUERY`||a===`PROPFIND`||a===`PROPPATCH`;if(r.isFormDataLike(h)){he||=ie().extractBody;let[e,n]=he(h);t.contentType??g.push(`content-type`,n),h=e.stream,_=e.length}else if(r.isBlobLike(h)&&t.contentType==null){let n=h.type;if(n){let i=`${n}`;if(!r.isValidHeaderValue(i))return r.errorRequest(e,t,new l(`invalid content-type header`)),!1;g.push(`content-type`,i)}}h&&typeof h.read==`function`&&h.read(0);let b=r.bodyLength(h);if(_=b??_,_===null&&(_=t.contentLength),_===0&&!v&&(_=null),De(a)&&_>0&&t.contentLength!==null&&t.contentLength!==_){if(e[W])return r.errorRequest(e,t,new o),!1;process.emitWarning(new o)}let x=e[V];we(x);let C=n=>{t.aborted||(t.completed?(t.upgrade||t.method===`CONNECT`)&&r.destroy(x,new m(`aborted`)):(r.errorRequest(e,t,n||new c),r.destroy(h),r.destroy(x,new m(`aborted`))))};try{t.onConnect(C)}catch(n){r.errorRequest(e,t,n)}if(t.aborted)return!1;a===`HEAD`&&(x[y]=!0),(d||a===`CONNECT`)&&(x[y]=!0),p!=null&&(x[y]=p),e[G]&&x[K]++>=e[G]&&(x[y]=!0),f&&(x[S]=!0);let w=`${a} ${s} HTTP/1.1\r\n`;if(w+=typeof u==`string`?`host: ${u}\r\n`:e[F],d?w+=`connection: upgrade\r\nupgrade: ${d}\r\n`:e[B]&&!x[y]?w+=`connection: keep-alive\r `:w+=`connection: close\r -`,Array.isArray(g))for(let e=0;e{t.removeListener(`error`,g)}),!d){let e=new c;queueMicrotask(()=>g(e))}},g=function(e){if(!d){if(d=!0,n(o.destroyed||o[A]&&i[C]<=1),o.off(`drain`,m).off(`error`,g),t.removeListener(`data`,p).removeListener(`end`,g).removeListener(`close`,h),!e)try{f.end()}catch(t){e=t}f.destroy(e),e&&(e.code!==`UND_ERR_INFO`||e.message!==`reset`)?r.destroy(t,e):r.destroy(t)}};t.on(`data`,p).on(`end`,g).on(`error`,g).on(`close`,h),t.resume&&t.resume(),o.on(`drain`,m).on(`error`,g),t.errorEmitted??t.errored?setImmediate(()=>g(t.errored)):(t.endEmitted??t.readableEnded)&&setImmediate(()=>g(null)),(t.closeEmitted??t.closed)&&setImmediate(h)}function je(e,t,i,a,o,s,c,l){try{t?r.isBuffer(t)&&(n(s===t.byteLength,`buffer body must have content length`),o.cork(),o.write(`${c}content-length: ${s}\r\n\r\n`,`latin1`),o.write(t),o.uncork(),a.onBodySent(t),!l&&a.reset!==!1&&(o[y]=!0)):s===0?o.write(`${c}content-length: 0\r\n\r\n`,`latin1`):(n(s===null,`no body must not have content length`),o.write(`${c}\r\n`,`latin1`)),a.onRequestSent(),i[q]()}catch(t){e(t)}}async function Me(e,t,r,i,a,s,c,l){n(s===t.size,`blob body must have content length`);try{if(s!=null&&s!==t.size)throw new o;let e=Buffer.from(await t.arrayBuffer());a.cork(),a.write(`${c}content-length: ${s}\r\n\r\n`,`latin1`),a.write(e),a.uncork(),i.onBodySent(e),i.onRequestSent(),!l&&i.reset!==!1&&(a[y]=!0),r[q]()}catch(t){e(t)}}async function Ne(e,t,r,i,a,o,s,c){n(o!==0||r[C]===0,`iterator body cannot be pipelined`);let l=null;function u(){if(l){let e=l;l=null,e()}}let d=()=>new Promise((e,t)=>{n(l===null),a[z]?t(a[z]):l=e});a.on(`close`,u).on(`drain`,u);let f=new Pe({abort:e,socket:a,request:i,contentLength:o,client:r,expectsPayload:c,header:s});try{for await(let e of t){if(a[z])throw a[z];f.write(e)||await d()}f.end()}catch(e){f.destroy(e)}finally{a.off(`close`,u).off(`drain`,u)}}var Pe=class{constructor({abort:e,socket:t,request:n,contentLength:r,client:i,expectsPayload:a,header:o}){this.socket=t,this.request=n,this.contentLength=r,this.client=i,this.bytesWritten=0,this.expectsPayload=a,this.header=o,this.abort=e,t[A]=!0}write(e){let{socket:t,request:n,contentLength:r,client:i,bytesWritten:a,expectsPayload:s,header:c}=this;if(t[z])throw t[z];if(t.destroyed)return!1;let l=Buffer.byteLength(e);if(!l)return!0;if(r!==null&&a+l>r){if(i[W])throw new o;process.emitWarning(new o)}t.cork(),a===0&&(!s&&n.reset!==!1&&(t[y]=!0),r===null?t.write(`${c}transfer-encoding: chunked\r\n`,`latin1`):t.write(`${c}content-length: ${r}\r\n\r\n`,`latin1`)),r===null&&t.write(`\r\n${l.toString(16)}\r\n`,`latin1`),this.bytesWritten+=l;let u=t.write(e);return t.uncork(),n.onBodySent(e),u||t[x].timeout&&t[x].timeoutType===3&&t[x].timeout.refresh&&t[x].timeout.refresh(),u}end(){let{socket:e,contentLength:t,client:n,bytesWritten:r,expectsPayload:i,header:a,request:s}=this;if(s.onRequestSent(),e[A]=!1,e[z])throw e[z];if(!e.destroyed){if(r===0?i?e.write(`${a}content-length: 0\r\n\r\n`,`latin1`):e.write(`${a}\r\n`,`latin1`):t===null&&e.write(`\r +`,Array.isArray(g))for(let e=0;e{t.removeListener(`error`,g)}),!d){let e=new c;queueMicrotask(()=>g(e))}},g=function(e){if(!d){if(d=!0,n(o.destroyed||o[A]&&i[C]<=1),o.off(`drain`,m).off(`error`,g),t.removeListener(`data`,p).removeListener(`end`,g).removeListener(`close`,h),!e)try{f.end()}catch(t){e=t}f.destroy(e),e&&(e.code!==`UND_ERR_INFO`||e.message!==`reset`)?r.destroy(t,e):r.destroy(t)}};t.on(`data`,p).on(`end`,g).on(`error`,g).on(`close`,h),t.resume&&t.resume(),o.on(`drain`,m).on(`error`,g),t.errorEmitted??t.errored?setImmediate(()=>g(t.errored)):(t.endEmitted??t.readableEnded)&&setImmediate(()=>g(null)),(t.closeEmitted??t.closed)&&setImmediate(h)}function Ae(e,t,i,a,o,s,c,l){try{t?r.isBuffer(t)&&(n(s===t.byteLength,`buffer body must have content length`),o.cork(),o.write(`${c}content-length: ${s}\r\n\r\n`,`latin1`),o.write(t),o.uncork(),a.onBodySent(t),!l&&a.reset!==!1&&(o[y]=!0)):s===0?o.write(`${c}content-length: 0\r\n\r\n`,`latin1`):(n(s===null,`no body must not have content length`),o.write(`${c}\r\n`,`latin1`)),a.onRequestSent(),i[J]()}catch(t){e(t)}}async function je(e,t,r,i,a,s,c,l){n(s===t.size,`blob body must have content length`);try{if(s!=null&&s!==t.size)throw new o;let e=Buffer.from(await t.arrayBuffer());a.cork(),a.write(`${c}content-length: ${s}\r\n\r\n`,`latin1`),a.write(e),a.uncork(),i.onBodySent(e),i.onRequestSent(),!l&&i.reset!==!1&&(a[y]=!0),r[J]()}catch(t){e(t)}}async function Me(e,t,r,i,a,o,s,c){n(o!==0||r[C]===0,`iterator body cannot be pipelined`);let l=null;function u(){if(l){let e=l;l=null,e()}}let d=()=>new Promise((e,t)=>{n(l===null),a[z]?t(a[z]):l=e});a.on(`close`,u).on(`drain`,u);let f=new Ne({abort:e,socket:a,request:i,contentLength:o,client:r,expectsPayload:c,header:s});try{for await(let e of t){if(a[z])throw a[z];f.write(e)||await d()}f.end()}catch(e){f.destroy(e)}finally{a.off(`close`,u).off(`drain`,u)}}var Ne=class{constructor({abort:e,socket:t,request:n,contentLength:r,client:i,expectsPayload:a,header:o}){this.socket=t,this.request=n,this.contentLength=r,this.client=i,this.bytesWritten=0,this.expectsPayload=a,this.header=o,this.abort=e,t[A]=!0}write(e){let{socket:t,request:n,contentLength:r,client:i,bytesWritten:a,expectsPayload:s,header:c}=this;if(t[z])throw t[z];if(t.destroyed)return!1;let l=Buffer.byteLength(e);if(!l)return!0;if(r!==null&&a+l>r){if(i[W])throw new o;process.emitWarning(new o)}t.cork(),a===0&&(!s&&n.reset!==!1&&(t[y]=!0),r===null?t.write(`${c}transfer-encoding: chunked\r\n`,`latin1`):t.write(`${c}content-length: ${r}\r\n\r\n`,`latin1`)),r===null&&t.write(`\r\n${l.toString(16)}\r\n`,`latin1`),this.bytesWritten+=l;let u=t.write(e);return t.uncork(),n.onBodySent(e),u||t[x].timeout&&t[x].timeoutType===3&&t[x].timeout.refresh&&t[x].timeout.refresh(),u}end(){let{socket:e,contentLength:t,client:n,bytesWritten:r,expectsPayload:i,header:a,request:s}=this;if(s.onRequestSent(),e[A]=!1,e[z])throw e[z];if(!e.destroyed){if(r===0?i?e.write(`${a}content-length: 0\r\n\r\n`,`latin1`):e.write(`${a}\r\n`,`latin1`):t===null&&e.write(`\r 0\r \r -`,`latin1`),t!==null&&r!==t){if(n[W])throw new o;process.emitWarning(new o)}e[x].timeout&&e[x].timeoutType===3&&e[x].timeout.refresh&&e[x].timeout.refresh(),n[q]()}}destroy(e){let{socket:t,client:r,abort:i}=this;t[A]=!1,e&&(n(r[C]<=1,`pipeline should only contain this request`),i(e))}};t.exports=we})),oe=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),{errorMonitor:r}=p(`node:events`),{pipeline:i}=p(`node:stream`),a=O(),{RequestContentLengthMismatchError:o,RequestAbortedError:s,SocketError:c,InformationalError:l}=T(),{kUrl:u,kReset:d,kClient:f,kRunning:m,kPending:h,kQueue:g,kPendingIdx:_,kRunningIdx:v,kError:y,kSocket:b,kStrictContentLength:x,kOnError:S,kMaxConcurrentStreams:C,kHTTP2Session:E,kResume:D,kSize:k,kHTTPContext:A}=w(),j=Symbol(`open streams`),M,N=!1,P;try{P=p(`node:http2`)}catch{P={constants:{}}}let{constants:{HTTP2_HEADER_AUTHORITY:F,HTTP2_HEADER_METHOD:I,HTTP2_HEADER_PATH:L,HTTP2_HEADER_SCHEME:ee,HTTP2_HEADER_CONTENT_LENGTH:te,HTTP2_HEADER_EXPECT:R,HTTP2_HEADER_STATUS:z}}=P;function B(e){let t=[];for(let[n,r]of Object.entries(e))if(Array.isArray(r))for(let e of r)t.push(Buffer.from(n),Buffer.from(e));else t.push(Buffer.from(n),Buffer.from(r));return t}function V(e){let{[z]:t,...n}=e;return B(n)}async function H(e,t){e[b]=t,N||(N=!0,process.emitWarning(`H2 support is experimental, expect them to change at any time.`,{code:`UNDICI-H2`}));let r=P.connect(e[u],{createConnection:()=>t,peerMaxConcurrentStreams:e[C]});r[j]=0,r[f]=e,r[b]=t,a.addListener(r,`error`,re),a.addListener(r,`frameError`,U),a.addListener(r,`end`,ae),a.addListener(r,`goaway`,oe),a.addListener(r,`close`,function(){let{[f]:e}=this,{[b]:t}=e,r=this[b][y]||this[y]||new c(`closed`,a.getSocketInfo(t));if(e[E]=null,e.destroyed){n(e[h]===0);let t=e[g].splice(e[v]);for(let n=0;n{i=!0}),{version:`h2`,defaultPipelining:1/0,write(...t){return G(e,...t)},resume(){ne(e)},destroy(e,n){i?queueMicrotask(n):t.destroy(e).on(`close`,n)},get destroyed(){return t.destroyed},busy(){return!1}}}function ne(e){let t=e[b];t?.destroyed===!1&&(e[k]===0&&e[C]===0?(t.unref(),e[E].unref()):(t.ref(),e[E].ref()))}function re(e){this[b][y]=e,this[f][S](e)}function U(e,t,n){if(n===0){let n=new l(`HTTP/2: "frameError" received - type ${e}, code ${t}`);this[b][y]=n,this[f][S](n)}}function ae(){let e=new c(`other side closed`,a.getSocketInfo(this[b]));this.destroy(e),a.destroy(this[b],e)}function oe(e){let t=this[y]||new c(`HTTP/2: "GOAWAY" frame received with code ${e}`,a.getSocketInfo(this)),r=this[f];if(r[b]=null,r[A]=null,this[E]!=null&&(this[E].destroy(t),this[E]=null),a.destroy(this[b],t),r[v]{t.aborted||(t.completed?c===`CONNECT`&&w!=null&&a.destroy(w,n||new s):(n||=new s,a.errorRequest(e,t,n),w!=null&&a.destroy(w,n),a.destroy(S,n),e[g][e[v]++]=null,e[D]()))};try{t.onConnect(k)}catch(n){a.errorRequest(e,t,n)}if(t.aborted)return!1;if(c===`CONNECT`){i.ref(),w=i.request(C,{endStream:!1,signal:h});let n=!1,a=e=>{n=!0,w.off(r,o),t.onUpgradeResponse(Number(e[z]),e,V)},o=e=>{n=!0,w.off(`response`,a),t.onUpgradeError(e)};return w.once(`response`,a),w.once(`error`,k),++i[j],(()=>{try{t.onUpgrade(null,null,w)}catch(e){w.off(`response`,a),k(e);return}t.aborted||(w.off(`error`,k),w.once(r,o),e[g][e[v]++]=null)})(),w.once(`close`,()=>{!n&&t.completed&&(w.off(`response`,a),w.off(r,o),t.onUpgradeError(new l(`HTTP/2: "stream error" received - code ${w.rstCode}`))),--i[j],i[j]===0&&i.unref()}),!0}C[L]=d,C[ee]=`https`;let A=c===`PUT`||c===`POST`||c===`PATCH`;S&&typeof S.read==`function`&&S.read(0);let N=a.bodyLength(S);if(a.isFormDataLike(S)){M??=ie().extractBody;let[e,t]=M(S);C[`content-type`]=t,S=e.stream,N=e.length}if(N??=t.contentLength,N!==0&&A||(N=null),W(c)&&N>0&&t.contentLength!=null&&t.contentLength!==N){if(e[x])return a.errorRequest(e,t,new o),!1;process.emitWarning(new o)}N!=null&&(n(S,`no body must not have content length`),C[te]=`${N}`),i.ref();let P=c===`GET`||c===`HEAD`||S===null;return m?(C[R]=`100-continue`,w=i.request(C,{endStream:P,signal:h}),w.once(`continue`,H)):(w=i.request(C,{endStream:P,signal:h}),H()),++i[j],w.once(`response`,n=>{let{[z]:r,...i}=n;if(t.onResponseStarted(),t.aborted){let n=new s;a.errorRequest(e,t,n),a.destroy(w,n)}else t.onHeaders(Number(r),B(i),w.resume.bind(w),``)===!1&&w.pause(),w.on(`data`,e=>{t.onData(e)===!1&&w.pause()})}),w.once(`end`,()=>{(w.state?.state==null||w.state.state<6)&&t.onComplete([]),i[j]===0&&i.unref(),k(new l(`HTTP/2: stream half-closed (remote)`)),e[g][e[v]++]=null,e[_]=e[v],e[D]()}),w.once(`close`,()=>{--i[j],i[j]===0&&i.unref()}),w.once(`error`,function(e){k(e)}),w.once(`frameError`,(e,t)=>{k(new l(`HTTP/2: "frameError" received - type ${e}, code ${t}`))}),!0;function H(){ +`,`latin1`),t!==null&&r!==t){if(n[W])throw new o;process.emitWarning(new o)}e[x].timeout&&e[x].timeoutType===3&&e[x].timeout.refresh&&e[x].timeout.refresh(),n[J]()}}destroy(e){let{socket:t,client:r,abort:i}=this;t[A]=!1,e&&(n(r[C]<=1,`pipeline should only contain this request`),i(e))}};t.exports=Ce})),oe=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),{errorMonitor:r}=p(`node:events`),{pipeline:i}=p(`node:stream`),a=O(),{RequestContentLengthMismatchError:o,RequestAbortedError:s,SocketError:c,InformationalError:l}=T(),{kUrl:u,kReset:d,kClient:f,kRunning:m,kPending:h,kQueue:g,kPendingIdx:_,kRunningIdx:v,kError:y,kSocket:b,kStrictContentLength:x,kOnError:S,kMaxConcurrentStreams:C,kHTTP2Session:E,kResume:D,kSize:k,kHTTPContext:A}=w(),j=Symbol(`open streams`),M,N=!1,P;try{P=p(`node:http2`)}catch{P={constants:{}}}let{constants:{HTTP2_HEADER_AUTHORITY:F,HTTP2_HEADER_METHOD:I,HTTP2_HEADER_PATH:L,HTTP2_HEADER_SCHEME:ee,HTTP2_HEADER_CONTENT_LENGTH:te,HTTP2_HEADER_EXPECT:R,HTTP2_HEADER_STATUS:z}}=P;function B(e){let t=[];for(let[n,r]of Object.entries(e))if(Array.isArray(r))for(let e of r)t.push(Buffer.from(n),Buffer.from(e));else t.push(Buffer.from(n),Buffer.from(r));return t}function V(e){let{[z]:t,...n}=e;return B(n)}async function H(e,t){e[b]=t,N||(N=!0,process.emitWarning(`H2 support is experimental, expect them to change at any time.`,{code:`UNDICI-H2`}));let r=P.connect(e[u],{createConnection:()=>t,peerMaxConcurrentStreams:e[C]});r[j]=0,r[f]=e,r[b]=t,a.addListener(r,`error`,re),a.addListener(r,`frameError`,U),a.addListener(r,`end`,ae),a.addListener(r,`goaway`,oe),a.addListener(r,`close`,function(){let{[f]:e}=this,{[b]:t}=e,r=this[b][y]||this[y]||new c(`closed`,a.getSocketInfo(t));if(e[E]=null,e.destroyed){n(e[h]===0);let t=e[g].splice(e[v]);for(let n=0;n{i=!0}),{version:`h2`,defaultPipelining:1/0,write(...t){return G(e,...t)},resume(){ne(e)},destroy(e,n){i?queueMicrotask(n):t.destroy(e).on(`close`,n)},get destroyed(){return t.destroyed},busy(){return!1}}}function ne(e){let t=e[b];t?.destroyed===!1&&(e[k]===0&&e[C]===0?(t.unref(),e[E].unref()):(t.ref(),e[E].ref()))}function re(e){this[b][y]=e,this[f][S](e)}function U(e,t,n){if(n===0){let n=new l(`HTTP/2: "frameError" received - type ${e}, code ${t}`);this[b][y]=n,this[f][S](n)}}function ae(){let e=new c(`other side closed`,a.getSocketInfo(this[b]));this.destroy(e),a.destroy(this[b],e)}function oe(e){let t=this[y]||new c(`HTTP/2: "GOAWAY" frame received with code ${e}`,a.getSocketInfo(this)),r=this[f];if(r[b]=null,r[A]=null,this[E]!=null&&(this[E].destroy(t),this[E]=null),a.destroy(this[b],t),r[v]{t.aborted||(t.completed?c===`CONNECT`&&w!=null&&a.destroy(w,n||new s):(n||=new s,a.errorRequest(e,t,n),w!=null&&a.destroy(w,n),a.destroy(S,n),e[g][e[v]++]=null,e[D]()))};try{t.onConnect(k)}catch(n){a.errorRequest(e,t,n)}if(t.aborted)return!1;if(c===`CONNECT`){i.ref(),w=i.request(C,{endStream:!1,signal:h});let n=!1,a=e=>{n=!0,w.off(r,o),t.onUpgradeResponse(Number(e[z]),e,V)},o=e=>{n=!0,w.off(`response`,a),t.onUpgradeError(e)};return w.once(`response`,a),w.once(`error`,k),++i[j],(()=>{try{t.onUpgrade(null,null,w)}catch(e){w.off(`response`,a),k(e);return}t.aborted||(w.off(`error`,k),w.once(r,o),e[g][e[v]++]=null)})(),w.once(`close`,()=>{!n&&t.completed&&(w.off(`response`,a),w.off(r,o),t.onUpgradeError(new l(`HTTP/2: "stream error" received - code ${w.rstCode}`))),--i[j],i[j]===0&&i.unref()}),!0}C[L]=d,C[ee]=`https`;let A=c===`PUT`||c===`POST`||c===`PATCH`;S&&typeof S.read==`function`&&S.read(0);let N=a.bodyLength(S);if(a.isFormDataLike(S)){M??=ie().extractBody;let[e,t]=M(S);C[`content-type`]=t,S=e.stream,N=e.length}if(N??=t.contentLength,N!==0&&A||(N=null),W(c)&&N>0&&t.contentLength!=null&&t.contentLength!==N){if(e[x])return a.errorRequest(e,t,new o),!1;process.emitWarning(new o)}N!=null&&(n(S,`no body must not have content length`),C[te]=`${N}`),i.ref();let P=c===`GET`||c===`HEAD`||S===null;return m?(C[R]=`100-continue`,w=i.request(C,{endStream:P,signal:h}),w.once(`continue`,H)):(w=i.request(C,{endStream:P,signal:h}),H()),++i[j],w.once(`response`,n=>{let{[z]:r,...i}=n;if(t.onResponseStarted(),t.aborted){let n=new s;a.errorRequest(e,t,n),a.destroy(w,n)}else t.onHeaders(Number(r),B(i),w.resume.bind(w),``)===!1&&w.pause(),w.on(`data`,e=>{t.onData(e)===!1&&w.pause()})}),w.once(`end`,()=>{(w.state?.state==null||w.state.state<6)&&t.onComplete([]),i[j]===0&&i.unref(),k(new l(`HTTP/2: stream half-closed (remote)`)),e[g][e[v]++]=null,e[_]=e[v],e[D]()}),w.once(`close`,()=>{--i[j],i[j]===0&&i.unref()}),w.once(`error`,function(e){k(e)}),w.once(`frameError`,(e,t)=>{k(new l(`HTTP/2: "frameError" received - type ${e}, code ${t}`))}),!0;function H(){ /* istanbul ignore else: assertion */ -!S||N===0?se(k,w,null,e,t,e[b],N,A):a.isBuffer(S)?se(k,w,S,e,t,e[b],N,A):a.isBlobLike(S)?typeof S.stream==`function`?q(k,w,S.stream(),e,t,e[b],N,A):ce(k,w,S,e,t,e[b],N,A):a.isStream(S)?K(k,e[b],A,w,S,e,t,N):a.isIterable(S)?q(k,w,S,e,t,e[b],N,A):n(!1)}}function se(e,t,r,i,o,s,c,l){try{r!=null&&a.isBuffer(r)&&(n(c===r.byteLength,`buffer body must have content length`),t.cork(),t.write(r),t.uncork(),t.end(),o.onBodySent(r)),l||(s[d]=!0),o.onRequestSent(),i[D]()}catch(t){e(t)}}function K(e,t,r,o,s,c,l,u){n(u!==0||c[m]===0,`stream body cannot be pipelined`);let f=i(s,o,n=>{n?(a.destroy(f,n),e(n)):(a.removeAllListeners(f),l.onRequestSent(),r||(t[d]=!0),c[D]())});a.addListener(f,`data`,p);function p(e){l.onBodySent(e)}}async function ce(e,t,r,i,a,s,c,l){n(c===r.size,`blob body must have content length`);try{if(c!=null&&c!==r.size)throw new o;let e=Buffer.from(await r.arrayBuffer());t.cork(),t.write(e),t.uncork(),t.end(),a.onBodySent(e),a.onRequestSent(),l||(s[d]=!0),i[D]()}catch(t){e(t)}}async function q(e,t,r,i,a,o,s,c){n(s!==0||i[m]===0,`iterator body cannot be pipelined`);let l=null;function u(){if(l){let e=l;l=null,e()}}let f=()=>new Promise((e,t)=>{n(l===null),o[y]?t(o[y]):l=e});t.on(`close`,u).on(`drain`,u);try{for await(let e of r){if(o[y])throw o[y];let n=t.write(e);a.onBodySent(e),n||await f()}t.end(),a.onRequestSent(),c||(o[d]=!0),i[D]()}catch(t){e(t)}finally{t.off(`close`,u).off(`drain`,u)}}t.exports=H})),W=/* @__PURE__ */ f(((e,t)=>{let n=O(),{kBodyUsed:r}=w(),i=p(`node:assert`),{InvalidArgumentError:a}=T(),o=p(`node:events`),s=[300,301,302,303,307,308],c=Symbol(`body`);var l=class{constructor(e){this[c]=e,this[r]=!1}async*[Symbol.asyncIterator](){i(!this[r],`disturbed`),this[r]=!0,yield*this[c]}},u=class{constructor(e,t,s,c){if(t!=null&&(!Number.isInteger(t)||t<0))throw new a(`maxRedirections must be a positive number`);n.validateHandler(c,s.method,s.upgrade),this.dispatch=e,this.location=null,this.abort=null,this.opts={...s,maxRedirections:0},this.maxRedirections=t,this.handler=c,this.history=[],this.redirectionLimitReached=!1,n.isStream(this.opts.body)?(n.bodyLength(this.opts.body)===0&&this.opts.body.on(`data`,function(){i(!1)}),typeof this.opts.body.readableDidRead!=`boolean`&&(this.opts.body[r]=!1,o.prototype.on.call(this.opts.body,`data`,function(){this[r]=!0}))):(this.opts.body&&typeof this.opts.body.pipeTo==`function`||this.opts.body&&typeof this.opts.body!=`string`&&!ArrayBuffer.isView(this.opts.body)&&n.isIterable(this.opts.body))&&(this.opts.body=new l(this.opts.body))}onConnect(e){this.abort=e,this.handler.onConnect(e,{history:this.history})}onUpgrade(e,t,n){this.handler.onUpgrade(e,t,n)}onError(e){this.handler.onError(e)}onHeaders(e,t,r,i){if(this.location=this.history.length>=this.maxRedirections||n.isDisturbed(this.opts.body)?null:d(e,t),this.opts.throwOnMaxRedirect&&this.history.length>=this.maxRedirections){this.request&&this.request.abort(/* @__PURE__ */ Error(`max redirects`)),this.redirectionLimitReached=!0,this.abort(/* @__PURE__ */ Error(`max redirects`));return}if(this.opts.origin&&this.history.push(new URL(this.opts.path,this.opts.origin)),!this.location)return this.handler.onHeaders(e,t,r,i);let{origin:a,pathname:o,search:s}=n.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),c=s?`${o}${s}`:o;this.opts.headers=m(this.opts.headers,e===303,this.opts.origin!==a),this.opts.path=c,this.opts.origin=a,this.opts.maxRedirections=0,this.opts.query=null,e===303&&this.opts.method!==`HEAD`&&(this.opts.method=`GET`,this.opts.body=null)}onData(e){if(!this.location)return this.handler.onData(e)}onComplete(e){this.location?(this.location=null,this.abort=null,this.dispatch(this.opts,this)):this.handler.onComplete(e)}onBodySent(e){this.handler.onBodySent&&this.handler.onBodySent(e)}};function d(e,t){if(s.indexOf(e)===-1)return null;for(let e=0;e{let n=W();function r({maxRedirections:e}){return t=>function(r,i){let{maxRedirections:a=e}=r;if(!a)return t(r,i);let o=new n(t,a,r,i);return r={...r,maxRedirections:0},t(r,o)}}t.exports=r})),se=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),r=p(`node:net`),i=p(`node:http`),a=O(),{channels:o}=k(),s=A(),c=M(),{InvalidArgumentError:l,InformationalError:u,ClientDestroyedError:d}=T(),f=P(),{kUrl:m,kServerName:h,kClient:g,kBusy:_,kConnect:v,kResuming:y,kRunning:b,kPending:x,kSize:S,kQueue:C,kConnected:E,kConnecting:D,kNeedDrain:j,kKeepAliveDefaultTimeout:N,kHostHeader:F,kPendingIdx:I,kRunningIdx:L,kError:ee,kPipelining:te,kKeepAliveTimeoutValue:R,kMaxHeadersSize:z,kKeepAliveMaxTimeout:B,kKeepAliveTimeoutThreshold:V,kHeadersTimeout:H,kBodyTimeout:ne,kStrictContentLength:re,kConnector:U,kMaxRedirections:ie,kMaxRequests:W,kCounter:se,kClose:K,kDestroy:ce,kDispatch:q,kInterceptors:le,kLocalAddress:J,kMaxResponseSize:ue,kOnError:de,kHTTPContext:Y,kMaxConcurrentStreams:fe,kResume:pe}=w(),me=ae(),he=oe(),ge=!1,_e=Symbol(`kClosedResolve`),ve=()=>{};function ye(e){return e[te]??e[Y]?.defaultPipelining??1}var X=class extends c{constructor(e,{interceptors:t,maxHeaderSize:n,headersTimeout:o,socketTimeout:s,requestTimeout:c,connectTimeout:u,bodyTimeout:d,idleTimeout:p,keepAlive:g,keepAliveTimeout:_,maxKeepAliveTimeout:v,keepAliveMaxTimeout:b,keepAliveTimeoutThreshold:x,socketPath:S,pipelining:w,tls:T,strictContentLength:E,maxCachedSessions:D,maxRedirections:O,connect:k,maxRequestsPerClient:A,localAddress:M,maxResponseSize:P,autoSelectFamily:ee,autoSelectFamilyAttemptTimeout:ae,maxConcurrentStreams:oe,allowH2:G,webSocket:se,eventSource:K}={}){if(super({webSocket:se,eventSource:K}),g!==void 0)throw new l(`unsupported keepAlive, use pipelining=0 instead`);if(s!==void 0)throw new l(`unsupported socketTimeout, use headersTimeout & bodyTimeout instead`);if(c!==void 0)throw new l(`unsupported requestTimeout, use headersTimeout & bodyTimeout instead`);if(p!==void 0)throw new l(`unsupported idleTimeout, use keepAliveTimeout instead`);if(v!==void 0)throw new l(`unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead`);if(n!=null&&!Number.isFinite(n))throw new l(`invalid maxHeaderSize`);if(S!=null&&typeof S!=`string`)throw new l(`invalid socketPath`);if(u!=null&&(!Number.isFinite(u)||u<0))throw new l(`invalid connectTimeout`);if(_!=null&&(!Number.isFinite(_)||_<=0))throw new l(`invalid keepAliveTimeout`);if(b!=null&&(!Number.isFinite(b)||b<=0))throw new l(`invalid keepAliveMaxTimeout`);if(x!=null&&!Number.isFinite(x))throw new l(`invalid keepAliveTimeoutThreshold`);if(o!=null&&(!Number.isInteger(o)||o<0))throw new l(`headersTimeout must be a positive integer or zero`);if(d!=null&&(!Number.isInteger(d)||d<0))throw new l(`bodyTimeout must be a positive integer or zero`);if(k!=null&&typeof k!=`function`&&typeof k!=`object`)throw new l(`connect must be a function or an object`);if(O!=null&&(!Number.isInteger(O)||O<0))throw new l(`maxRedirections must be a positive number`);if(A!=null&&(!Number.isInteger(A)||A<0))throw new l(`maxRequestsPerClient must be a positive number`);if(M!=null&&(typeof M!=`string`||r.isIP(M)===0))throw new l(`localAddress must be valid string IP address`);if(P!=null&&(!Number.isInteger(P)||P<-1))throw new l(`maxResponseSize must be a positive number`);if(ae!=null&&(!Number.isInteger(ae)||ae<-1))throw new l(`autoSelectFamilyAttemptTimeout must be a positive number`);if(G!=null&&typeof G!=`boolean`)throw new l(`allowH2 must be a valid boolean value`);if(oe!=null&&(typeof oe!=`number`||oe<1))throw new l(`maxConcurrentStreams must be a positive integer, greater than 0`);typeof k!=`function`&&(k=f({...T,maxCachedSessions:D,allowH2:G,socketPath:S,timeout:u,...ee?{autoSelectFamily:ee,autoSelectFamilyAttemptTimeout:ae}:void 0,...k})),t?.Client&&Array.isArray(t.Client)?(this[le]=t.Client,ge||(ge=!0,process.emitWarning(`Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.`,{code:`UNDICI-CLIENT-INTERCEPTOR-DEPRECATED`}))):this[le]=[be({maxRedirections:O})],this[m]=a.parseOrigin(e),this[U]=k,this[te]=w??1,this[z]=n||i.maxHeaderSize,this[N]=_??4e3,this[B]=b??6e5,this[V]=x??2e3,this[R]=this[N],this[h]=null,this[J]=M??null,this[y]=0,this[j]=0,this[F]=`host: ${this[m].hostname}${this[m].port?`:${this[m].port}`:``}\r\n`,this[ne]=d??3e5,this[H]=o??3e5,this[re]=E??!0,this[ie]=O,this[W]=A,this[_e]=null,this[ue]=P>-1?P:-1,this[fe]=oe??100,this[Y]=null,this[C]=[],this[L]=0,this[I]=0,this[pe]=e=>Ce(this,e),this[de]=e=>xe(this,e)}get pipelining(){return this[te]}set pipelining(e){this[te]=e,this[pe](!0)}get[x](){return this[C].length-this[I]}get[b](){return this[I]-this[L]}get[S](){return this[C].length-this[L]}get[E](){return!!this[Y]&&!this[D]&&!this[Y].destroyed}get[_](){return!!(this[Y]?.busy(null)||this[S]>=(ye(this)||1)||this[x]>0)} +!S||N===0?K(k,w,null,e,t,e[b],N,A):a.isBuffer(S)?K(k,w,S,e,t,e[b],N,A):a.isBlobLike(S)?typeof S.stream==`function`?J(k,w,S.stream(),e,t,e[b],N,A):se(k,w,S,e,t,e[b],N,A):a.isStream(S)?q(k,e[b],A,w,S,e,t,N):a.isIterable(S)?J(k,w,S,e,t,e[b],N,A):n(!1)}}function K(e,t,r,i,o,s,c,l){try{r!=null&&a.isBuffer(r)&&(n(c===r.byteLength,`buffer body must have content length`),t.cork(),t.write(r),t.uncork(),t.end(),o.onBodySent(r)),l||(s[d]=!0),o.onRequestSent(),i[D]()}catch(t){e(t)}}function q(e,t,r,o,s,c,l,u){n(u!==0||c[m]===0,`stream body cannot be pipelined`);let f=i(s,o,n=>{n?(a.destroy(f,n),e(n)):(a.removeAllListeners(f),l.onRequestSent(),r||(t[d]=!0),c[D]())});a.addListener(f,`data`,p);function p(e){l.onBodySent(e)}}async function se(e,t,r,i,a,s,c,l){n(c===r.size,`blob body must have content length`);try{if(c!=null&&c!==r.size)throw new o;let e=Buffer.from(await r.arrayBuffer());t.cork(),t.write(e),t.uncork(),t.end(),a.onBodySent(e),a.onRequestSent(),l||(s[d]=!0),i[D]()}catch(t){e(t)}}async function J(e,t,r,i,a,o,s,c){n(s!==0||i[m]===0,`iterator body cannot be pipelined`);let l=null;function u(){if(l){let e=l;l=null,e()}}let f=()=>new Promise((e,t)=>{n(l===null),o[y]?t(o[y]):l=e});t.on(`close`,u).on(`drain`,u);try{for await(let e of r){if(o[y])throw o[y];let n=t.write(e);a.onBodySent(e),n||await f()}t.end(),a.onRequestSent(),c||(o[d]=!0),i[D]()}catch(t){e(t)}finally{t.off(`close`,u).off(`drain`,u)}}t.exports=H})),W=/* @__PURE__ */ f(((e,t)=>{let n=O(),{kBodyUsed:r}=w(),i=p(`node:assert`),{InvalidArgumentError:a}=T(),o=p(`node:events`),s=[300,301,302,303,307,308],c=Symbol(`body`);var l=class{constructor(e){this[c]=e,this[r]=!1}async*[Symbol.asyncIterator](){i(!this[r],`disturbed`),this[r]=!0,yield*this[c]}},u=class{constructor(e,t,s,c){if(t!=null&&(!Number.isInteger(t)||t<0))throw new a(`maxRedirections must be a positive number`);n.validateHandler(c,s.method,s.upgrade),this.dispatch=e,this.location=null,this.abort=null,this.opts={...s,maxRedirections:0},this.maxRedirections=t,this.handler=c,this.history=[],this.redirectionLimitReached=!1,n.isStream(this.opts.body)?(n.bodyLength(this.opts.body)===0&&this.opts.body.on(`data`,function(){i(!1)}),typeof this.opts.body.readableDidRead!=`boolean`&&(this.opts.body[r]=!1,o.prototype.on.call(this.opts.body,`data`,function(){this[r]=!0}))):(this.opts.body&&typeof this.opts.body.pipeTo==`function`||this.opts.body&&typeof this.opts.body!=`string`&&!ArrayBuffer.isView(this.opts.body)&&n.isIterable(this.opts.body))&&(this.opts.body=new l(this.opts.body))}onConnect(e){this.abort=e,this.handler.onConnect(e,{history:this.history})}onUpgrade(e,t,n){this.handler.onUpgrade(e,t,n)}onError(e){this.handler.onError(e)}onHeaders(e,t,r,i){if(this.location=this.history.length>=this.maxRedirections||n.isDisturbed(this.opts.body)?null:d(e,t),this.opts.throwOnMaxRedirect&&this.history.length>=this.maxRedirections){this.request&&this.request.abort(/* @__PURE__ */ Error(`max redirects`)),this.redirectionLimitReached=!0,this.abort(/* @__PURE__ */ Error(`max redirects`));return}if(this.opts.origin&&this.history.push(new URL(this.opts.path,this.opts.origin)),!this.location)return this.handler.onHeaders(e,t,r,i);let{origin:a,pathname:o,search:s}=n.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin))),c=s?`${o}${s}`:o;this.opts.headers=m(this.opts.headers,e===303,this.opts.origin!==a),this.opts.path=c,this.opts.origin=a,this.opts.maxRedirections=0,this.opts.query=null,e===303&&this.opts.method!==`HEAD`&&(this.opts.method=`GET`,this.opts.body=null)}onData(e){if(!this.location)return this.handler.onData(e)}onComplete(e){this.location?(this.location=null,this.abort=null,this.dispatch(this.opts,this)):this.handler.onComplete(e)}onBodySent(e){this.handler.onBodySent&&this.handler.onBodySent(e)}};function d(e,t){if(s.indexOf(e)===-1)return null;for(let e=0;e{let n=W();function r({maxRedirections:e}){return t=>function(r,i){let{maxRedirections:a=e}=r;if(!a)return t(r,i);let o=new n(t,a,r,i);return r={...r,maxRedirections:0},t(r,o)}}t.exports=r})),K=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),r=p(`node:net`),i=p(`node:http`),a=O(),{channels:o}=k(),s=A(),c=M(),{InvalidArgumentError:l,InformationalError:u,ClientDestroyedError:d}=T(),f=P(),{kUrl:m,kServerName:h,kClient:g,kBusy:_,kConnect:v,kResuming:y,kRunning:b,kPending:x,kSize:S,kQueue:C,kConnected:E,kConnecting:D,kNeedDrain:j,kKeepAliveDefaultTimeout:N,kHostHeader:F,kPendingIdx:I,kRunningIdx:L,kError:ee,kPipelining:te,kKeepAliveTimeoutValue:R,kMaxHeadersSize:z,kKeepAliveMaxTimeout:B,kKeepAliveTimeoutThreshold:V,kHeadersTimeout:H,kBodyTimeout:ne,kStrictContentLength:re,kConnector:U,kMaxRedirections:ie,kMaxRequests:W,kCounter:K,kClose:q,kDestroy:se,kDispatch:J,kInterceptors:ce,kLocalAddress:Y,kMaxResponseSize:le,kOnError:ue,kHTTPContext:X,kMaxConcurrentStreams:de,kResume:fe}=w(),pe=ae(),me=oe(),he=!1,ge=Symbol(`kClosedResolve`),_e=()=>{};function ve(e){return e[te]??e[X]?.defaultPipelining??1}var Z=class extends c{constructor(e,{interceptors:t,maxHeaderSize:n,headersTimeout:o,socketTimeout:s,requestTimeout:c,connectTimeout:u,bodyTimeout:d,idleTimeout:p,keepAlive:g,keepAliveTimeout:_,maxKeepAliveTimeout:v,keepAliveMaxTimeout:b,keepAliveTimeoutThreshold:x,socketPath:S,pipelining:w,tls:T,strictContentLength:E,maxCachedSessions:D,maxRedirections:O,connect:k,maxRequestsPerClient:A,localAddress:M,maxResponseSize:P,autoSelectFamily:ee,autoSelectFamilyAttemptTimeout:ae,maxConcurrentStreams:oe,allowH2:G,webSocket:K,eventSource:q}={}){if(super({webSocket:K,eventSource:q}),g!==void 0)throw new l(`unsupported keepAlive, use pipelining=0 instead`);if(s!==void 0)throw new l(`unsupported socketTimeout, use headersTimeout & bodyTimeout instead`);if(c!==void 0)throw new l(`unsupported requestTimeout, use headersTimeout & bodyTimeout instead`);if(p!==void 0)throw new l(`unsupported idleTimeout, use keepAliveTimeout instead`);if(v!==void 0)throw new l(`unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead`);if(n!=null&&!Number.isFinite(n))throw new l(`invalid maxHeaderSize`);if(S!=null&&typeof S!=`string`)throw new l(`invalid socketPath`);if(u!=null&&(!Number.isFinite(u)||u<0))throw new l(`invalid connectTimeout`);if(_!=null&&(!Number.isFinite(_)||_<=0))throw new l(`invalid keepAliveTimeout`);if(b!=null&&(!Number.isFinite(b)||b<=0))throw new l(`invalid keepAliveMaxTimeout`);if(x!=null&&!Number.isFinite(x))throw new l(`invalid keepAliveTimeoutThreshold`);if(o!=null&&(!Number.isInteger(o)||o<0))throw new l(`headersTimeout must be a positive integer or zero`);if(d!=null&&(!Number.isInteger(d)||d<0))throw new l(`bodyTimeout must be a positive integer or zero`);if(k!=null&&typeof k!=`function`&&typeof k!=`object`)throw new l(`connect must be a function or an object`);if(O!=null&&(!Number.isInteger(O)||O<0))throw new l(`maxRedirections must be a positive number`);if(A!=null&&(!Number.isInteger(A)||A<0))throw new l(`maxRequestsPerClient must be a positive number`);if(M!=null&&(typeof M!=`string`||r.isIP(M)===0))throw new l(`localAddress must be valid string IP address`);if(P!=null&&(!Number.isInteger(P)||P<-1))throw new l(`maxResponseSize must be a positive number`);if(ae!=null&&(!Number.isInteger(ae)||ae<-1))throw new l(`autoSelectFamilyAttemptTimeout must be a positive number`);if(G!=null&&typeof G!=`boolean`)throw new l(`allowH2 must be a valid boolean value`);if(oe!=null&&(typeof oe!=`number`||oe<1))throw new l(`maxConcurrentStreams must be a positive integer, greater than 0`);typeof k!=`function`&&(k=f({...T,maxCachedSessions:D,allowH2:G,socketPath:S,timeout:u,...ee?{autoSelectFamily:ee,autoSelectFamilyAttemptTimeout:ae}:void 0,...k})),t?.Client&&Array.isArray(t.Client)?(this[ce]=t.Client,he||(he=!0,process.emitWarning(`Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.`,{code:`UNDICI-CLIENT-INTERCEPTOR-DEPRECATED`}))):this[ce]=[ye({maxRedirections:O})],this[m]=a.parseOrigin(e),this[U]=k,this[te]=w??1,this[z]=n||i.maxHeaderSize,this[N]=_??4e3,this[B]=b??6e5,this[V]=x??2e3,this[R]=this[N],this[h]=null,this[Y]=M??null,this[y]=0,this[j]=0,this[F]=`host: ${this[m].hostname}${this[m].port?`:${this[m].port}`:``}\r\n`,this[ne]=d??3e5,this[H]=o??3e5,this[re]=E??!0,this[ie]=O,this[W]=A,this[ge]=null,this[le]=P>-1?P:-1,this[de]=oe??100,this[X]=null,this[C]=[],this[L]=0,this[I]=0,this[fe]=e=>Se(this,e),this[ue]=e=>be(this,e)}get pipelining(){return this[te]}set pipelining(e){this[te]=e,this[fe](!0)}get[x](){return this[C].length-this[I]}get[b](){return this[I]-this[L]}get[S](){return this[C].length-this[L]}get[E](){return!!this[X]&&!this[D]&&!this[X].destroyed}get[_](){return!!(this[X]?.busy(null)||this[S]>=(ve(this)||1)||this[x]>0)} /* istanbul ignore: only used for test */ -[v](e){Z(this),this.once(`connect`,e)}[q](e,t){let n=e.origin||this[m].origin,r=new s(n,e,t);return this[C].push(r),this[y]||(a.bodyLength(r.body)==null&&a.isIterable(r.body)?(this[y]=1,queueMicrotask(()=>Ce(this))):this[pe](!0)),this[y]&&this[j]!==2&&this[_]&&(this[j]=2),this[j]<2}async[K](){return new Promise(e=>{this[S]?this[_e]=e:e(null)})}async[ce](e){return new Promise(t=>{let n=this[C].splice(this[I]);for(let t=0;t{this[_e]&&(this[_e](),this[_e]=null),t(null)};this[Y]?(this[Y].destroy(e,r),this[Y]=null):queueMicrotask(r),this[pe]()})}};let be=G();function xe(e,t){if(e[b]===0&&t.code!==`UND_ERR_INFO`&&t.code!==`UND_ERR_SOCKET`){n(e[I]===e[L]);let r=e[C].splice(e[L]);for(let n=0;n{e[U]({host:t,hostname:i,protocol:s,port:c,servername:e[h],localAddress:e[J]},(e,t)=>{e?r(e):n(t)})});if(e.destroyed){a.destroy(r.on(`error`,ve),new d);return}n(r);try{e[Y]=r.alpnProtocol===`h2`?await he(e,r):await me(e,r)}catch(e){throw r.destroy().on(`error`,ve),e}e[D]=!1,r[se]=0,r[W]=e[W],r[g]=e,r[ee]=null,o.connected.hasSubscribers&&o.connected.publish({connectParams:{host:t,hostname:i,protocol:s,port:c,version:e[Y]?.version,servername:e[h],localAddress:e[J]},connector:e[U],socket:r}),e.emit(`connect`,e[m],[e])}catch(r){if(e.destroyed)return;if(e[D]=!1,o.connectError.hasSubscribers&&o.connectError.publish({connectParams:{host:t,hostname:i,protocol:s,port:c,version:e[Y]?.version,servername:e[h],localAddress:e[J]},connector:e[U],error:r}),r.code===`ERR_TLS_CERT_ALTNAME_INVALID`)for(n(e[b]===0);e[x]>0&&e[C][e[I]].servername===e[h];){let t=e[C][e[I]++];a.errorRequest(e,t,r)}else xe(e,r);e.emit(`connectionError`,e[m],[e],r)}e[pe]()}function Se(e){e[j]=0,e.emit(`drain`,e[m],[e])}function Ce(e,t){e[y]!==2&&(e[y]=2,we(e,t),e[y]=0,e[L]>256&&(e[C].splice(0,e[L]),e[I]-=e[L],e[L]=0))}function we(e,t){for(;;){if(e.destroyed){n(e[x]===0);return}if(e[_e]&&!e[S]){e[_e](),e[_e]=null;return}if(e[Y]&&e[Y].resume(),e[_])e[j]=2;else if(e[j]===2){t?(e[j]=1,queueMicrotask(()=>Se(e))):Se(e);continue}if(e[x]===0||e[b]>=(ye(e)||1))return;let r=e[C][e[I]];if(e[m].protocol===`https:`&&e[h]!==r.servername){if(e[b]>0)return;e[h]=r.servername,e[Y]?.destroy(new u(`servername changed`),()=>{e[Y]=null,Ce(e)})}if(e[D])return;if(!e[Y]){Z(e);return}if(e[Y].destroyed||e[Y].busy(r))return;!r.aborted&&e[Y].write(r)?e[I]++:e[C].splice(e[I],1)}}t.exports=X})),K=/* @__PURE__ */ f(((e,t)=>{let n=2047;var r=class{constructor(){this.bottom=0,this.top=0,this.list=Array(2048),this.next=null}isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&n)===this.bottom}push(e){this.list[this.top]=e,this.top=this.top+1&n}shift(){let e=this.list[this.bottom];return e===void 0?null:(this.list[this.bottom]=void 0,this.bottom=this.bottom+1&n,e)}};t.exports=class{constructor(){this.head=this.tail=new r}isEmpty(){return this.head.isEmpty()}push(e){this.head.isFull()&&(this.head=this.head.next=new r),this.head.push(e)}shift(){let e=this.tail,t=e.shift();return e.isEmpty()&&e.next!==null&&(this.tail=e.next),t}}})),ce=/* @__PURE__ */ f(((e,t)=>{let{kFree:n,kConnected:r,kPending:i,kQueued:a,kRunning:o,kSize:s}=w(),c=Symbol(`pool`);t.exports=class{constructor(e){this[c]=e}get connected(){return this[c][r]}get free(){return this[c][n]}get pending(){return this[c][i]}get queued(){return this[c][a]}get running(){return this[c][o]}get size(){return this[c][s]}}})),q=/* @__PURE__ */ f(((e,t)=>{let n=M(),r=K(),{kConnected:i,kSize:a,kRunning:o,kPending:s,kQueued:c,kBusy:l,kFree:u,kUrl:d,kClose:f,kDestroy:p,kDispatch:m}=w(),h=ce(),g=Symbol(`clients`),_=Symbol(`needDrain`),v=Symbol(`queue`),y=Symbol(`closed resolve`),b=Symbol(`onDrain`),x=Symbol(`onConnect`),S=Symbol(`onDisconnect`),C=Symbol(`onConnectionError`),T=Symbol(`get dispatcher`),E=Symbol(`add client`),D=Symbol(`remove client`),O=Symbol(`stats`);t.exports={PoolBase:class extends n{constructor(e){super(e),this[v]=new r,this[g]=[],this[c]=0;let t=this;this[b]=function(e,n){let r=t[v],i=!1;for(;!i;){let e=r.shift();if(!e)break;t[c]--,i=!this.dispatch(e.opts,e.handler)}this[_]=i,!this[_]&&t[_]&&(t[_]=!1,t.emit(`drain`,e,[t,...n])),t[y]&&r.isEmpty()&&Promise.all(t[g].map(e=>e.close())).then(t[y])},this[x]=(e,n)=>{t.emit(`connect`,e,[t,...n])},this[S]=(e,n,r)=>{t.emit(`disconnect`,e,[t,...n],r)},this[C]=(e,n,r)=>{t.emit(`connectionError`,e,[t,...n],r)},this[O]=new h(this)}get[l](){return this[_]}get[i](){return this[g].filter(e=>e[i]).length}get[u](){return this[g].filter(e=>e[i]&&!e[_]).length}get[s](){let e=this[c];for(let{[s]:t}of this[g])e+=t;return e}get[o](){let e=0;for(let{[o]:t}of this[g])e+=t;return e}get[a](){let e=this[c];for(let{[a]:t}of this[g])e+=t;return e}get stats(){return this[O]}async[f](){this[v].isEmpty()?await Promise.all(this[g].map(e=>e.close())):await new Promise(e=>{this[y]=e})}async[p](e){for(;;){let t=this[v].shift();if(!t)break;t.handler.onError(e)}await Promise.all(this[g].map(t=>t.destroy(e)))}[m](e,t){let n=this[T]();return n?n.dispatch(e,t)||(n[_]=!0,this[_]=!this[T]()):(this[_]=!0,this[v].push({opts:e,handler:t}),this[c]++),!this[_]}[E](e){return e.on(`drain`,this[b]).on(`connect`,this[x]).on(`disconnect`,this[S]).on(`connectionError`,this[C]),this[g].push(e),this[_]&&queueMicrotask(()=>{this[_]&&this[b](e[d],[this,e])}),this}[D](e){e.close(()=>{let t=this[g].indexOf(e);t!==-1&&this[g].splice(t,1)}),this[_]=this[g].some(e=>!e[_]&&e.closed!==!0&&e.destroyed!==!0)}},kClients:g,kNeedDrain:_,kAddClient:E,kRemoveClient:D,kGetDispatcher:T}})),le=/* @__PURE__ */ f(((e,t)=>{let{PoolBase:n,kClients:r,kNeedDrain:i,kAddClient:a,kGetDispatcher:o}=q(),s=se(),{InvalidArgumentError:c}=T(),l=O(),{kUrl:u,kInterceptors:d}=w(),f=P(),p=Symbol(`options`),m=Symbol(`connections`),h=Symbol(`factory`);function g(e,t){return new s(e,t)}t.exports=class extends n{constructor(e,{connections:t,factory:n=g,connect:i,connectTimeout:a,tls:o,maxCachedSessions:s,socketPath:_,autoSelectFamily:v,autoSelectFamilyAttemptTimeout:y,allowH2:b,...x}={}){if(t!=null&&(!Number.isFinite(t)||t<0))throw new c(`invalid connections`);if(typeof n!=`function`)throw new c(`factory must be a function.`);if(i!=null&&typeof i!=`function`&&typeof i!=`object`)throw new c(`connect must be a function or an object`);typeof i!=`function`&&(i=f({...o,maxCachedSessions:s,allowH2:b,socketPath:_,timeout:a,...v?{autoSelectFamily:v,autoSelectFamilyAttemptTimeout:y}:void 0,...i})),super(x),this[d]=x.interceptors?.Pool&&Array.isArray(x.interceptors.Pool)?x.interceptors.Pool:[],this[m]=t||null,this[u]=l.parseOrigin(e),this[p]={...l.deepClone(x),connect:i,allowH2:b},this[p].interceptors=x.interceptors?{...x.interceptors}:void 0,this[h]=n,this.on(`connectionError`,(e,t,n)=>{for(let e of t){let t=this[r].indexOf(e);t!==-1&&this[r].splice(t,1)}})}[o](){for(let e of this[r])if(!e[i])return e;if(!this[m]||this[r].length{let{BalancedPoolMissingUpstreamError:n,InvalidArgumentError:r}=T(),{PoolBase:i,kClients:a,kNeedDrain:o,kAddClient:s,kRemoveClient:c,kGetDispatcher:l}=q(),u=le(),{kUrl:d,kInterceptors:f}=w(),{parseOrigin:p}=O(),m=Symbol(`factory`),h=Symbol(`options`),g=Symbol(`kGreatestCommonDivisor`),_=Symbol(`kCurrentWeight`),v=Symbol(`kIndex`),y=Symbol(`kWeight`),b=Symbol(`kMaxWeightPerServer`),x=Symbol(`kErrorPenalty`);function S(e,t){if(e===0)return t;for(;t!==0;){let n=t;t=e%t,e=n}return e}function C(e,t){return new u(e,t)}t.exports=class extends i{constructor(e=[],{factory:t=C,...n}={}){if(super(),this[h]=n,this[v]=-1,this[_]=0,this[b]=this[h].maxWeightPerServer||100,this[x]=this[h].errorPenalty||15,Array.isArray(e)||(e=[e]),typeof t!=`function`)throw new r(`factory must be a function.`);this[f]=n.interceptors?.BalancedPool&&Array.isArray(n.interceptors.BalancedPool)?n.interceptors.BalancedPool:[],this[m]=t;for(let t of e)this.addUpstream(t);this._updateBalancedPoolStats()}addUpstream(e){let t=p(e).origin;if(this[a].find(e=>e[d].origin===t&&e.closed!==!0&&e.destroyed!==!0))return this;let n=this[m](t,Object.assign({},this[h]));this[s](n),n.on(`connect`,()=>{n[y]=Math.min(this[b],n[y]+this[x])}),n.on(`connectionError`,()=>{n[y]=Math.max(1,n[y]-this[x]),this._updateBalancedPoolStats()}),n.on(`disconnect`,(...e)=>{let t=e[2];t&&t.code===`UND_ERR_SOCKET`&&(n[y]=Math.max(1,n[y]-this[x]),this._updateBalancedPoolStats())});for(let e of this[a])e[y]=this[b];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){let e=0;for(let t=0;te[d].origin===t&&e.closed!==!0&&e.destroyed!==!0);return n&&this[c](n),this}get upstreams(){return this[a].filter(e=>e.closed!==!0&&e.destroyed!==!0).map(e=>e[d].origin)}[l](){if(this[a].length===0)throw new n;if(!this[a].find(e=>!e[o]&&e.closed!==!0&&e.destroyed!==!0)||this[a].map(e=>e[o]).reduce((e,t)=>e&&t,!0))return;let e=0,t=this[a].findIndex(e=>!e[o]);for(;e++this[a][t][y]&&!e[o]&&(t=this[v]),this[v]===0&&(this[_]=this[_]-this[g],this[_]<=0&&(this[_]=this[b])),e[y]>=this[_]&&!e[o])return e}return this[_]=this[a][t][y],this[v]=t,this[a][t]}}})),ue=/* @__PURE__ */ f(((e,t)=>{let{InvalidArgumentError:n}=T(),{kClients:r,kRunning:i,kClose:a,kDestroy:o,kDispatch:s,kInterceptors:c}=w(),l=M(),u=le(),d=se(),f=O(),p=G(),m=Symbol(`onConnect`),h=Symbol(`onDisconnect`),g=Symbol(`onConnectionError`),_=Symbol(`maxRedirections`),v=Symbol(`onDrain`),y=Symbol(`factory`),b=Symbol(`options`);function x(e,t){return t&&t.connections===1?new d(e,t):new u(e,t)}t.exports=class extends l{constructor({factory:e=x,maxRedirections:t=0,connect:i,tls:a,...o}={}){if(typeof e!=`function`)throw new n(`factory must be a function.`);if(i!=null&&typeof i!=`function`&&typeof i!=`object`)throw new n(`connect must be a function or an object`);if(!Number.isInteger(t)||t<0)throw new n(`maxRedirections must be a positive number`);super(o),i&&typeof i!=`function`&&(i={...i}),a&&typeof a!=`function`&&(a={...a}),this[c]=o.interceptors?.Agent&&Array.isArray(o.interceptors.Agent)?o.interceptors.Agent:[p({maxRedirections:t})],this[b]={...f.deepClone(o),connect:i,tls:a},this[b].interceptors=o.interceptors?{...o.interceptors}:void 0,this[_]=t,this[y]=e,this[r]=/* @__PURE__ */ new Map,this[v]=(e,t)=>{this.emit(`drain`,e,[this,...t])},this[m]=(e,t)=>{this.emit(`connect`,e,[this,...t])},this[h]=(e,t,n)=>{this.emit(`disconnect`,e,[this,...t],n)},this[g]=(e,t,n)=>{this.emit(`connectionError`,e,[this,...t],n)}}get[i](){let e=0;for(let t of this[r].values())e+=t[i];return e}[s](e,t){let i;if(e.origin&&(typeof e.origin==`string`||e.origin instanceof URL))i=String(e.origin);else throw new n(`opts.origin must be a non-empty string or URL.`);let a=this[r].get(i);return a||(a=this[y](e.origin,this[b]).on(`drain`,this[v]).on(`connect`,this[m]).on(`disconnect`,this[h]).on(`connectionError`,this[g]),this[r].set(i,a)),a.dispatch(e,t)}async[a](){let e=[];for(let t of this[r].values())e.push(t.close());this[r].clear(),await Promise.all(e)}async[o](e){let t=[];for(let n of this[r].values())t.push(n.destroy(e));this[r].clear(),await Promise.all(t)}}})),de=/* @__PURE__ */ f(((e,t)=>{let{kProxy:n,kClose:r,kDestroy:i,kDispatch:a,kInterceptors:o}=w(),{URL:s}=p(`node:url`),c=ue(),l=le(),u=M(),{InvalidArgumentError:d,RequestAbortedError:f,SecureProxyConnectionError:m}=T(),h=P(),g=se(),_=Symbol(`proxy agent`),v=Symbol(`proxy client`),y=Symbol(`proxy headers`),b=Symbol(`request tls settings`),x=Symbol(`proxy tls settings`),S=Symbol(`connect endpoint function`),C=Symbol(`tunnel proxy`);function E(e){return e===`https:`?443:80}function D(e,t){return new l(e,t)}let O=()=>{};function k(e,t){return t.connections===1?new g(e,t):new l(e,t)}var A=class extends u{#e;constructor(e,{headers:t={},connect:n,factory:r}){if(super(),!e)throw new d(`Proxy URL is mandatory`);this[y]=t,this.#e=r?r(e,{connect:n}):new g(e,{connect:n})}[a](e,t){let n=t.onHeaders;t.onHeaders=function(e,r,i){e===407?typeof t.onError==`function`&&t.onError(new d(`Proxy Authentication Required (407)`)):n&&n.call(this,e,r,i)};let{origin:r,path:i=`/`,headers:o={}}=e;if(e.path=r+i,!(`host`in o)&&!(`Host`in o)){let{host:e}=new s(r);o.host=e}return e.headers={...this[y],...o},this.#e[a](e,t)}async[r](){return this.#e.close()}async[i](e){return this.#e.destroy(e)}},j=class extends u{constructor(e){if(super(),!e||typeof e==`object`&&!(e instanceof s)&&!e.uri)throw new d(`Proxy uri is mandatory`);let{clientFactory:t=D}=e;if(typeof t!=`function`)throw new d(`Proxy opts.clientFactory must be a function.`);let{proxyTunnel:r=!0}=e,i=this.#e(e),{href:a,origin:l,port:u,protocol:p,username:g,password:w,hostname:T}=i;if(this[n]={uri:a,protocol:p},this[o]=e.interceptors?.ProxyAgent&&Array.isArray(e.interceptors.ProxyAgent)?e.interceptors.ProxyAgent:[],this[b]=e.requestTls,this[x]=e.proxyTls,this[y]=e.headers||{},this[C]=r,e.auth&&e.token)throw new d(`opts.auth cannot be used in combination with opts.token`);e.auth?this[y][`proxy-authorization`]=`Basic ${e.auth}`:e.token?this[y][`proxy-authorization`]=e.token:g&&w&&(this[y][`proxy-authorization`]=`Basic ${Buffer.from(`${decodeURIComponent(g)}:${decodeURIComponent(w)}`).toString(`base64`)}`);let j=h({...e.proxyTls});this[S]=h({...e.requestTls});let M=e.factory||k,N=(e,t)=>{let{protocol:r}=new s(e);return!this[C]&&r===`http:`&&this[n].protocol===`http:`?new A(this[n].uri,{headers:this[y],connect:j,factory:M}):M(e,t)};this[v]=t(i,{connect:j}),this[_]=new c({...e,factory:N,connect:async(e,t)=>{let n=e.host;e.port||(n+=`:${E(e.protocol)}`);try{let{socket:r,statusCode:i}=await this[v].connect({origin:l,port:u,path:n,signal:e.signal,headers:{...this[y],host:e.host},servername:this[x]?.servername||T});if(i!==200&&(r.on(`error`,O).destroy(),t(new f(`Proxy response (${i}) !== 200 when HTTP Tunneling`))),e.protocol!==`https:`){t(null,r);return}let a;a=this[b]?this[b].servername:e.servername,this[S]({...e,servername:a,httpSocket:r},t)}catch(e){e.code===`ERR_TLS_CERT_ALTNAME_INVALID`?t(new m(e)):t(e)}}})}dispatch(e,t){let n=N(e.headers);if(F(n),n&&!(`host`in n)&&!(`Host`in n)){let{host:t}=new s(e.origin);n.host=t}return this[_].dispatch({...e,headers:n},t)}#e(e){return typeof e==`string`?new s(e):e instanceof s?e:new s(e.uri)}async[r](){await this[_].close(),await this[v].close()}async[i](){await this[_].destroy(),await this[v].destroy()}};function N(e){if(Array.isArray(e)){let t={};for(let n=0;ne.toLowerCase()===`proxy-authorization`))throw new d(`Proxy-Authorization should be sent in ProxyAgent constructor`)}t.exports=j})),Y=/* @__PURE__ */ f(((e,t)=>{let n=M(),{kClose:r,kDestroy:i,kClosed:a,kDestroyed:o,kDispatch:s,kNoProxyAgent:c,kHttpProxyAgent:l,kHttpsProxyAgent:u}=w(),d=de(),f=ue(),p={"http:":80,"https:":443},m=!1;t.exports=class extends n{#e=null;#t=null;#n=null;constructor(e={}){super(),this.#n=e,m||(m=!0,process.emitWarning(`EnvHttpProxyAgent is experimental, expect them to change at any time.`,{code:`UNDICI-EHPA`}));let{httpProxy:t,httpsProxy:n,noProxy:r,...i}=e;this[c]=new f(i);let a=t??process.env.http_proxy??process.env.HTTP_PROXY;a?this[l]=new d({...i,uri:a}):this[l]=this[c];let o=n??process.env.https_proxy??process.env.HTTPS_PROXY;o?this[u]=new d({...i,uri:o}):this[u]=this[l],this.#a()}[s](e,t){let n=new URL(e.origin);return this.#r(n).dispatch(e,t)}async[r](){await this[c].close(),this[l][a]||await this[l].close(),this[u][a]||await this[u].close()}async[i](e){await this[c].destroy(e),this[l][o]||await this[l].destroy(e),this[u][o]||await this[u].destroy(e)}#r(e){let{protocol:t,host:n,port:r}=e;return n=n.replace(/:\d*$/,``).toLowerCase(),r=Number.parseInt(r,10)||p[t]||0,this.#i(n,r)?t===`https:`?this[u]:this[l]:this[c]}#i(e,t){if(this.#o&&this.#a(),this.#t.length===0)return!0;if(this.#e===`*`)return!1;for(let n=0;n{let n=p(`node:assert`),{kRetryHandlerDefaultRetry:r}=w(),{RequestRetryError:i}=T(),{isDisturbed:a,parseHeaders:o,parseRangeHeader:s,wrapRequestBody:c}=O();function l(e){let t=Date.now();return new Date(e).getTime()-t}function u(e,t,n,r){let a=e[`content-length`];if(a==null||!Number.isFinite(t.start)||!Number.isFinite(t.end))return null;let o=Number(a),s=t.end-t.start+1;return!Number.isFinite(o)||o!==s?new i(`Content-Length mismatch`,n,{headers:e,data:{count:r}}):null}t.exports=class e{constructor(t,n){let{retryOptions:i,...a}=t,{retry:o,maxRetries:s,maxTimeout:l,minTimeout:u,timeoutFactor:d,methods:f,errorCodes:p,retryAfter:m,statusCodes:h}=i??{};this.dispatch=n.dispatch,this.handler=n.handler,this.opts={...a,body:c(t.body)},this.abort=null,this.aborted=!1,this.retryOpts={retry:o??e[r],retryAfter:m??!0,maxTimeout:l??3e4,minTimeout:u??500,timeoutFactor:d??2,maxRetries:s??5,methods:f??[`GET`,`HEAD`,`OPTIONS`,`PUT`,`DELETE`,`TRACE`],statusCodes:h??[500,502,503,504,429],errorCodes:p??[`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ENETDOWN`,`ENETUNREACH`,`EHOSTDOWN`,`EHOSTUNREACH`,`EPIPE`,`UND_ERR_SOCKET`]},this.retryCount=0,this.retryCountCheckpoint=0,this.start=0,this.end=null,this.etag=null,this.resume=null,this.headersSent=!1,this.handler.onConnect(e=>{this.aborted=!0,this.abort?this.abort(e):this.reason=e})}checkpointResponseEnd(e,t){if(this.end==null&&this.opts.method!==`HEAD`){let t=e[`content-length`];this.end=t==null?null:Number(t)-1,n(this.end==null||Number.isFinite(this.end),`invalid content-length`)}this.resume=this.end==null?null:t}onRequestSent(){this.handler.onRequestSent&&this.handler.onRequestSent()}onUpgrade(e,t,n){this.handler.onUpgrade&&this.handler.onUpgrade(e,t,n)}onConnect(e){this.aborted?e(this.reason):this.abort=e}onBodySent(e){if(this.handler.onBodySent)return this.handler.onBodySent(e)}static[r](e,{state:t,opts:n},r){let{statusCode:i,code:a,headers:o}=e,{method:s,retryOptions:c}=n,{maxRetries:u,minTimeout:d,maxTimeout:f,timeoutFactor:p,statusCodes:m,errorCodes:h,methods:g}=c,{counter:_}=t;if(a&&a!==`UND_ERR_REQ_RETRY`&&!h.includes(a)||Array.isArray(g)&&!g.includes(s)||i!=null&&Array.isArray(m)&&!m.includes(i)||_>u){r(e);return}let v=o?.[`retry-after`];v&&=(v=Number(v),Number.isNaN(v)?l(v):v*1e3);let y=Math.min(v>0?v:d*p**(_-1),f);setTimeout(()=>r(null),y)}onHeaders(e,t,r,a){let c=o(t);if(this.retryCount+=1,e>=300)return!this.headersSent&&this.retryOpts.statusCodes.includes(e)===!1?(this.headersSent=!0,this.checkpointResponseEnd(c,r),this.handler.onHeaders(e,t,r,a)):(this.abort(new i(`Request failed`,e,{headers:c,data:{count:this.retryCount}})),!1);if(this.resume!=null){if(this.resume=null,e!==206&&(this.start>0||e!==200))return this.abort(new i(`server does not support the range header and the payload was partially consumed`,e,{headers:c,data:{count:this.retryCount}})),!1;let t=s(c[`content-range`]);if(!t)return this.abort(new i(`Content-Range mismatch`,e,{headers:c,data:{count:this.retryCount}})),!1;if(this.etag!=null&&this.etag!==c.etag)return this.abort(new i(`ETag mismatch`,e,{headers:c,data:{count:this.retryCount}})),!1;let n=u(c,t,e,this.retryCount);if(n!=null)return this.abort(n),!1;let{start:a,size:o,end:l=o-1}=t;return this.start!==a||this.end!=null&&this.end!==l?(this.abort(new i(`Content-Range mismatch`,e,{headers:c,data:{count:this.retryCount}})),!1):(this.resume=r,!0)}if(this.end==null){if(e===206){let i=s(c[`content-range`]);if(i==null)return this.headersSent=!0,this.handler.onHeaders(e,t,r,a);let o=u(c,i,e,this.retryCount);if(o!=null)return this.abort(o),!1;let{start:l,size:d,end:f=d-1}=i;n(l!=null&&Number.isFinite(l),`content-range mismatch`),n(f!=null&&Number.isFinite(f),`invalid content-length`),this.start=l,this.end=f}if(this.end==null){let e=c[`content-length`];this.end=e==null?null:Number(e)-1}return n(Number.isFinite(this.start)),n(this.end==null||Number.isFinite(this.end),`invalid content-length`),this.resume=r,this.headersSent=!0,this.etag=c.etag==null?null:c.etag,this.etag!=null&&this.etag.startsWith(`W/`)&&(this.etag=null),this.handler.onHeaders(e,t,r,a)}let l=new i(`Request failed`,e,{headers:c,data:{count:this.retryCount}});return this.abort(l),!1}onData(e){return this.start+=e.length,this.handler.onData(e)}onComplete(e){return this.retryCount=0,this.handler.onComplete(e)}onError(e){if(this.aborted||a(this.opts.body)||this.headersSent&&this.resume==null)return this.handler.onError(e);this.retryCount-this.retryCountCheckpoint>0?this.retryCount=this.retryCountCheckpoint+(this.retryCount-this.retryCountCheckpoint):this.retryCount+=1,this.retryOpts.retry(e,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},t.bind(this));function t(e){if(e!=null||this.aborted||a(this.opts.body))return this.handler.onError(e);if(this.start!==0){let e={range:`bytes=${this.start}-${this.end??``}`};this.etag!=null&&(e[`if-match`]=this.etag),this.opts={...this.opts,headers:{...this.opts.headers,...e}}}try{this.retryCountCheckpoint=this.retryCount,this.dispatch(this.opts,this)}catch(e){this.handler.onError(e)}}}}})),pe=/* @__PURE__ */ f(((e,t)=>{let n=j(),r=fe();t.exports=class extends n{#e=null;#t=null;constructor(e,t={}){super(t),this.#e=e,this.#t=t}dispatch(e,t){let n=new r({...e,retryOptions:this.#t},{dispatch:this.#e.dispatch.bind(this.#e),handler:t});return this.#e.dispatch(e,n)}close(){return this.#e.close()}destroy(){return this.#e.destroy()}}})),me=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),{Readable:r}=p(`node:stream`),{RequestAbortedError:i,NotSupportedError:a,InvalidArgumentError:o,AbortError:s}=T(),c=O(),{ReadableStreamFrom:l}=O(),u=Symbol(`kConsume`),d=Symbol(`kReading`),f=Symbol(`kBody`),m=Symbol(`kAbort`),h=Symbol(`kContentType`),g=Symbol(`kContentLength`),_=()=>{};var v=class extends r{constructor({resume:e,abort:t,contentType:n=``,contentLength:r,highWaterMark:i=65536}){super({autoDestroy:!0,read:e,highWaterMark:i}),this._readableState.dataEmitted=!1,this[m]=t,this[u]=null,this[f]=null,this[h]=n,this[g]=r,this[d]=!1}destroy(e){return!e&&!this._readableState.endEmitted&&(e=new i),e&&this[m](),super.destroy(e)}_destroy(e,t){this[d]?t(e):setImmediate(()=>{t(e)})}on(e,...t){return(e===`data`||e===`readable`)&&(this[d]=!0),super.on(e,...t)}addListener(e,...t){return this.on(e,...t)}off(e,...t){let n=super.off(e,...t);return(e===`data`||e===`readable`)&&(this[d]=this.listenerCount(`data`)>0||this.listenerCount(`readable`)>0),n}removeListener(e,...t){return this.off(e,...t)}push(e){return this[u]&&e!==null?(D(this[u],e),!this[d]||super.push(e)):super.push(e)}async text(){return x(this,`text`)}async json(){return x(this,`json`)}async blob(){return x(this,`blob`)}async bytes(){return x(this,`bytes`)}async arrayBuffer(){return x(this,`arrayBuffer`)}async formData(){throw new a}get bodyUsed(){return c.isDisturbed(this)}get body(){return this[f]||(this[f]=l(this),this[u]&&(this[f].getReader(),n(this[f].locked))),this[f]}async dump(e){let t=Number.isFinite(e?.limit)?e.limit:131072,n=e?.signal;if(n!=null&&(typeof n!=`object`||!(`aborted`in n)))throw new o(`signal must be an AbortSignal`);return n?.throwIfAborted(),this._readableState.closeEmitted?null:await new Promise((e,r)=>{this[g]>t&&this.destroy(new s);let i=()=>{this.destroy(n.reason??new s)};n?.addEventListener(`abort`,i),this.on(`close`,function(){n?.removeEventListener(`abort`,i),n?.aborted?r(n.reason??new s):e(null)}).on(`error`,_).on(`data`,function(e){t-=e.length,t<=0&&this.destroy()}).resume()})}};function y(e){return e[f]&&e[f].locked===!0||e[u]}function b(e){return c.isDisturbed(e)||y(e)}async function x(e,t){return n(!e[u]),new Promise((n,r)=>{if(b(e)){let t=e._readableState;t.destroyed&&t.closeEmitted===!1?e.on(`error`,e=>{r(e)}).on(`close`,()=>{r(/* @__PURE__ */ TypeError(`unusable`))}):r(t.errored??/* @__PURE__ */ TypeError(`unusable`))}else queueMicrotask(()=>{e[u]={type:t,stream:e,resolve:n,reject:r,length:0,body:[]},e.on(`error`,function(e){k(this[u],e)}).on(`close`,function(){this[u].body!==null&&k(this[u],new i)}),S(e[u])})})}function S(e){if(e.body===null)return;let{_readableState:t}=e.stream;if(t.bufferIndex){let n=t.bufferIndex,r=t.buffer.length;for(let i=n;i2&&n[0]===239&&n[1]===187&&n[2]===191?3:0;return n.utf8Slice(i,r)}function w(e,t){if(e.length===0||t===0)return/* @__PURE__ */ new Uint8Array;if(e.length===1)return new Uint8Array(e[0]);let n=new Uint8Array(Buffer.allocUnsafeSlow(t).buffer),r=0;for(let t=0;t{let n=p(`node:assert`),{ResponseStatusCodeError:r}=T(),{chunksDecode:i}=me();async function a({callback:e,body:t,contentType:a,statusCode:c,statusMessage:l,headers:u}){n(t);let d=[],f=0;try{for await(let e of t)if(d.push(e),f+=e.length,f>131072){d=[],f=0;break}}catch{d=[],f=0}let p=`Response status code ${c}${l?`: ${l}`:``}`;if(c===204||!a||!f){queueMicrotask(()=>e(new r(p,c,u)));return}let m=Error.stackTraceLimit;Error.stackTraceLimit=0;let h;try{o(a)?h=JSON.parse(i(d,f)):s(a)&&(h=i(d,f))}catch{}finally{Error.stackTraceLimit=m}queueMicrotask(()=>e(new r(p,c,u,h)))}let o=e=>e.length>15&&e[11]===`/`&&e[0]===`a`&&e[1]===`p`&&e[2]===`p`&&e[3]===`l`&&e[4]===`i`&&e[5]===`c`&&e[6]===`a`&&e[7]===`t`&&e[8]===`i`&&e[9]===`o`&&e[10]===`n`&&e[12]===`j`&&e[13]===`s`&&e[14]===`o`&&e[15]===`n`,s=e=>e.length>4&&e[4]===`/`&&e[0]===`t`&&e[1]===`e`&&e[2]===`x`&&e[3]===`t`;t.exports={getResolveErrorBodyCallback:a,isContentTypeApplicationJson:o,isContentTypeText:s}})),ge=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),{Readable:r}=me(),{InvalidArgumentError:i,RequestAbortedError:a}=T(),o=O(),{getResolveErrorBodyCallback:s}=he(),{AsyncResource:c}=p(`node:async_hooks`);var l=class extends c{constructor(e,t){if(!e||typeof e!=`object`)throw new i(`invalid opts`);let{signal:n,method:r,opaque:s,body:c,onInfo:l,responseHeaders:u,throwOnError:d,highWaterMark:f}=e;try{if(typeof t!=`function`)throw new i(`invalid callback`);if(f&&(typeof f!=`number`||f<0))throw new i(`invalid highWaterMark`);if(n&&typeof n.on!=`function`&&typeof n.addEventListener!=`function`)throw new i(`signal must be an EventEmitter or EventTarget`);if(r===`CONNECT`)throw new i(`invalid method`);if(l&&typeof l!=`function`)throw new i(`invalid onInfo callback`);super(`UNDICI_REQUEST`)}catch(e){throw o.isStream(c)&&o.destroy(c.on(`error`,o.nop),e),e}this.method=r,this.responseHeaders=u||null,this.opaque=s||null,this.callback=t,this.res=null,this.abort=null,this.body=c,this.trailers={},this.context=null,this.onInfo=l||null,this.throwOnError=d,this.highWaterMark=f,this.signal=n,this.reason=null,this.removeAbortListener=null,o.isStream(c)&&c.on(`error`,e=>{this.onError(e)}),this.signal&&(this.signal.aborted?this.reason=this.signal.reason??new a:this.removeAbortListener=o.addAbortListener(this.signal,()=>{this.reason=this.signal.reason??new a,this.res?o.destroy(this.res.on(`error`,o.nop),this.reason):this.abort&&this.abort(this.reason),this.removeAbortListener&&=(this.res?.off(`close`,this.removeAbortListener),this.removeAbortListener(),null)}))}onConnect(e,t){this.reason?e(this.reason):(n(this.callback),this.abort=e,this.context=t)}onHeaders(e,t,n,i){let{callback:a,opaque:c,abort:l,context:u,responseHeaders:d,highWaterMark:f}=this,p=d===`raw`?o.parseRawHeaders(t):o.parseHeaders(t);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:p});return}let m=d===`raw`?o.parseHeaders(t):p,h=m[`content-type`],g=m[`content-length`],_=new r({resume:n,abort:l,contentType:h,contentLength:this.method!==`HEAD`&&g?Number(g):null,highWaterMark:f});this.removeAbortListener&&_.on(`close`,this.removeAbortListener),this.callback=null,this.res=_,a!==null&&(this.throwOnError&&e>=400?this.runInAsyncScope(s,null,{callback:a,body:_,contentType:h,statusCode:e,statusMessage:i,headers:p}):this.runInAsyncScope(a,null,null,{statusCode:e,headers:p,trailers:this.trailers,opaque:c,body:_,context:u}))}onData(e){return this.res.push(e)}onComplete(e){o.parseHeaders(e,this.trailers),this.res.push(null)}onError(e){let{res:t,callback:n,body:r,opaque:i}=this;n&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(n,null,e,{opaque:i})})),t&&(this.res=null,queueMicrotask(()=>{o.destroy(t,e)})),r&&(this.body=null,o.destroy(r,e)),this.removeAbortListener&&=(t?.off(`close`,this.removeAbortListener),this.removeAbortListener(),null)}};function u(e,t){if(t===void 0)return new Promise((t,n)=>{u.call(this,e,(e,r)=>e?n(e):t(r))});try{this.dispatch(e,new l(e,t))}catch(n){if(typeof t!=`function`)throw n;let r=e?.opaque;queueMicrotask(()=>t(n,{opaque:r}))}}t.exports=u,t.exports.RequestHandler=l})),_e=/* @__PURE__ */ f(((e,t)=>{let{addAbortListener:n}=O(),{RequestAbortedError:r}=T(),i=Symbol(`kListener`),a=Symbol(`kSignal`);function o(e){e.abort?e.abort(e[a]?.reason):e.reason=e[a]?.reason??new r,c(e)}function s(e,t){e.reason=null,e[a]=null,e[i]=null,t&&(t.aborted?o(e):(e[a]=t,e[i]=()=>{o(e)},n(e[a],e[i])))}function c(e){e[a]&&(`removeEventListener`in e[a]?e[a].removeEventListener(`abort`,e[i]):e[a].removeListener(`abort`,e[i]),e[a]=null,e[i]=null)}t.exports={addSignal:s,removeSignal:c}})),ve=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),{finished:r,PassThrough:i}=p(`node:stream`),{InvalidArgumentError:a,InvalidReturnValueError:o}=T(),s=O(),{getResolveErrorBodyCallback:c}=he(),{AsyncResource:l}=p(`node:async_hooks`),{addSignal:u,removeSignal:d}=_e();var f=class extends l{constructor(e,t,n){if(!e||typeof e!=`object`)throw new a(`invalid opts`);let{signal:r,method:i,opaque:o,body:c,onInfo:l,responseHeaders:d,throwOnError:f}=e;try{if(typeof n!=`function`)throw new a(`invalid callback`);if(typeof t!=`function`)throw new a(`invalid factory`);if(r&&typeof r.on!=`function`&&typeof r.addEventListener!=`function`)throw new a(`signal must be an EventEmitter or EventTarget`);if(i===`CONNECT`)throw new a(`invalid method`);if(l&&typeof l!=`function`)throw new a(`invalid onInfo callback`);super(`UNDICI_STREAM`)}catch(e){throw s.isStream(c)&&s.destroy(c.on(`error`,s.nop),e),e}this.responseHeaders=d||null,this.opaque=o||null,this.factory=t,this.callback=n,this.res=null,this.abort=null,this.context=null,this.trailers=null,this.body=c,this.onInfo=l||null,this.throwOnError=f||!1,s.isStream(c)&&c.on(`error`,e=>{this.onError(e)}),u(this,r)}onConnect(e,t){this.reason?e(this.reason):(n(this.callback),this.abort=e,this.context=t)}onHeaders(e,t,n,a){let{factory:l,opaque:u,context:d,callback:f,responseHeaders:p}=this,m=p===`raw`?s.parseRawHeaders(t):s.parseHeaders(t);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:m});return}this.factory=null;let h;if(this.throwOnError&&e>=400){let n=(p===`raw`?s.parseHeaders(t):m)[`content-type`];h=new i,this.callback=null,this.runInAsyncScope(c,null,{callback:f,body:h,contentType:n,statusCode:e,statusMessage:a,headers:m})}else{if(l===null)return;if(h=this.runInAsyncScope(l,null,{statusCode:e,headers:m,opaque:u,context:d}),!h||typeof h.write!=`function`||typeof h.end!=`function`||typeof h.on!=`function`)throw new o(`expected Writable`);r(h,{readable:!1},e=>{let{callback:t,res:n,opaque:r,trailers:i,abort:a}=this;this.res=null,(e||!n.readable)&&s.destroy(n,e),this.callback=null,this.runInAsyncScope(t,null,e||null,{opaque:r,trailers:i}),e&&a()})}return h.on(`drain`,n),this.res=h,(h.writableNeedDrain===void 0?h._writableState?.needDrain:h.writableNeedDrain)!==!0}onData(e){let{res:t}=this;return!t||t.write(e)}onComplete(e){let{res:t}=this;d(this),t&&(this.trailers=s.parseHeaders(e),t.end())}onError(e){let{res:t,callback:n,opaque:r,body:i}=this;d(this),this.factory=null,t?(this.res=null,s.destroy(t,e)):n&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(n,null,e,{opaque:r})})),i&&(this.body=null,s.destroy(i,e))}};function m(e,t,n){if(n===void 0)return new Promise((n,r)=>{m.call(this,e,t,(e,t)=>e?r(e):n(t))});try{this.dispatch(e,new f(e,t,n))}catch(t){if(typeof n!=`function`)throw t;let r=e?.opaque;queueMicrotask(()=>n(t,{opaque:r}))}}t.exports=m})),ye=/* @__PURE__ */ f(((e,t)=>{let{Readable:n,Duplex:r,PassThrough:i}=p(`node:stream`),{InvalidArgumentError:a,InvalidReturnValueError:o,RequestAbortedError:s}=T(),c=O(),{AsyncResource:l}=p(`node:async_hooks`),{addSignal:u,removeSignal:d}=_e(),f=p(`node:assert`),m=Symbol(`resume`);var h=class extends n{constructor(){super({autoDestroy:!0}),this[m]=null}_read(){let{[m]:e}=this;e&&(this[m]=null,e())}_destroy(e,t){this._read(),t(e)}},g=class extends n{constructor(e){super({autoDestroy:!0}),this[m]=e}_read(){this[m]()}_destroy(e,t){!e&&!this._readableState.endEmitted&&(e=new s),t(e)}},_=class extends l{constructor(e,t){if(!e||typeof e!=`object`)throw new a(`invalid opts`);if(typeof t!=`function`)throw new a(`invalid handler`);let{signal:n,method:i,opaque:o,onInfo:l,responseHeaders:f}=e;if(n&&typeof n.on!=`function`&&typeof n.addEventListener!=`function`)throw new a(`signal must be an EventEmitter or EventTarget`);if(i===`CONNECT`)throw new a(`invalid method`);if(l&&typeof l!=`function`)throw new a(`invalid onInfo callback`);super(`UNDICI_PIPELINE`),this.opaque=o||null,this.responseHeaders=f||null,this.handler=t,this.abort=null,this.context=null,this.onInfo=l||null,this.req=new h().on(`error`,c.nop),this.ret=new r({readableObjectMode:e.objectMode,autoDestroy:!0,read:()=>{let{body:e}=this;e?.resume&&e.resume()},write:(e,t,n)=>{let{req:r}=this;r.push(e,t)||r._readableState.destroyed?n():r[m]=n},destroy:(e,t)=>{let{body:n,req:r,res:i,ret:a,abort:o}=this;!e&&!a._readableState.endEmitted&&(e=new s),o&&e&&o(),c.destroy(n,e),c.destroy(r,e),c.destroy(i,e),d(this),t(e)}}).on(`prefinish`,()=>{let{req:e}=this;e.push(null)}),this.res=null,u(this,n)}onConnect(e,t){let{ret:n,res:r}=this;this.reason?e(this.reason):(f(!r,`pipeline cannot be retried`),f(!n.destroyed),this.abort=e,this.context=t)}onHeaders(e,t,n){let{opaque:r,handler:i,context:a}=this;if(e<200){if(this.onInfo){let n=this.responseHeaders===`raw`?c.parseRawHeaders(t):c.parseHeaders(t);this.onInfo({statusCode:e,headers:n})}return}this.res=new g(n);let l;try{this.handler=null;let n=this.responseHeaders===`raw`?c.parseRawHeaders(t):c.parseHeaders(t);l=this.runInAsyncScope(i,null,{statusCode:e,headers:n,opaque:r,body:this.res,context:a})}catch(e){throw this.res.on(`error`,c.nop),e}if(!l||typeof l.on!=`function`)throw new o(`expected Readable`);l.on(`data`,e=>{let{ret:t,body:n}=this;!t.push(e)&&n.pause&&n.pause()}).on(`error`,e=>{let{ret:t}=this;c.destroy(t,e)}).on(`end`,()=>{let{ret:e}=this;e.push(null)}).on(`close`,()=>{let{ret:e}=this;e._readableState.ended||c.destroy(e,new s)}),this.body=l}onData(e){let{res:t}=this;return t.push(e)}onComplete(e){let{res:t}=this;t.push(null)}onError(e){let{ret:t}=this;this.handler=null,c.destroy(t,e)}};function v(e,t){try{let n=new _(e,t);return this.dispatch({...e,body:n.req},n),n.ret}catch(e){return new i().destroy(e)}}t.exports=v})),X=/* @__PURE__ */ f(((e,t)=>{let{InvalidArgumentError:n,SocketError:r}=T(),{AsyncResource:i}=p(`node:async_hooks`),a=O(),{addSignal:o,removeSignal:s}=_e(),c=p(`node:assert`);var l=class extends i{constructor(e,t){if(!e||typeof e!=`object`)throw new n(`invalid opts`);if(typeof t!=`function`)throw new n(`invalid callback`);let{signal:r,opaque:i,responseHeaders:a}=e;if(r&&typeof r.on!=`function`&&typeof r.addEventListener!=`function`)throw new n(`signal must be an EventEmitter or EventTarget`);super(`UNDICI_UPGRADE`),this.responseHeaders=a||null,this.opaque=i||null,this.callback=t,this.abort=null,this.context=null,o(this,r)}onConnect(e,t){this.reason?e(this.reason):(c(this.callback),this.abort=e,this.context=null)}onHeaders(){throw new r(`bad upgrade`,null)}onUpgrade(e,t,n){c(e===101);let{callback:r,opaque:i,context:o}=this;s(this),this.callback=null;let l=this.responseHeaders===`raw`?a.parseRawHeaders(t):a.parseHeaders(t);this.runInAsyncScope(r,null,null,{headers:l,socket:n,opaque:i,context:o})}onError(e){let{callback:t,opaque:n}=this;s(this),t&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(t,null,e,{opaque:n})}))}};function u(e,t){if(t===void 0)return new Promise((t,n)=>{u.call(this,e,(e,r)=>e?n(e):t(r))});try{let n=new l(e,t);this.dispatch({...e,method:e.method||`GET`,upgrade:e.protocol||`Websocket`},n)}catch(n){if(typeof t!=`function`)throw n;let r=e?.opaque;queueMicrotask(()=>t(n,{opaque:r}))}}t.exports=u})),be=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),{AsyncResource:r}=p(`node:async_hooks`),{InvalidArgumentError:i,SocketError:a}=T(),o=O(),{addSignal:s,removeSignal:c}=_e();var l=class extends r{constructor(e,t){if(!e||typeof e!=`object`)throw new i(`invalid opts`);if(typeof t!=`function`)throw new i(`invalid callback`);let{signal:n,opaque:r,responseHeaders:a}=e;if(n&&typeof n.on!=`function`&&typeof n.addEventListener!=`function`)throw new i(`signal must be an EventEmitter or EventTarget`);super(`UNDICI_CONNECT`),this.opaque=r||null,this.responseHeaders=a||null,this.callback=t,this.abort=null,s(this,n)}onConnect(e,t){this.reason?e(this.reason):(n(this.callback),this.abort=e,this.context=t)}onHeaders(){throw new a(`bad connect`,null)}onUpgrade(e,t,n){let{callback:r,opaque:i,context:a}=this;c(this),this.callback=null;let s=t;s!=null&&(s=this.responseHeaders===`raw`?o.parseRawHeaders(t):o.parseHeaders(t)),this.runInAsyncScope(r,null,null,{statusCode:e,headers:s,socket:n,opaque:i,context:a})}onError(e){let{callback:t,opaque:n}=this;c(this),t&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(t,null,e,{opaque:n})}))}};function u(e,t){if(t===void 0)return new Promise((t,n)=>{u.call(this,e,(e,r)=>e?n(e):t(r))});try{let n=new l(e,t);this.dispatch({...e,method:`CONNECT`},n)}catch(n){if(typeof t!=`function`)throw n;let r=e?.opaque;queueMicrotask(()=>t(n,{opaque:r}))}}t.exports=u})),xe=/* @__PURE__ */ f(((e,t)=>{t.exports.request=ge(),t.exports.stream=ve(),t.exports.pipeline=ye(),t.exports.upgrade=X(),t.exports.connect=be()})),Z=/* @__PURE__ */ f(((e,t)=>{let{UndiciError:n}=T(),r=Symbol.for(`undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED`);t.exports={MockNotMatchedError:class e extends n{constructor(t){super(t),Error.captureStackTrace(this,e),this.name=`MockNotMatchedError`,this.message=t||`The request does not match any registered mock dispatches`,this.code=`UND_MOCK_ERR_MOCK_NOT_MATCHED`}static[Symbol.hasInstance](e){return e&&e[r]===!0}[r]=!0}}})),Se=/* @__PURE__ */ f(((e,t)=>{t.exports={kAgent:Symbol(`agent`),kOptions:Symbol(`options`),kFactory:Symbol(`factory`),kDispatches:Symbol(`dispatches`),kDispatchKey:Symbol(`dispatch key`),kDefaultHeaders:Symbol(`default headers`),kDefaultTrailers:Symbol(`default trailers`),kContentLength:Symbol(`content length`),kMockAgent:Symbol(`mock agent`),kMockAgentSet:Symbol(`mock agent set`),kMockAgentGet:Symbol(`mock agent get`),kMockDispatch:Symbol(`mock dispatch`),kClose:Symbol(`close`),kOriginalClose:Symbol(`original agent close`),kOrigin:Symbol(`origin`),kIsMockActive:Symbol(`is mock active`),kNetConnect:Symbol(`net connect`),kGetNetConnect:Symbol(`get net connect`),kConnected:Symbol(`connected`)}})),Ce=/* @__PURE__ */ f(((e,t)=>{let{MockNotMatchedError:n}=Z(),{kDispatches:r,kMockAgent:i,kOriginalDispatch:a,kOrigin:o,kGetNetConnect:s}=Se(),{buildURL:c}=O(),{STATUS_CODES:l}=p(`node:http`),{types:{isPromise:u}}=p(`node:util`);function d(e,t){return typeof e==`string`?e===t:e instanceof RegExp?e.test(t):typeof e==`function`&&e(t)===!0}function f(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e.toLocaleLowerCase(),t]))}function m(e,t){if(Array.isArray(e)){for(let n=0;n!e).filter(({path:e})=>d(_(e),i));if(a.length===0)throw new n(`Mock dispatch not matched for path '${i}'`);if(a=a.filter(({method:e})=>d(e,t.method)),a.length===0)throw new n(`Mock dispatch not matched for method '${t.method}' on path '${i}'`);if(a=a.filter(({body:e})=>e===void 0||d(e,t.body)),a.length===0)throw new n(`Mock dispatch not matched for body '${t.body}' on path '${i}'`);if(a=a.filter(e=>g(e,t.headers)),a.length===0){let e=typeof t.headers==`object`?JSON.stringify(t.headers):t.headers;throw new n(`Mock dispatch not matched for headers '${e}' on path '${i}'`)}return a[0]}function x(e,t,n){let r={timesInvoked:0,times:1,persist:!1,consumed:!1},i=typeof n==`function`?{callback:n}:{...n},a={...r,...t,pending:!0,data:{error:null,...i}};return e.push(a),a}function S(e,t){let n=e.findIndex(e=>e.consumed?v(e,t):!1);n!==-1&&e.splice(n,1)}function C(e){let{path:t,method:n,body:r,headers:i,query:a}=e;return{path:t,method:n,body:r,headers:i,query:a}}function w(e){let t=Object.keys(e),n=[];for(let r=0;r=m,i.pending=p0?setTimeout(()=>{g(this[r])},d):g(this[r]);function g(r,i=o){let l=Array.isArray(e.headers)?h(e.headers):e.headers,d=typeof i==`function`?i({...e,headers:l}):i;if(u(d)){d.then(e=>g(r,e));return}let f=y(d),p=w(s),m=w(c);t.onConnect?.(e=>t.onError(e),null),t.onHeaders?.(a,p,_,T(a)),t.onData?.(Buffer.from(f)),t.onComplete?.(m),S(r,n)}function _(){}return!0}function k(){let e=this[i],t=this[o],r=this[a];return function(i,a){if(e.isMockActive)try{D.call(this,i,a)}catch(o){if(o instanceof n){let c=e[s]();if(c===!1)throw new n(`${o.message}: subsequent request to origin ${t} was not allowed (net.connect disabled)`);if(A(c,t))r.call(this,i,a);else throw new n(`${o.message}: subsequent request to origin ${t} was not allowed (net.connect is not enabled for this origin)`)}else throw o}else r.call(this,i,a)}}function A(e,t){let n=new URL(t);return!!(e===!0||Array.isArray(e)&&e.some(e=>d(e,n.host)))}function j(e){if(e){let{agent:t,...n}=e;return n}}t.exports={getResponseData:y,getMockDispatch:b,addMockDispatch:x,deleteMockDispatch:S,buildKey:C,generateKeyValues:w,matchValue:d,getResponse:E,getStatusText:T,mockDispatch:D,buildMockDispatch:k,checkNetConnect:A,buildMockOptions:j,getHeaderByName:m,buildHeadersFromArray:h}})),we=/* @__PURE__ */ f(((e,t)=>{let{getResponseData:n,buildKey:r,addMockDispatch:i}=Ce(),{kDispatches:a,kDispatchKey:o,kDefaultHeaders:s,kDefaultTrailers:c,kContentLength:l,kMockDispatch:u}=Se(),{InvalidArgumentError:d}=T(),{buildURL:f}=O();var p=class{constructor(e){this[u]=e}delay(e){if(typeof e!=`number`||!Number.isInteger(e)||e<=0)throw new d(`waitInMs must be a valid integer > 0`);return this[u].delay=e,this}persist(){return this[u].persist=!0,this}times(e){if(typeof e!=`number`||!Number.isInteger(e)||e<=0)throw new d(`repeatTimes must be a valid integer > 0`);return this[u].times=e,this}},m=class{constructor(e,t){if(typeof e!=`object`)throw new d(`opts must be an object`);if(e.path===void 0)throw new d(`opts.path must be defined`);if(e.method===void 0&&(e.method=`GET`),typeof e.path==`string`){if(e.query)e.path=f(e.path,e.query);else{let t=new URL(e.path,`data://`);e.path=t.pathname+t.search}}typeof e.method==`string`&&(e.method=e.method.toUpperCase()),this[o]=r(e),this[a]=t,this[s]={},this[c]={},this[l]=!1}createMockScopeDispatchData({statusCode:e,data:t,responseOptions:r}){let i=n(t),a=this[l]?{"content-length":i.length}:{};return{statusCode:e,data:t,headers:{...this[s],...a,...r.headers},trailers:{...this[c],...r.trailers}}}validateReplyParameters(e){if(e.statusCode===void 0)throw new d(`statusCode must be defined`);if(typeof e.responseOptions!=`object`||e.responseOptions===null)throw new d(`responseOptions must be an object`)}reply(e){if(typeof e==`function`)return new p(i(this[a],this[o],t=>{let n=e(t);if(typeof n!=`object`||!n)throw new d(`reply options callback must return an object`);let r={data:``,responseOptions:{},...n};return this.validateReplyParameters(r),{...this.createMockScopeDispatchData(r)}}));let t={statusCode:e,data:arguments[1]===void 0?``:arguments[1],responseOptions:arguments[2]===void 0?{}:arguments[2]};this.validateReplyParameters(t);let n=this.createMockScopeDispatchData(t);return new p(i(this[a],this[o],n))}replyWithError(e){if(e===void 0)throw new d(`error must be defined`);return new p(i(this[a],this[o],{error:e}))}defaultReplyHeaders(e){if(e===void 0)throw new d(`headers must be defined`);return this[s]=e,this}defaultReplyTrailers(e){if(e===void 0)throw new d(`trailers must be defined`);return this[c]=e,this}replyContentLength(){return this[l]=!0,this}};t.exports.MockInterceptor=m,t.exports.MockScope=p})),Te=/* @__PURE__ */ f(((e,t)=>{let{promisify:n}=p(`node:util`),r=se(),{buildMockDispatch:i}=Ce(),{kDispatches:a,kMockAgent:o,kClose:s,kOriginalClose:c,kOrigin:l,kOriginalDispatch:u,kConnected:d}=Se(),{MockInterceptor:f}=we(),m=w(),{InvalidArgumentError:h}=T();t.exports=class extends r{constructor(e,t){if(super(e,t),!t||!t.agent||typeof t.agent.dispatch!=`function`)throw new h(`Argument opts.agent must implement Agent`);this[o]=t.agent,this[l]=e,this[a]=[],this[d]=1,this[u]=this.dispatch,this[c]=this.close.bind(this),this.dispatch=i.call(this),this.close=this[s]}get[m.kConnected](){return this[d]}intercept(e){return new f(e,this[a])}async[s](){await n(this[c])(),this[d]=0,this[o][m.kClients].delete(this[l])}}})),Ee=/* @__PURE__ */ f(((e,t)=>{let{promisify:n}=p(`node:util`),r=le(),{buildMockDispatch:i}=Ce(),{kDispatches:a,kMockAgent:o,kClose:s,kOriginalClose:c,kOrigin:l,kOriginalDispatch:u,kConnected:d}=Se(),{MockInterceptor:f}=we(),m=w(),{InvalidArgumentError:h}=T();t.exports=class extends r{constructor(e,t){if(super(e,t),!t||!t.agent||typeof t.agent.dispatch!=`function`)throw new h(`Argument opts.agent must implement Agent`);this[o]=t.agent,this[l]=e,this[a]=[],this[d]=1,this[u]=this.dispatch,this[c]=this.close.bind(this),this.dispatch=i.call(this),this.close=this[s]}get[m.kConnected](){return this[d]}intercept(e){return new f(e,this[a])}async[s](){await n(this[c])(),this[d]=0,this[o][m.kClients].delete(this[l])}}})),De=/* @__PURE__ */ f(((e,t)=>{let n={pronoun:`it`,is:`is`,was:`was`,this:`this`},r={pronoun:`they`,is:`are`,was:`were`,this:`these`};t.exports=class{constructor(e,t){this.singular=e,this.plural=t}pluralize(e){let t=e===1,i=t?n:r,a=t?this.singular:this.plural;return{...i,count:e,noun:a}}}})),Oe=/* @__PURE__ */ f(((e,t)=>{let{Transform:n}=p(`node:stream`),{Console:r}=p(`node:console`),i=process.versions.icu?`✅`:`Y `,a=process.versions.icu?`❌`:`N `;t.exports=class{constructor({disableColors:e}={}){this.transform=new n({transform(e,t,n){n(null,e)}}),this.logger=new r({stdout:this.transform,inspectOptions:{colors:!e&&!process.env.CI}})}format(e){let t=e.map(({method:e,path:t,data:{statusCode:n},persist:r,times:o,timesInvoked:s,origin:c})=>({Method:e,Origin:c,Path:t,"Status code":n,Persistent:r?i:a,Invocations:s,Remaining:r?1/0:o-s}));return this.logger.table(t),this.transform.read().toString()}}})),ke=/* @__PURE__ */ f(((e,t)=>{let{kClients:n}=w(),r=ue(),{kAgent:i,kMockAgentSet:a,kMockAgentGet:o,kDispatches:s,kIsMockActive:c,kNetConnect:l,kGetNetConnect:u,kOptions:d,kFactory:f}=Se(),p=Te(),m=Ee(),{matchValue:h,buildMockOptions:g}=Ce(),{InvalidArgumentError:_,UndiciError:v}=T(),y=j(),b=De(),x=Oe();t.exports=class extends y{constructor(e){if(super(e),this[l]=!0,this[c]=!0,e?.agent&&typeof e.agent.dispatch!=`function`)throw new _(`Argument opts.agent must implement Agent`);let t=e?.agent?e.agent:new r(e);this[i]=t,this[n]=t[n],this[d]=g(e)}get(e){let t=this[o](e);return t||(t=this[f](e),this[a](e,t)),t}dispatch(e,t){return this.get(e.origin),this[i].dispatch(e,t)}async close(){await this[i].close(),this[n].clear()}deactivate(){this[c]=!1}activate(){this[c]=!0}enableNetConnect(e){if(typeof e==`string`||typeof e==`function`||e instanceof RegExp)Array.isArray(this[l])?this[l].push(e):this[l]=[e];else if(e===void 0)this[l]=!0;else throw new _(`Unsupported matcher. Must be one of String|Function|RegExp.`)}disableNetConnect(){this[l]=!1}get isMockActive(){return this[c]}[a](e,t){this[n].set(e,t)}[f](e){let t=Object.assign({agent:this},this[d]);return this[d]&&this[d].connections===1?new p(e,t):new m(e,t)}[o](e){let t=this[n].get(e);if(t)return t;if(typeof e!=`string`){let t=this[f](`http://localhost:9999`);return this[a](e,t),t}for(let[t,r]of Array.from(this[n]))if(r&&typeof t!=`string`&&h(t,e)){let t=this[f](e);return this[a](e,t),t[s]=r[s],t}}[u](){return this[l]}pendingInterceptors(){let e=this[n];return Array.from(e.entries()).flatMap(([e,t])=>t[s].map(t=>({...t,origin:e}))).filter(({pending:e})=>e)}assertNoPendingInterceptors({pendingInterceptorsFormatter:e=new x}={}){let t=this.pendingInterceptors();if(t.length===0)return;let n=new b(`interceptor`,`interceptors`).pluralize(t.length);throw new v(` +[v](e){Q(this),this.once(`connect`,e)}[J](e,t){let n=e.origin||this[m].origin,r=new s(n,e,t);return this[C].push(r),this[y]||(a.bodyLength(r.body)==null&&a.isIterable(r.body)?(this[y]=1,queueMicrotask(()=>Se(this))):this[fe](!0)),this[y]&&this[j]!==2&&this[_]&&(this[j]=2),this[j]<2}async[q](){return new Promise(e=>{this[S]?this[ge]=e:e(null)})}async[se](e){return new Promise(t=>{let n=this[C].splice(this[I]);for(let t=0;t{this[ge]&&(this[ge](),this[ge]=null),t(null)};this[X]?(this[X].destroy(e,r),this[X]=null):queueMicrotask(r),this[fe]()})}};let ye=G();function be(e,t){if(e[b]===0&&t.code!==`UND_ERR_INFO`&&t.code!==`UND_ERR_SOCKET`){n(e[I]===e[L]);let r=e[C].splice(e[L]);for(let n=0;n{e[U]({host:t,hostname:i,protocol:s,port:c,servername:e[h],localAddress:e[Y]},(e,t)=>{e?r(e):n(t)})});if(e.destroyed){a.destroy(r.on(`error`,_e),new d);return}n(r);try{e[X]=r.alpnProtocol===`h2`?await me(e,r):await pe(e,r)}catch(e){throw r.destroy().on(`error`,_e),e}e[D]=!1,r[K]=0,r[W]=e[W],r[g]=e,r[ee]=null,o.connected.hasSubscribers&&o.connected.publish({connectParams:{host:t,hostname:i,protocol:s,port:c,version:e[X]?.version,servername:e[h],localAddress:e[Y]},connector:e[U],socket:r}),e.emit(`connect`,e[m],[e])}catch(r){if(e.destroyed)return;if(e[D]=!1,o.connectError.hasSubscribers&&o.connectError.publish({connectParams:{host:t,hostname:i,protocol:s,port:c,version:e[X]?.version,servername:e[h],localAddress:e[Y]},connector:e[U],error:r}),r.code===`ERR_TLS_CERT_ALTNAME_INVALID`)for(n(e[b]===0);e[x]>0&&e[C][e[I]].servername===e[h];){let t=e[C][e[I]++];a.errorRequest(e,t,r)}else be(e,r);e.emit(`connectionError`,e[m],[e],r)}e[fe]()}function xe(e){e[j]=0,e.emit(`drain`,e[m],[e])}function Se(e,t){e[y]!==2&&(e[y]=2,Ce(e,t),e[y]=0,e[L]>256&&(e[C].splice(0,e[L]),e[I]-=e[L],e[L]=0))}function Ce(e,t){for(;;){if(e.destroyed){n(e[x]===0);return}if(e[ge]&&!e[S]){e[ge](),e[ge]=null;return}if(e[X]&&e[X].resume(),e[_])e[j]=2;else if(e[j]===2){t?(e[j]=1,queueMicrotask(()=>xe(e))):xe(e);continue}if(e[x]===0||e[b]>=(ve(e)||1))return;let r=e[C][e[I]];if(e[m].protocol===`https:`&&e[h]!==r.servername){if(e[b]>0)return;e[h]=r.servername,e[X]?.destroy(new u(`servername changed`),()=>{e[X]=null,Se(e)})}if(e[D])return;if(!e[X]){Q(e);return}if(e[X].destroyed||e[X].busy(r))return;!r.aborted&&e[X].write(r)?e[I]++:e[C].splice(e[I],1)}}t.exports=Z})),q=/* @__PURE__ */ f(((e,t)=>{let n=2047;var r=class{constructor(){this.bottom=0,this.top=0,this.list=Array(2048),this.next=null}isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&n)===this.bottom}push(e){this.list[this.top]=e,this.top=this.top+1&n}shift(){let e=this.list[this.bottom];return e===void 0?null:(this.list[this.bottom]=void 0,this.bottom=this.bottom+1&n,e)}};t.exports=class{constructor(){this.head=this.tail=new r}isEmpty(){return this.head.isEmpty()}push(e){this.head.isFull()&&(this.head=this.head.next=new r),this.head.push(e)}shift(){let e=this.tail,t=e.shift();return e.isEmpty()&&e.next!==null&&(this.tail=e.next),t}}})),se=/* @__PURE__ */ f(((e,t)=>{let{kFree:n,kConnected:r,kPending:i,kQueued:a,kRunning:o,kSize:s}=w(),c=Symbol(`pool`);t.exports=class{constructor(e){this[c]=e}get connected(){return this[c][r]}get free(){return this[c][n]}get pending(){return this[c][i]}get queued(){return this[c][a]}get running(){return this[c][o]}get size(){return this[c][s]}}})),J=/* @__PURE__ */ f(((e,t)=>{let n=M(),r=q(),{kConnected:i,kSize:a,kRunning:o,kPending:s,kQueued:c,kBusy:l,kFree:u,kUrl:d,kClose:f,kDestroy:p,kDispatch:m}=w(),h=se(),g=Symbol(`clients`),_=Symbol(`needDrain`),v=Symbol(`queue`),y=Symbol(`closed resolve`),b=Symbol(`onDrain`),x=Symbol(`onConnect`),S=Symbol(`onDisconnect`),C=Symbol(`onConnectionError`),T=Symbol(`get dispatcher`),E=Symbol(`add client`),D=Symbol(`remove client`),O=Symbol(`stats`);t.exports={PoolBase:class extends n{constructor(e){super(e),this[v]=new r,this[g]=[],this[c]=0;let t=this;this[b]=function(e,n){let r=t[v],i=!1;for(;!i;){let e=r.shift();if(!e)break;t[c]--,i=!this.dispatch(e.opts,e.handler)}this[_]=i,!this[_]&&t[_]&&(t[_]=!1,t.emit(`drain`,e,[t,...n])),t[y]&&r.isEmpty()&&Promise.all(t[g].map(e=>e.close())).then(t[y])},this[x]=(e,n)=>{t.emit(`connect`,e,[t,...n])},this[S]=(e,n,r)=>{t.emit(`disconnect`,e,[t,...n],r)},this[C]=(e,n,r)=>{t.emit(`connectionError`,e,[t,...n],r)},this[O]=new h(this)}get[l](){return this[_]}get[i](){return this[g].filter(e=>e[i]).length}get[u](){return this[g].filter(e=>e[i]&&!e[_]).length}get[s](){let e=this[c];for(let{[s]:t}of this[g])e+=t;return e}get[o](){let e=0;for(let{[o]:t}of this[g])e+=t;return e}get[a](){let e=this[c];for(let{[a]:t}of this[g])e+=t;return e}get stats(){return this[O]}async[f](){this[v].isEmpty()?await Promise.all(this[g].map(e=>e.close())):await new Promise(e=>{this[y]=e})}async[p](e){for(;;){let t=this[v].shift();if(!t)break;t.handler.onError(e)}await Promise.all(this[g].map(t=>t.destroy(e)))}[m](e,t){let n=this[T]();return n?n.dispatch(e,t)||(n[_]=!0,this[_]=!this[T]()):(this[_]=!0,this[v].push({opts:e,handler:t}),this[c]++),!this[_]}[E](e){return e.on(`drain`,this[b]).on(`connect`,this[x]).on(`disconnect`,this[S]).on(`connectionError`,this[C]),this[g].push(e),this[_]&&queueMicrotask(()=>{this[_]&&this[b](e[d],[this,e])}),this}[D](e){e.close(()=>{let t=this[g].indexOf(e);t!==-1&&this[g].splice(t,1)}),this[_]=this[g].some(e=>!e[_]&&e.closed!==!0&&e.destroyed!==!0)}},kClients:g,kNeedDrain:_,kAddClient:E,kRemoveClient:D,kGetDispatcher:T}})),ce=/* @__PURE__ */ f(((e,t)=>{let{PoolBase:n,kClients:r,kNeedDrain:i,kAddClient:a,kGetDispatcher:o}=J(),s=K(),{InvalidArgumentError:c}=T(),l=O(),{kUrl:u,kInterceptors:d}=w(),f=P(),p=Symbol(`options`),m=Symbol(`connections`),h=Symbol(`factory`);function g(e,t){return new s(e,t)}t.exports=class extends n{constructor(e,{connections:t,factory:n=g,connect:i,connectTimeout:a,tls:o,maxCachedSessions:s,socketPath:_,autoSelectFamily:v,autoSelectFamilyAttemptTimeout:y,allowH2:b,...x}={}){if(t!=null&&(!Number.isFinite(t)||t<0))throw new c(`invalid connections`);if(typeof n!=`function`)throw new c(`factory must be a function.`);if(i!=null&&typeof i!=`function`&&typeof i!=`object`)throw new c(`connect must be a function or an object`);typeof i!=`function`&&(i=f({...o,maxCachedSessions:s,allowH2:b,socketPath:_,timeout:a,...v?{autoSelectFamily:v,autoSelectFamilyAttemptTimeout:y}:void 0,...i})),super(x),this[d]=x.interceptors?.Pool&&Array.isArray(x.interceptors.Pool)?x.interceptors.Pool:[],this[m]=t||null,this[u]=l.parseOrigin(e),this[p]={...l.deepClone(x),connect:i,allowH2:b},this[p].interceptors=x.interceptors?{...x.interceptors}:void 0,this[h]=n,this.on(`connectionError`,(e,t,n)=>{for(let e of t){let t=this[r].indexOf(e);t!==-1&&this[r].splice(t,1)}})}[o](){for(let e of this[r])if(!e[i])return e;if(!this[m]||this[r].length{let{BalancedPoolMissingUpstreamError:n,InvalidArgumentError:r}=T(),{PoolBase:i,kClients:a,kNeedDrain:o,kAddClient:s,kRemoveClient:c,kGetDispatcher:l}=J(),u=ce(),{kUrl:d,kInterceptors:f}=w(),{parseOrigin:p}=O(),m=Symbol(`factory`),h=Symbol(`options`),g=Symbol(`kGreatestCommonDivisor`),_=Symbol(`kCurrentWeight`),v=Symbol(`kIndex`),y=Symbol(`kWeight`),b=Symbol(`kMaxWeightPerServer`),x=Symbol(`kErrorPenalty`);function S(e,t){if(e===0)return t;for(;t!==0;){let n=t;t=e%t,e=n}return e}function C(e,t){return new u(e,t)}t.exports=class extends i{constructor(e=[],{factory:t=C,...n}={}){if(super(),this[h]=n,this[v]=-1,this[_]=0,this[b]=this[h].maxWeightPerServer||100,this[x]=this[h].errorPenalty||15,Array.isArray(e)||(e=[e]),typeof t!=`function`)throw new r(`factory must be a function.`);this[f]=n.interceptors?.BalancedPool&&Array.isArray(n.interceptors.BalancedPool)?n.interceptors.BalancedPool:[],this[m]=t;for(let t of e)this.addUpstream(t);this._updateBalancedPoolStats()}addUpstream(e){let t=p(e).origin;if(this[a].find(e=>e[d].origin===t&&e.closed!==!0&&e.destroyed!==!0))return this;let n=this[m](t,Object.assign({},this[h]));this[s](n),n.on(`connect`,()=>{n[y]=Math.min(this[b],n[y]+this[x])}),n.on(`connectionError`,()=>{n[y]=Math.max(1,n[y]-this[x]),this._updateBalancedPoolStats()}),n.on(`disconnect`,(...e)=>{let t=e[2];t&&t.code===`UND_ERR_SOCKET`&&(n[y]=Math.max(1,n[y]-this[x]),this._updateBalancedPoolStats())});for(let e of this[a])e[y]=this[b];return this._updateBalancedPoolStats(),this}_updateBalancedPoolStats(){let e=0;for(let t=0;te[d].origin===t&&e.closed!==!0&&e.destroyed!==!0);return n&&this[c](n),this}get upstreams(){return this[a].filter(e=>e.closed!==!0&&e.destroyed!==!0).map(e=>e[d].origin)}[l](){if(this[a].length===0)throw new n;if(!this[a].find(e=>!e[o]&&e.closed!==!0&&e.destroyed!==!0)||this[a].map(e=>e[o]).reduce((e,t)=>e&&t,!0))return;let e=0,t=this[a].findIndex(e=>!e[o]);for(;e++this[a][t][y]&&!e[o]&&(t=this[v]),this[v]===0&&(this[_]=this[_]-this[g],this[_]<=0&&(this[_]=this[b])),e[y]>=this[_]&&!e[o])return e}return this[_]=this[a][t][y],this[v]=t,this[a][t]}}})),le=/* @__PURE__ */ f(((e,t)=>{let{InvalidArgumentError:n}=T(),{kClients:r,kRunning:i,kClose:a,kDestroy:o,kDispatch:s,kInterceptors:c}=w(),l=M(),u=ce(),d=K(),f=O(),p=G(),m=Symbol(`onConnect`),h=Symbol(`onDisconnect`),g=Symbol(`onConnectionError`),_=Symbol(`maxRedirections`),v=Symbol(`onDrain`),y=Symbol(`factory`),b=Symbol(`options`);function x(e,t){return t&&t.connections===1?new d(e,t):new u(e,t)}t.exports=class extends l{constructor({factory:e=x,maxRedirections:t=0,connect:i,tls:a,...o}={}){if(typeof e!=`function`)throw new n(`factory must be a function.`);if(i!=null&&typeof i!=`function`&&typeof i!=`object`)throw new n(`connect must be a function or an object`);if(!Number.isInteger(t)||t<0)throw new n(`maxRedirections must be a positive number`);super(o),i&&typeof i!=`function`&&(i={...i}),a&&typeof a!=`function`&&(a={...a}),this[c]=o.interceptors?.Agent&&Array.isArray(o.interceptors.Agent)?o.interceptors.Agent:[p({maxRedirections:t})],this[b]={...f.deepClone(o),connect:i,tls:a},this[b].interceptors=o.interceptors?{...o.interceptors}:void 0,this[_]=t,this[y]=e,this[r]=/* @__PURE__ */ new Map,this[v]=(e,t)=>{this.emit(`drain`,e,[this,...t])},this[m]=(e,t)=>{this.emit(`connect`,e,[this,...t])},this[h]=(e,t,n)=>{this.emit(`disconnect`,e,[this,...t],n)},this[g]=(e,t,n)=>{this.emit(`connectionError`,e,[this,...t],n)}}get[i](){let e=0;for(let t of this[r].values())e+=t[i];return e}[s](e,t){let i;if(e.origin&&(typeof e.origin==`string`||e.origin instanceof URL))i=String(e.origin);else throw new n(`opts.origin must be a non-empty string or URL.`);let a=this[r].get(i);return a||(a=this[y](e.origin,this[b]).on(`drain`,this[v]).on(`connect`,this[m]).on(`disconnect`,this[h]).on(`connectionError`,this[g]),this[r].set(i,a)),a.dispatch(e,t)}async[a](){let e=[];for(let t of this[r].values())e.push(t.close());this[r].clear(),await Promise.all(e)}async[o](e){let t=[];for(let n of this[r].values())t.push(n.destroy(e));this[r].clear(),await Promise.all(t)}}})),ue=/* @__PURE__ */ f(((e,t)=>{let{kProxy:n,kClose:r,kDestroy:i,kDispatch:a,kInterceptors:o}=w(),{URL:s}=p(`node:url`),c=le(),l=ce(),u=M(),{InvalidArgumentError:d,RequestAbortedError:f,SecureProxyConnectionError:m}=T(),h=P(),g=K(),_=Symbol(`proxy agent`),v=Symbol(`proxy client`),y=Symbol(`proxy headers`),b=Symbol(`request tls settings`),x=Symbol(`proxy tls settings`),S=Symbol(`connect endpoint function`),C=Symbol(`tunnel proxy`);function E(e){return e===`https:`?443:80}function D(e,t){return new l(e,t)}let O=()=>{};function k(e,t){return t.connections===1?new g(e,t):new l(e,t)}var A=class extends u{#e;constructor(e,{headers:t={},connect:n,factory:r}){if(super(),!e)throw new d(`Proxy URL is mandatory`);this[y]=t,this.#e=r?r(e,{connect:n}):new g(e,{connect:n})}[a](e,t){let n=t.onHeaders;t.onHeaders=function(e,r,i){e===407?typeof t.onError==`function`&&t.onError(new d(`Proxy Authentication Required (407)`)):n&&n.call(this,e,r,i)};let{origin:r,path:i=`/`,headers:o={}}=e;if(e.path=r+i,!(`host`in o)&&!(`Host`in o)){let{host:e}=new s(r);o.host=e}return e.headers={...this[y],...o},this.#e[a](e,t)}async[r](){return this.#e.close()}async[i](e){return this.#e.destroy(e)}},j=class extends u{constructor(e){if(super(),!e||typeof e==`object`&&!(e instanceof s)&&!e.uri)throw new d(`Proxy uri is mandatory`);let{clientFactory:t=D}=e;if(typeof t!=`function`)throw new d(`Proxy opts.clientFactory must be a function.`);let{proxyTunnel:r=!0}=e,i=this.#e(e),{href:a,origin:l,port:u,protocol:p,username:g,password:w,hostname:T}=i;if(this[n]={uri:a,protocol:p},this[o]=e.interceptors?.ProxyAgent&&Array.isArray(e.interceptors.ProxyAgent)?e.interceptors.ProxyAgent:[],this[b]=e.requestTls,this[x]=e.proxyTls,this[y]=e.headers||{},this[C]=r,e.auth&&e.token)throw new d(`opts.auth cannot be used in combination with opts.token`);e.auth?this[y][`proxy-authorization`]=`Basic ${e.auth}`:e.token?this[y][`proxy-authorization`]=e.token:g&&w&&(this[y][`proxy-authorization`]=`Basic ${Buffer.from(`${decodeURIComponent(g)}:${decodeURIComponent(w)}`).toString(`base64`)}`);let j=h({...e.proxyTls});this[S]=h({...e.requestTls});let M=e.factory||k,N=(e,t)=>{let{protocol:r}=new s(e);return!this[C]&&r===`http:`&&this[n].protocol===`http:`?new A(this[n].uri,{headers:this[y],connect:j,factory:M}):M(e,t)};this[v]=t(i,{connect:j}),this[_]=new c({...e,factory:N,connect:async(e,t)=>{let n=e.host;e.port||(n+=`:${E(e.protocol)}`);try{let{socket:r,statusCode:i}=await this[v].connect({origin:l,port:u,path:n,signal:e.signal,headers:{...this[y],host:e.host},servername:this[x]?.servername||T});if(i!==200&&(r.on(`error`,O).destroy(),t(new f(`Proxy response (${i}) !== 200 when HTTP Tunneling`))),e.protocol!==`https:`){t(null,r);return}let a;a=this[b]?this[b].servername:e.servername,this[S]({...e,servername:a,httpSocket:r},t)}catch(e){e.code===`ERR_TLS_CERT_ALTNAME_INVALID`?t(new m(e)):t(e)}}})}dispatch(e,t){let n=N(e.headers);if(F(n),n&&!(`host`in n)&&!(`Host`in n)){let{host:t}=new s(e.origin);n.host=t}return this[_].dispatch({...e,headers:n},t)}#e(e){return typeof e==`string`?new s(e):e instanceof s?e:new s(e.uri)}async[r](){await this[_].close(),await this[v].close()}async[i](){await this[_].destroy(),await this[v].destroy()}};function N(e){if(Array.isArray(e)){let t={};for(let n=0;ne.toLowerCase()===`proxy-authorization`))throw new d(`Proxy-Authorization should be sent in ProxyAgent constructor`)}t.exports=j})),X=/* @__PURE__ */ f(((e,t)=>{let n=M(),{kClose:r,kDestroy:i,kClosed:a,kDestroyed:o,kDispatch:s,kNoProxyAgent:c,kHttpProxyAgent:l,kHttpsProxyAgent:u}=w(),d=ue(),f=le(),p={"http:":80,"https:":443},m=!1;t.exports=class extends n{#e=null;#t=null;#n=null;constructor(e={}){super(),this.#n=e,m||(m=!0,process.emitWarning(`EnvHttpProxyAgent is experimental, expect them to change at any time.`,{code:`UNDICI-EHPA`}));let{httpProxy:t,httpsProxy:n,noProxy:r,...i}=e;this[c]=new f(i);let a=t??process.env.http_proxy??process.env.HTTP_PROXY;a?this[l]=new d({...i,uri:a}):this[l]=this[c];let o=n??process.env.https_proxy??process.env.HTTPS_PROXY;o?this[u]=new d({...i,uri:o}):this[u]=this[l],this.#a()}[s](e,t){let n=new URL(e.origin);return this.#r(n).dispatch(e,t)}async[r](){await this[c].close(),this[l][a]||await this[l].close(),this[u][a]||await this[u].close()}async[i](e){await this[c].destroy(e),this[l][o]||await this[l].destroy(e),this[u][o]||await this[u].destroy(e)}#r(e){let{protocol:t,host:n,port:r}=e;return n=n.replace(/:\d*$/,``).toLowerCase(),r=Number.parseInt(r,10)||p[t]||0,this.#i(n,r)?t===`https:`?this[u]:this[l]:this[c]}#i(e,t){if(this.#o&&this.#a(),this.#t.length===0)return!0;if(this.#e===`*`)return!1;for(let n=0;n{let n=p(`node:assert`),{kRetryHandlerDefaultRetry:r}=w(),{RequestRetryError:i}=T(),{isDisturbed:a,parseHeaders:o,parseRangeHeader:s,wrapRequestBody:c}=O();function l(e){let t=Date.now();return new Date(e).getTime()-t}function u(e,t,n,r){let a=e[`content-length`];if(a==null||!Number.isFinite(t.start)||!Number.isFinite(t.end))return null;let o=Number(a),s=t.end-t.start+1;return!Number.isFinite(o)||o!==s?new i(`Content-Length mismatch`,n,{headers:e,data:{count:r}}):null}t.exports=class e{constructor(t,n){let{retryOptions:i,...a}=t,{retry:o,maxRetries:s,maxTimeout:l,minTimeout:u,timeoutFactor:d,methods:f,errorCodes:p,retryAfter:m,statusCodes:h}=i??{};this.dispatch=n.dispatch,this.handler=n.handler,this.opts={...a,body:c(t.body)},this.abort=null,this.aborted=!1,this.retryOpts={retry:o??e[r],retryAfter:m??!0,maxTimeout:l??3e4,minTimeout:u??500,timeoutFactor:d??2,maxRetries:s??5,methods:f??[`GET`,`HEAD`,`OPTIONS`,`PUT`,`DELETE`,`TRACE`],statusCodes:h??[500,502,503,504,429],errorCodes:p??[`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ENETDOWN`,`ENETUNREACH`,`EHOSTDOWN`,`EHOSTUNREACH`,`EPIPE`,`UND_ERR_SOCKET`]},this.retryCount=0,this.retryCountCheckpoint=0,this.start=0,this.end=null,this.etag=null,this.resume=null,this.headersSent=!1,this.handler.onConnect(e=>{this.aborted=!0,this.abort?this.abort(e):this.reason=e})}checkpointResponseEnd(e,t){if(this.end==null&&this.opts.method!==`HEAD`){let t=e[`content-length`];this.end=t==null?null:Number(t)-1,n(this.end==null||Number.isFinite(this.end),`invalid content-length`)}this.resume=this.end==null?null:t}onRequestSent(){this.handler.onRequestSent&&this.handler.onRequestSent()}onUpgrade(e,t,n){this.handler.onUpgrade&&this.handler.onUpgrade(e,t,n)}onConnect(e){this.aborted?e(this.reason):this.abort=e}onBodySent(e){if(this.handler.onBodySent)return this.handler.onBodySent(e)}static[r](e,{state:t,opts:n},r){let{statusCode:i,code:a,headers:o}=e,{method:s,retryOptions:c}=n,{maxRetries:u,minTimeout:d,maxTimeout:f,timeoutFactor:p,statusCodes:m,errorCodes:h,methods:g}=c,{counter:_}=t;if(a&&a!==`UND_ERR_REQ_RETRY`&&!h.includes(a)||Array.isArray(g)&&!g.includes(s)||i!=null&&Array.isArray(m)&&!m.includes(i)||_>u){r(e);return}let v=o?.[`retry-after`];v&&=(v=Number(v),Number.isNaN(v)?l(v):v*1e3);let y=Math.min(v>0?v:d*p**(_-1),f);setTimeout(()=>r(null),y)}onHeaders(e,t,r,a){let c=o(t);if(this.retryCount+=1,e>=300)return!this.headersSent&&this.retryOpts.statusCodes.includes(e)===!1?(this.headersSent=!0,this.checkpointResponseEnd(c,r),this.handler.onHeaders(e,t,r,a)):(this.abort(new i(`Request failed`,e,{headers:c,data:{count:this.retryCount}})),!1);if(this.resume!=null){if(this.resume=null,e!==206&&(this.start>0||e!==200))return this.abort(new i(`server does not support the range header and the payload was partially consumed`,e,{headers:c,data:{count:this.retryCount}})),!1;let t=s(c[`content-range`]);if(!t)return this.abort(new i(`Content-Range mismatch`,e,{headers:c,data:{count:this.retryCount}})),!1;if(this.etag!=null&&this.etag!==c.etag)return this.abort(new i(`ETag mismatch`,e,{headers:c,data:{count:this.retryCount}})),!1;let n=u(c,t,e,this.retryCount);if(n!=null)return this.abort(n),!1;let{start:a,size:o,end:l=o-1}=t;return this.start!==a||this.end!=null&&this.end!==l?(this.abort(new i(`Content-Range mismatch`,e,{headers:c,data:{count:this.retryCount}})),!1):(this.resume=r,!0)}if(this.end==null){if(e===206){let i=s(c[`content-range`]);if(i==null)return this.headersSent=!0,this.handler.onHeaders(e,t,r,a);let o=u(c,i,e,this.retryCount);if(o!=null)return this.abort(o),!1;let{start:l,size:d,end:f=d-1}=i;n(l!=null&&Number.isFinite(l),`content-range mismatch`),n(f!=null&&Number.isFinite(f),`invalid content-length`),this.start=l,this.end=f}if(this.end==null){let e=c[`content-length`];this.end=e==null?null:Number(e)-1}return n(Number.isFinite(this.start)),n(this.end==null||Number.isFinite(this.end),`invalid content-length`),this.resume=r,this.headersSent=!0,this.etag=c.etag==null?null:c.etag,this.etag!=null&&this.etag.startsWith(`W/`)&&(this.etag=null),this.handler.onHeaders(e,t,r,a)}let l=new i(`Request failed`,e,{headers:c,data:{count:this.retryCount}});return this.abort(l),!1}onData(e){return this.start+=e.length,this.handler.onData(e)}onComplete(e){return this.retryCount=0,this.handler.onComplete(e)}onError(e){if(this.aborted||a(this.opts.body)||this.headersSent&&this.resume==null)return this.handler.onError(e);this.retryCount-this.retryCountCheckpoint>0?this.retryCount=this.retryCountCheckpoint+(this.retryCount-this.retryCountCheckpoint):this.retryCount+=1,this.retryOpts.retry(e,{state:{counter:this.retryCount},opts:{retryOptions:this.retryOpts,...this.opts}},t.bind(this));function t(e){if(e!=null||this.aborted||a(this.opts.body))return this.handler.onError(e);if(this.start!==0){let e={range:`bytes=${this.start}-${this.end??``}`};this.etag!=null&&(e[`if-match`]=this.etag),this.opts={...this.opts,headers:{...this.opts.headers,...e}}}try{this.retryCountCheckpoint=this.retryCount,this.dispatch(this.opts,this)}catch(e){this.handler.onError(e)}}}}})),fe=/* @__PURE__ */ f(((e,t)=>{let n=j(),r=de();t.exports=class extends n{#e=null;#t=null;constructor(e,t={}){super(t),this.#e=e,this.#t=t}dispatch(e,t){let n=new r({...e,retryOptions:this.#t},{dispatch:this.#e.dispatch.bind(this.#e),handler:t});return this.#e.dispatch(e,n)}close(){return this.#e.close()}destroy(){return this.#e.destroy()}}})),pe=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),{Readable:r}=p(`node:stream`),{RequestAbortedError:i,NotSupportedError:a,InvalidArgumentError:o,AbortError:s}=T(),c=O(),{ReadableStreamFrom:l}=O(),u=Symbol(`kConsume`),d=Symbol(`kReading`),f=Symbol(`kBody`),m=Symbol(`kAbort`),h=Symbol(`kContentType`),g=Symbol(`kContentLength`),_=()=>{};var v=class extends r{constructor({resume:e,abort:t,contentType:n=``,contentLength:r,highWaterMark:i=65536}){super({autoDestroy:!0,read:e,highWaterMark:i}),this._readableState.dataEmitted=!1,this[m]=t,this[u]=null,this[f]=null,this[h]=n,this[g]=r,this[d]=!1}destroy(e){return!e&&!this._readableState.endEmitted&&(e=new i),e&&this[m](),super.destroy(e)}_destroy(e,t){this[d]?t(e):setImmediate(()=>{t(e)})}on(e,...t){return(e===`data`||e===`readable`)&&(this[d]=!0),super.on(e,...t)}addListener(e,...t){return this.on(e,...t)}off(e,...t){let n=super.off(e,...t);return(e===`data`||e===`readable`)&&(this[d]=this.listenerCount(`data`)>0||this.listenerCount(`readable`)>0),n}removeListener(e,...t){return this.off(e,...t)}push(e){return this[u]&&e!==null?(D(this[u],e),!this[d]||super.push(e)):super.push(e)}async text(){return x(this,`text`)}async json(){return x(this,`json`)}async blob(){return x(this,`blob`)}async bytes(){return x(this,`bytes`)}async arrayBuffer(){return x(this,`arrayBuffer`)}async formData(){throw new a}get bodyUsed(){return c.isDisturbed(this)}get body(){return this[f]||(this[f]=l(this),this[u]&&(this[f].getReader(),n(this[f].locked))),this[f]}async dump(e){let t=Number.isFinite(e?.limit)?e.limit:131072,n=e?.signal;if(n!=null&&(typeof n!=`object`||!(`aborted`in n)))throw new o(`signal must be an AbortSignal`);return n?.throwIfAborted(),this._readableState.closeEmitted?null:await new Promise((e,r)=>{this[g]>t&&this.destroy(new s);let i=()=>{this.destroy(n.reason??new s)};n?.addEventListener(`abort`,i),this.on(`close`,function(){n?.removeEventListener(`abort`,i),n?.aborted?r(n.reason??new s):e(null)}).on(`error`,_).on(`data`,function(e){t-=e.length,t<=0&&this.destroy()}).resume()})}};function y(e){return e[f]&&e[f].locked===!0||e[u]}function b(e){return c.isDisturbed(e)||y(e)}async function x(e,t){return n(!e[u]),new Promise((n,r)=>{if(b(e)){let t=e._readableState;t.destroyed&&t.closeEmitted===!1?e.on(`error`,e=>{r(e)}).on(`close`,()=>{r(/* @__PURE__ */ TypeError(`unusable`))}):r(t.errored??/* @__PURE__ */ TypeError(`unusable`))}else queueMicrotask(()=>{e[u]={type:t,stream:e,resolve:n,reject:r,length:0,body:[]},e.on(`error`,function(e){k(this[u],e)}).on(`close`,function(){this[u].body!==null&&k(this[u],new i)}),S(e[u])})})}function S(e){if(e.body===null)return;let{_readableState:t}=e.stream;if(t.bufferIndex){let n=t.bufferIndex,r=t.buffer.length;for(let i=n;i2&&n[0]===239&&n[1]===187&&n[2]===191?3:0;return n.utf8Slice(i,r)}function w(e,t){if(e.length===0||t===0)return/* @__PURE__ */ new Uint8Array;if(e.length===1)return new Uint8Array(e[0]);let n=new Uint8Array(Buffer.allocUnsafeSlow(t).buffer),r=0;for(let t=0;t{let n=p(`node:assert`),{ResponseStatusCodeError:r}=T(),{chunksDecode:i}=pe();async function a({callback:e,body:t,contentType:a,statusCode:c,statusMessage:l,headers:u}){n(t);let d=[],f=0;try{for await(let e of t)if(d.push(e),f+=e.length,f>131072){d=[],f=0;break}}catch{d=[],f=0}let p=`Response status code ${c}${l?`: ${l}`:``}`;if(c===204||!a||!f){queueMicrotask(()=>e(new r(p,c,u)));return}let m=Error.stackTraceLimit;Error.stackTraceLimit=0;let h;try{o(a)?h=JSON.parse(i(d,f)):s(a)&&(h=i(d,f))}catch{}finally{Error.stackTraceLimit=m}queueMicrotask(()=>e(new r(p,c,u,h)))}let o=e=>e.length>15&&e[11]===`/`&&e[0]===`a`&&e[1]===`p`&&e[2]===`p`&&e[3]===`l`&&e[4]===`i`&&e[5]===`c`&&e[6]===`a`&&e[7]===`t`&&e[8]===`i`&&e[9]===`o`&&e[10]===`n`&&e[12]===`j`&&e[13]===`s`&&e[14]===`o`&&e[15]===`n`,s=e=>e.length>4&&e[4]===`/`&&e[0]===`t`&&e[1]===`e`&&e[2]===`x`&&e[3]===`t`;t.exports={getResolveErrorBodyCallback:a,isContentTypeApplicationJson:o,isContentTypeText:s}})),he=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),{Readable:r}=pe(),{InvalidArgumentError:i,RequestAbortedError:a}=T(),o=O(),{getResolveErrorBodyCallback:s}=me(),{AsyncResource:c}=p(`node:async_hooks`);var l=class extends c{constructor(e,t){if(!e||typeof e!=`object`)throw new i(`invalid opts`);let{signal:n,method:r,opaque:s,body:c,onInfo:l,responseHeaders:u,throwOnError:d,highWaterMark:f}=e;try{if(typeof t!=`function`)throw new i(`invalid callback`);if(f&&(typeof f!=`number`||f<0))throw new i(`invalid highWaterMark`);if(n&&typeof n.on!=`function`&&typeof n.addEventListener!=`function`)throw new i(`signal must be an EventEmitter or EventTarget`);if(r===`CONNECT`)throw new i(`invalid method`);if(l&&typeof l!=`function`)throw new i(`invalid onInfo callback`);super(`UNDICI_REQUEST`)}catch(e){throw o.isStream(c)&&o.destroy(c.on(`error`,o.nop),e),e}this.method=r,this.responseHeaders=u||null,this.opaque=s||null,this.callback=t,this.res=null,this.abort=null,this.body=c,this.trailers={},this.context=null,this.onInfo=l||null,this.throwOnError=d,this.highWaterMark=f,this.signal=n,this.reason=null,this.removeAbortListener=null,o.isStream(c)&&c.on(`error`,e=>{this.onError(e)}),this.signal&&(this.signal.aborted?this.reason=this.signal.reason??new a:this.removeAbortListener=o.addAbortListener(this.signal,()=>{this.reason=this.signal.reason??new a,this.res?o.destroy(this.res.on(`error`,o.nop),this.reason):this.abort&&this.abort(this.reason),this.removeAbortListener&&=(this.res?.off(`close`,this.removeAbortListener),this.removeAbortListener(),null)}))}onConnect(e,t){this.reason?e(this.reason):(n(this.callback),this.abort=e,this.context=t)}onHeaders(e,t,n,i){let{callback:a,opaque:c,abort:l,context:u,responseHeaders:d,highWaterMark:f}=this,p=d===`raw`?o.parseRawHeaders(t):o.parseHeaders(t);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:p});return}let m=d===`raw`?o.parseHeaders(t):p,h=m[`content-type`],g=m[`content-length`],_=new r({resume:n,abort:l,contentType:h,contentLength:this.method!==`HEAD`&&g?Number(g):null,highWaterMark:f});this.removeAbortListener&&_.on(`close`,this.removeAbortListener),this.callback=null,this.res=_,a!==null&&(this.throwOnError&&e>=400?this.runInAsyncScope(s,null,{callback:a,body:_,contentType:h,statusCode:e,statusMessage:i,headers:p}):this.runInAsyncScope(a,null,null,{statusCode:e,headers:p,trailers:this.trailers,opaque:c,body:_,context:u}))}onData(e){return this.res.push(e)}onComplete(e){o.parseHeaders(e,this.trailers),this.res.push(null)}onError(e){let{res:t,callback:n,body:r,opaque:i}=this;n&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(n,null,e,{opaque:i})})),t&&(this.res=null,queueMicrotask(()=>{o.destroy(t,e)})),r&&(this.body=null,o.destroy(r,e)),this.removeAbortListener&&=(t?.off(`close`,this.removeAbortListener),this.removeAbortListener(),null)}};function u(e,t){if(t===void 0)return new Promise((t,n)=>{u.call(this,e,(e,r)=>e?n(e):t(r))});try{this.dispatch(e,new l(e,t))}catch(n){if(typeof t!=`function`)throw n;let r=e?.opaque;queueMicrotask(()=>t(n,{opaque:r}))}}t.exports=u,t.exports.RequestHandler=l})),ge=/* @__PURE__ */ f(((e,t)=>{let{addAbortListener:n}=O(),{RequestAbortedError:r}=T(),i=Symbol(`kListener`),a=Symbol(`kSignal`);function o(e){e.abort?e.abort(e[a]?.reason):e.reason=e[a]?.reason??new r,c(e)}function s(e,t){e.reason=null,e[a]=null,e[i]=null,t&&(t.aborted?o(e):(e[a]=t,e[i]=()=>{o(e)},n(e[a],e[i])))}function c(e){e[a]&&(`removeEventListener`in e[a]?e[a].removeEventListener(`abort`,e[i]):e[a].removeListener(`abort`,e[i]),e[a]=null,e[i]=null)}t.exports={addSignal:s,removeSignal:c}})),_e=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),{finished:r,PassThrough:i}=p(`node:stream`),{InvalidArgumentError:a,InvalidReturnValueError:o}=T(),s=O(),{getResolveErrorBodyCallback:c}=me(),{AsyncResource:l}=p(`node:async_hooks`),{addSignal:u,removeSignal:d}=ge();var f=class extends l{constructor(e,t,n){if(!e||typeof e!=`object`)throw new a(`invalid opts`);let{signal:r,method:i,opaque:o,body:c,onInfo:l,responseHeaders:d,throwOnError:f}=e;try{if(typeof n!=`function`)throw new a(`invalid callback`);if(typeof t!=`function`)throw new a(`invalid factory`);if(r&&typeof r.on!=`function`&&typeof r.addEventListener!=`function`)throw new a(`signal must be an EventEmitter or EventTarget`);if(i===`CONNECT`)throw new a(`invalid method`);if(l&&typeof l!=`function`)throw new a(`invalid onInfo callback`);super(`UNDICI_STREAM`)}catch(e){throw s.isStream(c)&&s.destroy(c.on(`error`,s.nop),e),e}this.responseHeaders=d||null,this.opaque=o||null,this.factory=t,this.callback=n,this.res=null,this.abort=null,this.context=null,this.trailers=null,this.body=c,this.onInfo=l||null,this.throwOnError=f||!1,s.isStream(c)&&c.on(`error`,e=>{this.onError(e)}),u(this,r)}onConnect(e,t){this.reason?e(this.reason):(n(this.callback),this.abort=e,this.context=t)}onHeaders(e,t,n,a){let{factory:l,opaque:u,context:d,callback:f,responseHeaders:p}=this,m=p===`raw`?s.parseRawHeaders(t):s.parseHeaders(t);if(e<200){this.onInfo&&this.onInfo({statusCode:e,headers:m});return}this.factory=null;let h;if(this.throwOnError&&e>=400){let n=(p===`raw`?s.parseHeaders(t):m)[`content-type`];h=new i,this.callback=null,this.runInAsyncScope(c,null,{callback:f,body:h,contentType:n,statusCode:e,statusMessage:a,headers:m})}else{if(l===null)return;if(h=this.runInAsyncScope(l,null,{statusCode:e,headers:m,opaque:u,context:d}),!h||typeof h.write!=`function`||typeof h.end!=`function`||typeof h.on!=`function`)throw new o(`expected Writable`);r(h,{readable:!1},e=>{let{callback:t,res:n,opaque:r,trailers:i,abort:a}=this;this.res=null,(e||!n.readable)&&s.destroy(n,e),this.callback=null,this.runInAsyncScope(t,null,e||null,{opaque:r,trailers:i}),e&&a()})}return h.on(`drain`,n),this.res=h,(h.writableNeedDrain===void 0?h._writableState?.needDrain:h.writableNeedDrain)!==!0}onData(e){let{res:t}=this;return!t||t.write(e)}onComplete(e){let{res:t}=this;d(this),t&&(this.trailers=s.parseHeaders(e),t.end())}onError(e){let{res:t,callback:n,opaque:r,body:i}=this;d(this),this.factory=null,t?(this.res=null,s.destroy(t,e)):n&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(n,null,e,{opaque:r})})),i&&(this.body=null,s.destroy(i,e))}};function m(e,t,n){if(n===void 0)return new Promise((n,r)=>{m.call(this,e,t,(e,t)=>e?r(e):n(t))});try{this.dispatch(e,new f(e,t,n))}catch(t){if(typeof n!=`function`)throw t;let r=e?.opaque;queueMicrotask(()=>n(t,{opaque:r}))}}t.exports=m})),ve=/* @__PURE__ */ f(((e,t)=>{let{Readable:n,Duplex:r,PassThrough:i}=p(`node:stream`),{InvalidArgumentError:a,InvalidReturnValueError:o,RequestAbortedError:s}=T(),c=O(),{AsyncResource:l}=p(`node:async_hooks`),{addSignal:u,removeSignal:d}=ge(),f=p(`node:assert`),m=Symbol(`resume`);var h=class extends n{constructor(){super({autoDestroy:!0}),this[m]=null}_read(){let{[m]:e}=this;e&&(this[m]=null,e())}_destroy(e,t){this._read(),t(e)}},g=class extends n{constructor(e){super({autoDestroy:!0}),this[m]=e}_read(){this[m]()}_destroy(e,t){!e&&!this._readableState.endEmitted&&(e=new s),t(e)}},_=class extends l{constructor(e,t){if(!e||typeof e!=`object`)throw new a(`invalid opts`);if(typeof t!=`function`)throw new a(`invalid handler`);let{signal:n,method:i,opaque:o,onInfo:l,responseHeaders:f}=e;if(n&&typeof n.on!=`function`&&typeof n.addEventListener!=`function`)throw new a(`signal must be an EventEmitter or EventTarget`);if(i===`CONNECT`)throw new a(`invalid method`);if(l&&typeof l!=`function`)throw new a(`invalid onInfo callback`);super(`UNDICI_PIPELINE`),this.opaque=o||null,this.responseHeaders=f||null,this.handler=t,this.abort=null,this.context=null,this.onInfo=l||null,this.req=new h().on(`error`,c.nop),this.ret=new r({readableObjectMode:e.objectMode,autoDestroy:!0,read:()=>{let{body:e}=this;e?.resume&&e.resume()},write:(e,t,n)=>{let{req:r}=this;r.push(e,t)||r._readableState.destroyed?n():r[m]=n},destroy:(e,t)=>{let{body:n,req:r,res:i,ret:a,abort:o}=this;!e&&!a._readableState.endEmitted&&(e=new s),o&&e&&o(),c.destroy(n,e),c.destroy(r,e),c.destroy(i,e),d(this),t(e)}}).on(`prefinish`,()=>{let{req:e}=this;e.push(null)}),this.res=null,u(this,n)}onConnect(e,t){let{ret:n,res:r}=this;this.reason?e(this.reason):(f(!r,`pipeline cannot be retried`),f(!n.destroyed),this.abort=e,this.context=t)}onHeaders(e,t,n){let{opaque:r,handler:i,context:a}=this;if(e<200){if(this.onInfo){let n=this.responseHeaders===`raw`?c.parseRawHeaders(t):c.parseHeaders(t);this.onInfo({statusCode:e,headers:n})}return}this.res=new g(n);let l;try{this.handler=null;let n=this.responseHeaders===`raw`?c.parseRawHeaders(t):c.parseHeaders(t);l=this.runInAsyncScope(i,null,{statusCode:e,headers:n,opaque:r,body:this.res,context:a})}catch(e){throw this.res.on(`error`,c.nop),e}if(!l||typeof l.on!=`function`)throw new o(`expected Readable`);l.on(`data`,e=>{let{ret:t,body:n}=this;!t.push(e)&&n.pause&&n.pause()}).on(`error`,e=>{let{ret:t}=this;c.destroy(t,e)}).on(`end`,()=>{let{ret:e}=this;e.push(null)}).on(`close`,()=>{let{ret:e}=this;e._readableState.ended||c.destroy(e,new s)}),this.body=l}onData(e){let{res:t}=this;return t.push(e)}onComplete(e){let{res:t}=this;t.push(null)}onError(e){let{ret:t}=this;this.handler=null,c.destroy(t,e)}};function v(e,t){try{let n=new _(e,t);return this.dispatch({...e,body:n.req},n),n.ret}catch(e){return new i().destroy(e)}}t.exports=v})),Z=/* @__PURE__ */ f(((e,t)=>{let{InvalidArgumentError:n,SocketError:r}=T(),{AsyncResource:i}=p(`node:async_hooks`),a=O(),{addSignal:o,removeSignal:s}=ge(),c=p(`node:assert`);var l=class extends i{constructor(e,t){if(!e||typeof e!=`object`)throw new n(`invalid opts`);if(typeof t!=`function`)throw new n(`invalid callback`);let{signal:r,opaque:i,responseHeaders:a}=e;if(r&&typeof r.on!=`function`&&typeof r.addEventListener!=`function`)throw new n(`signal must be an EventEmitter or EventTarget`);super(`UNDICI_UPGRADE`),this.responseHeaders=a||null,this.opaque=i||null,this.callback=t,this.abort=null,this.context=null,o(this,r)}onConnect(e,t){this.reason?e(this.reason):(c(this.callback),this.abort=e,this.context=null)}onHeaders(){throw new r(`bad upgrade`,null)}onUpgrade(e,t,n){c(e===101);let{callback:r,opaque:i,context:o}=this;s(this),this.callback=null;let l=this.responseHeaders===`raw`?a.parseRawHeaders(t):a.parseHeaders(t);this.runInAsyncScope(r,null,null,{headers:l,socket:n,opaque:i,context:o})}onError(e){let{callback:t,opaque:n}=this;s(this),t&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(t,null,e,{opaque:n})}))}};function u(e,t){if(t===void 0)return new Promise((t,n)=>{u.call(this,e,(e,r)=>e?n(e):t(r))});try{let n=new l(e,t);this.dispatch({...e,method:e.method||`GET`,upgrade:e.protocol||`Websocket`},n)}catch(n){if(typeof t!=`function`)throw n;let r=e?.opaque;queueMicrotask(()=>t(n,{opaque:r}))}}t.exports=u})),ye=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),{AsyncResource:r}=p(`node:async_hooks`),{InvalidArgumentError:i,SocketError:a}=T(),o=O(),{addSignal:s,removeSignal:c}=ge();var l=class extends r{constructor(e,t){if(!e||typeof e!=`object`)throw new i(`invalid opts`);if(typeof t!=`function`)throw new i(`invalid callback`);let{signal:n,opaque:r,responseHeaders:a}=e;if(n&&typeof n.on!=`function`&&typeof n.addEventListener!=`function`)throw new i(`signal must be an EventEmitter or EventTarget`);super(`UNDICI_CONNECT`),this.opaque=r||null,this.responseHeaders=a||null,this.callback=t,this.abort=null,s(this,n)}onConnect(e,t){this.reason?e(this.reason):(n(this.callback),this.abort=e,this.context=t)}onHeaders(){throw new a(`bad connect`,null)}onUpgrade(e,t,n){let{callback:r,opaque:i,context:a}=this;c(this),this.callback=null;let s=t;s!=null&&(s=this.responseHeaders===`raw`?o.parseRawHeaders(t):o.parseHeaders(t)),this.runInAsyncScope(r,null,null,{statusCode:e,headers:s,socket:n,opaque:i,context:a})}onError(e){let{callback:t,opaque:n}=this;c(this),t&&(this.callback=null,queueMicrotask(()=>{this.runInAsyncScope(t,null,e,{opaque:n})}))}};function u(e,t){if(t===void 0)return new Promise((t,n)=>{u.call(this,e,(e,r)=>e?n(e):t(r))});try{let n=new l(e,t);this.dispatch({...e,method:`CONNECT`},n)}catch(n){if(typeof t!=`function`)throw n;let r=e?.opaque;queueMicrotask(()=>t(n,{opaque:r}))}}t.exports=u})),be=/* @__PURE__ */ f(((e,t)=>{t.exports.request=he(),t.exports.stream=_e(),t.exports.pipeline=ve(),t.exports.upgrade=Z(),t.exports.connect=ye()})),Q=/* @__PURE__ */ f(((e,t)=>{let{UndiciError:n}=T(),r=Symbol.for(`undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED`);t.exports={MockNotMatchedError:class e extends n{constructor(t){super(t),Error.captureStackTrace(this,e),this.name=`MockNotMatchedError`,this.message=t||`The request does not match any registered mock dispatches`,this.code=`UND_MOCK_ERR_MOCK_NOT_MATCHED`}static[Symbol.hasInstance](e){return e&&e[r]===!0}[r]=!0}}})),xe=/* @__PURE__ */ f(((e,t)=>{t.exports={kAgent:Symbol(`agent`),kOptions:Symbol(`options`),kFactory:Symbol(`factory`),kDispatches:Symbol(`dispatches`),kDispatchKey:Symbol(`dispatch key`),kDefaultHeaders:Symbol(`default headers`),kDefaultTrailers:Symbol(`default trailers`),kContentLength:Symbol(`content length`),kMockAgent:Symbol(`mock agent`),kMockAgentSet:Symbol(`mock agent set`),kMockAgentGet:Symbol(`mock agent get`),kMockDispatch:Symbol(`mock dispatch`),kClose:Symbol(`close`),kOriginalClose:Symbol(`original agent close`),kOrigin:Symbol(`origin`),kIsMockActive:Symbol(`is mock active`),kNetConnect:Symbol(`net connect`),kGetNetConnect:Symbol(`get net connect`),kConnected:Symbol(`connected`)}})),Se=/* @__PURE__ */ f(((e,t)=>{let{MockNotMatchedError:n}=Q(),{kDispatches:r,kMockAgent:i,kOriginalDispatch:a,kOrigin:o,kGetNetConnect:s}=xe(),{buildURL:c}=O(),{STATUS_CODES:l}=p(`node:http`),{types:{isPromise:u}}=p(`node:util`);function d(e,t){return typeof e==`string`?e===t:e instanceof RegExp?e.test(t):typeof e==`function`&&e(t)===!0}function f(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e.toLocaleLowerCase(),t]))}function m(e,t){if(Array.isArray(e)){for(let n=0;n!e).filter(({path:e})=>d(_(e),i));if(a.length===0)throw new n(`Mock dispatch not matched for path '${i}'`);if(a=a.filter(({method:e})=>d(e,t.method)),a.length===0)throw new n(`Mock dispatch not matched for method '${t.method}' on path '${i}'`);if(a=a.filter(({body:e})=>e===void 0||d(e,t.body)),a.length===0)throw new n(`Mock dispatch not matched for body '${t.body}' on path '${i}'`);if(a=a.filter(e=>g(e,t.headers)),a.length===0){let e=typeof t.headers==`object`?JSON.stringify(t.headers):t.headers;throw new n(`Mock dispatch not matched for headers '${e}' on path '${i}'`)}return a[0]}function x(e,t,n){let r={timesInvoked:0,times:1,persist:!1,consumed:!1},i=typeof n==`function`?{callback:n}:{...n},a={...r,...t,pending:!0,data:{error:null,...i}};return e.push(a),a}function S(e,t){let n=e.findIndex(e=>e.consumed?v(e,t):!1);n!==-1&&e.splice(n,1)}function C(e){let{path:t,method:n,body:r,headers:i,query:a}=e;return{path:t,method:n,body:r,headers:i,query:a}}function w(e){let t=Object.keys(e),n=[];for(let r=0;r=m,i.pending=p0?setTimeout(()=>{g(this[r])},d):g(this[r]);function g(r,i=o){let l=Array.isArray(e.headers)?h(e.headers):e.headers,d=typeof i==`function`?i({...e,headers:l}):i;if(u(d)){d.then(e=>g(r,e));return}let f=y(d),p=w(s),m=w(c);t.onConnect?.(e=>t.onError(e),null),t.onHeaders?.(a,p,_,T(a)),t.onData?.(Buffer.from(f)),t.onComplete?.(m),S(r,n)}function _(){}return!0}function k(){let e=this[i],t=this[o],r=this[a];return function(i,a){if(e.isMockActive)try{D.call(this,i,a)}catch(o){if(o instanceof n){let c=e[s]();if(c===!1)throw new n(`${o.message}: subsequent request to origin ${t} was not allowed (net.connect disabled)`);if(A(c,t))r.call(this,i,a);else throw new n(`${o.message}: subsequent request to origin ${t} was not allowed (net.connect is not enabled for this origin)`)}else throw o}else r.call(this,i,a)}}function A(e,t){let n=new URL(t);return!!(e===!0||Array.isArray(e)&&e.some(e=>d(e,n.host)))}function j(e){if(e){let{agent:t,...n}=e;return n}}t.exports={getResponseData:y,getMockDispatch:b,addMockDispatch:x,deleteMockDispatch:S,buildKey:C,generateKeyValues:w,matchValue:d,getResponse:E,getStatusText:T,mockDispatch:D,buildMockDispatch:k,checkNetConnect:A,buildMockOptions:j,getHeaderByName:m,buildHeadersFromArray:h}})),Ce=/* @__PURE__ */ f(((e,t)=>{let{getResponseData:n,buildKey:r,addMockDispatch:i}=Se(),{kDispatches:a,kDispatchKey:o,kDefaultHeaders:s,kDefaultTrailers:c,kContentLength:l,kMockDispatch:u}=xe(),{InvalidArgumentError:d}=T(),{buildURL:f}=O();var p=class{constructor(e){this[u]=e}delay(e){if(typeof e!=`number`||!Number.isInteger(e)||e<=0)throw new d(`waitInMs must be a valid integer > 0`);return this[u].delay=e,this}persist(){return this[u].persist=!0,this}times(e){if(typeof e!=`number`||!Number.isInteger(e)||e<=0)throw new d(`repeatTimes must be a valid integer > 0`);return this[u].times=e,this}},m=class{constructor(e,t){if(typeof e!=`object`)throw new d(`opts must be an object`);if(e.path===void 0)throw new d(`opts.path must be defined`);if(e.method===void 0&&(e.method=`GET`),typeof e.path==`string`){if(e.query)e.path=f(e.path,e.query);else{let t=new URL(e.path,`data://`);e.path=t.pathname+t.search}}typeof e.method==`string`&&(e.method=e.method.toUpperCase()),this[o]=r(e),this[a]=t,this[s]={},this[c]={},this[l]=!1}createMockScopeDispatchData({statusCode:e,data:t,responseOptions:r}){let i=n(t),a=this[l]?{"content-length":i.length}:{};return{statusCode:e,data:t,headers:{...this[s],...a,...r.headers},trailers:{...this[c],...r.trailers}}}validateReplyParameters(e){if(e.statusCode===void 0)throw new d(`statusCode must be defined`);if(typeof e.responseOptions!=`object`||e.responseOptions===null)throw new d(`responseOptions must be an object`)}reply(e){if(typeof e==`function`)return new p(i(this[a],this[o],t=>{let n=e(t);if(typeof n!=`object`||!n)throw new d(`reply options callback must return an object`);let r={data:``,responseOptions:{},...n};return this.validateReplyParameters(r),{...this.createMockScopeDispatchData(r)}}));let t={statusCode:e,data:arguments[1]===void 0?``:arguments[1],responseOptions:arguments[2]===void 0?{}:arguments[2]};this.validateReplyParameters(t);let n=this.createMockScopeDispatchData(t);return new p(i(this[a],this[o],n))}replyWithError(e){if(e===void 0)throw new d(`error must be defined`);return new p(i(this[a],this[o],{error:e}))}defaultReplyHeaders(e){if(e===void 0)throw new d(`headers must be defined`);return this[s]=e,this}defaultReplyTrailers(e){if(e===void 0)throw new d(`trailers must be defined`);return this[c]=e,this}replyContentLength(){return this[l]=!0,this}};t.exports.MockInterceptor=m,t.exports.MockScope=p})),we=/* @__PURE__ */ f(((e,t)=>{let{promisify:n}=p(`node:util`),r=K(),{buildMockDispatch:i}=Se(),{kDispatches:a,kMockAgent:o,kClose:s,kOriginalClose:c,kOrigin:l,kOriginalDispatch:u,kConnected:d}=xe(),{MockInterceptor:f}=Ce(),m=w(),{InvalidArgumentError:h}=T();t.exports=class extends r{constructor(e,t){if(super(e,t),!t||!t.agent||typeof t.agent.dispatch!=`function`)throw new h(`Argument opts.agent must implement Agent`);this[o]=t.agent,this[l]=e,this[a]=[],this[d]=1,this[u]=this.dispatch,this[c]=this.close.bind(this),this.dispatch=i.call(this),this.close=this[s]}get[m.kConnected](){return this[d]}intercept(e){return new f(e,this[a])}async[s](){await n(this[c])(),this[d]=0,this[o][m.kClients].delete(this[l])}}})),Te=/* @__PURE__ */ f(((e,t)=>{let{promisify:n}=p(`node:util`),r=ce(),{buildMockDispatch:i}=Se(),{kDispatches:a,kMockAgent:o,kClose:s,kOriginalClose:c,kOrigin:l,kOriginalDispatch:u,kConnected:d}=xe(),{MockInterceptor:f}=Ce(),m=w(),{InvalidArgumentError:h}=T();t.exports=class extends r{constructor(e,t){if(super(e,t),!t||!t.agent||typeof t.agent.dispatch!=`function`)throw new h(`Argument opts.agent must implement Agent`);this[o]=t.agent,this[l]=e,this[a]=[],this[d]=1,this[u]=this.dispatch,this[c]=this.close.bind(this),this.dispatch=i.call(this),this.close=this[s]}get[m.kConnected](){return this[d]}intercept(e){return new f(e,this[a])}async[s](){await n(this[c])(),this[d]=0,this[o][m.kClients].delete(this[l])}}})),Ee=/* @__PURE__ */ f(((e,t)=>{let n={pronoun:`it`,is:`is`,was:`was`,this:`this`},r={pronoun:`they`,is:`are`,was:`were`,this:`these`};t.exports=class{constructor(e,t){this.singular=e,this.plural=t}pluralize(e){let t=e===1,i=t?n:r,a=t?this.singular:this.plural;return{...i,count:e,noun:a}}}})),De=/* @__PURE__ */ f(((e,t)=>{let{Transform:n}=p(`node:stream`),{Console:r}=p(`node:console`),i=process.versions.icu?`✅`:`Y `,a=process.versions.icu?`❌`:`N `;t.exports=class{constructor({disableColors:e}={}){this.transform=new n({transform(e,t,n){n(null,e)}}),this.logger=new r({stdout:this.transform,inspectOptions:{colors:!e&&!process.env.CI}})}format(e){let t=e.map(({method:e,path:t,data:{statusCode:n},persist:r,times:o,timesInvoked:s,origin:c})=>({Method:e,Origin:c,Path:t,"Status code":n,Persistent:r?i:a,Invocations:s,Remaining:r?1/0:o-s}));return this.logger.table(t),this.transform.read().toString()}}})),Oe=/* @__PURE__ */ f(((e,t)=>{let{kClients:n}=w(),r=le(),{kAgent:i,kMockAgentSet:a,kMockAgentGet:o,kDispatches:s,kIsMockActive:c,kNetConnect:l,kGetNetConnect:u,kOptions:d,kFactory:f}=xe(),p=we(),m=Te(),{matchValue:h,buildMockOptions:g}=Se(),{InvalidArgumentError:_,UndiciError:v}=T(),y=j(),b=Ee(),x=De();t.exports=class extends y{constructor(e){if(super(e),this[l]=!0,this[c]=!0,e?.agent&&typeof e.agent.dispatch!=`function`)throw new _(`Argument opts.agent must implement Agent`);let t=e?.agent?e.agent:new r(e);this[i]=t,this[n]=t[n],this[d]=g(e)}get(e){let t=this[o](e);return t||(t=this[f](e),this[a](e,t)),t}dispatch(e,t){return this.get(e.origin),this[i].dispatch(e,t)}async close(){await this[i].close(),this[n].clear()}deactivate(){this[c]=!1}activate(){this[c]=!0}enableNetConnect(e){if(typeof e==`string`||typeof e==`function`||e instanceof RegExp)Array.isArray(this[l])?this[l].push(e):this[l]=[e];else if(e===void 0)this[l]=!0;else throw new _(`Unsupported matcher. Must be one of String|Function|RegExp.`)}disableNetConnect(){this[l]=!1}get isMockActive(){return this[c]}[a](e,t){this[n].set(e,t)}[f](e){let t=Object.assign({agent:this},this[d]);return this[d]&&this[d].connections===1?new p(e,t):new m(e,t)}[o](e){let t=this[n].get(e);if(t)return t;if(typeof e!=`string`){let t=this[f](`http://localhost:9999`);return this[a](e,t),t}for(let[t,r]of Array.from(this[n]))if(r&&typeof t!=`string`&&h(t,e)){let t=this[f](e);return this[a](e,t),t[s]=r[s],t}}[u](){return this[l]}pendingInterceptors(){let e=this[n];return Array.from(e.entries()).flatMap(([e,t])=>t[s].map(t=>({...t,origin:e}))).filter(({pending:e})=>e)}assertNoPendingInterceptors({pendingInterceptorsFormatter:e=new x}={}){let t=this.pendingInterceptors();if(t.length===0)return;let n=new b(`interceptor`,`interceptors`).pluralize(t.length);throw new v(` ${n.count} ${n.noun} ${n.is} pending: ${e.format(t)} -`.trim())}}})),Ae=/* @__PURE__ */ f(((e,t)=>{let n=Symbol.for(`undici.globalDispatcher.1`),{InvalidArgumentError:r}=T(),i=ue();o()===void 0&&a(new i);function a(e){if(!e||typeof e.dispatch!=`function`)throw new r(`Argument agent must implement Agent`);Object.defineProperty(globalThis,n,{value:e,writable:!0,enumerable:!1,configurable:!1})}function o(){return globalThis[n]}t.exports={setGlobalDispatcher:a,getGlobalDispatcher:o}})),je=/* @__PURE__ */ f(((e,t)=>{t.exports=class{#e;constructor(e){if(typeof e!=`object`||!e)throw TypeError(`handler must be an object`);this.#e=e}onConnect(...e){return this.#e.onConnect?.(...e)}onError(...e){return this.#e.onError?.(...e)}onUpgrade(...e){return this.#e.onUpgrade?.(...e)}onResponseStarted(...e){return this.#e.onResponseStarted?.(...e)}onHeaders(...e){return this.#e.onHeaders?.(...e)}onData(...e){return this.#e.onData?.(...e)}onComplete(...e){return this.#e.onComplete?.(...e)}onBodySent(...e){return this.#e.onBodySent?.(...e)}}})),Me=/* @__PURE__ */ f(((e,t)=>{let n=W();t.exports=e=>{let t=e?.maxRedirections;return e=>function(r,i){let{maxRedirections:a=t,...o}=r;return a?e(o,new n(e,a,r,i)):e(r,i)}}})),Ne=/* @__PURE__ */ f(((e,t)=>{let n=fe();t.exports=e=>t=>function(r,i){return t(r,new n({...r,retryOptions:{...e,...r.retryOptions}},{handler:i,dispatch:t}))}})),Pe=/* @__PURE__ */ f(((e,t)=>{let n=O(),{InvalidArgumentError:r,RequestAbortedError:i}=T(),a=je();var o=class extends a{#e=1048576;#t=null;#n=!1;#r=!1;#i=0;#a=null;#o=null;constructor({maxSize:e},t){if(super(t),e!=null&&(!Number.isFinite(e)||e<1))throw new r(`maxSize must be a number greater than 0`);this.#e=e??this.#e,this.#o=t}onConnect(e){this.#t=e,this.#o.onConnect(this.#s.bind(this))}#s(e){this.#r=!0,this.#a=e}onHeaders(e,t,r,a){let o=n.parseHeaders(t)[`content-length`];if(o!=null&&o>this.#e)throw new i(`Response size (${o}) larger than maxSize (${this.#e})`);return this.#r?!0:this.#o.onHeaders(e,t,r,a)}onError(e){this.#n||(e=this.#a??e,this.#o.onError(e))}onData(e){return this.#i+=e.length,this.#i>=this.#e&&(this.#n=!0,this.#r?this.#o.onError(this.#a):this.#o.onComplete([])),!0}onComplete(e){this.#n||(this.#r?this.#o.onError(this.reason):this.#o.onComplete(e))}};function s({maxSize:e}={maxSize:1048576}){return t=>function(n,r){let{dumpMaxSize:i=e}=n;return t(n,new o({maxSize:i},r))}}t.exports=s})),Fe=/* @__PURE__ */ f(((e,t)=>{let{isIP:n}=p(`node:net`),{lookup:r}=p(`node:dns`),i=je(),{InvalidArgumentError:a,InformationalError:o}=T(),s=2**31-1;var c=class{#e=0;#t=0;#n=/* @__PURE__ */ new Map;dualStack=!0;affinity=null;lookup=null;pick=null;constructor(e){this.#e=e.maxTTL,this.#t=e.maxItems,this.dualStack=e.dualStack,this.affinity=e.affinity,this.lookup=e.lookup??this.#r,this.pick=e.pick??this.#i}get full(){return this.#n.size===this.#t}runLookup(e,t,n){let r=this.#n.get(e.hostname);if(r==null&&this.full){n(null,e.origin);return}let i={affinity:this.affinity,dualStack:this.dualStack,lookup:this.lookup,pick:this.pick,...t.dns,maxTTL:this.#e,maxItems:this.#t};if(r==null)this.lookup(e,i,(t,r)=>{if(t||r==null||r.length===0){n(t??new o(`No DNS entries found`));return}this.setRecords(e,r);let a=this.#n.get(e.hostname),s=this.pick(e,a,i.affinity),c;c=typeof s.port==`number`?`:${s.port}`:e.port===``?``:`:${e.port}`,n(null,`${e.protocol}//${s.family===6?`[${s.address}]`:s.address}${c}`)});else{let a=this.pick(e,r,i.affinity);if(a==null){this.#n.delete(e.hostname),this.runLookup(e,t,n);return}let o;o=typeof a.port==`number`?`:${a.port}`:e.port===``?``:`:${e.port}`,n(null,`${e.protocol}//${a.family===6?`[${a.address}]`:a.address}${o}`)}}#r(e,t,n){r(e.hostname,{all:!0,family:this.dualStack===!1?this.affinity:0,order:`ipv4first`},(e,t)=>{if(e)return n(e);let r=/* @__PURE__ */ new Map;for(let e of t)r.set(`${e.address}:${e.family}`,e);n(null,r.values())})}#i(e,t,n){let r=null,{records:i,offset:a}=t,o;if(this.dualStack?(n??(a==null||a===s?(t.offset=0,n=4):(t.offset++,n=(t.offset&1)==1?6:4)),o=i[n]!=null&&i[n].ips.length>0?i[n]:i[n===4?6:4]):o=i[n],o==null||o.ips.length===0)return r;o.offset==null||o.offset===s?o.offset=0:o.offset++;let c=o.offset%o.ips.length;return r=o.ips[c]??null,r==null?r:Date.now()-r.timestamp>r.ttl?(o.ips.splice(c,1),this.pick(e,t,n)):r}setRecords(e,t){let n=Date.now(),r={records:{4:null,6:null}};for(let e of t){e.timestamp=n,e.ttl=typeof e.ttl==`number`?Math.min(e.ttl,this.#e):this.#e;let t=r.records[e.family]??{ips:[]};t.ips.push(e),r.records[e.family]=t}this.#n.set(e.hostname,r)}getHandler(e,t){return new l(this,e,t)}},l=class extends i{#e=null;#t=null;#n=null;#r=null;#i=null;constructor(e,{origin:t,handler:n,dispatch:r},i){super(n),this.#i=t,this.#r=n,this.#t={...i},this.#e=e,this.#n=r}onError(e){switch(e.code){case`ETIMEDOUT`:case`ECONNREFUSED`:if(this.#e.dualStack){this.#e.runLookup(this.#i,this.#t,(e,t)=>{if(e)return this.#r.onError(e);let n={...this.#t,origin:t};this.#n(n,this)});return}this.#r.onError(e);return;case`ENOTFOUND`:this.#e.deleteRecord(this.#i);default:this.#r.onError(e)}}};t.exports=e=>{if(e?.maxTTL!=null&&(typeof e?.maxTTL!=`number`||e?.maxTTL<0))throw new a(`Invalid maxTTL. Must be a positive number`);if(e?.maxItems!=null&&(typeof e?.maxItems!=`number`||e?.maxItems<1))throw new a(`Invalid maxItems. Must be a positive number and greater than zero`);if(e?.affinity!=null&&e?.affinity!==4&&e?.affinity!==6)throw new a(`Invalid affinity. Must be either 4 or 6`);if(e?.dualStack!=null&&typeof e?.dualStack!=`boolean`)throw new a(`Invalid dualStack. Must be a boolean`);if(e?.lookup!=null&&typeof e?.lookup!=`function`)throw new a(`Invalid lookup. Must be a function`);if(e?.pick!=null&&typeof e?.pick!=`function`)throw new a(`Invalid pick. Must be a function`);let t=e?.dualStack??!0,r;r=t?e?.affinity??null:e?.affinity??4;let i=new c({maxTTL:e?.maxTTL??1e4,lookup:e?.lookup??null,pick:e?.pick??null,dualStack:t,affinity:r,maxItems:e?.maxItems??1/0});return e=>function(t,r){let a=t.origin.constructor===URL?t.origin:new URL(t.origin);return n(a.hostname)===0?(i.runLookup(a,t,(n,o)=>{if(n)return r.onError(n);let s=null;s={...t,servername:a.hostname,origin:o,headers:{host:a.hostname,...t.headers}},e(s,i.getHandler({origin:a,dispatch:e,handler:r},t))}),!0):e(t,r)}}})),Ie=/* @__PURE__ */ f(((e,t)=>{let{kConstruct:n}=w(),{kEnumerableProperty:r}=O(),{iteratorMixin:i,isValidHeaderName:a,isValidHeaderValue:o}=V(),{webidl:s}=B(),c=p(`node:assert`),l=p(`node:util`),u=Symbol(`headers map`),d=Symbol(`headers map sorted`);function f(e){return e===10||e===13||e===9||e===32}function m(e){let t=0,n=e.length;for(;n>t&&f(e.charCodeAt(n-1));)--n;for(;n>t&&f(e.charCodeAt(t));)++t;return t===0&&n===e.length?e:e.substring(t,n)}function h(e,t){if(Array.isArray(t))for(let n=0;n>`,`record`]})}function g(e,t,n){if(n=m(n),!a(t))throw s.errors.invalidArgument({prefix:`Headers.append`,value:t,type:`header name`});if(!o(n))throw s.errors.invalidArgument({prefix:`Headers.append`,value:n,type:`header value`});if(b(e)===`immutable`)throw TypeError(`immutable`);return S(e).append(t,n,!1)}function _(e,t){return e[0]>1),t[s][0]<=l[0]?o=s+1:a=s;if(r!==s){for(i=r;i>o;)t[i]=t[--i];t[o]=l}} +`.trim())}}})),ke=/* @__PURE__ */ f(((e,t)=>{let n=Symbol.for(`undici.globalDispatcher.1`),{InvalidArgumentError:r}=T(),i=le();o()===void 0&&a(new i);function a(e){if(!e||typeof e.dispatch!=`function`)throw new r(`Argument agent must implement Agent`);Object.defineProperty(globalThis,n,{value:e,writable:!0,enumerable:!1,configurable:!1})}function o(){return globalThis[n]}t.exports={setGlobalDispatcher:a,getGlobalDispatcher:o}})),Ae=/* @__PURE__ */ f(((e,t)=>{t.exports=class{#e;constructor(e){if(typeof e!=`object`||!e)throw TypeError(`handler must be an object`);this.#e=e}onConnect(...e){return this.#e.onConnect?.(...e)}onError(...e){return this.#e.onError?.(...e)}onUpgrade(...e){return this.#e.onUpgrade?.(...e)}onResponseStarted(...e){return this.#e.onResponseStarted?.(...e)}onHeaders(...e){return this.#e.onHeaders?.(...e)}onData(...e){return this.#e.onData?.(...e)}onComplete(...e){return this.#e.onComplete?.(...e)}onBodySent(...e){return this.#e.onBodySent?.(...e)}}})),je=/* @__PURE__ */ f(((e,t)=>{let n=W();t.exports=e=>{let t=e?.maxRedirections;return e=>function(r,i){let{maxRedirections:a=t,...o}=r;return a?e(o,new n(e,a,r,i)):e(r,i)}}})),Me=/* @__PURE__ */ f(((e,t)=>{let n=de();t.exports=e=>t=>function(r,i){return t(r,new n({...r,retryOptions:{...e,...r.retryOptions}},{handler:i,dispatch:t}))}})),Ne=/* @__PURE__ */ f(((e,t)=>{let n=O(),{InvalidArgumentError:r,RequestAbortedError:i}=T(),a=Ae();var o=class extends a{#e=1048576;#t=null;#n=!1;#r=!1;#i=0;#a=null;#o=null;constructor({maxSize:e},t){if(super(t),e!=null&&(!Number.isFinite(e)||e<1))throw new r(`maxSize must be a number greater than 0`);this.#e=e??this.#e,this.#o=t}onConnect(e){this.#t=e,this.#o.onConnect(this.#s.bind(this))}#s(e){this.#r=!0,this.#a=e}onHeaders(e,t,r,a){let o=n.parseHeaders(t)[`content-length`];if(o!=null&&o>this.#e)throw new i(`Response size (${o}) larger than maxSize (${this.#e})`);return this.#r?!0:this.#o.onHeaders(e,t,r,a)}onError(e){this.#n||(e=this.#a??e,this.#o.onError(e))}onData(e){return this.#i+=e.length,this.#i>=this.#e&&(this.#n=!0,this.#r?this.#o.onError(this.#a):this.#o.onComplete([])),!0}onComplete(e){this.#n||(this.#r?this.#o.onError(this.reason):this.#o.onComplete(e))}};function s({maxSize:e}={maxSize:1048576}){return t=>function(n,r){let{dumpMaxSize:i=e}=n;return t(n,new o({maxSize:i},r))}}t.exports=s})),Pe=/* @__PURE__ */ f(((e,t)=>{let{isIP:n}=p(`node:net`),{lookup:r}=p(`node:dns`),i=Ae(),{InvalidArgumentError:a,InformationalError:o}=T(),s=2**31-1;var c=class{#e=0;#t=0;#n=/* @__PURE__ */ new Map;dualStack=!0;affinity=null;lookup=null;pick=null;constructor(e){this.#e=e.maxTTL,this.#t=e.maxItems,this.dualStack=e.dualStack,this.affinity=e.affinity,this.lookup=e.lookup??this.#r,this.pick=e.pick??this.#i}get full(){return this.#n.size===this.#t}runLookup(e,t,n){let r=this.#n.get(e.hostname);if(r==null&&this.full){n(null,e.origin);return}let i={affinity:this.affinity,dualStack:this.dualStack,lookup:this.lookup,pick:this.pick,...t.dns,maxTTL:this.#e,maxItems:this.#t};if(r==null)this.lookup(e,i,(t,r)=>{if(t||r==null||r.length===0){n(t??new o(`No DNS entries found`));return}this.setRecords(e,r);let a=this.#n.get(e.hostname),s=this.pick(e,a,i.affinity),c;c=typeof s.port==`number`?`:${s.port}`:e.port===``?``:`:${e.port}`,n(null,`${e.protocol}//${s.family===6?`[${s.address}]`:s.address}${c}`)});else{let a=this.pick(e,r,i.affinity);if(a==null){this.#n.delete(e.hostname),this.runLookup(e,t,n);return}let o;o=typeof a.port==`number`?`:${a.port}`:e.port===``?``:`:${e.port}`,n(null,`${e.protocol}//${a.family===6?`[${a.address}]`:a.address}${o}`)}}#r(e,t,n){r(e.hostname,{all:!0,family:this.dualStack===!1?this.affinity:0,order:`ipv4first`},(e,t)=>{if(e)return n(e);let r=/* @__PURE__ */ new Map;for(let e of t)r.set(`${e.address}:${e.family}`,e);n(null,r.values())})}#i(e,t,n){let r=null,{records:i,offset:a}=t,o;if(this.dualStack?(n??(a==null||a===s?(t.offset=0,n=4):(t.offset++,n=(t.offset&1)==1?6:4)),o=i[n]!=null&&i[n].ips.length>0?i[n]:i[n===4?6:4]):o=i[n],o==null||o.ips.length===0)return r;o.offset==null||o.offset===s?o.offset=0:o.offset++;let c=o.offset%o.ips.length;return r=o.ips[c]??null,r==null?r:Date.now()-r.timestamp>r.ttl?(o.ips.splice(c,1),this.pick(e,t,n)):r}setRecords(e,t){let n=Date.now(),r={records:{4:null,6:null}};for(let e of t){e.timestamp=n,e.ttl=typeof e.ttl==`number`?Math.min(e.ttl,this.#e):this.#e;let t=r.records[e.family]??{ips:[]};t.ips.push(e),r.records[e.family]=t}this.#n.set(e.hostname,r)}getHandler(e,t){return new l(this,e,t)}},l=class extends i{#e=null;#t=null;#n=null;#r=null;#i=null;constructor(e,{origin:t,handler:n,dispatch:r},i){super(n),this.#i=t,this.#r=n,this.#t={...i},this.#e=e,this.#n=r}onError(e){switch(e.code){case`ETIMEDOUT`:case`ECONNREFUSED`:if(this.#e.dualStack){this.#e.runLookup(this.#i,this.#t,(e,t)=>{if(e)return this.#r.onError(e);let n={...this.#t,origin:t};this.#n(n,this)});return}this.#r.onError(e);return;case`ENOTFOUND`:this.#e.deleteRecord(this.#i);default:this.#r.onError(e)}}};t.exports=e=>{if(e?.maxTTL!=null&&(typeof e?.maxTTL!=`number`||e?.maxTTL<0))throw new a(`Invalid maxTTL. Must be a positive number`);if(e?.maxItems!=null&&(typeof e?.maxItems!=`number`||e?.maxItems<1))throw new a(`Invalid maxItems. Must be a positive number and greater than zero`);if(e?.affinity!=null&&e?.affinity!==4&&e?.affinity!==6)throw new a(`Invalid affinity. Must be either 4 or 6`);if(e?.dualStack!=null&&typeof e?.dualStack!=`boolean`)throw new a(`Invalid dualStack. Must be a boolean`);if(e?.lookup!=null&&typeof e?.lookup!=`function`)throw new a(`Invalid lookup. Must be a function`);if(e?.pick!=null&&typeof e?.pick!=`function`)throw new a(`Invalid pick. Must be a function`);let t=e?.dualStack??!0,r;r=t?e?.affinity??null:e?.affinity??4;let i=new c({maxTTL:e?.maxTTL??1e4,lookup:e?.lookup??null,pick:e?.pick??null,dualStack:t,affinity:r,maxItems:e?.maxItems??1/0});return e=>function(t,r){let a=t.origin.constructor===URL?t.origin:new URL(t.origin);return n(a.hostname)===0?(i.runLookup(a,t,(n,o)=>{if(n)return r.onError(n);let s=null;s={...t,servername:a.hostname,origin:o,headers:{host:a.hostname,...t.headers}},e(s,i.getHandler({origin:a,dispatch:e,handler:r},t))}),!0):e(t,r)}}})),Fe=/* @__PURE__ */ f(((e,t)=>{let{kConstruct:n}=w(),{kEnumerableProperty:r}=O(),{iteratorMixin:i,isValidHeaderName:a,isValidHeaderValue:o}=V(),{webidl:s}=B(),c=p(`node:assert`),l=p(`node:util`),u=Symbol(`headers map`),d=Symbol(`headers map sorted`);function f(e){return e===10||e===13||e===9||e===32}function m(e){let t=0,n=e.length;for(;n>t&&f(e.charCodeAt(n-1));)--n;for(;n>t&&f(e.charCodeAt(t));)++t;return t===0&&n===e.length?e:e.substring(t,n)}function h(e,t){if(Array.isArray(t))for(let n=0;n>`,`record`]})}function g(e,t,n){if(n=m(n),!a(t))throw s.errors.invalidArgument({prefix:`Headers.append`,value:t,type:`header name`});if(!o(n))throw s.errors.invalidArgument({prefix:`Headers.append`,value:n,type:`header value`});if(b(e)===`immutable`)throw TypeError(`immutable`);return S(e).append(t,n,!1)}function _(e,t){return e[0]>1),t[s][0]<=l[0]?o=s+1:a=s;if(r!==s){for(i=r;i>o;)t[i]=t[--i];t[o]=l}} /* c8 ignore next 4 */ -if(!n.next().done)throw TypeError(`Unreachable`);return t}{let e=0;for(let{0:n,1:{value:r}}of this[u])t[e++]=[n,r],c(r!==null);return t.sort(_)}}},y=class e{#e;#t;constructor(e=void 0){s.util.markAsUncloneable(this),e!==n&&(this.#t=new v,this.#e=`none`,e!==void 0&&(e=s.converters.HeadersInit(e,`Headers contructor`,`init`),h(this,e)))}append(t,n){s.brandCheck(this,e),s.argumentLengthCheck(arguments,2,`Headers.append`);let r=`Headers.append`;return t=s.converters.ByteString(t,r,`name`),n=s.converters.ByteString(n,r,`value`),g(this,t,n)}delete(t){if(s.brandCheck(this,e),s.argumentLengthCheck(arguments,1,`Headers.delete`),t=s.converters.ByteString(t,`Headers.delete`,`name`),!a(t))throw s.errors.invalidArgument({prefix:`Headers.delete`,value:t,type:`header name`});if(this.#e===`immutable`)throw TypeError(`immutable`);this.#t.contains(t,!1)&&this.#t.delete(t,!1)}get(t){s.brandCheck(this,e),s.argumentLengthCheck(arguments,1,`Headers.get`);let n=`Headers.get`;if(t=s.converters.ByteString(t,n,`name`),!a(t))throw s.errors.invalidArgument({prefix:n,value:t,type:`header name`});return this.#t.get(t,!1)}has(t){s.brandCheck(this,e),s.argumentLengthCheck(arguments,1,`Headers.has`);let n=`Headers.has`;if(t=s.converters.ByteString(t,n,`name`),!a(t))throw s.errors.invalidArgument({prefix:n,value:t,type:`header name`});return this.#t.contains(t,!1)}set(t,n){s.brandCheck(this,e),s.argumentLengthCheck(arguments,2,`Headers.set`);let r=`Headers.set`;if(t=s.converters.ByteString(t,r,`name`),n=s.converters.ByteString(n,r,`value`),n=m(n),!a(t))throw s.errors.invalidArgument({prefix:r,value:t,type:`header name`});if(!o(n))throw s.errors.invalidArgument({prefix:r,value:n,type:`header value`});if(this.#e===`immutable`)throw TypeError(`immutable`);this.#t.set(t,n,!1)}getSetCookie(){s.brandCheck(this,e);let t=this.#t.cookies;return t?[...t]:[]}get[d](){if(this.#t[d])return this.#t[d];let e=[],t=this.#t.toSortedArray(),n=this.#t.cookies;if(n===null||n.length===1)return this.#t[d]=t;for(let r=0;r>`](e,t,n,r.bind(e)):s.converters[`record`](e,t,n)}throw s.errors.conversionFailed({prefix:`Headers constructor`,argument:`Argument 1`,types:[`sequence>`,`record`]})},t.exports={fill:h,compareHeaderName:_,Headers:y,HeadersList:v,getHeadersGuard:b,setHeadersGuard:x,setHeadersList:C,getHeadersList:S}})),Le=/* @__PURE__ */ f(((e,t)=>{let{Headers:n,HeadersList:r,fill:i,getHeadersGuard:a,setHeadersGuard:o,setHeadersList:s}=Ie(),{extractBody:c,cloneBody:l,mixinBody:u,hasFinalizationRegistry:d,streamRegistry:f,bodyUnusable:m}=ie(),h=O(),g=p(`node:util`),{kEnumerableProperty:_}=h,{isValidReasonPhrase:v,isCancelled:y,isAborted:b,isBlobLike:x,serializeJavascriptValueToJSONString:S,isErrorLike:C,isomorphicEncode:T,environmentSettingsObject:E}=V(),{redirectStatusSet:D,nullBodyStatus:k}=te(),{kState:A,kHeaders:j}=H(),{webidl:M}=B(),{FormData:N}=re(),{URLSerializer:P}=z(),{kConstruct:F}=w(),I=p(`node:assert`),{types:L}=p(`node:util`),ee=new TextEncoder(`utf-8`);var R=class e{static error(){return ce(ae(),`immutable`)}static json(e,t={}){M.argumentLengthCheck(arguments,1,`Response.json`),t!==null&&(t=M.converters.ResponseInit(t));let n=ee.encode(S(e)),r=c(n),i=ce(U({}),`response`);return K(i,t,{body:r[0],type:`application/json`}),i}static redirect(e,t=302){M.argumentLengthCheck(arguments,1,`Response.redirect`),e=M.converters.USVString(e),t=M.converters[`unsigned short`](t);let n;try{n=new URL(e,E.settingsObject.baseUrl)}catch(t){throw TypeError(`Failed to parse URL from ${e}`,{cause:t})}if(!D.has(t))throw RangeError(`Invalid status code ${t}`);let r=ce(U({}),`immutable`);r[A].status=t;let i=T(P(n));return r[A].headersList.append(`location`,i,!0),r}constructor(e=null,t={}){if(M.util.markAsUncloneable(this),e===F)return;e!==null&&(e=M.converters.BodyInit(e)),t=M.converters.ResponseInit(t),this[A]=U({}),this[j]=new n(F),o(this[j],`response`),s(this[j],this[A].headersList);let r=null;if(e!=null){let[t,n]=c(e);r={body:t,type:n}}K(this,t,r)}get type(){return M.brandCheck(this,e),this[A].type}get url(){M.brandCheck(this,e);let t=this[A].urlList,n=t[t.length-1]??null;return n===null?``:P(n,!0)}get redirected(){return M.brandCheck(this,e),this[A].urlList.length>1}get status(){return M.brandCheck(this,e),this[A].status}get ok(){return M.brandCheck(this,e),this[A].status>=200&&this[A].status<=299}get statusText(){return M.brandCheck(this,e),this[A].statusText}get headers(){return M.brandCheck(this,e),this[j]}get body(){return M.brandCheck(this,e),this[A].body?this[A].body.stream:null}get bodyUsed(){return M.brandCheck(this,e),!!this[A].body&&h.isDisturbed(this[A].body.stream)}clone(){if(M.brandCheck(this,e),m(this))throw M.errors.exception({header:`Response.clone`,message:`Body has already been consumed.`});let t=ne(this[A]);return d&&this[A].body?.stream&&f.register(this,new WeakRef(this[A].body.stream)),ce(t,a(this[j]))}[g.inspect.custom](e,t){t.depth===null&&(t.depth=2),t.colors??=!0;let n={status:this.status,statusText:this.statusText,headers:this.headers,body:this.body,bodyUsed:this.bodyUsed,ok:this.ok,redirected:this.redirected,type:this.type,url:this.url};return`Response ${g.formatWithOptions(t,n)}`}};u(R),Object.defineProperties(R.prototype,{type:_,url:_,status:_,ok:_,redirected:_,statusText:_,headers:_,clone:_,body:_,bodyUsed:_,[Symbol.toStringTag]:{value:`Response`,configurable:!0}}),Object.defineProperties(R,{json:_,redirect:_,error:_});function ne(e){if(e.internalResponse)return G(ne(e.internalResponse),e.type);let t=U({...e,body:null});return e.body!=null&&(t.body=l(t,e.body)),t}function U(e){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:`default`,status:200,timingInfo:null,cacheState:``,statusText:``,...e,headersList:e?.headersList?new r(e?.headersList):new r,urlList:e?.urlList?[...e.urlList]:[]}}function ae(e){return U({type:`error`,status:0,error:C(e)?e:Error(e&&String(e)),aborted:e&&e.name===`AbortError`})}function oe(e){return e.type===`error`&&e.status===0}function W(e,t){return t={internalResponse:e,...t},new Proxy(e,{get(e,n){return n in t?t[n]:e[n]},set(e,n,r){return I(!(n in t)),e[n]=r,!0}})}function G(e,t){if(t===`basic`)return W(e,{type:`basic`,headersList:e.headersList});if(t===`cors`)return W(e,{type:`cors`,headersList:e.headersList});if(t===`opaque`)return W(e,{type:`opaque`,urlList:Object.freeze([]),status:0,statusText:``,body:null});if(t===`opaqueredirect`)return W(e,{type:`opaqueredirect`,status:0,statusText:``,headersList:[],body:null});I(!1)}function se(e,t=null){return I(y(e)),b(e)?ae(Object.assign(new DOMException(`The operation was aborted.`,`AbortError`),{cause:t})):ae(Object.assign(new DOMException(`Request was cancelled.`),{cause:t}))}function K(e,t,n){if(t.status!==null&&(t.status<200||t.status>599))throw RangeError(`init["status"] must be in the range of 200 to 599, inclusive.`);if(`statusText`in t&&t.statusText!=null&&!v(String(t.statusText)))throw TypeError(`Invalid statusText`);if(`status`in t&&t.status!=null&&(e[A].status=t.status),`statusText`in t&&t.statusText!=null&&(e[A].statusText=t.statusText),`headers`in t&&t.headers!=null&&i(e[j],t.headers),n){if(k.includes(e.status))throw M.errors.exception({header:`Response constructor`,message:`Invalid response status code ${e.status}`});e[A].body=n.body,n.type!=null&&!e[A].headersList.contains(`content-type`,!0)&&e[A].headersList.append(`content-type`,n.type,!0)}}function ce(e,t){let r=new R(F);return r[A]=e,r[j]=new n(F),s(r[j],e.headersList),o(r[j],t),d&&e.body?.stream&&f.register(r,new WeakRef(e.body.stream)),r}M.converters.ReadableStream=M.interfaceConverter(ReadableStream),M.converters.FormData=M.interfaceConverter(N),M.converters.URLSearchParams=M.interfaceConverter(URLSearchParams),M.converters.XMLHttpRequestBodyInit=function(e,t,n){return typeof e==`string`?M.converters.USVString(e,t,n):x(e)?M.converters.Blob(e,t,n,{strict:!1}):ArrayBuffer.isView(e)||L.isArrayBuffer(e)?M.converters.BufferSource(e,t,n):h.isFormDataLike(e)?M.converters.FormData(e,t,n,{strict:!1}):e instanceof URLSearchParams?M.converters.URLSearchParams(e,t,n):M.converters.DOMString(e,t,n)},M.converters.BodyInit=function(e,t,n){return e instanceof ReadableStream?M.converters.ReadableStream(e,t,n):e?.[Symbol.asyncIterator]?e:M.converters.XMLHttpRequestBodyInit(e,t,n)},M.converters.ResponseInit=M.dictionaryConverter([{key:`status`,converter:M.converters[`unsigned short`],defaultValue:()=>200},{key:`statusText`,converter:M.converters.ByteString,defaultValue:()=>``},{key:`headers`,converter:M.converters.HeadersInit}]),t.exports={isNetworkError:oe,makeNetworkError:ae,makeResponse:U,makeAppropriateNetworkError:se,filterResponse:G,Response:R,cloneResponse:ne,fromInnerResponse:ce}})),Re=/* @__PURE__ */ f(((e,t)=>{let{kConnected:n,kSize:r}=w();var i=class{constructor(e){this.value=e}deref(){return this.value[n]===0&&this.value[r]===0?void 0:this.value}},a=class{constructor(e){this.finalizer=e}register(e,t){e.on&&e.on(`disconnect`,()=>{e[n]===0&&e[r]===0&&this.finalizer(t)})}unregister(e){}};t.exports=function(){return process.env.NODE_V8_COVERAGE&&process.version.startsWith(`v18`)?(process._rawDebug(`Using compatibility WeakRef and FinalizationRegistry`),{WeakRef:i,FinalizationRegistry:a}):{WeakRef,FinalizationRegistry}}})),ze=/* @__PURE__ */ f(((e,t)=>{let{extractBody:n,mixinBody:r,cloneBody:i,bodyUnusable:a}=ie(),{Headers:o,fill:s,HeadersList:c,setHeadersGuard:l,getHeadersGuard:u,setHeadersList:d,getHeadersList:f}=Ie(),{FinalizationRegistry:m}=Re()(),h=O(),g=p(`node:util`),{isValidHTTPToken:_,sameOrigin:v,environmentSettingsObject:y}=V(),{forbiddenMethodsSet:b,corsSafeListedMethodsSet:x,referrerPolicy:S,requestRedirect:C,requestMode:T,requestCredentials:E,requestCache:D,requestDuplex:k}=te(),{kEnumerableProperty:A,normalizedMethodRecordsBase:j,normalizedMethodRecords:M}=h,{kHeaders:N,kSignal:P,kState:F,kDispatcher:I}=H(),{webidl:L}=B(),{URLSerializer:ee}=z(),{kConstruct:R}=w(),ne=p(`node:assert`),{getMaxListeners:re,setMaxListeners:U,getEventListeners:ae,defaultMaxListeners:oe}=p(`node:events`),W=Symbol(`abortController`),G=new m(({signal:e,abort:t})=>{e.removeEventListener(`abort`,t)}),se=/* @__PURE__ */ new WeakMap;function K(e){return t;function t(){let n=e.deref();if(n!==void 0){G.unregister(t),this.removeEventListener(`abort`,t),n.abort(this.reason);let e=se.get(n.signal);if(e!==void 0){if(e.size!==0){for(let t of e){let e=t.deref();e!==void 0&&e.abort(this.reason)}e.clear()}se.delete(n.signal)}}}}let ce=!1;var q=class e{constructor(t,r={}){if(L.util.markAsUncloneable(this),t===R)return;let i=`Request constructor`;L.argumentLengthCheck(arguments,1,i),t=L.converters.RequestInfo(t,i,`input`),r=L.converters.RequestInit(r,i,`init`);let u=null,p=null,m=y.settingsObject.baseUrl,g=null;if(typeof t==`string`){this[I]=r.dispatcher;let e;try{e=new URL(t,m)}catch(e){throw TypeError(`Failed to parse URL from `+t,{cause:e})}if(e.username||e.password)throw TypeError(`Request cannot be constructed from a URL that includes credentials: `+t);u=le({urlList:[e]}),p=`cors`}else this[I]=r.dispatcher||t[I],ne(t instanceof e),u=t[F],g=t[P];let S=y.settingsObject.origin,C=`client`;if(u.window?.constructor?.name===`EnvironmentSettingsObject`&&v(u.window,S)&&(C=u.window),r.window!=null)throw TypeError(`'window' option '${C}' must be null`);`window`in r&&(C=`no-window`),u=le({method:u.method,headersList:u.headersList,unsafeRequest:u.unsafeRequest,client:y.settingsObject,window:C,priority:u.priority,origin:u.origin,referrer:u.referrer,referrerPolicy:u.referrerPolicy,mode:u.mode,credentials:u.credentials,cache:u.cache,redirect:u.redirect,integrity:u.integrity,keepalive:u.keepalive,reloadNavigation:u.reloadNavigation,historyNavigation:u.historyNavigation,urlList:[...u.urlList]});let w=Object.keys(r).length!==0;if(w&&(u.mode===`navigate`&&(u.mode=`same-origin`),u.reloadNavigation=!1,u.historyNavigation=!1,u.origin=`client`,u.referrer=`client`,u.referrerPolicy=``,u.url=u.urlList[u.urlList.length-1],u.urlList=[u.url]),r.referrer!==void 0){let e=r.referrer;if(e===``)u.referrer=`no-referrer`;else{let t;try{t=new URL(e,m)}catch(t){throw TypeError(`Referrer "${e}" is not a valid URL.`,{cause:t})}t.protocol===`about:`&&t.hostname===`client`||S&&!v(t,y.settingsObject.baseUrl)?u.referrer=`client`:u.referrer=t}}r.referrerPolicy!==void 0&&(u.referrerPolicy=r.referrerPolicy);let T;if(T=r.mode===void 0?p:r.mode,T===`navigate`)throw L.errors.exception({header:`Request constructor`,message:`invalid request mode navigate.`});if(T!=null&&(u.mode=T),r.credentials!==void 0&&(u.credentials=r.credentials),r.cache!==void 0&&(u.cache=r.cache),u.cache===`only-if-cached`&&u.mode!==`same-origin`)throw TypeError(`'only-if-cached' can be set only with 'same-origin' mode`);if(r.redirect!==void 0&&(u.redirect=r.redirect),r.integrity!=null&&(u.integrity=String(r.integrity)),r.keepalive!==void 0&&(u.keepalive=!!r.keepalive),r.method!==void 0){let e=r.method,t=M[e];if(t!==void 0)u.method=t;else{if(!_(e))throw TypeError(`'${e}' is not a valid HTTP method.`);let t=e.toUpperCase();if(b.has(t))throw TypeError(`'${e}' HTTP method is unsupported.`);e=j[t]??e,u.method=e}!ce&&u.method===`patch`&&(process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.",{code:`UNDICI-FETCH-patch`}),ce=!0)}r.signal!==void 0&&(g=r.signal),this[F]=u;let E=new AbortController;if(this[P]=E.signal,g!=null){if(!g||typeof g.aborted!=`boolean`||typeof g.addEventListener!=`function`)throw TypeError(`Failed to construct 'Request': member signal is not of type AbortSignal.`);if(g.aborted)E.abort(g.reason);else{this[W]=E;let e=K(new WeakRef(E));try{(typeof re==`function`&&re(g)===oe||ae(g,`abort`).length>=oe)&&U(1500,g)}catch{}h.addAbortListener(g,e),G.register(E,{signal:g,abort:e},e)}}if(this[N]=new o(R),d(this[N],u.headersList),l(this[N],`request`),T===`no-cors`){if(!x.has(u.method))throw TypeError(`'${u.method} is unsupported in no-cors mode.`);l(this[N],`request-no-cors`)}if(w){let e=f(this[N]),t=r.headers===void 0?new c(e):r.headers;if(e.clear(),t instanceof c){for(let{name:n,value:r}of t.rawValues())e.append(n,r,!1);e.cookies=t.cookies}else s(this[N],t)}let D=t instanceof e?t[F].body:null;if((r.body!=null||D!=null)&&(u.method===`GET`||u.method===`HEAD`))throw TypeError(`Request with GET/HEAD method cannot have body.`);let O=null;if(r.body!=null){let[e,t]=n(r.body,u.keepalive);O=e,t&&!f(this[N]).contains(`content-type`,!0)&&this[N].append(`content-type`,t)}let k=O??D;if(k!=null&&k.source==null){if(O!=null&&r.duplex==null)throw TypeError(`RequestInit: duplex option is required when sending a body.`);if(u.mode!==`same-origin`&&u.mode!==`cors`)throw TypeError(`If request is made from ReadableStream, mode should be "same-origin" or "cors"`);u.useCORSPreflightFlag=!0}let A=k;if(O==null&&D!=null){if(a(t))throw TypeError(`Cannot construct a Request with a Request object that has already been used.`);let e=new TransformStream;D.stream.pipeThrough(e),A={source:D.source,length:D.length,stream:e.readable}}this[F].body=A}get method(){return L.brandCheck(this,e),this[F].method}get url(){return L.brandCheck(this,e),ee(this[F].url)}get headers(){return L.brandCheck(this,e),this[N]}get destination(){return L.brandCheck(this,e),this[F].destination}get referrer(){return L.brandCheck(this,e),this[F].referrer===`no-referrer`?``:this[F].referrer===`client`?`about:client`:this[F].referrer.toString()}get referrerPolicy(){return L.brandCheck(this,e),this[F].referrerPolicy}get mode(){return L.brandCheck(this,e),this[F].mode}get credentials(){return this[F].credentials}get cache(){return L.brandCheck(this,e),this[F].cache}get redirect(){return L.brandCheck(this,e),this[F].redirect}get integrity(){return L.brandCheck(this,e),this[F].integrity}get keepalive(){return L.brandCheck(this,e),this[F].keepalive}get isReloadNavigation(){return L.brandCheck(this,e),this[F].reloadNavigation}get isHistoryNavigation(){return L.brandCheck(this,e),this[F].historyNavigation}get signal(){return L.brandCheck(this,e),this[P]}get body(){return L.brandCheck(this,e),this[F].body?this[F].body.stream:null}get bodyUsed(){return L.brandCheck(this,e),!!this[F].body&&h.isDisturbed(this[F].body.stream)}get duplex(){return L.brandCheck(this,e),`half`}clone(){if(L.brandCheck(this,e),a(this))throw TypeError(`unusable`);let t=J(this[F]),n=new AbortController;if(this.signal.aborted)n.abort(this.signal.reason);else{let e=se.get(this.signal);e===void 0&&(e=/* @__PURE__ */ new Set,se.set(this.signal,e));let t=new WeakRef(n);e.add(t),h.addAbortListener(n.signal,K(t))}return ue(t,n.signal,u(this[N]))}[g.inspect.custom](e,t){t.depth===null&&(t.depth=2),t.colors??=!0;let n={method:this.method,url:this.url,headers:this.headers,destination:this.destination,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,isReloadNavigation:this.isReloadNavigation,isHistoryNavigation:this.isHistoryNavigation,signal:this.signal};return`Request ${g.formatWithOptions(t,n)}`}};r(q);function le(e){return{method:e.method??`GET`,localURLsOnly:e.localURLsOnly??!1,unsafeRequest:e.unsafeRequest??!1,body:e.body??null,client:e.client??null,reservedClient:e.reservedClient??null,replacesClientId:e.replacesClientId??``,window:e.window??`client`,keepalive:e.keepalive??!1,serviceWorkers:e.serviceWorkers??`all`,initiator:e.initiator??``,destination:e.destination??``,priority:e.priority??null,origin:e.origin??`client`,policyContainer:e.policyContainer??`client`,referrer:e.referrer??`client`,referrerPolicy:e.referrerPolicy??``,mode:e.mode??`no-cors`,useCORSPreflightFlag:e.useCORSPreflightFlag??!1,credentials:e.credentials??`same-origin`,useCredentials:e.useCredentials??!1,cache:e.cache??`default`,redirect:e.redirect??`follow`,integrity:e.integrity??``,cryptoGraphicsNonceMetadata:e.cryptoGraphicsNonceMetadata??``,parserMetadata:e.parserMetadata??``,reloadNavigation:e.reloadNavigation??!1,historyNavigation:e.historyNavigation??!1,userActivation:e.userActivation??!1,taintedOrigin:e.taintedOrigin??!1,redirectCount:e.redirectCount??0,responseTainting:e.responseTainting??`basic`,preventNoCacheCacheControlHeaderModification:e.preventNoCacheCacheControlHeaderModification??!1,done:e.done??!1,timingAllowFailed:e.timingAllowFailed??!1,urlList:e.urlList,url:e.urlList[0],headersList:e.headersList?new c(e.headersList):new c}}function J(e){let t=le({...e,body:null});return e.body!=null&&(t.body=i(t,e.body)),t}function ue(e,t,n){let r=new q(R);return r[F]=e,r[P]=t,r[N]=new o(R),d(r[N],e.headersList),l(r[N],n),r}Object.defineProperties(q.prototype,{method:A,url:A,headers:A,redirect:A,clone:A,signal:A,duplex:A,destination:A,body:A,bodyUsed:A,isHistoryNavigation:A,isReloadNavigation:A,keepalive:A,integrity:A,cache:A,credentials:A,attribute:A,referrerPolicy:A,referrer:A,mode:A,[Symbol.toStringTag]:{value:`Request`,configurable:!0}}),L.converters.Request=L.interfaceConverter(q),L.converters.RequestInfo=function(e,t,n){return typeof e==`string`?L.converters.USVString(e,t,n):e instanceof q?L.converters.Request(e,t,n):L.converters.USVString(e,t,n)},L.converters.AbortSignal=L.interfaceConverter(AbortSignal),L.converters.RequestInit=L.dictionaryConverter([{key:`method`,converter:L.converters.ByteString},{key:`headers`,converter:L.converters.HeadersInit},{key:`body`,converter:L.nullableConverter(L.converters.BodyInit)},{key:`referrer`,converter:L.converters.USVString},{key:`referrerPolicy`,converter:L.converters.DOMString,allowedValues:S},{key:`mode`,converter:L.converters.DOMString,allowedValues:T},{key:`credentials`,converter:L.converters.DOMString,allowedValues:E},{key:`cache`,converter:L.converters.DOMString,allowedValues:D},{key:`redirect`,converter:L.converters.DOMString,allowedValues:C},{key:`integrity`,converter:L.converters.DOMString},{key:`keepalive`,converter:L.converters.boolean},{key:`signal`,converter:L.nullableConverter(e=>L.converters.AbortSignal(e,`RequestInit`,`signal`,{strict:!1}))},{key:`window`,converter:L.converters.any},{key:`duplex`,converter:L.converters.DOMString,allowedValues:k},{key:`dispatcher`,converter:L.converters.any}]),t.exports={Request:q,makeRequest:le,fromInnerRequest:ue,cloneRequest:J}})),Be=/* @__PURE__ */ f(((e,t)=>{let{makeNetworkError:n,makeAppropriateNetworkError:r,filterResponse:i,makeResponse:a,fromInnerResponse:o}=Le(),{HeadersList:s}=Ie(),{Request:c,cloneRequest:l}=ze(),u=p(`node:zlib`),{bytesMatch:d,makePolicyContainer:f,clonePolicyContainer:m,requestBadPort:h,TAOCheck:g,appendRequestOriginHeader:_,responseLocationURL:v,requestCurrentURL:y,setRequestReferrerPolicyOnRedirect:b,tryUpgradeRequestToAPotentiallyTrustworthyURL:x,createOpaqueTimingInfo:S,appendFetchMetadata:C,corsCheck:w,crossOriginResourcePolicyCheck:T,determineRequestsReferrer:E,coarsenedSharedCurrentTime:D,createDeferredPromise:k,isBlobLike:A,sameOrigin:j,isCancelled:M,isAborted:N,isErrorLike:P,fullyReadBody:F,readableStreamClose:I,isomorphicEncode:L,urlIsLocal:ee,urlIsHttpHttpsScheme:R,urlHasHttpsScheme:ne,clampAndCoarsenConnectionTimingInfo:re,simpleRangeHeaderValue:U,buildContentRange:ae,createInflate:oe,extractMimeType:W}=V(),{kState:G,kDispatcher:se}=H(),K=p(`node:assert`),{safelyExtractBody:ce,extractBody:q}=ie(),{redirectStatusSet:le,nullBodyStatus:J,safeMethodsSet:ue,requestBodyHeader:de,subresourceSet:Y}=te(),fe=p(`node:events`),{Readable:pe,pipeline:me,finished:he}=p(`node:stream`),{addAbortListener:ge,isErrored:_e,isReadable:ve,bufferToLowerCasedHeaderName:ye}=O(),{dataURLProcessor:X,serializeAMimeType:be,minimizeSupportedMimeType:xe}=z(),{getGlobalDispatcher:Z}=Ae(),{webidl:Se}=B(),{STATUS_CODES:Ce}=p(`node:http`),we=[`GET`,`HEAD`],Te=typeof __UNDICI_IS_NODE__<`u`||typeof esbuildDetection<`u`?`node`:`undici`,Ee;var De=class extends fe{constructor(e){super(),this.dispatcher=e,this.connection=null,this.dump=!1,this.state=`ongoing`}terminate(e){this.state===`ongoing`&&(this.state=`terminated`,this.connection?.destroy(e),this.emit(`terminated`,e))}abort(e){this.state===`ongoing`&&(this.state=`aborted`,e||=new DOMException(`The operation was aborted.`,`AbortError`),this.serializedAbortReason=e,this.connection?.destroy(e),this.emit(`terminated`,e))}};function Oe(e){je(e,`fetch`)}function ke(e,t=void 0){Se.argumentLengthCheck(arguments,1,`globalThis.fetch`);let n=k(),r;try{r=new c(e,t)}catch(e){return n.reject(e),n.promise}let i=r[G];if(r.signal.aborted)return Ne(n,i,null,r.signal.reason),n.promise;i.client.globalObject?.constructor?.name===`ServiceWorkerGlobalScope`&&(i.serviceWorkers=`none`);let a=null,s=!1,l=null;return ge(r.signal,()=>{s=!0,K(l!=null),l.abort(r.signal.reason);let e=a?.deref();Ne(n,i,e,r.signal.reason)}),l=Pe({request:i,processResponseEndOfBody:Oe,processResponse:e=>{s||(e.aborted?Ne(n,i,a,l.serializedAbortReason):e.type===`error`?n.reject(TypeError(`fetch failed`,{cause:e.error})):(a=new WeakRef(o(e,`immutable`)),n.resolve(a.deref()),n=null))},dispatcher:r[se]}),n.promise}function je(e,t=`other`){if(e.type===`error`&&e.aborted||!e.urlList?.length)return;let n=e.urlList[0],r=e.timingInfo,i=e.cacheState;R(n)&&r!==null&&(e.timingAllowPassed||(r=S({startTime:r.startTime}),i=``),r.endTime=D(),e.timingInfo=r,Me(r,n.href,t,globalThis,i))}let Me=performance.markResourceTiming;function Ne(e,t,n,r){if(e&&e.reject(r),t.body!=null&&ve(t.body?.stream)&&t.body.stream.cancel(r).catch(e=>{if(e.code!==`ERR_INVALID_STATE`)throw e}),n==null)return;let i=n[G];i.body!=null&&ve(i.body?.stream)&&i.body.stream.cancel(r).catch(e=>{if(e.code!==`ERR_INVALID_STATE`)throw e})}function Pe({request:e,processRequestBodyChunkLength:t,processRequestEndOfBody:n,processResponse:r,processResponseEndOfBody:i,processResponseConsumeBody:a,useParallelQueue:o=!1,dispatcher:s=Z()}){K(s);let c=null,l=!1;e.client!=null&&(c=e.client.globalObject,l=e.client.crossOriginIsolatedCapability);let u=D(l),d=S({startTime:u}),p={controller:new De(s),request:e,timingInfo:d,processRequestBodyChunkLength:t,processRequestEndOfBody:n,processResponse:r,processResponseConsumeBody:a,processResponseEndOfBody:i,taskDestination:c,crossOriginIsolatedCapability:l};return K(!e.body||e.body.stream),e.window===`client`&&(e.window=e.client?.globalObject?.constructor?.name===`Window`?e.client:`no-window`),e.origin===`client`&&(e.origin=e.client.origin),e.policyContainer===`client`&&(e.policyContainer=e.client==null?f():m(e.client.policyContainer)),e.headersList.contains(`accept`,!0)||e.headersList.append(`accept`,`*/*`,!0),e.headersList.contains(`accept-language`,!0)||e.headersList.append(`accept-language`,`*`,!0),e.priority,Y.has(e.destination),Fe(p).catch(e=>{p.controller.terminate(e)}),p.controller}async function Fe(e,t=!1){let r=e.request,a=null;if(r.localURLsOnly&&!ee(y(r))&&(a=n(`local URLs only`)),x(r),h(r)===`blocked`&&(a=n(`bad port`)),r.referrerPolicy===``&&(r.referrerPolicy=r.policyContainer.referrerPolicy),r.referrer!==`no-referrer`&&(r.referrer=E(r)),a===null&&(a=await(async()=>{let t=y(r);return j(t,r.url)&&r.responseTainting===`basic`||t.protocol===`data:`||r.mode===`navigate`||r.mode===`websocket`?(r.responseTainting=`basic`,await Re(e)):r.mode===`same-origin`?n(`request mode cannot be "same-origin"`):r.mode===`no-cors`?r.redirect===`follow`?(r.responseTainting=`opaque`,await Re(e)):n(`redirect mode cannot be "follow" for "no-cors" request`):R(y(r))?(r.responseTainting=`cors`,await He(e)):n(`URL scheme must be a HTTP(S) scheme`)})()),t)return a;a.status!==0&&!a.internalResponse&&(r.responseTainting,r.responseTainting===`basic`?a=i(a,`basic`):r.responseTainting===`cors`?a=i(a,`cors`):r.responseTainting===`opaque`?a=i(a,`opaque`):K(!1));let o=a.status===0?a:a.internalResponse;if(o.urlList.length===0&&o.urlList.push(...r.urlList),r.timingAllowFailed||(a.timingAllowPassed=!0),a.type===`opaque`&&o.status===206&&o.rangeRequested&&!r.headers.contains(`range`,!0)&&(a=o=n()),a.status!==0&&(r.method===`HEAD`||r.method===`CONNECT`||J.includes(o.status))&&(o.body=null,e.controller.dump=!0),r.integrity){let t=t=>Ve(e,n(t));if(r.responseTainting===`opaque`||a.body==null){t(a.error);return}await F(a.body,n=>{d(n,r.integrity)?(a.body=ce(n)[0],Ve(e,a)):t(`integrity mismatch`)},t)}else Ve(e,a)}function Re(e){if(M(e)&&e.request.redirectCount===0)return Promise.resolve(r(e));let{request:t}=e,{protocol:i}=y(t);switch(i){case`about:`:return Promise.resolve(n(`about scheme is not supported`));case`blob:`:{Ee||=p(`node:buffer`).resolveObjectURL;let e=y(t);if(e.search.length!==0)return Promise.resolve(n(`NetworkError when attempting to fetch resource.`));let r=Ee(e.toString());if(t.method!==`GET`||!A(r))return Promise.resolve(n(`invalid method`));let i=a(),o=r.size,s=L(`${o}`),c=r.type;if(t.headersList.contains(`range`,!0)){i.rangeRequested=!0;let e=t.headersList.get(`range`,!0),a=U(e,!0);if(a===`failure`)return Promise.resolve(n(`failed to fetch the data URL`));let{rangeStartValue:s,rangeEndValue:l}=a;if(s===null)s=o-l,l=s+l-1;else{if(s>=o)return Promise.resolve(n(`Range start is greater than the blob's size.`));(l===null||l>=o)&&(l=o-1)}let u=r.slice(s,l,c);i.body=q(u)[0];let d=L(`${u.size}`),f=ae(s,l,o);i.status=206,i.statusText=`Partial Content`,i.headersList.set(`content-length`,d,!0),i.headersList.set(`content-type`,c,!0),i.headersList.set(`content-range`,f,!0)}else{let e=q(r);i.statusText=`OK`,i.body=e[0],i.headersList.set(`content-length`,s,!0),i.headersList.set(`content-type`,c,!0)}return Promise.resolve(i)}case`data:`:{let e=y(t),r=X(e);if(r===`failure`)return Promise.resolve(n(`failed to fetch the data URL`));let i=be(r.mimeType);return Promise.resolve(a({statusText:`OK`,headersList:[[`content-type`,{name:`Content-Type`,value:i}]],body:ce(r.body)[0]}))}case`file:`:return Promise.resolve(n(`not implemented... yet...`));case`http:`:case`https:`:return He(e).catch(e=>n(e));default:return Promise.resolve(n(`unknown scheme`))}}function Be(e,t){e.request.done=!0,e.processResponseDone!=null&&queueMicrotask(()=>e.processResponseDone(t))}function Ve(e,t){let n=e.timingInfo,r=()=>{let r=Date.now();e.request.destination===`document`&&(e.controller.fullTimingInfo=n),e.controller.reportTimingSteps=()=>{if(e.request.url.protocol!==`https:`)return;n.endTime=r;let i=t.cacheState,a=t.bodyInfo;t.timingAllowPassed||(n=S(n),i=``);let o=0;if(e.request.mode!==`navigator`||!t.hasCrossOriginRedirects){o=t.status;let e=W(t.headersList);e!==`failure`&&(a.contentType=xe(e))}e.request.initiatorType!=null&&Me(n,e.request.url.href,e.request.initiatorType,globalThis,i,a,o)};let i=()=>{e.request.done=!0,e.processResponseEndOfBody!=null&&queueMicrotask(()=>e.processResponseEndOfBody(t)),e.request.initiatorType!=null&&e.controller.reportTimingSteps()};queueMicrotask(()=>i())};e.processResponse!=null&&queueMicrotask(()=>{e.processResponse(t),e.processResponse=null});let i=t.type===`error`?t:t.internalResponse??t;i.body==null?r():he(i.body.stream,()=>{r()})}async function He(e){let t=e.request,r=null,i=null,a=e.timingInfo;if(t.serviceWorkers,r===null){if(t.redirect===`follow`&&(t.serviceWorkers=`none`),i=r=await We(e),t.responseTainting===`cors`&&w(t,r)===`failure`)return n(`cors failure`);g(t,r)===`failure`&&(t.timingAllowFailed=!0)}return(t.responseTainting===`opaque`||r.type===`opaque`)&&T(t.origin,t.client,t.destination,i)===`blocked`?n(`blocked`):(le.has(i.status)&&(t.redirect!==`manual`&&e.controller.connection.destroy(void 0,!1),t.redirect===`error`?r=n(`unexpected redirect`):t.redirect===`manual`?r=i:t.redirect===`follow`?r=await Ue(e,r):K(!1)),r.timingInfo=a,r)}function Ue(e,t){let r=e.request,i=t.internalResponse?t.internalResponse:t,a;try{if(a=v(i,y(r).hash),a==null)return t}catch(e){return Promise.resolve(n(e))}if(!R(a))return Promise.resolve(n(`URL scheme must be a HTTP(S) scheme`));if(r.redirectCount===20)return Promise.resolve(n(`redirect count exceeded`));if(r.redirectCount+=1,r.mode===`cors`&&(a.username||a.password)&&!j(r,a))return Promise.resolve(n(`cross origin not allowed for request mode "cors"`));if(r.responseTainting===`cors`&&(a.username||a.password))return Promise.resolve(n(`URL cannot contain credentials for request mode "cors"`));if(i.status!==303&&r.body!=null&&r.body.source==null)return Promise.resolve(n());if([301,302].includes(i.status)&&r.method===`POST`||i.status===303&&!we.includes(r.method)){r.method=`GET`,r.body=null;for(let e of de)r.headersList.delete(e)}j(y(r),a)||(r.headersList.delete(`authorization`,!0),r.headersList.delete(`proxy-authorization`,!0),r.headersList.delete(`cookie`,!0),r.headersList.delete(`host`,!0)),r.body!=null&&(K(r.body.source!=null),r.body=ce(r.body.source)[0]);let o=e.timingInfo;return o.redirectEndTime=o.postRedirectStartTime=D(e.crossOriginIsolatedCapability),o.redirectStartTime===0&&(o.redirectStartTime=o.startTime),r.urlList.push(a),b(r,i),Fe(e,!0)}async function We(e,t=!1,i=!1){let a=e.request,o=null,s=null,c=null;a.window===`no-window`&&a.redirect===`error`?(o=e,s=a):(s=l(a),o={...e},o.request=s);let u=a.credentials===`include`||a.credentials===`same-origin`&&a.responseTainting===`basic`,d=s.body?s.body.length:null,f=null;if(s.body==null&&[`POST`,`PUT`].includes(s.method)&&(f=`0`),d!=null&&(f=L(`${d}`)),f!=null&&s.headersList.append(`content-length`,f,!0),d!=null&&s.keepalive,s.referrer instanceof URL&&s.headersList.append(`referer`,L(s.referrer.href),!0),_(s),C(s),s.headersList.contains(`user-agent`,!0)||s.headersList.append(`user-agent`,Te),s.cache==="default"&&(s.headersList.contains(`if-modified-since`,!0)||s.headersList.contains(`if-none-match`,!0)||s.headersList.contains(`if-unmodified-since`,!0)||s.headersList.contains(`if-match`,!0)||s.headersList.contains(`if-range`,!0))&&(s.cache=`no-store`),s.cache===`no-cache`&&!s.preventNoCacheCacheControlHeaderModification&&!s.headersList.contains(`cache-control`,!0)&&s.headersList.append(`cache-control`,`max-age=0`,!0),(s.cache===`no-store`||s.cache===`reload`)&&(s.headersList.contains(`pragma`,!0)||s.headersList.append(`pragma`,`no-cache`,!0),s.headersList.contains(`cache-control`,!0)||s.headersList.append(`cache-control`,`no-cache`,!0)),s.headersList.contains(`range`,!0)&&s.headersList.append(`accept-encoding`,`identity`,!0),s.headersList.contains(`accept-encoding`,!0)||(ne(y(s))?s.headersList.append(`accept-encoding`,`br, gzip, deflate`,!0):s.headersList.append(`accept-encoding`,`gzip, deflate`,!0)),s.headersList.delete(`host`,!0),s.cache=`no-store`,s.cache!==`no-store`&&s.cache,c==null){if(s.cache===`only-if-cached`)return n(`only if cached`);let e=await Ge(o,u,i);!ue.has(s.method)&&e.status>=200&&e.status,c??=e}if(c.urlList=[...s.urlList],s.headersList.contains(`range`,!0)&&(c.rangeRequested=!0),c.requestIncludesCredentials=u,c.status===407)return a.window===`no-window`?n():M(e)?r(e):n(`proxy authentication required`);if(c.status===421&&!i&&(a.body==null||a.body.source!=null)){if(M(e))return r(e);e.controller.connection.destroy(),c=await We(e,t,!0)}return c}async function Ge(e,t=!1,i=!1){K(!e.controller.connection||e.controller.connection.destroyed),e.controller.connection={abort:null,destroyed:!1,destroy(e,t=!0){this.destroyed||(this.destroyed=!0,t&&this.abort?.(e??new DOMException(`The operation was aborted.`,`AbortError`)))}};let o=e.request,c=null,l=e.timingInfo;o.cache=`no-store`,o.mode;let d=null;if(o.body==null&&e.processRequestEndOfBody)queueMicrotask(()=>e.processRequestEndOfBody());else if(o.body!=null){let t=async function*(t){M(e)||(yield t,e.processRequestBodyChunkLength?.(t.byteLength))},n=()=>{M(e)||e.processRequestEndOfBody&&e.processRequestEndOfBody()},r=t=>{M(e)||(t.name===`AbortError`?e.controller.abort():e.controller.terminate(t))};d=(async function*(){try{for await(let e of o.body.stream)yield*t(e);n()}catch(e){r(e)}})()}try{let{body:t,status:n,statusText:r,headersList:i,socket:o}=await g({body:d});if(o)c=a({status:n,statusText:r,headersList:i,socket:o});else{let o=t[Symbol.asyncIterator]();e.controller.next=()=>o.next(),c=a({status:n,statusText:r,headersList:i})}}catch(t){return t.name===`AbortError`?(e.controller.connection.destroy(),r(e,t)):n(t)}let f=async()=>{await e.controller.resume()},p=t=>{M(e)||e.controller.abort(t)},m=new ReadableStream({async start(t){e.controller.controller=t},async pull(e){await f(e)},async cancel(e){await p(e)},type:`bytes`});c.body={stream:m,source:null,length:null},e.controller.resume||e.controller.on(`terminated`,h),e.controller.resume=async()=>{for(;;){let t,n;try{let{done:n,value:r}=await e.controller.next();if(N(e))break;t=n?void 0:r}catch(r){e.controller.ended&&!l.encodedBodySize?t=void 0:(t=r,n=!0)}if(t===void 0){I(e.controller.controller),Be(e,c);return}if(l.decodedBodySize+=t?.byteLength??0,n){e.controller.terminate(t);return}let r=new Uint8Array(t);if(r.byteLength&&e.controller.controller.enqueue(r),_e(m)){e.controller.terminate();return}if(e.controller.controller.desiredSize<=0)return}};function h(t){N(e)?(c.aborted=!0,ve(m)&&e.controller.controller.error(e.controller.serializedAbortReason)):ve(m)&&e.controller.controller.error(TypeError(`terminated`,{cause:P(t)?t:void 0})),e.controller.connection.destroy()}return c;function g({body:t}){let n=y(o),r=e.controller.dispatcher;return new Promise((i,a)=>r.dispatch({path:n.pathname+n.search,origin:n.origin,method:o.method,body:r.isMockActive?o.body&&(o.body.source||o.body.stream):t,headers:o.headersList.entries,maxRedirections:0,upgrade:o.mode===`websocket`?`websocket`:void 0},{body:null,abort:null,onConnect(t){let{connection:n}=e.controller;l.finalConnectionTimingInfo=re(void 0,l.postRedirectStartTime,e.crossOriginIsolatedCapability),n.destroyed?t(new DOMException(`The operation was aborted.`,`AbortError`)):(e.controller.on(`terminated`,t),this.abort=n.abort=t),l.finalNetworkRequestStartTime=D(e.crossOriginIsolatedCapability)},onResponseStarted(){l.finalNetworkResponseStartTime=D(e.crossOriginIsolatedCapability)},onHeaders(e,t,n,r){if(e<200)return;let a=``,c=new s;for(let e=0;e5)return this.abort(/* @__PURE__ */ Error(`too many content-encodings in response: ${t.length}, maximum allowed is 5`)),!0;for(let e=t.length-1;e>=0;--e){let n=t[e].trim();if(n===`x-gzip`||n===`gzip`)l.push(u.createGunzip({flush:u.constants.Z_SYNC_FLUSH,finishFlush:u.constants.Z_SYNC_FLUSH}));else if(n===`deflate`)l.push(oe({flush:u.constants.Z_SYNC_FLUSH,finishFlush:u.constants.Z_SYNC_FLUSH}));else if(n===`br`)l.push(u.createBrotliDecompress({flush:u.constants.BROTLI_OPERATION_FLUSH,finishFlush:u.constants.BROTLI_OPERATION_FLUSH}));else{l.length=0;break}}}this.body=new pe({read:n});let f=this.onError.bind(this);return i({status:e,statusText:r,headersList:c,body:l.length?me(this.body,...l,e=>{e&&this.onError(e)}).on(`error`,f):this.body.on(`error`,f)}),!0},onData(t){if(e.controller.dump)return;let n=t;return l.encodedBodySize+=n.byteLength,this.body.push(n)},onComplete(){this.abort&&e.controller.off(`terminated`,this.abort),e.controller.ended=!0,this.body.push(null)},onError(t){this.abort&&e.controller.off(`terminated`,this.abort),this.body?.destroy(t),e.controller.terminate(t),a(t)},onUpgrade(e,t,n){if(e!==101)return;let r=new s;for(let e=0;e{t.exports={kState:Symbol(`FileReader state`),kResult:Symbol(`FileReader result`),kError:Symbol(`FileReader error`),kLastProgressEventFired:Symbol(`FileReader last progress event fired timestamp`),kEvents:Symbol(`FileReader events`),kAborted:Symbol(`FileReader aborted`)}})),He=/* @__PURE__ */ f(((e,t)=>{let{webidl:n}=B(),r=Symbol(`ProgressEvent state`);var i=class e extends Event{constructor(e,t={}){e=n.converters.DOMString(e,`ProgressEvent constructor`,`type`),t=n.converters.ProgressEventInit(t??{}),super(e,t),this[r]={lengthComputable:t.lengthComputable,loaded:t.loaded,total:t.total}}get lengthComputable(){return n.brandCheck(this,e),this[r].lengthComputable}get loaded(){return n.brandCheck(this,e),this[r].loaded}get total(){return n.brandCheck(this,e),this[r].total}};n.converters.ProgressEventInit=n.dictionaryConverter([{key:`lengthComputable`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`loaded`,converter:n.converters[`unsigned long long`],defaultValue:()=>0},{key:`total`,converter:n.converters[`unsigned long long`],defaultValue:()=>0},{key:`bubbles`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`cancelable`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`composed`,converter:n.converters.boolean,defaultValue:()=>!1}]),t.exports={ProgressEvent:i}})),Ue=/* @__PURE__ */ f(((e,t)=>{function n(e){if(!e)return`failure`;switch(e.trim().toLowerCase()){case`unicode-1-1-utf-8`:case`unicode11utf8`:case`unicode20utf8`:case`utf-8`:case`utf8`:case`x-unicode20utf8`:return`UTF-8`;case`866`:case`cp866`:case`csibm866`:case`ibm866`:return`IBM866`;case`csisolatin2`:case`iso-8859-2`:case`iso-ir-101`:case`iso8859-2`:case`iso88592`:case`iso_8859-2`:case`iso_8859-2:1987`:case`l2`:case`latin2`:return`ISO-8859-2`;case`csisolatin3`:case`iso-8859-3`:case`iso-ir-109`:case`iso8859-3`:case`iso88593`:case`iso_8859-3`:case`iso_8859-3:1988`:case`l3`:case`latin3`:return`ISO-8859-3`;case`csisolatin4`:case`iso-8859-4`:case`iso-ir-110`:case`iso8859-4`:case`iso88594`:case`iso_8859-4`:case`iso_8859-4:1988`:case`l4`:case`latin4`:return`ISO-8859-4`;case`csisolatincyrillic`:case`cyrillic`:case`iso-8859-5`:case`iso-ir-144`:case`iso8859-5`:case`iso88595`:case`iso_8859-5`:case`iso_8859-5:1988`:return`ISO-8859-5`;case`arabic`:case`asmo-708`:case`csiso88596e`:case`csiso88596i`:case`csisolatinarabic`:case`ecma-114`:case`iso-8859-6`:case`iso-8859-6-e`:case`iso-8859-6-i`:case`iso-ir-127`:case`iso8859-6`:case`iso88596`:case`iso_8859-6`:case`iso_8859-6:1987`:return`ISO-8859-6`;case`csisolatingreek`:case`ecma-118`:case`elot_928`:case`greek`:case`greek8`:case`iso-8859-7`:case`iso-ir-126`:case`iso8859-7`:case`iso88597`:case`iso_8859-7`:case`iso_8859-7:1987`:case`sun_eu_greek`:return`ISO-8859-7`;case`csiso88598e`:case`csisolatinhebrew`:case`hebrew`:case`iso-8859-8`:case`iso-8859-8-e`:case`iso-ir-138`:case`iso8859-8`:case`iso88598`:case`iso_8859-8`:case`iso_8859-8:1988`:case`visual`:return`ISO-8859-8`;case`csiso88598i`:case`iso-8859-8-i`:case`logical`:return`ISO-8859-8-I`;case`csisolatin6`:case`iso-8859-10`:case`iso-ir-157`:case`iso8859-10`:case`iso885910`:case`l6`:case`latin6`:return`ISO-8859-10`;case`iso-8859-13`:case`iso8859-13`:case`iso885913`:return`ISO-8859-13`;case`iso-8859-14`:case`iso8859-14`:case`iso885914`:return`ISO-8859-14`;case`csisolatin9`:case`iso-8859-15`:case`iso8859-15`:case`iso885915`:case`iso_8859-15`:case`l9`:return`ISO-8859-15`;case`iso-8859-16`:return`ISO-8859-16`;case`cskoi8r`:case`koi`:case`koi8`:case`koi8-r`:case`koi8_r`:return`KOI8-R`;case`koi8-ru`:case`koi8-u`:return`KOI8-U`;case`csmacintosh`:case`mac`:case`macintosh`:case`x-mac-roman`:return`macintosh`;case`iso-8859-11`:case`iso8859-11`:case`iso885911`:case`tis-620`:case`windows-874`:return`windows-874`;case`cp1250`:case`windows-1250`:case`x-cp1250`:return`windows-1250`;case`cp1251`:case`windows-1251`:case`x-cp1251`:return`windows-1251`;case`ansi_x3.4-1968`:case`ascii`:case`cp1252`:case`cp819`:case`csisolatin1`:case`ibm819`:case`iso-8859-1`:case`iso-ir-100`:case`iso8859-1`:case`iso88591`:case`iso_8859-1`:case`iso_8859-1:1987`:case`l1`:case`latin1`:case`us-ascii`:case`windows-1252`:case`x-cp1252`:return`windows-1252`;case`cp1253`:case`windows-1253`:case`x-cp1253`:return`windows-1253`;case`cp1254`:case`csisolatin5`:case`iso-8859-9`:case`iso-ir-148`:case`iso8859-9`:case`iso88599`:case`iso_8859-9`:case`iso_8859-9:1989`:case`l5`:case`latin5`:case`windows-1254`:case`x-cp1254`:return`windows-1254`;case`cp1255`:case`windows-1255`:case`x-cp1255`:return`windows-1255`;case`cp1256`:case`windows-1256`:case`x-cp1256`:return`windows-1256`;case`cp1257`:case`windows-1257`:case`x-cp1257`:return`windows-1257`;case`cp1258`:case`windows-1258`:case`x-cp1258`:return`windows-1258`;case`x-mac-cyrillic`:case`x-mac-ukrainian`:return`x-mac-cyrillic`;case`chinese`:case`csgb2312`:case`csiso58gb231280`:case`gb2312`:case`gb_2312`:case`gb_2312-80`:case`gbk`:case`iso-ir-58`:case`x-gbk`:return`GBK`;case`gb18030`:return`gb18030`;case`big5`:case`big5-hkscs`:case`cn-big5`:case`csbig5`:case`x-x-big5`:return`Big5`;case`cseucpkdfmtjapanese`:case`euc-jp`:case`x-euc-jp`:return`EUC-JP`;case`csiso2022jp`:case`iso-2022-jp`:return`ISO-2022-JP`;case`csshiftjis`:case`ms932`:case`ms_kanji`:case`shift-jis`:case`shift_jis`:case`sjis`:case`windows-31j`:case`x-sjis`:return`Shift_JIS`;case`cseuckr`:case`csksc56011987`:case`euc-kr`:case`iso-ir-149`:case`korean`:case`ks_c_5601-1987`:case`ks_c_5601-1989`:case`ksc5601`:case`ksc_5601`:case`windows-949`:return`EUC-KR`;case`csiso2022kr`:case`hz-gb-2312`:case`iso-2022-cn`:case`iso-2022-cn-ext`:case`iso-2022-kr`:case`replacement`:return`replacement`;case`unicodefffe`:case`utf-16be`:return`UTF-16BE`;case`csunicode`:case`iso-10646-ucs-2`:case`ucs-2`:case`unicode`:case`unicodefeff`:case`utf-16`:case`utf-16le`:return`UTF-16LE`;case`x-user-defined`:return`x-user-defined`;default:return`failure`}}t.exports={getEncoding:n}})),We=/* @__PURE__ */ f(((e,t)=>{let{kState:n,kError:r,kResult:i,kAborted:a,kLastProgressEventFired:o}=Ve(),{ProgressEvent:s}=He(),{getEncoding:c}=Ue(),{serializeAMimeType:l,parseMIMEType:u}=z(),{types:d}=p(`node:util`),{StringDecoder:f}=p(`string_decoder`),{btoa:m}=p(`node:buffer`),h={enumerable:!0,writable:!1,configurable:!1};function g(e,t,s,c){if(e[n]===`loading`)throw new DOMException(`Invalid state`,`InvalidStateError`);e[n]=`loading`,e[i]=null,e[r]=null;let l=t.stream().getReader(),u=[],f=l.read(),p=!0;(async()=>{for(;!e[a];)try{let{done:m,value:h}=await f;if(p&&!e[a]&&queueMicrotask(()=>{_(`loadstart`,e)}),p=!1,!m&&d.isUint8Array(h))u.push(h),(e[o]===void 0||Date.now()-e[o]>=50)&&!e[a]&&(e[o]=Date.now(),queueMicrotask(()=>{_(`progress`,e)})),f=l.read();else if(m){queueMicrotask(()=>{e[n]=`done`;try{let n=v(u,s,t.type,c);if(e[a])return;e[i]=n,_(`load`,e)}catch(t){e[r]=t,_(`error`,e)}e[n]!==`loading`&&_(`loadend`,e)});break}}catch(t){if(e[a])return;queueMicrotask(()=>{e[n]=`done`,e[r]=t,_(`error`,e),e[n]!==`loading`&&_(`loadend`,e)});break}})()}function _(e,t){let n=new s(e,{bubbles:!1,cancelable:!1});t.dispatchEvent(n)}function v(e,t,n,r){switch(t){case`DataURL`:{let t=`data:`,r=u(n||`application/octet-stream`);r!==`failure`&&(t+=l(r)),t+=`;base64,`;let i=new f(`latin1`);for(let n of e)t+=m(i.write(n));return t+=m(i.end()),t}case`Text`:{let t=`failure`;if(r&&(t=c(r)),t===`failure`&&n){let e=u(n);e!==`failure`&&(t=c(e.parameters.get(`charset`)))}return t===`failure`&&(t=`UTF-8`),y(e,t)}case`ArrayBuffer`:return x(e).buffer;case`BinaryString`:{let t=``,n=new f(`latin1`);for(let r of e)t+=n.write(r);return t+=n.end(),t}}}function y(e,t){let n=x(e),r=b(n),i=0;r!==null&&(t=r,i=r===`UTF-8`?3:2);let a=n.slice(i);return new TextDecoder(t).decode(a)}function b(e){let[t,n,r]=e;return t===239&&n===187&&r===191?`UTF-8`:t===254&&n===255?`UTF-16BE`:t===255&&n===254?`UTF-16LE`:null}function x(e){let t=e.reduce((e,t)=>e+t.byteLength,0),n=0;return e.reduce((e,t)=>(e.set(t,n),n+=t.byteLength,e),new Uint8Array(t))}t.exports={staticPropertyDescriptors:h,readOperation:g,fireAProgressEvent:_}})),Ge=/* @__PURE__ */ f(((e,t)=>{let{staticPropertyDescriptors:n,readOperation:r,fireAProgressEvent:i}=We(),{kState:a,kError:o,kResult:s,kEvents:c,kAborted:l}=Ve(),{webidl:u}=B(),{kEnumerableProperty:d}=O();var f=class e extends EventTarget{constructor(){super(),this[a]=`empty`,this[s]=null,this[o]=null,this[c]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(t){u.brandCheck(this,e),u.argumentLengthCheck(arguments,1,`FileReader.readAsArrayBuffer`),t=u.converters.Blob(t,{strict:!1}),r(this,t,`ArrayBuffer`)}readAsBinaryString(t){u.brandCheck(this,e),u.argumentLengthCheck(arguments,1,`FileReader.readAsBinaryString`),t=u.converters.Blob(t,{strict:!1}),r(this,t,`BinaryString`)}readAsText(t,n=void 0){u.brandCheck(this,e),u.argumentLengthCheck(arguments,1,`FileReader.readAsText`),t=u.converters.Blob(t,{strict:!1}),n!==void 0&&(n=u.converters.DOMString(n,`FileReader.readAsText`,`encoding`)),r(this,t,`Text`,n)}readAsDataURL(t){u.brandCheck(this,e),u.argumentLengthCheck(arguments,1,`FileReader.readAsDataURL`),t=u.converters.Blob(t,{strict:!1}),r(this,t,`DataURL`)}abort(){this[a]===`empty`||this[a]===`done`?this[s]=null:(this[a]===`loading`&&(this[a]=`done`,this[s]=null),this[l]=!0,i(`abort`,this),this[a]!==`loading`&&i(`loadend`,this))}get readyState(){switch(u.brandCheck(this,e),this[a]){case`empty`:return this.EMPTY;case`loading`:return this.LOADING;case`done`:return this.DONE}}get result(){return u.brandCheck(this,e),this[s]}get error(){return u.brandCheck(this,e),this[o]}get onloadend(){return u.brandCheck(this,e),this[c].loadend}set onloadend(t){u.brandCheck(this,e),this[c].loadend&&this.removeEventListener(`loadend`,this[c].loadend),typeof t==`function`?(this[c].loadend=t,this.addEventListener(`loadend`,t)):this[c].loadend=null}get onerror(){return u.brandCheck(this,e),this[c].error}set onerror(t){u.brandCheck(this,e),this[c].error&&this.removeEventListener(`error`,this[c].error),typeof t==`function`?(this[c].error=t,this.addEventListener(`error`,t)):this[c].error=null}get onloadstart(){return u.brandCheck(this,e),this[c].loadstart}set onloadstart(t){u.brandCheck(this,e),this[c].loadstart&&this.removeEventListener(`loadstart`,this[c].loadstart),typeof t==`function`?(this[c].loadstart=t,this.addEventListener(`loadstart`,t)):this[c].loadstart=null}get onprogress(){return u.brandCheck(this,e),this[c].progress}set onprogress(t){u.brandCheck(this,e),this[c].progress&&this.removeEventListener(`progress`,this[c].progress),typeof t==`function`?(this[c].progress=t,this.addEventListener(`progress`,t)):this[c].progress=null}get onload(){return u.brandCheck(this,e),this[c].load}set onload(t){u.brandCheck(this,e),this[c].load&&this.removeEventListener(`load`,this[c].load),typeof t==`function`?(this[c].load=t,this.addEventListener(`load`,t)):this[c].load=null}get onabort(){return u.brandCheck(this,e),this[c].abort}set onabort(t){u.brandCheck(this,e),this[c].abort&&this.removeEventListener(`abort`,this[c].abort),typeof t==`function`?(this[c].abort=t,this.addEventListener(`abort`,t)):this[c].abort=null}};f.EMPTY=f.prototype.EMPTY=0,f.LOADING=f.prototype.LOADING=1,f.DONE=f.prototype.DONE=2,Object.defineProperties(f.prototype,{EMPTY:n,LOADING:n,DONE:n,readAsArrayBuffer:d,readAsBinaryString:d,readAsText:d,readAsDataURL:d,abort:d,readyState:d,result:d,error:d,onloadstart:d,onprogress:d,onload:d,onabort:d,onerror:d,onloadend:d,[Symbol.toStringTag]:{value:`FileReader`,writable:!1,enumerable:!1,configurable:!0}}),Object.defineProperties(f,{EMPTY:n,LOADING:n,DONE:n}),t.exports={FileReader:f}})),Ke=/* @__PURE__ */ f(((e,t)=>{t.exports={kConstruct:w().kConstruct}})),qe=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),{URLSerializer:r}=z(),{isValidHeaderName:i}=V();function a(e,t,n=!1){return r(e,n)===r(t,n)}function o(e){n(e!==null);let t=[];for(let n of e.split(`,`))n=n.trim(),i(n)&&t.push(n);return t}t.exports={urlEquals:a,getFieldValues:o}})),Je=/* @__PURE__ */ f(((e,t)=>{let{kConstruct:n}=Ke(),{urlEquals:r,getFieldValues:i}=qe(),{kEnumerableProperty:a,isDisturbed:o}=O(),{webidl:s}=B(),{Response:c,cloneResponse:l,fromInnerResponse:u}=Le(),{Request:d,fromInnerRequest:f}=ze(),{kState:m}=H(),{fetching:h}=Be(),{urlIsHttpHttpsScheme:g,createDeferredPromise:_,readAllBytes:v}=V(),y=p(`node:assert`);var b=class e{#e;constructor(){arguments[0]!==n&&s.illegalConstructor(),s.util.markAsUncloneable(this),this.#e=arguments[1]}async match(t,n={}){s.brandCheck(this,e);let r=`Cache.match`;s.argumentLengthCheck(arguments,1,r),t=s.converters.RequestInfo(t,r,`request`),n=s.converters.CacheQueryOptions(n,r,`options`);let i=this.#i(t,n,1);if(i.length!==0)return i[0]}async matchAll(t=void 0,n={}){s.brandCheck(this,e);let r=`Cache.matchAll`;return t!==void 0&&(t=s.converters.RequestInfo(t,r,`request`)),n=s.converters.CacheQueryOptions(n,r,`options`),this.#i(t,n)}async add(t){s.brandCheck(this,e);let n=`Cache.add`;s.argumentLengthCheck(arguments,1,n),t=s.converters.RequestInfo(t,n,`request`);let r=[t];return await this.addAll(r)}async addAll(t){s.brandCheck(this,e);let n=`Cache.addAll`;s.argumentLengthCheck(arguments,1,n);let r=[],a=[];for(let e of t){if(e===void 0)throw s.errors.conversionFailed({prefix:n,argument:`Argument 1`,types:[`undefined is not allowed`]});if(e=s.converters.RequestInfo(e),typeof e==`string`)continue;let t=e[m];if(!g(t.url)||t.method!==`GET`)throw s.errors.exception({header:n,message:`Expected http/s scheme when method is not GET.`})}let o=[];for(let e of t){let t=new d(e)[m];if(!g(t.url))throw s.errors.exception({header:n,message:`Expected http/s scheme.`});t.initiator=`fetch`,t.destination=`subresource`,a.push(t);let c=_();o.push(h({request:t,processResponse(e){if(e.type===`error`||e.status===206||e.status<200||e.status>299)c.reject(s.errors.exception({header:`Cache.addAll`,message:`Received an invalid status code or the request failed.`}));else if(e.headersList.contains(`vary`)){let t=i(e.headersList.get(`vary`));for(let e of t)if(e===`*`){c.reject(s.errors.exception({header:`Cache.addAll`,message:`invalid vary field value`}));for(let e of o)e.abort();return}}},processResponseEndOfBody(e){e.aborted?c.reject(new DOMException(`aborted`,`AbortError`)):c.resolve(e)}})),r.push(c.promise)}let c=await Promise.all(r),l=[],u=0;for(let e of c){let t={type:`put`,request:a[u],response:e};l.push(t),u++}let f=_(),p=null;try{this.#t(l)}catch(e){p=e}return queueMicrotask(()=>{p===null?f.resolve(void 0):f.reject(p)}),f.promise}async put(t,n){s.brandCheck(this,e);let r=`Cache.put`;s.argumentLengthCheck(arguments,2,r),t=s.converters.RequestInfo(t,r,`request`),n=s.converters.Response(n,r,`response`);let a=null;if(a=t instanceof d?t[m]:new d(t)[m],!g(a.url)||a.method!==`GET`)throw s.errors.exception({header:r,message:`Expected an http/s scheme when method is not GET`});let c=n[m];if(c.status===206)throw s.errors.exception({header:r,message:`Got 206 status`});if(c.headersList.contains(`vary`)){let e=i(c.headersList.get(`vary`));for(let t of e)if(t===`*`)throw s.errors.exception({header:r,message:`Got * vary field value`})}if(c.body&&(o(c.body.stream)||c.body.stream.locked))throw s.errors.exception({header:r,message:`Response body is locked or disturbed`});let u=l(c),f=_();if(c.body!=null){let e=c.body.stream.getReader();v(e).then(f.resolve,f.reject)}else f.resolve(void 0);let p=[],h={type:`put`,request:a,response:u};p.push(h);let y=await f.promise;u.body!=null&&(u.body.source=y);let b=_(),x=null;try{this.#t(p)}catch(e){x=e}return queueMicrotask(()=>{x===null?b.resolve():b.reject(x)}),b.promise}async delete(t,n={}){s.brandCheck(this,e);let r=`Cache.delete`;s.argumentLengthCheck(arguments,1,r),t=s.converters.RequestInfo(t,r,`request`),n=s.converters.CacheQueryOptions(n,r,`options`);let i=null;if(t instanceof d){if(i=t[m],i.method!==`GET`&&!n.ignoreMethod)return!1}else y(typeof t==`string`),i=new d(t)[m];let a=[],o={type:`delete`,request:i,options:n};a.push(o);let c=_(),l=null,u;try{u=this.#t(a)}catch(e){l=e}return queueMicrotask(()=>{l===null?c.resolve(!!u?.length):c.reject(l)}),c.promise}async keys(t=void 0,n={}){s.brandCheck(this,e);let r=`Cache.keys`;t!==void 0&&(t=s.converters.RequestInfo(t,r,`request`)),n=s.converters.CacheQueryOptions(n,r,`options`);let i=null;if(t!==void 0){if(t instanceof d){if(i=t[m],i.method!==`GET`&&!n.ignoreMethod)return[]}else typeof t==`string`&&(i=new d(t)[m])}let a=_(),o=[];if(t===void 0)for(let e of this.#e)o.push(e[0]);else{let e=this.#n(i,n);for(let t of e)o.push(t[0])}return queueMicrotask(()=>{let e=[];for(let t of o){let n=f(t,new AbortController().signal,`immutable`);e.push(n)}a.resolve(Object.freeze(e))}),a.promise}#t(e){let t=this.#e,n=[...t],r=[],i=[];try{for(let n of e){if(n.type!==`delete`&&n.type!==`put`)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`operation type does not match "delete" or "put"`});if(n.type===`delete`&&n.response!=null)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`delete operation should not have an associated response`});if(this.#n(n.request,n.options,r).length)throw new DOMException(`???`,`InvalidStateError`);let e;if(n.type===`delete`){if(e=this.#n(n.request,n.options),e.length===0)return[];for(let n of e){let e=t.indexOf(n);y(e!==-1),t.splice(e,1)}}else if(n.type===`put`){if(n.response==null)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`put operation should have an associated response`});let i=n.request;if(!g(i.url))throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`expected http or https scheme`});if(i.method!==`GET`)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`not get method`});if(n.options!=null)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`options must not be defined`});e=this.#n(n.request);for(let n of e){let e=t.indexOf(n);y(e!==-1),t.splice(e,1)}t.push([n.request,n.response]),r.push([n.request,n.response])}i.push([n.request,n.response])}return i}catch(e){throw this.#e.length=0,this.#e=n,e}}#n(e,t,n){let r=[],i=n??this.#e;for(let n of i){let[i,a]=n;this.#r(e,i,a,t)&&r.push(n)}return r}#r(e,t,n=null,a){let o=new URL(e.url),s=new URL(t.url);if(a?.ignoreSearch&&(s.search=``,o.search=``),!r(o,s,!0))return!1;if(n==null||a?.ignoreVary||!n.headersList.contains(`vary`))return!0;let c=i(n.headersList.get(`vary`));for(let n of c)if(n===`*`||t.headersList.get(n)!==e.headersList.get(n))return!1;return!0}#i(e,t,n=1/0){let r=null;if(e!==void 0){if(e instanceof d){if(r=e[m],r.method!==`GET`&&!t.ignoreMethod)return[]}else typeof e==`string`&&(r=new d(e)[m])}let i=[];if(e===void 0)for(let e of this.#e)i.push(e[1]);else{let e=this.#n(r,t);for(let t of e)i.push(t[1])}let a=[];for(let e of i){let t=u(e,`immutable`);if(a.push(t.clone()),a.length>=n)break}return Object.freeze(a)}};Object.defineProperties(b.prototype,{[Symbol.toStringTag]:{value:`Cache`,configurable:!0},match:a,matchAll:a,add:a,addAll:a,put:a,delete:a,keys:a});let x=[{key:`ignoreSearch`,converter:s.converters.boolean,defaultValue:()=>!1},{key:`ignoreMethod`,converter:s.converters.boolean,defaultValue:()=>!1},{key:`ignoreVary`,converter:s.converters.boolean,defaultValue:()=>!1}];s.converters.CacheQueryOptions=s.dictionaryConverter(x),s.converters.MultiCacheQueryOptions=s.dictionaryConverter([...x,{key:`cacheName`,converter:s.converters.DOMString}]),s.converters.Response=s.interfaceConverter(c),s.converters[`sequence`]=s.sequenceConverter(s.converters.RequestInfo),t.exports={Cache:b}})),Ye=/* @__PURE__ */ f(((e,t)=>{let{kConstruct:n}=Ke(),{Cache:r}=Je(),{webidl:i}=B(),{kEnumerableProperty:a}=O();var o=class e{#e=/* @__PURE__ */ new Map;constructor(){arguments[0]!==n&&i.illegalConstructor(),i.util.markAsUncloneable(this)}async match(t,a={}){if(i.brandCheck(this,e),i.argumentLengthCheck(arguments,1,`CacheStorage.match`),t=i.converters.RequestInfo(t),a=i.converters.MultiCacheQueryOptions(a),a.cacheName!=null){if(this.#e.has(a.cacheName)){let e=this.#e.get(a.cacheName);return await new r(n,e).match(t,a)}}else for(let e of this.#e.values()){let i=await new r(n,e).match(t,a);if(i!==void 0)return i}}async has(t){i.brandCheck(this,e);let n=`CacheStorage.has`;return i.argumentLengthCheck(arguments,1,n),t=i.converters.DOMString(t,n,`cacheName`),this.#e.has(t)}async open(t){i.brandCheck(this,e);let a=`CacheStorage.open`;if(i.argumentLengthCheck(arguments,1,a),t=i.converters.DOMString(t,a,`cacheName`),this.#e.has(t)){let e=this.#e.get(t);return new r(n,e)}let o=[];return this.#e.set(t,o),new r(n,o)}async delete(t){i.brandCheck(this,e);let n=`CacheStorage.delete`;return i.argumentLengthCheck(arguments,1,n),t=i.converters.DOMString(t,n,`cacheName`),this.#e.delete(t)}async keys(){return i.brandCheck(this,e),[...this.#e.keys()]}};Object.defineProperties(o.prototype,{[Symbol.toStringTag]:{value:`CacheStorage`,configurable:!0},match:a,has:a,open:a,delete:a,keys:a}),t.exports={CacheStorage:o}})),Xe=/* @__PURE__ */ f(((e,t)=>{t.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}})),Ze=/* @__PURE__ */ f(((e,t)=>{function n(e){for(let t=0;t=0&&n<=8||n>=10&&n<=31||n===127)return!0}return!1}function r(e){for(let t=0;t126||n===34||n===40||n===41||n===60||n===62||n===64||n===44||n===59||n===58||n===92||n===47||n===91||n===93||n===63||n===61||n===123||n===125)throw Error(`Invalid cookie name`)}}function i(e){let t=e.length,n=0;if(e[0]===`"`){if(t===1||e[t-1]!==`"`)throw Error(`Invalid cookie value`);--t,++n}for(;n126||t===34||t===44||t===59||t===92)throw Error(`Invalid cookie value`)}}function a(e){for(let t=0;t126||n===59)throw Error(`Invalid cookie path`)}}function o(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function s(e){if(e===` `)return;if(e.length>255)throw Error(`Invalid cookie domain`);let t=0;for(let n=0;n63)throw Error(`Invalid cookie domain`)}if(t===0||e.charCodeAt(e.length-1)===45)throw Error(`Invalid cookie domain`)}let c=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],l=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],u=Array(61).fill(0).map((e,t)=>t.toString().padStart(2,`0`));function d(e){return typeof e==`number`&&(e=new Date(e)),`${c[e.getUTCDay()]}, ${u[e.getUTCDate()]} ${l[e.getUTCMonth()]} ${e.getUTCFullYear()} ${u[e.getUTCHours()]}:${u[e.getUTCMinutes()]}:${u[e.getUTCSeconds()]} GMT`}function f(e){if(e<0)throw Error(`Invalid cookie max-age`)}function p(e){if(e.name.length===0)return null;r(e.name),i(e.value);let t=[`${e.name}=${e.value}`];e.name.startsWith(`__Secure-`)&&(e.secure=!0),e.name.startsWith(`__Host-`)&&(e.secure=!0,e.domain=null,e.path=`/`),e.secure&&t.push(`Secure`),e.httpOnly&&t.push(`HttpOnly`),typeof e.maxAge==`number`&&(f(e.maxAge),t.push(`Max-Age=${e.maxAge}`)),e.domain&&(s(e.domain),t.push(`Domain=${e.domain}`)),e.path&&(a(e.path),t.push(`Path=${e.path}`)),e.expires&&e.expires.toString()!==`Invalid Date`&&t.push(`Expires=${d(e.expires)}`),e.sameSite&&t.push(`SameSite=${e.sameSite}`);for(let n of e.unparsed){if(!n.includes(`=`))throw Error(`Invalid unparsed`);let[e,...a]=n.split(`=`),o=e.trim(),s=a.join(`=`);r(o),i(s),t.push(`${o}=${s}`)}return t.join(`; `)}t.exports={isCTLExcludingHtab:n,validateCookieName:r,validateCookiePath:a,validateCookieValue:i,toIMFDate:d,stringify:p}})),Qe=/* @__PURE__ */ f(((e,t)=>{let{maxNameValuePairSize:n,maxAttributeValueSize:r}=Xe(),{isCTLExcludingHtab:i}=Ze(),{collectASequenceOfCodePointsFast:a}=z(),o=p(`node:assert`);function s(e){if(i(e))return null;let t=``,r=``,o=``,s=``;if(e.includes(`;`)){let n={position:0};t=a(`;`,e,n),r=e.slice(n.position)}else t=e;if(!t.includes(`=`))s=t;else{let e={position:0};o=a(`=`,t,e),s=t.slice(e.position+1)}return o=o.trim(),s=s.trim(),o.length+s.length>n?null:{name:o,value:s,...c(r)}}function c(e,t={}){if(e.length===0)return t;o(e[0]===`;`),e=e.slice(1);let n=``;e.includes(`;`)?(n=a(`;`,e,{position:0}),e=e.slice(n.length)):(n=e,e=``);let i=``,s=``;if(n.includes(`=`)){let e={position:0};i=a(`=`,n,e),s=n.slice(e.position+1)}else i=n;if(i=i.trim(),s=s.trim(),s.length>r)return c(e,t);let l=i.toLowerCase();if(l===`expires`)t.expires=new Date(s);else if(l===`max-age`){let n=s.charCodeAt(0);if((n<48||n>57)&&s[0]!==`-`||!/^\d+$/.test(s))return c(e,t);t.maxAge=Number(s)}else if(l===`domain`){let e=s;e[0]===`.`&&(e=e.slice(1)),e=e.toLowerCase(),t.domain=e}else if(l===`path`){let e=``;e=s.length===0||s[0]!==`/`?`/`:s,t.path=e}else if(l===`secure`)t.secure=!0;else if(l===`httponly`)t.httpOnly=!0;else if(l===`samesite`){let e=s.toLowerCase();e===`none`?t.sameSite=`None`:e===`strict`?t.sameSite=`Strict`:e===`lax`&&(t.sameSite=`Lax`)}else t.unparsed??=[],t.unparsed.push(`${i}=${s}`);return c(e,t)}t.exports={parseSetCookie:s,parseUnparsedAttributes:c}})),$e=/* @__PURE__ */ f(((e,t)=>{let{parseSetCookie:n}=Qe(),{stringify:r}=Ze(),{webidl:i}=B(),{Headers:a}=Ie();function o(e){i.argumentLengthCheck(arguments,1,`getCookies`),i.brandCheck(e,a,{strict:!1});let t=e.get(`cookie`),n={};if(!t)return n;for(let e of t.split(`;`)){let[t,...r]=e.split(`=`);n[t.trim()]=r.join(`=`)}return n}function s(e,t,n){i.brandCheck(e,a,{strict:!1});let r=`deleteCookie`;i.argumentLengthCheck(arguments,2,r),t=i.converters.DOMString(t,r,`name`),n=i.converters.DeleteCookieAttributes(n),l(e,{name:t,value:``,expires:/* @__PURE__ */ new Date(0),...n})}function c(e){i.argumentLengthCheck(arguments,1,`getSetCookies`),i.brandCheck(e,a,{strict:!1});let t=e.getSetCookie();return t?t.map(e=>n(e)):[]}function l(e,t){i.argumentLengthCheck(arguments,2,`setCookie`),i.brandCheck(e,a,{strict:!1}),t=i.converters.Cookie(t);let n=r(t);n&&e.append(`Set-Cookie`,n)}i.converters.DeleteCookieAttributes=i.dictionaryConverter([{converter:i.nullableConverter(i.converters.DOMString),key:`path`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.DOMString),key:`domain`,defaultValue:()=>null}]),i.converters.Cookie=i.dictionaryConverter([{converter:i.converters.DOMString,key:`name`},{converter:i.converters.DOMString,key:`value`},{converter:i.nullableConverter(e=>typeof e==`number`?i.converters[`unsigned long long`](e):new Date(e)),key:`expires`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters[`long long`]),key:`maxAge`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.DOMString),key:`domain`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.DOMString),key:`path`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.boolean),key:`secure`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.boolean),key:`httpOnly`,defaultValue:()=>null},{converter:i.converters.USVString,key:`sameSite`,allowedValues:[`Strict`,`Lax`,`None`]},{converter:i.sequenceConverter(i.converters.DOMString),key:`unparsed`,defaultValue:()=>[]}]),t.exports={getCookies:o,deleteCookie:s,getSetCookies:c,setCookie:l}})),et=/* @__PURE__ */ f(((e,t)=>{let{webidl:n}=B(),{kEnumerableProperty:r}=O(),{kConstruct:i}=w(),{MessagePort:a}=p(`node:worker_threads`);var o=class e extends Event{#e;constructor(e,t={}){if(e===i){super(arguments[1],arguments[2]),n.util.markAsUncloneable(this);return}let r=`MessageEvent constructor`;n.argumentLengthCheck(arguments,1,r),e=n.converters.DOMString(e,r,`type`),t=n.converters.MessageEventInit(t,r,`eventInitDict`),super(e,t),this.#e=t,n.util.markAsUncloneable(this)}get data(){return n.brandCheck(this,e),this.#e.data}get origin(){return n.brandCheck(this,e),this.#e.origin}get lastEventId(){return n.brandCheck(this,e),this.#e.lastEventId}get source(){return n.brandCheck(this,e),this.#e.source}get ports(){return n.brandCheck(this,e),Object.isFrozen(this.#e.ports)||Object.freeze(this.#e.ports),this.#e.ports}initMessageEvent(t,r=!1,i=!1,a=null,o=``,s=``,c=null,l=[]){return n.brandCheck(this,e),n.argumentLengthCheck(arguments,1,`MessageEvent.initMessageEvent`),new e(t,{bubbles:r,cancelable:i,data:a,origin:o,lastEventId:s,source:c,ports:l})}static createFastMessageEvent(t,n){let r=new e(i,t,n);return r.#e=n,r.#e.data??=null,r.#e.origin??=``,r.#e.lastEventId??=``,r.#e.source??=null,r.#e.ports??=[],r}};let{createFastMessageEvent:s}=o;delete o.createFastMessageEvent;var c=class e extends Event{#e;constructor(e,t={}){let r=`CloseEvent constructor`;n.argumentLengthCheck(arguments,1,r),e=n.converters.DOMString(e,r,`type`),t=n.converters.CloseEventInit(t),super(e,t),this.#e=t,n.util.markAsUncloneable(this)}get wasClean(){return n.brandCheck(this,e),this.#e.wasClean}get code(){return n.brandCheck(this,e),this.#e.code}get reason(){return n.brandCheck(this,e),this.#e.reason}},l=class e extends Event{#e;constructor(e,t){let r=`ErrorEvent constructor`;n.argumentLengthCheck(arguments,1,r),super(e,t),n.util.markAsUncloneable(this),e=n.converters.DOMString(e,r,`type`),t=n.converters.ErrorEventInit(t??{}),this.#e=t}get message(){return n.brandCheck(this,e),this.#e.message}get filename(){return n.brandCheck(this,e),this.#e.filename}get lineno(){return n.brandCheck(this,e),this.#e.lineno}get colno(){return n.brandCheck(this,e),this.#e.colno}get error(){return n.brandCheck(this,e),this.#e.error}};Object.defineProperties(o.prototype,{[Symbol.toStringTag]:{value:`MessageEvent`,configurable:!0},data:r,origin:r,lastEventId:r,source:r,ports:r,initMessageEvent:r}),Object.defineProperties(c.prototype,{[Symbol.toStringTag]:{value:`CloseEvent`,configurable:!0},reason:r,code:r,wasClean:r}),Object.defineProperties(l.prototype,{[Symbol.toStringTag]:{value:`ErrorEvent`,configurable:!0},message:r,filename:r,lineno:r,colno:r,error:r}),n.converters.MessagePort=n.interfaceConverter(a),n.converters[`sequence`]=n.sequenceConverter(n.converters.MessagePort);let u=[{key:`bubbles`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`cancelable`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`composed`,converter:n.converters.boolean,defaultValue:()=>!1}];n.converters.MessageEventInit=n.dictionaryConverter([...u,{key:`data`,converter:n.converters.any,defaultValue:()=>null},{key:`origin`,converter:n.converters.USVString,defaultValue:()=>``},{key:`lastEventId`,converter:n.converters.DOMString,defaultValue:()=>``},{key:`source`,converter:n.nullableConverter(n.converters.MessagePort),defaultValue:()=>null},{key:`ports`,converter:n.converters[`sequence`],defaultValue:()=>[]}]),n.converters.CloseEventInit=n.dictionaryConverter([...u,{key:`wasClean`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`code`,converter:n.converters[`unsigned short`],defaultValue:()=>0},{key:`reason`,converter:n.converters.USVString,defaultValue:()=>``}]),n.converters.ErrorEventInit=n.dictionaryConverter([...u,{key:`message`,converter:n.converters.DOMString,defaultValue:()=>``},{key:`filename`,converter:n.converters.USVString,defaultValue:()=>``},{key:`lineno`,converter:n.converters[`unsigned long`],defaultValue:()=>0},{key:`colno`,converter:n.converters[`unsigned long`],defaultValue:()=>0},{key:`error`,converter:n.converters.any}]),t.exports={MessageEvent:o,CloseEvent:c,ErrorEvent:l,createFastMessageEvent:s}})),tt=/* @__PURE__ */ f(((e,t)=>{t.exports={uid:`258EAFA5-E914-47DA-95CA-C5AB0DC85B11`,sentCloseFrameState:{NOT_SENT:0,PROCESSING:1,SENT:2},staticPropertyDescriptors:{enumerable:!0,writable:!1,configurable:!1},states:{CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},opcodes:{CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},maxUnsigned16Bit:2**16-1,parserStates:{INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},emptyBuffer:Buffer.allocUnsafe(0),sendHints:{string:1,typedArray:2,arrayBuffer:3,blob:4}}})),nt=/* @__PURE__ */ f(((e,t)=>{t.exports={kWebSocketURL:Symbol(`url`),kReadyState:Symbol(`ready state`),kController:Symbol(`controller`),kResponse:Symbol(`response`),kBinaryType:Symbol(`binary type`),kSentClose:Symbol(`sent close`),kReceivedClose:Symbol(`received close`),kByteParser:Symbol(`byte parser`)}})),rt=/* @__PURE__ */ f(((e,t)=>{let{kReadyState:n,kController:r,kResponse:i,kBinaryType:a,kWebSocketURL:o}=nt(),{states:s,opcodes:c}=tt(),{ErrorEvent:l,createFastMessageEvent:u}=et(),{isUtf8:d}=p(`node:buffer`),{collectASequenceOfCodePointsFast:f,removeHTTPWhitespace:m}=z();function h(e){return e[n]===s.CONNECTING}function g(e){return e[n]===s.OPEN}function _(e){return e[n]===s.CLOSING}function v(e){return e[n]===s.CLOSED}function y(e,t,n=(e,t)=>new Event(e,t),r={}){let i=n(e,r);t.dispatchEvent(i)}function b(e,t,r){if(e[n]!==s.OPEN)return;let i;if(t===c.TEXT)try{i=N(r)}catch{w(e,`Received invalid UTF-8 in text frame.`);return}else t===c.BINARY&&(i=e[a]===`blob`?new Blob([r]):x(r));y(`message`,e,u,{origin:e[o].origin,data:i})}function x(e){return e.byteLength===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function S(e){if(e.length===0)return!1;for(let t=0;t126||n===34||n===40||n===41||n===44||n===47||n===58||n===59||n===60||n===61||n===62||n===63||n===64||n===91||n===92||n===93||n===123||n===125)return!1}return!0}function C(e){return e>=1e3&&e<1015?e!==1004&&e!==1005&&e!==1006:e>=3e3&&e<=4999}function w(e,t){let{[r]:n,[i]:a}=e;n.abort(),a?.socket&&!a.socket.destroyed&&a.socket.destroy(),t&&y(`error`,e,(e,t)=>new l(e,t),{error:Error(t),message:t})}function T(e){return e===c.CLOSE||e===c.PING||e===c.PONG}function E(e){return e===c.CONTINUATION}function D(e){return e===c.TEXT||e===c.BINARY}function O(e){return D(e)||E(e)||T(e)}function k(e){let t={position:0},n=/* @__PURE__ */ new Map;for(;t.position57)return!1}let t=Number.parseInt(e,10);return t>=8&&t<=15}let j=typeof process.versions.icu==`string`,M=j?new TextDecoder(`utf-8`,{fatal:!0}):void 0,N=j?M.decode.bind(M):function(e){if(d(e))return e.toString(`utf-8`);throw TypeError(`Invalid utf-8 received.`)};t.exports={isConnecting:h,isEstablished:g,isClosing:_,isClosed:v,fireEvent:y,isValidSubprotocol:S,isValidStatusCode:C,failWebsocketConnection:w,websocketMessageReceived:b,utf8Decode:N,isControlFrame:T,isContinuationFrame:E,isTextBinaryFrame:D,isValidOpcode:O,parseExtensions:k,isValidClientWindowBits:A}})),it=/* @__PURE__ */ f(((e,t)=>{let{maxUnsigned16Bit:n}=tt(),r=16386,i,a=null,o=r;try{i=p(`node:crypto`)}catch{i={randomFillSync:function(e,t,n){for(let t=0;t>`](e,t,n,r.bind(e)):s.converters[`record`](e,t,n)}throw s.errors.conversionFailed({prefix:`Headers constructor`,argument:`Argument 1`,types:[`sequence>`,`record`]})},t.exports={fill:h,compareHeaderName:_,Headers:y,HeadersList:v,getHeadersGuard:b,setHeadersGuard:x,setHeadersList:C,getHeadersList:S}})),Ie=/* @__PURE__ */ f(((e,t)=>{let{Headers:n,HeadersList:r,fill:i,getHeadersGuard:a,setHeadersGuard:o,setHeadersList:s}=Fe(),{extractBody:c,cloneBody:l,mixinBody:u,hasFinalizationRegistry:d,streamRegistry:f,bodyUnusable:m}=ie(),h=O(),g=p(`node:util`),{kEnumerableProperty:_}=h,{isValidReasonPhrase:v,isCancelled:y,isAborted:b,isBlobLike:x,serializeJavascriptValueToJSONString:S,isErrorLike:C,isomorphicEncode:T,environmentSettingsObject:E}=V(),{redirectStatusSet:D,nullBodyStatus:k}=te(),{kState:A,kHeaders:j}=H(),{webidl:M}=B(),{FormData:N}=re(),{URLSerializer:P}=z(),{kConstruct:F}=w(),I=p(`node:assert`),{types:L}=p(`node:util`),ee=new TextEncoder(`utf-8`);var R=class e{static error(){return se(ae(),`immutable`)}static json(e,t={}){M.argumentLengthCheck(arguments,1,`Response.json`),t!==null&&(t=M.converters.ResponseInit(t));let n=ee.encode(S(e)),r=c(n),i=se(U({}),`response`);return q(i,t,{body:r[0],type:`application/json`}),i}static redirect(e,t=302){M.argumentLengthCheck(arguments,1,`Response.redirect`),e=M.converters.USVString(e),t=M.converters[`unsigned short`](t);let n;try{n=new URL(e,E.settingsObject.baseUrl)}catch(t){throw TypeError(`Failed to parse URL from ${e}`,{cause:t})}if(!D.has(t))throw RangeError(`Invalid status code ${t}`);let r=se(U({}),`immutable`);r[A].status=t;let i=T(P(n));return r[A].headersList.append(`location`,i,!0),r}constructor(e=null,t={}){if(M.util.markAsUncloneable(this),e===F)return;e!==null&&(e=M.converters.BodyInit(e)),t=M.converters.ResponseInit(t),this[A]=U({}),this[j]=new n(F),o(this[j],`response`),s(this[j],this[A].headersList);let r=null;if(e!=null){let[t,n]=c(e);r={body:t,type:n}}q(this,t,r)}get type(){return M.brandCheck(this,e),this[A].type}get url(){M.brandCheck(this,e);let t=this[A].urlList,n=t[t.length-1]??null;return n===null?``:P(n,!0)}get redirected(){return M.brandCheck(this,e),this[A].urlList.length>1}get status(){return M.brandCheck(this,e),this[A].status}get ok(){return M.brandCheck(this,e),this[A].status>=200&&this[A].status<=299}get statusText(){return M.brandCheck(this,e),this[A].statusText}get headers(){return M.brandCheck(this,e),this[j]}get body(){return M.brandCheck(this,e),this[A].body?this[A].body.stream:null}get bodyUsed(){return M.brandCheck(this,e),!!this[A].body&&h.isDisturbed(this[A].body.stream)}clone(){if(M.brandCheck(this,e),m(this))throw M.errors.exception({header:`Response.clone`,message:`Body has already been consumed.`});let t=ne(this[A]);return d&&this[A].body?.stream&&f.register(this,new WeakRef(this[A].body.stream)),se(t,a(this[j]))}[g.inspect.custom](e,t){t.depth===null&&(t.depth=2),t.colors??=!0;let n={status:this.status,statusText:this.statusText,headers:this.headers,body:this.body,bodyUsed:this.bodyUsed,ok:this.ok,redirected:this.redirected,type:this.type,url:this.url};return`Response ${g.formatWithOptions(t,n)}`}};u(R),Object.defineProperties(R.prototype,{type:_,url:_,status:_,ok:_,redirected:_,statusText:_,headers:_,clone:_,body:_,bodyUsed:_,[Symbol.toStringTag]:{value:`Response`,configurable:!0}}),Object.defineProperties(R,{json:_,redirect:_,error:_});function ne(e){if(e.internalResponse)return G(ne(e.internalResponse),e.type);let t=U({...e,body:null});return e.body!=null&&(t.body=l(t,e.body)),t}function U(e){return{aborted:!1,rangeRequested:!1,timingAllowPassed:!1,requestIncludesCredentials:!1,type:`default`,status:200,timingInfo:null,cacheState:``,statusText:``,...e,headersList:e?.headersList?new r(e?.headersList):new r,urlList:e?.urlList?[...e.urlList]:[]}}function ae(e){return U({type:`error`,status:0,error:C(e)?e:Error(e&&String(e)),aborted:e&&e.name===`AbortError`})}function oe(e){return e.type===`error`&&e.status===0}function W(e,t){return t={internalResponse:e,...t},new Proxy(e,{get(e,n){return n in t?t[n]:e[n]},set(e,n,r){return I(!(n in t)),e[n]=r,!0}})}function G(e,t){if(t===`basic`)return W(e,{type:`basic`,headersList:e.headersList});if(t===`cors`)return W(e,{type:`cors`,headersList:e.headersList});if(t===`opaque`)return W(e,{type:`opaque`,urlList:Object.freeze([]),status:0,statusText:``,body:null});if(t===`opaqueredirect`)return W(e,{type:`opaqueredirect`,status:0,statusText:``,headersList:[],body:null});I(!1)}function K(e,t=null){return I(y(e)),b(e)?ae(Object.assign(new DOMException(`The operation was aborted.`,`AbortError`),{cause:t})):ae(Object.assign(new DOMException(`Request was cancelled.`),{cause:t}))}function q(e,t,n){if(t.status!==null&&(t.status<200||t.status>599))throw RangeError(`init["status"] must be in the range of 200 to 599, inclusive.`);if(`statusText`in t&&t.statusText!=null&&!v(String(t.statusText)))throw TypeError(`Invalid statusText`);if(`status`in t&&t.status!=null&&(e[A].status=t.status),`statusText`in t&&t.statusText!=null&&(e[A].statusText=t.statusText),`headers`in t&&t.headers!=null&&i(e[j],t.headers),n){if(k.includes(e.status))throw M.errors.exception({header:`Response constructor`,message:`Invalid response status code ${e.status}`});e[A].body=n.body,n.type!=null&&!e[A].headersList.contains(`content-type`,!0)&&e[A].headersList.append(`content-type`,n.type,!0)}}function se(e,t){let r=new R(F);return r[A]=e,r[j]=new n(F),s(r[j],e.headersList),o(r[j],t),d&&e.body?.stream&&f.register(r,new WeakRef(e.body.stream)),r}M.converters.ReadableStream=M.interfaceConverter(ReadableStream),M.converters.FormData=M.interfaceConverter(N),M.converters.URLSearchParams=M.interfaceConverter(URLSearchParams),M.converters.XMLHttpRequestBodyInit=function(e,t,n){return typeof e==`string`?M.converters.USVString(e,t,n):x(e)?M.converters.Blob(e,t,n,{strict:!1}):ArrayBuffer.isView(e)||L.isArrayBuffer(e)?M.converters.BufferSource(e,t,n):h.isFormDataLike(e)?M.converters.FormData(e,t,n,{strict:!1}):e instanceof URLSearchParams?M.converters.URLSearchParams(e,t,n):M.converters.DOMString(e,t,n)},M.converters.BodyInit=function(e,t,n){return e instanceof ReadableStream?M.converters.ReadableStream(e,t,n):e?.[Symbol.asyncIterator]?e:M.converters.XMLHttpRequestBodyInit(e,t,n)},M.converters.ResponseInit=M.dictionaryConverter([{key:`status`,converter:M.converters[`unsigned short`],defaultValue:()=>200},{key:`statusText`,converter:M.converters.ByteString,defaultValue:()=>``},{key:`headers`,converter:M.converters.HeadersInit}]),t.exports={isNetworkError:oe,makeNetworkError:ae,makeResponse:U,makeAppropriateNetworkError:K,filterResponse:G,Response:R,cloneResponse:ne,fromInnerResponse:se}})),Le=/* @__PURE__ */ f(((e,t)=>{let{kConnected:n,kSize:r}=w();var i=class{constructor(e){this.value=e}deref(){return this.value[n]===0&&this.value[r]===0?void 0:this.value}},a=class{constructor(e){this.finalizer=e}register(e,t){e.on&&e.on(`disconnect`,()=>{e[n]===0&&e[r]===0&&this.finalizer(t)})}unregister(e){}};t.exports=function(){return process.env.NODE_V8_COVERAGE&&process.version.startsWith(`v18`)?(process._rawDebug(`Using compatibility WeakRef and FinalizationRegistry`),{WeakRef:i,FinalizationRegistry:a}):{WeakRef,FinalizationRegistry}}})),Re=/* @__PURE__ */ f(((e,t)=>{let{extractBody:n,mixinBody:r,cloneBody:i,bodyUnusable:a}=ie(),{Headers:o,fill:s,HeadersList:c,setHeadersGuard:l,getHeadersGuard:u,setHeadersList:d,getHeadersList:f}=Fe(),{FinalizationRegistry:m}=Le()(),h=O(),g=p(`node:util`),{isValidHTTPToken:_,sameOrigin:v,environmentSettingsObject:y}=V(),{forbiddenMethodsSet:b,corsSafeListedMethodsSet:x,referrerPolicy:S,requestRedirect:C,requestMode:T,requestCredentials:E,requestCache:D,requestDuplex:k}=te(),{kEnumerableProperty:A,normalizedMethodRecordsBase:j,normalizedMethodRecords:M}=h,{kHeaders:N,kSignal:P,kState:F,kDispatcher:I}=H(),{webidl:L}=B(),{URLSerializer:ee}=z(),{kConstruct:R}=w(),ne=p(`node:assert`),{getMaxListeners:re,setMaxListeners:U,getEventListeners:ae,defaultMaxListeners:oe}=p(`node:events`),W=Symbol(`abortController`),G=new m(({signal:e,abort:t})=>{e.removeEventListener(`abort`,t)}),K=/* @__PURE__ */ new WeakMap;function q(e){return t;function t(){let n=e.deref();if(n!==void 0){G.unregister(t),this.removeEventListener(`abort`,t),n.abort(this.reason);let e=K.get(n.signal);if(e!==void 0){if(e.size!==0){for(let t of e){let e=t.deref();e!==void 0&&e.abort(this.reason)}e.clear()}K.delete(n.signal)}}}}let se=!1;var J=class e{constructor(t,r={}){if(L.util.markAsUncloneable(this),t===R)return;let i=`Request constructor`;L.argumentLengthCheck(arguments,1,i),t=L.converters.RequestInfo(t,i,`input`),r=L.converters.RequestInit(r,i,`init`);let u=null,p=null,m=y.settingsObject.baseUrl,g=null;if(typeof t==`string`){this[I]=r.dispatcher;let e;try{e=new URL(t,m)}catch(e){throw TypeError(`Failed to parse URL from `+t,{cause:e})}if(e.username||e.password)throw TypeError(`Request cannot be constructed from a URL that includes credentials: `+t);u=ce({urlList:[e]}),p=`cors`}else this[I]=r.dispatcher||t[I],ne(t instanceof e),u=t[F],g=t[P];let S=y.settingsObject.origin,C=`client`;if(u.window?.constructor?.name===`EnvironmentSettingsObject`&&v(u.window,S)&&(C=u.window),r.window!=null)throw TypeError(`'window' option '${C}' must be null`);`window`in r&&(C=`no-window`),u=ce({method:u.method,headersList:u.headersList,unsafeRequest:u.unsafeRequest,client:y.settingsObject,window:C,priority:u.priority,origin:u.origin,referrer:u.referrer,referrerPolicy:u.referrerPolicy,mode:u.mode,credentials:u.credentials,cache:u.cache,redirect:u.redirect,integrity:u.integrity,keepalive:u.keepalive,reloadNavigation:u.reloadNavigation,historyNavigation:u.historyNavigation,urlList:[...u.urlList]});let w=Object.keys(r).length!==0;if(w&&(u.mode===`navigate`&&(u.mode=`same-origin`),u.reloadNavigation=!1,u.historyNavigation=!1,u.origin=`client`,u.referrer=`client`,u.referrerPolicy=``,u.url=u.urlList[u.urlList.length-1],u.urlList=[u.url]),r.referrer!==void 0){let e=r.referrer;if(e===``)u.referrer=`no-referrer`;else{let t;try{t=new URL(e,m)}catch(t){throw TypeError(`Referrer "${e}" is not a valid URL.`,{cause:t})}t.protocol===`about:`&&t.hostname===`client`||S&&!v(t,y.settingsObject.baseUrl)?u.referrer=`client`:u.referrer=t}}r.referrerPolicy!==void 0&&(u.referrerPolicy=r.referrerPolicy);let T;if(T=r.mode===void 0?p:r.mode,T===`navigate`)throw L.errors.exception({header:`Request constructor`,message:`invalid request mode navigate.`});if(T!=null&&(u.mode=T),r.credentials!==void 0&&(u.credentials=r.credentials),r.cache!==void 0&&(u.cache=r.cache),u.cache===`only-if-cached`&&u.mode!==`same-origin`)throw TypeError(`'only-if-cached' can be set only with 'same-origin' mode`);if(r.redirect!==void 0&&(u.redirect=r.redirect),r.integrity!=null&&(u.integrity=String(r.integrity)),r.keepalive!==void 0&&(u.keepalive=!!r.keepalive),r.method!==void 0){let e=r.method,t=M[e];if(t!==void 0)u.method=t;else{if(!_(e))throw TypeError(`'${e}' is not a valid HTTP method.`);let t=e.toUpperCase();if(b.has(t))throw TypeError(`'${e}' HTTP method is unsupported.`);e=j[t]??e,u.method=e}!se&&u.method===`patch`&&(process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.",{code:`UNDICI-FETCH-patch`}),se=!0)}r.signal!==void 0&&(g=r.signal),this[F]=u;let E=new AbortController;if(this[P]=E.signal,g!=null){if(!g||typeof g.aborted!=`boolean`||typeof g.addEventListener!=`function`)throw TypeError(`Failed to construct 'Request': member signal is not of type AbortSignal.`);if(g.aborted)E.abort(g.reason);else{this[W]=E;let e=q(new WeakRef(E));try{(typeof re==`function`&&re(g)===oe||ae(g,`abort`).length>=oe)&&U(1500,g)}catch{}h.addAbortListener(g,e),G.register(E,{signal:g,abort:e},e)}}if(this[N]=new o(R),d(this[N],u.headersList),l(this[N],`request`),T===`no-cors`){if(!x.has(u.method))throw TypeError(`'${u.method} is unsupported in no-cors mode.`);l(this[N],`request-no-cors`)}if(w){let e=f(this[N]),t=r.headers===void 0?new c(e):r.headers;if(e.clear(),t instanceof c){for(let{name:n,value:r}of t.rawValues())e.append(n,r,!1);e.cookies=t.cookies}else s(this[N],t)}let D=t instanceof e?t[F].body:null;if((r.body!=null||D!=null)&&(u.method===`GET`||u.method===`HEAD`))throw TypeError(`Request with GET/HEAD method cannot have body.`);let O=null;if(r.body!=null){let[e,t]=n(r.body,u.keepalive);O=e,t&&!f(this[N]).contains(`content-type`,!0)&&this[N].append(`content-type`,t)}let k=O??D;if(k!=null&&k.source==null){if(O!=null&&r.duplex==null)throw TypeError(`RequestInit: duplex option is required when sending a body.`);if(u.mode!==`same-origin`&&u.mode!==`cors`)throw TypeError(`If request is made from ReadableStream, mode should be "same-origin" or "cors"`);u.useCORSPreflightFlag=!0}let A=k;if(O==null&&D!=null){if(a(t))throw TypeError(`Cannot construct a Request with a Request object that has already been used.`);let e=new TransformStream;D.stream.pipeThrough(e),A={source:D.source,length:D.length,stream:e.readable}}this[F].body=A}get method(){return L.brandCheck(this,e),this[F].method}get url(){return L.brandCheck(this,e),ee(this[F].url)}get headers(){return L.brandCheck(this,e),this[N]}get destination(){return L.brandCheck(this,e),this[F].destination}get referrer(){return L.brandCheck(this,e),this[F].referrer===`no-referrer`?``:this[F].referrer===`client`?`about:client`:this[F].referrer.toString()}get referrerPolicy(){return L.brandCheck(this,e),this[F].referrerPolicy}get mode(){return L.brandCheck(this,e),this[F].mode}get credentials(){return this[F].credentials}get cache(){return L.brandCheck(this,e),this[F].cache}get redirect(){return L.brandCheck(this,e),this[F].redirect}get integrity(){return L.brandCheck(this,e),this[F].integrity}get keepalive(){return L.brandCheck(this,e),this[F].keepalive}get isReloadNavigation(){return L.brandCheck(this,e),this[F].reloadNavigation}get isHistoryNavigation(){return L.brandCheck(this,e),this[F].historyNavigation}get signal(){return L.brandCheck(this,e),this[P]}get body(){return L.brandCheck(this,e),this[F].body?this[F].body.stream:null}get bodyUsed(){return L.brandCheck(this,e),!!this[F].body&&h.isDisturbed(this[F].body.stream)}get duplex(){return L.brandCheck(this,e),`half`}clone(){if(L.brandCheck(this,e),a(this))throw TypeError(`unusable`);let t=Y(this[F]),n=new AbortController;if(this.signal.aborted)n.abort(this.signal.reason);else{let e=K.get(this.signal);e===void 0&&(e=/* @__PURE__ */ new Set,K.set(this.signal,e));let t=new WeakRef(n);e.add(t),h.addAbortListener(n.signal,q(t))}return le(t,n.signal,u(this[N]))}[g.inspect.custom](e,t){t.depth===null&&(t.depth=2),t.colors??=!0;let n={method:this.method,url:this.url,headers:this.headers,destination:this.destination,referrer:this.referrer,referrerPolicy:this.referrerPolicy,mode:this.mode,credentials:this.credentials,cache:this.cache,redirect:this.redirect,integrity:this.integrity,keepalive:this.keepalive,isReloadNavigation:this.isReloadNavigation,isHistoryNavigation:this.isHistoryNavigation,signal:this.signal};return`Request ${g.formatWithOptions(t,n)}`}};r(J);function ce(e){return{method:e.method??`GET`,localURLsOnly:e.localURLsOnly??!1,unsafeRequest:e.unsafeRequest??!1,body:e.body??null,client:e.client??null,reservedClient:e.reservedClient??null,replacesClientId:e.replacesClientId??``,window:e.window??`client`,keepalive:e.keepalive??!1,serviceWorkers:e.serviceWorkers??`all`,initiator:e.initiator??``,destination:e.destination??``,priority:e.priority??null,origin:e.origin??`client`,policyContainer:e.policyContainer??`client`,referrer:e.referrer??`client`,referrerPolicy:e.referrerPolicy??``,mode:e.mode??`no-cors`,useCORSPreflightFlag:e.useCORSPreflightFlag??!1,credentials:e.credentials??`same-origin`,useCredentials:e.useCredentials??!1,cache:e.cache??`default`,redirect:e.redirect??`follow`,integrity:e.integrity??``,cryptoGraphicsNonceMetadata:e.cryptoGraphicsNonceMetadata??``,parserMetadata:e.parserMetadata??``,reloadNavigation:e.reloadNavigation??!1,historyNavigation:e.historyNavigation??!1,userActivation:e.userActivation??!1,taintedOrigin:e.taintedOrigin??!1,redirectCount:e.redirectCount??0,responseTainting:e.responseTainting??`basic`,preventNoCacheCacheControlHeaderModification:e.preventNoCacheCacheControlHeaderModification??!1,done:e.done??!1,timingAllowFailed:e.timingAllowFailed??!1,urlList:e.urlList,url:e.urlList[0],headersList:e.headersList?new c(e.headersList):new c}}function Y(e){let t=ce({...e,body:null});return e.body!=null&&(t.body=i(t,e.body)),t}function le(e,t,n){let r=new J(R);return r[F]=e,r[P]=t,r[N]=new o(R),d(r[N],e.headersList),l(r[N],n),r}Object.defineProperties(J.prototype,{method:A,url:A,headers:A,redirect:A,clone:A,signal:A,duplex:A,destination:A,body:A,bodyUsed:A,isHistoryNavigation:A,isReloadNavigation:A,keepalive:A,integrity:A,cache:A,credentials:A,attribute:A,referrerPolicy:A,referrer:A,mode:A,[Symbol.toStringTag]:{value:`Request`,configurable:!0}}),L.converters.Request=L.interfaceConverter(J),L.converters.RequestInfo=function(e,t,n){return typeof e==`string`?L.converters.USVString(e,t,n):e instanceof J?L.converters.Request(e,t,n):L.converters.USVString(e,t,n)},L.converters.AbortSignal=L.interfaceConverter(AbortSignal),L.converters.RequestInit=L.dictionaryConverter([{key:`method`,converter:L.converters.ByteString},{key:`headers`,converter:L.converters.HeadersInit},{key:`body`,converter:L.nullableConverter(L.converters.BodyInit)},{key:`referrer`,converter:L.converters.USVString},{key:`referrerPolicy`,converter:L.converters.DOMString,allowedValues:S},{key:`mode`,converter:L.converters.DOMString,allowedValues:T},{key:`credentials`,converter:L.converters.DOMString,allowedValues:E},{key:`cache`,converter:L.converters.DOMString,allowedValues:D},{key:`redirect`,converter:L.converters.DOMString,allowedValues:C},{key:`integrity`,converter:L.converters.DOMString},{key:`keepalive`,converter:L.converters.boolean},{key:`signal`,converter:L.nullableConverter(e=>L.converters.AbortSignal(e,`RequestInit`,`signal`,{strict:!1}))},{key:`window`,converter:L.converters.any},{key:`duplex`,converter:L.converters.DOMString,allowedValues:k},{key:`dispatcher`,converter:L.converters.any}]),t.exports={Request:J,makeRequest:ce,fromInnerRequest:le,cloneRequest:Y}})),ze=/* @__PURE__ */ f(((e,t)=>{let{makeNetworkError:n,makeAppropriateNetworkError:r,filterResponse:i,makeResponse:a,fromInnerResponse:o}=Ie(),{HeadersList:s}=Fe(),{Request:c,cloneRequest:l}=Re(),u=p(`node:zlib`),{bytesMatch:d,makePolicyContainer:f,clonePolicyContainer:m,requestBadPort:h,TAOCheck:g,appendRequestOriginHeader:_,responseLocationURL:v,requestCurrentURL:y,setRequestReferrerPolicyOnRedirect:b,tryUpgradeRequestToAPotentiallyTrustworthyURL:x,createOpaqueTimingInfo:S,appendFetchMetadata:C,corsCheck:w,crossOriginResourcePolicyCheck:T,determineRequestsReferrer:E,coarsenedSharedCurrentTime:D,createDeferredPromise:k,isBlobLike:A,sameOrigin:j,isCancelled:M,isAborted:N,isErrorLike:P,fullyReadBody:F,readableStreamClose:I,isomorphicEncode:L,urlIsLocal:ee,urlIsHttpHttpsScheme:R,urlHasHttpsScheme:ne,clampAndCoarsenConnectionTimingInfo:re,simpleRangeHeaderValue:U,buildContentRange:ae,createInflate:oe,extractMimeType:W}=V(),{kState:G,kDispatcher:K}=H(),q=p(`node:assert`),{safelyExtractBody:se,extractBody:J}=ie(),{redirectStatusSet:ce,nullBodyStatus:Y,safeMethodsSet:le,requestBodyHeader:ue,subresourceSet:X}=te(),de=p(`node:events`),{Readable:fe,pipeline:pe,finished:me}=p(`node:stream`),{addAbortListener:he,isErrored:ge,isReadable:_e,bufferToLowerCasedHeaderName:ve}=O(),{dataURLProcessor:Z,serializeAMimeType:ye,minimizeSupportedMimeType:be}=z(),{getGlobalDispatcher:Q}=ke(),{webidl:xe}=B(),{STATUS_CODES:Se}=p(`node:http`),Ce=[`GET`,`HEAD`],we=typeof __UNDICI_IS_NODE__<`u`||typeof esbuildDetection<`u`?`node`:`undici`,Te;var Ee=class extends de{constructor(e){super(),this.dispatcher=e,this.connection=null,this.dump=!1,this.state=`ongoing`}terminate(e){this.state===`ongoing`&&(this.state=`terminated`,this.connection?.destroy(e),this.emit(`terminated`,e))}abort(e){this.state===`ongoing`&&(this.state=`aborted`,e||=new DOMException(`The operation was aborted.`,`AbortError`),this.serializedAbortReason=e,this.connection?.destroy(e),this.emit(`terminated`,e))}};function De(e){Ae(e,`fetch`)}function Oe(e,t=void 0){xe.argumentLengthCheck(arguments,1,`globalThis.fetch`);let n=k(),r;try{r=new c(e,t)}catch(e){return n.reject(e),n.promise}let i=r[G];if(r.signal.aborted)return Me(n,i,null,r.signal.reason),n.promise;i.client.globalObject?.constructor?.name===`ServiceWorkerGlobalScope`&&(i.serviceWorkers=`none`);let a=null,s=!1,l=null;return he(r.signal,()=>{s=!0,q(l!=null),l.abort(r.signal.reason);let e=a?.deref();Me(n,i,e,r.signal.reason)}),l=Ne({request:i,processResponseEndOfBody:De,processResponse:e=>{s||(e.aborted?Me(n,i,a,l.serializedAbortReason):e.type===`error`?n.reject(TypeError(`fetch failed`,{cause:e.error})):(a=new WeakRef(o(e,`immutable`)),n.resolve(a.deref()),n=null))},dispatcher:r[K]}),n.promise}function Ae(e,t=`other`){if(e.type===`error`&&e.aborted||!e.urlList?.length)return;let n=e.urlList[0],r=e.timingInfo,i=e.cacheState;R(n)&&r!==null&&(e.timingAllowPassed||(r=S({startTime:r.startTime}),i=``),r.endTime=D(),e.timingInfo=r,je(r,n.href,t,globalThis,i))}let je=performance.markResourceTiming;function Me(e,t,n,r){if(e&&e.reject(r),t.body!=null&&_e(t.body?.stream)&&t.body.stream.cancel(r).catch(e=>{if(e.code!==`ERR_INVALID_STATE`)throw e}),n==null)return;let i=n[G];i.body!=null&&_e(i.body?.stream)&&i.body.stream.cancel(r).catch(e=>{if(e.code!==`ERR_INVALID_STATE`)throw e})}function Ne({request:e,processRequestBodyChunkLength:t,processRequestEndOfBody:n,processResponse:r,processResponseEndOfBody:i,processResponseConsumeBody:a,useParallelQueue:o=!1,dispatcher:s=Q()}){q(s);let c=null,l=!1;e.client!=null&&(c=e.client.globalObject,l=e.client.crossOriginIsolatedCapability);let u=D(l),d=S({startTime:u}),p={controller:new Ee(s),request:e,timingInfo:d,processRequestBodyChunkLength:t,processRequestEndOfBody:n,processResponse:r,processResponseConsumeBody:a,processResponseEndOfBody:i,taskDestination:c,crossOriginIsolatedCapability:l};return q(!e.body||e.body.stream),e.window===`client`&&(e.window=e.client?.globalObject?.constructor?.name===`Window`?e.client:`no-window`),e.origin===`client`&&(e.origin=e.client.origin),e.policyContainer===`client`&&(e.policyContainer=e.client==null?f():m(e.client.policyContainer)),e.headersList.contains(`accept`,!0)||e.headersList.append(`accept`,`*/*`,!0),e.headersList.contains(`accept-language`,!0)||e.headersList.append(`accept-language`,`*`,!0),e.priority,X.has(e.destination),Pe(p).catch(e=>{p.controller.terminate(e)}),p.controller}async function Pe(e,t=!1){let r=e.request,a=null;if(r.localURLsOnly&&!ee(y(r))&&(a=n(`local URLs only`)),x(r),h(r)===`blocked`&&(a=n(`bad port`)),r.referrerPolicy===``&&(r.referrerPolicy=r.policyContainer.referrerPolicy),r.referrer!==`no-referrer`&&(r.referrer=E(r)),a===null&&(a=await(async()=>{let t=y(r);return j(t,r.url)&&r.responseTainting===`basic`||t.protocol===`data:`||r.mode===`navigate`||r.mode===`websocket`?(r.responseTainting=`basic`,await Le(e)):r.mode===`same-origin`?n(`request mode cannot be "same-origin"`):r.mode===`no-cors`?r.redirect===`follow`?(r.responseTainting=`opaque`,await Le(e)):n(`redirect mode cannot be "follow" for "no-cors" request`):R(y(r))?(r.responseTainting=`cors`,await Ve(e)):n(`URL scheme must be a HTTP(S) scheme`)})()),t)return a;a.status!==0&&!a.internalResponse&&(r.responseTainting,r.responseTainting===`basic`?a=i(a,`basic`):r.responseTainting===`cors`?a=i(a,`cors`):r.responseTainting===`opaque`?a=i(a,`opaque`):q(!1));let o=a.status===0?a:a.internalResponse;if(o.urlList.length===0&&o.urlList.push(...r.urlList),r.timingAllowFailed||(a.timingAllowPassed=!0),a.type===`opaque`&&o.status===206&&o.rangeRequested&&!r.headers.contains(`range`,!0)&&(a=o=n()),a.status!==0&&(r.method===`HEAD`||r.method===`CONNECT`||Y.includes(o.status))&&(o.body=null,e.controller.dump=!0),r.integrity){let t=t=>Be(e,n(t));if(r.responseTainting===`opaque`||a.body==null){t(a.error);return}await F(a.body,n=>{d(n,r.integrity)?(a.body=se(n)[0],Be(e,a)):t(`integrity mismatch`)},t)}else Be(e,a)}function Le(e){if(M(e)&&e.request.redirectCount===0)return Promise.resolve(r(e));let{request:t}=e,{protocol:i}=y(t);switch(i){case`about:`:return Promise.resolve(n(`about scheme is not supported`));case`blob:`:{Te||=p(`node:buffer`).resolveObjectURL;let e=y(t);if(e.search.length!==0)return Promise.resolve(n(`NetworkError when attempting to fetch resource.`));let r=Te(e.toString());if(t.method!==`GET`||!A(r))return Promise.resolve(n(`invalid method`));let i=a(),o=r.size,s=L(`${o}`),c=r.type;if(t.headersList.contains(`range`,!0)){i.rangeRequested=!0;let e=t.headersList.get(`range`,!0),a=U(e,!0);if(a===`failure`)return Promise.resolve(n(`failed to fetch the data URL`));let{rangeStartValue:s,rangeEndValue:l}=a;if(s===null)s=o-l,l=s+l-1;else{if(s>=o)return Promise.resolve(n(`Range start is greater than the blob's size.`));(l===null||l>=o)&&(l=o-1)}let u=r.slice(s,l,c);i.body=J(u)[0];let d=L(`${u.size}`),f=ae(s,l,o);i.status=206,i.statusText=`Partial Content`,i.headersList.set(`content-length`,d,!0),i.headersList.set(`content-type`,c,!0),i.headersList.set(`content-range`,f,!0)}else{let e=J(r);i.statusText=`OK`,i.body=e[0],i.headersList.set(`content-length`,s,!0),i.headersList.set(`content-type`,c,!0)}return Promise.resolve(i)}case`data:`:{let e=y(t),r=Z(e);if(r===`failure`)return Promise.resolve(n(`failed to fetch the data URL`));let i=ye(r.mimeType);return Promise.resolve(a({statusText:`OK`,headersList:[[`content-type`,{name:`Content-Type`,value:i}]],body:se(r.body)[0]}))}case`file:`:return Promise.resolve(n(`not implemented... yet...`));case`http:`:case`https:`:return Ve(e).catch(e=>n(e));default:return Promise.resolve(n(`unknown scheme`))}}function ze(e,t){e.request.done=!0,e.processResponseDone!=null&&queueMicrotask(()=>e.processResponseDone(t))}function Be(e,t){let n=e.timingInfo,r=()=>{let r=Date.now();e.request.destination===`document`&&(e.controller.fullTimingInfo=n),e.controller.reportTimingSteps=()=>{if(e.request.url.protocol!==`https:`)return;n.endTime=r;let i=t.cacheState,a=t.bodyInfo;t.timingAllowPassed||(n=S(n),i=``);let o=0;if(e.request.mode!==`navigator`||!t.hasCrossOriginRedirects){o=t.status;let e=W(t.headersList);e!==`failure`&&(a.contentType=be(e))}e.request.initiatorType!=null&&je(n,e.request.url.href,e.request.initiatorType,globalThis,i,a,o)};let i=()=>{e.request.done=!0,e.processResponseEndOfBody!=null&&queueMicrotask(()=>e.processResponseEndOfBody(t)),e.request.initiatorType!=null&&e.controller.reportTimingSteps()};queueMicrotask(()=>i())};e.processResponse!=null&&queueMicrotask(()=>{e.processResponse(t),e.processResponse=null});let i=t.type===`error`?t:t.internalResponse??t;i.body==null?r():me(i.body.stream,()=>{r()})}async function Ve(e){let t=e.request,r=null,i=null,a=e.timingInfo;if(t.serviceWorkers,r===null){if(t.redirect===`follow`&&(t.serviceWorkers=`none`),i=r=await Ue(e),t.responseTainting===`cors`&&w(t,r)===`failure`)return n(`cors failure`);g(t,r)===`failure`&&(t.timingAllowFailed=!0)}return(t.responseTainting===`opaque`||r.type===`opaque`)&&T(t.origin,t.client,t.destination,i)===`blocked`?n(`blocked`):(ce.has(i.status)&&(t.redirect!==`manual`&&e.controller.connection.destroy(void 0,!1),t.redirect===`error`?r=n(`unexpected redirect`):t.redirect===`manual`?r=i:t.redirect===`follow`?r=await He(e,r):q(!1)),r.timingInfo=a,r)}function He(e,t){let r=e.request,i=t.internalResponse?t.internalResponse:t,a;try{if(a=v(i,y(r).hash),a==null)return t}catch(e){return Promise.resolve(n(e))}if(!R(a))return Promise.resolve(n(`URL scheme must be a HTTP(S) scheme`));if(r.redirectCount===20)return Promise.resolve(n(`redirect count exceeded`));if(r.redirectCount+=1,r.mode===`cors`&&(a.username||a.password)&&!j(r,a))return Promise.resolve(n(`cross origin not allowed for request mode "cors"`));if(r.responseTainting===`cors`&&(a.username||a.password))return Promise.resolve(n(`URL cannot contain credentials for request mode "cors"`));if(i.status!==303&&r.body!=null&&r.body.source==null)return Promise.resolve(n());if([301,302].includes(i.status)&&r.method===`POST`||i.status===303&&!Ce.includes(r.method)){r.method=`GET`,r.body=null;for(let e of ue)r.headersList.delete(e)}j(y(r),a)||(r.headersList.delete(`authorization`,!0),r.headersList.delete(`proxy-authorization`,!0),r.headersList.delete(`cookie`,!0),r.headersList.delete(`host`,!0)),r.body!=null&&(q(r.body.source!=null),r.body=se(r.body.source)[0]);let o=e.timingInfo;return o.redirectEndTime=o.postRedirectStartTime=D(e.crossOriginIsolatedCapability),o.redirectStartTime===0&&(o.redirectStartTime=o.startTime),r.urlList.push(a),b(r,i),Pe(e,!0)}async function Ue(e,t=!1,i=!1){let a=e.request,o=null,s=null,c=null;a.window===`no-window`&&a.redirect===`error`?(o=e,s=a):(s=l(a),o={...e},o.request=s);let u=a.credentials===`include`||a.credentials===`same-origin`&&a.responseTainting===`basic`,d=s.body?s.body.length:null,f=null;if(s.body==null&&[`POST`,`PUT`].includes(s.method)&&(f=`0`),d!=null&&(f=L(`${d}`)),f!=null&&s.headersList.append(`content-length`,f,!0),d!=null&&s.keepalive,s.referrer instanceof URL&&s.headersList.append(`referer`,L(s.referrer.href),!0),_(s),C(s),s.headersList.contains(`user-agent`,!0)||s.headersList.append(`user-agent`,we),s.cache==="default"&&(s.headersList.contains(`if-modified-since`,!0)||s.headersList.contains(`if-none-match`,!0)||s.headersList.contains(`if-unmodified-since`,!0)||s.headersList.contains(`if-match`,!0)||s.headersList.contains(`if-range`,!0))&&(s.cache=`no-store`),s.cache===`no-cache`&&!s.preventNoCacheCacheControlHeaderModification&&!s.headersList.contains(`cache-control`,!0)&&s.headersList.append(`cache-control`,`max-age=0`,!0),(s.cache===`no-store`||s.cache===`reload`)&&(s.headersList.contains(`pragma`,!0)||s.headersList.append(`pragma`,`no-cache`,!0),s.headersList.contains(`cache-control`,!0)||s.headersList.append(`cache-control`,`no-cache`,!0)),s.headersList.contains(`range`,!0)&&s.headersList.append(`accept-encoding`,`identity`,!0),s.headersList.contains(`accept-encoding`,!0)||(ne(y(s))?s.headersList.append(`accept-encoding`,`br, gzip, deflate`,!0):s.headersList.append(`accept-encoding`,`gzip, deflate`,!0)),s.headersList.delete(`host`,!0),s.cache=`no-store`,s.cache!==`no-store`&&s.cache,c==null){if(s.cache===`only-if-cached`)return n(`only if cached`);let e=await We(o,u,i);!le.has(s.method)&&e.status>=200&&e.status,c??=e}if(c.urlList=[...s.urlList],s.headersList.contains(`range`,!0)&&(c.rangeRequested=!0),c.requestIncludesCredentials=u,c.status===407)return a.window===`no-window`?n():M(e)?r(e):n(`proxy authentication required`);if(c.status===421&&!i&&(a.body==null||a.body.source!=null)){if(M(e))return r(e);e.controller.connection.destroy(),c=await Ue(e,t,!0)}return c}async function We(e,t=!1,i=!1){q(!e.controller.connection||e.controller.connection.destroyed),e.controller.connection={abort:null,destroyed:!1,destroy(e,t=!0){this.destroyed||(this.destroyed=!0,t&&this.abort?.(e??new DOMException(`The operation was aborted.`,`AbortError`)))}};let o=e.request,c=null,l=e.timingInfo;o.cache=`no-store`,o.mode;let d=null;if(o.body==null&&e.processRequestEndOfBody)queueMicrotask(()=>e.processRequestEndOfBody());else if(o.body!=null){let t=async function*(t){M(e)||(yield t,e.processRequestBodyChunkLength?.(t.byteLength))},n=()=>{M(e)||e.processRequestEndOfBody&&e.processRequestEndOfBody()},r=t=>{M(e)||(t.name===`AbortError`?e.controller.abort():e.controller.terminate(t))};d=(async function*(){try{for await(let e of o.body.stream)yield*t(e);n()}catch(e){r(e)}})()}try{let{body:t,status:n,statusText:r,headersList:i,socket:o}=await g({body:d});if(o)c=a({status:n,statusText:r,headersList:i,socket:o});else{let o=t[Symbol.asyncIterator]();e.controller.next=()=>o.next(),c=a({status:n,statusText:r,headersList:i})}}catch(t){return t.name===`AbortError`?(e.controller.connection.destroy(),r(e,t)):n(t)}let f=async()=>{await e.controller.resume()},p=t=>{M(e)||e.controller.abort(t)},m=new ReadableStream({async start(t){e.controller.controller=t},async pull(e){await f(e)},async cancel(e){await p(e)},type:`bytes`});c.body={stream:m,source:null,length:null},e.controller.resume||e.controller.on(`terminated`,h),e.controller.resume=async()=>{for(;;){let t,n;try{let{done:n,value:r}=await e.controller.next();if(N(e))break;t=n?void 0:r}catch(r){e.controller.ended&&!l.encodedBodySize?t=void 0:(t=r,n=!0)}if(t===void 0){I(e.controller.controller),ze(e,c);return}if(l.decodedBodySize+=t?.byteLength??0,n){e.controller.terminate(t);return}let r=new Uint8Array(t);if(r.byteLength&&e.controller.controller.enqueue(r),ge(m)){e.controller.terminate();return}if(e.controller.controller.desiredSize<=0)return}};function h(t){N(e)?(c.aborted=!0,_e(m)&&e.controller.controller.error(e.controller.serializedAbortReason)):_e(m)&&e.controller.controller.error(TypeError(`terminated`,{cause:P(t)?t:void 0})),e.controller.connection.destroy()}return c;function g({body:t}){let n=y(o),r=e.controller.dispatcher;return new Promise((i,a)=>r.dispatch({path:n.pathname+n.search,origin:n.origin,method:o.method,body:r.isMockActive?o.body&&(o.body.source||o.body.stream):t,headers:o.headersList.entries,maxRedirections:0,upgrade:o.mode===`websocket`?`websocket`:void 0},{body:null,abort:null,onConnect(t){let{connection:n}=e.controller;l.finalConnectionTimingInfo=re(void 0,l.postRedirectStartTime,e.crossOriginIsolatedCapability),n.destroyed?t(new DOMException(`The operation was aborted.`,`AbortError`)):(e.controller.on(`terminated`,t),this.abort=n.abort=t),l.finalNetworkRequestStartTime=D(e.crossOriginIsolatedCapability)},onResponseStarted(){l.finalNetworkResponseStartTime=D(e.crossOriginIsolatedCapability)},onHeaders(e,t,n,r){if(e<200)return;let a=``,c=new s;for(let e=0;e5)return this.abort(/* @__PURE__ */ Error(`too many content-encodings in response: ${t.length}, maximum allowed is 5`)),!0;for(let e=t.length-1;e>=0;--e){let n=t[e].trim();if(n===`x-gzip`||n===`gzip`)l.push(u.createGunzip({flush:u.constants.Z_SYNC_FLUSH,finishFlush:u.constants.Z_SYNC_FLUSH}));else if(n===`deflate`)l.push(oe({flush:u.constants.Z_SYNC_FLUSH,finishFlush:u.constants.Z_SYNC_FLUSH}));else if(n===`br`)l.push(u.createBrotliDecompress({flush:u.constants.BROTLI_OPERATION_FLUSH,finishFlush:u.constants.BROTLI_OPERATION_FLUSH}));else{l.length=0;break}}}this.body=new fe({read:n});let f=this.onError.bind(this);return i({status:e,statusText:r,headersList:c,body:l.length?pe(this.body,...l,e=>{e&&this.onError(e)}).on(`error`,f):this.body.on(`error`,f)}),!0},onData(t){if(e.controller.dump)return;let n=t;return l.encodedBodySize+=n.byteLength,this.body.push(n)},onComplete(){this.abort&&e.controller.off(`terminated`,this.abort),e.controller.ended=!0,this.body.push(null)},onError(t){this.abort&&e.controller.off(`terminated`,this.abort),this.body?.destroy(t),e.controller.terminate(t),a(t)},onUpgrade(e,t,n){if(e!==101)return;let r=new s;for(let e=0;e{t.exports={kState:Symbol(`FileReader state`),kResult:Symbol(`FileReader result`),kError:Symbol(`FileReader error`),kLastProgressEventFired:Symbol(`FileReader last progress event fired timestamp`),kEvents:Symbol(`FileReader events`),kAborted:Symbol(`FileReader aborted`)}})),Ve=/* @__PURE__ */ f(((e,t)=>{let{webidl:n}=B(),r=Symbol(`ProgressEvent state`);var i=class e extends Event{constructor(e,t={}){e=n.converters.DOMString(e,`ProgressEvent constructor`,`type`),t=n.converters.ProgressEventInit(t??{}),super(e,t),this[r]={lengthComputable:t.lengthComputable,loaded:t.loaded,total:t.total}}get lengthComputable(){return n.brandCheck(this,e),this[r].lengthComputable}get loaded(){return n.brandCheck(this,e),this[r].loaded}get total(){return n.brandCheck(this,e),this[r].total}};n.converters.ProgressEventInit=n.dictionaryConverter([{key:`lengthComputable`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`loaded`,converter:n.converters[`unsigned long long`],defaultValue:()=>0},{key:`total`,converter:n.converters[`unsigned long long`],defaultValue:()=>0},{key:`bubbles`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`cancelable`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`composed`,converter:n.converters.boolean,defaultValue:()=>!1}]),t.exports={ProgressEvent:i}})),He=/* @__PURE__ */ f(((e,t)=>{function n(e){if(!e)return`failure`;switch(e.trim().toLowerCase()){case`unicode-1-1-utf-8`:case`unicode11utf8`:case`unicode20utf8`:case`utf-8`:case`utf8`:case`x-unicode20utf8`:return`UTF-8`;case`866`:case`cp866`:case`csibm866`:case`ibm866`:return`IBM866`;case`csisolatin2`:case`iso-8859-2`:case`iso-ir-101`:case`iso8859-2`:case`iso88592`:case`iso_8859-2`:case`iso_8859-2:1987`:case`l2`:case`latin2`:return`ISO-8859-2`;case`csisolatin3`:case`iso-8859-3`:case`iso-ir-109`:case`iso8859-3`:case`iso88593`:case`iso_8859-3`:case`iso_8859-3:1988`:case`l3`:case`latin3`:return`ISO-8859-3`;case`csisolatin4`:case`iso-8859-4`:case`iso-ir-110`:case`iso8859-4`:case`iso88594`:case`iso_8859-4`:case`iso_8859-4:1988`:case`l4`:case`latin4`:return`ISO-8859-4`;case`csisolatincyrillic`:case`cyrillic`:case`iso-8859-5`:case`iso-ir-144`:case`iso8859-5`:case`iso88595`:case`iso_8859-5`:case`iso_8859-5:1988`:return`ISO-8859-5`;case`arabic`:case`asmo-708`:case`csiso88596e`:case`csiso88596i`:case`csisolatinarabic`:case`ecma-114`:case`iso-8859-6`:case`iso-8859-6-e`:case`iso-8859-6-i`:case`iso-ir-127`:case`iso8859-6`:case`iso88596`:case`iso_8859-6`:case`iso_8859-6:1987`:return`ISO-8859-6`;case`csisolatingreek`:case`ecma-118`:case`elot_928`:case`greek`:case`greek8`:case`iso-8859-7`:case`iso-ir-126`:case`iso8859-7`:case`iso88597`:case`iso_8859-7`:case`iso_8859-7:1987`:case`sun_eu_greek`:return`ISO-8859-7`;case`csiso88598e`:case`csisolatinhebrew`:case`hebrew`:case`iso-8859-8`:case`iso-8859-8-e`:case`iso-ir-138`:case`iso8859-8`:case`iso88598`:case`iso_8859-8`:case`iso_8859-8:1988`:case`visual`:return`ISO-8859-8`;case`csiso88598i`:case`iso-8859-8-i`:case`logical`:return`ISO-8859-8-I`;case`csisolatin6`:case`iso-8859-10`:case`iso-ir-157`:case`iso8859-10`:case`iso885910`:case`l6`:case`latin6`:return`ISO-8859-10`;case`iso-8859-13`:case`iso8859-13`:case`iso885913`:return`ISO-8859-13`;case`iso-8859-14`:case`iso8859-14`:case`iso885914`:return`ISO-8859-14`;case`csisolatin9`:case`iso-8859-15`:case`iso8859-15`:case`iso885915`:case`iso_8859-15`:case`l9`:return`ISO-8859-15`;case`iso-8859-16`:return`ISO-8859-16`;case`cskoi8r`:case`koi`:case`koi8`:case`koi8-r`:case`koi8_r`:return`KOI8-R`;case`koi8-ru`:case`koi8-u`:return`KOI8-U`;case`csmacintosh`:case`mac`:case`macintosh`:case`x-mac-roman`:return`macintosh`;case`iso-8859-11`:case`iso8859-11`:case`iso885911`:case`tis-620`:case`windows-874`:return`windows-874`;case`cp1250`:case`windows-1250`:case`x-cp1250`:return`windows-1250`;case`cp1251`:case`windows-1251`:case`x-cp1251`:return`windows-1251`;case`ansi_x3.4-1968`:case`ascii`:case`cp1252`:case`cp819`:case`csisolatin1`:case`ibm819`:case`iso-8859-1`:case`iso-ir-100`:case`iso8859-1`:case`iso88591`:case`iso_8859-1`:case`iso_8859-1:1987`:case`l1`:case`latin1`:case`us-ascii`:case`windows-1252`:case`x-cp1252`:return`windows-1252`;case`cp1253`:case`windows-1253`:case`x-cp1253`:return`windows-1253`;case`cp1254`:case`csisolatin5`:case`iso-8859-9`:case`iso-ir-148`:case`iso8859-9`:case`iso88599`:case`iso_8859-9`:case`iso_8859-9:1989`:case`l5`:case`latin5`:case`windows-1254`:case`x-cp1254`:return`windows-1254`;case`cp1255`:case`windows-1255`:case`x-cp1255`:return`windows-1255`;case`cp1256`:case`windows-1256`:case`x-cp1256`:return`windows-1256`;case`cp1257`:case`windows-1257`:case`x-cp1257`:return`windows-1257`;case`cp1258`:case`windows-1258`:case`x-cp1258`:return`windows-1258`;case`x-mac-cyrillic`:case`x-mac-ukrainian`:return`x-mac-cyrillic`;case`chinese`:case`csgb2312`:case`csiso58gb231280`:case`gb2312`:case`gb_2312`:case`gb_2312-80`:case`gbk`:case`iso-ir-58`:case`x-gbk`:return`GBK`;case`gb18030`:return`gb18030`;case`big5`:case`big5-hkscs`:case`cn-big5`:case`csbig5`:case`x-x-big5`:return`Big5`;case`cseucpkdfmtjapanese`:case`euc-jp`:case`x-euc-jp`:return`EUC-JP`;case`csiso2022jp`:case`iso-2022-jp`:return`ISO-2022-JP`;case`csshiftjis`:case`ms932`:case`ms_kanji`:case`shift-jis`:case`shift_jis`:case`sjis`:case`windows-31j`:case`x-sjis`:return`Shift_JIS`;case`cseuckr`:case`csksc56011987`:case`euc-kr`:case`iso-ir-149`:case`korean`:case`ks_c_5601-1987`:case`ks_c_5601-1989`:case`ksc5601`:case`ksc_5601`:case`windows-949`:return`EUC-KR`;case`csiso2022kr`:case`hz-gb-2312`:case`iso-2022-cn`:case`iso-2022-cn-ext`:case`iso-2022-kr`:case`replacement`:return`replacement`;case`unicodefffe`:case`utf-16be`:return`UTF-16BE`;case`csunicode`:case`iso-10646-ucs-2`:case`ucs-2`:case`unicode`:case`unicodefeff`:case`utf-16`:case`utf-16le`:return`UTF-16LE`;case`x-user-defined`:return`x-user-defined`;default:return`failure`}}t.exports={getEncoding:n}})),Ue=/* @__PURE__ */ f(((e,t)=>{let{kState:n,kError:r,kResult:i,kAborted:a,kLastProgressEventFired:o}=Be(),{ProgressEvent:s}=Ve(),{getEncoding:c}=He(),{serializeAMimeType:l,parseMIMEType:u}=z(),{types:d}=p(`node:util`),{StringDecoder:f}=p(`string_decoder`),{btoa:m}=p(`node:buffer`),h={enumerable:!0,writable:!1,configurable:!1};function g(e,t,s,c){if(e[n]===`loading`)throw new DOMException(`Invalid state`,`InvalidStateError`);e[n]=`loading`,e[i]=null,e[r]=null;let l=t.stream().getReader(),u=[],f=l.read(),p=!0;(async()=>{for(;!e[a];)try{let{done:m,value:h}=await f;if(p&&!e[a]&&queueMicrotask(()=>{_(`loadstart`,e)}),p=!1,!m&&d.isUint8Array(h))u.push(h),(e[o]===void 0||Date.now()-e[o]>=50)&&!e[a]&&(e[o]=Date.now(),queueMicrotask(()=>{_(`progress`,e)})),f=l.read();else if(m){queueMicrotask(()=>{e[n]=`done`;try{let n=v(u,s,t.type,c);if(e[a])return;e[i]=n,_(`load`,e)}catch(t){e[r]=t,_(`error`,e)}e[n]!==`loading`&&_(`loadend`,e)});break}}catch(t){if(e[a])return;queueMicrotask(()=>{e[n]=`done`,e[r]=t,_(`error`,e),e[n]!==`loading`&&_(`loadend`,e)});break}})()}function _(e,t){let n=new s(e,{bubbles:!1,cancelable:!1});t.dispatchEvent(n)}function v(e,t,n,r){switch(t){case`DataURL`:{let t=`data:`,r=u(n||`application/octet-stream`);r!==`failure`&&(t+=l(r)),t+=`;base64,`;let i=new f(`latin1`);for(let n of e)t+=m(i.write(n));return t+=m(i.end()),t}case`Text`:{let t=`failure`;if(r&&(t=c(r)),t===`failure`&&n){let e=u(n);e!==`failure`&&(t=c(e.parameters.get(`charset`)))}return t===`failure`&&(t=`UTF-8`),y(e,t)}case`ArrayBuffer`:return x(e).buffer;case`BinaryString`:{let t=``,n=new f(`latin1`);for(let r of e)t+=n.write(r);return t+=n.end(),t}}}function y(e,t){let n=x(e),r=b(n),i=0;r!==null&&(t=r,i=r===`UTF-8`?3:2);let a=n.slice(i);return new TextDecoder(t).decode(a)}function b(e){let[t,n,r]=e;return t===239&&n===187&&r===191?`UTF-8`:t===254&&n===255?`UTF-16BE`:t===255&&n===254?`UTF-16LE`:null}function x(e){let t=e.reduce((e,t)=>e+t.byteLength,0),n=0;return e.reduce((e,t)=>(e.set(t,n),n+=t.byteLength,e),new Uint8Array(t))}t.exports={staticPropertyDescriptors:h,readOperation:g,fireAProgressEvent:_}})),We=/* @__PURE__ */ f(((e,t)=>{let{staticPropertyDescriptors:n,readOperation:r,fireAProgressEvent:i}=Ue(),{kState:a,kError:o,kResult:s,kEvents:c,kAborted:l}=Be(),{webidl:u}=B(),{kEnumerableProperty:d}=O();var f=class e extends EventTarget{constructor(){super(),this[a]=`empty`,this[s]=null,this[o]=null,this[c]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(t){u.brandCheck(this,e),u.argumentLengthCheck(arguments,1,`FileReader.readAsArrayBuffer`),t=u.converters.Blob(t,{strict:!1}),r(this,t,`ArrayBuffer`)}readAsBinaryString(t){u.brandCheck(this,e),u.argumentLengthCheck(arguments,1,`FileReader.readAsBinaryString`),t=u.converters.Blob(t,{strict:!1}),r(this,t,`BinaryString`)}readAsText(t,n=void 0){u.brandCheck(this,e),u.argumentLengthCheck(arguments,1,`FileReader.readAsText`),t=u.converters.Blob(t,{strict:!1}),n!==void 0&&(n=u.converters.DOMString(n,`FileReader.readAsText`,`encoding`)),r(this,t,`Text`,n)}readAsDataURL(t){u.brandCheck(this,e),u.argumentLengthCheck(arguments,1,`FileReader.readAsDataURL`),t=u.converters.Blob(t,{strict:!1}),r(this,t,`DataURL`)}abort(){this[a]===`empty`||this[a]===`done`?this[s]=null:(this[a]===`loading`&&(this[a]=`done`,this[s]=null),this[l]=!0,i(`abort`,this),this[a]!==`loading`&&i(`loadend`,this))}get readyState(){switch(u.brandCheck(this,e),this[a]){case`empty`:return this.EMPTY;case`loading`:return this.LOADING;case`done`:return this.DONE}}get result(){return u.brandCheck(this,e),this[s]}get error(){return u.brandCheck(this,e),this[o]}get onloadend(){return u.brandCheck(this,e),this[c].loadend}set onloadend(t){u.brandCheck(this,e),this[c].loadend&&this.removeEventListener(`loadend`,this[c].loadend),typeof t==`function`?(this[c].loadend=t,this.addEventListener(`loadend`,t)):this[c].loadend=null}get onerror(){return u.brandCheck(this,e),this[c].error}set onerror(t){u.brandCheck(this,e),this[c].error&&this.removeEventListener(`error`,this[c].error),typeof t==`function`?(this[c].error=t,this.addEventListener(`error`,t)):this[c].error=null}get onloadstart(){return u.brandCheck(this,e),this[c].loadstart}set onloadstart(t){u.brandCheck(this,e),this[c].loadstart&&this.removeEventListener(`loadstart`,this[c].loadstart),typeof t==`function`?(this[c].loadstart=t,this.addEventListener(`loadstart`,t)):this[c].loadstart=null}get onprogress(){return u.brandCheck(this,e),this[c].progress}set onprogress(t){u.brandCheck(this,e),this[c].progress&&this.removeEventListener(`progress`,this[c].progress),typeof t==`function`?(this[c].progress=t,this.addEventListener(`progress`,t)):this[c].progress=null}get onload(){return u.brandCheck(this,e),this[c].load}set onload(t){u.brandCheck(this,e),this[c].load&&this.removeEventListener(`load`,this[c].load),typeof t==`function`?(this[c].load=t,this.addEventListener(`load`,t)):this[c].load=null}get onabort(){return u.brandCheck(this,e),this[c].abort}set onabort(t){u.brandCheck(this,e),this[c].abort&&this.removeEventListener(`abort`,this[c].abort),typeof t==`function`?(this[c].abort=t,this.addEventListener(`abort`,t)):this[c].abort=null}};f.EMPTY=f.prototype.EMPTY=0,f.LOADING=f.prototype.LOADING=1,f.DONE=f.prototype.DONE=2,Object.defineProperties(f.prototype,{EMPTY:n,LOADING:n,DONE:n,readAsArrayBuffer:d,readAsBinaryString:d,readAsText:d,readAsDataURL:d,abort:d,readyState:d,result:d,error:d,onloadstart:d,onprogress:d,onload:d,onabort:d,onerror:d,onloadend:d,[Symbol.toStringTag]:{value:`FileReader`,writable:!1,enumerable:!1,configurable:!0}}),Object.defineProperties(f,{EMPTY:n,LOADING:n,DONE:n}),t.exports={FileReader:f}})),Ge=/* @__PURE__ */ f(((e,t)=>{t.exports={kConstruct:w().kConstruct}})),Ke=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:assert`),{URLSerializer:r}=z(),{isValidHeaderName:i}=V();function a(e,t,n=!1){return r(e,n)===r(t,n)}function o(e){n(e!==null);let t=[];for(let n of e.split(`,`))n=n.trim(),i(n)&&t.push(n);return t}t.exports={urlEquals:a,getFieldValues:o}})),qe=/* @__PURE__ */ f(((e,t)=>{let{kConstruct:n}=Ge(),{urlEquals:r,getFieldValues:i}=Ke(),{kEnumerableProperty:a,isDisturbed:o}=O(),{webidl:s}=B(),{Response:c,cloneResponse:l,fromInnerResponse:u}=Ie(),{Request:d,fromInnerRequest:f}=Re(),{kState:m}=H(),{fetching:h}=ze(),{urlIsHttpHttpsScheme:g,createDeferredPromise:_,readAllBytes:v}=V(),y=p(`node:assert`);var b=class e{#e;constructor(){arguments[0]!==n&&s.illegalConstructor(),s.util.markAsUncloneable(this),this.#e=arguments[1]}async match(t,n={}){s.brandCheck(this,e);let r=`Cache.match`;s.argumentLengthCheck(arguments,1,r),t=s.converters.RequestInfo(t,r,`request`),n=s.converters.CacheQueryOptions(n,r,`options`);let i=this.#i(t,n,1);if(i.length!==0)return i[0]}async matchAll(t=void 0,n={}){s.brandCheck(this,e);let r=`Cache.matchAll`;return t!==void 0&&(t=s.converters.RequestInfo(t,r,`request`)),n=s.converters.CacheQueryOptions(n,r,`options`),this.#i(t,n)}async add(t){s.brandCheck(this,e);let n=`Cache.add`;s.argumentLengthCheck(arguments,1,n),t=s.converters.RequestInfo(t,n,`request`);let r=[t];return await this.addAll(r)}async addAll(t){s.brandCheck(this,e);let n=`Cache.addAll`;s.argumentLengthCheck(arguments,1,n);let r=[],a=[];for(let e of t){if(e===void 0)throw s.errors.conversionFailed({prefix:n,argument:`Argument 1`,types:[`undefined is not allowed`]});if(e=s.converters.RequestInfo(e),typeof e==`string`)continue;let t=e[m];if(!g(t.url)||t.method!==`GET`)throw s.errors.exception({header:n,message:`Expected http/s scheme when method is not GET.`})}let o=[];for(let e of t){let t=new d(e)[m];if(!g(t.url))throw s.errors.exception({header:n,message:`Expected http/s scheme.`});t.initiator=`fetch`,t.destination=`subresource`,a.push(t);let c=_();o.push(h({request:t,processResponse(e){if(e.type===`error`||e.status===206||e.status<200||e.status>299)c.reject(s.errors.exception({header:`Cache.addAll`,message:`Received an invalid status code or the request failed.`}));else if(e.headersList.contains(`vary`)){let t=i(e.headersList.get(`vary`));for(let e of t)if(e===`*`){c.reject(s.errors.exception({header:`Cache.addAll`,message:`invalid vary field value`}));for(let e of o)e.abort();return}}},processResponseEndOfBody(e){e.aborted?c.reject(new DOMException(`aborted`,`AbortError`)):c.resolve(e)}})),r.push(c.promise)}let c=await Promise.all(r),l=[],u=0;for(let e of c){let t={type:`put`,request:a[u],response:e};l.push(t),u++}let f=_(),p=null;try{this.#t(l)}catch(e){p=e}return queueMicrotask(()=>{p===null?f.resolve(void 0):f.reject(p)}),f.promise}async put(t,n){s.brandCheck(this,e);let r=`Cache.put`;s.argumentLengthCheck(arguments,2,r),t=s.converters.RequestInfo(t,r,`request`),n=s.converters.Response(n,r,`response`);let a=null;if(a=t instanceof d?t[m]:new d(t)[m],!g(a.url)||a.method!==`GET`)throw s.errors.exception({header:r,message:`Expected an http/s scheme when method is not GET`});let c=n[m];if(c.status===206)throw s.errors.exception({header:r,message:`Got 206 status`});if(c.headersList.contains(`vary`)){let e=i(c.headersList.get(`vary`));for(let t of e)if(t===`*`)throw s.errors.exception({header:r,message:`Got * vary field value`})}if(c.body&&(o(c.body.stream)||c.body.stream.locked))throw s.errors.exception({header:r,message:`Response body is locked or disturbed`});let u=l(c),f=_();if(c.body!=null){let e=c.body.stream.getReader();v(e).then(f.resolve,f.reject)}else f.resolve(void 0);let p=[],h={type:`put`,request:a,response:u};p.push(h);let y=await f.promise;u.body!=null&&(u.body.source=y);let b=_(),x=null;try{this.#t(p)}catch(e){x=e}return queueMicrotask(()=>{x===null?b.resolve():b.reject(x)}),b.promise}async delete(t,n={}){s.brandCheck(this,e);let r=`Cache.delete`;s.argumentLengthCheck(arguments,1,r),t=s.converters.RequestInfo(t,r,`request`),n=s.converters.CacheQueryOptions(n,r,`options`);let i=null;if(t instanceof d){if(i=t[m],i.method!==`GET`&&!n.ignoreMethod)return!1}else y(typeof t==`string`),i=new d(t)[m];let a=[],o={type:`delete`,request:i,options:n};a.push(o);let c=_(),l=null,u;try{u=this.#t(a)}catch(e){l=e}return queueMicrotask(()=>{l===null?c.resolve(!!u?.length):c.reject(l)}),c.promise}async keys(t=void 0,n={}){s.brandCheck(this,e);let r=`Cache.keys`;t!==void 0&&(t=s.converters.RequestInfo(t,r,`request`)),n=s.converters.CacheQueryOptions(n,r,`options`);let i=null;if(t!==void 0){if(t instanceof d){if(i=t[m],i.method!==`GET`&&!n.ignoreMethod)return[]}else typeof t==`string`&&(i=new d(t)[m])}let a=_(),o=[];if(t===void 0)for(let e of this.#e)o.push(e[0]);else{let e=this.#n(i,n);for(let t of e)o.push(t[0])}return queueMicrotask(()=>{let e=[];for(let t of o){let n=f(t,new AbortController().signal,`immutable`);e.push(n)}a.resolve(Object.freeze(e))}),a.promise}#t(e){let t=this.#e,n=[...t],r=[],i=[];try{for(let n of e){if(n.type!==`delete`&&n.type!==`put`)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`operation type does not match "delete" or "put"`});if(n.type===`delete`&&n.response!=null)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`delete operation should not have an associated response`});if(this.#n(n.request,n.options,r).length)throw new DOMException(`???`,`InvalidStateError`);let e;if(n.type===`delete`){if(e=this.#n(n.request,n.options),e.length===0)return[];for(let n of e){let e=t.indexOf(n);y(e!==-1),t.splice(e,1)}}else if(n.type===`put`){if(n.response==null)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`put operation should have an associated response`});let i=n.request;if(!g(i.url))throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`expected http or https scheme`});if(i.method!==`GET`)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`not get method`});if(n.options!=null)throw s.errors.exception({header:`Cache.#batchCacheOperations`,message:`options must not be defined`});e=this.#n(n.request);for(let n of e){let e=t.indexOf(n);y(e!==-1),t.splice(e,1)}t.push([n.request,n.response]),r.push([n.request,n.response])}i.push([n.request,n.response])}return i}catch(e){throw this.#e.length=0,this.#e=n,e}}#n(e,t,n){let r=[],i=n??this.#e;for(let n of i){let[i,a]=n;this.#r(e,i,a,t)&&r.push(n)}return r}#r(e,t,n=null,a){let o=new URL(e.url),s=new URL(t.url);if(a?.ignoreSearch&&(s.search=``,o.search=``),!r(o,s,!0))return!1;if(n==null||a?.ignoreVary||!n.headersList.contains(`vary`))return!0;let c=i(n.headersList.get(`vary`));for(let n of c)if(n===`*`||t.headersList.get(n)!==e.headersList.get(n))return!1;return!0}#i(e,t,n=1/0){let r=null;if(e!==void 0){if(e instanceof d){if(r=e[m],r.method!==`GET`&&!t.ignoreMethod)return[]}else typeof e==`string`&&(r=new d(e)[m])}let i=[];if(e===void 0)for(let e of this.#e)i.push(e[1]);else{let e=this.#n(r,t);for(let t of e)i.push(t[1])}let a=[];for(let e of i){let t=u(e,`immutable`);if(a.push(t.clone()),a.length>=n)break}return Object.freeze(a)}};Object.defineProperties(b.prototype,{[Symbol.toStringTag]:{value:`Cache`,configurable:!0},match:a,matchAll:a,add:a,addAll:a,put:a,delete:a,keys:a});let x=[{key:`ignoreSearch`,converter:s.converters.boolean,defaultValue:()=>!1},{key:`ignoreMethod`,converter:s.converters.boolean,defaultValue:()=>!1},{key:`ignoreVary`,converter:s.converters.boolean,defaultValue:()=>!1}];s.converters.CacheQueryOptions=s.dictionaryConverter(x),s.converters.MultiCacheQueryOptions=s.dictionaryConverter([...x,{key:`cacheName`,converter:s.converters.DOMString}]),s.converters.Response=s.interfaceConverter(c),s.converters[`sequence`]=s.sequenceConverter(s.converters.RequestInfo),t.exports={Cache:b}})),Je=/* @__PURE__ */ f(((e,t)=>{let{kConstruct:n}=Ge(),{Cache:r}=qe(),{webidl:i}=B(),{kEnumerableProperty:a}=O();var o=class e{#e=/* @__PURE__ */ new Map;constructor(){arguments[0]!==n&&i.illegalConstructor(),i.util.markAsUncloneable(this)}async match(t,a={}){if(i.brandCheck(this,e),i.argumentLengthCheck(arguments,1,`CacheStorage.match`),t=i.converters.RequestInfo(t),a=i.converters.MultiCacheQueryOptions(a),a.cacheName!=null){if(this.#e.has(a.cacheName)){let e=this.#e.get(a.cacheName);return await new r(n,e).match(t,a)}}else for(let e of this.#e.values()){let i=await new r(n,e).match(t,a);if(i!==void 0)return i}}async has(t){i.brandCheck(this,e);let n=`CacheStorage.has`;return i.argumentLengthCheck(arguments,1,n),t=i.converters.DOMString(t,n,`cacheName`),this.#e.has(t)}async open(t){i.brandCheck(this,e);let a=`CacheStorage.open`;if(i.argumentLengthCheck(arguments,1,a),t=i.converters.DOMString(t,a,`cacheName`),this.#e.has(t)){let e=this.#e.get(t);return new r(n,e)}let o=[];return this.#e.set(t,o),new r(n,o)}async delete(t){i.brandCheck(this,e);let n=`CacheStorage.delete`;return i.argumentLengthCheck(arguments,1,n),t=i.converters.DOMString(t,n,`cacheName`),this.#e.delete(t)}async keys(){return i.brandCheck(this,e),[...this.#e.keys()]}};Object.defineProperties(o.prototype,{[Symbol.toStringTag]:{value:`CacheStorage`,configurable:!0},match:a,has:a,open:a,delete:a,keys:a}),t.exports={CacheStorage:o}})),Ye=/* @__PURE__ */ f(((e,t)=>{t.exports={maxAttributeValueSize:1024,maxNameValuePairSize:4096}})),Xe=/* @__PURE__ */ f(((e,t)=>{function n(e){for(let t=0;t=0&&n<=8||n>=10&&n<=31||n===127)return!0}return!1}function r(e){for(let t=0;t126||n===34||n===40||n===41||n===60||n===62||n===64||n===44||n===59||n===58||n===92||n===47||n===91||n===93||n===63||n===61||n===123||n===125)throw Error(`Invalid cookie name`)}}function i(e){let t=e.length,n=0;if(e[0]===`"`){if(t===1||e[t-1]!==`"`)throw Error(`Invalid cookie value`);--t,++n}for(;n126||t===34||t===44||t===59||t===92)throw Error(`Invalid cookie value`)}}function a(e){for(let t=0;t126||n===59)throw Error(`Invalid cookie path`)}}function o(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function s(e){if(e===` `)return;if(e.length>255)throw Error(`Invalid cookie domain`);let t=0;for(let n=0;n63)throw Error(`Invalid cookie domain`)}if(t===0||e.charCodeAt(e.length-1)===45)throw Error(`Invalid cookie domain`)}let c=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],l=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],u=Array(61).fill(0).map((e,t)=>t.toString().padStart(2,`0`));function d(e){return typeof e==`number`&&(e=new Date(e)),`${c[e.getUTCDay()]}, ${u[e.getUTCDate()]} ${l[e.getUTCMonth()]} ${e.getUTCFullYear()} ${u[e.getUTCHours()]}:${u[e.getUTCMinutes()]}:${u[e.getUTCSeconds()]} GMT`}function f(e){if(e<0)throw Error(`Invalid cookie max-age`)}function p(e){if(e.name.length===0)return null;r(e.name),i(e.value);let t=[`${e.name}=${e.value}`];e.name.startsWith(`__Secure-`)&&(e.secure=!0),e.name.startsWith(`__Host-`)&&(e.secure=!0,e.domain=null,e.path=`/`),e.secure&&t.push(`Secure`),e.httpOnly&&t.push(`HttpOnly`),typeof e.maxAge==`number`&&(f(e.maxAge),t.push(`Max-Age=${e.maxAge}`)),e.domain&&(s(e.domain),t.push(`Domain=${e.domain}`)),e.path&&(a(e.path),t.push(`Path=${e.path}`)),e.expires&&e.expires.toString()!==`Invalid Date`&&t.push(`Expires=${d(e.expires)}`),e.sameSite&&t.push(`SameSite=${e.sameSite}`);for(let n of e.unparsed){if(!n.includes(`=`))throw Error(`Invalid unparsed`);let[e,...a]=n.split(`=`),o=e.trim(),s=a.join(`=`);r(o),i(s),t.push(`${o}=${s}`)}return t.join(`; `)}t.exports={isCTLExcludingHtab:n,validateCookieName:r,validateCookiePath:a,validateCookieValue:i,toIMFDate:d,stringify:p}})),Ze=/* @__PURE__ */ f(((e,t)=>{let{maxNameValuePairSize:n,maxAttributeValueSize:r}=Ye(),{isCTLExcludingHtab:i}=Xe(),{collectASequenceOfCodePointsFast:a}=z(),o=p(`node:assert`);function s(e){if(i(e))return null;let t=``,r=``,o=``,s=``;if(e.includes(`;`)){let n={position:0};t=a(`;`,e,n),r=e.slice(n.position)}else t=e;if(!t.includes(`=`))s=t;else{let e={position:0};o=a(`=`,t,e),s=t.slice(e.position+1)}return o=o.trim(),s=s.trim(),o.length+s.length>n?null:{name:o,value:s,...c(r)}}function c(e,t={}){if(e.length===0)return t;o(e[0]===`;`),e=e.slice(1);let n=``;e.includes(`;`)?(n=a(`;`,e,{position:0}),e=e.slice(n.length)):(n=e,e=``);let i=``,s=``;if(n.includes(`=`)){let e={position:0};i=a(`=`,n,e),s=n.slice(e.position+1)}else i=n;if(i=i.trim(),s=s.trim(),s.length>r)return c(e,t);let l=i.toLowerCase();if(l===`expires`)t.expires=new Date(s);else if(l===`max-age`){let n=s.charCodeAt(0);if((n<48||n>57)&&s[0]!==`-`||!/^\d+$/.test(s))return c(e,t);t.maxAge=Number(s)}else if(l===`domain`){let e=s;e[0]===`.`&&(e=e.slice(1)),e=e.toLowerCase(),t.domain=e}else if(l===`path`){let e=``;e=s.length===0||s[0]!==`/`?`/`:s,t.path=e}else if(l===`secure`)t.secure=!0;else if(l===`httponly`)t.httpOnly=!0;else if(l===`samesite`){let e=s.toLowerCase();e===`none`?t.sameSite=`None`:e===`strict`?t.sameSite=`Strict`:e===`lax`&&(t.sameSite=`Lax`)}else t.unparsed??=[],t.unparsed.push(`${i}=${s}`);return c(e,t)}t.exports={parseSetCookie:s,parseUnparsedAttributes:c}})),Qe=/* @__PURE__ */ f(((e,t)=>{let{parseSetCookie:n}=Ze(),{stringify:r}=Xe(),{webidl:i}=B(),{Headers:a}=Fe();function o(e){i.argumentLengthCheck(arguments,1,`getCookies`),i.brandCheck(e,a,{strict:!1});let t=e.get(`cookie`),n={};if(!t)return n;for(let e of t.split(`;`)){let[t,...r]=e.split(`=`);n[t.trim()]=r.join(`=`)}return n}function s(e,t,n){i.brandCheck(e,a,{strict:!1});let r=`deleteCookie`;i.argumentLengthCheck(arguments,2,r),t=i.converters.DOMString(t,r,`name`),n=i.converters.DeleteCookieAttributes(n),l(e,{name:t,value:``,expires:/* @__PURE__ */ new Date(0),...n})}function c(e){i.argumentLengthCheck(arguments,1,`getSetCookies`),i.brandCheck(e,a,{strict:!1});let t=e.getSetCookie();return t?t.map(e=>n(e)):[]}function l(e,t){i.argumentLengthCheck(arguments,2,`setCookie`),i.brandCheck(e,a,{strict:!1}),t=i.converters.Cookie(t);let n=r(t);n&&e.append(`Set-Cookie`,n)}i.converters.DeleteCookieAttributes=i.dictionaryConverter([{converter:i.nullableConverter(i.converters.DOMString),key:`path`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.DOMString),key:`domain`,defaultValue:()=>null}]),i.converters.Cookie=i.dictionaryConverter([{converter:i.converters.DOMString,key:`name`},{converter:i.converters.DOMString,key:`value`},{converter:i.nullableConverter(e=>typeof e==`number`?i.converters[`unsigned long long`](e):new Date(e)),key:`expires`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters[`long long`]),key:`maxAge`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.DOMString),key:`domain`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.DOMString),key:`path`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.boolean),key:`secure`,defaultValue:()=>null},{converter:i.nullableConverter(i.converters.boolean),key:`httpOnly`,defaultValue:()=>null},{converter:i.converters.USVString,key:`sameSite`,allowedValues:[`Strict`,`Lax`,`None`]},{converter:i.sequenceConverter(i.converters.DOMString),key:`unparsed`,defaultValue:()=>[]}]),t.exports={getCookies:o,deleteCookie:s,getSetCookies:c,setCookie:l}})),$e=/* @__PURE__ */ f(((e,t)=>{let{webidl:n}=B(),{kEnumerableProperty:r}=O(),{kConstruct:i}=w(),{MessagePort:a}=p(`node:worker_threads`);var o=class e extends Event{#e;constructor(e,t={}){if(e===i){super(arguments[1],arguments[2]),n.util.markAsUncloneable(this);return}let r=`MessageEvent constructor`;n.argumentLengthCheck(arguments,1,r),e=n.converters.DOMString(e,r,`type`),t=n.converters.MessageEventInit(t,r,`eventInitDict`),super(e,t),this.#e=t,n.util.markAsUncloneable(this)}get data(){return n.brandCheck(this,e),this.#e.data}get origin(){return n.brandCheck(this,e),this.#e.origin}get lastEventId(){return n.brandCheck(this,e),this.#e.lastEventId}get source(){return n.brandCheck(this,e),this.#e.source}get ports(){return n.brandCheck(this,e),Object.isFrozen(this.#e.ports)||Object.freeze(this.#e.ports),this.#e.ports}initMessageEvent(t,r=!1,i=!1,a=null,o=``,s=``,c=null,l=[]){return n.brandCheck(this,e),n.argumentLengthCheck(arguments,1,`MessageEvent.initMessageEvent`),new e(t,{bubbles:r,cancelable:i,data:a,origin:o,lastEventId:s,source:c,ports:l})}static createFastMessageEvent(t,n){let r=new e(i,t,n);return r.#e=n,r.#e.data??=null,r.#e.origin??=``,r.#e.lastEventId??=``,r.#e.source??=null,r.#e.ports??=[],r}};let{createFastMessageEvent:s}=o;delete o.createFastMessageEvent;var c=class e extends Event{#e;constructor(e,t={}){let r=`CloseEvent constructor`;n.argumentLengthCheck(arguments,1,r),e=n.converters.DOMString(e,r,`type`),t=n.converters.CloseEventInit(t),super(e,t),this.#e=t,n.util.markAsUncloneable(this)}get wasClean(){return n.brandCheck(this,e),this.#e.wasClean}get code(){return n.brandCheck(this,e),this.#e.code}get reason(){return n.brandCheck(this,e),this.#e.reason}},l=class e extends Event{#e;constructor(e,t){let r=`ErrorEvent constructor`;n.argumentLengthCheck(arguments,1,r),super(e,t),n.util.markAsUncloneable(this),e=n.converters.DOMString(e,r,`type`),t=n.converters.ErrorEventInit(t??{}),this.#e=t}get message(){return n.brandCheck(this,e),this.#e.message}get filename(){return n.brandCheck(this,e),this.#e.filename}get lineno(){return n.brandCheck(this,e),this.#e.lineno}get colno(){return n.brandCheck(this,e),this.#e.colno}get error(){return n.brandCheck(this,e),this.#e.error}};Object.defineProperties(o.prototype,{[Symbol.toStringTag]:{value:`MessageEvent`,configurable:!0},data:r,origin:r,lastEventId:r,source:r,ports:r,initMessageEvent:r}),Object.defineProperties(c.prototype,{[Symbol.toStringTag]:{value:`CloseEvent`,configurable:!0},reason:r,code:r,wasClean:r}),Object.defineProperties(l.prototype,{[Symbol.toStringTag]:{value:`ErrorEvent`,configurable:!0},message:r,filename:r,lineno:r,colno:r,error:r}),n.converters.MessagePort=n.interfaceConverter(a),n.converters[`sequence`]=n.sequenceConverter(n.converters.MessagePort);let u=[{key:`bubbles`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`cancelable`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`composed`,converter:n.converters.boolean,defaultValue:()=>!1}];n.converters.MessageEventInit=n.dictionaryConverter([...u,{key:`data`,converter:n.converters.any,defaultValue:()=>null},{key:`origin`,converter:n.converters.USVString,defaultValue:()=>``},{key:`lastEventId`,converter:n.converters.DOMString,defaultValue:()=>``},{key:`source`,converter:n.nullableConverter(n.converters.MessagePort),defaultValue:()=>null},{key:`ports`,converter:n.converters[`sequence`],defaultValue:()=>[]}]),n.converters.CloseEventInit=n.dictionaryConverter([...u,{key:`wasClean`,converter:n.converters.boolean,defaultValue:()=>!1},{key:`code`,converter:n.converters[`unsigned short`],defaultValue:()=>0},{key:`reason`,converter:n.converters.USVString,defaultValue:()=>``}]),n.converters.ErrorEventInit=n.dictionaryConverter([...u,{key:`message`,converter:n.converters.DOMString,defaultValue:()=>``},{key:`filename`,converter:n.converters.USVString,defaultValue:()=>``},{key:`lineno`,converter:n.converters[`unsigned long`],defaultValue:()=>0},{key:`colno`,converter:n.converters[`unsigned long`],defaultValue:()=>0},{key:`error`,converter:n.converters.any}]),t.exports={MessageEvent:o,CloseEvent:c,ErrorEvent:l,createFastMessageEvent:s}})),et=/* @__PURE__ */ f(((e,t)=>{t.exports={uid:`258EAFA5-E914-47DA-95CA-C5AB0DC85B11`,sentCloseFrameState:{NOT_SENT:0,PROCESSING:1,SENT:2},staticPropertyDescriptors:{enumerable:!0,writable:!1,configurable:!1},states:{CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},opcodes:{CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10},maxUnsigned16Bit:2**16-1,parserStates:{INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4},emptyBuffer:Buffer.allocUnsafe(0),sendHints:{string:1,typedArray:2,arrayBuffer:3,blob:4}}})),tt=/* @__PURE__ */ f(((e,t)=>{t.exports={kWebSocketURL:Symbol(`url`),kReadyState:Symbol(`ready state`),kController:Symbol(`controller`),kResponse:Symbol(`response`),kBinaryType:Symbol(`binary type`),kSentClose:Symbol(`sent close`),kReceivedClose:Symbol(`received close`),kByteParser:Symbol(`byte parser`)}})),nt=/* @__PURE__ */ f(((e,t)=>{let{kReadyState:n,kController:r,kResponse:i,kBinaryType:a,kWebSocketURL:o}=tt(),{states:s,opcodes:c}=et(),{ErrorEvent:l,createFastMessageEvent:u}=$e(),{isUtf8:d}=p(`node:buffer`),{collectASequenceOfCodePointsFast:f,removeHTTPWhitespace:m}=z();function h(e){return e[n]===s.CONNECTING}function g(e){return e[n]===s.OPEN}function _(e){return e[n]===s.CLOSING}function v(e){return e[n]===s.CLOSED}function y(e,t,n=(e,t)=>new Event(e,t),r={}){let i=n(e,r);t.dispatchEvent(i)}function b(e,t,r){if(e[n]!==s.OPEN)return;let i;if(t===c.TEXT)try{i=N(r)}catch{w(e,`Received invalid UTF-8 in text frame.`);return}else t===c.BINARY&&(i=e[a]===`blob`?new Blob([r]):x(r));y(`message`,e,u,{origin:e[o].origin,data:i})}function x(e){return e.byteLength===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function S(e){if(e.length===0)return!1;for(let t=0;t126||n===34||n===40||n===41||n===44||n===47||n===58||n===59||n===60||n===61||n===62||n===63||n===64||n===91||n===92||n===93||n===123||n===125)return!1}return!0}function C(e){return e>=1e3&&e<1015?e!==1004&&e!==1005&&e!==1006:e>=3e3&&e<=4999}function w(e,t){let{[r]:n,[i]:a}=e;n.abort(),a?.socket&&!a.socket.destroyed&&a.socket.destroy(),t&&y(`error`,e,(e,t)=>new l(e,t),{error:Error(t),message:t})}function T(e){return e===c.CLOSE||e===c.PING||e===c.PONG}function E(e){return e===c.CONTINUATION}function D(e){return e===c.TEXT||e===c.BINARY}function O(e){return D(e)||E(e)||T(e)}function k(e){let t={position:0},n=/* @__PURE__ */ new Map;for(;t.position57)return!1}let t=Number.parseInt(e,10);return t>=8&&t<=15}let j=typeof process.versions.icu==`string`,M=j?new TextDecoder(`utf-8`,{fatal:!0}):void 0,N=j?M.decode.bind(M):function(e){if(d(e))return e.toString(`utf-8`);throw TypeError(`Invalid utf-8 received.`)};t.exports={isConnecting:h,isEstablished:g,isClosing:_,isClosed:v,fireEvent:y,isValidSubprotocol:S,isValidStatusCode:C,failWebsocketConnection:w,websocketMessageReceived:b,utf8Decode:N,isControlFrame:T,isContinuationFrame:E,isTextBinaryFrame:D,isValidOpcode:O,parseExtensions:k,isValidClientWindowBits:A}})),rt=/* @__PURE__ */ f(((e,t)=>{let{maxUnsigned16Bit:n}=et(),r=16386,i,a=null,o=r;try{i=p(`node:crypto`)}catch{i={randomFillSync:function(e,t,n){for(let t=0;t */ -t.exports={WebsocketFrameSend:class{constructor(e){this.frameData=e}createFrame(e){let t=this.frameData,r=s(),i=t?.byteLength??0,a=i,o=6;i>n?(o+=8,a=127):i>125&&(o+=2,a=126);let c=Buffer.allocUnsafe(i+o);c[0]=c[1]=0,c[0]|=128,c[0]=(c[0]&240)+e,c[o-4]=r[0],c[o-3]=r[1],c[o-2]=r[2],c[o-1]=r[3],c[1]=a,a===126?c.writeUInt16BE(i,2):a===127&&(c[2]=c[3]=0,c.writeUIntBE(i,4,6)),c[1]|=128;for(let e=0;e{let{uid:n,states:r,sentCloseFrameState:i,emptyBuffer:a,opcodes:o}=tt(),{kReadyState:s,kSentClose:c,kByteParser:l,kReceivedClose:u,kResponse:d}=nt(),{fireEvent:f,failWebsocketConnection:m,isClosing:h,isClosed:g,isEstablished:_,parseExtensions:v}=rt(),{channels:y}=k(),{CloseEvent:b}=et(),{makeRequest:x}=ze(),{fetching:S}=Be(),{Headers:C,getHeadersList:w}=Ie(),{getDecodeSplit:T}=V(),{WebsocketFrameSend:E}=it(),D;try{D=p(`node:crypto`)}catch{}function O(e,t,r,i,a,o){let s=e;s.protocol=e.protocol===`ws:`?`http:`:`https:`;let c=x({urlList:[s],client:r,serviceWorkers:`none`,referrer:`no-referrer`,mode:`websocket`,credentials:`include`,cache:`no-store`,redirect:`error`});o.headers&&(c.headersList=w(new C(o.headers)));let l=D.randomBytes(16).toString(`base64`);c.headersList.append(`sec-websocket-key`,l),c.headersList.append(`sec-websocket-version`,`13`);for(let e of t)c.headersList.append(`sec-websocket-protocol`,e);return c.headersList.append(`sec-websocket-extensions`,`permessage-deflate; client_max_window_bits`),S({request:c,useParallelQueue:!0,dispatcher:o.dispatcher,processResponse(e){if(e.type===`error`||e.status!==101){m(i,`Received network error or non-101 status code.`);return}if(t.length!==0&&!e.headersList.get(`Sec-WebSocket-Protocol`)){m(i,`Server did not respond with sent protocols.`);return}if(e.headersList.get(`Upgrade`)?.toLowerCase()!==`websocket`){m(i,`Server did not set Upgrade header to "websocket".`);return}if(e.headersList.get(`Connection`)?.toLowerCase()!==`upgrade`){m(i,`Server did not set Connection header to "upgrade".`);return}if(e.headersList.get(`Sec-WebSocket-Accept`)!==D.createHash(`sha1`).update(l+n).digest(`base64`)){m(i,`Incorrect hash received in Sec-WebSocket-Accept header.`);return}let r=e.headersList.get(`Sec-WebSocket-Extensions`),o;if(r!==null&&(o=v(r),!o.has(`permessage-deflate`))){m(i,`Sec-WebSocket-Extensions header does not match.`);return}let s=e.headersList.get(`Sec-WebSocket-Protocol`);if(s!==null){let e=T(`sec-websocket-protocol`,c.headersList);if(e===null||!e.includes(s)){m(i,`Protocol was not set in the opening handshake.`);return}}e.socket.on(`data`,j),e.socket.on(`close`,M),e.socket.on(`error`,N),y.open.hasSubscribers&&y.open.publish({address:e.socket.address(),protocol:s,extensions:r}),a(e,o)}})}function A(e,t,n,l){if(!(h(e)||g(e))){if(!_(e))m(e,`Connection was closed before it was established.`),e[s]=r.CLOSING;else if(e[c]===i.NOT_SENT){e[c]=i.PROCESSING;let u=new E;t!==void 0&&n===void 0?(u.frameData=Buffer.allocUnsafe(2),u.frameData.writeUInt16BE(t,0)):t!==void 0&&n!==void 0?(u.frameData=Buffer.allocUnsafe(2+l),u.frameData.writeUInt16BE(t,0),u.frameData.write(n,2,`utf-8`)):u.frameData=a,e[d].socket.write(u.createFrame(o.CLOSE)),e[c]=i.SENT,e[s]=r.CLOSING}else e[s]=r.CLOSING}}function j(e){this.ws[l].write(e)||this.pause()}function M(){let{ws:e}=this,{[d]:t}=e;t.socket.off(`data`,j),t.socket.off(`close`,M),t.socket.off(`error`,N);let n=e[c]===i.SENT&&e[u],a=1005,o=``,p=e[l].closingInfo;p&&!p.error?(a=p.code??1005,o=p.reason):e[u]||(a=1006),e[s]=r.CLOSED,f(`close`,e,(e,t)=>new b(e,t),{wasClean:n,code:a,reason:o}),y.close.hasSubscribers&&y.close.publish({websocket:e,code:a,reason:o})}function N(e){let{ws:t}=this;t[s]=r.CLOSING,y.socketError.hasSubscribers&&y.socketError.publish(e),this.destroy()}t.exports={establishWebSocketConnection:O,closeWebSocketConnection:A}})),ot=/* @__PURE__ */ f(((e,t)=>{let{createInflateRaw:n,Z_DEFAULT_WINDOWBITS:r}=p(`node:zlib`),{isValidClientWindowBits:i}=rt(),{MessageSizeExceededError:a}=T(),o=Buffer.from([0,0,255,255]),s=Symbol(`kBuffer`),c=Symbol(`kLength`);t.exports={PerMessageDeflate:class{#e;#t={};#n=0;constructor(e,t){this.#t.serverNoContextTakeover=e.has(`server_no_context_takeover`),this.#t.serverMaxWindowBits=e.get(`server_max_window_bits`),this.#n=t.maxPayloadSize}decompress(e,t,l){if(!this.#e){let e=r;if(this.#t.serverMaxWindowBits){if(!i(this.#t.serverMaxWindowBits)){l(/* @__PURE__ */ Error(`Invalid server_max_window_bits`));return}e=Number.parseInt(this.#t.serverMaxWindowBits)}try{this.#e=n({windowBits:e})}catch(e){l(e);return}this.#e[s]=[],this.#e[c]=0,this.#e.on(`data`,e=>{this.#e[c]+=e.length,this.#n>0&&this.#e[c]>this.#n?(l(new a),this.#e.removeAllListeners(),this.#e.destroy(),this.#e=null):this.#e[s].push(e)}),this.#e.on(`error`,e=>{this.#e=null,l(e)})}this.#e.write(e),t&&this.#e.write(o),this.#e.flush(()=>{if(!this.#e)return;let e=Buffer.concat(this.#e[s],this.#e[c]);this.#e[s].length=0,this.#e[c]=0,l(null,e)})}}}})),st=/* @__PURE__ */ f(((e,t)=>{let{Writable:n}=p(`node:stream`),r=p(`node:assert`),{parserStates:i,opcodes:a,states:o,emptyBuffer:s,sentCloseFrameState:c}=tt(),{kReadyState:l,kSentClose:u,kResponse:d,kReceivedClose:f}=nt(),{channels:m}=k(),{isValidStatusCode:h,isValidOpcode:g,failWebsocketConnection:_,websocketMessageReceived:v,utf8Decode:y,isControlFrame:b,isTextBinaryFrame:x,isContinuationFrame:S}=rt(),{WebsocketFrameSend:C}=it(),{closeWebSocketConnection:w}=at(),{PerMessageDeflate:E}=ot(),{MessageSizeExceededError:D}=T();function O(e,t,n){w(e,t,n,Buffer.byteLength(n)),_(e,n)}t.exports={ByteParser:class extends n{#e=[];#t=0;#n=0;#r=!1;#i=i.INFO;#a={};#o=[];#s;#c;#l;constructor(e,t,n={}){super(),this.ws=e,this.#s=t??/* @__PURE__ */ new Map,this.#c=n.maxFragments??0,this.#l=n.maxPayloadSize??0,this.#s.has(`permessage-deflate`)&&this.#s.set(`permessage-deflate`,new E(t,n))}_write(e,t,n){this.#e.push(e),this.#n+=e.length,this.#r=!0,this.run(n)}#u(){return this.#l>0&&!b(this.#a.opcode)&&this.#a.payloadLength+this.#t>this.#l?(O(this.ws,1009,`Payload size exceeds maximum allowed size`),!1):!0}run(e){for(;this.#r;)if(this.#i===i.INFO){if(this.#n<2)return e();let t=this.consume(2),n=!!(t[0]&128),r=t[0]&15,o=(t[1]&128)==128,s=!n&&r!==a.CONTINUATION,c=t[1]&127,l=t[0]&64,u=t[0]&32,d=t[0]&16;if(!g(r))return _(this.ws,`Invalid opcode received`),e();if(o)return _(this.ws,`Frame cannot be masked`),e();if(l!==0&&!this.#s.has(`permessage-deflate`)){_(this.ws,`Expected RSV1 to be clear.`);return}if(u!==0||d!==0){_(this.ws,`RSV1, RSV2, RSV3 must be clear`);return}if(s&&!x(r)){_(this.ws,`Invalid frame type was fragmented.`);return}if(x(r)&&this.#o.length>0){_(this.ws,`Expected continuation frame`);return}if(this.#a.fragmented&&s){_(this.ws,`Fragmented frame exceeded 125 bytes.`);return}if((c>125||s)&&b(r)){_(this.ws,`Control frame either too large or fragmented`);return}if(S(r)&&this.#o.length===0&&!this.#a.compressed){_(this.ws,`Unexpected continuation frame`);return}if(c<=125){if(this.#a.payloadLength=c,this.#i=i.READ_DATA,!this.#u())return}else c===126?this.#i=i.PAYLOADLENGTH_16:c===127&&(this.#i=i.PAYLOADLENGTH_64);x(r)&&(this.#a.binaryType=r,this.#a.compressed=l!==0),this.#a.opcode=r,this.#a.masked=o,this.#a.fin=n,this.#a.fragmented=s}else if(this.#i===i.PAYLOADLENGTH_16){if(this.#n<2)return e();let t=this.consume(2);if(this.#a.payloadLength=t.readUInt16BE(0),this.#i=i.READ_DATA,!this.#u())return}else if(this.#i===i.PAYLOADLENGTH_64){if(this.#n<8)return e();let t=this.consume(8),n=t.readUInt32BE(0),r=t.readUInt32BE(4);if(n!==0||r>2**31-1){_(this.ws,`Received payload length > 2^31 bytes.`);return}if(this.#a.payloadLength=r,this.#i=i.READ_DATA,!this.#u())return}else if(this.#i===i.READ_DATA){if(this.#n{this.destroyed||(this.#r=!0,this.run(e))});return}}else if(this.#a.compressed){this.#s.get(`permessage-deflate`).decompress(t,this.#a.fin,(t,n)=>{if(t){let e=t instanceof D?1009:1007;O(this.ws,e,t.message)}else this.writeFragments(n)&&(this.#l>0&&this.#t>this.#l?O(this.ws,1009,new D().message):this.#a.fin?(v(this.ws,this.#a.binaryType,this.consumeFragments()),this.#r=!0,this.#i=i.INFO,this.run(e)):(this.#i=i.INFO,this.#r=!0,this.run(e)))}),this.#r=!1;break}else{if(!this.writeFragments(t))return;if(this.#l>0&&this.#t>this.#l){O(this.ws,1009,new D().message);return}!this.#a.fragmented&&this.#a.fin&&v(this.ws,this.#a.binaryType,this.consumeFragments()),this.#i=i.INFO}}}consume(e){if(e>this.#n)throw Error(`Called consume() before buffers satiated.`);if(e===0)return s;if(this.#e[0].length===e)return this.#n-=this.#e[0].length,this.#e.shift();let t=Buffer.allocUnsafe(e),n=0;for(;n!==e;){let r=this.#e[0],{length:i}=r;if(i+n===e){t.set(this.#e.shift(),n);break}if(i+n>e){t.set(r.subarray(0,e-n),n),this.#e[0]=r.subarray(e-n);break}t.set(this.#e.shift(),n),n+=r.length}return this.#n-=e,t}writeFragments(e){return this.#c>0&&this.#o.length===this.#c?(O(this.ws,1008,`Too many message fragments`),!1):(this.#t+=e.length,this.#o.push(e),!0)}consumeFragments(){let e=this.#o;if(e.length===1)return this.#t=0,e.shift();let t=Buffer.concat(e,this.#t);return this.#o=[],this.#t=0,t}parseCloseBody(e){r(e.length!==1);let t;if(e.length>=2&&(t=e.readUInt16BE(0)),t!==void 0&&!h(t))return{code:1002,reason:`Invalid status code`,error:!0};let n=e.subarray(2);n[0]===239&&n[1]===187&&n[2]===191&&(n=n.subarray(3));try{n=y(n)}catch{return{code:1007,reason:`Invalid UTF-8`,error:!0}}return{code:t,reason:n,error:!1}}parseControlFrame(e){let{opcode:t,payloadLength:n}=this.#a;if(t===a.CLOSE){if(n===1)return _(this.ws,`Received close frame with a 1-byte body.`),!1;if(this.#a.closeInfo=this.parseCloseBody(e),this.#a.closeInfo.error){let{code:e,reason:t}=this.#a.closeInfo;return w(this.ws,e,t,t.length),_(this.ws,t),!1}if(this.ws[u]!==c.SENT){let e=s;this.#a.closeInfo.code&&(e=Buffer.allocUnsafe(2),e.writeUInt16BE(this.#a.closeInfo.code,0));let t=new C(e);this.ws[d].socket.write(t.createFrame(a.CLOSE),e=>{e||(this.ws[u]=c.SENT)})}return this.ws[l]=o.CLOSING,this.ws[f]=!0,!1}if(t===a.PING){if(!this.ws[f]){let t=new C(e);this.ws[d].socket.write(t.createFrame(a.PONG)),m.ping.hasSubscribers&&m.ping.publish({payload:e})}}else t===a.PONG&&m.pong.hasSubscribers&&m.pong.publish({payload:e});return!0}get closingInfo(){return this.#a.closeInfo}}}})),ct=/* @__PURE__ */ f(((e,t)=>{let{WebsocketFrameSend:n}=it(),{opcodes:r,sendHints:i}=tt(),a=K(),o=Buffer[Symbol.species];var s=class{#e=new a;#t=!1;#n;constructor(e){this.#n=e}add(e,t,n){if(n!==i.blob){let r=c(e,n);if(!this.#t)this.#n.write(r,t);else{let e={promise:null,callback:t,frame:r};this.#e.push(e)}return}let r={promise:e.arrayBuffer().then(e=>{r.promise=null,r.frame=c(e,n)}),callback:t,frame:null};this.#e.push(r),this.#t||this.#r()}async#r(){this.#t=!0;let e=this.#e;for(;!e.isEmpty();){let t=e.shift();t.promise!==null&&await t.promise,this.#n.write(t.frame,t.callback),t.callback=t.frame=null}this.#t=!1}};function c(e,t){return new n(l(e,t)).createFrame(t===i.string?r.TEXT:r.BINARY)}function l(e,t){switch(t){case i.string:return Buffer.from(e);case i.arrayBuffer:case i.blob:return new o(e);case i.typedArray:return new o(e.buffer,e.byteOffset,e.byteLength)}}t.exports={SendQueue:s}})),lt=/* @__PURE__ */ f(((e,t)=>{let{webidl:n}=B(),{URLSerializer:r}=z(),{environmentSettingsObject:i}=V(),{staticPropertyDescriptors:a,states:o,sentCloseFrameState:s,sendHints:c}=tt(),{kWebSocketURL:l,kReadyState:u,kController:d,kBinaryType:f,kResponse:m,kSentClose:h,kByteParser:g}=nt(),{isConnecting:_,isEstablished:v,isClosing:y,isValidSubprotocol:b,fireEvent:x}=rt(),{establishWebSocketConnection:S,closeWebSocketConnection:C}=at(),{ByteParser:w}=st(),{kEnumerableProperty:T,isBlobLike:E}=O(),{getGlobalDispatcher:D}=Ae(),{types:k}=p(`node:util`),{ErrorEvent:A,CloseEvent:j}=et(),{SendQueue:M}=ct();var N=class e extends EventTarget{#e={open:null,error:null,close:null,message:null};#t=0;#n=``;#r=``;#i;constructor(t,r=[]){super(),n.util.markAsUncloneable(this);let a=`WebSocket constructor`;n.argumentLengthCheck(arguments,1,a);let o=n.converters[`DOMString or sequence or WebSocketInit`](r,a,`options`);t=n.converters.USVString(t,a,`url`),r=o.protocols;let c=i.settingsObject.baseUrl,p;try{p=new URL(t,c)}catch(e){throw new DOMException(e,`SyntaxError`)}if(p.protocol===`http:`?p.protocol=`ws:`:p.protocol===`https:`&&(p.protocol=`wss:`),p.protocol!==`ws:`&&p.protocol!==`wss:`)throw new DOMException(`Expected a ws: or wss: protocol, got ${p.protocol}`,`SyntaxError`);if(p.hash||p.href.endsWith(`#`))throw new DOMException(`Got fragment`,`SyntaxError`);if(typeof r==`string`&&(r=[r]),r.length!==new Set(r.map(e=>e.toLowerCase())).size||r.length>0&&!r.every(e=>b(e)))throw new DOMException(`Invalid Sec-WebSocket-Protocol value`,`SyntaxError`);this[l]=new URL(p.href);let m=i.settingsObject;this[d]=S(p,r,m,this,(e,t)=>this.#a(e,t),o),this[u]=e.CONNECTING,this[h]=s.NOT_SENT,this[f]=`blob`}close(t=void 0,r=void 0){n.brandCheck(this,e);let i=`WebSocket.close`;if(t!==void 0&&(t=n.converters[`unsigned short`](t,i,`code`,{clamp:!0})),r!==void 0&&(r=n.converters.USVString(r,i,`reason`)),t!==void 0&&t!==1e3&&(t<3e3||t>4999))throw new DOMException(`invalid code`,`InvalidAccessError`);let a=0;if(r!==void 0&&(a=Buffer.byteLength(r),a>123))throw new DOMException(`Reason must be less than 123 bytes; received ${a}`,`SyntaxError`);C(this,t,r,a)}send(t){n.brandCheck(this,e);let r=`WebSocket.send`;if(n.argumentLengthCheck(arguments,1,r),t=n.converters.WebSocketSendData(t,r,`data`),_(this))throw new DOMException(`Sent before connected.`,`InvalidStateError`);if(v(this)&&!y(this)){if(typeof t==`string`){let e=Buffer.byteLength(t);this.#t+=e,this.#i.add(t,()=>{this.#t-=e},c.string)}else k.isArrayBuffer(t)?(this.#t+=t.byteLength,this.#i.add(t,()=>{this.#t-=t.byteLength},c.arrayBuffer)):ArrayBuffer.isView(t)?(this.#t+=t.byteLength,this.#i.add(t,()=>{this.#t-=t.byteLength},c.typedArray)):E(t)&&(this.#t+=t.size,this.#i.add(t,()=>{this.#t-=t.size},c.blob))}}get readyState(){return n.brandCheck(this,e),this[u]}get bufferedAmount(){return n.brandCheck(this,e),this.#t}get url(){return n.brandCheck(this,e),r(this[l])}get extensions(){return n.brandCheck(this,e),this.#r}get protocol(){return n.brandCheck(this,e),this.#n}get onopen(){return n.brandCheck(this,e),this.#e.open}set onopen(t){n.brandCheck(this,e),this.#e.open&&this.removeEventListener(`open`,this.#e.open),typeof t==`function`?(this.#e.open=t,this.addEventListener(`open`,t)):this.#e.open=null}get onerror(){return n.brandCheck(this,e),this.#e.error}set onerror(t){n.brandCheck(this,e),this.#e.error&&this.removeEventListener(`error`,this.#e.error),typeof t==`function`?(this.#e.error=t,this.addEventListener(`error`,t)):this.#e.error=null}get onclose(){return n.brandCheck(this,e),this.#e.close}set onclose(t){n.brandCheck(this,e),this.#e.close&&this.removeEventListener(`close`,this.#e.close),typeof t==`function`?(this.#e.close=t,this.addEventListener(`close`,t)):this.#e.close=null}get onmessage(){return n.brandCheck(this,e),this.#e.message}set onmessage(t){n.brandCheck(this,e),this.#e.message&&this.removeEventListener(`message`,this.#e.message),typeof t==`function`?(this.#e.message=t,this.addEventListener(`message`,t)):this.#e.message=null}get binaryType(){return n.brandCheck(this,e),this[f]}set binaryType(t){n.brandCheck(this,e),t!==`blob`&&t!==`arraybuffer`?this[f]=`blob`:this[f]=t}#a(e,t){this[m]=e;let n=this[d]?.dispatcher?.webSocketOptions,r=n?.maxFragments,i=n?.maxPayloadSize,a=new w(this,t,{maxFragments:r,maxPayloadSize:i});a.on(`drain`,P),a.on(`error`,F.bind(this)),e.socket.ws=this,this[g]=a,this.#i=new M(e.socket),this[u]=o.OPEN;let s=e.headersList.get(`sec-websocket-extensions`);s!==null&&(this.#r=s);let c=e.headersList.get(`sec-websocket-protocol`);c!==null&&(this.#n=c),x(`open`,this)}};N.CONNECTING=N.prototype.CONNECTING=o.CONNECTING,N.OPEN=N.prototype.OPEN=o.OPEN,N.CLOSING=N.prototype.CLOSING=o.CLOSING,N.CLOSED=N.prototype.CLOSED=o.CLOSED,Object.defineProperties(N.prototype,{CONNECTING:a,OPEN:a,CLOSING:a,CLOSED:a,url:T,readyState:T,bufferedAmount:T,onopen:T,onerror:T,onclose:T,close:T,onmessage:T,binaryType:T,send:T,extensions:T,protocol:T,[Symbol.toStringTag]:{value:`WebSocket`,writable:!1,enumerable:!1,configurable:!0}}),Object.defineProperties(N,{CONNECTING:a,OPEN:a,CLOSING:a,CLOSED:a}),n.converters[`sequence`]=n.sequenceConverter(n.converters.DOMString),n.converters[`DOMString or sequence`]=function(e,t,r){return n.util.Type(e)===`Object`&&Symbol.iterator in e?n.converters[`sequence`](e):n.converters.DOMString(e,t,r)},n.converters.WebSocketInit=n.dictionaryConverter([{key:`protocols`,converter:n.converters[`DOMString or sequence`],defaultValue:()=>[]},{key:`dispatcher`,converter:n.converters.any,defaultValue:()=>D()},{key:`headers`,converter:n.nullableConverter(n.converters.HeadersInit)}]),n.converters[`DOMString or sequence or WebSocketInit`]=function(e){return n.util.Type(e)===`Object`&&!(Symbol.iterator in e)?n.converters.WebSocketInit(e):{protocols:n.converters[`DOMString or sequence`](e)}},n.converters.WebSocketSendData=function(e){if(n.util.Type(e)===`Object`){if(E(e))return n.converters.Blob(e,{strict:!1});if(ArrayBuffer.isView(e)||k.isArrayBuffer(e))return n.converters.BufferSource(e)}return n.converters.USVString(e)};function P(){this.ws[m].socket.resume()}function F(e){let t,n;e instanceof j?(t=e.reason,n=e.code):t=e.message,x(`error`,this,()=>new A(`error`,{error:e,message:t})),C(this,n)}t.exports={WebSocket:N}})),ut=/* @__PURE__ */ f(((e,t)=>{function n(e){return e.indexOf(`\0`)===-1}function r(e){if(e.length===0)return!1;for(let t=0;t57)return!1;return!0}function i(e){return new Promise(t=>{setTimeout(t,e).unref()})}t.exports={isValidLastEventId:n,isASCIINumber:r,delay:i}})),dt=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:buffer`),{Transform:r}=p(`node:stream`),{isASCIINumber:i,isValidLastEventId:a}=ut(),o=[239,187,191],s=n.kStringMaxLength,c=Buffer.from(`data`),l=Buffer.from(`event`),u=Buffer.from(`id`),d=Buffer.from(`retry`);function f(e,t){if(t>=e.length)return!1;for(let n=t;n57)return!1;return!0}function m(e,t){for(let n=t;n0?Math.min(131072,Math.max(1024,Math.floor(this.maxEventSize/128))):0;this.maxDataLines=t,this.maxBufferedChunks=t,e.push&&(this.push=e.push)}_transform(e,t,n){if(e.length===0)n();else if(this.maxEventSize>0&&this.chunks.length>=this.maxBufferedChunks&&e[0]!==10&&e[0]!==13)n(g());else if(this.chunks.push(e),this.checkBOM&&this.handleBOM())n();else{for(;this.hasCurrentByte();){let e=this.currentByte();if(this.eventEndCheck){if(this.crlfCheck){if(e===10){this.crlfCheck=!1,this.consumeCurrentByte();continue}this.crlfCheck=!1}if(e===10||e===13){e===13&&(this.crlfCheck=!0),this.consumeCurrentByte(),this.hasPendingEvent()&&this.processEvent(this.event),this.clearEvent();continue}this.eventEndCheck=!1}else if(e===10||e===13){e===13&&(this.crlfCheck=!0);try{this.parseLine(this.readLine(),this.event)}catch(e){n(e);return}this.consumeCurrentByte(),this.eventEndCheck=!0}else{if(this.maxEventSize>0&&++this.lineLength>this.maxEventSize+7){n(g());return}this.advanceCursor()}}n()}}_destroy(e,t){this.chunks.length=0,this.clearEvent(),super._destroy(e,t)}parseLine(e,t){if(e.length===0)return;let n=e.indexOf(58);if(n===0)return;let r=e.length,i=e.length;if(n!==-1&&(r=n,i=n+1,e[i]===32&&++i),h(e,r,c)){if(this.maxEventSize>0&&this.dataLineCount>=this.maxDataLines)throw g();let n=e.length-i,r=this.eventFieldSizes.data+(t.data===void 0?0:1)+n;this.setEventFieldSize(`data`,r);let a=e.toString(`utf8`,i);t.data===void 0?t.data=a:t.data+=`\n${a}`,this.dataLineCount++}else h(e,r,d)?f(e,i)&&(this.setEventFieldSize(`retry`,e.length-i),t.retry=e.toString(`utf8`,i)):h(e,r,u)?m(e,i)&&(this.setEventFieldSize(`id`,e.length-i),t.id=e.toString(`utf8`,i)):h(e,r,l)&&i0&&n>this.maxEventSize)throw g();this.eventSize=n,this.eventFieldSizes[e]=t}processEvent(e){e.retry&&i(e.retry)&&(this.state.reconnectionTime=parseInt(e.retry,10)),e.id&&a(e.id)&&(this.state.lastEventId=e.id),e.data!==void 0&&this.push({type:e.event||`message`,options:{data:e.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}clearEvent(){this.event.data=void 0,this.event.event=void 0,this.event.id=void 0,this.event.retry=void 0,this.eventSize=0,this.dataLineCount=0,this.eventFieldSizes.data=0,this.eventFieldSizes.event=0,this.eventFieldSizes.id=0,this.eventFieldSizes.retry=0}hasPendingEvent(){return this.event.data!==void 0||this.event.event!==void 0||this.event.id!==void 0||this.event.retry!==void 0}hasCurrentByte(){return this.chunkIndex=this.chunks[this.chunkIndex].length;)this.chunkIndex++,this.pos=0}syncLineStartToCursor(){this.lineChunkIndex=this.chunkIndex,this.linePos=this.pos,this.lineLength=0,this.dropConsumedChunks()}dropConsumedChunks(){if(this.lineChunkIndex>0){let e=this.lineChunkIndex;this.chunks.splice(0,e),this.lineChunkIndex=0,this.chunkIndex-=e}this.chunkIndex===this.chunks.length&&(this.chunks.length=0,this.chunkIndex=0,this.pos=0,this.lineChunkIndex=0,this.linePos=0)}readLine(){if(this.lineChunkIndex===this.chunkIndex)return this.chunks[this.chunkIndex].subarray(this.linePos,this.pos);let e=[],t=0;for(let n=this.lineChunkIndex;n<=this.chunkIndex;n++){let r=this.chunks[n],i=n===this.lineChunkIndex?this.linePos:0,a=n===this.chunkIndex?this.pos:r.length,o=r.subarray(i,a);t+=o.length,e.push(o)}return Buffer.concat(e,t)}peekBufferedByte(e){let t=this.lineChunkIndex,n=this.linePos;for(;t0&&this.lineChunkIndex{let{pipeline:n}=p(`node:stream`),{fetching:r}=Be(),{makeRequest:i}=ze(),{webidl:a}=B(),{EventSourceStream:o}=dt(),{parseMIMEType:s}=z(),{createFastMessageEvent:c}=et(),{isNetworkError:l}=Le(),{delay:u}=ut(),{kEnumerableProperty:d}=O(),{environmentSettingsObject:f}=V(),{getGlobalDispatcher:m}=Ae(),h=!1,g=3e3;var _=class e extends EventTarget{#e={open:null,error:null,message:null};#t=null;#n=!1;#r=0;#i=null;#a=null;#o;#s;constructor(e,t={}){super(),a.util.markAsUncloneable(this);let n=`EventSource constructor`;a.argumentLengthCheck(arguments,1,n),h||(h=!0,process.emitWarning(`EventSource is experimental, expect them to change at any time.`,{code:`UNDICI-ES`})),e=a.converters.USVString(e,n,`url`),t=a.converters.EventSourceInitDict(t,n,`eventSourceInitDict`),this.#o=t.dispatcher,this.#s={lastEventId:``,reconnectionTime:g};let r=f,o;try{o=new URL(e,r.settingsObject.baseUrl),this.#s.origin=o.origin}catch(e){throw new DOMException(e,`SyntaxError`)}this.#t=o.href;let s=`anonymous`;t.withCredentials&&(s=`use-credentials`,this.#n=!0);let c={redirect:`follow`,keepalive:!0,mode:`cors`,credentials:s===`anonymous`?`same-origin`:`omit`,referrer:`no-referrer`};c.client=f.settingsObject,c.headersList=[[`accept`,{name:`accept`,value:`text/event-stream`}]],c.cache=`no-store`,c.initiator=`other`,c.urlList=[new URL(this.#t)],this.#i=i(c),this.#c()}get readyState(){return this.#r}get url(){return this.#t}get withCredentials(){return this.#n}#c(){if(this.#r===2)return;this.#r=0;let e={request:this.#i,dispatcher:this.#o};e.processResponseEndOfBody=e=>{l(e)&&(this.dispatchEvent(new Event(`error`)),this.close()),this.#l()},e.processResponse=e=>{if(l(e)){if(e.aborted){this.close(),this.dispatchEvent(new Event(`error`));return}this.#l();return}let t=e.headersList.get(`content-type`,!0),r=t===null?`failure`:s(t),i=r!==`failure`&&r.essence===`text/event-stream`;if(e.status!==200||i===!1){this.close(),this.dispatchEvent(new Event(`error`));return}this.#r=1,this.dispatchEvent(new Event(`open`)),this.#s.origin=e.urlList[e.urlList.length-1].origin;let a=new o({eventSourceSettings:this.#s,maxEventSize:this.#o.eventSourceOptions?.maxEventSize,push:e=>{this.dispatchEvent(c(e.type,e.options))}});n(e.body.stream,a,e=>{e?.aborted===!1&&(this.close(),this.dispatchEvent(new Event(`error`)))})},this.#a=r(e)}async#l(){this.#r!==2&&(this.#r=0,this.dispatchEvent(new Event(`error`)),await u(this.#s.reconnectionTime),this.#r===0&&(this.#s.lastEventId.length&&this.#i.headersList.set(`last-event-id`,this.#s.lastEventId,!0),this.#c()))}close(){a.brandCheck(this,e),this.#r!==2&&(this.#r=2,this.#a.abort(),this.#i=null)}get onopen(){return this.#e.open}set onopen(e){this.#e.open&&this.removeEventListener(`open`,this.#e.open),typeof e==`function`?(this.#e.open=e,this.addEventListener(`open`,e)):this.#e.open=null}get onmessage(){return this.#e.message}set onmessage(e){this.#e.message&&this.removeEventListener(`message`,this.#e.message),typeof e==`function`?(this.#e.message=e,this.addEventListener(`message`,e)):this.#e.message=null}get onerror(){return this.#e.error}set onerror(e){this.#e.error&&this.removeEventListener(`error`,this.#e.error),typeof e==`function`?(this.#e.error=e,this.addEventListener(`error`,e)):this.#e.error=null}};let v={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:0,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:1,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:2,writable:!1}};Object.defineProperties(_,v),Object.defineProperties(_.prototype,v),Object.defineProperties(_.prototype,{close:d,onerror:d,onmessage:d,onopen:d,readyState:d,url:d,withCredentials:d}),a.converters.EventSourceInitDict=a.dictionaryConverter([{key:`withCredentials`,converter:a.converters.boolean,defaultValue:()=>!1},{key:`dispatcher`,converter:a.converters.any,defaultValue:()=>m()}]),t.exports={EventSource:_,defaultReconnectionTime:g}})),pt=/* @__PURE__ */ f(((e,t)=>{let n=se(),r=j(),i=le(),a=J(),o=ue(),s=de(),c=Y(),l=pe(),u=T(),d=O(),{InvalidArgumentError:f}=u,m=xe(),h=P(),g=Te(),_=ke(),v=Ee(),y=Z(),b=fe(),{getGlobalDispatcher:x,setGlobalDispatcher:S}=Ae(),C=je(),w=W(),E=G();Object.assign(r.prototype,m),t.exports.Dispatcher=r,t.exports.Client=n,t.exports.Pool=i,t.exports.BalancedPool=a,t.exports.Agent=o,t.exports.ProxyAgent=s,t.exports.EnvHttpProxyAgent=c,t.exports.RetryAgent=l,t.exports.RetryHandler=b,t.exports.DecoratorHandler=C,t.exports.RedirectHandler=w,t.exports.createRedirectInterceptor=E,t.exports.interceptors={redirect:Me(),retry:Ne(),dump:Pe(),dns:Fe()},t.exports.buildConnector=h,t.exports.errors=u,t.exports.util={parseHeaders:d.parseHeaders,headerNameToString:d.headerNameToString};function D(e){return(t,n,r)=>{if(typeof n==`function`&&(r=n,n=null),!t||typeof t!=`string`&&typeof t!=`object`&&!(t instanceof URL))throw new f(`invalid url`);if(n!=null&&typeof n!=`object`)throw new f(`invalid opts`);if(n&&n.path!=null){if(typeof n.path!=`string`)throw new f(`invalid opts.path`);let e=n.path;n.path.startsWith(`/`)||(e=`/${e}`),t=new URL(d.parseOrigin(t).origin+e)}else n||=typeof t==`object`?t:{},t=d.parseURL(t);let{agent:i,dispatcher:a=x()}=n;if(i)throw new f(`unsupported opts.agent. Did you mean opts.client?`);return e.call(a,{...n,origin:t.origin,path:t.search?`${t.pathname}${t.search}`:t.pathname,method:n.method||(n.body?`PUT`:`GET`)},r)}}t.exports.setGlobalDispatcher=S,t.exports.getGlobalDispatcher=x;let k=Be().fetch;t.exports.fetch=async function(e,t=void 0){try{return await k(e,t)}catch(e){throw e&&typeof e==`object`&&Error.captureStackTrace(e),e}},t.exports.Headers=Ie().Headers,t.exports.Response=Le().Response,t.exports.Request=ze().Request,t.exports.FormData=re().FormData,t.exports.File=globalThis.File??p(`node:buffer`).File,t.exports.FileReader=Ge().FileReader;let{setGlobalOrigin:A,getGlobalOrigin:M}=R();t.exports.setGlobalOrigin=A,t.exports.getGlobalOrigin=M;let{CacheStorage:N}=Ye(),{kConstruct:F}=Ke();t.exports.caches=new N(F);let{deleteCookie:I,getCookies:L,getSetCookies:ee,setCookie:te}=$e();t.exports.deleteCookie=I,t.exports.getCookies=L,t.exports.getSetCookies=ee,t.exports.setCookie=te;let{parseMIMEType:B,serializeAMimeType:V}=z();t.exports.parseMIMEType=B,t.exports.serializeAMimeType=V;let{CloseEvent:H,ErrorEvent:ne,MessageEvent:U}=et();t.exports.WebSocket=lt().WebSocket,t.exports.CloseEvent=H,t.exports.ErrorEvent=ne,t.exports.MessageEvent=U,t.exports.request=D(m.request),t.exports.stream=D(m.stream),t.exports.pipeline=D(m.pipeline),t.exports.connect=D(m.connect),t.exports.upgrade=D(m.upgrade),t.exports.MockClient=g,t.exports.MockPool=v,t.exports.MockAgent=_,t.exports.mockErrors=y;let{EventSource:ie}=ft();t.exports.EventSource=ie}));C(),pt();var mt;(function(e){e[e.OK=200]=`OK`,e[e.MultipleChoices=300]=`MultipleChoices`,e[e.MovedPermanently=301]=`MovedPermanently`,e[e.ResourceMoved=302]=`ResourceMoved`,e[e.SeeOther=303]=`SeeOther`,e[e.NotModified=304]=`NotModified`,e[e.UseProxy=305]=`UseProxy`,e[e.SwitchProxy=306]=`SwitchProxy`,e[e.TemporaryRedirect=307]=`TemporaryRedirect`,e[e.PermanentRedirect=308]=`PermanentRedirect`,e[e.BadRequest=400]=`BadRequest`,e[e.Unauthorized=401]=`Unauthorized`,e[e.PaymentRequired=402]=`PaymentRequired`,e[e.Forbidden=403]=`Forbidden`,e[e.NotFound=404]=`NotFound`,e[e.MethodNotAllowed=405]=`MethodNotAllowed`,e[e.NotAcceptable=406]=`NotAcceptable`,e[e.ProxyAuthenticationRequired=407]=`ProxyAuthenticationRequired`,e[e.RequestTimeout=408]=`RequestTimeout`,e[e.Conflict=409]=`Conflict`,e[e.Gone=410]=`Gone`,e[e.TooManyRequests=429]=`TooManyRequests`,e[e.InternalServerError=500]=`InternalServerError`,e[e.NotImplemented=501]=`NotImplemented`,e[e.BadGateway=502]=`BadGateway`,e[e.ServiceUnavailable=503]=`ServiceUnavailable`,e[e.GatewayTimeout=504]=`GatewayTimeout`})(mt||={});var ht;(function(e){e.Accept=`accept`,e.ContentType=`content-type`})(ht||={});var gt;(function(e){e.ApplicationJson=`application/json`})(gt||={}),mt.MovedPermanently,mt.ResourceMoved,mt.SeeOther,mt.TemporaryRedirect,mt.PermanentRedirect,mt.BadGateway,mt.ServiceUnavailable,mt.GatewayTimeout;var _t=function(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})};const{access:vt,appendFile:yt,writeFile:bt}=s,xt=`GITHUB_STEP_SUMMARY`;new class{constructor(){this._buffer=``}filePath(){return _t(this,void 0,void 0,function*(){if(this._filePath)return this._filePath;let e=process.env[xt];if(!e)throw Error(`Unable to find environment variable for $${xt}. Check if your runtime environment supports job summaries.`);try{yield vt(e,o.R_OK|o.W_OK)}catch{throw Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}return this._filePath=e,this._filePath})}wrap(e,t,n={}){let r=Object.entries(n).map(([e,t])=>` ${e}="${t}"`).join(``);return t?`<${e}${r}>${t}`:`<${e}${r}>`}write(e){return _t(this,void 0,void 0,function*(){let t=!!e?.overwrite,n=yield this.filePath();return yield(t?bt:yt)(n,this._buffer,{encoding:`utf8`}),this.emptyBuffer()})}clear(){return _t(this,void 0,void 0,function*(){return this.emptyBuffer().write({overwrite:!0})})}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){return this._buffer=``,this}addRaw(e,t=!1){return this._buffer+=e,t?this.addEOL():this}addEOL(){return this.addRaw(r)}addCodeBlock(e,t){let n=Object.assign({},t&&{lang:t}),r=this.wrap(`pre`,this.wrap(`code`,e),n);return this.addRaw(r).addEOL()}addList(e,t=!1){let n=t?`ol`:`ul`,r=e.map(e=>this.wrap(`li`,e)).join(``),i=this.wrap(n,r);return this.addRaw(i).addEOL()}addTable(e){let t=e.map(e=>{let t=e.map(e=>{if(typeof e==`string`)return this.wrap(`td`,e);let{header:t,data:n,colspan:r,rowspan:i}=e,a=t?`th`:`td`,o=Object.assign(Object.assign({},r&&{colspan:r}),i&&{rowspan:i});return this.wrap(a,n,o)}).join(``);return this.wrap(`tr`,t)}).join(``),n=this.wrap(`table`,t);return this.addRaw(n).addEOL()}addDetails(e,t){let n=this.wrap(`details`,this.wrap(`summary`,e)+t);return this.addRaw(n).addEOL()}addImage(e,t,n){let{width:r,height:i}=n||{},a=Object.assign(Object.assign({},r&&{width:r}),i&&{height:i}),o=this.wrap(`img`,null,Object.assign({src:e,alt:t},a));return this.addRaw(o).addEOL()}addHeading(e,t){let n=`h${t}`,r=[`h1`,`h2`,`h3`,`h4`,`h5`,`h6`].includes(n)?n:`h1`,i=this.wrap(r,e);return this.addRaw(i).addEOL()}addSeparator(){let e=this.wrap(`hr`,null);return this.addRaw(e).addEOL()}addBreak(){let e=this.wrap(`br`,null);return this.addRaw(e).addEOL()}addQuote(e,t){let n=Object.assign({},t&&{cite:t}),r=this.wrap(`blockquote`,e,n);return this.addRaw(r).addEOL()}addLink(e,t){let n=this.wrap(`a`,e,{href:t});return this.addRaw(n).addEOL()}};const{chmod:St,copyFile:Ct,lstat:wt,mkdir:Tt,open:Et,readdir:Dt,rename:Ot,rm:kt,rmdir:At,stat:jt,symlink:Mt,unlink:Nt}=a.promises;process.platform,a.constants.O_RDONLY,process.platform,c.EventEmitter,c.EventEmitter,n.platform(),n.arch();var Pt;(function(e){e[e.Success=0]=`Success`,e[e.Failure=1]=`Failure`})(Pt||={});function Ft(e,t){let n=process.env[`INPUT_${e.replace(/ /g,`_`).toUpperCase()}`]||``;if(t&&t.required&&!n)throw Error(`Input required and not supplied: ${e}`);return t&&t.trimWhitespace===!1?n:n.trim()}function It(e,n){if(process.env.GITHUB_OUTPUT)return b(`OUTPUT`,x(e,n));process.stdout.write(t.EOL),g(`set-output`,{name:e},m(n))}function Lt(e){process.exitCode=Pt.Failure,Rt(e)}function Rt(e,t={}){g(`error`,h(t),e instanceof Error?e.toString():e)}function zt(e,t={}){g(`warning`,h(t),e instanceof Error?e.toString():e)}function Bt(e){process.stdout.write(e+t.EOL)}function Vt(e){return e===`node`||e===`bun`}function Ht(e){return e===`npm`||e===`pnpm`||e===`bun`}function Ut(e,t){if(!Vt(e))throw Error(`Unsupported runtime "${e}". Supported runtimes are: node, bun.`);if(!Ht(t))throw Error(`Unsupported package manager "${t}". Supported package managers are: npm, pnpm, bun.`);if(e===`bun`&&t===`npm`)throw Error(`Unsupported runtime and package manager combination: Bun runtime does not support npm package manager. Bun runtime requires Bun or pnpm package manager.`)}function Wt(e,t){if(!e?.devEngines||typeof e.devEngines!=`object`)return!1;let n=e.devEngines;if(n[t]!==void 0&&n[t]!==null)return!0;if(n.runtime){let e=Array.isArray(n.runtime)?n.runtime:[n.runtime];for(let n of e)if(typeof n==`string`){let e=n.trim().toLowerCase();if(e===t||e.startsWith(`${t}@`)||e.startsWith(`${t}:`)||e.startsWith(`${t} `))return!0}else if(typeof n==`object`&&n){let e=n.name;if(typeof e==`string`&&e.trim().toLowerCase()===t)return!0}}return!1}function Gt(e,t){let n=t?.packageJson;return{hasBunPm:e.name===`bun`,hasBunVersionFile:!!t?.hasBunVersionFile,hasNodeVersionFile:!!t?.hasNodeVersionFile,hasBunDevEngine:Wt(n,`bun`),hasNodeDevEngine:Wt(n,`node`),nodeFileVersionFile:t?.nodeFileVersionFile}}function Kt(e){let{hasBunPm:t,hasBunVersionFile:n,hasNodeVersionFile:r,hasBunDevEngine:i,hasNodeDevEngine:a,nodeFileVersionFile:o}=e;if(i&&a)throw Error(`Conflicting runtime configuration in package.json devEngines: both Node.js and Bun runtimes are specified.`);if(t){if(a)throw Error(`Conflicting runtime configuration: packageManager indicates Bun but package.json devEngines specifies Node.js runtime.`);if(r)throw Error(`Conflicting runtime configuration: packageManager indicates Bun but Node.js version file (${o||`.nvmrc / .node-version`}) specifies Node.js runtime.`)}if(n&&r&&!i&&!a)throw Error(`Conflicting runtime version files detected: found both .bun-version and Node.js version file (${o||`.nvmrc / .node-version`}).`);if(n&&a)throw Error(`Conflicting runtime configuration: found .bun-version file but package.json devEngines specifies Node.js runtime.`);if(r&&i)throw Error(`Conflicting runtime configuration: found Node.js version file (${o||`.nvmrc / .node-version`}) but package.json devEngines specifies Bun runtime.`)}function qt(e,t){if(!(t?.hasPackageJson||t?.hasPnpmLock||t?.hasPackageLock||t?.hasBunLock))return`node`;let n=Gt(e,t);return Kt(n),n.hasBunDevEngine?`bun`:n.hasNodeDevEngine?`node`:n.hasBunVersionFile?`bun`:n.hasNodeVersionFile?`node`:n.hasBunPm?`bun`:`node`}function Jt(e){let t=e.toLowerCase();return t===`vite-plus`||t===`@voidzero-dev/vite-plus`||t===`@voidzero-dev/vite-plus-core`||t.startsWith(`@voidzero-dev/vite-plus-`)}function Yt(e){if(typeof e!=`string`)return!1;let t=e.toLowerCase();return t.includes(`@voidzero-dev/vite-plus`)||t.includes(`vite-plus-core`)}function Xt(e){if(!e||typeof e!=`object`)return!1;for(let[t,n]of Object.entries(e))if(typeof t==`string`&&(Jt(t)||Yt(n)))return!0;return!1}function Zt(e){let t=e.catalog||e.catalogs;if(!t||typeof t!=`object`)return!1;let n=Array.isArray(t)?t:Object.values(t);for(let e of n)if(e&&typeof e==`object`){for(let t of Object.keys(e))if(typeof t==`string`&&Jt(t))return!0}return!1}function Qt(e){if(!e)return!1;let t=[e.dependencies,e.devDependencies,e.optionalDependencies,e.peerDependencies];for(let e of t)if(Xt(e))return!0;return Zt(e)}function $t(e,t){if(e){let t=e.trim().toLowerCase();if(t&&t!==`auto`){if(t===`vite-plus`)return`vite-plus`;throw Error(`Invalid toolchain input: unsupported value. Supported values are "auto" or "vite-plus".`)}}if(t?.packageJson&&Qt(t.packageJson))return`vite-plus`}function en(e,t=process.cwd()){let n=an(t),r=un(n),i=qt(r,n),a=$t(e,n);return{detected:n.hasPackageJson,runtime:{name:i},packageManager:{name:r.name},toolchain:a}}function tn(e,t){return t===process.cwd()?e:d.join(t,e)}function nn(e){let t=tn(`package.json`,e);if(!u.existsSync(t))return{hasPackageJson:!1};let n;try{n=u.readFileSync(t,`utf8`)}catch(e){return{hasPackageJson:!0,packageJsonError:`Failed to read package.json: ${e instanceof Error?e.message:String(e)}`,packageJsonErrorType:`read`,packageJsonErrorCause:e}}try{return{hasPackageJson:!0,packageJson:JSON.parse(n)}}catch(e){return{hasPackageJson:!0,packageJsonError:`Failed to parse package.json: ${e instanceof Error?e.message:String(e)}`,packageJsonErrorType:`parse`,packageJsonErrorCause:e}}}function rn(e){let t=!1,n=!1,r=!1;try{t=u.existsSync(tn(`pnpm-lock.yaml`,e)),n=u.existsSync(tn(`package-lock.json`,e)),r=u.existsSync(tn(`bun.lock`,e))}catch{}return{hasPnpmLock:t,hasPackageLock:n,hasBunLock:r}}function an(e=process.cwd()){let t=nn(e),n=rn(e),r=u.existsSync(tn(`.bun-version`,e)),i=u.existsSync(tn(`.nvmrc`,e)),a=u.existsSync(tn(`.node-version`,e)),o=i||a,s=i?`.nvmrc`:a?`.node-version`:void 0;return{hasPackageJson:t.hasPackageJson,packageJson:t.packageJson,packageJsonError:t.packageJsonError,packageJsonErrorType:t.packageJsonErrorType,packageJsonErrorCause:t.packageJsonErrorCause,hasBunVersionFile:r,hasNodeVersionFile:o,nodeFileVersionFile:s,hasPnpmLock:n.hasPnpmLock,hasPackageLock:n.hasPackageLock,hasBunLock:n.hasBunLock}}function on(e){if(typeof e==`string`){let t=e.trim();if(!t)return;let n=t.indexOf(`@`),r=(n===-1?t:t.slice(0,n)).trim().toLowerCase();if(Ht(r))return{name:r}}else if(typeof e==`object`&&e){let t=e;if(typeof t.name==`string`||typeof t.name==`number`){let e=String(t.name).trim().toLowerCase();if(Ht(e))return{name:e}}}}function sn(e){if(e.devEngines&&typeof e.devEngines==`object`&&e.devEngines.packageManager){let t=Array.isArray(e.devEngines.packageManager)?e.devEngines.packageManager:[e.devEngines.packageManager];for(let e of t){let t=on(e);if(t)return t}}}function cn(e){if(e.packageJsonError){e.hasPackageJson&&zt(`Failed to detect package manager: ${e.packageJsonError}`);return}if(!e.packageJson)return;let t=e.packageJson;if(t.packageManager&&typeof t.packageManager==`string`){let e=t.packageManager.trim(),n=e.indexOf(`@`),r=(n===-1?e:e.slice(0,n)).trim(),i=r.toLowerCase();if(!Ht(i))throw Error(`Unsupported package manager '${r}'. Supported package managers are npm, pnpm, and bun.`);return{name:i,source:`packageManager`}}let n=sn(t);if(n)return{...n,source:`devEngines`}}function ln(e){let t=[];if(e.hasPnpmLock&&t.push({name:`pnpm`,file:`pnpm-lock.yaml`}),e.hasPackageLock&&t.push({name:`npm`,file:`package-lock.json`}),e.hasBunLock&&t.push({name:`bun`,file:`bun lockfile`}),t.length!==0){if(t.length>1){let n=t.map(e=>e.file).join(`, `);e.hasPackageJson&&zt(`Multiple conflicting lockfiles found (${n}). Selecting '${t[0].file}' (${t[0].name}) based on priority precedence.`)}return{name:t[0].name,source:`lockfile`}}}function un(e){return cn(e)||ln(e)||{name:`npm`,source:`default`}} +t.exports={WebsocketFrameSend:class{constructor(e){this.frameData=e}createFrame(e){let t=this.frameData,r=s(),i=t?.byteLength??0,a=i,o=6;i>n?(o+=8,a=127):i>125&&(o+=2,a=126);let c=Buffer.allocUnsafe(i+o);c[0]=c[1]=0,c[0]|=128,c[0]=(c[0]&240)+e,c[o-4]=r[0],c[o-3]=r[1],c[o-2]=r[2],c[o-1]=r[3],c[1]=a,a===126?c.writeUInt16BE(i,2):a===127&&(c[2]=c[3]=0,c.writeUIntBE(i,4,6)),c[1]|=128;for(let e=0;e{let{uid:n,states:r,sentCloseFrameState:i,emptyBuffer:a,opcodes:o}=et(),{kReadyState:s,kSentClose:c,kByteParser:l,kReceivedClose:u,kResponse:d}=tt(),{fireEvent:f,failWebsocketConnection:m,isClosing:h,isClosed:g,isEstablished:_,parseExtensions:v}=nt(),{channels:y}=k(),{CloseEvent:b}=$e(),{makeRequest:x}=Re(),{fetching:S}=ze(),{Headers:C,getHeadersList:w}=Fe(),{getDecodeSplit:T}=V(),{WebsocketFrameSend:E}=rt(),D;try{D=p(`node:crypto`)}catch{}function O(e,t,r,i,a,o){let s=e;s.protocol=e.protocol===`ws:`?`http:`:`https:`;let c=x({urlList:[s],client:r,serviceWorkers:`none`,referrer:`no-referrer`,mode:`websocket`,credentials:`include`,cache:`no-store`,redirect:`error`});o.headers&&(c.headersList=w(new C(o.headers)));let l=D.randomBytes(16).toString(`base64`);c.headersList.append(`sec-websocket-key`,l),c.headersList.append(`sec-websocket-version`,`13`);for(let e of t)c.headersList.append(`sec-websocket-protocol`,e);return c.headersList.append(`sec-websocket-extensions`,`permessage-deflate; client_max_window_bits`),S({request:c,useParallelQueue:!0,dispatcher:o.dispatcher,processResponse(e){if(e.type===`error`||e.status!==101){m(i,`Received network error or non-101 status code.`);return}if(t.length!==0&&!e.headersList.get(`Sec-WebSocket-Protocol`)){m(i,`Server did not respond with sent protocols.`);return}if(e.headersList.get(`Upgrade`)?.toLowerCase()!==`websocket`){m(i,`Server did not set Upgrade header to "websocket".`);return}if(e.headersList.get(`Connection`)?.toLowerCase()!==`upgrade`){m(i,`Server did not set Connection header to "upgrade".`);return}if(e.headersList.get(`Sec-WebSocket-Accept`)!==D.createHash(`sha1`).update(l+n).digest(`base64`)){m(i,`Incorrect hash received in Sec-WebSocket-Accept header.`);return}let r=e.headersList.get(`Sec-WebSocket-Extensions`),o;if(r!==null&&(o=v(r),!o.has(`permessage-deflate`))){m(i,`Sec-WebSocket-Extensions header does not match.`);return}let s=e.headersList.get(`Sec-WebSocket-Protocol`);if(s!==null){let e=T(`sec-websocket-protocol`,c.headersList);if(e===null||!e.includes(s)){m(i,`Protocol was not set in the opening handshake.`);return}}e.socket.on(`data`,j),e.socket.on(`close`,M),e.socket.on(`error`,N),y.open.hasSubscribers&&y.open.publish({address:e.socket.address(),protocol:s,extensions:r}),a(e,o)}})}function A(e,t,n,l){if(!(h(e)||g(e))){if(!_(e))m(e,`Connection was closed before it was established.`),e[s]=r.CLOSING;else if(e[c]===i.NOT_SENT){e[c]=i.PROCESSING;let u=new E;t!==void 0&&n===void 0?(u.frameData=Buffer.allocUnsafe(2),u.frameData.writeUInt16BE(t,0)):t!==void 0&&n!==void 0?(u.frameData=Buffer.allocUnsafe(2+l),u.frameData.writeUInt16BE(t,0),u.frameData.write(n,2,`utf-8`)):u.frameData=a,e[d].socket.write(u.createFrame(o.CLOSE)),e[c]=i.SENT,e[s]=r.CLOSING}else e[s]=r.CLOSING}}function j(e){this.ws[l].write(e)||this.pause()}function M(){let{ws:e}=this,{[d]:t}=e;t.socket.off(`data`,j),t.socket.off(`close`,M),t.socket.off(`error`,N);let n=e[c]===i.SENT&&e[u],a=1005,o=``,p=e[l].closingInfo;p&&!p.error?(a=p.code??1005,o=p.reason):e[u]||(a=1006),e[s]=r.CLOSED,f(`close`,e,(e,t)=>new b(e,t),{wasClean:n,code:a,reason:o}),y.close.hasSubscribers&&y.close.publish({websocket:e,code:a,reason:o})}function N(e){let{ws:t}=this;t[s]=r.CLOSING,y.socketError.hasSubscribers&&y.socketError.publish(e),this.destroy()}t.exports={establishWebSocketConnection:O,closeWebSocketConnection:A}})),at=/* @__PURE__ */ f(((e,t)=>{let{createInflateRaw:n,Z_DEFAULT_WINDOWBITS:r}=p(`node:zlib`),{isValidClientWindowBits:i}=nt(),{MessageSizeExceededError:a}=T(),o=Buffer.from([0,0,255,255]),s=Symbol(`kBuffer`),c=Symbol(`kLength`);t.exports={PerMessageDeflate:class{#e;#t={};#n=0;constructor(e,t){this.#t.serverNoContextTakeover=e.has(`server_no_context_takeover`),this.#t.serverMaxWindowBits=e.get(`server_max_window_bits`),this.#n=t.maxPayloadSize}decompress(e,t,l){if(!this.#e){let e=r;if(this.#t.serverMaxWindowBits){if(!i(this.#t.serverMaxWindowBits)){l(/* @__PURE__ */ Error(`Invalid server_max_window_bits`));return}e=Number.parseInt(this.#t.serverMaxWindowBits)}try{this.#e=n({windowBits:e})}catch(e){l(e);return}this.#e[s]=[],this.#e[c]=0,this.#e.on(`data`,e=>{this.#e[c]+=e.length,this.#n>0&&this.#e[c]>this.#n?(l(new a),this.#e.removeAllListeners(),this.#e.destroy(),this.#e=null):this.#e[s].push(e)}),this.#e.on(`error`,e=>{this.#e=null,l(e)})}this.#e.write(e),t&&this.#e.write(o),this.#e.flush(()=>{if(!this.#e)return;let e=Buffer.concat(this.#e[s],this.#e[c]);this.#e[s].length=0,this.#e[c]=0,l(null,e)})}}}})),ot=/* @__PURE__ */ f(((e,t)=>{let{Writable:n}=p(`node:stream`),r=p(`node:assert`),{parserStates:i,opcodes:a,states:o,emptyBuffer:s,sentCloseFrameState:c}=et(),{kReadyState:l,kSentClose:u,kResponse:d,kReceivedClose:f}=tt(),{channels:m}=k(),{isValidStatusCode:h,isValidOpcode:g,failWebsocketConnection:_,websocketMessageReceived:v,utf8Decode:y,isControlFrame:b,isTextBinaryFrame:x,isContinuationFrame:S}=nt(),{WebsocketFrameSend:C}=rt(),{closeWebSocketConnection:w}=it(),{PerMessageDeflate:E}=at(),{MessageSizeExceededError:D}=T();function O(e,t,n){w(e,t,n,Buffer.byteLength(n)),_(e,n)}t.exports={ByteParser:class extends n{#e=[];#t=0;#n=0;#r=!1;#i=i.INFO;#a={};#o=[];#s;#c;#l;constructor(e,t,n={}){super(),this.ws=e,this.#s=t??/* @__PURE__ */ new Map,this.#c=n.maxFragments??0,this.#l=n.maxPayloadSize??0,this.#s.has(`permessage-deflate`)&&this.#s.set(`permessage-deflate`,new E(t,n))}_write(e,t,n){this.#e.push(e),this.#n+=e.length,this.#r=!0,this.run(n)}#u(){return this.#l>0&&!b(this.#a.opcode)&&this.#a.payloadLength+this.#t>this.#l?(O(this.ws,1009,`Payload size exceeds maximum allowed size`),!1):!0}run(e){for(;this.#r;)if(this.#i===i.INFO){if(this.#n<2)return e();let t=this.consume(2),n=!!(t[0]&128),r=t[0]&15,o=(t[1]&128)==128,s=!n&&r!==a.CONTINUATION,c=t[1]&127,l=t[0]&64,u=t[0]&32,d=t[0]&16;if(!g(r))return _(this.ws,`Invalid opcode received`),e();if(o)return _(this.ws,`Frame cannot be masked`),e();if(l!==0&&!this.#s.has(`permessage-deflate`)){_(this.ws,`Expected RSV1 to be clear.`);return}if(u!==0||d!==0){_(this.ws,`RSV1, RSV2, RSV3 must be clear`);return}if(s&&!x(r)){_(this.ws,`Invalid frame type was fragmented.`);return}if(x(r)&&this.#o.length>0){_(this.ws,`Expected continuation frame`);return}if(this.#a.fragmented&&s){_(this.ws,`Fragmented frame exceeded 125 bytes.`);return}if((c>125||s)&&b(r)){_(this.ws,`Control frame either too large or fragmented`);return}if(S(r)&&this.#o.length===0&&!this.#a.compressed){_(this.ws,`Unexpected continuation frame`);return}if(c<=125){if(this.#a.payloadLength=c,this.#i=i.READ_DATA,!this.#u())return}else c===126?this.#i=i.PAYLOADLENGTH_16:c===127&&(this.#i=i.PAYLOADLENGTH_64);x(r)&&(this.#a.binaryType=r,this.#a.compressed=l!==0),this.#a.opcode=r,this.#a.masked=o,this.#a.fin=n,this.#a.fragmented=s}else if(this.#i===i.PAYLOADLENGTH_16){if(this.#n<2)return e();let t=this.consume(2);if(this.#a.payloadLength=t.readUInt16BE(0),this.#i=i.READ_DATA,!this.#u())return}else if(this.#i===i.PAYLOADLENGTH_64){if(this.#n<8)return e();let t=this.consume(8),n=t.readUInt32BE(0),r=t.readUInt32BE(4);if(n!==0||r>2**31-1){_(this.ws,`Received payload length > 2^31 bytes.`);return}if(this.#a.payloadLength=r,this.#i=i.READ_DATA,!this.#u())return}else if(this.#i===i.READ_DATA){if(this.#n{this.destroyed||(this.#r=!0,this.run(e))});return}}else if(this.#a.compressed){this.#s.get(`permessage-deflate`).decompress(t,this.#a.fin,(t,n)=>{if(t){let e=t instanceof D?1009:1007;O(this.ws,e,t.message)}else this.writeFragments(n)&&(this.#l>0&&this.#t>this.#l?O(this.ws,1009,new D().message):this.#a.fin?(v(this.ws,this.#a.binaryType,this.consumeFragments()),this.#r=!0,this.#i=i.INFO,this.run(e)):(this.#i=i.INFO,this.#r=!0,this.run(e)))}),this.#r=!1;break}else{if(!this.writeFragments(t))return;if(this.#l>0&&this.#t>this.#l){O(this.ws,1009,new D().message);return}!this.#a.fragmented&&this.#a.fin&&v(this.ws,this.#a.binaryType,this.consumeFragments()),this.#i=i.INFO}}}consume(e){if(e>this.#n)throw Error(`Called consume() before buffers satiated.`);if(e===0)return s;if(this.#e[0].length===e)return this.#n-=this.#e[0].length,this.#e.shift();let t=Buffer.allocUnsafe(e),n=0;for(;n!==e;){let r=this.#e[0],{length:i}=r;if(i+n===e){t.set(this.#e.shift(),n);break}if(i+n>e){t.set(r.subarray(0,e-n),n),this.#e[0]=r.subarray(e-n);break}t.set(this.#e.shift(),n),n+=r.length}return this.#n-=e,t}writeFragments(e){return this.#c>0&&this.#o.length===this.#c?(O(this.ws,1008,`Too many message fragments`),!1):(this.#t+=e.length,this.#o.push(e),!0)}consumeFragments(){let e=this.#o;if(e.length===1)return this.#t=0,e.shift();let t=Buffer.concat(e,this.#t);return this.#o=[],this.#t=0,t}parseCloseBody(e){r(e.length!==1);let t;if(e.length>=2&&(t=e.readUInt16BE(0)),t!==void 0&&!h(t))return{code:1002,reason:`Invalid status code`,error:!0};let n=e.subarray(2);n[0]===239&&n[1]===187&&n[2]===191&&(n=n.subarray(3));try{n=y(n)}catch{return{code:1007,reason:`Invalid UTF-8`,error:!0}}return{code:t,reason:n,error:!1}}parseControlFrame(e){let{opcode:t,payloadLength:n}=this.#a;if(t===a.CLOSE){if(n===1)return _(this.ws,`Received close frame with a 1-byte body.`),!1;if(this.#a.closeInfo=this.parseCloseBody(e),this.#a.closeInfo.error){let{code:e,reason:t}=this.#a.closeInfo;return w(this.ws,e,t,t.length),_(this.ws,t),!1}if(this.ws[u]!==c.SENT){let e=s;this.#a.closeInfo.code&&(e=Buffer.allocUnsafe(2),e.writeUInt16BE(this.#a.closeInfo.code,0));let t=new C(e);this.ws[d].socket.write(t.createFrame(a.CLOSE),e=>{e||(this.ws[u]=c.SENT)})}return this.ws[l]=o.CLOSING,this.ws[f]=!0,!1}if(t===a.PING){if(!this.ws[f]){let t=new C(e);this.ws[d].socket.write(t.createFrame(a.PONG)),m.ping.hasSubscribers&&m.ping.publish({payload:e})}}else t===a.PONG&&m.pong.hasSubscribers&&m.pong.publish({payload:e});return!0}get closingInfo(){return this.#a.closeInfo}}}})),st=/* @__PURE__ */ f(((e,t)=>{let{WebsocketFrameSend:n}=rt(),{opcodes:r,sendHints:i}=et(),a=q(),o=Buffer[Symbol.species];var s=class{#e=new a;#t=!1;#n;constructor(e){this.#n=e}add(e,t,n){if(n!==i.blob){let r=c(e,n);if(!this.#t)this.#n.write(r,t);else{let e={promise:null,callback:t,frame:r};this.#e.push(e)}return}let r={promise:e.arrayBuffer().then(e=>{r.promise=null,r.frame=c(e,n)}),callback:t,frame:null};this.#e.push(r),this.#t||this.#r()}async#r(){this.#t=!0;let e=this.#e;for(;!e.isEmpty();){let t=e.shift();t.promise!==null&&await t.promise,this.#n.write(t.frame,t.callback),t.callback=t.frame=null}this.#t=!1}};function c(e,t){return new n(l(e,t)).createFrame(t===i.string?r.TEXT:r.BINARY)}function l(e,t){switch(t){case i.string:return Buffer.from(e);case i.arrayBuffer:case i.blob:return new o(e);case i.typedArray:return new o(e.buffer,e.byteOffset,e.byteLength)}}t.exports={SendQueue:s}})),ct=/* @__PURE__ */ f(((e,t)=>{let{webidl:n}=B(),{URLSerializer:r}=z(),{environmentSettingsObject:i}=V(),{staticPropertyDescriptors:a,states:o,sentCloseFrameState:s,sendHints:c}=et(),{kWebSocketURL:l,kReadyState:u,kController:d,kBinaryType:f,kResponse:m,kSentClose:h,kByteParser:g}=tt(),{isConnecting:_,isEstablished:v,isClosing:y,isValidSubprotocol:b,fireEvent:x}=nt(),{establishWebSocketConnection:S,closeWebSocketConnection:C}=it(),{ByteParser:w}=ot(),{kEnumerableProperty:T,isBlobLike:E}=O(),{getGlobalDispatcher:D}=ke(),{types:k}=p(`node:util`),{ErrorEvent:A,CloseEvent:j}=$e(),{SendQueue:M}=st();var N=class e extends EventTarget{#e={open:null,error:null,close:null,message:null};#t=0;#n=``;#r=``;#i;constructor(t,r=[]){super(),n.util.markAsUncloneable(this);let a=`WebSocket constructor`;n.argumentLengthCheck(arguments,1,a);let o=n.converters[`DOMString or sequence or WebSocketInit`](r,a,`options`);t=n.converters.USVString(t,a,`url`),r=o.protocols;let c=i.settingsObject.baseUrl,p;try{p=new URL(t,c)}catch(e){throw new DOMException(e,`SyntaxError`)}if(p.protocol===`http:`?p.protocol=`ws:`:p.protocol===`https:`&&(p.protocol=`wss:`),p.protocol!==`ws:`&&p.protocol!==`wss:`)throw new DOMException(`Expected a ws: or wss: protocol, got ${p.protocol}`,`SyntaxError`);if(p.hash||p.href.endsWith(`#`))throw new DOMException(`Got fragment`,`SyntaxError`);if(typeof r==`string`&&(r=[r]),r.length!==new Set(r.map(e=>e.toLowerCase())).size||r.length>0&&!r.every(e=>b(e)))throw new DOMException(`Invalid Sec-WebSocket-Protocol value`,`SyntaxError`);this[l]=new URL(p.href);let m=i.settingsObject;this[d]=S(p,r,m,this,(e,t)=>this.#a(e,t),o),this[u]=e.CONNECTING,this[h]=s.NOT_SENT,this[f]=`blob`}close(t=void 0,r=void 0){n.brandCheck(this,e);let i=`WebSocket.close`;if(t!==void 0&&(t=n.converters[`unsigned short`](t,i,`code`,{clamp:!0})),r!==void 0&&(r=n.converters.USVString(r,i,`reason`)),t!==void 0&&t!==1e3&&(t<3e3||t>4999))throw new DOMException(`invalid code`,`InvalidAccessError`);let a=0;if(r!==void 0&&(a=Buffer.byteLength(r),a>123))throw new DOMException(`Reason must be less than 123 bytes; received ${a}`,`SyntaxError`);C(this,t,r,a)}send(t){n.brandCheck(this,e);let r=`WebSocket.send`;if(n.argumentLengthCheck(arguments,1,r),t=n.converters.WebSocketSendData(t,r,`data`),_(this))throw new DOMException(`Sent before connected.`,`InvalidStateError`);if(v(this)&&!y(this)){if(typeof t==`string`){let e=Buffer.byteLength(t);this.#t+=e,this.#i.add(t,()=>{this.#t-=e},c.string)}else k.isArrayBuffer(t)?(this.#t+=t.byteLength,this.#i.add(t,()=>{this.#t-=t.byteLength},c.arrayBuffer)):ArrayBuffer.isView(t)?(this.#t+=t.byteLength,this.#i.add(t,()=>{this.#t-=t.byteLength},c.typedArray)):E(t)&&(this.#t+=t.size,this.#i.add(t,()=>{this.#t-=t.size},c.blob))}}get readyState(){return n.brandCheck(this,e),this[u]}get bufferedAmount(){return n.brandCheck(this,e),this.#t}get url(){return n.brandCheck(this,e),r(this[l])}get extensions(){return n.brandCheck(this,e),this.#r}get protocol(){return n.brandCheck(this,e),this.#n}get onopen(){return n.brandCheck(this,e),this.#e.open}set onopen(t){n.brandCheck(this,e),this.#e.open&&this.removeEventListener(`open`,this.#e.open),typeof t==`function`?(this.#e.open=t,this.addEventListener(`open`,t)):this.#e.open=null}get onerror(){return n.brandCheck(this,e),this.#e.error}set onerror(t){n.brandCheck(this,e),this.#e.error&&this.removeEventListener(`error`,this.#e.error),typeof t==`function`?(this.#e.error=t,this.addEventListener(`error`,t)):this.#e.error=null}get onclose(){return n.brandCheck(this,e),this.#e.close}set onclose(t){n.brandCheck(this,e),this.#e.close&&this.removeEventListener(`close`,this.#e.close),typeof t==`function`?(this.#e.close=t,this.addEventListener(`close`,t)):this.#e.close=null}get onmessage(){return n.brandCheck(this,e),this.#e.message}set onmessage(t){n.brandCheck(this,e),this.#e.message&&this.removeEventListener(`message`,this.#e.message),typeof t==`function`?(this.#e.message=t,this.addEventListener(`message`,t)):this.#e.message=null}get binaryType(){return n.brandCheck(this,e),this[f]}set binaryType(t){n.brandCheck(this,e),t!==`blob`&&t!==`arraybuffer`?this[f]=`blob`:this[f]=t}#a(e,t){this[m]=e;let n=this[d]?.dispatcher?.webSocketOptions,r=n?.maxFragments,i=n?.maxPayloadSize,a=new w(this,t,{maxFragments:r,maxPayloadSize:i});a.on(`drain`,P),a.on(`error`,F.bind(this)),e.socket.ws=this,this[g]=a,this.#i=new M(e.socket),this[u]=o.OPEN;let s=e.headersList.get(`sec-websocket-extensions`);s!==null&&(this.#r=s);let c=e.headersList.get(`sec-websocket-protocol`);c!==null&&(this.#n=c),x(`open`,this)}};N.CONNECTING=N.prototype.CONNECTING=o.CONNECTING,N.OPEN=N.prototype.OPEN=o.OPEN,N.CLOSING=N.prototype.CLOSING=o.CLOSING,N.CLOSED=N.prototype.CLOSED=o.CLOSED,Object.defineProperties(N.prototype,{CONNECTING:a,OPEN:a,CLOSING:a,CLOSED:a,url:T,readyState:T,bufferedAmount:T,onopen:T,onerror:T,onclose:T,close:T,onmessage:T,binaryType:T,send:T,extensions:T,protocol:T,[Symbol.toStringTag]:{value:`WebSocket`,writable:!1,enumerable:!1,configurable:!0}}),Object.defineProperties(N,{CONNECTING:a,OPEN:a,CLOSING:a,CLOSED:a}),n.converters[`sequence`]=n.sequenceConverter(n.converters.DOMString),n.converters[`DOMString or sequence`]=function(e,t,r){return n.util.Type(e)===`Object`&&Symbol.iterator in e?n.converters[`sequence`](e):n.converters.DOMString(e,t,r)},n.converters.WebSocketInit=n.dictionaryConverter([{key:`protocols`,converter:n.converters[`DOMString or sequence`],defaultValue:()=>[]},{key:`dispatcher`,converter:n.converters.any,defaultValue:()=>D()},{key:`headers`,converter:n.nullableConverter(n.converters.HeadersInit)}]),n.converters[`DOMString or sequence or WebSocketInit`]=function(e){return n.util.Type(e)===`Object`&&!(Symbol.iterator in e)?n.converters.WebSocketInit(e):{protocols:n.converters[`DOMString or sequence`](e)}},n.converters.WebSocketSendData=function(e){if(n.util.Type(e)===`Object`){if(E(e))return n.converters.Blob(e,{strict:!1});if(ArrayBuffer.isView(e)||k.isArrayBuffer(e))return n.converters.BufferSource(e)}return n.converters.USVString(e)};function P(){this.ws[m].socket.resume()}function F(e){let t,n;e instanceof j?(t=e.reason,n=e.code):t=e.message,x(`error`,this,()=>new A(`error`,{error:e,message:t})),C(this,n)}t.exports={WebSocket:N}})),lt=/* @__PURE__ */ f(((e,t)=>{function n(e){return e.indexOf(`\0`)===-1}function r(e){if(e.length===0)return!1;for(let t=0;t57)return!1;return!0}function i(e){return new Promise(t=>{setTimeout(t,e).unref()})}t.exports={isValidLastEventId:n,isASCIINumber:r,delay:i}})),ut=/* @__PURE__ */ f(((e,t)=>{let n=p(`node:buffer`),{Transform:r}=p(`node:stream`),{isASCIINumber:i,isValidLastEventId:a}=lt(),o=[239,187,191],s=n.kStringMaxLength,c=Buffer.from(`data`),l=Buffer.from(`event`),u=Buffer.from(`id`),d=Buffer.from(`retry`);function f(e,t){if(t>=e.length)return!1;for(let n=t;n57)return!1;return!0}function m(e,t){for(let n=t;n0?Math.min(131072,Math.max(1024,Math.floor(this.maxEventSize/128))):0;this.maxDataLines=t,this.maxBufferedChunks=t,e.push&&(this.push=e.push)}_transform(e,t,n){if(e.length===0)n();else if(this.maxEventSize>0&&this.chunks.length>=this.maxBufferedChunks&&e[0]!==10&&e[0]!==13)n(g());else if(this.chunks.push(e),this.checkBOM&&this.handleBOM())n();else{for(;this.hasCurrentByte();){let e=this.currentByte();if(this.eventEndCheck){if(this.crlfCheck){if(e===10){this.crlfCheck=!1,this.consumeCurrentByte();continue}this.crlfCheck=!1}if(e===10||e===13){e===13&&(this.crlfCheck=!0),this.consumeCurrentByte(),this.hasPendingEvent()&&this.processEvent(this.event),this.clearEvent();continue}this.eventEndCheck=!1}else if(e===10||e===13){e===13&&(this.crlfCheck=!0);try{this.parseLine(this.readLine(),this.event)}catch(e){n(e);return}this.consumeCurrentByte(),this.eventEndCheck=!0}else{if(this.maxEventSize>0&&++this.lineLength>this.maxEventSize+7){n(g());return}this.advanceCursor()}}n()}}_destroy(e,t){this.chunks.length=0,this.clearEvent(),super._destroy(e,t)}parseLine(e,t){if(e.length===0)return;let n=e.indexOf(58);if(n===0)return;let r=e.length,i=e.length;if(n!==-1&&(r=n,i=n+1,e[i]===32&&++i),h(e,r,c)){if(this.maxEventSize>0&&this.dataLineCount>=this.maxDataLines)throw g();let n=e.length-i,r=this.eventFieldSizes.data+(t.data===void 0?0:1)+n;this.setEventFieldSize(`data`,r);let a=e.toString(`utf8`,i);t.data===void 0?t.data=a:t.data+=`\n${a}`,this.dataLineCount++}else h(e,r,d)?f(e,i)&&(this.setEventFieldSize(`retry`,e.length-i),t.retry=e.toString(`utf8`,i)):h(e,r,u)?m(e,i)&&(this.setEventFieldSize(`id`,e.length-i),t.id=e.toString(`utf8`,i)):h(e,r,l)&&i0&&n>this.maxEventSize)throw g();this.eventSize=n,this.eventFieldSizes[e]=t}processEvent(e){e.retry&&i(e.retry)&&(this.state.reconnectionTime=parseInt(e.retry,10)),e.id&&a(e.id)&&(this.state.lastEventId=e.id),e.data!==void 0&&this.push({type:e.event||`message`,options:{data:e.data,lastEventId:this.state.lastEventId,origin:this.state.origin}})}clearEvent(){this.event.data=void 0,this.event.event=void 0,this.event.id=void 0,this.event.retry=void 0,this.eventSize=0,this.dataLineCount=0,this.eventFieldSizes.data=0,this.eventFieldSizes.event=0,this.eventFieldSizes.id=0,this.eventFieldSizes.retry=0}hasPendingEvent(){return this.event.data!==void 0||this.event.event!==void 0||this.event.id!==void 0||this.event.retry!==void 0}hasCurrentByte(){return this.chunkIndex=this.chunks[this.chunkIndex].length;)this.chunkIndex++,this.pos=0}syncLineStartToCursor(){this.lineChunkIndex=this.chunkIndex,this.linePos=this.pos,this.lineLength=0,this.dropConsumedChunks()}dropConsumedChunks(){if(this.lineChunkIndex>0){let e=this.lineChunkIndex;this.chunks.splice(0,e),this.lineChunkIndex=0,this.chunkIndex-=e}this.chunkIndex===this.chunks.length&&(this.chunks.length=0,this.chunkIndex=0,this.pos=0,this.lineChunkIndex=0,this.linePos=0)}readLine(){if(this.lineChunkIndex===this.chunkIndex)return this.chunks[this.chunkIndex].subarray(this.linePos,this.pos);let e=[],t=0;for(let n=this.lineChunkIndex;n<=this.chunkIndex;n++){let r=this.chunks[n],i=n===this.lineChunkIndex?this.linePos:0,a=n===this.chunkIndex?this.pos:r.length,o=r.subarray(i,a);t+=o.length,e.push(o)}return Buffer.concat(e,t)}peekBufferedByte(e){let t=this.lineChunkIndex,n=this.linePos;for(;t0&&this.lineChunkIndex{let{pipeline:n}=p(`node:stream`),{fetching:r}=ze(),{makeRequest:i}=Re(),{webidl:a}=B(),{EventSourceStream:o}=ut(),{parseMIMEType:s}=z(),{createFastMessageEvent:c}=$e(),{isNetworkError:l}=Ie(),{delay:u}=lt(),{kEnumerableProperty:d}=O(),{environmentSettingsObject:f}=V(),{getGlobalDispatcher:m}=ke(),h=!1,g=3e3;var _=class e extends EventTarget{#e={open:null,error:null,message:null};#t=null;#n=!1;#r=0;#i=null;#a=null;#o;#s;constructor(e,t={}){super(),a.util.markAsUncloneable(this);let n=`EventSource constructor`;a.argumentLengthCheck(arguments,1,n),h||(h=!0,process.emitWarning(`EventSource is experimental, expect them to change at any time.`,{code:`UNDICI-ES`})),e=a.converters.USVString(e,n,`url`),t=a.converters.EventSourceInitDict(t,n,`eventSourceInitDict`),this.#o=t.dispatcher,this.#s={lastEventId:``,reconnectionTime:g};let r=f,o;try{o=new URL(e,r.settingsObject.baseUrl),this.#s.origin=o.origin}catch(e){throw new DOMException(e,`SyntaxError`)}this.#t=o.href;let s=`anonymous`;t.withCredentials&&(s=`use-credentials`,this.#n=!0);let c={redirect:`follow`,keepalive:!0,mode:`cors`,credentials:s===`anonymous`?`same-origin`:`omit`,referrer:`no-referrer`};c.client=f.settingsObject,c.headersList=[[`accept`,{name:`accept`,value:`text/event-stream`}]],c.cache=`no-store`,c.initiator=`other`,c.urlList=[new URL(this.#t)],this.#i=i(c),this.#c()}get readyState(){return this.#r}get url(){return this.#t}get withCredentials(){return this.#n}#c(){if(this.#r===2)return;this.#r=0;let e={request:this.#i,dispatcher:this.#o};e.processResponseEndOfBody=e=>{l(e)&&(this.dispatchEvent(new Event(`error`)),this.close()),this.#l()},e.processResponse=e=>{if(l(e)){if(e.aborted){this.close(),this.dispatchEvent(new Event(`error`));return}this.#l();return}let t=e.headersList.get(`content-type`,!0),r=t===null?`failure`:s(t),i=r!==`failure`&&r.essence===`text/event-stream`;if(e.status!==200||i===!1){this.close(),this.dispatchEvent(new Event(`error`));return}this.#r=1,this.dispatchEvent(new Event(`open`)),this.#s.origin=e.urlList[e.urlList.length-1].origin;let a=new o({eventSourceSettings:this.#s,maxEventSize:this.#o.eventSourceOptions?.maxEventSize,push:e=>{this.dispatchEvent(c(e.type,e.options))}});n(e.body.stream,a,e=>{e?.aborted===!1&&(this.close(),this.dispatchEvent(new Event(`error`)))})},this.#a=r(e)}async#l(){this.#r!==2&&(this.#r=0,this.dispatchEvent(new Event(`error`)),await u(this.#s.reconnectionTime),this.#r===0&&(this.#s.lastEventId.length&&this.#i.headersList.set(`last-event-id`,this.#s.lastEventId,!0),this.#c()))}close(){a.brandCheck(this,e),this.#r!==2&&(this.#r=2,this.#a.abort(),this.#i=null)}get onopen(){return this.#e.open}set onopen(e){this.#e.open&&this.removeEventListener(`open`,this.#e.open),typeof e==`function`?(this.#e.open=e,this.addEventListener(`open`,e)):this.#e.open=null}get onmessage(){return this.#e.message}set onmessage(e){this.#e.message&&this.removeEventListener(`message`,this.#e.message),typeof e==`function`?(this.#e.message=e,this.addEventListener(`message`,e)):this.#e.message=null}get onerror(){return this.#e.error}set onerror(e){this.#e.error&&this.removeEventListener(`error`,this.#e.error),typeof e==`function`?(this.#e.error=e,this.addEventListener(`error`,e)):this.#e.error=null}};let v={CONNECTING:{__proto__:null,configurable:!1,enumerable:!0,value:0,writable:!1},OPEN:{__proto__:null,configurable:!1,enumerable:!0,value:1,writable:!1},CLOSED:{__proto__:null,configurable:!1,enumerable:!0,value:2,writable:!1}};Object.defineProperties(_,v),Object.defineProperties(_.prototype,v),Object.defineProperties(_.prototype,{close:d,onerror:d,onmessage:d,onopen:d,readyState:d,url:d,withCredentials:d}),a.converters.EventSourceInitDict=a.dictionaryConverter([{key:`withCredentials`,converter:a.converters.boolean,defaultValue:()=>!1},{key:`dispatcher`,converter:a.converters.any,defaultValue:()=>m()}]),t.exports={EventSource:_,defaultReconnectionTime:g}})),ft=/* @__PURE__ */ f(((e,t)=>{let n=K(),r=j(),i=ce(),a=Y(),o=le(),s=ue(),c=X(),l=fe(),u=T(),d=O(),{InvalidArgumentError:f}=u,m=be(),h=P(),g=we(),_=Oe(),v=Te(),y=Q(),b=de(),{getGlobalDispatcher:x,setGlobalDispatcher:S}=ke(),C=Ae(),w=W(),E=G();Object.assign(r.prototype,m),t.exports.Dispatcher=r,t.exports.Client=n,t.exports.Pool=i,t.exports.BalancedPool=a,t.exports.Agent=o,t.exports.ProxyAgent=s,t.exports.EnvHttpProxyAgent=c,t.exports.RetryAgent=l,t.exports.RetryHandler=b,t.exports.DecoratorHandler=C,t.exports.RedirectHandler=w,t.exports.createRedirectInterceptor=E,t.exports.interceptors={redirect:je(),retry:Me(),dump:Ne(),dns:Pe()},t.exports.buildConnector=h,t.exports.errors=u,t.exports.util={parseHeaders:d.parseHeaders,headerNameToString:d.headerNameToString};function D(e){return(t,n,r)=>{if(typeof n==`function`&&(r=n,n=null),!t||typeof t!=`string`&&typeof t!=`object`&&!(t instanceof URL))throw new f(`invalid url`);if(n!=null&&typeof n!=`object`)throw new f(`invalid opts`);if(n&&n.path!=null){if(typeof n.path!=`string`)throw new f(`invalid opts.path`);let e=n.path;n.path.startsWith(`/`)||(e=`/${e}`),t=new URL(d.parseOrigin(t).origin+e)}else n||=typeof t==`object`?t:{},t=d.parseURL(t);let{agent:i,dispatcher:a=x()}=n;if(i)throw new f(`unsupported opts.agent. Did you mean opts.client?`);return e.call(a,{...n,origin:t.origin,path:t.search?`${t.pathname}${t.search}`:t.pathname,method:n.method||(n.body?`PUT`:`GET`)},r)}}t.exports.setGlobalDispatcher=S,t.exports.getGlobalDispatcher=x;let k=ze().fetch;t.exports.fetch=async function(e,t=void 0){try{return await k(e,t)}catch(e){throw e&&typeof e==`object`&&Error.captureStackTrace(e),e}},t.exports.Headers=Fe().Headers,t.exports.Response=Ie().Response,t.exports.Request=Re().Request,t.exports.FormData=re().FormData,t.exports.File=globalThis.File??p(`node:buffer`).File,t.exports.FileReader=We().FileReader;let{setGlobalOrigin:A,getGlobalOrigin:M}=R();t.exports.setGlobalOrigin=A,t.exports.getGlobalOrigin=M;let{CacheStorage:N}=Je(),{kConstruct:F}=Ge();t.exports.caches=new N(F);let{deleteCookie:I,getCookies:L,getSetCookies:ee,setCookie:te}=Qe();t.exports.deleteCookie=I,t.exports.getCookies=L,t.exports.getSetCookies=ee,t.exports.setCookie=te;let{parseMIMEType:B,serializeAMimeType:V}=z();t.exports.parseMIMEType=B,t.exports.serializeAMimeType=V;let{CloseEvent:H,ErrorEvent:ne,MessageEvent:U}=$e();t.exports.WebSocket=ct().WebSocket,t.exports.CloseEvent=H,t.exports.ErrorEvent=ne,t.exports.MessageEvent=U,t.exports.request=D(m.request),t.exports.stream=D(m.stream),t.exports.pipeline=D(m.pipeline),t.exports.connect=D(m.connect),t.exports.upgrade=D(m.upgrade),t.exports.MockClient=g,t.exports.MockPool=v,t.exports.MockAgent=_,t.exports.mockErrors=y;let{EventSource:ie}=dt();t.exports.EventSource=ie}));C(),ft();var pt;(function(e){e[e.OK=200]=`OK`,e[e.MultipleChoices=300]=`MultipleChoices`,e[e.MovedPermanently=301]=`MovedPermanently`,e[e.ResourceMoved=302]=`ResourceMoved`,e[e.SeeOther=303]=`SeeOther`,e[e.NotModified=304]=`NotModified`,e[e.UseProxy=305]=`UseProxy`,e[e.SwitchProxy=306]=`SwitchProxy`,e[e.TemporaryRedirect=307]=`TemporaryRedirect`,e[e.PermanentRedirect=308]=`PermanentRedirect`,e[e.BadRequest=400]=`BadRequest`,e[e.Unauthorized=401]=`Unauthorized`,e[e.PaymentRequired=402]=`PaymentRequired`,e[e.Forbidden=403]=`Forbidden`,e[e.NotFound=404]=`NotFound`,e[e.MethodNotAllowed=405]=`MethodNotAllowed`,e[e.NotAcceptable=406]=`NotAcceptable`,e[e.ProxyAuthenticationRequired=407]=`ProxyAuthenticationRequired`,e[e.RequestTimeout=408]=`RequestTimeout`,e[e.Conflict=409]=`Conflict`,e[e.Gone=410]=`Gone`,e[e.TooManyRequests=429]=`TooManyRequests`,e[e.InternalServerError=500]=`InternalServerError`,e[e.NotImplemented=501]=`NotImplemented`,e[e.BadGateway=502]=`BadGateway`,e[e.ServiceUnavailable=503]=`ServiceUnavailable`,e[e.GatewayTimeout=504]=`GatewayTimeout`})(pt||={});var mt;(function(e){e.Accept=`accept`,e.ContentType=`content-type`})(mt||={});var ht;(function(e){e.ApplicationJson=`application/json`})(ht||={}),pt.MovedPermanently,pt.ResourceMoved,pt.SeeOther,pt.TemporaryRedirect,pt.PermanentRedirect,pt.BadGateway,pt.ServiceUnavailable,pt.GatewayTimeout;var gt=function(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})};const{access:_t,appendFile:vt,writeFile:yt}=s,bt=`GITHUB_STEP_SUMMARY`;new class{constructor(){this._buffer=``}filePath(){return gt(this,void 0,void 0,function*(){if(this._filePath)return this._filePath;let e=process.env[bt];if(!e)throw Error(`Unable to find environment variable for $${bt}. Check if your runtime environment supports job summaries.`);try{yield _t(e,o.R_OK|o.W_OK)}catch{throw Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}return this._filePath=e,this._filePath})}wrap(e,t,n={}){let r=Object.entries(n).map(([e,t])=>` ${e}="${t}"`).join(``);return t?`<${e}${r}>${t}`:`<${e}${r}>`}write(e){return gt(this,void 0,void 0,function*(){let t=!!e?.overwrite,n=yield this.filePath();return yield(t?yt:vt)(n,this._buffer,{encoding:`utf8`}),this.emptyBuffer()})}clear(){return gt(this,void 0,void 0,function*(){return this.emptyBuffer().write({overwrite:!0})})}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){return this._buffer=``,this}addRaw(e,t=!1){return this._buffer+=e,t?this.addEOL():this}addEOL(){return this.addRaw(r)}addCodeBlock(e,t){let n=Object.assign({},t&&{lang:t}),r=this.wrap(`pre`,this.wrap(`code`,e),n);return this.addRaw(r).addEOL()}addList(e,t=!1){let n=t?`ol`:`ul`,r=e.map(e=>this.wrap(`li`,e)).join(``),i=this.wrap(n,r);return this.addRaw(i).addEOL()}addTable(e){let t=e.map(e=>{let t=e.map(e=>{if(typeof e==`string`)return this.wrap(`td`,e);let{header:t,data:n,colspan:r,rowspan:i}=e,a=t?`th`:`td`,o=Object.assign(Object.assign({},r&&{colspan:r}),i&&{rowspan:i});return this.wrap(a,n,o)}).join(``);return this.wrap(`tr`,t)}).join(``),n=this.wrap(`table`,t);return this.addRaw(n).addEOL()}addDetails(e,t){let n=this.wrap(`details`,this.wrap(`summary`,e)+t);return this.addRaw(n).addEOL()}addImage(e,t,n){let{width:r,height:i}=n||{},a=Object.assign(Object.assign({},r&&{width:r}),i&&{height:i}),o=this.wrap(`img`,null,Object.assign({src:e,alt:t},a));return this.addRaw(o).addEOL()}addHeading(e,t){let n=`h${t}`,r=[`h1`,`h2`,`h3`,`h4`,`h5`,`h6`].includes(n)?n:`h1`,i=this.wrap(r,e);return this.addRaw(i).addEOL()}addSeparator(){let e=this.wrap(`hr`,null);return this.addRaw(e).addEOL()}addBreak(){let e=this.wrap(`br`,null);return this.addRaw(e).addEOL()}addQuote(e,t){let n=Object.assign({},t&&{cite:t}),r=this.wrap(`blockquote`,e,n);return this.addRaw(r).addEOL()}addLink(e,t){let n=this.wrap(`a`,e,{href:t});return this.addRaw(n).addEOL()}};const{chmod:xt,copyFile:St,lstat:Ct,mkdir:wt,open:Tt,readdir:Et,rename:Dt,rm:Ot,rmdir:kt,stat:At,symlink:jt,unlink:Mt}=a.promises;process.platform,a.constants.O_RDONLY,process.platform,c.EventEmitter,c.EventEmitter,n.platform(),n.arch();var Nt;(function(e){e[e.Success=0]=`Success`,e[e.Failure=1]=`Failure`})(Nt||={});function Pt(e,t){let n=process.env[`INPUT_${e.replace(/ /g,`_`).toUpperCase()}`]||``;if(t&&t.required&&!n)throw Error(`Input required and not supplied: ${e}`);return t&&t.trimWhitespace===!1?n:n.trim()}function Ft(e,n){if(process.env.GITHUB_OUTPUT)return b(`OUTPUT`,x(e,n));process.stdout.write(t.EOL),g(`set-output`,{name:e},m(n))}function It(e){process.exitCode=Nt.Failure,Lt(e)}function Lt(e,t={}){g(`error`,h(t),e instanceof Error?e.toString():e)}function Rt(e,t={}){g(`warning`,h(t),e instanceof Error?e.toString():e)}function zt(e){process.stdout.write(e+t.EOL)}function Bt(e){return e===`node`||e===`bun`}function Vt(e){return e===`npm`||e===`pnpm`||e===`bun`}function Ht(e,t){if(!Bt(e))throw Error(`Unsupported runtime "${e}". Supported runtimes are: node, bun.`);if(!Vt(t))throw Error(`Unsupported package manager "${t}". Supported package managers are: npm, pnpm, bun.`);if(e===`bun`&&t===`npm`)throw Error(`Unsupported runtime and package manager combination: Bun runtime does not support npm package manager. Bun runtime requires Bun or pnpm package manager.`)}function Ut(e,t){if(!e?.devEngines||typeof e.devEngines!=`object`)return!1;let n=e.devEngines;if(n[t]!==void 0&&n[t]!==null)return!0;if(n.runtime){let e=Array.isArray(n.runtime)?n.runtime:[n.runtime];for(let n of e)if(typeof n==`string`){let e=n.trim().toLowerCase();if(e===t||e.startsWith(`${t}@`)||e.startsWith(`${t}:`)||e.startsWith(`${t} `))return!0}else if(typeof n==`object`&&n){let e=n.name;if(typeof e==`string`&&e.trim().toLowerCase()===t)return!0}}return!1}function Wt(e,t){let n=t?.packageJson;return{hasBunPm:e.name===`bun`,hasBunVersionFile:!!t?.hasBunVersionFile,hasNodeVersionFile:!!t?.hasNodeVersionFile,hasBunDevEngine:Ut(n,`bun`),hasNodeDevEngine:Ut(n,`node`),nodeFileVersionFile:t?.nodeFileVersionFile}}function Gt(e){let{hasBunPm:t,hasBunVersionFile:n,hasNodeVersionFile:r,hasBunDevEngine:i,hasNodeDevEngine:a,nodeFileVersionFile:o}=e;if(i&&a)throw Error(`Conflicting runtime configuration in package.json devEngines: both Node.js and Bun runtimes are specified.`);if(t){if(a)throw Error(`Conflicting runtime configuration: packageManager indicates Bun but package.json devEngines specifies Node.js runtime.`);if(r)throw Error(`Conflicting runtime configuration: packageManager indicates Bun but Node.js version file (${o||`.nvmrc / .node-version`}) specifies Node.js runtime.`)}if(n&&r&&!i&&!a)throw Error(`Conflicting runtime version files detected: found both .bun-version and Node.js version file (${o||`.nvmrc / .node-version`}).`);if(n&&a)throw Error(`Conflicting runtime configuration: found .bun-version file but package.json devEngines specifies Node.js runtime.`);if(r&&i)throw Error(`Conflicting runtime configuration: found Node.js version file (${o||`.nvmrc / .node-version`}) but package.json devEngines specifies Bun runtime.`)}function Kt(e,t){if(!(t?.hasPackageJson||t?.hasPnpmLock||t?.hasPackageLock||t?.hasBunLock))return`node`;let n=Wt(e,t);return Gt(n),n.hasBunDevEngine?`bun`:n.hasNodeDevEngine?`node`:n.hasBunVersionFile?`bun`:n.hasNodeVersionFile?`node`:n.hasBunPm?`bun`:`node`}function qt(e){let t=e.toLowerCase();return t===`vite-plus`||t===`@voidzero-dev/vite-plus`||t===`@voidzero-dev/vite-plus-core`||t.startsWith(`@voidzero-dev/vite-plus-`)}function Jt(e){if(typeof e!=`string`)return!1;let t=e.toLowerCase();return t.includes(`@voidzero-dev/vite-plus`)||t.includes(`vite-plus-core`)}function Yt(e){if(!e||typeof e!=`object`)return!1;for(let[t,n]of Object.entries(e))if(typeof t==`string`&&(qt(t)||Jt(n)))return!0;return!1}function Xt(e){let t=e.catalog||e.catalogs;if(!t||typeof t!=`object`)return!1;let n=Array.isArray(t)?t:Object.values(t);for(let e of n)if(e&&typeof e==`object`){for(let t of Object.keys(e))if(typeof t==`string`&&qt(t))return!0}return!1}function Zt(e){if(!e)return!1;let t=[e.dependencies,e.devDependencies,e.optionalDependencies,e.peerDependencies];for(let e of t)if(Yt(e))return!0;return Xt(e)}function Qt(e,t){if(e){let t=e.trim().toLowerCase();if(t&&t!==`auto`){if(t===`vite-plus`)return`vite-plus`;throw Error(`Invalid toolchain input: unsupported value. Supported values are "auto" or "vite-plus".`)}}if(t?.packageJson&&Zt(t.packageJson))return`vite-plus`}function $t(e,t=process.cwd()){let n=rn(t),r=ln(n),i=Kt(r,n),a=Qt(e,n);return{detected:n.hasPackageJson,runtime:{name:i},packageManager:{name:r.name},toolchain:a}}function en(e,t){return t===process.cwd()?e:d.join(t,e)}function tn(e){let t=en(`package.json`,e);if(!u.existsSync(t))return{hasPackageJson:!1};let n;try{n=u.readFileSync(t,`utf8`)}catch(e){return{hasPackageJson:!0,packageJsonError:`Failed to read package.json: ${e instanceof Error?e.message:String(e)}`,packageJsonErrorType:`read`,packageJsonErrorCause:e}}try{return{hasPackageJson:!0,packageJson:JSON.parse(n)}}catch(e){return{hasPackageJson:!0,packageJsonError:`Failed to parse package.json: ${e instanceof Error?e.message:String(e)}`,packageJsonErrorType:`parse`,packageJsonErrorCause:e}}}function nn(e){let t=!1,n=!1,r=!1;try{t=u.existsSync(en(`pnpm-lock.yaml`,e)),n=u.existsSync(en(`package-lock.json`,e)),r=u.existsSync(en(`bun.lock`,e))}catch{}return{hasPnpmLock:t,hasPackageLock:n,hasBunLock:r}}function rn(e=process.cwd()){let t=tn(e),n=nn(e),r=u.existsSync(en(`.bun-version`,e)),i=u.existsSync(en(`.nvmrc`,e)),a=u.existsSync(en(`.node-version`,e)),o=i||a,s=i?`.nvmrc`:a?`.node-version`:void 0;return{hasPackageJson:t.hasPackageJson,packageJson:t.packageJson,packageJsonError:t.packageJsonError,packageJsonErrorType:t.packageJsonErrorType,packageJsonErrorCause:t.packageJsonErrorCause,hasBunVersionFile:r,hasNodeVersionFile:o,nodeFileVersionFile:s,hasPnpmLock:n.hasPnpmLock,hasPackageLock:n.hasPackageLock,hasBunLock:n.hasBunLock}}function an(e){if(typeof e==`string`){let t=e.trim();if(!t)return;let n=t.indexOf(`@`),r=(n===-1?t:t.slice(0,n)).trim().toLowerCase();if(Vt(r))return{name:r}}else if(typeof e==`object`&&e){let t=e;if(typeof t.name==`string`||typeof t.name==`number`){let e=String(t.name).trim().toLowerCase();if(Vt(e))return{name:e}}}}function on(e){if(e.devEngines&&typeof e.devEngines==`object`&&e.devEngines.packageManager){let t=Array.isArray(e.devEngines.packageManager)?e.devEngines.packageManager:[e.devEngines.packageManager];for(let e of t){let t=an(e);if(t)return t}}}function sn(e){if(e.packageJsonError){e.hasPackageJson&&Rt(`Failed to detect package manager: ${e.packageJsonError}`);return}if(!e.packageJson)return;let t=e.packageJson;if(t.packageManager&&typeof t.packageManager==`string`){let e=t.packageManager.trim(),n=e.indexOf(`@`),r=(n===-1?e:e.slice(0,n)).trim(),i=r.toLowerCase();if(!Vt(i))throw Error(`Unsupported package manager '${r}'. Supported package managers are npm, pnpm, and bun.`);return{name:i,source:`packageManager`}}let n=on(t);if(n)return{...n,source:`devEngines`}}function cn(e){let t=[];if(e.hasPnpmLock&&t.push({name:`pnpm`,file:`pnpm-lock.yaml`}),e.hasPackageLock&&t.push({name:`npm`,file:`package-lock.json`}),e.hasBunLock&&t.push({name:`bun`,file:`bun lockfile`}),t.length!==0){if(t.length>1){let n=t.map(e=>e.file).join(`, `);e.hasPackageJson&&Rt(`Multiple conflicting lockfiles found (${n}). Selecting '${t[0].file}' (${t[0].name}) based on priority precedence.`)}return{name:t[0].name,source:`lockfile`}}}function ln(e){return sn(e)||cn(e)||{name:`npm`,source:`default`}} /*! * Copyright (c) Squirrel Chat et al., All rights reserved. * SPDX-License-Identifier: BSD-3-Clause @@ -69,9 +69,9 @@ t.exports={WebsocketFrameSend:class{constructor(e){this.frameData=e}createFrame( * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -function dn(e,t){let n=e.slice(0,t).split(/\r?\n/);return[n.length,n.pop().length+1]}function fn(e,t,n){let r=e.split(/\r?\n/),i=``,a=(Math.log10(t+1)|0)+1;for(let e=t-1;e<=t+1;e++){let o=r[e-1];o&&(i+=e.toString().padEnd(a,` `),i+=`: `,i+=o,i+=` +function un(e,t){let n=e.slice(0,t).split(/\r?\n/);return[n.length,n.pop().length+1]}function dn(e,t,n){let r=e.split(/\r?\n/),i=``,a=(Math.log10(t+1)|0)+1;for(let e=t-1;e<=t+1;e++){let o=r[e-1];o&&(i+=e.toString().padEnd(a,` `),i+=`: `,i+=o,i+=` `,e===t&&(i+=` `.repeat(a+n+2),i+=`^ -`))}return i}var Q=class e extends Error{line;column;codeblock;constructor(e,t){let[n,r]=dn(t.toml,t.ptr),i=fn(t.toml,n,r);super(`Invalid TOML document: ${e}\n\n${i}`,t),this.line=n,this.column=r,this.codeblock=i}static x(t,n,r){throw new e(t,{toml:n.s,ptr:r??n.p})}}; +`))}return i}var $=class e extends Error{line;column;codeblock;constructor(e,t){let[n,r]=un(t.toml,t.ptr),i=dn(t.toml,n,r);super(`Invalid TOML document: ${e}\n\n${i}`,t),this.line=n,this.column=r,this.codeblock=i}static x(t,n,r){throw new e(t,{toml:n.s,ptr:r??n.p})}}; /*! * Copyright (c) Squirrel Chat et al., All rights reserved. * SPDX-License-Identifier: BSD-3-Clause @@ -99,8 +99,8 @@ function dn(e,t){let n=e.slice(0,t).split(/\r?\n/);return[n.length,n.pop().lengt * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -function pn(e){let t=e.p,n=e.s.charCodeAt(e.p++),r=n,i=n===39,a=n===e.s.charCodeAt(e.p)&&n===e.s.charCodeAt(e.p+1);a&&((n=e.s.charCodeAt(e.p+=2))===10?e.p++:n===13&&e.s.charCodeAt(e.p+1)===10&&(e.p+=2));let o=``,s=e.p,c=0;for(;e.p=48&&t<=57?t-48:t>=65&&t<=70?t-65+10:t>=97&&t<=102?t-97+10:-1;n<0&&Q.x(`invalid non-hex character in unicode escape`,e),r=r<<4|n}(r<0||r>1114111||r>=55296&&r<=57343)&&Q.x(`invalid unicode escape`,e,t),o+=String.fromCodePoint(r),s=e.p--,c=0}else a&&(n===32||n===9)?c=2:(n===98?o+=`\b`:n===116?o+=` `:n===110?o+=` -`:n===102?o+=`\f`:n===114?o+=`\r`:n===101?o+=`\x1B`:n===34?o+=`"`:n===92?o+=`\\`:Q.x(`unrecognised escape sequence`,e),s=e.p+1,c=0)}else n!==32&&n!==9&&(c===2&&Q.x(`invalid escape: only line-ending whitespace may be escaped`,e,s),c=+(!i&&n===92),s=e.p);Q.x(`unfinished string`,e,t)} +function fn(e){let t=e.p,n=e.s.charCodeAt(e.p++),r=n,i=n===39,a=n===e.s.charCodeAt(e.p)&&n===e.s.charCodeAt(e.p+1);a&&((n=e.s.charCodeAt(e.p+=2))===10?e.p++:n===13&&e.s.charCodeAt(e.p+1)===10&&(e.p+=2));let o=``,s=e.p,c=0;for(;e.p=48&&t<=57?t-48:t>=65&&t<=70?t-65+10:t>=97&&t<=102?t-97+10:-1;n<0&&$.x(`invalid non-hex character in unicode escape`,e),r=r<<4|n}(r<0||r>1114111||r>=55296&&r<=57343)&&$.x(`invalid unicode escape`,e,t),o+=String.fromCodePoint(r),s=e.p--,c=0}else a&&(n===32||n===9)?c=2:(n===98?o+=`\b`:n===116?o+=` `:n===110?o+=` +`:n===102?o+=`\f`:n===114?o+=`\r`:n===101?o+=`\x1B`:n===34?o+=`"`:n===92?o+=`\\`:$.x(`unrecognised escape sequence`,e),s=e.p+1,c=0)}else n!==32&&n!==9&&(c===2&&$.x(`invalid escape: only line-ending whitespace may be escaped`,e,s),c=+(!i&&n===92),s=e.p);$.x(`unfinished string`,e,t)} /*! * Copyright (c) Squirrel Chat et al., All rights reserved. * SPDX-License-Identifier: BSD-3-Clause @@ -128,7 +128,7 @@ function pn(e){let t=e.p,n=e.s.charCodeAt(e.p++),r=n,i=n===39,a=n===e.s.charCode * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -let mn=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i;var hn=class e extends Date{#e=!1;#t=!1;#n=null;constructor(e,t,n){let r=!0,i=!0,a=`Z`,o;if(typeof e==`string`){if(t)prep:{if(t<3){if(+e.slice(11,13)>23){e=``;break prep}t===2?(a=null,e+=`Z`):(o=e.charCodeAt(e.length-1))!==90&&o!==122&&(a=e.slice(e.length-6)),n&&(e=e.slice(0,10)+`T`+e.slice(11))}else t===4&&(e=+e.slice(0,2)>23?``:`0000-01-01T${e}Z`);r=t!==4,i=t!==3}else{let t=e.match(mn);t?(t[1]||(r=!1,e=`0000-01-01T${e}`),i=!!t[2],i&&e[10]===` `&&(e=e.replace(` `,`T`)),t[2]&&+t[2]>23?e=``:(a=t[3]||null,!a&&i&&(e+=`Z`))):e=``}}super(e),isNaN(this.getTime())||(this.#e=r,this.#t=i,this.#n=a)}isDateTime(){return this.#e&&this.#t}isLocal(){return!this.#e||!this.#t||!this.#n}isDate(){return this.#e&&!this.#t}isTime(){return this.#t&&!this.#e}isValid(){return this.#e||this.#t}toISOString(){let e=super.toISOString();if(this.isDate())return e.slice(0,10);if(this.isTime())return e.slice(11,23);if(this.#n===null)return e.slice(0,-1);if(this.#n===`Z`||this.#n===`z`)return e;let t=this.#n.slice(1,3)*60+ +this.#n.slice(4,6);return t=this.#n[0]===`-`?t:-t,(/* @__PURE__ */ new Date(this.getTime()-t*6e4)).toISOString().slice(0,-1)+this.#n}static wrapAsOffsetDateTime(t,n=`Z`){let r=new e(t);return r.#n=n,r}static wrapAsLocalDateTime(t){let n=new e(t);return n.#n=null,n}static wrapAsLocalDate(t){let n=new e(t);return n.#t=!1,n.#n=null,n}static wrapAsLocalTime(t){let n=new e(t);return n.#e=!1,n.#n=null,n}}; +let pn=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i;var mn=class e extends Date{#e=!1;#t=!1;#n=null;constructor(e,t,n){let r=!0,i=!0,a=`Z`,o;if(typeof e==`string`){if(t)prep:{if(t<3){if(+e.slice(11,13)>23){e=``;break prep}t===2?(a=null,e+=`Z`):(o=e.charCodeAt(e.length-1))!==90&&o!==122&&(a=e.slice(e.length-6)),n&&(e=e.slice(0,10)+`T`+e.slice(11))}else t===4&&(e=+e.slice(0,2)>23?``:`0000-01-01T${e}Z`);r=t!==4,i=t!==3}else{let t=e.match(pn);t?(t[1]||(r=!1,e=`0000-01-01T${e}`),i=!!t[2],i&&e[10]===` `&&(e=e.replace(` `,`T`)),t[2]&&+t[2]>23?e=``:(a=t[3]||null,!a&&i&&(e+=`Z`))):e=``}}super(e),isNaN(this.getTime())||(this.#e=r,this.#t=i,this.#n=a)}isDateTime(){return this.#e&&this.#t}isLocal(){return!this.#e||!this.#t||!this.#n}isDate(){return this.#e&&!this.#t}isTime(){return this.#t&&!this.#e}isValid(){return this.#e||this.#t}toISOString(){let e=super.toISOString();if(this.isDate())return e.slice(0,10);if(this.isTime())return e.slice(11,23);if(this.#n===null)return e.slice(0,-1);if(this.#n===`Z`||this.#n===`z`)return e;let t=this.#n.slice(1,3)*60+ +this.#n.slice(4,6);return t=this.#n[0]===`-`?t:-t,(/* @__PURE__ */ new Date(this.getTime()-t*6e4)).toISOString().slice(0,-1)+this.#n}static wrapAsOffsetDateTime(t,n=`Z`){let r=new e(t);return r.#n=n,r}static wrapAsLocalDateTime(t){let n=new e(t);return n.#n=null,n}static wrapAsLocalDate(t){let n=new e(t);return n.#t=!1,n.#n=null,n}static wrapAsLocalTime(t){let n=new e(t);return n.#e=!1,n.#n=null,n}}; /*! * Copyright (c) Squirrel Chat et al., All rights reserved. * SPDX-License-Identifier: BSD-3-Clause @@ -156,7 +156,7 @@ let mn=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -function gn(e,t=10){return t===16?e>47&&e<58||e>64&&e<71||e>96&&e<103:e>47&&e<48+t}function _n(e,t){return e===32||e===9||e===10||e===13||t&&(e===t||e===44)||e===35}function vn(e,t){let n=e.p,r=e.s.charCodeAt(e.p);if(r===91||r===123){e.d--||Q.x(`document contains excessively nested structures. aborting.`,e);let t=r===91?kn(e):On(e);return e.d++,t}return r===34||r===39?pn(e):r===116?((e.s.charCodeAt(++e.p)!==114||e.s.charCodeAt(++e.p)!==117||e.s.charCodeAt(++e.p)!==101)&&Q.x(`invalid value`,e,n),e.p++,!0):r===102?((e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==108||e.s.charCodeAt(++e.p)!==115||e.s.charCodeAt(++e.p)!==101)&&Q.x(`invalid value`,e,n),e.p++,!1):r===43||r===45?yn(e,e.p,e.s.charCodeAt(++e.p),44-r,t):e.s.charCodeAt(e.p+4)===45&&e.s.charCodeAt(e.p+7)===45?Sn(e,r,t):e.s.charCodeAt(e.p+2)===58?Cn(e,r,t):yn(e,e.p,r,0,t)}function yn(e,t,n,r,i){let a=n,o=0,s=!1;if(a===105)return(e.s.charCodeAt(++e.p)!==110||e.s.charCodeAt(++e.p)!==102)&&Q.x(`invalid value`,e,t),e.p++,(r||1)/0;if(a===110)return(e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==110)&&Q.x(`invalid value`,e,t),e.p++,NaN;if(a===48){if(++e.p>=e.s.length||_n(a=e.s.charCodeAt(e.p),i))return e.bi===!0?0n:0;if(!r){if(a===120)return bn(e,t,16,i);if(a===98)return bn(e,t,2,i);if(a===111)return bn(e,t,8,i)}a===46?o=2:a===101||a===69?o=4:Q.x(`illegal leading zero`,e,t)}else gn(a)||Q.x(`invalid value`,e,t);for(;++e.p9?o-=11:o&1||o++:Q.x(`illegal character in numeric literal`,e);if(!o){let t=(n-48)*(r||1);return e.bi===!0?BigInt(t):t}o&1||Q.x(`unfinished numeric value`,e,t);let c=e.s.slice(t,e.p);return s&&(c=c.replaceAll(`_`,``)),o>1?parseFloat(c):xn(e,c,10,t)}function bn(e,t,n,r){let i,a=1;for(;++e.p=e.s.length||((t=e.s.charCodeAt(e.p))!==32||(i=!0,!gn(e.s.charCodeAt(e.p+1))))&&t!==84&&t!==116)return wn(e,e.s.slice(r,e.p),3,!1,r);if(e.s.charCodeAt(e.p+=3)!==58&&Q.x(`invalid date-time: time part is malformed`,e,r),e.s.charCodeAt(e.p+=3)===58&&(e.p+=3),e.s.charCodeAt(e.p)===46)for(;gn(e.s.charCodeAt(++e.p)););if(t=e.s.charCodeAt(e.p)){if(t===90||t===122)return wn(e,e.s.slice(r,++e.p),1,i,r,`[+00:00]`);if(t===43||t===45)return wn(e,e.s.slice(r,e.p+=6),1,i,r,!e.ld&&`[`+e.s.slice(e.p-6,e.p)+`]`)}return wn(e,e.s.slice(r,e.p),2,i,r)}function Cn(e,t,n){let r=e.p;if(!gn(t)||!gn(e.s.charCodeAt(++e.p)))return yn(e,--e.p,t,0,n);if(e.s.charCodeAt(e.p+=4)===58&&(e.p+=3),e.s.charCodeAt(e.p)===46)for(;gn(e.s.charCodeAt(++e.p)););return wn(e,e.s.slice(r,e.p),4,!1,r)}function wn(e,t,n,r,i,a){if(e.ld){let a=new hn(t,n,r);return a.isValid()||Q.x(`invalid date`,e,i),a}try{switch(a&&(t+=a),n){case 1:return Temporal.ZonedDateTime.from(t);case 2:return Temporal.PlainDateTime.from(t);case 3:return Temporal.PlainDate.from(t);case 4:return Temporal.PlainTime.from(t)}}catch(t){Q.x(t instanceof Error?t.message:``+t,e,i)}} +function hn(e,t=10){return t===16?e>47&&e<58||e>64&&e<71||e>96&&e<103:e>47&&e<48+t}function gn(e,t){return e===32||e===9||e===10||e===13||t&&(e===t||e===44)||e===35}function _n(e,t){let n=e.p,r=e.s.charCodeAt(e.p);if(r===91||r===123){e.d--||$.x(`document contains excessively nested structures. aborting.`,e);let t=r===91?On(e):Dn(e);return e.d++,t}return r===34||r===39?fn(e):r===116?((e.s.charCodeAt(++e.p)!==114||e.s.charCodeAt(++e.p)!==117||e.s.charCodeAt(++e.p)!==101)&&$.x(`invalid value`,e,n),e.p++,!0):r===102?((e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==108||e.s.charCodeAt(++e.p)!==115||e.s.charCodeAt(++e.p)!==101)&&$.x(`invalid value`,e,n),e.p++,!1):r===43||r===45?vn(e,e.p,e.s.charCodeAt(++e.p),44-r,t):e.s.charCodeAt(e.p+4)===45&&e.s.charCodeAt(e.p+7)===45?xn(e,r,t):e.s.charCodeAt(e.p+2)===58?Sn(e,r,t):vn(e,e.p,r,0,t)}function vn(e,t,n,r,i){let a=n,o=0,s=!1;if(a===105)return(e.s.charCodeAt(++e.p)!==110||e.s.charCodeAt(++e.p)!==102)&&$.x(`invalid value`,e,t),e.p++,(r||1)/0;if(a===110)return(e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==110)&&$.x(`invalid value`,e,t),e.p++,NaN;if(a===48){if(++e.p>=e.s.length||gn(a=e.s.charCodeAt(e.p),i))return e.bi===!0?0n:0;if(!r){if(a===120)return yn(e,t,16,i);if(a===98)return yn(e,t,2,i);if(a===111)return yn(e,t,8,i)}a===46?o=2:a===101||a===69?o=4:$.x(`illegal leading zero`,e,t)}else hn(a)||$.x(`invalid value`,e,t);for(;++e.p9?o-=11:o&1||o++:$.x(`illegal character in numeric literal`,e);if(!o){let t=(n-48)*(r||1);return e.bi===!0?BigInt(t):t}o&1||$.x(`unfinished numeric value`,e,t);let c=e.s.slice(t,e.p);return s&&(c=c.replaceAll(`_`,``)),o>1?parseFloat(c):bn(e,c,10,t)}function yn(e,t,n,r){let i,a=1;for(;++e.p=e.s.length||((t=e.s.charCodeAt(e.p))!==32||(i=!0,!hn(e.s.charCodeAt(e.p+1))))&&t!==84&&t!==116)return Cn(e,e.s.slice(r,e.p),3,!1,r);if(e.s.charCodeAt(e.p+=3)!==58&&$.x(`invalid date-time: time part is malformed`,e,r),e.s.charCodeAt(e.p+=3)===58&&(e.p+=3),e.s.charCodeAt(e.p)===46)for(;hn(e.s.charCodeAt(++e.p)););if(t=e.s.charCodeAt(e.p)){if(t===90||t===122)return Cn(e,e.s.slice(r,++e.p),1,i,r,`[+00:00]`);if(t===43||t===45)return Cn(e,e.s.slice(r,e.p+=6),1,i,r,!e.ld&&`[`+e.s.slice(e.p-6,e.p)+`]`)}return Cn(e,e.s.slice(r,e.p),2,i,r)}function Sn(e,t,n){let r=e.p;if(!hn(t)||!hn(e.s.charCodeAt(++e.p)))return vn(e,--e.p,t,0,n);if(e.s.charCodeAt(e.p+=4)===58&&(e.p+=3),e.s.charCodeAt(e.p)===46)for(;hn(e.s.charCodeAt(++e.p)););return Cn(e,e.s.slice(r,e.p),4,!1,r)}function Cn(e,t,n,r,i,a){if(e.ld){let a=new mn(t,n,r);return a.isValid()||$.x(`invalid date`,e,i),a}try{switch(a&&(t+=a),n){case 1:return Temporal.ZonedDateTime.from(t);case 2:return Temporal.PlainDateTime.from(t);case 3:return Temporal.PlainDate.from(t);case 4:return Temporal.PlainTime.from(t)}}catch(t){$.x(t instanceof Error?t.message:``+t,e,i)}} /*! * Copyright (c) Squirrel Chat et al., All rights reserved. * SPDX-License-Identifier: BSD-3-Clause @@ -184,7 +184,7 @@ function gn(e,t=10){return t===16?e>47&&e<58||e>64&&e<71||e>96&&e<103:e>47&&e<48 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -function Tn(e){for(;e.p57&&o<65||o>90&&o<97&&o!==95||o>122?Q.x(`illegal character in key`,e):r||(r=1,a=e.p);while(o=e.s.charCodeAt(++e.p));Q.x(`incomplete key-value: cannot find end of key`,e,n)}function On(e){let t=e.p++,n=Object.create(null),r=/* @__PURE__ */ new Set,i;for(;e.p57&&o<65||o>90&&o<97&&o!==95||o>122?$.x(`illegal character in key`,e):r||(r=1,a=e.p);while(o=e.s.charCodeAt(++e.p));$.x(`incomplete key-value: cannot find end of key`,e,n)}function Dn(e){let t=e.p++,n=Object.create(null),r=/* @__PURE__ */ new Set,i;for(;e.ptypeof e==`string`)}function Vn(e,t,n){let r=d.resolve(e),i=d.resolve(t),a=d.relative(r,i).replace(/\\/g,`/`);if(a.startsWith(`..`)||d.isAbsolute(a))return!1;let o=Array.isArray(n.members)?n.members.filter(e=>typeof e==`string`):[],s=Array.isArray(n.exclude)?n.exclude.filter(e=>typeof e==`string`):[],c=a===``?`.`:a;return!(s.length>0&&zn(c,s)||!zn(c,o)||i!==r&&!u.existsSync(d.join(i,`pyproject.toml`)))}function Hn(e){let t=Xn(e);return t?.success===!0&&$(t.data.tool)&&$(t.data.tool.uv)&&Bn(t.data.tool.uv.workspace)?{dir:e,toml:t,config:t.data.tool.uv.workspace}:null}function Un(e,t,n=0){for(let r=n;r0;){let e=n.pop(),r;try{r=u.readdirSync(e,{withFileTypes:!0})}catch{continue}for(let i of r){let r=i.name;if(i.isDirectory()){if(t.includes(r)||r.endsWith(`.egg-info`))continue;n.push(d.join(e,r))}else if(i.isFile()&&(r.endsWith(`.py`)||r.endsWith(`.pyi`)))return!0}}return!1}function Qn(e,t,n){let r=``,i=t;for(;itypeof e==`string`)}function Vn(e,t,n){let r=d.resolve(e),i=d.resolve(t),a=d.relative(r,i).replace(/\\/g,`/`);if(a.startsWith(`..`)||d.isAbsolute(a))return!1;let o=Array.isArray(n.members)?n.members.filter(e=>typeof e==`string`):[],s=Array.isArray(n.exclude)?n.exclude.filter(e=>typeof e==`string`):[],c=a===``?`.`:a;return!(s.length>0&&zn(c,s)||!zn(c,o)||i!==r&&!u.existsSync(d.join(i,`pyproject.toml`)))}function Hn(e){let t=Xn(e);return t?.success===!0&&Pn(t.data.tool)&&Pn(t.data.tool.uv)&&Bn(t.data.tool.uv.workspace)?{dir:e,toml:t,config:t.data.tool.uv.workspace}:null}function Un(e,t,n=0){for(let r=n;r0;){let e=n.pop(),r;try{r=u.readdirSync(e,{withFileTypes:!0})}catch{continue}for(let i of r){let r=i.name;if(i.isDirectory()){if(t.includes(r)||r.endsWith(`.egg-info`))continue;n.push(d.join(e,r))}else if(i.isFile()&&(r.endsWith(`.py`)||r.endsWith(`.pyi`)))return!0}}return!1}function Qn(e,t,n){let r=``,i=t;for(;i=t+3&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+3]}r+=e[i]===` `?` `:` `,i++}return[r,i]}function er(e,t,n){let r=` `,i=t+3;for(;i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function nr(e,t,n){let r=` `,i=t+1;for(;i!$(e))}function ar(e,t){if(!$(e[`build-system`]))return!1;if(typeof t==`string`){let e=rr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!$(e))}function or(e,t){if(ir(e,t)||ar(e,t))return!0;if($(e.tool)&&$(e.tool.uv)){let t=e.tool.uv;return Bn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function sr(e){return $(e.tool)&&$(e.tool.uv)}function cr(e,t){return ir(e,t)||ar(e,t)}function lr(e,t){return d.relative(e,t)||`.`}function ur(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function dr(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=lr(e.cwd,d.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function fr(e){let t=e.pyprojectToml?.success===!0&&or(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&or(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&sr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&sr(e.workspaceRootToml.data);return e.hasUvLock?ur(e,r):a||i?dr(e,r):null}function pr(e){let t=e.pyprojectToml?.success===!0&&cr(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?lr(e.cwd,d.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=lr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}const mr=/^ruff\s*(?:\[[^\]]*\])?\s*(?:[=<>!~@;]|\s|$)/i;function hr(e){for(let t of e)if(typeof t==`string`){let e=t.trim();if(mr.test(e))return{declared:!0}}else if($(t)){let e=typeof t.package==`string`?t.package:typeof t.name==`string`?t.name:void 0;if(e&&e.toLowerCase()===`ruff`)return{declared:!0}}}function gr(e){for(let t of Object.keys(e))if(t.toLowerCase()===`ruff`)return{declared:!0}}function _r(e){if(Array.isArray(e.dependencies)){let t=hr(e.dependencies);if(t)return t}if($(e[`optional-dependencies`])){for(let t of Object.values(e[`optional-dependencies`]))if(Array.isArray(t)){let e=hr(t);if(e)return e}}}function vr(e){for(let t of Object.values(e))if(Array.isArray(t)){let e=hr(t);if(e)return e}}function yr(e){for(let t of[`dev-dependencies`,`override-dependencies`,`constraint-dependencies`])if(Array.isArray(e[t])){let n=hr(e[t]);if(n)return n}}function br(e){if($(e.dependencies)){let t=gr(e.dependencies);if(t)return t}if($(e[`dev-dependencies`])){let t=gr(e[`dev-dependencies`]);if(t)return t}if($(e.group)){for(let t of Object.values(e.group))if($(t)&&$(t.dependencies)){let e=gr(t.dependencies);if(e)return e}}}function xr(e){if($(e[`dev-dependencies`])){for(let t of Object.values(e[`dev-dependencies`]))if(Array.isArray(t)){let e=hr(t);if(e)return e}}}function Sr(e){if($(e.envs)){for(let t of Object.values(e.envs))if($(t)){if(Array.isArray(t.dependencies)){let e=hr(t.dependencies);if(e)return e}if(Array.isArray(t[`extra-dependencies`])){let e=hr(t[`extra-dependencies`]);if(e)return e}}}}function Cr(e){if($(e.dependencies)){let t=gr(e.dependencies);if(t)return t}if($(e[`dev-dependencies`])){let t=gr(e[`dev-dependencies`]);if(t)return t}if($(e.feature)){for(let t of Object.values(e.feature))if($(t)){if($(t.dependencies)){let e=gr(t.dependencies);if(e)return e}if($(t[`dev-dependencies`])){let e=gr(t[`dev-dependencies`]);if(e)return e}}}}function wr(e){if($(e.uv)){let t=yr(e.uv);if(t)return t}if($(e.poetry)){let t=br(e.poetry);if(t)return t}if($(e.pdm)){let t=xr(e.pdm);if(t)return t}if($(e.hatch)){let t=Sr(e.hatch);if(t)return t}if($(e.pixi)){let t=Cr(e.pixi);if(t)return t}}function Tr(e){if($(e.project)){let t=_r(e.project);if(t)return t}if($(e[`dependency-groups`])){let t=vr(e[`dependency-groups`]);if(t)return t}if($(e.tool)){let t=wr(e.tool);if(t)return t}return{declared:!1}}function Er(e){let t=d.join(e,`uv.lock`);if(!u.existsSync(t))return!1;try{let e=u.readFileSync(t,`utf8`).split(/^\[\[package\]\]/m);for(let t of e)if(/^\s*name\s*=\s*["']ruff["']/m.test(t))return!0}catch{}return!1}function Dr(e){let t=d.join(e,`requirements.txt`);if(!u.existsSync(t))return!1;try{let e=u.readFileSync(t,`utf8`).replace(/#.*/g,``);if(/^\s*ruff\b/im.test(e))return!0}catch{}return!1}function Or(e,t,n){if(t?.isStandalone)return!1;if(Er(e.uvLockDir||e.cwd))return!0;let r=n??e.pyprojectToml;return!!(r?.success===!0&&Tr(r.data).declared||e.workspaceRootToml?.success===!0&&Tr(e.workspaceRootToml.data).declared||e.uvToml?.success===!0&&Tr(e.uvToml.data).declared||Dr(e.requirementsDir||e.cwd))}function kr(e=process.cwd(),t){if(t?.hasSource??Zn(e))return!0;let n=t?.ctx??Yn(e);if(n.projectDir===n.cwd&&Kn(n.cwd)&&(n.pyprojectToml?.success===!0&&(or(n.pyprojectToml.data,n.pyprojectToml.rawContent)||Or(n,void 0,n.pyprojectToml))||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Hn(n.workspaceRootDir);if(t&&Vn(n.workspaceRootDir,d.resolve(e),t.config))return!0}return!1}function Ar(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Nn)if(t===`uv`){let t=fr(e);if(t)return t}else if(t===`pip`){let t=pr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function jr(e=process.cwd(),t,n){let r=n?.ctx??Yn(e);return n?.isProject??kr(e,{ctx:r,hasSource:n?.hasSource})?Ar(r,t):null}function Mr(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Nr(e=process.cwd()){let t=Zn(e),n=Yn(e);return kr(e,{ctx:n,hasSource:t})?{detected:!0,packageManager:jr(e,n.pyprojectToml,{ctx:n,hasSource:t,isProject:!0})}:{detected:!1,packageManager:null}}function Pr(e){return{shouldSetup:e.detected&&e.packageManager.name!==`pnpm`&&e.runtime.name===`node`,cache:e.detected&&e.packageManager.name===`npm`?`npm`:``}}function Fr(e){return{shouldSetup:e.detected&&e.packageManager.name!==`pnpm`&&e.runtime.name===`bun`}}function Ir(e){return{shouldSetup:e.detected&&e.packageManager.name===`pnpm`}}function Lr(e){return{node:Pr(e.javascript),bun:Fr(e.javascript),pnpm:Ir(e.javascript)}}function Rr(e){if(!process.argv[1])return!1;try{return l(e)===u.realpathSync(process.argv[1])}catch{return!1}}function zr(e){if(!e||typeof e!=`object`)throw Error(`Invalid environment: missing or invalid "javascript" section`);let t=e;if(typeof t.detected!=`boolean`)throw Error(`Invalid JavaScript environment: "detected" must be a boolean`);let n=t.runtime;if(!n||typeof n!=`object`)throw Error(`Invalid JavaScript environment: "runtime" must be an object`);let r=n.name;if(typeof r!=`string`||!Vt(r))throw Error(`Invalid resolved runtime: "${String(r)}"`);let i=t.packageManager;if(!i||typeof i!=`object`||typeof i.name!=`string`||!i.name)throw Error(`Invalid resolved package manager`);if(t.toolchain!==void 0&&t.toolchain!==`vite-plus`){let e=typeof t.toolchain==`string`?t.toolchain:JSON.stringify(t.toolchain);throw Error(`Invalid resolved toolchain: "${e}"`)}Ut(r,i.name)}function Br(e){if(e.name!==`uv`&&e.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);if(typeof e.execPrefix!=`string`)throw Error(`Invalid Python environment: "pmInfo.execPrefix" must be a string`);for(let t of[`lockfile`,`configFile`,`lockCommand`,`syncCommand`])if(e[t]!==void 0&&typeof e[t]!=`string`)throw Error(`Invalid Python environment: "pmInfo.${t}" must be a string`);if(e.isStandalone!==void 0&&typeof e.isStandalone!=`boolean`)throw Error(`Invalid Python environment: "pmInfo.isStandalone" must be a boolean`)}function Vr(e){if(e.isStandalone===!0){if(e.installCommands.length>0)throw Error(`Invalid Python environment: standalone "pmInfo" must have empty installCommands array`);if(e.lockfile!==void 0||e.configFile!==void 0)throw Error(`Invalid Python environment: standalone "pmInfo" cannot specify lockfile or configFile`)}}function Hr(e){if(e.name===`uv`){if(e.lockfile!==void 0&&e.lockfile!==`uv.lock`)throw Error(`Invalid Python environment: UV lockfile name must be "uv.lock" when present`);if(e.lockfile===`uv.lock`&&e.configFile!==`pyproject.toml`)throw Error(`Invalid Python environment: UV lockfile requires configFile "pyproject.toml"`)}}function Ur(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo" must be an object when present`);let t=e;if(Br(t),!(`installCommands`in t)||t.installCommands===void 0)throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);Mr(t.installCommands),Vr(t),Hr(t)}function Wr(e){if(e.packageManager!==null)throw Error(`Invalid Python environment: "packageManager" must be null when detected is false`)}function Gr(e){if(!e||typeof e!=`object`)throw Error(`Invalid environment: missing or invalid "python" section`);let t=e;if(typeof t.detected!=`boolean`)throw Error(`Invalid Python environment: "detected" must be a boolean`);if(!(`packageManager`in t)||t.packageManager===void 0)throw Error(`Invalid Python environment: "packageManager" property is required`);if(!t.detected)Wr(t);else{if(t.packageManager===null)throw Error(`Invalid Python environment: "packageManager" cannot be null when detected is true`);Ur(t.packageManager)}}function Kr(e){if(!e||typeof e!=`object`)throw Error(`Invalid environment: must be a non-null object`);return zr(e.javascript),Gr(e.python),e}function qr(e){let t=e.javascript,n=e.python,r=Lr(e);It(`setup-node`,String(r.node.shouldSetup)),It(`setup-node-cache`,r.node.cache),It(`setup-bun`,String(r.bun.shouldSetup)),It(`setup-pnpm`,String(r.pnpm.shouldSetup)),It(`javascript-detected`,String(t.detected)),It(`javascript-runtime`,t.runtime.name),It(`javascript-package-manager`,t.packageManager.name),It(`javascript-toolchain`,t.toolchain??``),It(`python-detected`,String(n.detected)),It(`python-package-manager`,n.packageManager?n.packageManager.name:``)}function Jr(e){return e.runtime.name===`bun`?`Bun`:`Node.js`}function Yr(e){let t=e.javascript,n=e.python;if(!t.detected&&!n.detected){Bt(`No JavaScript or Python environment detected.`);return}let r=[];t.detected&&r.push(Jr(t)),n.detected&&r.push(`Python`),r.length>0&&Bt(`Runtime: ${r.join(`, `)}`);let i=[];t.detected&&i.push(t.packageManager.name),n.detected&&n.packageManager&&i.push(n.packageManager.name),i.length>0&&Bt(`Package Manager: ${i.join(`, `)}`),t.detected&&t.toolchain===`vite-plus`&&Bt(`Toolchain: Vite+`)}function Xr(e=Ft(`toolchain`)){let t=Kr({javascript:en(e),python:Nr()});return Yr(t),t}function Zr(){try{qr(Xr(Ft(`toolchain`)))}catch(e){Lt(`Environment setup failed: ${e instanceof Error?e.message:String(e)}`)}}process.env.NODE_ENV!==`test`&&Rr(import.meta.url)&&Zr();export{Lr as createSetupPlan,Yr as logResolvedEnvironment,Xr as resolveEnvironment,en as resolveJsEnvironment,Nr as resolvePythonEnvironment,Zr as run,Kr as validateEnvironment,qr as writeOutput}; \ No newline at end of file +`&&e[i]!==`\r`;)r+=` `,i++;return i!Pn(e))}function ar(e,t){if(!Pn(e[`build-system`]))return!1;if(typeof t==`string`){let e=rr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Pn(e))}function or(e,t){if(ir(e,t)||ar(e,t))return!0;if(Pn(e.tool)&&Pn(e.tool.uv)){let t=e.tool.uv;return Bn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function sr(e){return Pn(e.tool)&&Pn(e.tool.uv)}function cr(e,t){return ir(e,t)||ar(e,t)}function lr(e,t){return d.relative(e,t)||`.`}function ur(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function dr(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=lr(e.cwd,d.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function fr(e){let t=e.pyprojectToml?.success===!0&&or(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&or(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&sr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&sr(e.workspaceRootToml.data);return e.hasUvLock?ur(e,r):a||i?dr(e,r):null}function pr(e){let t=e.pyprojectToml?.success===!0&&cr(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?lr(e.cwd,d.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=lr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function mr(e=process.cwd(),t){if(t?.hasSource??Zn(e))return!0;let n=t?.ctx??Yn(e);if(n.projectDir===n.cwd&&Kn(n.cwd)&&(n.pyprojectToml?.success===!0&&or(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Hn(n.workspaceRootDir);if(t&&Vn(n.workspaceRootDir,d.resolve(e),t.config))return!0}return!1}function hr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Mn)if(t===`uv`){let t=fr(e);if(t)return t}else if(t===`pip`){let t=pr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function gr(e=process.cwd(),t,n){let r=n?.ctx??Yn(e);return n?.isProject??mr(e,{ctx:r,hasSource:n?.hasSource})?hr(r,t):null}function _r(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function vr(e=process.cwd()){let t=Zn(e),n=Yn(e);return mr(e,{ctx:n,hasSource:t})?{detected:!0,packageManager:gr(e,n.pyprojectToml,{ctx:n,hasSource:t,isProject:!0})}:{detected:!1,packageManager:null}}function yr(e){return{shouldSetup:e.detected&&e.packageManager.name!==`pnpm`&&e.runtime.name===`node`,cache:e.detected&&e.packageManager.name===`npm`?`npm`:``}}function br(e){return{shouldSetup:e.detected&&e.packageManager.name!==`pnpm`&&e.runtime.name===`bun`}}function xr(e){return{shouldSetup:e.detected&&e.packageManager.name===`pnpm`}}function Sr(e){return{node:yr(e.javascript),bun:br(e.javascript),pnpm:xr(e.javascript)}}function Cr(e){if(!process.argv[1])return!1;try{return l(e)===u.realpathSync(process.argv[1])}catch{return!1}}function wr(e){if(!e||typeof e!=`object`)throw Error(`Invalid environment: missing or invalid "javascript" section`);let t=e;if(typeof t.detected!=`boolean`)throw Error(`Invalid JavaScript environment: "detected" must be a boolean`);let n=t.runtime;if(!n||typeof n!=`object`)throw Error(`Invalid JavaScript environment: "runtime" must be an object`);let r=n.name;if(typeof r!=`string`||!Bt(r))throw Error(`Invalid resolved runtime: "${String(r)}"`);let i=t.packageManager;if(!i||typeof i!=`object`||typeof i.name!=`string`||!i.name)throw Error(`Invalid resolved package manager`);if(t.toolchain!==void 0&&t.toolchain!==`vite-plus`){let e=typeof t.toolchain==`string`?t.toolchain:JSON.stringify(t.toolchain);throw Error(`Invalid resolved toolchain: "${e}"`)}Ht(r,i.name)}function Tr(e){if(e.name!==`uv`&&e.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);if(typeof e.execPrefix!=`string`)throw Error(`Invalid Python environment: "pmInfo.execPrefix" must be a string`);for(let t of[`lockfile`,`configFile`,`lockCommand`,`syncCommand`])if(e[t]!==void 0&&typeof e[t]!=`string`)throw Error(`Invalid Python environment: "pmInfo.${t}" must be a string`);if(e.isStandalone!==void 0&&typeof e.isStandalone!=`boolean`)throw Error(`Invalid Python environment: "pmInfo.isStandalone" must be a boolean`)}function Er(e){if(e.isStandalone===!0){if(e.installCommands.length>0)throw Error(`Invalid Python environment: standalone "pmInfo" must have empty installCommands array`);if(e.lockfile!==void 0||e.configFile!==void 0)throw Error(`Invalid Python environment: standalone "pmInfo" cannot specify lockfile or configFile`)}}function Dr(e){if(e.name===`uv`){if(e.lockfile!==void 0&&e.lockfile!==`uv.lock`)throw Error(`Invalid Python environment: UV lockfile name must be "uv.lock" when present`);if(e.lockfile===`uv.lock`&&e.configFile!==`pyproject.toml`)throw Error(`Invalid Python environment: UV lockfile requires configFile "pyproject.toml"`)}}function Or(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo" must be an object when present`);let t=e;if(Tr(t),!(`installCommands`in t)||t.installCommands===void 0)throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);_r(t.installCommands),Er(t),Dr(t)}function kr(e){if(e.packageManager!==null)throw Error(`Invalid Python environment: "packageManager" must be null when detected is false`)}function Ar(e){if(!e||typeof e!=`object`)throw Error(`Invalid environment: missing or invalid "python" section`);let t=e;if(typeof t.detected!=`boolean`)throw Error(`Invalid Python environment: "detected" must be a boolean`);if(!(`packageManager`in t)||t.packageManager===void 0)throw Error(`Invalid Python environment: "packageManager" property is required`);if(!t.detected)kr(t);else{if(t.packageManager===null)throw Error(`Invalid Python environment: "packageManager" cannot be null when detected is true`);Or(t.packageManager)}}function jr(e){if(!e||typeof e!=`object`)throw Error(`Invalid environment: must be a non-null object`);return wr(e.javascript),Ar(e.python),e}function Mr(e){let t=e.javascript,n=e.python,r=Sr(e);Ft(`setup-node`,String(r.node.shouldSetup)),Ft(`setup-node-cache`,r.node.cache),Ft(`setup-bun`,String(r.bun.shouldSetup)),Ft(`setup-pnpm`,String(r.pnpm.shouldSetup)),Ft(`javascript-detected`,String(t.detected)),Ft(`javascript-runtime`,t.runtime.name),Ft(`javascript-package-manager`,t.packageManager.name),Ft(`javascript-toolchain`,t.toolchain??``),Ft(`python-detected`,String(n.detected)),Ft(`python-package-manager`,n.packageManager?n.packageManager.name:``)}function Nr(e){return e.runtime.name===`bun`?`Bun`:`Node.js`}function Pr(e){let t=e.javascript,n=e.python;if(!t.detected&&!n.detected){zt(`No JavaScript or Python environment detected.`);return}let r=[];t.detected&&r.push(Nr(t)),n.detected&&r.push(`Python`),r.length>0&&zt(`Runtime: ${r.join(`, `)}`);let i=[];t.detected&&i.push(t.packageManager.name),n.detected&&n.packageManager&&i.push(n.packageManager.name),i.length>0&&zt(`Package Manager: ${i.join(`, `)}`),t.detected&&t.toolchain===`vite-plus`&&zt(`Toolchain: Vite+`)}function Fr(e=Pt(`toolchain`)){let t=jr({javascript:$t(e),python:vr()});return Pr(t),t}function Ir(){try{Mr(Fr(Pt(`toolchain`)))}catch(e){It(`Environment setup failed: ${e instanceof Error?e.message:String(e)}`)}}process.env.NODE_ENV!==`test`&&Cr(import.meta.url)&&Ir();export{Sr as createSetupPlan,Pr as logResolvedEnvironment,Fr as resolveEnvironment,$t as resolveJsEnvironment,vr as resolvePythonEnvironment,Ir as run,jr as validateEnvironment,Mr as writeOutput}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts new file mode 100644 index 00000000..6244a91c --- /dev/null +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -0,0 +1,135 @@ +import type { + AdapterDetectionResult, + Capability, + ExecutionMode, + ExecutionTask, + ProjectContext, + ToolAdapter, +} from "../../types.js"; + +import { sanitizePackageManager } from "../../../javascript-env.js"; + +export interface ScriptMapping { + capability: Capability; + scriptName: string; +} + +/** + * Script conventions based on requirements: + * Combined autofix: "fix", "check:fix" + * Format write: "format", "fmt", "format:write" + * Format check: "format:check", "fmt:check" + * Lint fix: "lint:fix", "lint:write" + * Lint check: "lint", "lint:check" + * + * Excluded from autofix: "check", "test", "typecheck" + */ +export function resolveScriptTasks( + scripts: Record, + mode: ExecutionMode, +): ScriptMapping[] { + const mappings: ScriptMapping[] = []; + + if (mode === "fix") { + // 1. Check for combined fix scripts first: "fix", "check:fix" + const fixScript = scripts.fix ? "fix" : scripts["check:fix"] ? "check:fix" : undefined; + + // Check if independent format / lint fix scripts exist + const formatWriteScript = scripts["format:write"] + ? "format:write" + : scripts.format + ? "format" + : scripts.fmt + ? "fmt" + : undefined; + + const lintFixScript = scripts["lint:fix"] + ? "lint:fix" + : scripts["lint:write"] + ? "lint:write" + : scripts.lint + ? "lint" + : undefined; + + if (fixScript) { + // If "fix" is present, does it cover both format and lint, or are there explicit format/lint scripts? + // "Do not allow a generic 'fix' script to accidentally suppress independent lint or format tasks unless its explicit semantics indicate that it covers them." + // In the priority rules: If "fix" is defined and no other independent script exists, it covers combined autofix. + // If "fix" is present alone, use "fix". + // If format or lint are also present along with fix, let's check: + // In existing behavior: if scripts.fix exists, it returns ["fix"]. + mappings.push({ capability: "autofix", scriptName: fixScript }); + } else { + if (formatWriteScript) { + mappings.push({ capability: "format", scriptName: formatWriteScript }); + } + if (lintFixScript) { + mappings.push({ capability: "lint", scriptName: lintFixScript }); + } + } + } else { + // Check mode + const formatCheckScript = scripts["format:check"] + ? "format:check" + : scripts["fmt:check"] + ? "fmt:check" + : scripts.format + ? "format" + : scripts.fmt + ? "fmt" + : undefined; + + const lintCheckScript = scripts["lint:check"] + ? "lint:check" + : scripts.lint + ? "lint" + : undefined; + + if (formatCheckScript) { + mappings.push({ capability: "format", scriptName: formatCheckScript }); + } + if (lintCheckScript) { + mappings.push({ capability: "lint", scriptName: lintCheckScript }); + } + } + + return mappings; +} + +export class JavaScriptScriptAdapter implements ToolAdapter { + public readonly id = "npm-scripts"; + public readonly name = "package.json scripts"; + public readonly capabilities: Capability[] = ["autofix", "format", "lint"]; + + public detect(context: ProjectContext): AdapterDetectionResult { + const scripts = context.jsEnv?.packageJson?.scripts; + if (!scripts || Object.keys(scripts).length === 0) { + return { detected: false, reason: "no scripts declared in package.json" }; + } + + const tasks = resolveScriptTasks(scripts, "fix"); + if (tasks.length > 0) { + const scriptNames = tasks.map((t) => `"${t.scriptName}"`).join(", "); + return { detected: true, reason: `found autofix scripts: ${scriptNames}` }; + } + + return { detected: false, reason: "no supported autofix scripts found in package.json" }; + } + + public plan(context: ProjectContext, mode: ExecutionMode): ExecutionTask[] { + const scripts = context.jsEnv?.packageJson?.scripts || {}; + const scriptMappings = resolveScriptTasks(scripts, mode); + + const pm = sanitizePackageManager(context.jsPm || "npm"); + return scriptMappings.map((mapping) => ({ + id: `script-${mapping.scriptName}`, + toolId: this.id, + capability: mapping.capability, + executable: pm, + args: ["run", mapping.scriptName], + cwd: context.cwd, + mode, + description: `package.json script: ${pm} run ${mapping.scriptName}`, + })); + } +} diff --git a/src/autofix/adapters/javascript/tools.ts b/src/autofix/adapters/javascript/tools.ts new file mode 100644 index 00000000..90f5316b --- /dev/null +++ b/src/autofix/adapters/javascript/tools.ts @@ -0,0 +1,420 @@ +import * as io from "@actions/io"; +import fs from "node:fs"; +import path from "node:path"; + +import type { + AdapterDetectionResult, + Capability, + ExecutionMode, + ExecutionTask, + ProjectContext, + ToolAdapter, +} from "../../types.js"; + +import { hasVitePlusDependency, type JsPackageManifest } from "../../../javascript-env.js"; + +function hasDependency(pkg: JsPackageManifest | undefined, depName: string): boolean { + if (!pkg) return false; + return Boolean( + pkg.dependencies?.[depName] || + pkg.devDependencies?.[depName] || + pkg.peerDependencies?.[depName] || + pkg.optionalDependencies?.[depName], + ); +} + +function hasAnyConfigFile(cwd: string, filenames: string[]): boolean { + for (const f of filenames) { + if (fs.existsSync(path.join(cwd, f))) { + return true; + } + } + return false; +} + +// 1. Vite+ Adapter +export class VitePlusAdapter implements ToolAdapter { + public readonly id = "vite-plus"; + public readonly name = "Vite+"; + public readonly capabilities: Capability[] = ["autofix", "format", "lint"]; + + public detect(context: ProjectContext): AdapterDetectionResult { + const pkg = context.jsEnv?.packageJson; + const hasDep = hasVitePlusDependency(pkg); + const hasConfig = hasAnyConfigFile(context.cwd, [ + "vite.config.ts", + "vite.config.js", + "vite.config.mjs", + "vite.config.cjs", + ]); + + if ( + hasDep || + (hasConfig && pkg?.scripts && Object.values(pkg.scripts).some((s) => s.includes("vp "))) + ) { + return { detected: true, reason: "Vite+ dependency and/or configuration detected" }; + } + return { detected: false, reason: "no Vite+ dependency or configuration" }; + } + + public async plan(context: ProjectContext, mode: ExecutionMode): Promise { + const hasVp = Boolean(await io.which("vp", false)); + const executable = hasVp ? "vp" : "npx"; + const baseArgs = hasVp ? [] : ["vp"]; + + if (mode === "fix") { + return [ + { + id: "vite-plus-fix", + toolId: this.id, + capability: "autofix", + executable, + args: [...baseArgs, "check", "--fix"], + cwd: context.cwd, + mode: "fix", + description: "Vite+: vp check --fix", + }, + ]; + } + + return [ + { + id: "vite-plus-check", + toolId: this.id, + capability: "autofix", + executable, + args: [...baseArgs, "check"], + cwd: context.cwd, + mode: "check", + description: "Vite+: vp check", + }, + ]; + } +} + +// 2. Biome Adapter +export class BiomeAdapter implements ToolAdapter { + public readonly id = "biome"; + public readonly name = "Biome"; + public readonly capabilities: Capability[] = ["autofix", "format", "lint"]; + + public detect(context: ProjectContext): AdapterDetectionResult { + const pkg = context.jsEnv?.packageJson; + const hasDep = hasDependency(pkg, "@biomejs/biome"); + const hasConfig = hasAnyConfigFile(context.cwd, ["biome.json", "biome.jsonc"]); + + // "Do not treat package installation alone as proof that a tool should run. + // A tool should only be selected when the detector has sufficient evidence that it is intentionally configured for the project." + if (hasDep && hasConfig) { + return { detected: true, reason: "Biome dependency and configuration detected" }; + } + if (hasConfig) { + return { detected: true, reason: "Biome configuration detected" }; + } + if (hasDep) { + return { detected: false, reason: "Biome dependency present without configuration file" }; + } + return { detected: false, reason: "no Biome dependency or configuration" }; + } + + public async plan(context: ProjectContext, mode: ExecutionMode): Promise { + const hasBiome = Boolean(await io.which("biome", false)); + const executable = hasBiome ? "biome" : "npx"; + const baseArgs = hasBiome ? [] : ["biome"]; + + if (mode === "fix") { + return [ + { + id: "biome-check-fix", + toolId: this.id, + capability: "autofix", + executable, + args: [...baseArgs, "check", "--write", "."], + cwd: context.cwd, + mode: "fix", + description: "Biome: check --write .", + }, + ]; + } + + return [ + { + id: "biome-check", + toolId: this.id, + capability: "autofix", + executable, + args: [...baseArgs, "check", "."], + cwd: context.cwd, + mode: "check", + description: "Biome: check .", + }, + ]; + } +} + +// 3. Prettier Adapter +export class PrettierAdapter implements ToolAdapter { + public readonly id = "prettier"; + public readonly name = "Prettier"; + public readonly capabilities: Capability[] = ["format"]; + + public detect(context: ProjectContext): AdapterDetectionResult { + const pkg = context.jsEnv?.packageJson; + const hasDep = hasDependency(pkg, "prettier"); + const hasPkgConfig = Boolean((pkg as any)?.prettier); + const hasConfigFile = hasAnyConfigFile(context.cwd, [ + ".prettierrc", + ".prettierrc.json", + ".prettierrc.yml", + ".prettierrc.yaml", + ".prettierrc.json5", + ".prettierrc.js", + ".prettierrc.cjs", + ".prettierrc.mjs", + "prettier.config.js", + "prettier.config.cjs", + "prettier.config.mjs", + ]); + + if (hasDep && (hasPkgConfig || hasConfigFile)) { + return { detected: true, reason: "Prettier dependency and configuration detected" }; + } + if (hasPkgConfig || hasConfigFile) { + return { detected: true, reason: "Prettier configuration detected" }; + } + if (hasDep) { + return { detected: false, reason: "Prettier dependency present without configuration" }; + } + return { detected: false, reason: "no Prettier dependency or configuration" }; + } + + public async plan(context: ProjectContext, mode: ExecutionMode): Promise { + const hasPrettier = Boolean(await io.which("prettier", false)); + const executable = hasPrettier ? "prettier" : "npx"; + const baseArgs = hasPrettier ? [] : ["prettier"]; + + if (mode === "fix") { + return [ + { + id: "prettier-format", + toolId: this.id, + capability: "format", + executable, + args: [...baseArgs, "--write", "."], + cwd: context.cwd, + mode: "fix", + description: "Prettier: format", + }, + ]; + } + + return [ + { + id: "prettier-check", + toolId: this.id, + capability: "format", + executable, + args: [...baseArgs, "--check", "."], + cwd: context.cwd, + mode: "check", + description: "Prettier: format check", + }, + ]; + } +} + +// 4. ESLint Adapter +export class EslintAdapter implements ToolAdapter { + public readonly id = "eslint"; + public readonly name = "ESLint"; + public readonly capabilities: Capability[] = ["lint"]; + + public detect(context: ProjectContext): AdapterDetectionResult { + const pkg = context.jsEnv?.packageJson; + const hasDep = hasDependency(pkg, "eslint"); + const hasPkgConfig = Boolean((pkg as any)?.eslintConfig); + const hasConfigFile = hasAnyConfigFile(context.cwd, [ + "eslint.config.js", + "eslint.config.mjs", + "eslint.config.cjs", + "eslint.config.ts", + ".eslintrc", + ".eslintrc.js", + ".eslintrc.cjs", + ".eslintrc.json", + ".eslintrc.yaml", + ".eslintrc.yml", + ]); + + if (hasDep && (hasPkgConfig || hasConfigFile)) { + return { detected: true, reason: "ESLint dependency and configuration detected" }; + } + if (hasPkgConfig || hasConfigFile) { + return { detected: true, reason: "ESLint configuration detected" }; + } + if (hasDep) { + return { detected: false, reason: "ESLint dependency present without configuration" }; + } + return { detected: false, reason: "no ESLint dependency or configuration" }; + } + + public async plan(context: ProjectContext, mode: ExecutionMode): Promise { + const hasEslint = Boolean(await io.which("eslint", false)); + const executable = hasEslint ? "eslint" : "npx"; + const baseArgs = hasEslint ? [] : ["eslint"]; + + if (mode === "fix") { + return [ + { + id: "eslint-lint-fix", + toolId: this.id, + capability: "lint", + executable, + args: [...baseArgs, "--fix", "."], + cwd: context.cwd, + mode: "fix", + description: "ESLint: lint autofix", + }, + ]; + } + + return [ + { + id: "eslint-lint-check", + toolId: this.id, + capability: "lint", + executable, + args: [...baseArgs, "."], + cwd: context.cwd, + mode: "check", + description: "ESLint: lint check", + }, + ]; + } +} + +// 5. Oxlint Adapter +export class OxlintAdapter implements ToolAdapter { + public readonly id = "oxlint"; + public readonly name = "Oxlint"; + public readonly capabilities: Capability[] = ["lint"]; + + public detect(context: ProjectContext): AdapterDetectionResult { + const pkg = context.jsEnv?.packageJson; + const hasDep = hasDependency(pkg, "oxlint"); + const hasConfig = hasAnyConfigFile(context.cwd, [ + ".oxlintrc.json", + "oxlint.json", + "oxlint.config.ts", + "oxlint.config.js", + ]); + + if (hasDep && hasConfig) { + return { detected: true, reason: "Oxlint dependency and configuration detected" }; + } + if (hasConfig) { + return { detected: true, reason: "Oxlint configuration detected" }; + } + if (hasDep) { + return { detected: false, reason: "Oxlint dependency present without configuration" }; + } + return { detected: false, reason: "no Oxlint dependency or configuration" }; + } + + public async plan(context: ProjectContext, mode: ExecutionMode): Promise { + const hasOxlint = Boolean(await io.which("oxlint", false)); + const executable = hasOxlint ? "oxlint" : "npx"; + const baseArgs = hasOxlint ? [] : ["oxlint"]; + + if (mode === "fix") { + return [ + { + id: "oxlint-lint-fix", + toolId: this.id, + capability: "lint", + executable, + args: [...baseArgs, "--fix", "."], + cwd: context.cwd, + mode: "fix", + description: "Oxlint: lint autofix", + }, + ]; + } + + return [ + { + id: "oxlint-lint-check", + toolId: this.id, + capability: "lint", + executable, + args: [...baseArgs, "."], + cwd: context.cwd, + mode: "check", + description: "Oxlint: lint check", + }, + ]; + } +} + +// 6. Oxfmt Adapter +export class OxfmtAdapter implements ToolAdapter { + public readonly id = "oxfmt"; + public readonly name = "Oxfmt"; + public readonly capabilities: Capability[] = ["format"]; + + public detect(context: ProjectContext): AdapterDetectionResult { + const pkg = context.jsEnv?.packageJson; + const hasDep = hasDependency(pkg, "oxfmt"); + const hasConfig = hasAnyConfigFile(context.cwd, [ + ".oxfmtrc.json", + "oxfmt.json", + "oxfmt.config.ts", + "oxfmt.config.js", + ]); + + if (hasDep && hasConfig) { + return { detected: true, reason: "Oxfmt dependency and configuration detected" }; + } + if (hasConfig) { + return { detected: true, reason: "Oxfmt configuration detected" }; + } + if (hasDep) { + return { detected: false, reason: "Oxfmt dependency present without configuration" }; + } + return { detected: false, reason: "no Oxfmt dependency or configuration" }; + } + + public async plan(context: ProjectContext, mode: ExecutionMode): Promise { + const hasOxfmt = Boolean(await io.which("oxfmt", false)); + const executable = hasOxfmt ? "oxfmt" : "npx"; + const baseArgs = hasOxfmt ? [] : ["oxfmt"]; + + if (mode === "fix") { + return [ + { + id: "oxfmt-format", + toolId: this.id, + capability: "format", + executable, + args: [...baseArgs, "--write", "."], + cwd: context.cwd, + mode: "fix", + description: "Oxfmt: format", + }, + ]; + } + + return [ + { + id: "oxfmt-check", + toolId: this.id, + capability: "format", + executable, + args: [...baseArgs, "--check", "."], + cwd: context.cwd, + mode: "check", + description: "Oxfmt: format check", + }, + ]; + } +} diff --git a/src/autofix/adapters/python/ruff.ts b/src/autofix/adapters/python/ruff.ts new file mode 100644 index 00000000..c907b4b5 --- /dev/null +++ b/src/autofix/adapters/python/ruff.ts @@ -0,0 +1,84 @@ +import * as io from "@actions/io"; + +import type { + AdapterDetectionResult, + Capability, + ExecutionMode, + ExecutionTask, + ProjectContext, + ToolAdapter, +} from "../../types.js"; + +export class RuffAdapter implements ToolAdapter { + public readonly id = "ruff"; + public readonly name = "Ruff"; + public readonly capabilities: Capability[] = ["lint", "format"]; + + public detect(context: ProjectContext): AdapterDetectionResult { + // Ruff is the default toolchain whenever Python source code is detected + const hasSource = context.hasPythonSource ?? false; + if (hasSource) { + return { detected: true, reason: "default Python toolchain" }; + } + return { detected: false, reason: "no Python source files detected" }; + } + + public async plan(context: ProjectContext, mode: ExecutionMode): Promise { + const hasRuff = Boolean(await io.which("ruff", false)); + if (!hasRuff) { + throw new Error("Required Python binary 'ruff' is not available in PATH."); + } + + const tasks: ExecutionTask[] = []; + + if (mode === "fix") { + tasks.push( + { + id: "ruff-lint-fix", + toolId: this.id, + capability: "lint", + executable: "ruff", + args: ["check", "--fix", "."], + cwd: context.cwd, + mode: "fix", + description: "Ruff: lint autofix", + }, + { + id: "ruff-format", + toolId: this.id, + capability: "format", + executable: "ruff", + args: ["format", "."], + cwd: context.cwd, + mode: "fix", + description: "Ruff: format", + }, + ); + } else { + tasks.push( + { + id: "ruff-lint-check", + toolId: this.id, + capability: "lint", + executable: "ruff", + args: ["check", "."], + cwd: context.cwd, + mode: "check", + description: "Ruff: lint check", + }, + { + id: "ruff-format-check", + toolId: this.id, + capability: "format", + executable: "ruff", + args: ["format", "--check", "."], + cwd: context.cwd, + mode: "check", + description: "Ruff: format check", + }, + ); + } + + return tasks; + } +} diff --git a/src/autofix/engine.ts b/src/autofix/engine.ts new file mode 100644 index 00000000..0c4fbdd5 --- /dev/null +++ b/src/autofix/engine.ts @@ -0,0 +1,65 @@ +import * as core from "@actions/core"; +import * as exec from "@actions/exec"; + +import type { ExecutionTask } from "./types.js"; + +export interface ExecutionResult { + task: ExecutionTask; + exitCode: number; + error?: Error; +} + +export class ExecutionEngine { + /** + * Executes tasks sequentially, capturing diagnostics and aggregating any task errors. + */ + public async executeTasks(tasks: ExecutionTask[]): Promise { + const results: ExecutionResult[] = []; + + for (const task of tasks) { + const displayCmd = `${task.executable} ${task.args.join(" ")}`.trim(); + core.info(`Executing: ${displayCmd}`); + + try { + const env = task.env + ? (Object.fromEntries( + Object.entries({ ...process.env, ...task.env }).filter( + (entry): entry is [string, string] => entry[1] !== undefined, + ), + ) as Record) + : undefined; + + const exitCode = await exec.exec(task.executable, task.args, { + cwd: task.cwd, + env, + ignoreReturnCode: true, + }); + + if (exitCode !== 0) { + const errMessage = + task.toolId === "ruff" + ? `Ruff command "${displayCmd}" failed. Check Python and Ruff configuration.` + : task.toolId === "npm-scripts" + ? `Script "${task.args[1] || displayCmd}" failed while executing "${displayCmd}".` + : `Task "${task.id}" (${displayCmd}) failed with exit code ${exitCode}.`; + results.push({ + task, + exitCode, + error: new Error(errMessage), + }); + } else { + results.push({ task, exitCode }); + } + } catch (err) { + const error = err instanceof Error ? err : new Error(String(err)); + results.push({ + task, + exitCode: 1, + error, + }); + } + } + + return results; + } +} diff --git a/src/autofix/index.ts b/src/autofix/index.ts index f980ea81..05f28e7e 100644 --- a/src/autofix/index.ts +++ b/src/autofix/index.ts @@ -2,13 +2,15 @@ import * as core from "@actions/core"; import * as exec from "@actions/exec"; import * as io from "@actions/io"; +import type { ProjectContext } from "./types.js"; + import { getJsInstallationPlan, inspectJsProjectEnvironment, resolveJsPackageManager, sanitizePackageManager, - selectAutofixScripts, type JsInstallationPlan, + type SupportedPackageManager, } from "../javascript-env.js"; import { detectPythonPackageManager, @@ -19,24 +21,12 @@ import { type PythonProjectContext, } from "../python-env.js"; import { isMainModule } from "../utils/is-main-module.js"; +import { ExecutionEngine } from "./engine.js"; +import { planExecution } from "./planner.js"; +import { defaultRegistry } from "./registry.js"; export { sanitizePackageManager }; -async function runScriptCommand( - pm: string, - name: string, - cwd: string = process.cwd(), -): Promise { - const safePm = sanitizePackageManager(pm); - const displayCmd = `${safePm} run ${name}`; - core.info(`Executing: ${displayCmd}`); - - const exitCode = await exec.exec(safePm, ["run", name], { cwd, ignoreReturnCode: true }); - if (exitCode !== 0) { - throw new Error(`Script "${name}" failed while executing "${displayCmd}".`); - } -} - async function runJsInstallationPlan( plan: JsInstallationPlan, cwd: string = process.cwd(), @@ -52,16 +42,6 @@ async function runJsInstallationPlan( } } -async function executeJsScripts( - selectedScripts: string[], - pm: string, - cwd: string = process.cwd(), -): Promise { - for (const scriptName of selectedScripts) { - await runScriptCommand(pm, scriptName, cwd); - } -} - export async function executeJsWorkflow(cwd: string = process.cwd()): Promise { const jsEnv = inspectJsProjectEnvironment(cwd); if (!jsEnv.hasPackageJson) { @@ -73,21 +53,33 @@ export async function executeJsWorkflow(cwd: string = process.cwd()): Promise t.toolId !== "ruff"); - if (selectedScripts.length === 0) { + if (jsTasks.length === 0) { core.info("No matching scripts (fix, format, lint, check, etc.) found in package.json."); return; } - const rawPm = process.env.PACKAGE_MANAGER || resolveJsPackageManager(jsEnv).name; - const pm = sanitizePackageManager(rawPm); - - const plan = getJsInstallationPlan(pm); - await runJsInstallationPlan(plan, cwd); + const installPlan = getJsInstallationPlan(pm); + await runJsInstallationPlan(installPlan, cwd); - await executeJsScripts(selectedScripts, pm, cwd); + const engine = new ExecutionEngine(); + const results = await engine.executeTasks(jsTasks); + const failure = results.find((r) => r.error); + if (failure?.error) { + throw failure.error; + } } async function runPythonCommand( @@ -144,18 +136,23 @@ export async function executeRuffAutofix( throw new Error(message); } - const ruffCommandSpecs = [ - { executable: "ruff", args: ["check", "--fix", "."] }, - { executable: "ruff", args: ["format", "."] }, - ]; - - for (const { executable, args } of ruffCommandSpecs) { - const displayCmd = `${executable} ${args.join(" ")}`; - core.info(`Executing: ${displayCmd}`); - const exitCode = await exec.exec(executable, args, { cwd, ignoreReturnCode: true }); - if (exitCode !== 0) { - throw new Error(`Ruff command "${displayCmd}" failed. Check Python and Ruff configuration.`); - } + const context: ProjectContext = { + cwd, + hasPythonSource: true, + }; + + const ruffProvider = defaultRegistry.getProvider("python"); + const ruffAdapter = ruffProvider?.getAdapters(context).find((a) => a.id === "ruff"); + if (!ruffAdapter) { + throw new Error("Ruff adapter not found in registry."); + } + + const tasks = await ruffAdapter.plan(context, "fix"); + const engine = new ExecutionEngine(); + const results = await engine.executeTasks(tasks); + const failure = results.find((r) => r.error); + if (failure?.error) { + throw failure.error; } } diff --git a/src/autofix/planner.ts b/src/autofix/planner.ts new file mode 100644 index 00000000..df43cdf8 --- /dev/null +++ b/src/autofix/planner.ts @@ -0,0 +1,218 @@ +import type { AutofixRegistry } from "./registry.js"; +import type { + Capability, + ExecutionMode, + ExecutionTask, + PlannedExecution, + ProjectContext, + ToolAdapter, +} from "./types.js"; + +interface CandidateTool { + adapter: ToolAdapter; + reason?: string; +} + +/** + * Resolves tool conflicts and generates a deterministic, deduplicated execution plan. + * + * Conflict Resolution Rules: + * 1. Explicit scripts have top priority for JS/TS tasks. + * 2. If a tool or script covers "autofix" (combined lint and format), standalone formatters or linters + * for the same language are skipped to prevent duplicate work or overwriting changes. + * 3. Do not run multiple formatters over the same files (e.g. Biome vs Prettier vs Oxfmt). + * 4. Do not run multiple linters over the same files (e.g. Biome vs ESLint vs Oxlint). + * 5. Execution ordering is deterministic: lint before format for safety and consistency, or toolchain standard. + */ +export async function planExecution( + registry: AutofixRegistry, + context: ProjectContext, + mode: ExecutionMode = "fix", +): Promise { + const selectedTools: Array<{ id: string; name: string; reason?: string }> = []; + const skippedTools: Array<{ id: string; name: string; reason: string }> = []; + const tasks: ExecutionTask[] = []; + + const providers = registry.getProviders(); + + // Track covered capabilities per language to prevent duplicate runs + const coveredCapabilities = new Map>(); + + for (const provider of providers) { + const isDetected = await provider.detect(context); + if (!isDetected) { + continue; + } + + const providerCapabilities = new Set(); + coveredCapabilities.set(provider.id, providerCapabilities); + + const adapters = provider.getAdapters(context); + const candidateTools: CandidateTool[] = []; + + // Detect tools + for (const adapter of adapters) { + const result = await adapter.detect(context); + if (result.detected) { + candidateTools.push({ adapter, reason: result.reason }); + } else if (result.reason && !result.reason.startsWith("no ")) { + // Reason worth logging as skipped (e.g. dependency present without configuration) + skippedTools.push({ id: adapter.id, name: adapter.name, reason: result.reason }); + } + } + + // Resolve conflicts among candidates for this provider + for (const candidate of candidateTools) { + const adapter = candidate.adapter; + const capabilities = adapter.capabilities; + + // Check if any capability is already covered by a higher priority tool + const hasAutofixCovered = providerCapabilities.has("autofix"); + const hasFormatCovered = providerCapabilities.has("format"); + const hasLintCovered = providerCapabilities.has("lint"); + + if (capabilities.includes("autofix")) { + if (hasAutofixCovered || (hasFormatCovered && hasLintCovered)) { + skippedTools.push({ + id: adapter.id, + name: adapter.name, + reason: "overlapping capabilities already covered by higher priority tool", + }); + continue; + } + } + + if ( + capabilities.length === 1 && + capabilities[0] === "format" && + (hasAutofixCovered || hasFormatCovered) + ) { + skippedTools.push({ + id: adapter.id, + name: adapter.name, + reason: "formatting capability already covered by higher priority tool", + }); + continue; + } + + if ( + capabilities.length === 1 && + capabilities[0] === "lint" && + (hasAutofixCovered || hasLintCovered) + ) { + skippedTools.push({ + id: adapter.id, + name: adapter.name, + reason: "linting capability already covered by higher priority tool", + }); + continue; + } + + // Candidate is selected! + selectedTools.push({ id: adapter.id, name: adapter.name, reason: candidate.reason }); + for (const cap of capabilities) { + providerCapabilities.add(cap); + } + + const toolTasks = await adapter.plan(context, mode); + tasks.push(...toolTasks); + } + } + + // Standalone adapters if any + for (const adapter of registry.getStandaloneAdapters()) { + const result = await adapter.detect(context); + if (result.detected) { + selectedTools.push({ id: adapter.id, name: adapter.name, reason: result.reason }); + const toolTasks = await adapter.plan(context, mode); + tasks.push(...toolTasks); + } + } + + // Deduplicate tasks by task id + const deduplicatedTasks: ExecutionTask[] = []; + const seenTaskIds = new Set(); + for (const task of tasks) { + if (!seenTaskIds.has(task.id)) { + seenTaskIds.add(task.id); + deduplicatedTasks.push(task); + } + } + + // Generate explainable summary + const summary = formatExecutionPlanSummary( + registry, + context, + selectedTools, + skippedTools, + deduplicatedTasks, + ); + + return { + tasks: deduplicatedTasks, + selectedTools, + skippedTools, + summary, + }; +} + +export function formatExecutionPlanSummary( + registry: AutofixRegistry, + context: ProjectContext, + selectedTools: Array<{ id: string; name: string; reason?: string }>, + skippedTools: Array<{ id: string; name: string; reason: string }>, + tasks: ExecutionTask[], +): string { + const lines: string[] = []; + + lines.push("Detected environments:"); + const hasPy = context.hasPythonSource ?? false; + const hasJs = context.jsEnv?.hasPackageJson ?? false; + lines.push(` Python: ${hasPy}`); + lines.push(` JavaScript: ${hasJs}`); + + if (hasPy) { + lines.push(""); + lines.push("Python toolchain:"); + const pyTools = selectedTools.filter((t) => t.id === "ruff"); + if (pyTools.length > 0) { + lines.push(" Ruff: default tool"); + } else { + lines.push(" None"); + } + } + + if (hasJs) { + lines.push(""); + lines.push("JavaScript toolchain:"); + const jsSelected = selectedTools.filter((t) => t.id !== "ruff"); + for (const t of jsSelected) { + lines.push(` ${t.name}: selected`); + } + const jsSkipped = skippedTools.filter((t) => t.id !== "ruff"); + for (const t of jsSkipped) { + lines.push(` ${t.name}: skipped (${t.reason})`); + } + } + + lines.push(""); + lines.push("Execution plan:"); + if (tasks.length === 0) { + lines.push(" (no tasks to execute)"); + } else { + tasks.forEach((task, idx) => { + const desc = task.description || `${task.executable} ${task.args.join(" ")}`; + lines.push(` ${idx + 1}. ${desc}`); + }); + } + + if (skippedTools.length > 0) { + lines.push(""); + lines.push("Skipped:"); + for (const t of skippedTools) { + lines.push(` - ${t.name}: ${t.reason}`); + } + } + + return lines.join("\n"); +} diff --git a/src/autofix/providers/javascript.ts b/src/autofix/providers/javascript.ts new file mode 100644 index 00000000..65527032 --- /dev/null +++ b/src/autofix/providers/javascript.ts @@ -0,0 +1,45 @@ +import type { LanguageProvider, ProjectContext, ToolAdapter } from "../types.js"; + +import { JavaScriptScriptAdapter } from "../adapters/javascript/script-adapter.js"; +import { + BiomeAdapter, + EslintAdapter, + OxfmtAdapter, + OxlintAdapter, + PrettierAdapter, + VitePlusAdapter, +} from "../adapters/javascript/tools.js"; + +export class JavaScriptLanguageProvider implements LanguageProvider { + public readonly id = "javascript"; + public readonly name = "JavaScript/TypeScript"; + + private scriptAdapter = new JavaScriptScriptAdapter(); + private vitePlusAdapter = new VitePlusAdapter(); + private biomeAdapter = new BiomeAdapter(); + private prettierAdapter = new PrettierAdapter(); + private eslintAdapter = new EslintAdapter(); + private oxlintAdapter = new OxlintAdapter(); + private oxfmtAdapter = new OxfmtAdapter(); + + public detect(context: ProjectContext): boolean { + return Boolean(context.jsEnv?.hasPackageJson); + } + + public getAdapters(_context: ProjectContext): ToolAdapter[] { + // Return all candidate adapters in precedence order: + // 1. Explicit scripts + // 2. Vite+ (project-native toolchain) + // 3. Biome (unified tool) + // 4. Prettier / ESLint / Oxlint / Oxfmt (specialized tools) + return [ + this.scriptAdapter, + this.vitePlusAdapter, + this.biomeAdapter, + this.oxfmtAdapter, + this.prettierAdapter, + this.oxlintAdapter, + this.eslintAdapter, + ]; + } +} diff --git a/src/autofix/providers/python.ts b/src/autofix/providers/python.ts new file mode 100644 index 00000000..f9a081ef --- /dev/null +++ b/src/autofix/providers/python.ts @@ -0,0 +1,19 @@ +import type { LanguageProvider, ProjectContext, ToolAdapter } from "../types.js"; + +import { hasPythonSource } from "../../python-env.js"; +import { RuffAdapter } from "../adapters/python/ruff.js"; + +export class PythonLanguageProvider implements LanguageProvider { + public readonly id = "python"; + public readonly name = "Python"; + + private ruffAdapter = new RuffAdapter(); + + public detect(context: ProjectContext): boolean { + return context.hasPythonSource ?? hasPythonSource(context.cwd); + } + + public getAdapters(_context: ProjectContext): ToolAdapter[] { + return [this.ruffAdapter]; + } +} diff --git a/src/autofix/registry.ts b/src/autofix/registry.ts new file mode 100644 index 00000000..d79a8a47 --- /dev/null +++ b/src/autofix/registry.ts @@ -0,0 +1,49 @@ +import type { LanguageProvider, ToolAdapter } from "./types.js"; + +import { JavaScriptLanguageProvider } from "./providers/javascript.js"; +import { PythonLanguageProvider } from "./providers/python.js"; + +export class AutofixRegistry { + private providers: Map = new Map(); + private standaloneAdapters: Map = new Map(); + + public registerProvider(provider: LanguageProvider): void { + this.providers.set(provider.id, provider); + } + + public getProvider(id: string): LanguageProvider | undefined { + return this.providers.get(id); + } + + public getProviders(): LanguageProvider[] { + return Array.from(this.providers.values()); + } + + public registerAdapter(adapter: ToolAdapter): void { + this.standaloneAdapters.set(adapter.id, adapter); + } + + public getAdapter(id: string): ToolAdapter | undefined { + return this.standaloneAdapters.get(id); + } + + public getStandaloneAdapters(): ToolAdapter[] { + return Array.from(this.standaloneAdapters.values()); + } + + public clear(): void { + this.providers.clear(); + this.standaloneAdapters.clear(); + } +} + +export function createDefaultRegistry(): AutofixRegistry { + const registry = new AutofixRegistry(); + // Python provider with Ruff default toolchain + registry.registerProvider(new PythonLanguageProvider()); + // JavaScript/TypeScript provider with hybrid detection + registry.registerProvider(new JavaScriptLanguageProvider()); + return registry; +} + +export const defaultRegistry = createDefaultRegistry(); diff --git a/src/autofix/types.ts b/src/autofix/types.ts new file mode 100644 index 00000000..88ac4dda --- /dev/null +++ b/src/autofix/types.ts @@ -0,0 +1,58 @@ +import type { JsProjectEnvironment, SupportedPackageManager } from "../javascript-env.js"; +import type { PythonPackageManagerInfo, PythonProjectContext } from "../python-env.js"; + +export type Capability = "lint" | "format" | "typecheck" | "autofix"; + +export type ExecutionMode = "fix" | "check"; + +export interface ExecutionTask { + id: string; + toolId: string; + capability: Capability; + executable: string; + args: string[]; + cwd: string; + mode: ExecutionMode; + env?: Record; + description?: string; +} + +export interface ProjectContext { + cwd: string; + jsEnv?: JsProjectEnvironment; + jsPm?: SupportedPackageManager; + pyCtx?: PythonProjectContext; + pyPmInfo?: PythonPackageManagerInfo | null; + hasPythonSource?: boolean; +} + +export interface AdapterDetectionResult { + detected: boolean; + reason?: string; +} + +export interface ToolAdapter { + id: string; + name: string; + capabilities: Capability[]; + + detect(context: ProjectContext): Promise | AdapterDetectionResult; + + plan(context: ProjectContext, mode: ExecutionMode): Promise | ExecutionTask[]; +} + +export interface LanguageProvider { + id: string; + name: string; + + detect(context: ProjectContext): Promise | boolean; + + getAdapters(context: ProjectContext): ToolAdapter[]; +} + +export interface PlannedExecution { + tasks: ExecutionTask[]; + selectedTools: Array<{ id: string; name: string; reason?: string }>; + skippedTools: Array<{ id: string; name: string; reason: string }>; + summary: string; +} diff --git a/src/python-env.ts b/src/python-env.ts index 04f07eaa..df04bfd2 100644 --- a/src/python-env.ts +++ b/src/python-env.ts @@ -808,289 +808,6 @@ function detectPipFromContext(ctx: PythonProjectContext): PythonPackageManagerIn }; } -const RUFF_SPECIFIER_REGEX = /^ruff\s*(?:\[[^\]]*\])?\s*(?:[=<>!~@;]|\s|$)/i; - -function inspectRuffInSpecifierArray(arr: unknown[]): { declared: boolean } | undefined { - for (const item of arr) { - if (typeof item === "string") { - const trimmed = item.trim(); - if (RUFF_SPECIFIER_REGEX.test(trimmed)) { - return { declared: true }; - } - } else if (isObject(item)) { - const pkgName = - typeof item.package === "string" - ? item.package - : typeof item.name === "string" - ? item.name - : undefined; - if (pkgName && pkgName.toLowerCase() === "ruff") { - return { declared: true }; - } - } - } - return undefined; -} - -function inspectRuffInDependencyMap( - map: Record, -): { declared: boolean } | undefined { - for (const key of Object.keys(map)) { - if (key.toLowerCase() === "ruff") { - return { declared: true }; - } - } - return undefined; -} - -function inspectPep621Ruff(project: Record) { - if (Array.isArray(project.dependencies)) { - const res = inspectRuffInSpecifierArray(project.dependencies); - if (res) return res; - } - if (isObject(project["optional-dependencies"])) { - for (const group of Object.values(project["optional-dependencies"])) { - if (Array.isArray(group)) { - const res = inspectRuffInSpecifierArray(group); - if (res) return res; - } - } - } - return undefined; -} - -function inspectPep735Ruff(depGroups: Record) { - for (const group of Object.values(depGroups)) { - if (Array.isArray(group)) { - const res = inspectRuffInSpecifierArray(group); - if (res) return res; - } - } - return undefined; -} - -function inspectToolUvRuff(uv: Record) { - for (const key of ["dev-dependencies", "override-dependencies", "constraint-dependencies"]) { - if (Array.isArray(uv[key])) { - const res = inspectRuffInSpecifierArray(uv[key] as unknown[]); - if (res) return res; - } - } - return undefined; -} - -function inspectPoetryRuff(poetry: Record) { - if (isObject(poetry.dependencies)) { - const res = inspectRuffInDependencyMap(poetry.dependencies); - if (res) return res; - } - if (isObject(poetry["dev-dependencies"])) { - const res = inspectRuffInDependencyMap(poetry["dev-dependencies"]); - if (res) return res; - } - if (isObject(poetry.group)) { - for (const grpObj of Object.values(poetry.group)) { - if (isObject(grpObj) && isObject(grpObj.dependencies)) { - const res = inspectRuffInDependencyMap(grpObj.dependencies); - if (res) return res; - } - } - } - return undefined; -} - -function inspectPdmRuff(pdm: Record) { - if (isObject(pdm["dev-dependencies"])) { - for (const grp of Object.values(pdm["dev-dependencies"])) { - if (Array.isArray(grp)) { - const res = inspectRuffInSpecifierArray(grp); - if (res) return res; - } - } - } - return undefined; -} - -function inspectHatchRuff(hatch: Record) { - if (isObject(hatch.envs)) { - for (const envObj of Object.values(hatch.envs)) { - if (isObject(envObj)) { - if (Array.isArray(envObj.dependencies)) { - const res = inspectRuffInSpecifierArray(envObj.dependencies); - if (res) return res; - } - if (Array.isArray(envObj["extra-dependencies"])) { - const res = inspectRuffInSpecifierArray(envObj["extra-dependencies"]); - if (res) return res; - } - } - } - } - return undefined; -} - -function inspectPixiRuff(pixi: Record) { - if (isObject(pixi.dependencies)) { - const res = inspectRuffInDependencyMap(pixi.dependencies); - if (res) return res; - } - if (isObject(pixi["dev-dependencies"])) { - const res = inspectRuffInDependencyMap(pixi["dev-dependencies"]); - if (res) return res; - } - if (isObject(pixi.feature)) { - for (const featObj of Object.values(pixi.feature)) { - if (isObject(featObj)) { - if (isObject(featObj.dependencies)) { - const res = inspectRuffInDependencyMap(featObj.dependencies); - if (res) return res; - } - if (isObject(featObj["dev-dependencies"])) { - const res = inspectRuffInDependencyMap(featObj["dev-dependencies"]); - if (res) return res; - } - } - } - } - return undefined; -} - -function inspectToolRuff(tool: Record) { - if (isObject(tool.uv)) { - const res = inspectToolUvRuff(tool.uv); - if (res) return res; - } - if (isObject(tool.poetry)) { - const res = inspectPoetryRuff(tool.poetry); - if (res) return res; - } - if (isObject(tool.pdm)) { - const res = inspectPdmRuff(tool.pdm); - if (res) return res; - } - if (isObject(tool.hatch)) { - const res = inspectHatchRuff(tool.hatch); - if (res) return res; - } - if (isObject(tool.pixi)) { - const res = inspectPixiRuff(tool.pixi); - if (res) return res; - } - return undefined; -} - -/** - * Inspects pyproject.toml data strictly in supported runtime/dev dependency declarations - * (PEP 621, PEP 735, tool.uv, Poetry, PDM, Hatch, Pixi). Note: build-system.requires is excluded - * because build backend requirements are build-time tools, not project linting workflow dependencies. - */ -export function findRuffDependencyInToml(parsed: Record): { - declared: boolean; -} { - // 1. PEP 621 project.dependencies & project.optional-dependencies - if (isObject(parsed.project)) { - const res = inspectPep621Ruff(parsed.project); - if (res) return res; - } - - // 2. PEP 735 dependency-groups - if (isObject(parsed["dependency-groups"])) { - const res = inspectPep735Ruff(parsed["dependency-groups"]); - if (res) return res; - } - - // 3. tool table - if (isObject(parsed.tool)) { - const res = inspectToolRuff(parsed.tool); - if (res) return res; - } - - return { declared: false }; -} - -function checkRuffInUvLock(cwd: string): boolean { - const uvLockPath = path.join(cwd, "uv.lock"); - if (!fs.existsSync(uvLockPath)) return false; - try { - const content = fs.readFileSync(uvLockPath, "utf8"); - const blocks = content.split(/^\[\[package\]\]/m); - for (const block of blocks) { - if (/^\s*name\s*=\s*["']ruff["']/m.test(block)) { - return true; - } - } - } catch { - // Ignore read error - } - return false; -} - -function checkRuffInRequirements(cwd: string): boolean { - const reqPath = path.join(cwd, "requirements.txt"); - if (!fs.existsSync(reqPath)) return false; - try { - const content = fs.readFileSync(reqPath, "utf8"); - const stripped = content.replace(/#.*/g, ""); - if (/^\s*ruff\b/im.test(stripped)) { - return true; - } - } catch { - // Ignore read error - } - return false; -} - -/** - * Checks whether Ruff dependency is declared in project configuration using an existing context. - */ -function isRuffDeclaredInContext( - ctx: PythonProjectContext, - pmInfo?: PythonPackageManagerInfo, - pyprojectToml?: ParsedToml | null, -): boolean { - if (pmInfo?.isStandalone) return false; - - if (checkRuffInUvLock(ctx.uvLockDir || ctx.cwd)) return true; - - const parsedPyproject = - pyprojectToml !== undefined && pyprojectToml !== null ? pyprojectToml : ctx.pyprojectToml; - - if (parsedPyproject?.success === true) { - const dep = findRuffDependencyInToml(parsedPyproject.data); - if (dep.declared) { - return true; - } - } - - if (ctx.workspaceRootToml?.success === true) { - const dep = findRuffDependencyInToml(ctx.workspaceRootToml.data); - if (dep.declared) { - return true; - } - } - - if (ctx.uvToml?.success === true) { - const dep = findRuffDependencyInToml(ctx.uvToml.data); - if (dep.declared) { - return true; - } - } - - if (checkRuffInRequirements(ctx.requirementsDir || ctx.cwd)) return true; - - return false; -} - -export function isRuffDeclaredInProject( - cwd: string = process.cwd(), - pmInfo?: PythonPackageManagerInfo, - pyprojectToml?: ParsedToml | null, -): boolean { - if (pmInfo?.isStandalone) return false; - const ctx = findPythonProjectContext(cwd); - return isRuffDeclaredInContext(ctx, pmInfo, pyprojectToml); -} - /** * Determines whether a directory contains a Python project, optionally reusing precomputed context and source check. */ @@ -1111,9 +828,6 @@ export function hasPythonProject( if (isUvProjectConfigPresent(ctx.pyprojectToml.data, ctx.pyprojectToml.rawContent)) { return true; } - if (isRuffDeclaredInContext(ctx, undefined, ctx.pyprojectToml)) { - return true; - } } if (ctx.hasUvLock || ctx.hasRequirementsTxt || ctx.hasSetupPy || ctx.hasSetupCfg) { return true; diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts new file mode 100644 index 00000000..39f2f2a7 --- /dev/null +++ b/tests/autofix-architecture.test.ts @@ -0,0 +1,420 @@ +import * as core from "@actions/core"; +import * as exec from "@actions/exec"; +import * as io from "@actions/io"; +import fs from "node:fs"; +import os from "node:os"; +import path from "node:path"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vite-plus/test"; + +import type { + ExecutionMode, + ExecutionTask, + LanguageProvider, + ProjectContext, + ToolAdapter, +} from "../src/autofix/types.js"; + +import { ExecutionEngine } from "../src/autofix/engine.js"; +import { run } from "../src/autofix/index.js"; +import { planExecution } from "../src/autofix/planner.js"; +import { AutofixRegistry, createDefaultRegistry } from "../src/autofix/registry.js"; + +vi.mock("@actions/exec"); +vi.mock("@actions/core"); +vi.mock("@actions/io"); + +describe("Refactored Autofix Architecture & Tool Adapters", () => { + let tempDir: string; + const originalEnv = { ...process.env }; + const originalCwd = process.cwd(); + + beforeEach(() => { + vi.restoreAllMocks(); + vi.clearAllMocks(); + vi.mocked(exec.exec).mockReset(); + vi.mocked(exec.exec).mockResolvedValue(0); + tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "autofix-arch-test-")); + process.chdir(tempDir); + process.env = { ...originalEnv }; + }); + + afterEach(() => { + process.chdir(originalCwd); + process.env = { ...originalEnv }; + if (fs.existsSync(tempDir)) { + fs.rmSync(tempDir, { recursive: true, force: true }); + } + }); + + describe("Python: Ruff as Default Toolchain", () => { + it("activates Ruff when Python source is detected, even without pyproject.toml, lockfiles, or scripts", async () => { + vi.spyOn(io, "which").mockResolvedValue("/usr/bin/ruff"); + fs.writeFileSync(path.join(tempDir, "script.py"), "print('hello')\n"); + + await run(tempDir); + + expect(exec.exec).toHaveBeenCalledWith( + "ruff", + ["check", "--fix", "."], + expect.objectContaining({ cwd: tempDir }), + ); + expect(exec.exec).toHaveBeenCalledWith( + "ruff", + ["format", "."], + expect.objectContaining({ cwd: tempDir }), + ); + }); + + it("does not install Ruff through uv or pip, preserving astral-sh/ruff-action provisioning", async () => { + vi.spyOn(io, "which").mockResolvedValue("/usr/bin/ruff"); + fs.writeFileSync(path.join(tempDir, "script.py"), "print('hello')\n"); + fs.writeFileSync(path.join(tempDir, "requirements.txt"), "requests==2.31.0\n"); + + await run(tempDir); + + expect(exec.exec).not.toHaveBeenCalledWith( + "pip", + expect.arrayContaining(["install", "ruff"]), + expect.anything(), + ); + expect(exec.exec).not.toHaveBeenCalledWith( + "uv", + expect.arrayContaining(["add", "ruff"]), + expect.anything(), + ); + }); + + it("keeps lint and format as separate capabilities in plan", async () => { + vi.spyOn(io, "which").mockResolvedValue("/usr/bin/ruff"); + const registry = createDefaultRegistry(); + const plan = await planExecution(registry, { cwd: tempDir, hasPythonSource: true }, "fix"); + + const ruffTasks = plan.tasks.filter((t) => t.toolId === "ruff"); + expect(ruffTasks).toHaveLength(2); + expect(ruffTasks[0].capability).toBe("lint"); + expect(ruffTasks[0].args).toEqual(["check", "--fix", "."]); + expect(ruffTasks[1].capability).toBe("format"); + expect(ruffTasks[1].args).toEqual(["format", "."]); + }); + }); + + describe("JavaScript/TypeScript: Hybrid Detection & Precedence", () => { + it("respects explicit script conventions: 'check:fix' as combined autofix", async () => { + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + "check:fix": "biome check --write .", + }, + }), + ); + + await run(tempDir); + + expect(exec.exec).toHaveBeenCalledWith( + "npm", + ["run", "check:fix"], + expect.objectContaining({ cwd: tempDir }), + ); + }); + + it("respects explicit script conventions: 'format:write' and 'lint:fix'", async () => { + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }, + }), + ); + + await run(tempDir); + + expect(exec.exec).toHaveBeenCalledWith( + "npm", + ["run", "format:write"], + expect.objectContaining({ cwd: tempDir }), + ); + expect(exec.exec).toHaveBeenCalledWith( + "npm", + ["run", "lint:fix"], + expect.objectContaining({ cwd: tempDir }), + ); + }); + + it("does NOT execute 'check', 'test', or 'typecheck' scripts as autofix commands in fix mode", async () => { + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + check: "tsc --noEmit", + test: "vitest run", + typecheck: "tsc", + }, + }), + ); + + await run(tempDir); + + expect(exec.exec).not.toHaveBeenCalled(); + expect(core.info).toHaveBeenCalledWith( + "No matching scripts (fix, format, lint, check, etc.) found in package.json.", + ); + }); + }); + + describe("Tool Adapters Detection & Safety", () => { + it("detects Prettier when dependency AND configuration file exist, executing tool directly if scripts absent", async () => { + vi.spyOn(io, "which").mockResolvedValue("/usr/bin/prettier"); + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + devDependencies: { prettier: "^3.0.0" }, + }), + ); + fs.writeFileSync(path.join(tempDir, ".prettierrc.json"), "{}"); + + await run(tempDir); + + expect(exec.exec).toHaveBeenCalledWith( + "prettier", + ["--write", "."], + expect.objectContaining({ cwd: tempDir }), + ); + }); + + it("does NOT execute Prettier if installed as dependency without configuration", async () => { + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + devDependencies: { prettier: "^3.0.0" }, + }), + ); + + await run(tempDir); + + expect(exec.exec).not.toHaveBeenCalled(); + expect(core.info).toHaveBeenCalledWith( + "No matching scripts (fix, format, lint, check, etc.) found in package.json.", + ); + }); + + it("detects ESLint when dependency and configuration file exist", async () => { + vi.spyOn(io, "which").mockResolvedValue("/usr/bin/eslint"); + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + devDependencies: { eslint: "^9.0.0" }, + }), + ); + fs.writeFileSync(path.join(tempDir, "eslint.config.js"), "export default [];\n"); + + await run(tempDir); + + expect(exec.exec).toHaveBeenCalledWith( + "eslint", + ["--fix", "."], + expect.objectContaining({ cwd: tempDir }), + ); + }); + + it("detects Biome when dependency and biome.json exist", async () => { + vi.spyOn(io, "which").mockResolvedValue("/usr/bin/biome"); + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + devDependencies: { "@biomejs/biome": "^1.8.0" }, + }), + ); + fs.writeFileSync(path.join(tempDir, "biome.json"), "{}"); + + await run(tempDir); + + expect(exec.exec).toHaveBeenCalledWith( + "biome", + ["check", "--write", "."], + expect.objectContaining({ cwd: tempDir }), + ); + }); + + it("resolves conflicts deterministically: explicit script suppresses inferred tool adapters", async () => { + vi.spyOn(io, "which").mockResolvedValue("/usr/bin/prettier"); + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + format: "custom-fmt .", + }, + devDependencies: { prettier: "^3.0.0" }, + }), + ); + fs.writeFileSync(path.join(tempDir, ".prettierrc"), "{}"); + + await run(tempDir); + + expect(exec.exec).toHaveBeenCalledWith( + "npm", + ["run", "format"], + expect.objectContaining({ cwd: tempDir }), + ); + expect(exec.exec).not.toHaveBeenCalledWith("prettier", expect.anything(), expect.anything()); + }); + + it("resolves conflicts deterministically: Biome covers format + lint and skips Prettier & ESLint", async () => { + vi.spyOn(io, "which").mockResolvedValue("/usr/bin/biome"); + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + devDependencies: { + "@biomejs/biome": "^1.8.0", + prettier: "^3.0.0", + eslint: "^9.0.0", + }, + }), + ); + fs.writeFileSync(path.join(tempDir, "biome.json"), "{}"); + fs.writeFileSync(path.join(tempDir, ".prettierrc"), "{}"); + fs.writeFileSync(path.join(tempDir, "eslint.config.js"), "export default [];"); + + const registry = createDefaultRegistry(); + const plan = await planExecution( + registry, + { + cwd: tempDir, + jsEnv: { + hasPackageJson: true, + packageJson: { + devDependencies: { + "@biomejs/biome": "^1.8.0", + prettier: "^3.0.0", + eslint: "^9.0.0", + }, + }, + hasBunVersionFile: false, + hasNodeVersionFile: false, + hasPnpmLock: false, + hasPackageLock: true, + hasBunLock: false, + }, + jsPm: "npm", + }, + "fix", + ); + + expect(plan.selectedTools.map((t) => t.id)).toContain("biome"); + expect(plan.skippedTools.map((t) => t.id)).toContain("prettier"); + expect(plan.skippedTools.map((t) => t.id)).toContain("eslint"); + expect(plan.tasks).toHaveLength(1); + expect(plan.tasks[0].executable).toBe("biome"); + }); + }); + + describe("Explainable Execution Plan", () => { + it("produces structured and human-readable execution plan summary", async () => { + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }, + }), + ); + fs.writeFileSync(path.join(tempDir, "script.py"), "print('hello')\n"); + vi.spyOn(io, "which").mockResolvedValue("/usr/bin/ruff"); + + const registry = createDefaultRegistry(); + const plan = await planExecution( + registry, + { + cwd: tempDir, + hasPythonSource: true, + jsEnv: { + hasPackageJson: true, + packageJson: { + scripts: { + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }, + }, + hasBunVersionFile: false, + hasNodeVersionFile: false, + hasPnpmLock: false, + hasPackageLock: true, + hasBunLock: false, + }, + jsPm: "npm", + }, + "fix", + ); + + expect(plan.summary).toContain("Detected environments:"); + expect(plan.summary).toContain("Python: true"); + expect(plan.summary).toContain("JavaScript: true"); + expect(plan.summary).toContain("Ruff: default tool"); + expect(plan.summary).toContain("Execution plan:"); + expect(plan.summary).toContain("Ruff: lint autofix"); + expect(plan.summary).toContain("Ruff: format"); + expect(plan.summary).toContain("package.json scripts: selected"); + }); + }); + + describe("Registry Extensibility", () => { + it("allows adding a new language provider and tool adapter without modifying the core orchestrator", async () => { + const registry = new AutofixRegistry(); + + class MockRustAdapter implements ToolAdapter { + id = "rustfmt"; + name = "rustfmt"; + capabilities: ["format"] = ["format"]; + detect() { + return { detected: true, reason: "rustfmt.toml detected" }; + } + plan(ctx: ProjectContext, mode: ExecutionMode): ExecutionTask[] { + return [ + { + id: "rustfmt", + toolId: this.id, + capability: "format", + executable: "cargo", + args: ["fmt"], + cwd: ctx.cwd, + mode, + description: "cargo fmt", + }, + ]; + } + } + + class MockRustProvider implements LanguageProvider { + id = "rust"; + name = "Rust"; + detect(_context: ProjectContext) { + return true; + } + getAdapters(_context: ProjectContext) { + return [new MockRustAdapter()]; + } + } + + registry.registerProvider(new MockRustProvider()); + + const plan = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(plan.selectedTools[0].id).toBe("rustfmt"); + expect(plan.tasks[0].executable).toBe("cargo"); + expect(plan.tasks[0].args).toEqual(["fmt"]); + + const engine = new ExecutionEngine(); + vi.mocked(exec.exec).mockResolvedValue(0); + const results = await engine.executeTasks(plan.tasks); + expect(results).toHaveLength(1); + expect(results[0].exitCode).toBe(0); + expect(exec.exec).toHaveBeenCalledWith( + "cargo", + ["fmt"], + expect.objectContaining({ cwd: tempDir }), + ); + }); + }); +}); diff --git a/tests/autofix.test.ts b/tests/autofix.test.ts index 9afdd9ef..0ef538fe 100644 --- a/tests/autofix.test.ts +++ b/tests/autofix.test.ts @@ -221,7 +221,7 @@ describe("autofix", () => { it("should preserve updated package-lock.json when npm install synchronizes dependencies", async () => { fs.writeFileSync( path.join(tempDir, "package.json"), - JSON.stringify({ scripts: { check: "echo check" } }), + JSON.stringify({ scripts: { fix: "echo fix" } }), ); fs.writeFileSync( path.join(tempDir, "package-lock.json"), @@ -247,7 +247,7 @@ describe("autofix", () => { ); expect(exec.exec).toHaveBeenCalledWith( "npm", - ["run", "check"], + ["run", "fix"], expect.objectContaining({ cwd: tempDir }), ); const updatedLock = JSON.parse( @@ -261,7 +261,7 @@ describe("autofix", () => { process.env.PACKAGE_MANAGER = "pnpm"; fs.writeFileSync( path.join(tempDir, "package.json"), - JSON.stringify({ scripts: { check: "echo check" } }), + JSON.stringify({ scripts: { fix: "echo fix" } }), ); fs.writeFileSync(path.join(tempDir, "pnpm-lock.yaml"), "lockfileVersion: '6.0'"); @@ -291,7 +291,7 @@ describe("autofix", () => { process.env.PACKAGE_MANAGER = "bun"; fs.writeFileSync( path.join(tempDir, "package.json"), - JSON.stringify({ scripts: { check: "echo check" } }), + JSON.stringify({ scripts: { fix: "echo fix" } }), ); fs.writeFileSync(path.join(tempDir, "bun.lock"), "old bun lock content"); @@ -366,7 +366,7 @@ describe("autofix", () => { it("should execute commands with explicit custom working directory and support paths with spaces", async () => { fs.writeFileSync( path.join(tempDir, "package.json"), - JSON.stringify({ scripts: { check: "echo check" } }), + JSON.stringify({ scripts: { fix: "echo fix" } }), ); fs.writeFileSync(path.join(tempDir, "package-lock.json"), "{}"); @@ -380,7 +380,7 @@ describe("autofix", () => { ); expect(exec.exec).toHaveBeenCalledWith( "npm", - ["run", "check"], + ["run", "fix"], expect.objectContaining({ cwd: tempDir }), ); }); @@ -389,7 +389,7 @@ describe("autofix", () => { process.env.PACKAGE_MANAGER = "pnpm"; fs.writeFileSync( path.join(tempDir, "package.json"), - JSON.stringify({ scripts: { check: "echo check" } }), + JSON.stringify({ scripts: { fix: "echo fix" } }), ); fs.writeFileSync(path.join(tempDir, "pnpm-lock.yaml"), ""); @@ -405,7 +405,7 @@ describe("autofix", () => { ); expect(exec.exec).toHaveBeenCalledWith( "pnpm", - ["run", "check"], + ["run", "fix"], expect.objectContaining({ cwd: tempDir }), ); }); @@ -414,7 +414,7 @@ describe("autofix", () => { process.env.PACKAGE_MANAGER = "bun"; fs.writeFileSync( path.join(tempDir, "package.json"), - JSON.stringify({ scripts: { check: "echo check" } }), + JSON.stringify({ scripts: { fix: "echo fix" } }), ); fs.writeFileSync(path.join(tempDir, "bun.lock"), ""); @@ -428,7 +428,7 @@ describe("autofix", () => { ); expect(exec.exec).toHaveBeenCalledWith( "bun", - ["run", "check"], + ["run", "fix"], expect.objectContaining({ cwd: tempDir }), ); }); @@ -452,7 +452,7 @@ describe("autofix", () => { it("should set workflow failed when JS dependency installation fails", async () => { fs.writeFileSync( path.join(tempDir, "package.json"), - JSON.stringify({ scripts: { check: "echo check" } }), + JSON.stringify({ scripts: { fix: "echo fix" } }), ); fs.writeFileSync(path.join(tempDir, "package-lock.json"), "{}"); @@ -593,7 +593,7 @@ describe("autofix", () => { const mixedTempDir = fs.mkdtempSync(path.join(os.tmpdir(), "workflows-autofix-mixed-")); fs.writeFileSync( path.join(mixedTempDir, "package.json"), - JSON.stringify({ scripts: { check: "npm run check" } }), + JSON.stringify({ scripts: { fix: "npm run fix" } }), ); fs.writeFileSync(path.join(mixedTempDir, "main.py"), "print('mixed')\n"); fs.writeFileSync(path.join(mixedTempDir, "requirements.txt"), "requests==2.31.0\n"); @@ -601,10 +601,10 @@ describe("autofix", () => { try { await run(mixedTempDir); - expect(core.info).toHaveBeenCalledWith("Executing: npm run check"); + expect(core.info).toHaveBeenCalledWith("Executing: npm run fix"); expect(exec.exec).toHaveBeenCalledWith( "npm", - ["run", "check"], + ["run", "fix"], expect.objectContaining({ cwd: mixedTempDir }), ); expect(exec.exec).toHaveBeenCalledWith( @@ -935,12 +935,12 @@ describe("autofix", () => { const scriptCases = [ { name: "fix script priority over all", - scripts: { fix: "echo fix", format: "echo format", lint: "echo lint", check: "echo check" }, + scripts: { fix: "echo fix", format: "echo format", lint: "echo lint" }, expectedCalls: [["npm", ["run", "fix"]]], }, { name: "format and lint scripts when fix is absent", - scripts: { format: "echo format", lint: "echo lint", check: "echo check" }, + scripts: { format: "echo format", lint: "echo lint" }, expectedCalls: [ ["npm", ["run", "format"]], ["npm", ["run", "lint"]], @@ -971,8 +971,8 @@ describe("autofix", () => { }, { name: "check script as lowest priority fallback", - scripts: { check: "echo check" }, - expectedCalls: [["npm", ["run", "check"]]], + scripts: { fix: "echo fix" }, + expectedCalls: [["npm", ["run", "fix"]]], }, ]; @@ -1015,14 +1015,14 @@ describe("autofix", () => { vi.spyOn(fs, "readFileSync").mockReturnValue( JSON.stringify({ scripts: { - check: "echo check", + fix: "echo fix", }, }) as any, ); await run(); - expect(core.info).toHaveBeenCalledWith("Executing: npm run check"); + expect(core.info).toHaveBeenCalledWith("Executing: npm run fix"); expect(exec.exec).toHaveBeenCalledWith( "npm", ["install"], @@ -1030,7 +1030,7 @@ describe("autofix", () => { ); expect(exec.exec).toHaveBeenCalledWith( "npm", - ["run", "check"], + ["run", "fix"], expect.objectContaining({ cwd: process.cwd() }), ); expect(exec.exec).toHaveBeenCalledTimes(2); @@ -1080,17 +1080,17 @@ describe("autofix", () => { vi.spyOn(fs, "readFileSync").mockReturnValue( JSON.stringify({ scripts: { - check: "echo pnpm check", + fix: "echo pnpm fix", }, }) as any, ); await run(); - expect(core.info).toHaveBeenCalledWith("Executing: pnpm run check"); + expect(core.info).toHaveBeenCalledWith("Executing: pnpm run fix"); expect(exec.exec).toHaveBeenCalledWith( "pnpm", - ["run", "check"], + ["run", "fix"], expect.objectContaining({ cwd: process.cwd() }), ); }); @@ -1103,17 +1103,17 @@ describe("autofix", () => { vi.spyOn(fs, "readFileSync").mockReturnValue( JSON.stringify({ scripts: { - check: "echo bun check", + fix: "echo bun fix", }, }) as any, ); await run(); - expect(core.info).toHaveBeenCalledWith("Executing: bun run check"); + expect(core.info).toHaveBeenCalledWith("Executing: bun run fix"); expect(exec.exec).toHaveBeenCalledWith( "bun", - ["run", "check"], + ["run", "fix"], expect.objectContaining({ cwd: process.cwd() }), ); }); @@ -1126,17 +1126,17 @@ describe("autofix", () => { vi.spyOn(fs, "readFileSync").mockReturnValue( JSON.stringify({ scripts: { - check: "echo check", + fix: "echo fix", }, }) as any, ); await run(); - expect(core.info).toHaveBeenCalledWith("Executing: npm run check"); + expect(core.info).toHaveBeenCalledWith("Executing: npm run fix"); expect(exec.exec).toHaveBeenCalledWith( "npm", - ["run", "check"], + ["run", "fix"], expect.objectContaining({ cwd: process.cwd() }), ); }); @@ -1181,7 +1181,7 @@ describe("autofix", () => { vi.spyOn(fs, "readFileSync").mockReturnValue( JSON.stringify({ scripts: { - check: "exit 1", + fix: "exit 1", }, }) as any, ); @@ -1190,7 +1190,7 @@ describe("autofix", () => { await run(); expect(core.setFailed).toHaveBeenCalledWith( - 'Failed to run scripts: Script "check" failed while executing "npm run check".', + 'Failed to run scripts: Script "fix" failed while executing "npm run fix".', ); }); }); @@ -1292,7 +1292,7 @@ describe("autofix", () => { vi.spyOn(io, "which").mockImplementation(async (bin) => `/usr/bin/${bin}`); fs.writeFileSync( path.join(tempDir, "package.json"), - JSON.stringify({ scripts: { check: "echo check" } }), + JSON.stringify({ scripts: { fix: "echo fix" } }), ); fs.writeFileSync(path.join(tempDir, "main.py"), "print('hello')\n"); @@ -1305,7 +1305,7 @@ describe("autofix", () => { ); expect(exec.exec).toHaveBeenCalledWith( "npm", - ["run", "check"], + ["run", "fix"], expect.objectContaining({ cwd: tempDir }), ); expect(exec.exec).toHaveBeenCalledWith( @@ -1325,7 +1325,7 @@ describe("autofix", () => { vi.spyOn(io, "which").mockImplementation(async (bin) => `/usr/bin/${bin}`); fs.writeFileSync( path.join(tempDir, "package.json"), - JSON.stringify({ scripts: { check: "exit 1" } }), + JSON.stringify({ scripts: { fix: "exit 1" } }), ); fs.writeFileSync(path.join(tempDir, "main.py"), "print('hello')\n"); @@ -1338,7 +1338,7 @@ describe("autofix", () => { expect(exec.exec).toHaveBeenCalledWith( "npm", - ["run", "check"], + ["run", "fix"], expect.objectContaining({ cwd: tempDir }), ); expect(exec.exec).toHaveBeenCalledWith( @@ -1352,7 +1352,7 @@ describe("autofix", () => { expect.objectContaining({ cwd: tempDir }), ); expect(core.setFailed).toHaveBeenCalledWith( - expect.stringContaining('Script "check" failed while executing "npm run check".'), + expect.stringContaining('Script "fix" failed while executing "npm run fix".'), ); }); @@ -1360,7 +1360,7 @@ describe("autofix", () => { vi.spyOn(io, "which").mockImplementation(async (bin) => `/usr/bin/${bin}`); fs.writeFileSync( path.join(tempDir, "package.json"), - JSON.stringify({ scripts: { check: "echo check" } }), + JSON.stringify({ scripts: { fix: "echo fix" } }), ); fs.writeFileSync(path.join(tempDir, "main.py"), "print('hello')\n"); @@ -1378,7 +1378,7 @@ describe("autofix", () => { ); expect(exec.exec).toHaveBeenCalledWith( "npm", - ["run", "check"], + ["run", "fix"], expect.objectContaining({ cwd: tempDir }), ); expect(exec.exec).toHaveBeenCalledWith( @@ -1395,7 +1395,7 @@ describe("autofix", () => { vi.spyOn(io, "which").mockImplementation(async (bin) => `/usr/bin/${bin}`); fs.writeFileSync( path.join(tempDir, "package.json"), - JSON.stringify({ scripts: { check: "exit 1" } }), + JSON.stringify({ scripts: { fix: "exit 1" } }), ); fs.writeFileSync(path.join(tempDir, "main.py"), "print('hello')\n"); @@ -1409,7 +1409,7 @@ describe("autofix", () => { expect(exec.exec).toHaveBeenCalledWith( "npm", - ["run", "check"], + ["run", "fix"], expect.objectContaining({ cwd: tempDir }), ); expect(exec.exec).toHaveBeenCalledWith( @@ -1419,7 +1419,7 @@ describe("autofix", () => { ); expect(core.setFailed).toHaveBeenCalledWith( expect.stringMatching( - /Failed to run scripts: Script "check" failed while executing "npm run check"\.\nRuff command "ruff check --fix \." failed\./, + /Failed to run scripts: Script "fix" failed while executing "npm run fix"\.\nRuff command "ruff check --fix \." failed\./, ), ); }); @@ -1448,7 +1448,7 @@ describe("autofix", () => { process.env.JS_SETUP_OUTCOME = "failure"; fs.writeFileSync( path.join(tempDir, "package.json"), - JSON.stringify({ scripts: { check: "echo check" } }), + JSON.stringify({ scripts: { fix: "echo fix" } }), ); fs.writeFileSync(path.join(tempDir, "main.py"), "print('hello')\n"); @@ -1550,7 +1550,7 @@ describe("autofix", () => { fs.writeFileSync(userFile, "important user content"); fs.writeFileSync( path.join(tempDir, "package.json"), - JSON.stringify({ scripts: { check: "exit 1" } }), + JSON.stringify({ scripts: { fix: "exit 1" } }), ); vi.mocked(exec.exec).mockResolvedValueOnce(1); diff --git a/tests/python-env.test.ts b/tests/python-env.test.ts index b2e458ca..5ee6f38f 100644 --- a/tests/python-env.test.ts +++ b/tests/python-env.test.ts @@ -11,7 +11,6 @@ import { detectPythonPackageManager, findPythonProjectContext, hasPythonSource, - isRuffDeclaredInProject, parseToml, PYTHON_PACKAGE_MANAGER_PRIORITY, resolvePythonEnvironment, @@ -647,24 +646,6 @@ dev = ["pytest"] }); }); - describe("isRuffDeclaredInProject()", () => { - it("should detect ruff declared in pyproject.toml or requirements.txt", () => { - const projUv = createConsumerProjectInTmp({ type: "python-uv" }); - const projPip = createConsumerProjectInTmp({ type: "python-pip", ruffVersion: "0.17.2" }); - const projNone = createConsumerProjectInTmp({ type: "python-none" }); - - try { - expect(isRuffDeclaredInProject(projUv.dir)).toBe(true); - expect(isRuffDeclaredInProject(projPip.dir)).toBe(true); - expect(isRuffDeclaredInProject(projNone.dir)).toBe(false); - } finally { - projUv.cleanup(); - projPip.cleanup(); - projNone.cleanup(); - } - }); - }); - describe("PYTHON_PACKAGE_MANAGER_PRIORITY Constant", () => { it("should define priority order as uv > pip", () => { expect(PYTHON_PACKAGE_MANAGER_PRIORITY).toEqual(["uv", "pip"]); From a24c975c89f0a04fd6c0ed48df1b9d3048b8221a Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 6 Nov 2026 12:25:41 +0000 Subject: [PATCH 02/25] refactor(autofix): correct capability resolution and execution reliability --- .../autofix-tool-adapters-capability.md | 5 + autofix/README.md | 2 +- dist/autofix.mjs | 8 +- .../adapters/javascript/script-adapter.ts | 161 ++++++++----- src/autofix/adapters/javascript/tools.ts | 144 +++++++---- src/autofix/index.ts | 35 ++- src/autofix/planner.ts | 186 +++++++++------ src/autofix/types.ts | 4 +- tests/autofix-architecture.test.ts | 224 ++++++++---------- 9 files changed, 449 insertions(+), 320 deletions(-) create mode 100644 .changeset/autofix-tool-adapters-capability.md diff --git a/.changeset/autofix-tool-adapters-capability.md b/.changeset/autofix-tool-adapters-capability.md new file mode 100644 index 00000000..6ed1df39 --- /dev/null +++ b/.changeset/autofix-tool-adapters-capability.md @@ -0,0 +1,5 @@ +--- +"@area44/workflows": minor +--- + +Refactor autofix architecture with capability-aware tool adapters, default Python Ruff toolchain, hybrid script/tool detection, safe executable resolution, and aggregated error reporting. diff --git a/autofix/README.md b/autofix/README.md index a4e26ba6..e103b4e7 100644 --- a/autofix/README.md +++ b/autofix/README.md @@ -29,7 +29,7 @@ The `autofix` composite action automatically formats and fixes code across multi - Lint check: `lint`, `lint:check` - **Excluded Scripts:** Generic validation scripts such as `check`, `test`, and `typecheck` are strictly excluded from execution as autofix commands in fix mode. - **Tool Adapters:** When explicit scripts are absent or specialized, detects configured tools: - - **Vite+:** Project-native toolchain (`vp check --fix`). + - **Vite+:** Project-native toolchain (`vp fmt` and `vp lint --fix` in fix mode, avoiding unnecessary type-checking or validation). - **Biome:** Fast unified formatter and linter (`biome check --write .`). - **Prettier:** Code formatter (`prettier --write .`). - **ESLint:** Pluggable JavaScript/TypeScript linter (`eslint --fix .`). diff --git a/dist/autofix.mjs b/dist/autofix.mjs index 22309d97..f5d5a7d2 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -303,6 +303,8 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `?` `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}var kr=class{async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();en(`Executing: ${e}`);try{let r=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,i=await Yt(n.executable,n.args,{cwd:n.cwd,env:r,ignoreReturnCode:!0});if(i!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${i}.`;t.push({task:n,exitCode:i,error:Error(r)})}else t.push({task:n,exitCode:i})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};async function Ar(e,t,n=`fix`){let r=[],i=[],a=[],o=e.getProviders(),s=/* @__PURE__ */ new Map;for(let e of o){if(!await e.detect(t))continue;let o=/* @__PURE__ */ new Set;s.set(e.id,o);let c=e.getAdapters(t),l=[];for(let e of c){let n=await e.detect(t);n.detected?l.push({adapter:e,reason:n.reason}):n.reason&&!n.reason.startsWith(`no `)&&i.push({id:e.id,name:e.name,reason:n.reason})}for(let e of l){let s=e.adapter,c=s.capabilities,l=o.has(`autofix`),u=o.has(`format`),d=o.has(`lint`);if(c.includes(`autofix`)&&(l||u&&d)){i.push({id:s.id,name:s.name,reason:`overlapping capabilities already covered by higher priority tool`});continue}if(c.length===1&&c[0]===`format`&&(l||u)){i.push({id:s.id,name:s.name,reason:`formatting capability already covered by higher priority tool`});continue}if(c.length===1&&c[0]===`lint`&&(l||d)){i.push({id:s.id,name:s.name,reason:`linting capability already covered by higher priority tool`});continue}r.push({id:s.id,name:s.name,reason:e.reason});for(let e of c)o.add(e);let f=await s.plan(t,n);a.push(...f)}}for(let i of e.getStandaloneAdapters()){let e=await i.detect(t);if(e.detected){r.push({id:i.id,name:i.name,reason:e.reason});let o=await i.plan(t,n);a.push(...o)}}let c=[],l=/* @__PURE__ */ new Set;for(let e of a)l.has(e.id)||(l.add(e.id),c.push(e));return{tasks:c,selectedTools:r,skippedTools:i,summary:jr(e,t,r,i,c)}}function jr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` -`)}function Mr(e,t){let n=[];if(t===`fix`){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,r=e[`format:write`]?`format:write`:e.format?`format`:e.fmt?`fmt`:void 0,i=e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:e.lint?`lint`:void 0;t?n.push({capability:`autofix`,scriptName:t}):(r&&n.push({capability:`format`,scriptName:r}),i&&n.push({capability:`lint`,scriptName:i}))}else{let t=e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0,r=e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0;t&&n.push({capability:`format`,scriptName:t}),r&&n.push({capability:`lint`,scriptName:r})}return n}var Nr=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Mr(t,`fix`);return n.length>0?{detected:!0,reason:`found autofix scripts: ${n.map(e=>`"${e.scriptName}"`).join(`, `)}`}:{detected:!1,reason:`no supported autofix scripts found in package.json`}}plan(e,t){let n=Mr(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Pr(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function Fr(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var Ir=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=Fr(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}async plan(e,t){let n=!!await Vt(`vp`,!1),r=n?`vp`:`npx`,i=n?[]:[`vp`];return t===`fix`?[{id:`vite-plus-fix`,toolId:this.id,capability:`autofix`,executable:r,args:[...i,`check`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp check --fix`}]:[{id:`vite-plus-check`,toolId:this.id,capability:`autofix`,executable:r,args:[...i,`check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp check`}]}},Lr=class{id=`biome`;name=`Biome`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Pr(t,`@biomejs/biome`),r=Fr(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}async plan(e,t){let n=!!await Vt(`biome`,!1),r=n?`biome`:`npx`,i=n?[]:[`biome`];return t===`fix`?[{id:`biome-check-fix`,toolId:this.id,capability:`autofix`,executable:r,args:[...i,`check`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: check --write .`}]:[{id:`biome-check`,toolId:this.id,capability:`autofix`,executable:r,args:[...i,`check`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check .`}]}},Rr=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Pr(t,`prettier`),r=!!t?.prettier,i=Fr(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}async plan(e,t){let n=!!await Vt(`prettier`,!1),r=n?`prettier`:`npx`,i=n?[]:[`prettier`];return t===`fix`?[{id:`prettier-format`,toolId:this.id,capability:`format`,executable:r,args:[...i,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,capability:`format`,executable:r,args:[...i,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},zr=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Pr(t,`eslint`),r=!!t?.eslintConfig,i=Fr(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}async plan(e,t){let n=!!await Vt(`eslint`,!1),r=n?`eslint`:`npx`,i=n?[]:[`eslint`];return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,capability:`lint`,executable:r,args:[...i,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,capability:`lint`,executable:r,args:[...i,`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},Br=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Pr(t,`oxlint`),r=Fr(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}async plan(e,t){let n=!!await Vt(`oxlint`,!1),r=n?`oxlint`:`npx`,i=n?[]:[`oxlint`];return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,capability:`lint`,executable:r,args:[...i,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,capability:`lint`,executable:r,args:[...i,`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},Vr=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Pr(t,`oxfmt`),r=Fr(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}async plan(e,t){let n=!!await Vt(`oxfmt`,!1),r=n?`oxfmt`:`npx`,i=n?[]:[`oxfmt`];return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,capability:`format`,executable:r,args:[...i,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,capability:`format`,executable:r,args:[...i,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},Hr=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Nr;vitePlusAdapter=new Ir;biomeAdapter=new Lr;prettierAdapter=new Rr;eslintAdapter=new zr;oxlintAdapter=new Br;oxfmtAdapter=new Vr;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},Ur=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??!1?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}async plan(e,t){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},Wr=class{id=`python`;name=`Python`;ruffAdapter=new Ur;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},Gr=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function Kr(){let e=new Gr;return e.registerProvider(new Wr),e.registerProvider(new Hr),e}const qr=Kr();async function Jr(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function Yr(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ar(qr,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await Jr(vn(n),e);let i=(await new kr().executeTasks(r)).find(e=>e.error);if(i?.error)throw i.error}async function Xr(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function Zr(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await Xr(e,r,t)}}async function Qr(e=process.cwd(),t){if(!(t??or(e)))return;if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);let n={cwd:e,hasPythonSource:!0},r=qr.getProvider(`python`)?.getAdapters(n).find(e=>e.id===`ruff`);if(!r)throw Error(`Ruff adapter not found in registry.`);let i=await r.plan(n,`fix`),a=(await new kr().executeTasks(i)).find(e=>e.error);if(a?.error)throw a.error}async function $r(e){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{return await Yr(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ei(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await Zr(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ti(e,t){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await Qr(e,t),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ni(e,t){let n=t??or(e);if(!n)return[];let r=[],i=ir(e),a=await ei(e,{ctx:i,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:i,hasSource:!0,isProject:!0})});a&&r.push(a);let o=await ti(e,n);return o&&r.push(o),r}async function ri(e=process.cwd()){let t=[],n=await $r(e);n&&t.push(n);let r=await ni(e,or(e));t.push(...r),t.length>0&&(Zt(`Failed to run scripts: ${t.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&ri();export{Yr as executeJsWorkflow,Zr as executePythonWorkflow,Qr as executeRuffAutofix,ri as run,cn as sanitizePackageManager}; \ No newline at end of file +`&&e[i]!==`\r`;)r+=` `,i++;return i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}var kr=class{async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();en(`Executing: ${e}`);try{let r=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,i=await Yt(n.executable,n.args,{cwd:n.cwd,env:r,ignoreReturnCode:!0});if(i!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${i}.`;t.push({task:n,exitCode:i,error:Error(r)})}else t.push({task:n,exitCode:i})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function Ar(e,t){let n=t.has(`autofix`),r=t.has(`format`),i=t.has(`lint`);return e.includes(`autofix`)&&(n||r&&i)?`overlapping capabilities already covered by higher priority tool`:e.length===1&&e[0]===`format`&&(n||r)?`formatting capability already covered by higher priority tool`:e.length===1&&e[0]===`lint`&&(n||i)?`linting capability already covered by higher priority tool`:null}async function jr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=s.capabilities,l=Ar(c,t);if(l){a.push({id:e.id,name:e.name,reason:l});continue}i.push({id:e.id,name:e.name,reason:s.reason});for(let e of c)t.add(e);let u=await e.plan(n,r);o.push(...u)}}async function Mr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Nr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Pr(e,t,n=`fix`){let r=[],i=[],a=[],o=e.getProviders(),s=/* @__PURE__ */ new Map;for(let e of o){if(!await e.detect(t))continue;let o=/* @__PURE__ */ new Set;s.set(e.id,o);let c=e.getAdapters(t),l=[];for(let e of c){let r=await e.detect(t);if(r.detected){let i=e.getCapabilities?e.getCapabilities(t,n):Array.from(e.capabilities);l.push({adapter:e,capabilities:i,reason:r.reason})}else r.reason&&!r.reason.startsWith(`no `)&&i.push({id:e.id,name:e.name,reason:r.reason})}await jr(l,o,t,n,r,i,a)}await Mr(e,t,n,r,a);let c=Nr(a);return{tasks:c,selectedTools:r,skippedTools:i,summary:Fr(e,t,r,i,c)}}function Fr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` +`)}function Ir(e,t){return t===`fix`?e[`format:write`]?`format:write`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0}function Lr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:e.lint&&!e[`lint:check`]?`lint`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function Rr(e){let t=[],n=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,r=Ir(e,`fix`),i=Lr(e,`fix`);if(n){t.push({capability:`autofix`,scriptName:n});let a=e[n]||``,o=a.includes(r||``)||a.includes(`format`)||a.includes(`fmt`),s=a.includes(i||``)||a.includes(`lint`);r&&r!==n&&!o&&(e[`format:write`]||!e.fix)&&t.push({capability:`format`,scriptName:r}),i&&i!==n&&!s&&(e[`lint:fix`]||e[`lint:write`])&&t.push({capability:`lint`,scriptName:i})}else r&&t.push({capability:`format`,scriptName:r}),i&&t.push({capability:`lint`,scriptName:i});return t}function zr(e){let t=[],n=Ir(e,`check`),r=Lr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Br(e,t){return t===`fix`?Rr(e):zr(e)}var Vr=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];getCapabilities(e,t=`fix`){let n=e.jsEnv?.packageJson?.scripts;if(!n)return[];let r=Br(n,t);return Array.from(new Set(r.map(e=>e.capability)))}detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Br(t,`fix`);return n.length>0?{detected:!0,reason:`found autofix scripts: ${n.map(e=>`"${e.scriptName}"`).join(`, `)}`}:{detected:!1,reason:`no supported autofix scripts found in package.json`}}plan(e,t){let n=Br(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Hr(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function Ur(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}async function Wr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}async function Gr(e,t,n,r,i){let a=await Wr(e,r);if(!a)throw Error(`Configured tool "${n}" could not run: executable "${r}" is not available in node_modules/.bin or PATH. Please install "${i}" in project dependencies.`);return a}var Kr=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=Ur(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}async plan(e,t){let n=await Gr(e.cwd,this.id,this.name,`vp`,`vite-plus`);return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,capability:`format`,executable:n,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,capability:`lint`,executable:n,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,capability:`format`,executable:n,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,capability:`lint`,executable:n,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},qr=class{id=`biome`;name=`Biome`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Hr(t,`@biomejs/biome`),r=Ur(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}async plan(e,t){let n=await Gr(e.cwd,this.id,this.name,`biome`,`@biomejs/biome`);return t===`fix`?[{id:`biome-check-fix`,toolId:this.id,capability:`autofix`,executable:n,args:[`check`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: check --write .`}]:[{id:`biome-check`,toolId:this.id,capability:`autofix`,executable:n,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check .`}]}},Jr=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Hr(t,`prettier`),r=!!t?.prettier,i=Ur(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}async plan(e,t){let n=await Gr(e.cwd,this.id,this.name,`prettier`,`prettier`);return t===`fix`?[{id:`prettier-format`,toolId:this.id,capability:`format`,executable:n,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,capability:`format`,executable:n,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},Yr=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Hr(t,`eslint`),r=!!t?.eslintConfig,i=Ur(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}async plan(e,t){let n=await Gr(e.cwd,this.id,this.name,`eslint`,`eslint`);return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,capability:`lint`,executable:n,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,capability:`lint`,executable:n,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},Xr=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Hr(t,`oxlint`),r=Ur(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}async plan(e,t){let n=await Gr(e.cwd,this.id,this.name,`oxlint`,`oxlint`);return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,capability:`lint`,executable:n,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,capability:`lint`,executable:n,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},Zr=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Hr(t,`oxfmt`),r=Ur(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}async plan(e,t){let n=await Gr(e.cwd,this.id,this.name,`oxfmt`,`oxfmt`);return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,capability:`format`,executable:n,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,capability:`format`,executable:n,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},Qr=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Vr;vitePlusAdapter=new Kr;biomeAdapter=new qr;prettierAdapter=new Jr;eslintAdapter=new Yr;oxlintAdapter=new Xr;oxfmtAdapter=new Zr;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},$r=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??!1?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}async plan(e,t){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},ei=class{id=`python`;name=`Python`;ruffAdapter=new $r;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},ti=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function ni(){let e=new ti;return e.registerProvider(new ei),e.registerProvider(new Qr),e}const ri=ni();async function ii(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function ai(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Pr(ri,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await ii(vn(n),e);let i=(await new kr().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function oi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function si(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await oi(e,r,t)}}async function ci(e=process.cwd(),t){if(!(t??or(e)))return;if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);let n={cwd:e,hasPythonSource:!0},r=ri.getProvider(`python`)?.getAdapters(n).find(e=>e.id===`ruff`);if(!r)throw Error(`Ruff adapter not found in registry.`);let i=await r.plan(n,`fix`),a=(await new kr().executeTasks(i)).filter(e=>e.error);if(a.length>0){let e=a.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function li(e){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{return await ai(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ui(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await si(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function di(e,t){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await ci(e,t),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function fi(e,t){let n=t??or(e);if(!n)return[];let r=[],i=ir(e),a=await ui(e,{ctx:i,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:i,hasSource:!0,isProject:!0})});a&&r.push(a);let o=await di(e,n);return o&&r.push(o),r}async function pi(e=process.cwd()){let t=or(e);try{let n=fn(e),r={cwd:e,jsEnv:n,jsPm:cn(process.env.PACKAGE_MANAGER||_n(n).name),hasPythonSource:t};en((await Pr(ri,r,`fix`)).summary)}catch{}let n=[],r=await li(e);r&&n.push(r);let i=await fi(e,t);n.push(...i),n.length>0&&(Zt(`Failed to run scripts: ${n.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&pi();export{ai as executeJsWorkflow,si as executePythonWorkflow,ci as executeRuffAutofix,pi as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index 6244a91c..9ec8d3fc 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -14,92 +14,127 @@ export interface ScriptMapping { scriptName: string; } -/** - * Script conventions based on requirements: - * Combined autofix: "fix", "check:fix" - * Format write: "format", "fmt", "format:write" - * Format check: "format:check", "fmt:check" - * Lint fix: "lint:fix", "lint:write" - * Lint check: "lint", "lint:check" - * - * Excluded from autofix: "check", "test", "typecheck" - */ -export function resolveScriptTasks( +function resolveFormatScript( scripts: Record, mode: ExecutionMode, -): ScriptMapping[] { - const mappings: ScriptMapping[] = []; - +): string | undefined { if (mode === "fix") { - // 1. Check for combined fix scripts first: "fix", "check:fix" - const fixScript = scripts.fix ? "fix" : scripts["check:fix"] ? "check:fix" : undefined; - - // Check if independent format / lint fix scripts exist - const formatWriteScript = scripts["format:write"] + return scripts["format:write"] ? "format:write" : scripts.format ? "format" : scripts.fmt ? "fmt" : undefined; - - const lintFixScript = scripts["lint:fix"] - ? "lint:fix" - : scripts["lint:write"] - ? "lint:write" - : scripts.lint - ? "lint" + } + return scripts["format:check"] + ? "format:check" + : scripts["fmt:check"] + ? "fmt:check" + : scripts.format + ? "format" + : scripts.fmt + ? "fmt" : undefined; +} - if (fixScript) { - // If "fix" is present, does it cover both format and lint, or are there explicit format/lint scripts? - // "Do not allow a generic 'fix' script to accidentally suppress independent lint or format tasks unless its explicit semantics indicate that it covers them." - // In the priority rules: If "fix" is defined and no other independent script exists, it covers combined autofix. - // If "fix" is present alone, use "fix". - // If format or lint are also present along with fix, let's check: - // In existing behavior: if scripts.fix exists, it returns ["fix"]. - mappings.push({ capability: "autofix", scriptName: fixScript }); - } else { - if (formatWriteScript) { - mappings.push({ capability: "format", scriptName: formatWriteScript }); - } - if (lintFixScript) { - mappings.push({ capability: "lint", scriptName: lintFixScript }); - } +function resolveLintScript( + scripts: Record, + mode: ExecutionMode, +): string | undefined { + if (mode === "fix") { + // In fix mode, prefer scripts explicitly indicating modifications: + // lint:fix, lint:write. + // If only lint is defined (and neither lint:fix nor lint:check exist), + // and format/fmt is also defined in supported script conventions, + // "lint" is recognized for compatibility with legacy test suites / conventions. + // However, standalone "lint:check" is never run in fix mode. + if (scripts["lint:fix"]) return "lint:fix"; + if (scripts["lint:write"]) return "lint:write"; + if (scripts.lint && !scripts["lint:check"]) return "lint"; + return undefined; + } + return scripts["lint:check"] ? "lint:check" : scripts.lint ? "lint" : undefined; +} + +function resolveFixScriptTasks(scripts: Record): ScriptMapping[] { + const mappings: ScriptMapping[] = []; + const fixScript = scripts.fix ? "fix" : scripts["check:fix"] ? "check:fix" : undefined; + const formatScript = resolveFormatScript(scripts, "fix"); + const lintScript = resolveLintScript(scripts, "fix"); + + if (fixScript) { + mappings.push({ capability: "autofix", scriptName: fixScript }); + // If independent format or lint scripts exist, check if fix delegates to them or if they should run + // When a project defines both "fix" and independent format / lint scripts: + // If fix is "fix", check whether it covers them: + const fixBody = scripts[fixScript] || ""; + const coversFormat = + fixBody.includes(formatScript || "") || fixBody.includes("format") || fixBody.includes("fmt"); + const coversLint = fixBody.includes(lintScript || "") || fixBody.includes("lint"); + + // Only add independent scripts if fix does not already cover them + if ( + formatScript && + formatScript !== fixScript && + !coversFormat && + (scripts["format:write"] || !scripts.fix) + ) { + mappings.push({ capability: "format", scriptName: formatScript }); + } + if ( + lintScript && + lintScript !== fixScript && + !coversLint && + (scripts["lint:fix"] || scripts["lint:write"]) + ) { + mappings.push({ capability: "lint", scriptName: lintScript }); } } else { - // Check mode - const formatCheckScript = scripts["format:check"] - ? "format:check" - : scripts["fmt:check"] - ? "fmt:check" - : scripts.format - ? "format" - : scripts.fmt - ? "fmt" - : undefined; - - const lintCheckScript = scripts["lint:check"] - ? "lint:check" - : scripts.lint - ? "lint" - : undefined; - - if (formatCheckScript) { - mappings.push({ capability: "format", scriptName: formatCheckScript }); + if (formatScript) { + mappings.push({ capability: "format", scriptName: formatScript }); } - if (lintCheckScript) { - mappings.push({ capability: "lint", scriptName: lintCheckScript }); + if (lintScript) { + mappings.push({ capability: "lint", scriptName: lintScript }); } } return mappings; } +function resolveCheckScriptTasks(scripts: Record): ScriptMapping[] { + const mappings: ScriptMapping[] = []; + const formatScript = resolveFormatScript(scripts, "check"); + const lintScript = resolveLintScript(scripts, "check"); + + if (formatScript) { + mappings.push({ capability: "format", scriptName: formatScript }); + } + if (lintScript) { + mappings.push({ capability: "lint", scriptName: lintScript }); + } + + return mappings; +} + +export function resolveScriptTasks( + scripts: Record, + mode: ExecutionMode, +): ScriptMapping[] { + return mode === "fix" ? resolveFixScriptTasks(scripts) : resolveCheckScriptTasks(scripts); +} + export class JavaScriptScriptAdapter implements ToolAdapter { public readonly id = "npm-scripts"; public readonly name = "package.json scripts"; - public readonly capabilities: Capability[] = ["autofix", "format", "lint"]; + public readonly capabilities: readonly Capability[] = ["autofix", "format", "lint"]; + + public getCapabilities(context: ProjectContext, mode: ExecutionMode = "fix"): Capability[] { + const scripts = context.jsEnv?.packageJson?.scripts; + if (!scripts) return []; + const tasks = resolveScriptTasks(scripts, mode); + return Array.from(new Set(tasks.map((t) => t.capability))); + } public detect(context: ProjectContext): AdapterDetectionResult { const scripts = context.jsEnv?.packageJson?.scripts; diff --git a/src/autofix/adapters/javascript/tools.ts b/src/autofix/adapters/javascript/tools.ts index 90f5316b..e8a76e43 100644 --- a/src/autofix/adapters/javascript/tools.ts +++ b/src/autofix/adapters/javascript/tools.ts @@ -32,11 +32,48 @@ function hasAnyConfigFile(cwd: string, filenames: string[]): boolean { return false; } +/** + * Resolves local project binary safely without falling back to `npx` (which could download unpinned packages). + * Checks node_modules/.bin/ first, then PATH via io.which. + */ +export async function resolveProjectBinary( + cwd: string, + toolBinary: string, +): Promise { + const localBinPath = path.join(cwd, "node_modules", ".bin", toolBinary); + if (fs.existsSync(localBinPath)) { + return localBinPath; + } + + const pathBin = await io.which(toolBinary, false); + if (pathBin) { + return pathBin; + } + + return undefined; +} + +async function requireToolBinary( + cwd: string, + toolId: string, + toolName: string, + binName: string, + depName: string, +): Promise { + const resolved = await resolveProjectBinary(cwd, binName); + if (!resolved) { + throw new Error( + `Configured tool "${toolName}" could not run: executable "${binName}" is not available in node_modules/.bin or PATH. Please install "${depName}" in project dependencies.`, + ); + } + return resolved; +} + // 1. Vite+ Adapter export class VitePlusAdapter implements ToolAdapter { public readonly id = "vite-plus"; public readonly name = "Vite+"; - public readonly capabilities: Capability[] = ["autofix", "format", "lint"]; + public readonly capabilities: readonly Capability[] = ["autofix", "format", "lint"]; public detect(context: ProjectContext): AdapterDetectionResult { const pkg = context.jsEnv?.packageJson; @@ -58,35 +95,54 @@ export class VitePlusAdapter implements ToolAdapter { } public async plan(context: ProjectContext, mode: ExecutionMode): Promise { - const hasVp = Boolean(await io.which("vp", false)); - const executable = hasVp ? "vp" : "npx"; - const baseArgs = hasVp ? [] : ["vp"]; + const executable = await requireToolBinary(context.cwd, this.id, this.name, "vp", "vite-plus"); if (mode === "fix") { + // In fix mode, run formatting and lint fixes without triggering validation/typechecking return [ { - id: "vite-plus-fix", + id: "vite-plus-fmt", toolId: this.id, - capability: "autofix", + capability: "format", executable, - args: [...baseArgs, "check", "--fix"], + args: ["fmt"], cwd: context.cwd, mode: "fix", - description: "Vite+: vp check --fix", + description: "Vite+: vp fmt", + }, + { + id: "vite-plus-lint-fix", + toolId: this.id, + capability: "lint", + executable, + args: ["lint", "--fix"], + cwd: context.cwd, + mode: "fix", + description: "Vite+: vp lint --fix", }, ]; } return [ { - id: "vite-plus-check", + id: "vite-plus-fmt-check", toolId: this.id, - capability: "autofix", + capability: "format", + executable, + args: ["fmt", "--check"], + cwd: context.cwd, + mode: "check", + description: "Vite+: vp fmt --check", + }, + { + id: "vite-plus-lint", + toolId: this.id, + capability: "lint", executable, - args: [...baseArgs, "check"], + args: ["lint"], cwd: context.cwd, mode: "check", - description: "Vite+: vp check", + description: "Vite+: vp lint", }, ]; } @@ -96,15 +152,13 @@ export class VitePlusAdapter implements ToolAdapter { export class BiomeAdapter implements ToolAdapter { public readonly id = "biome"; public readonly name = "Biome"; - public readonly capabilities: Capability[] = ["autofix", "format", "lint"]; + public readonly capabilities: readonly Capability[] = ["autofix", "format", "lint"]; public detect(context: ProjectContext): AdapterDetectionResult { const pkg = context.jsEnv?.packageJson; const hasDep = hasDependency(pkg, "@biomejs/biome"); const hasConfig = hasAnyConfigFile(context.cwd, ["biome.json", "biome.jsonc"]); - // "Do not treat package installation alone as proof that a tool should run. - // A tool should only be selected when the detector has sufficient evidence that it is intentionally configured for the project." if (hasDep && hasConfig) { return { detected: true, reason: "Biome dependency and configuration detected" }; } @@ -118,9 +172,13 @@ export class BiomeAdapter implements ToolAdapter { } public async plan(context: ProjectContext, mode: ExecutionMode): Promise { - const hasBiome = Boolean(await io.which("biome", false)); - const executable = hasBiome ? "biome" : "npx"; - const baseArgs = hasBiome ? [] : ["biome"]; + const executable = await requireToolBinary( + context.cwd, + this.id, + this.name, + "biome", + "@biomejs/biome", + ); if (mode === "fix") { return [ @@ -129,7 +187,7 @@ export class BiomeAdapter implements ToolAdapter { toolId: this.id, capability: "autofix", executable, - args: [...baseArgs, "check", "--write", "."], + args: ["check", "--write", "."], cwd: context.cwd, mode: "fix", description: "Biome: check --write .", @@ -143,7 +201,7 @@ export class BiomeAdapter implements ToolAdapter { toolId: this.id, capability: "autofix", executable, - args: [...baseArgs, "check", "."], + args: ["check", "."], cwd: context.cwd, mode: "check", description: "Biome: check .", @@ -156,7 +214,7 @@ export class BiomeAdapter implements ToolAdapter { export class PrettierAdapter implements ToolAdapter { public readonly id = "prettier"; public readonly name = "Prettier"; - public readonly capabilities: Capability[] = ["format"]; + public readonly capabilities: readonly Capability[] = ["format"]; public detect(context: ProjectContext): AdapterDetectionResult { const pkg = context.jsEnv?.packageJson; @@ -189,9 +247,13 @@ export class PrettierAdapter implements ToolAdapter { } public async plan(context: ProjectContext, mode: ExecutionMode): Promise { - const hasPrettier = Boolean(await io.which("prettier", false)); - const executable = hasPrettier ? "prettier" : "npx"; - const baseArgs = hasPrettier ? [] : ["prettier"]; + const executable = await requireToolBinary( + context.cwd, + this.id, + this.name, + "prettier", + "prettier", + ); if (mode === "fix") { return [ @@ -200,7 +262,7 @@ export class PrettierAdapter implements ToolAdapter { toolId: this.id, capability: "format", executable, - args: [...baseArgs, "--write", "."], + args: ["--write", "."], cwd: context.cwd, mode: "fix", description: "Prettier: format", @@ -214,7 +276,7 @@ export class PrettierAdapter implements ToolAdapter { toolId: this.id, capability: "format", executable, - args: [...baseArgs, "--check", "."], + args: ["--check", "."], cwd: context.cwd, mode: "check", description: "Prettier: format check", @@ -227,7 +289,7 @@ export class PrettierAdapter implements ToolAdapter { export class EslintAdapter implements ToolAdapter { public readonly id = "eslint"; public readonly name = "ESLint"; - public readonly capabilities: Capability[] = ["lint"]; + public readonly capabilities: readonly Capability[] = ["lint"]; public detect(context: ProjectContext): AdapterDetectionResult { const pkg = context.jsEnv?.packageJson; @@ -259,9 +321,7 @@ export class EslintAdapter implements ToolAdapter { } public async plan(context: ProjectContext, mode: ExecutionMode): Promise { - const hasEslint = Boolean(await io.which("eslint", false)); - const executable = hasEslint ? "eslint" : "npx"; - const baseArgs = hasEslint ? [] : ["eslint"]; + const executable = await requireToolBinary(context.cwd, this.id, this.name, "eslint", "eslint"); if (mode === "fix") { return [ @@ -270,7 +330,7 @@ export class EslintAdapter implements ToolAdapter { toolId: this.id, capability: "lint", executable, - args: [...baseArgs, "--fix", "."], + args: ["--fix", "."], cwd: context.cwd, mode: "fix", description: "ESLint: lint autofix", @@ -284,7 +344,7 @@ export class EslintAdapter implements ToolAdapter { toolId: this.id, capability: "lint", executable, - args: [...baseArgs, "."], + args: ["."], cwd: context.cwd, mode: "check", description: "ESLint: lint check", @@ -297,7 +357,7 @@ export class EslintAdapter implements ToolAdapter { export class OxlintAdapter implements ToolAdapter { public readonly id = "oxlint"; public readonly name = "Oxlint"; - public readonly capabilities: Capability[] = ["lint"]; + public readonly capabilities: readonly Capability[] = ["lint"]; public detect(context: ProjectContext): AdapterDetectionResult { const pkg = context.jsEnv?.packageJson; @@ -322,9 +382,7 @@ export class OxlintAdapter implements ToolAdapter { } public async plan(context: ProjectContext, mode: ExecutionMode): Promise { - const hasOxlint = Boolean(await io.which("oxlint", false)); - const executable = hasOxlint ? "oxlint" : "npx"; - const baseArgs = hasOxlint ? [] : ["oxlint"]; + const executable = await requireToolBinary(context.cwd, this.id, this.name, "oxlint", "oxlint"); if (mode === "fix") { return [ @@ -333,7 +391,7 @@ export class OxlintAdapter implements ToolAdapter { toolId: this.id, capability: "lint", executable, - args: [...baseArgs, "--fix", "."], + args: ["--fix", "."], cwd: context.cwd, mode: "fix", description: "Oxlint: lint autofix", @@ -347,7 +405,7 @@ export class OxlintAdapter implements ToolAdapter { toolId: this.id, capability: "lint", executable, - args: [...baseArgs, "."], + args: ["."], cwd: context.cwd, mode: "check", description: "Oxlint: lint check", @@ -360,7 +418,7 @@ export class OxlintAdapter implements ToolAdapter { export class OxfmtAdapter implements ToolAdapter { public readonly id = "oxfmt"; public readonly name = "Oxfmt"; - public readonly capabilities: Capability[] = ["format"]; + public readonly capabilities: readonly Capability[] = ["format"]; public detect(context: ProjectContext): AdapterDetectionResult { const pkg = context.jsEnv?.packageJson; @@ -385,9 +443,7 @@ export class OxfmtAdapter implements ToolAdapter { } public async plan(context: ProjectContext, mode: ExecutionMode): Promise { - const hasOxfmt = Boolean(await io.which("oxfmt", false)); - const executable = hasOxfmt ? "oxfmt" : "npx"; - const baseArgs = hasOxfmt ? [] : ["oxfmt"]; + const executable = await requireToolBinary(context.cwd, this.id, this.name, "oxfmt", "oxfmt"); if (mode === "fix") { return [ @@ -396,7 +452,7 @@ export class OxfmtAdapter implements ToolAdapter { toolId: this.id, capability: "format", executable, - args: [...baseArgs, "--write", "."], + args: ["--write", "."], cwd: context.cwd, mode: "fix", description: "Oxfmt: format", @@ -410,7 +466,7 @@ export class OxfmtAdapter implements ToolAdapter { toolId: this.id, capability: "format", executable, - args: [...baseArgs, "--check", "."], + args: ["--check", "."], cwd: context.cwd, mode: "check", description: "Oxfmt: format check", diff --git a/src/autofix/index.ts b/src/autofix/index.ts index 05f28e7e..21e189fb 100644 --- a/src/autofix/index.ts +++ b/src/autofix/index.ts @@ -76,9 +76,10 @@ export async function executeJsWorkflow(cwd: string = process.cwd()): Promise r.error); - if (failure?.error) { - throw failure.error; + const failures = results.filter((r) => r.error); + if (failures.length > 0) { + const errorMessages = failures.map((f) => f.error?.message || `Task ${f.task.id} failed`); + throw new Error(errorMessages.join("\n")); } } @@ -150,9 +151,10 @@ export async function executeRuffAutofix( const tasks = await ruffAdapter.plan(context, "fix"); const engine = new ExecutionEngine(); const results = await engine.executeTasks(tasks); - const failure = results.find((r) => r.error); - if (failure?.error) { - throw failure.error; + const failures = results.filter((r) => r.error); + if (failures.length > 0) { + const errorMessages = failures.map((f) => f.error?.message || `Task ${f.task.id} failed`); + throw new Error(errorMessages.join("\n")); } } @@ -256,6 +258,26 @@ async function runPythonWorkflowStep(cwd: string, hasSource?: boolean): Promise< } export async function run(cwd: string = process.cwd()): Promise { + const hasSource = hasPythonSource(cwd); + + // Emit explainable execution plan summary before execution + try { + const jsEnv = inspectJsProjectEnvironment(cwd); + const rawPm = process.env.PACKAGE_MANAGER || resolveJsPackageManager(jsEnv).name; + const pm = sanitizePackageManager(rawPm) as SupportedPackageManager; + + const fullContext: ProjectContext = { + cwd, + jsEnv, + jsPm: pm, + hasPythonSource: hasSource, + }; + const overallPlan = await planExecution(defaultRegistry, fullContext, "fix"); + core.info(overallPlan.summary); + } catch { + // Planning summary logging is best-effort and should not halt execution + } + const errors: Error[] = []; const jsErr = await runJsWorkflowStep(cwd); @@ -263,7 +285,6 @@ export async function run(cwd: string = process.cwd()): Promise { errors.push(jsErr); } - const hasSource = hasPythonSource(cwd); const pythonErrs = await runPythonWorkflowStep(cwd, hasSource); errors.push(...pythonErrs); diff --git a/src/autofix/planner.ts b/src/autofix/planner.ts index df43cdf8..d5eddf2f 100644 --- a/src/autofix/planner.ts +++ b/src/autofix/planner.ts @@ -10,9 +10,105 @@ import type { interface CandidateTool { adapter: ToolAdapter; + capabilities: Capability[]; reason?: string; } +function checkCapabilityConflict( + capabilities: Capability[], + providerCapabilities: Set, +): string | null { + const hasAutofixCovered = providerCapabilities.has("autofix"); + const hasFormatCovered = providerCapabilities.has("format"); + const hasLintCovered = providerCapabilities.has("lint"); + + if (capabilities.includes("autofix")) { + if (hasAutofixCovered || (hasFormatCovered && hasLintCovered)) { + return "overlapping capabilities already covered by higher priority tool"; + } + } + + if ( + capabilities.length === 1 && + capabilities[0] === "format" && + (hasAutofixCovered || hasFormatCovered) + ) { + return "formatting capability already covered by higher priority tool"; + } + + if ( + capabilities.length === 1 && + capabilities[0] === "lint" && + (hasAutofixCovered || hasLintCovered) + ) { + return "linting capability already covered by higher priority tool"; + } + + return null; +} + +async function processCandidateTools( + candidateTools: CandidateTool[], + providerCapabilities: Set, + context: ProjectContext, + mode: ExecutionMode, + selectedTools: Array<{ id: string; name: string; reason?: string }>, + skippedTools: Array<{ id: string; name: string; reason: string }>, + tasks: ExecutionTask[], +): Promise { + for (const candidate of candidateTools) { + const adapter = candidate.adapter; + const capabilities = candidate.capabilities; + + const conflictReason = checkCapabilityConflict(capabilities, providerCapabilities); + if (conflictReason) { + skippedTools.push({ + id: adapter.id, + name: adapter.name, + reason: conflictReason, + }); + continue; + } + + selectedTools.push({ id: adapter.id, name: adapter.name, reason: candidate.reason }); + for (const cap of capabilities) { + providerCapabilities.add(cap); + } + + const toolTasks = await adapter.plan(context, mode); + tasks.push(...toolTasks); + } +} + +async function processStandaloneAdapters( + registry: AutofixRegistry, + context: ProjectContext, + mode: ExecutionMode, + selectedTools: Array<{ id: string; name: string; reason?: string }>, + tasks: ExecutionTask[], +): Promise { + for (const adapter of registry.getStandaloneAdapters()) { + const result = await adapter.detect(context); + if (result.detected) { + selectedTools.push({ id: adapter.id, name: adapter.name, reason: result.reason }); + const toolTasks = await adapter.plan(context, mode); + tasks.push(...toolTasks); + } + } +} + +function deduplicateTasks(tasks: ExecutionTask[]): ExecutionTask[] { + const deduplicatedTasks: ExecutionTask[] = []; + const seenTaskIds = new Set(); + for (const task of tasks) { + if (!seenTaskIds.has(task.id)) { + seenTaskIds.add(task.id); + deduplicatedTasks.push(task); + } + } + return deduplicatedTasks; +} + /** * Resolves tool conflicts and generates a deterministic, deduplicated execution plan. * @@ -54,90 +150,30 @@ export async function planExecution( for (const adapter of adapters) { const result = await adapter.detect(context); if (result.detected) { - candidateTools.push({ adapter, reason: result.reason }); + const caps = adapter.getCapabilities + ? adapter.getCapabilities(context, mode) + : Array.from(adapter.capabilities); + candidateTools.push({ adapter, capabilities: caps, reason: result.reason }); } else if (result.reason && !result.reason.startsWith("no ")) { // Reason worth logging as skipped (e.g. dependency present without configuration) skippedTools.push({ id: adapter.id, name: adapter.name, reason: result.reason }); } } - // Resolve conflicts among candidates for this provider - for (const candidate of candidateTools) { - const adapter = candidate.adapter; - const capabilities = adapter.capabilities; - - // Check if any capability is already covered by a higher priority tool - const hasAutofixCovered = providerCapabilities.has("autofix"); - const hasFormatCovered = providerCapabilities.has("format"); - const hasLintCovered = providerCapabilities.has("lint"); - - if (capabilities.includes("autofix")) { - if (hasAutofixCovered || (hasFormatCovered && hasLintCovered)) { - skippedTools.push({ - id: adapter.id, - name: adapter.name, - reason: "overlapping capabilities already covered by higher priority tool", - }); - continue; - } - } - - if ( - capabilities.length === 1 && - capabilities[0] === "format" && - (hasAutofixCovered || hasFormatCovered) - ) { - skippedTools.push({ - id: adapter.id, - name: adapter.name, - reason: "formatting capability already covered by higher priority tool", - }); - continue; - } - - if ( - capabilities.length === 1 && - capabilities[0] === "lint" && - (hasAutofixCovered || hasLintCovered) - ) { - skippedTools.push({ - id: adapter.id, - name: adapter.name, - reason: "linting capability already covered by higher priority tool", - }); - continue; - } - - // Candidate is selected! - selectedTools.push({ id: adapter.id, name: adapter.name, reason: candidate.reason }); - for (const cap of capabilities) { - providerCapabilities.add(cap); - } - - const toolTasks = await adapter.plan(context, mode); - tasks.push(...toolTasks); - } + await processCandidateTools( + candidateTools, + providerCapabilities, + context, + mode, + selectedTools, + skippedTools, + tasks, + ); } - // Standalone adapters if any - for (const adapter of registry.getStandaloneAdapters()) { - const result = await adapter.detect(context); - if (result.detected) { - selectedTools.push({ id: adapter.id, name: adapter.name, reason: result.reason }); - const toolTasks = await adapter.plan(context, mode); - tasks.push(...toolTasks); - } - } + await processStandaloneAdapters(registry, context, mode, selectedTools, tasks); - // Deduplicate tasks by task id - const deduplicatedTasks: ExecutionTask[] = []; - const seenTaskIds = new Set(); - for (const task of tasks) { - if (!seenTaskIds.has(task.id)) { - seenTaskIds.add(task.id); - deduplicatedTasks.push(task); - } - } + const deduplicatedTasks = deduplicateTasks(tasks); // Generate explainable summary const summary = formatExecutionPlanSummary( diff --git a/src/autofix/types.ts b/src/autofix/types.ts index 88ac4dda..74dda621 100644 --- a/src/autofix/types.ts +++ b/src/autofix/types.ts @@ -34,7 +34,9 @@ export interface AdapterDetectionResult { export interface ToolAdapter { id: string; name: string; - capabilities: Capability[]; + capabilities: readonly Capability[]; + + getCapabilities?(context: ProjectContext, mode?: ExecutionMode): Capability[]; detect(context: ProjectContext): Promise | AdapterDetectionResult; diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index 39f2f2a7..a7825885 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -14,8 +14,9 @@ import type { ToolAdapter, } from "../src/autofix/types.js"; +import { resolveScriptTasks } from "../src/autofix/adapters/javascript/script-adapter.js"; import { ExecutionEngine } from "../src/autofix/engine.js"; -import { run } from "../src/autofix/index.js"; +import { executeJsWorkflow, run } from "../src/autofix/index.js"; import { planExecution } from "../src/autofix/planner.js"; import { AutofixRegistry, createDefaultRegistry } from "../src/autofix/registry.js"; @@ -98,7 +99,7 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { }); }); - describe("JavaScript/TypeScript: Hybrid Detection & Precedence", () => { + describe("JavaScript/TypeScript: Hybrid Detection & Script Precedence", () => { it("respects explicit script conventions: 'check:fix' as combined autofix", async () => { fs.writeFileSync( path.join(tempDir, "package.json"), @@ -162,11 +163,45 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { "No matching scripts (fix, format, lint, check, etc.) found in package.json.", ); }); + + it("generic 'fix' does not suppress independent 'format:write' and 'lint:fix' scripts", async () => { + const scripts = { + fix: "custom-fix", + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks.map((t) => t.scriptName)).toEqual(["fix", "format:write", "lint:fix"]); + }); + + it("generic 'fix' suppresses independent format script if fix explicitly calls format", async () => { + const scripts = { + fix: "npm run format && npm run lint:fix", + format: "prettier --write .", + "lint:fix": "eslint --fix .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks.map((t) => t.scriptName)).toEqual(["fix"]); + }); + + it("distinguishes fix mode and check mode for lint scripts", () => { + expect(resolveScriptTasks({ "lint:check": "eslint ." }, "fix")).toEqual([]); + expect(resolveScriptTasks({ "lint:check": "eslint ." }, "check")).toEqual([ + { capability: "lint", scriptName: "lint:check" }, + ]); + expect(resolveScriptTasks({ "lint:fix": "eslint --fix ." }, "fix")).toEqual([ + { capability: "lint", scriptName: "lint:fix" }, + ]); + }); }); - describe("Tool Adapters Detection & Safety", () => { - it("detects Prettier when dependency AND configuration file exist, executing tool directly if scripts absent", async () => { - vi.spyOn(io, "which").mockResolvedValue("/usr/bin/prettier"); + describe("Tool Adapters & Safe Executable Resolution", () => { + it("detects Prettier when dependency AND configuration file exist, executing via local project binary", async () => { + const binDir = path.join(tempDir, "node_modules", ".bin"); + fs.mkdirSync(binDir, { recursive: true }); + fs.writeFileSync(path.join(binDir, "prettier"), ""); + fs.chmodSync(path.join(binDir, "prettier"), "755"); + fs.writeFileSync( path.join(tempDir, "package.json"), JSON.stringify({ @@ -178,185 +213,122 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { await run(tempDir); expect(exec.exec).toHaveBeenCalledWith( - "prettier", + path.join(binDir, "prettier"), ["--write", "."], expect.objectContaining({ cwd: tempDir }), ); }); - it("does NOT execute Prettier if installed as dependency without configuration", async () => { + it("throws actionable error when tool is configured but its executable cannot be found", async () => { + vi.spyOn(io, "which").mockResolvedValue(""); fs.writeFileSync( path.join(tempDir, "package.json"), JSON.stringify({ devDependencies: { prettier: "^3.0.0" }, }), ); + fs.writeFileSync(path.join(tempDir, ".prettierrc.json"), "{}"); - await run(tempDir); - - expect(exec.exec).not.toHaveBeenCalled(); - expect(core.info).toHaveBeenCalledWith( - "No matching scripts (fix, format, lint, check, etc.) found in package.json.", + await expect(executeJsWorkflow(tempDir)).rejects.toThrow( + /Configured tool "Prettier" could not run: executable "prettier" is not available/, ); }); - it("detects ESLint when dependency and configuration file exist", async () => { - vi.spyOn(io, "which").mockResolvedValue("/usr/bin/eslint"); + it("Vite+ in fix mode executes vp fmt and vp lint --fix rather than check --fix", async () => { + vi.spyOn(io, "which").mockImplementation(async (bin) => { + if (bin === "vp") return "/usr/local/bin/vp"; + return ""; + }); + fs.writeFileSync( path.join(tempDir, "package.json"), JSON.stringify({ - devDependencies: { eslint: "^9.0.0" }, + devDependencies: { "vite-plus": "^1.4.0" }, }), ); - fs.writeFileSync(path.join(tempDir, "eslint.config.js"), "export default [];\n"); + fs.writeFileSync(path.join(tempDir, "vite.config.ts"), "export default {};\n"); await run(tempDir); expect(exec.exec).toHaveBeenCalledWith( - "eslint", - ["--fix", "."], + "/usr/local/bin/vp", + ["fmt"], expect.objectContaining({ cwd: tempDir }), ); - }); - - it("detects Biome when dependency and biome.json exist", async () => { - vi.spyOn(io, "which").mockResolvedValue("/usr/bin/biome"); - fs.writeFileSync( - path.join(tempDir, "package.json"), - JSON.stringify({ - devDependencies: { "@biomejs/biome": "^1.8.0" }, - }), - ); - fs.writeFileSync(path.join(tempDir, "biome.json"), "{}"); - - await run(tempDir); - expect(exec.exec).toHaveBeenCalledWith( - "biome", - ["check", "--write", "."], + "/usr/local/bin/vp", + ["lint", "--fix"], expect.objectContaining({ cwd: tempDir }), ); + expect(exec.exec).not.toHaveBeenCalledWith( + expect.anything(), + expect.arrayContaining(["check", "--fix"]), + expect.anything(), + ); }); - it("resolves conflicts deterministically: explicit script suppresses inferred tool adapters", async () => { - vi.spyOn(io, "which").mockResolvedValue("/usr/bin/prettier"); + it("resolves capabilities dynamically: 'format:write' script allows ESLint tool detection to run lint", async () => { + vi.spyOn(io, "which").mockImplementation(async (bin) => { + if (bin === "eslint") return "/usr/local/bin/eslint"; + return ""; + }); + fs.writeFileSync( path.join(tempDir, "package.json"), JSON.stringify({ scripts: { - format: "custom-fmt .", + "format:write": "prettier --write .", }, - devDependencies: { prettier: "^3.0.0" }, + devDependencies: { eslint: "^9.0.0" }, }), ); - fs.writeFileSync(path.join(tempDir, ".prettierrc"), "{}"); + fs.writeFileSync(path.join(tempDir, "eslint.config.js"), "export default [];"); await run(tempDir); expect(exec.exec).toHaveBeenCalledWith( "npm", - ["run", "format"], + ["run", "format:write"], expect.objectContaining({ cwd: tempDir }), ); - expect(exec.exec).not.toHaveBeenCalledWith("prettier", expect.anything(), expect.anything()); - }); - - it("resolves conflicts deterministically: Biome covers format + lint and skips Prettier & ESLint", async () => { - vi.spyOn(io, "which").mockResolvedValue("/usr/bin/biome"); - fs.writeFileSync( - path.join(tempDir, "package.json"), - JSON.stringify({ - devDependencies: { - "@biomejs/biome": "^1.8.0", - prettier: "^3.0.0", - eslint: "^9.0.0", - }, - }), - ); - fs.writeFileSync(path.join(tempDir, "biome.json"), "{}"); - fs.writeFileSync(path.join(tempDir, ".prettierrc"), "{}"); - fs.writeFileSync(path.join(tempDir, "eslint.config.js"), "export default [];"); - - const registry = createDefaultRegistry(); - const plan = await planExecution( - registry, - { - cwd: tempDir, - jsEnv: { - hasPackageJson: true, - packageJson: { - devDependencies: { - "@biomejs/biome": "^1.8.0", - prettier: "^3.0.0", - eslint: "^9.0.0", - }, - }, - hasBunVersionFile: false, - hasNodeVersionFile: false, - hasPnpmLock: false, - hasPackageLock: true, - hasBunLock: false, - }, - jsPm: "npm", - }, - "fix", + expect(exec.exec).toHaveBeenCalledWith( + "/usr/local/bin/eslint", + ["--fix", "."], + expect.objectContaining({ cwd: tempDir }), ); - - expect(plan.selectedTools.map((t) => t.id)).toContain("biome"); - expect(plan.skippedTools.map((t) => t.id)).toContain("prettier"); - expect(plan.skippedTools.map((t) => t.id)).toContain("eslint"); - expect(plan.tasks).toHaveLength(1); - expect(plan.tasks[0].executable).toBe("biome"); }); }); - describe("Explainable Execution Plan", () => { - it("produces structured and human-readable execution plan summary", async () => { + describe("Error Aggregation Across Multiple Failures", () => { + it("aggregates errors when multiple independent JS and Python tasks fail", async () => { + vi.spyOn(io, "which").mockImplementation(async (bin) => { + if (bin === "ruff") return "/usr/bin/ruff"; + return ""; + }); + fs.writeFileSync( path.join(tempDir, "package.json"), JSON.stringify({ scripts: { - "format:write": "prettier --write .", - "lint:fix": "eslint --fix .", + "lint:fix": "exit 1", }, }), ); - fs.writeFileSync(path.join(tempDir, "script.py"), "print('hello')\n"); - vi.spyOn(io, "which").mockResolvedValue("/usr/bin/ruff"); + fs.writeFileSync(path.join(tempDir, "main.py"), "print('hello')\n"); - const registry = createDefaultRegistry(); - const plan = await planExecution( - registry, - { - cwd: tempDir, - hasPythonSource: true, - jsEnv: { - hasPackageJson: true, - packageJson: { - scripts: { - "format:write": "prettier --write .", - "lint:fix": "eslint --fix .", - }, - }, - hasBunVersionFile: false, - hasNodeVersionFile: false, - hasPnpmLock: false, - hasPackageLock: true, - hasBunLock: false, - }, - jsPm: "npm", - }, - "fix", - ); + vi.mocked(exec.exec).mockImplementation(async (cmd, args) => { + if (cmd === "npm" && args?.[0] === "run") return 1; + if (cmd === "ruff" && args?.[0] === "check") return 1; + return 0; + }); + + await run(tempDir); - expect(plan.summary).toContain("Detected environments:"); - expect(plan.summary).toContain("Python: true"); - expect(plan.summary).toContain("JavaScript: true"); - expect(plan.summary).toContain("Ruff: default tool"); - expect(plan.summary).toContain("Execution plan:"); - expect(plan.summary).toContain("Ruff: lint autofix"); - expect(plan.summary).toContain("Ruff: format"); - expect(plan.summary).toContain("package.json scripts: selected"); + expect(core.setFailed).toHaveBeenCalledWith( + expect.stringMatching( + /Failed to run scripts: Script "lint:fix" failed while executing "npm run lint:fix"\.\nRuff command "ruff check --fix \." failed\./, + ), + ); }); }); From da2b47a86d52d8da4aca2d6faed57bca3a8c530c Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 6 Nov 2026 13:50:05 +0000 Subject: [PATCH 03/25] refactor(autofix): correct capability resolution and execution reliability --- .../autofix-tool-adapters-capability.md | 2 +- autofix/README.md | 5 +- dist/autofix.mjs | 11 +- .../adapters/javascript/script-adapter.ts | 106 +++++++++--------- src/autofix/index.ts | 96 +++++++++++----- src/autofix/planner.ts | 95 ++++++++-------- src/autofix/types.ts | 2 - tests/autofix-architecture.test.ts | 43 ++++++- tests/autofix.test.ts | 36 +++--- 9 files changed, 243 insertions(+), 153 deletions(-) diff --git a/.changeset/autofix-tool-adapters-capability.md b/.changeset/autofix-tool-adapters-capability.md index 6ed1df39..db8160f2 100644 --- a/.changeset/autofix-tool-adapters-capability.md +++ b/.changeset/autofix-tool-adapters-capability.md @@ -2,4 +2,4 @@ "@area44/workflows": minor --- -Refactor autofix architecture with capability-aware tool adapters, default Python Ruff toolchain, hybrid script/tool detection, safe executable resolution, and aggregated error reporting. +Refactor autofix architecture with capability-aware tool adapters, default Python Ruff toolchain, task-based capability conflict resolution, strict script selection in fix mode, safe executable resolution without unpinned npx downloads, and aggregated error reporting across independent tasks. diff --git a/autofix/README.md b/autofix/README.md index e103b4e7..67b24efd 100644 --- a/autofix/README.md +++ b/autofix/README.md @@ -23,11 +23,12 @@ The `autofix` composite action automatically formats and fixes code across multi - **JavaScript/TypeScript Hybrid Detection:** - **Explicit Script Priority:** Recognizes standard script conventions: - Combined autofix: `fix`, `check:fix` - - Format write: `format`, `fmt`, `format:write` + - Format write: `format`, `fmt`, `format:write`, `format:fix` - Format check: `format:check`, `fmt:check` - Lint fix: `lint:fix`, `lint:write` - Lint check: `lint`, `lint:check` - - **Excluded Scripts:** Generic validation scripts such as `check`, `test`, and `typecheck` are strictly excluded from execution as autofix commands in fix mode. + - **Excluded Scripts:** Validation-only scripts such as plain `lint`, `lint:check`, `check`, `test`, and `typecheck` are strictly excluded from execution as autofix commands in fix mode. + - **Generic "fix" Interaction:** A generic `fix` script does not blindly suppress independently declared format or lint fix scripts unless it demonstrably delegates to them. - **Tool Adapters:** When explicit scripts are absent or specialized, detects configured tools: - **Vite+:** Project-native toolchain (`vp fmt` and `vp lint --fix` in fix mode, avoiding unnecessary type-checking or validation). - **Biome:** Fast unified formatter and linter (`biome check --write .`). diff --git a/dist/autofix.mjs b/dist/autofix.mjs index f5d5a7d2..ce849023 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -303,8 +303,9 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `?` `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}var kr=class{async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();en(`Executing: ${e}`);try{let r=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,i=await Yt(n.executable,n.args,{cwd:n.cwd,env:r,ignoreReturnCode:!0});if(i!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${i}.`;t.push({task:n,exitCode:i,error:Error(r)})}else t.push({task:n,exitCode:i})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function Ar(e,t){let n=t.has(`autofix`),r=t.has(`format`),i=t.has(`lint`);return e.includes(`autofix`)&&(n||r&&i)?`overlapping capabilities already covered by higher priority tool`:e.length===1&&e[0]===`format`&&(n||r)?`formatting capability already covered by higher priority tool`:e.length===1&&e[0]===`lint`&&(n||i)?`linting capability already covered by higher priority tool`:null}async function jr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=s.capabilities,l=Ar(c,t);if(l){a.push({id:e.id,name:e.name,reason:l});continue}i.push({id:e.id,name:e.name,reason:s.reason});for(let e of c)t.add(e);let u=await e.plan(n,r);o.push(...u)}}async function Mr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Nr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Pr(e,t,n=`fix`){let r=[],i=[],a=[],o=e.getProviders(),s=/* @__PURE__ */ new Map;for(let e of o){if(!await e.detect(t))continue;let o=/* @__PURE__ */ new Set;s.set(e.id,o);let c=e.getAdapters(t),l=[];for(let e of c){let r=await e.detect(t);if(r.detected){let i=e.getCapabilities?e.getCapabilities(t,n):Array.from(e.capabilities);l.push({adapter:e,capabilities:i,reason:r.reason})}else r.reason&&!r.reason.startsWith(`no `)&&i.push({id:e.id,name:e.name,reason:r.reason})}await jr(l,o,t,n,r,i,a)}await Mr(e,t,n,r,a);let c=Nr(a);return{tasks:c,selectedTools:r,skippedTools:i,summary:Fr(e,t,r,i,c)}}function Fr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` -`)}function Ir(e,t){return t===`fix`?e[`format:write`]?`format:write`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0}function Lr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:e.lint&&!e[`lint:check`]?`lint`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function Rr(e){let t=[],n=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,r=Ir(e,`fix`),i=Lr(e,`fix`);if(n){t.push({capability:`autofix`,scriptName:n});let a=e[n]||``,o=a.includes(r||``)||a.includes(`format`)||a.includes(`fmt`),s=a.includes(i||``)||a.includes(`lint`);r&&r!==n&&!o&&(e[`format:write`]||!e.fix)&&t.push({capability:`format`,scriptName:r}),i&&i!==n&&!s&&(e[`lint:fix`]||e[`lint:write`])&&t.push({capability:`lint`,scriptName:i})}else r&&t.push({capability:`format`,scriptName:r}),i&&t.push({capability:`lint`,scriptName:i});return t}function zr(e){let t=[],n=Ir(e,`check`),r=Lr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Br(e,t){return t===`fix`?Rr(e):zr(e)}var Vr=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];getCapabilities(e,t=`fix`){let n=e.jsEnv?.packageJson?.scripts;if(!n)return[];let r=Br(n,t);return Array.from(new Set(r.map(e=>e.capability)))}detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Br(t,`fix`);return n.length>0?{detected:!0,reason:`found autofix scripts: ${n.map(e=>`"${e.scriptName}"`).join(`, `)}`}:{detected:!1,reason:`no supported autofix scripts found in package.json`}}plan(e,t){let n=Br(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Hr(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function Ur(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}async function Wr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}async function Gr(e,t,n,r,i){let a=await Wr(e,r);if(!a)throw Error(`Configured tool "${n}" could not run: executable "${r}" is not available in node_modules/.bin or PATH. Please install "${i}" in project dependencies.`);return a}var Kr=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=Ur(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}async plan(e,t){let n=await Gr(e.cwd,this.id,this.name,`vp`,`vite-plus`);return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,capability:`format`,executable:n,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,capability:`lint`,executable:n,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,capability:`format`,executable:n,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,capability:`lint`,executable:n,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},qr=class{id=`biome`;name=`Biome`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Hr(t,`@biomejs/biome`),r=Ur(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}async plan(e,t){let n=await Gr(e.cwd,this.id,this.name,`biome`,`@biomejs/biome`);return t===`fix`?[{id:`biome-check-fix`,toolId:this.id,capability:`autofix`,executable:n,args:[`check`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: check --write .`}]:[{id:`biome-check`,toolId:this.id,capability:`autofix`,executable:n,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check .`}]}},Jr=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Hr(t,`prettier`),r=!!t?.prettier,i=Ur(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}async plan(e,t){let n=await Gr(e.cwd,this.id,this.name,`prettier`,`prettier`);return t===`fix`?[{id:`prettier-format`,toolId:this.id,capability:`format`,executable:n,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,capability:`format`,executable:n,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},Yr=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Hr(t,`eslint`),r=!!t?.eslintConfig,i=Ur(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}async plan(e,t){let n=await Gr(e.cwd,this.id,this.name,`eslint`,`eslint`);return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,capability:`lint`,executable:n,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,capability:`lint`,executable:n,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},Xr=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Hr(t,`oxlint`),r=Ur(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}async plan(e,t){let n=await Gr(e.cwd,this.id,this.name,`oxlint`,`oxlint`);return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,capability:`lint`,executable:n,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,capability:`lint`,executable:n,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},Zr=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Hr(t,`oxfmt`),r=Ur(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}async plan(e,t){let n=await Gr(e.cwd,this.id,this.name,`oxfmt`,`oxfmt`);return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,capability:`format`,executable:n,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,capability:`format`,executable:n,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},Qr=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Vr;vitePlusAdapter=new Kr;biomeAdapter=new qr;prettierAdapter=new Jr;eslintAdapter=new Yr;oxlintAdapter=new Xr;oxfmtAdapter=new Zr;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},$r=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??!1?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}async plan(e,t){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},ei=class{id=`python`;name=`Python`;ruffAdapter=new $r;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},ti=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function ni(){let e=new ti;return e.registerProvider(new ei),e.registerProvider(new Qr),e}const ri=ni();async function ii(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function ai(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Pr(ri,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await ii(vn(n),e);let i=(await new kr().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function oi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function si(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await oi(e,r,t)}}async function ci(e=process.cwd(),t){if(!(t??or(e)))return;if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);let n={cwd:e,hasPythonSource:!0},r=ri.getProvider(`python`)?.getAdapters(n).find(e=>e.id===`ruff`);if(!r)throw Error(`Ruff adapter not found in registry.`);let i=await r.plan(n,`fix`),a=(await new kr().executeTasks(i)).filter(e=>e.error);if(a.length>0){let e=a.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function li(e){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{return await ai(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ui(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await si(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function di(e,t){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await ci(e,t),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function fi(e,t){let n=t??or(e);if(!n)return[];let r=[],i=ir(e),a=await ui(e,{ctx:i,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:i,hasSource:!0,isProject:!0})});a&&r.push(a);let o=await di(e,n);return o&&r.push(o),r}async function pi(e=process.cwd()){let t=or(e);try{let n=fn(e),r={cwd:e,jsEnv:n,jsPm:cn(process.env.PACKAGE_MANAGER||_n(n).name),hasPythonSource:t};en((await Pr(ri,r,`fix`)).summary)}catch{}let n=[],r=await li(e);r&&n.push(r);let i=await fi(e,t);n.push(...i),n.length>0&&(Zt(`Failed to run scripts: ${n.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&pi();export{ai as executeJsWorkflow,si as executePythonWorkflow,ci as executeRuffAutofix,pi as run,cn as sanitizePackageManager}; \ No newline at end of file +`&&e[i]!==`\r`;)r+=` `,i++;return i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}var kr=class{async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();en(`Executing: ${e}`);try{let r=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,i=await Yt(n.executable,n.args,{cwd:n.cwd,env:r,ignoreReturnCode:!0});if(i!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${i}.`;t.push({task:n,exitCode:i,error:Error(r)})}else t.push({task:n,exitCode:i})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function Ar(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`):t.has(e)}function jr(e,t){let n=[],r=[];for(let i of e)Ar(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Mr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=jr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)t.add(e.capability);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Nr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Pr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Fr(e,t,n=`fix`){let r=[],i=[],a=[],o=e.getProviders(),s=/* @__PURE__ */ new Map;for(let e of o){if(!await e.detect(t))continue;let o=/* @__PURE__ */ new Set;s.set(e.id,o);let c=e.getAdapters(t),l=[];for(let e of c){let n=await e.detect(t);n.detected?l.push({adapter:e,reason:n.reason}):n.reason&&!n.reason.startsWith(`no `)&&i.push({id:e.id,name:e.name,reason:n.reason})}await Mr(l,o,t,n,r,i,a)}await Nr(e,t,n,r,a);let c=Pr(a);return{tasks:c,selectedTools:r,skippedTools:i,summary:Ir(e,t,r,i,c)}}function Ir(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` +`)}function Lr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0}function Rr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function zr(e,t){return e?RegExp(`(?:run\\s+)?\\b${t}\\b`).test(e):!1}function Br(e,t,n){return!n||n===t?!1:!zr(e[t]||``,n)}function Vr(e,t,n){return!n||n===t?!1:!zr(e[t]||``,n)}function Hr(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Lr(e,`fix`),r=Rr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=[{capability:`autofix`,scriptName:t}];return n&&Br(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&Vr(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function Ur(e){let t=[],n=Lr(e,`check`),r=Rr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Wr(e,t){return t===`fix`?Hr(e):Ur(e)}var Gr=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Wr(t,`fix`);return n.length>0?{detected:!0,reason:`found autofix scripts: ${n.map(e=>`"${e.scriptName}"`).join(`, `)}`}:{detected:!1,reason:`no supported autofix scripts found in package.json`}}plan(e,t){let n=Wr(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Kr(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function qr(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}async function Jr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}async function Yr(e,t,n,r,i){let a=await Jr(e,r);if(!a)throw Error(`Configured tool "${n}" could not run: executable "${r}" is not available in node_modules/.bin or PATH. Please install "${i}" in project dependencies.`);return a}var Xr=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=qr(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}async plan(e,t){let n=await Yr(e.cwd,this.id,this.name,`vp`,`vite-plus`);return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,capability:`format`,executable:n,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,capability:`lint`,executable:n,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,capability:`format`,executable:n,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,capability:`lint`,executable:n,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},Zr=class{id=`biome`;name=`Biome`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Kr(t,`@biomejs/biome`),r=qr(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}async plan(e,t){let n=await Yr(e.cwd,this.id,this.name,`biome`,`@biomejs/biome`);return t===`fix`?[{id:`biome-check-fix`,toolId:this.id,capability:`autofix`,executable:n,args:[`check`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: check --write .`}]:[{id:`biome-check`,toolId:this.id,capability:`autofix`,executable:n,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check .`}]}},Qr=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Kr(t,`prettier`),r=!!t?.prettier,i=qr(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}async plan(e,t){let n=await Yr(e.cwd,this.id,this.name,`prettier`,`prettier`);return t===`fix`?[{id:`prettier-format`,toolId:this.id,capability:`format`,executable:n,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,capability:`format`,executable:n,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},$r=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Kr(t,`eslint`),r=!!t?.eslintConfig,i=qr(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}async plan(e,t){let n=await Yr(e.cwd,this.id,this.name,`eslint`,`eslint`);return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,capability:`lint`,executable:n,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,capability:`lint`,executable:n,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},ei=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Kr(t,`oxlint`),r=qr(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}async plan(e,t){let n=await Yr(e.cwd,this.id,this.name,`oxlint`,`oxlint`);return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,capability:`lint`,executable:n,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,capability:`lint`,executable:n,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ti=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Kr(t,`oxfmt`),r=qr(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}async plan(e,t){let n=await Yr(e.cwd,this.id,this.name,`oxfmt`,`oxfmt`);return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,capability:`format`,executable:n,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,capability:`format`,executable:n,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},ni=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Gr;vitePlusAdapter=new Xr;biomeAdapter=new Zr;prettierAdapter=new Qr;eslintAdapter=new $r;oxlintAdapter=new ei;oxfmtAdapter=new ti;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},ri=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??!1?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}async plan(e,t){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},ii=class{id=`python`;name=`Python`;ruffAdapter=new ri;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},ai=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function oi(){let e=new ai;return e.registerProvider(new ii),e.registerProvider(new ni),e}const si=oi();async function ci(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function li(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Fr(si,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await ci(vn(n),e);let i=(await new kr().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function ui(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function di(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await ui(e,r,t)}}async function fi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Fr(si,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new kr().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function pi(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await ci(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new kr().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await li(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function mi(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await di(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function hi(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await fi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function gi(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await mi(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await hi(e,r,n);return s&&i.push(s),i}async function _i(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Fr(si,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await pi(e,i);o&&r.push(o);let s=await gi(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&_i();export{li as executeJsWorkflow,di as executePythonWorkflow,fi as executeRuffAutofix,_i as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index 9ec8d3fc..2c0d787d 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -19,13 +19,16 @@ function resolveFormatScript( mode: ExecutionMode, ): string | undefined { if (mode === "fix") { + // Formatter scripts that modify files return scripts["format:write"] ? "format:write" - : scripts.format - ? "format" - : scripts.fmt - ? "fmt" - : undefined; + : scripts["format:fix"] + ? "format:fix" + : scripts.format + ? "format" + : scripts.fmt + ? "fmt" + : undefined; } return scripts["format:check"] ? "format:check" @@ -43,60 +46,62 @@ function resolveLintScript( mode: ExecutionMode, ): string | undefined { if (mode === "fix") { - // In fix mode, prefer scripts explicitly indicating modifications: - // lint:fix, lint:write. - // If only lint is defined (and neither lint:fix nor lint:check exist), - // and format/fmt is also defined in supported script conventions, - // "lint" is recognized for compatibility with legacy test suites / conventions. - // However, standalone "lint:check" is never run in fix mode. + // In fix mode, ONLY select scripts that clearly express an autofix or write operation. + // Plain "lint", "lint:check", "check", "test", or "typecheck" are never run as autofix tasks! if (scripts["lint:fix"]) return "lint:fix"; if (scripts["lint:write"]) return "lint:write"; - if (scripts.lint && !scripts["lint:check"]) return "lint"; return undefined; } return scripts["lint:check"] ? "lint:check" : scripts.lint ? "lint" : undefined; } +function doesFixScriptDelegateTo(fixScriptBody: string, targetScriptName: string): boolean { + if (!fixScriptBody) return false; + // Check if target script is explicitly invoked (e.g. `npm run format`, `pnpm format`, `run format`) + const pattern = new RegExp(`(?:run\\s+)?\\b${targetScriptName}\\b`); + return pattern.test(fixScriptBody); +} + +function shouldIncludeFormatWithFix( + scripts: Record, + fixScript: string, + formatScript?: string, +): boolean { + if (!formatScript || formatScript === fixScript) return false; + const fixBody = scripts[fixScript] || ""; + // Do not suppress independent format script unless fix demonstrably delegates to it + return !doesFixScriptDelegateTo(fixBody, formatScript); +} + +function shouldIncludeLintWithFix( + scripts: Record, + fixScript: string, + lintScript?: string, +): boolean { + if (!lintScript || lintScript === fixScript) return false; + const fixBody = scripts[fixScript] || ""; + // Do not suppress independent lint fix script unless fix demonstrably delegates to it + return !doesFixScriptDelegateTo(fixBody, lintScript); +} + function resolveFixScriptTasks(scripts: Record): ScriptMapping[] { - const mappings: ScriptMapping[] = []; const fixScript = scripts.fix ? "fix" : scripts["check:fix"] ? "check:fix" : undefined; const formatScript = resolveFormatScript(scripts, "fix"); const lintScript = resolveLintScript(scripts, "fix"); - if (fixScript) { - mappings.push({ capability: "autofix", scriptName: fixScript }); - // If independent format or lint scripts exist, check if fix delegates to them or if they should run - // When a project defines both "fix" and independent format / lint scripts: - // If fix is "fix", check whether it covers them: - const fixBody = scripts[fixScript] || ""; - const coversFormat = - fixBody.includes(formatScript || "") || fixBody.includes("format") || fixBody.includes("fmt"); - const coversLint = fixBody.includes(lintScript || "") || fixBody.includes("lint"); - - // Only add independent scripts if fix does not already cover them - if ( - formatScript && - formatScript !== fixScript && - !coversFormat && - (scripts["format:write"] || !scripts.fix) - ) { - mappings.push({ capability: "format", scriptName: formatScript }); - } - if ( - lintScript && - lintScript !== fixScript && - !coversLint && - (scripts["lint:fix"] || scripts["lint:write"]) - ) { - mappings.push({ capability: "lint", scriptName: lintScript }); - } - } else { - if (formatScript) { - mappings.push({ capability: "format", scriptName: formatScript }); - } - if (lintScript) { - mappings.push({ capability: "lint", scriptName: lintScript }); - } + if (!fixScript) { + const fallbackMappings: ScriptMapping[] = []; + if (formatScript) fallbackMappings.push({ capability: "format", scriptName: formatScript }); + if (lintScript) fallbackMappings.push({ capability: "lint", scriptName: lintScript }); + return fallbackMappings; + } + + const mappings: ScriptMapping[] = [{ capability: "autofix", scriptName: fixScript }]; + if (formatScript && shouldIncludeFormatWithFix(scripts, fixScript, formatScript)) { + mappings.push({ capability: "format", scriptName: formatScript }); + } + if (lintScript && shouldIncludeLintWithFix(scripts, fixScript, lintScript)) { + mappings.push({ capability: "lint", scriptName: lintScript }); } return mappings; @@ -129,13 +134,6 @@ export class JavaScriptScriptAdapter implements ToolAdapter { public readonly name = "package.json scripts"; public readonly capabilities: readonly Capability[] = ["autofix", "format", "lint"]; - public getCapabilities(context: ProjectContext, mode: ExecutionMode = "fix"): Capability[] { - const scripts = context.jsEnv?.packageJson?.scripts; - if (!scripts) return []; - const tasks = resolveScriptTasks(scripts, mode); - return Array.from(new Set(tasks.map((t) => t.capability))); - } - public detect(context: ProjectContext): AdapterDetectionResult { const scripts = context.jsEnv?.packageJson?.scripts; if (!scripts || Object.keys(scripts).length === 0) { diff --git a/src/autofix/index.ts b/src/autofix/index.ts index 21e189fb..f7247600 100644 --- a/src/autofix/index.ts +++ b/src/autofix/index.ts @@ -2,7 +2,7 @@ import * as core from "@actions/core"; import * as exec from "@actions/exec"; import * as io from "@actions/io"; -import type { ProjectContext } from "./types.js"; +import type { ExecutionTask, PlannedExecution, ProjectContext } from "./types.js"; import { getJsInstallationPlan, @@ -125,30 +125,31 @@ export async function executePythonWorkflow( export async function executeRuffAutofix( cwd: string = process.cwd(), hasSource?: boolean, + preplannedTasks?: ExecutionTask[], ): Promise { const hasSourceCode = hasSource ?? hasPythonSource(cwd); if (!hasSourceCode) { return; } - const hasRuff = Boolean(await io.which("ruff", false)); - if (!hasRuff) { - const message = "Required Python binary 'ruff' is not available in PATH."; - throw new Error(message); - } - - const context: ProjectContext = { - cwd, - hasPythonSource: true, - }; + let tasks: ExecutionTask[]; + if (preplannedTasks) { + tasks = preplannedTasks; + } else { + const hasRuff = Boolean(await io.which("ruff", false)); + if (!hasRuff) { + const message = "Required Python binary 'ruff' is not available in PATH."; + throw new Error(message); + } - const ruffProvider = defaultRegistry.getProvider("python"); - const ruffAdapter = ruffProvider?.getAdapters(context).find((a) => a.id === "ruff"); - if (!ruffAdapter) { - throw new Error("Ruff adapter not found in registry."); + const context: ProjectContext = { + cwd, + hasPythonSource: true, + }; + const ruffPlan = await planExecution(defaultRegistry, context, "fix"); + tasks = ruffPlan.tasks.filter((t) => t.toolId === "ruff"); } - const tasks = await ruffAdapter.plan(context, "fix"); const engine = new ExecutionEngine(); const results = await engine.executeTasks(tasks); const failures = results.filter((r) => r.error); @@ -158,7 +159,10 @@ export async function executeRuffAutofix( } } -async function runJsWorkflowStep(cwd: string): Promise { +async function runJsWorkflowStep( + cwd: string, + preplannedJsTasks?: ExecutionTask[], +): Promise { const jsSetupFailed = process.env.JS_SETUP_OUTCOME === "failure" || process.env.NODE_SETUP_OUTCOME === "failure" || @@ -170,6 +174,34 @@ async function runJsWorkflowStep(cwd: string): Promise { } try { + if (preplannedJsTasks) { + const jsEnv = inspectJsProjectEnvironment(cwd); + if (!jsEnv.hasPackageJson) { + core.info("No package.json found. Skipping scripts."); + return null; + } + if (jsEnv.packageJsonError) { + throw new Error(jsEnv.packageJsonError); + } + if (preplannedJsTasks.length === 0) { + core.info("No matching scripts (fix, format, lint, check, etc.) found in package.json."); + return null; + } + const rawPm = process.env.PACKAGE_MANAGER || resolveJsPackageManager(jsEnv).name; + const pm = sanitizePackageManager(rawPm) as SupportedPackageManager; + const installPlan = getJsInstallationPlan(pm); + await runJsInstallationPlan(installPlan, cwd); + + const engine = new ExecutionEngine(); + const results = await engine.executeTasks(preplannedJsTasks); + const failures = results.filter((r) => r.error); + if (failures.length > 0) { + const errorMessages = failures.map((f) => f.error?.message || `Task ${f.task.id} failed`); + throw new Error(errorMessages.join("\n")); + } + return null; + } + await executeJsWorkflow(cwd); return null; } catch (error) { @@ -214,7 +246,11 @@ async function runPythonDepsStep( } } -async function runRuffStep(cwd: string, hasSource?: boolean): Promise { +async function runRuffStep( + cwd: string, + hasSource?: boolean, + preplannedTasks?: ExecutionTask[], +): Promise { const ruffSetupFailed = process.env.RUFF_SETUP_OUTCOME === "failure"; if (ruffSetupFailed) { @@ -222,14 +258,18 @@ async function runRuffStep(cwd: string, hasSource?: boolean): Promise { +async function runPythonWorkflowStep( + cwd: string, + hasSource?: boolean, + preplannedPythonTasks?: ExecutionTask[], +): Promise { const hasSourceCode = hasSource ?? hasPythonSource(cwd); if (!hasSourceCode) { return []; @@ -249,7 +289,7 @@ async function runPythonWorkflowStep(cwd: string, hasSource?: boolean): Promise< errors.push(depsErr); } - const ruffErr = await runRuffStep(cwd, hasSourceCode); + const ruffErr = await runRuffStep(cwd, hasSourceCode, preplannedPythonTasks); if (ruffErr) { errors.push(ruffErr); } @@ -259,8 +299,9 @@ async function runPythonWorkflowStep(cwd: string, hasSource?: boolean): Promise< export async function run(cwd: string = process.cwd()): Promise { const hasSource = hasPythonSource(cwd); + let overallPlan: PlannedExecution | undefined; - // Emit explainable execution plan summary before execution + // Emit explainable execution plan summary before execution using shared planner try { const jsEnv = inspectJsProjectEnvironment(cwd); const rawPm = process.env.PACKAGE_MANAGER || resolveJsPackageManager(jsEnv).name; @@ -272,7 +313,7 @@ export async function run(cwd: string = process.cwd()): Promise { jsPm: pm, hasPythonSource: hasSource, }; - const overallPlan = await planExecution(defaultRegistry, fullContext, "fix"); + overallPlan = await planExecution(defaultRegistry, fullContext, "fix"); core.info(overallPlan.summary); } catch { // Planning summary logging is best-effort and should not halt execution @@ -280,12 +321,17 @@ export async function run(cwd: string = process.cwd()): Promise { const errors: Error[] = []; - const jsErr = await runJsWorkflowStep(cwd); + const jsTasks = overallPlan ? overallPlan.tasks.filter((t) => t.toolId !== "ruff") : undefined; + const pythonTasks = overallPlan + ? overallPlan.tasks.filter((t) => t.toolId === "ruff") + : undefined; + + const jsErr = await runJsWorkflowStep(cwd, jsTasks); if (jsErr) { errors.push(jsErr); } - const pythonErrs = await runPythonWorkflowStep(cwd, hasSource); + const pythonErrs = await runPythonWorkflowStep(cwd, hasSource, pythonTasks); errors.push(...pythonErrs); if (errors.length > 0) { diff --git a/src/autofix/planner.ts b/src/autofix/planner.ts index d5eddf2f..3ba1e705 100644 --- a/src/autofix/planner.ts +++ b/src/autofix/planner.ts @@ -10,41 +10,38 @@ import type { interface CandidateTool { adapter: ToolAdapter; - capabilities: Capability[]; reason?: string; } -function checkCapabilityConflict( - capabilities: Capability[], - providerCapabilities: Set, -): string | null { - const hasAutofixCovered = providerCapabilities.has("autofix"); - const hasFormatCovered = providerCapabilities.has("format"); - const hasLintCovered = providerCapabilities.has("lint"); - - if (capabilities.includes("autofix")) { - if (hasAutofixCovered || (hasFormatCovered && hasLintCovered)) { - return "overlapping capabilities already covered by higher priority tool"; - } +function isTaskCapabilityCovered( + taskCapability: Capability, + coveredCapabilities: Set, +): boolean { + if (coveredCapabilities.has("autofix")) { + return true; } - - if ( - capabilities.length === 1 && - capabilities[0] === "format" && - (hasAutofixCovered || hasFormatCovered) - ) { - return "formatting capability already covered by higher priority tool"; + if (taskCapability === "autofix") { + return coveredCapabilities.has("format") && coveredCapabilities.has("lint"); } + return coveredCapabilities.has(taskCapability); +} - if ( - capabilities.length === 1 && - capabilities[0] === "lint" && - (hasAutofixCovered || hasLintCovered) - ) { - return "linting capability already covered by higher priority tool"; +function filterCandidateTasks( + plannedTasks: ExecutionTask[], + providerCapabilities: Set, +): { kept: ExecutionTask[]; skipped: ExecutionTask[] } { + const kept: ExecutionTask[] = []; + const skipped: ExecutionTask[] = []; + + for (const task of plannedTasks) { + if (isTaskCapabilityCovered(task.capability, providerCapabilities)) { + skipped.push(task); + } else { + kept.push(task); + } } - return null; + return { kept, skipped }; } async function processCandidateTools( @@ -58,25 +55,37 @@ async function processCandidateTools( ): Promise { for (const candidate of candidateTools) { const adapter = candidate.adapter; - const capabilities = candidate.capabilities; + const plannedTasks = await adapter.plan(context, mode); + + if (plannedTasks.length === 0) { + continue; + } + + const { kept, skipped } = filterCandidateTasks(plannedTasks, providerCapabilities); - const conflictReason = checkCapabilityConflict(capabilities, providerCapabilities); - if (conflictReason) { + if (kept.length === 0) { skippedTools.push({ id: adapter.id, name: adapter.name, - reason: conflictReason, + reason: "all capabilities already covered by higher priority tool", }); continue; } selectedTools.push({ id: adapter.id, name: adapter.name, reason: candidate.reason }); - for (const cap of capabilities) { - providerCapabilities.add(cap); + for (const task of kept) { + providerCapabilities.add(task.capability); } + tasks.push(...kept); - const toolTasks = await adapter.plan(context, mode); - tasks.push(...toolTasks); + if (skipped.length > 0) { + const skippedCaps = Array.from(new Set(skipped.map((t) => t.capability))).join(", "); + skippedTools.push({ + id: adapter.id, + name: adapter.name, + reason: `partially skipped (${skippedCaps} covered by higher priority tool)`, + }); + } } } @@ -114,11 +123,9 @@ function deduplicateTasks(tasks: ExecutionTask[]): ExecutionTask[] { * * Conflict Resolution Rules: * 1. Explicit scripts have top priority for JS/TS tasks. - * 2. If a tool or script covers "autofix" (combined lint and format), standalone formatters or linters - * for the same language are skipped to prevent duplicate work or overwriting changes. - * 3. Do not run multiple formatters over the same files (e.g. Biome vs Prettier vs Oxfmt). - * 4. Do not run multiple linters over the same files (e.g. Biome vs ESLint vs Oxlint). - * 5. Execution ordering is deterministic: lint before format for safety and consistency, or toolchain standard. + * 2. Treat actual planned tasks as the authoritative source of capability coverage. + * 3. Partial capability overlap skips only overlapping tasks while retaining independent tasks. + * 4. Deduplicate genuinely equivalent tasks deterministically. */ export async function planExecution( registry: AutofixRegistry, @@ -130,8 +137,6 @@ export async function planExecution( const tasks: ExecutionTask[] = []; const providers = registry.getProviders(); - - // Track covered capabilities per language to prevent duplicate runs const coveredCapabilities = new Map>(); for (const provider of providers) { @@ -150,12 +155,8 @@ export async function planExecution( for (const adapter of adapters) { const result = await adapter.detect(context); if (result.detected) { - const caps = adapter.getCapabilities - ? adapter.getCapabilities(context, mode) - : Array.from(adapter.capabilities); - candidateTools.push({ adapter, capabilities: caps, reason: result.reason }); + candidateTools.push({ adapter, reason: result.reason }); } else if (result.reason && !result.reason.startsWith("no ")) { - // Reason worth logging as skipped (e.g. dependency present without configuration) skippedTools.push({ id: adapter.id, name: adapter.name, reason: result.reason }); } } diff --git a/src/autofix/types.ts b/src/autofix/types.ts index 74dda621..dcf0349e 100644 --- a/src/autofix/types.ts +++ b/src/autofix/types.ts @@ -36,8 +36,6 @@ export interface ToolAdapter { name: string; capabilities: readonly Capability[]; - getCapabilities?(context: ProjectContext, mode?: ExecutionMode): Capability[]; - detect(context: ProjectContext): Promise | AdapterDetectionResult; plan(context: ProjectContext, mode: ExecutionMode): Promise | ExecutionTask[]; diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index a7825885..075958f9 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -144,7 +144,7 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { ); }); - it("does NOT execute 'check', 'test', or 'typecheck' scripts as autofix commands in fix mode", async () => { + it("does NOT execute 'check', 'test', 'typecheck', 'lint', or 'lint:check' as autofix commands in fix mode", async () => { fs.writeFileSync( path.join(tempDir, "package.json"), JSON.stringify({ @@ -152,6 +152,8 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { check: "tsc --noEmit", test: "vitest run", typecheck: "tsc", + lint: "eslint .", + "lint:check": "eslint .", }, }), ); @@ -186,12 +188,19 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { it("distinguishes fix mode and check mode for lint scripts", () => { expect(resolveScriptTasks({ "lint:check": "eslint ." }, "fix")).toEqual([]); + expect(resolveScriptTasks({ lint: "eslint ." }, "fix")).toEqual([]); expect(resolveScriptTasks({ "lint:check": "eslint ." }, "check")).toEqual([ { capability: "lint", scriptName: "lint:check" }, ]); + expect(resolveScriptTasks({ lint: "eslint ." }, "check")).toEqual([ + { capability: "lint", scriptName: "lint" }, + ]); expect(resolveScriptTasks({ "lint:fix": "eslint --fix ." }, "fix")).toEqual([ { capability: "lint", scriptName: "lint:fix" }, ]); + expect(resolveScriptTasks({ "lint:write": "eslint --fix ." }, "fix")).toEqual([ + { capability: "lint", scriptName: "lint:write" }, + ]); }); }); @@ -297,6 +306,38 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { expect.objectContaining({ cwd: tempDir }), ); }); + + it("resolves capabilities dynamically: 'format:write' script + Vite+ runs Vite+ lint while skipping Vite+ fmt", async () => { + vi.spyOn(io, "which").mockImplementation(async (bin) => { + if (bin === "vp") return "/usr/local/bin/vp"; + return ""; + }); + + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + "format:write": "prettier --write .", + }, + devDependencies: { "vite-plus": "^1.4.0" }, + }), + ); + fs.writeFileSync(path.join(tempDir, "vite.config.ts"), "export default {};"); + + await run(tempDir); + + expect(exec.exec).toHaveBeenCalledWith( + "npm", + ["run", "format:write"], + expect.objectContaining({ cwd: tempDir }), + ); + expect(exec.exec).toHaveBeenCalledWith( + "/usr/local/bin/vp", + ["lint", "--fix"], + expect.objectContaining({ cwd: tempDir }), + ); + expect(exec.exec).not.toHaveBeenCalledWith("/usr/local/bin/vp", ["fmt"], expect.anything()); + }); }); describe("Error Aggregation Across Multiple Failures", () => { diff --git a/tests/autofix.test.ts b/tests/autofix.test.ts index 0ef538fe..bd002d62 100644 --- a/tests/autofix.test.ts +++ b/tests/autofix.test.ts @@ -59,7 +59,7 @@ describe("autofix", () => { type: "basic", executable: "npm", installArgs: ["install"], - expectedScriptNames: ["format", "lint"], + expectedScriptNames: ["format"], }, { action: "autofix", @@ -68,7 +68,7 @@ describe("autofix", () => { type: "basic", executable: "pnpm", installArgs: ["install", "--no-frozen-lockfile"], - expectedScriptNames: ["format", "lint"], + expectedScriptNames: ["format"], }, { action: "autofix", @@ -77,7 +77,7 @@ describe("autofix", () => { type: "basic", executable: "bun", installArgs: ["install"], - expectedScriptNames: ["format", "lint"], + expectedScriptNames: ["format"], }, ]; @@ -934,24 +934,28 @@ describe("autofix", () => { describe("script execution routing", () => { const scriptCases = [ { - name: "fix script priority over all", - scripts: { fix: "echo fix", format: "echo format", lint: "echo lint" }, + name: "fix script delegates to format:write and lint:fix", + scripts: { + fix: "npm run format:write && npm run lint:fix", + "format:write": "echo format", + "lint:fix": "echo lint", + }, expectedCalls: [["npm", ["run", "fix"]]], }, { - name: "format and lint scripts when fix is absent", - scripts: { format: "echo format", lint: "echo lint" }, + name: "format:write and lint:fix scripts when fix is absent", + scripts: { "format:write": "echo format", "lint:fix": "echo lint" }, expectedCalls: [ - ["npm", ["run", "format"]], - ["npm", ["run", "lint"]], + ["npm", ["run", "format:write"]], + ["npm", ["run", "lint:fix"]], ], }, { - name: "fmt and lint scripts when format is absent", - scripts: { fmt: "echo fmt", lint: "echo lint" }, + name: "fmt and lint:fix scripts when format is absent", + scripts: { fmt: "echo fmt", "lint:fix": "echo lint" }, expectedCalls: [ ["npm", ["run", "fmt"]], - ["npm", ["run", "lint"]], + ["npm", ["run", "lint:fix"]], ], }, { @@ -965,12 +969,12 @@ describe("autofix", () => { expectedCalls: [["npm", ["run", "fmt"]]], }, { - name: "lint script only", - scripts: { lint: "echo lint" }, - expectedCalls: [["npm", ["run", "lint"]]], + name: "lint:fix script only", + scripts: { "lint:fix": "echo lint" }, + expectedCalls: [["npm", ["run", "lint:fix"]]], }, { - name: "check script as lowest priority fallback", + name: "combined fix script fallback", scripts: { fix: "echo fix" }, expectedCalls: [["npm", ["run", "fix"]]], }, From 37de1f204aeb84ee64a15e9b54f00be408747ce6 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 6 Nov 2026 14:12:34 +0000 Subject: [PATCH 04/25] refactor(autofix): correct capability resolution and execution reliability From 5323da33b7f41ce99947ee5d50e6f86eac1b2a28 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 6 Nov 2026 16:15:19 +0000 Subject: [PATCH 05/25] refactor(autofix): correct capability resolution and execution reliability --- .../autofix-tool-adapters-capability.md | 2 +- autofix/README.md | 1 + dist/autofix.mjs | 12 +- .../adapters/javascript/script-adapter.ts | 27 ++-- src/autofix/adapters/javascript/tools.ts | 131 +++++++----------- src/autofix/adapters/python/ruff.ts | 15 +- src/autofix/engine.ts | 58 +++++++- src/autofix/types.ts | 2 + tests/autofix-architecture.test.ts | 3 +- 9 files changed, 138 insertions(+), 113 deletions(-) diff --git a/.changeset/autofix-tool-adapters-capability.md b/.changeset/autofix-tool-adapters-capability.md index db8160f2..a492c4b6 100644 --- a/.changeset/autofix-tool-adapters-capability.md +++ b/.changeset/autofix-tool-adapters-capability.md @@ -2,4 +2,4 @@ "@area44/workflows": minor --- -Refactor autofix architecture with capability-aware tool adapters, default Python Ruff toolchain, task-based capability conflict resolution, strict script selection in fix mode, safe executable resolution without unpinned npx downloads, and aggregated error reporting across independent tasks. +Refactor autofix architecture with capability-aware tool adapters, default Python Ruff toolchain, execution-time binary resolution lifecycle (allowing planning before dependency installation), strict script selection in fix mode, reliable delegation parsing, and aggregated error reporting across independent tasks. diff --git a/autofix/README.md b/autofix/README.md index 67b24efd..68e81a35 100644 --- a/autofix/README.md +++ b/autofix/README.md @@ -37,6 +37,7 @@ The `autofix` composite action automatically formats and fixes code across multi - **Oxlint:** High-performance JavaScript linter (`oxlint --fix .`). - **Oxfmt:** High-performance code formatter (`oxfmt --write .`). - **Intentional Configuration Requirement:** Dependency presence alone is not sufficient to run a tool; active configuration files (e.g., `biome.json`, `.prettierrc`, `eslint.config.js`) or manifest configuration sections must be detected. + - **Execution-Time Executable Resolution:** Adapters construct declarative task definitions during planning without requiring local executables to exist in `node_modules/.bin` beforehand. Dependencies are installed and provisioned prior to task execution, at which point local project binaries are safely resolved (with actionable missing-dependency diagnostics if absent). - **Explainable Execution Plan:** Logs a readable execution summary detailing detected environments, selected tools, skipped tools with reasons (e.g. overlapping capabilities), and the planned tasks. - **Independent Execution:** JavaScript and Python workflows run independently within the same action step, aggregating diagnostics and failures. - **autofix.ci Integration:** Automatically invokes `autofix-ci/action` when running inside the `autofix.ci` workflow context. diff --git a/dist/autofix.mjs b/dist/autofix.mjs index ce849023..1a1d79ce 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -303,9 +303,9 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `?` `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}var kr=class{async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();en(`Executing: ${e}`);try{let r=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,i=await Yt(n.executable,n.args,{cwd:n.cwd,env:r,ignoreReturnCode:!0});if(i!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${i}.`;t.push({task:n,exitCode:i,error:Error(r)})}else t.push({task:n,exitCode:i})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function Ar(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`):t.has(e)}function jr(e,t){let n=[],r=[];for(let i of e)Ar(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Mr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=jr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)t.add(e.capability);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Nr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Pr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Fr(e,t,n=`fix`){let r=[],i=[],a=[],o=e.getProviders(),s=/* @__PURE__ */ new Map;for(let e of o){if(!await e.detect(t))continue;let o=/* @__PURE__ */ new Set;s.set(e.id,o);let c=e.getAdapters(t),l=[];for(let e of c){let n=await e.detect(t);n.detected?l.push({adapter:e,reason:n.reason}):n.reason&&!n.reason.startsWith(`no `)&&i.push({id:e.id,name:e.name,reason:n.reason})}await Mr(l,o,t,n,r,i,a)}await Nr(e,t,n,r,a);let c=Pr(a);return{tasks:c,selectedTools:r,skippedTools:i,summary:Ir(e,t,r,i,c)}}function Ir(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` -`)}function Lr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0}function Rr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function zr(e,t){return e?RegExp(`(?:run\\s+)?\\b${t}\\b`).test(e):!1}function Br(e,t,n){return!n||n===t?!1:!zr(e[t]||``,n)}function Vr(e,t,n){return!n||n===t?!1:!zr(e[t]||``,n)}function Hr(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Lr(e,`fix`),r=Rr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=[{capability:`autofix`,scriptName:t}];return n&&Br(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&Vr(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function Ur(e){let t=[],n=Lr(e,`check`),r=Rr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Wr(e,t){return t===`fix`?Hr(e):Ur(e)}var Gr=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Wr(t,`fix`);return n.length>0?{detected:!0,reason:`found autofix scripts: ${n.map(e=>`"${e.scriptName}"`).join(`, `)}`}:{detected:!1,reason:`no supported autofix scripts found in package.json`}}plan(e,t){let n=Wr(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Kr(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function qr(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}async function Jr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}async function Yr(e,t,n,r,i){let a=await Jr(e,r);if(!a)throw Error(`Configured tool "${n}" could not run: executable "${r}" is not available in node_modules/.bin or PATH. Please install "${i}" in project dependencies.`);return a}var Xr=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=qr(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}async plan(e,t){let n=await Yr(e.cwd,this.id,this.name,`vp`,`vite-plus`);return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,capability:`format`,executable:n,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,capability:`lint`,executable:n,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,capability:`format`,executable:n,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,capability:`lint`,executable:n,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},Zr=class{id=`biome`;name=`Biome`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Kr(t,`@biomejs/biome`),r=qr(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}async plan(e,t){let n=await Yr(e.cwd,this.id,this.name,`biome`,`@biomejs/biome`);return t===`fix`?[{id:`biome-check-fix`,toolId:this.id,capability:`autofix`,executable:n,args:[`check`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: check --write .`}]:[{id:`biome-check`,toolId:this.id,capability:`autofix`,executable:n,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check .`}]}},Qr=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Kr(t,`prettier`),r=!!t?.prettier,i=qr(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}async plan(e,t){let n=await Yr(e.cwd,this.id,this.name,`prettier`,`prettier`);return t===`fix`?[{id:`prettier-format`,toolId:this.id,capability:`format`,executable:n,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,capability:`format`,executable:n,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},$r=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Kr(t,`eslint`),r=!!t?.eslintConfig,i=qr(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}async plan(e,t){let n=await Yr(e.cwd,this.id,this.name,`eslint`,`eslint`);return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,capability:`lint`,executable:n,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,capability:`lint`,executable:n,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},ei=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Kr(t,`oxlint`),r=qr(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}async plan(e,t){let n=await Yr(e.cwd,this.id,this.name,`oxlint`,`oxlint`);return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,capability:`lint`,executable:n,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,capability:`lint`,executable:n,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ti=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Kr(t,`oxfmt`),r=qr(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}async plan(e,t){let n=await Yr(e.cwd,this.id,this.name,`oxfmt`,`oxfmt`);return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,capability:`format`,executable:n,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,capability:`format`,executable:n,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},ni=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Gr;vitePlusAdapter=new Xr;biomeAdapter=new Zr;prettierAdapter=new Qr;eslintAdapter=new $r;oxlintAdapter=new ei;oxfmtAdapter=new ti;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},ri=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??!1?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}async plan(e,t){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},ii=class{id=`python`;name=`Python`;ruffAdapter=new ri;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},ai=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function oi(){let e=new ai;return e.registerProvider(new ii),e.registerProvider(new ni),e}const si=oi();async function ci(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function li(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Fr(si,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await ci(vn(n),e);let i=(await new kr().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function ui(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function di(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await ui(e,r,t)}}async function fi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Fr(si,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new kr().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function pi(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await ci(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new kr().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}return null}return await li(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function mi(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await di(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function hi(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await fi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function gi(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await mi(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await hi(e,r,n);return s&&i.push(s),i}async function _i(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Fr(si,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await pi(e,i);o&&r.push(o);let s=await gi(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&_i();export{li as executeJsWorkflow,di as executePythonWorkflow,fi as executeRuffAutofix,_i as run,cn as sanitizePackageManager}; \ No newline at end of file +`&&e[i]!==`\r`;)r+=` `,i++;return i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)t.add(e.capability);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=[],i=[],a=[],o=e.getProviders(),s=/* @__PURE__ */ new Map;for(let e of o){if(!await e.detect(t))continue;let o=/* @__PURE__ */ new Set;s.set(e.id,o);let c=e.getAdapters(t),l=[];for(let e of c){let n=await e.detect(t);n.detected?l.push({adapter:e,reason:n.reason}):n.reason&&!n.reason.startsWith(`no `)&&i.push({id:e.id,name:e.name,reason:n.reason})}await Nr(l,o,t,n,r,i,a)}await Pr(e,t,n,r,a);let c=Fr(a);return{tasks:c,selectedTools:r,skippedTools:i,summary:Lr(e,t,r,i,c)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` +`)}function Rr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0}function zr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function Br(e,t){if(!e)return!1;let n=t.replace(/[-/\\^$*+?.()|[\]{}]/g,`\\$&`);return RegExp(`(?:^|[;&|]|&&)\\s*(?:npm\\s+run|pnpm\\s+run|bun\\s+run|yarn\\s+run|pnpm|bun|yarn)\\s+${n}(?:\\s+[^-;&|]+)*(?:\\s*([;&|]|&&)|$)`).test(e.trim())}function Vr(e,t,n){return!n||n===t?!1:!Br(e[t]||``,n)}function Hr(e,t,n){return!n||n===t?!1:!Br(e[t]||``,n)}function Ur(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=zr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=[{capability:`autofix`,scriptName:t}];return n&&Vr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&Hr(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function Wr(e){let t=[],n=Rr(e,`check`),r=zr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Gr(e,t){return t===`fix`?Ur(e):Wr(e)}var Kr=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Gr(t,`fix`);return n.length>0?{detected:!0,reason:`found autofix scripts: ${n.map(e=>`"${e.scriptName}"`).join(`, `)}`}:{detected:!1,reason:`no supported autofix scripts found in package.json`}}plan(e,t){let n=Gr(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function qr(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function Jr(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var Yr=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=Jr(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},Xr=class{id=`biome`;name=`Biome`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=qr(t,`@biomejs/biome`),r=Jr(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-check-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: check --write .`}]:[{id:`biome-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check .`}]}},Zr=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=qr(t,`prettier`),r=!!t?.prettier,i=Jr(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},Qr=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=qr(t,`eslint`),r=!!t?.eslintConfig,i=Jr(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},$r=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=qr(t,`oxlint`),r=Jr(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ei=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=qr(t,`oxfmt`),r=Jr(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},ti=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Kr;vitePlusAdapter=new Yr;biomeAdapter=new Xr;prettierAdapter=new Zr;eslintAdapter=new Qr;oxlintAdapter=new $r;oxfmtAdapter=new ei;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},ni=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},ri=class{id=`python`;name=`Python`;ruffAdapter=new ni;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},ii=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function ai(){let e=new ii;return e.registerProvider(new ri),e.registerProvider(new ti),e}const oi=ai();async function si(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function ci(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(oi,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await si(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function li(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function ui(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await li(e,r,t)}}async function di(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(oi,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function fi(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await si(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await ci(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function pi(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await ui(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function mi(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await di(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function hi(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await pi(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await mi(e,r,n);return s&&i.push(s),i}async function gi(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(oi,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await fi(e,i);o&&r.push(o);let s=await hi(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&gi();export{ci as executeJsWorkflow,ui as executePythonWorkflow,di as executeRuffAutofix,gi as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index 2c0d787d..16e2a61b 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -55,32 +55,39 @@ function resolveLintScript( return scripts["lint:check"] ? "lint:check" : scripts.lint ? "lint" : undefined; } -function doesFixScriptDelegateTo(fixScriptBody: string, targetScriptName: string): boolean { +/** + * Recognizes actual supported package-manager script invocation commands: + * e.g. `npm run format:write`, `pnpm run format`, `bun run lint:fix`, `yarn run lint:fix`, `pnpm format`, `bun format` + * Does not match `echo format`, comments, quoted explanatory text, or substrings. + */ +export function doesFixScriptDelegateTo(fixScriptBody: string, targetScriptName: string): boolean { if (!fixScriptBody) return false; - // Check if target script is explicitly invoked (e.g. `npm run format`, `pnpm format`, `run format`) - const pattern = new RegExp(`(?:run\\s+)?\\b${targetScriptName}\\b`); - return pattern.test(fixScriptBody); + const escapedTarget = targetScriptName.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"); + // Matches explicit package manager invocation: + // e.g. npm run , pnpm run , bun run , yarn run , pnpm , bun + const pattern = new RegExp( + `(?:^|[;&|]|&&)\\s*(?:npm\\s+run|pnpm\\s+run|bun\\s+run|yarn\\s+run|pnpm|bun|yarn)\\s+${escapedTarget}(?:\\s+[^-;&|]+)*(?:\\s*([;&|]|&&)|$)`, + ); + return pattern.test(fixScriptBody.trim()); } -function shouldIncludeFormatWithFix( +function shouldIncludeIndependentFormat( scripts: Record, fixScript: string, formatScript?: string, ): boolean { if (!formatScript || formatScript === fixScript) return false; const fixBody = scripts[fixScript] || ""; - // Do not suppress independent format script unless fix demonstrably delegates to it return !doesFixScriptDelegateTo(fixBody, formatScript); } -function shouldIncludeLintWithFix( +function shouldIncludeIndependentLint( scripts: Record, fixScript: string, lintScript?: string, ): boolean { if (!lintScript || lintScript === fixScript) return false; const fixBody = scripts[fixScript] || ""; - // Do not suppress independent lint fix script unless fix demonstrably delegates to it return !doesFixScriptDelegateTo(fixBody, lintScript); } @@ -97,10 +104,10 @@ function resolveFixScriptTasks(scripts: Record): ScriptMapping[] } const mappings: ScriptMapping[] = [{ capability: "autofix", scriptName: fixScript }]; - if (formatScript && shouldIncludeFormatWithFix(scripts, fixScript, formatScript)) { + if (formatScript && shouldIncludeIndependentFormat(scripts, fixScript, formatScript)) { mappings.push({ capability: "format", scriptName: formatScript }); } - if (lintScript && shouldIncludeLintWithFix(scripts, fixScript, lintScript)) { + if (lintScript && shouldIncludeIndependentLint(scripts, fixScript, lintScript)) { mappings.push({ capability: "lint", scriptName: lintScript }); } diff --git a/src/autofix/adapters/javascript/tools.ts b/src/autofix/adapters/javascript/tools.ts index e8a76e43..0b59e629 100644 --- a/src/autofix/adapters/javascript/tools.ts +++ b/src/autofix/adapters/javascript/tools.ts @@ -1,4 +1,3 @@ -import * as io from "@actions/io"; import fs from "node:fs"; import path from "node:path"; @@ -32,43 +31,6 @@ function hasAnyConfigFile(cwd: string, filenames: string[]): boolean { return false; } -/** - * Resolves local project binary safely without falling back to `npx` (which could download unpinned packages). - * Checks node_modules/.bin/ first, then PATH via io.which. - */ -export async function resolveProjectBinary( - cwd: string, - toolBinary: string, -): Promise { - const localBinPath = path.join(cwd, "node_modules", ".bin", toolBinary); - if (fs.existsSync(localBinPath)) { - return localBinPath; - } - - const pathBin = await io.which(toolBinary, false); - if (pathBin) { - return pathBin; - } - - return undefined; -} - -async function requireToolBinary( - cwd: string, - toolId: string, - toolName: string, - binName: string, - depName: string, -): Promise { - const resolved = await resolveProjectBinary(cwd, binName); - if (!resolved) { - throw new Error( - `Configured tool "${toolName}" could not run: executable "${binName}" is not available in node_modules/.bin or PATH. Please install "${depName}" in project dependencies.`, - ); - } - return resolved; -} - // 1. Vite+ Adapter export class VitePlusAdapter implements ToolAdapter { public readonly id = "vite-plus"; @@ -94,17 +56,16 @@ export class VitePlusAdapter implements ToolAdapter { return { detected: false, reason: "no Vite+ dependency or configuration" }; } - public async plan(context: ProjectContext, mode: ExecutionMode): Promise { - const executable = await requireToolBinary(context.cwd, this.id, this.name, "vp", "vite-plus"); - + public plan(context: ProjectContext, mode: ExecutionMode): ExecutionTask[] { if (mode === "fix") { - // In fix mode, run formatting and lint fixes without triggering validation/typechecking return [ { id: "vite-plus-fmt", toolId: this.id, + toolName: this.name, + requiredPackage: "vite-plus", capability: "format", - executable, + executable: "vp", args: ["fmt"], cwd: context.cwd, mode: "fix", @@ -113,8 +74,10 @@ export class VitePlusAdapter implements ToolAdapter { { id: "vite-plus-lint-fix", toolId: this.id, + toolName: this.name, + requiredPackage: "vite-plus", capability: "lint", - executable, + executable: "vp", args: ["lint", "--fix"], cwd: context.cwd, mode: "fix", @@ -127,8 +90,10 @@ export class VitePlusAdapter implements ToolAdapter { { id: "vite-plus-fmt-check", toolId: this.id, + toolName: this.name, + requiredPackage: "vite-plus", capability: "format", - executable, + executable: "vp", args: ["fmt", "--check"], cwd: context.cwd, mode: "check", @@ -137,8 +102,10 @@ export class VitePlusAdapter implements ToolAdapter { { id: "vite-plus-lint", toolId: this.id, + toolName: this.name, + requiredPackage: "vite-plus", capability: "lint", - executable, + executable: "vp", args: ["lint"], cwd: context.cwd, mode: "check", @@ -171,22 +138,16 @@ export class BiomeAdapter implements ToolAdapter { return { detected: false, reason: "no Biome dependency or configuration" }; } - public async plan(context: ProjectContext, mode: ExecutionMode): Promise { - const executable = await requireToolBinary( - context.cwd, - this.id, - this.name, - "biome", - "@biomejs/biome", - ); - + public plan(context: ProjectContext, mode: ExecutionMode): ExecutionTask[] { if (mode === "fix") { return [ { id: "biome-check-fix", toolId: this.id, + toolName: this.name, + requiredPackage: "@biomejs/biome", capability: "autofix", - executable, + executable: "biome", args: ["check", "--write", "."], cwd: context.cwd, mode: "fix", @@ -199,8 +160,10 @@ export class BiomeAdapter implements ToolAdapter { { id: "biome-check", toolId: this.id, + toolName: this.name, + requiredPackage: "@biomejs/biome", capability: "autofix", - executable, + executable: "biome", args: ["check", "."], cwd: context.cwd, mode: "check", @@ -246,22 +209,16 @@ export class PrettierAdapter implements ToolAdapter { return { detected: false, reason: "no Prettier dependency or configuration" }; } - public async plan(context: ProjectContext, mode: ExecutionMode): Promise { - const executable = await requireToolBinary( - context.cwd, - this.id, - this.name, - "prettier", - "prettier", - ); - + public plan(context: ProjectContext, mode: ExecutionMode): ExecutionTask[] { if (mode === "fix") { return [ { id: "prettier-format", toolId: this.id, + toolName: this.name, + requiredPackage: "prettier", capability: "format", - executable, + executable: "prettier", args: ["--write", "."], cwd: context.cwd, mode: "fix", @@ -274,8 +231,10 @@ export class PrettierAdapter implements ToolAdapter { { id: "prettier-check", toolId: this.id, + toolName: this.name, + requiredPackage: "prettier", capability: "format", - executable, + executable: "prettier", args: ["--check", "."], cwd: context.cwd, mode: "check", @@ -320,16 +279,16 @@ export class EslintAdapter implements ToolAdapter { return { detected: false, reason: "no ESLint dependency or configuration" }; } - public async plan(context: ProjectContext, mode: ExecutionMode): Promise { - const executable = await requireToolBinary(context.cwd, this.id, this.name, "eslint", "eslint"); - + public plan(context: ProjectContext, mode: ExecutionMode): ExecutionTask[] { if (mode === "fix") { return [ { id: "eslint-lint-fix", toolId: this.id, + toolName: this.name, + requiredPackage: "eslint", capability: "lint", - executable, + executable: "eslint", args: ["--fix", "."], cwd: context.cwd, mode: "fix", @@ -342,8 +301,10 @@ export class EslintAdapter implements ToolAdapter { { id: "eslint-lint-check", toolId: this.id, + toolName: this.name, + requiredPackage: "eslint", capability: "lint", - executable, + executable: "eslint", args: ["."], cwd: context.cwd, mode: "check", @@ -381,16 +342,16 @@ export class OxlintAdapter implements ToolAdapter { return { detected: false, reason: "no Oxlint dependency or configuration" }; } - public async plan(context: ProjectContext, mode: ExecutionMode): Promise { - const executable = await requireToolBinary(context.cwd, this.id, this.name, "oxlint", "oxlint"); - + public plan(context: ProjectContext, mode: ExecutionMode): ExecutionTask[] { if (mode === "fix") { return [ { id: "oxlint-lint-fix", toolId: this.id, + toolName: this.name, + requiredPackage: "oxlint", capability: "lint", - executable, + executable: "oxlint", args: ["--fix", "."], cwd: context.cwd, mode: "fix", @@ -403,8 +364,10 @@ export class OxlintAdapter implements ToolAdapter { { id: "oxlint-lint-check", toolId: this.id, + toolName: this.name, + requiredPackage: "oxlint", capability: "lint", - executable, + executable: "oxlint", args: ["."], cwd: context.cwd, mode: "check", @@ -442,16 +405,16 @@ export class OxfmtAdapter implements ToolAdapter { return { detected: false, reason: "no Oxfmt dependency or configuration" }; } - public async plan(context: ProjectContext, mode: ExecutionMode): Promise { - const executable = await requireToolBinary(context.cwd, this.id, this.name, "oxfmt", "oxfmt"); - + public plan(context: ProjectContext, mode: ExecutionMode): ExecutionTask[] { if (mode === "fix") { return [ { id: "oxfmt-format", toolId: this.id, + toolName: this.name, + requiredPackage: "oxfmt", capability: "format", - executable, + executable: "oxfmt", args: ["--write", "."], cwd: context.cwd, mode: "fix", @@ -464,8 +427,10 @@ export class OxfmtAdapter implements ToolAdapter { { id: "oxfmt-check", toolId: this.id, + toolName: this.name, + requiredPackage: "oxfmt", capability: "format", - executable, + executable: "oxfmt", args: ["--check", "."], cwd: context.cwd, mode: "check", diff --git a/src/autofix/adapters/python/ruff.ts b/src/autofix/adapters/python/ruff.ts index c907b4b5..eec31a73 100644 --- a/src/autofix/adapters/python/ruff.ts +++ b/src/autofix/adapters/python/ruff.ts @@ -1,5 +1,3 @@ -import * as io from "@actions/io"; - import type { AdapterDetectionResult, Capability, @@ -9,26 +7,23 @@ import type { ToolAdapter, } from "../../types.js"; +import { hasPythonSource } from "../../../python-env.js"; + export class RuffAdapter implements ToolAdapter { public readonly id = "ruff"; public readonly name = "Ruff"; - public readonly capabilities: Capability[] = ["lint", "format"]; + public readonly capabilities: readonly Capability[] = ["lint", "format"]; public detect(context: ProjectContext): AdapterDetectionResult { // Ruff is the default toolchain whenever Python source code is detected - const hasSource = context.hasPythonSource ?? false; + const hasSource = context.hasPythonSource ?? hasPythonSource(context.cwd); if (hasSource) { return { detected: true, reason: "default Python toolchain" }; } return { detected: false, reason: "no Python source files detected" }; } - public async plan(context: ProjectContext, mode: ExecutionMode): Promise { - const hasRuff = Boolean(await io.which("ruff", false)); - if (!hasRuff) { - throw new Error("Required Python binary 'ruff' is not available in PATH."); - } - + public plan(context: ProjectContext, mode: ExecutionMode): ExecutionTask[] { const tasks: ExecutionTask[] = []; if (mode === "fix") { diff --git a/src/autofix/engine.ts b/src/autofix/engine.ts index 0c4fbdd5..3cfd3cae 100644 --- a/src/autofix/engine.ts +++ b/src/autofix/engine.ts @@ -1,5 +1,8 @@ import * as core from "@actions/core"; import * as exec from "@actions/exec"; +import * as io from "@actions/io"; +import fs from "node:fs"; +import path from "node:path"; import type { ExecutionTask } from "./types.js"; @@ -9,7 +12,56 @@ export interface ExecutionResult { error?: Error; } +/** + * Resolves local project binary safely without falling back to `npx` (which could download unpinned packages). + * Checks node_modules/.bin/ first, then PATH via io.which. + */ +export async function resolveProjectBinary( + cwd: string, + toolBinary: string, +): Promise { + const localBinPath = path.join(cwd, "node_modules", ".bin", toolBinary); + if (fs.existsSync(localBinPath)) { + return localBinPath; + } + + const pathBin = await io.which(toolBinary, false); + if (pathBin) { + return pathBin; + } + + return undefined; +} + export class ExecutionEngine { + /** + * Resolves the executable path for a task at execution time (after dependencies are provisioned). + */ + public async resolveTaskExecutable(task: ExecutionTask): Promise { + if (task.toolId === "npm-scripts") { + return task.executable; + } + + if (task.toolId === "ruff") { + const hasRuff = Boolean(await io.which("ruff", false)); + if (!hasRuff) { + throw new Error("Required Python binary 'ruff' is not available in PATH."); + } + return "ruff"; + } + + // Tool adapters: resolve from node_modules/.bin or PATH + const resolved = await resolveProjectBinary(task.cwd, task.executable); + if (!resolved) { + const toolName = task.toolName || task.toolId; + const depName = task.requiredPackage || task.executable; + throw new Error( + `Configured tool "${toolName}" could not run: executable "${task.executable}" is not available in node_modules/.bin or PATH. Please install "${depName}" in project dependencies.`, + ); + } + return resolved; + } + /** * Executes tasks sequentially, capturing diagnostics and aggregating any task errors. */ @@ -18,9 +70,11 @@ export class ExecutionEngine { for (const task of tasks) { const displayCmd = `${task.executable} ${task.args.join(" ")}`.trim(); - core.info(`Executing: ${displayCmd}`); try { + const resolvedExecutable = await this.resolveTaskExecutable(task); + core.info(`Executing: ${displayCmd}`); + const env = task.env ? (Object.fromEntries( Object.entries({ ...process.env, ...task.env }).filter( @@ -29,7 +83,7 @@ export class ExecutionEngine { ) as Record) : undefined; - const exitCode = await exec.exec(task.executable, task.args, { + const exitCode = await exec.exec(resolvedExecutable, task.args, { cwd: task.cwd, env, ignoreReturnCode: true, diff --git a/src/autofix/types.ts b/src/autofix/types.ts index dcf0349e..7ad474e3 100644 --- a/src/autofix/types.ts +++ b/src/autofix/types.ts @@ -15,6 +15,8 @@ export interface ExecutionTask { mode: ExecutionMode; env?: Record; description?: string; + toolName?: string; + requiredPackage?: string; } export interface ProjectContext { diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index 075958f9..da728ef4 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -420,11 +420,12 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { const engine = new ExecutionEngine(); vi.mocked(exec.exec).mockResolvedValue(0); + vi.spyOn(io, "which").mockResolvedValue("/usr/bin/cargo"); const results = await engine.executeTasks(plan.tasks); expect(results).toHaveLength(1); expect(results[0].exitCode).toBe(0); expect(exec.exec).toHaveBeenCalledWith( - "cargo", + "/usr/bin/cargo", ["fmt"], expect.objectContaining({ cwd: tempDir }), ); From 9cfc11438ee2a234997aa507be7cb49130efb843 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 6 Nov 2026 16:58:45 +0000 Subject: [PATCH 06/25] Refactor autofix architecture with capability adapters Refactor autofix architecture to support default toolchains, capability-based detection, and extensible tool adapters. Python uses Ruff as the default toolchain without requiring dependency detection. JavaScript/TypeScript employs hybrid detection respecting explicit scripts and tool configuration. Core orchestration is language-agnostic with deterministic conflict resolution and aggregated error handling. --- dist/autofix.mjs | 14 +- .../adapters/javascript/script-adapter.ts | 139 ++++++++++++++++-- src/autofix/planner.ts | 23 ++- tests/autofix-architecture.test.ts | 22 +++ 4 files changed, 174 insertions(+), 24 deletions(-) diff --git a/dist/autofix.mjs b/dist/autofix.mjs index 1a1d79ce..a881b2cc 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -303,9 +303,11 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `?` `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)t.add(e.capability);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=[],i=[],a=[],o=e.getProviders(),s=/* @__PURE__ */ new Map;for(let e of o){if(!await e.detect(t))continue;let o=/* @__PURE__ */ new Set;s.set(e.id,o);let c=e.getAdapters(t),l=[];for(let e of c){let n=await e.detect(t);n.detected?l.push({adapter:e,reason:n.reason}):n.reason&&!n.reason.startsWith(`no `)&&i.push({id:e.id,name:e.name,reason:n.reason})}await Nr(l,o,t,n,r,i,a)}await Pr(e,t,n,r,a);let c=Fr(a);return{tasks:c,selectedTools:r,skippedTools:i,summary:Lr(e,t,r,i,c)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` -`)}function Rr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0}function zr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function Br(e,t){if(!e)return!1;let n=t.replace(/[-/\\^$*+?.()|[\]{}]/g,`\\$&`);return RegExp(`(?:^|[;&|]|&&)\\s*(?:npm\\s+run|pnpm\\s+run|bun\\s+run|yarn\\s+run|pnpm|bun|yarn)\\s+${n}(?:\\s+[^-;&|]+)*(?:\\s*([;&|]|&&)|$)`).test(e.trim())}function Vr(e,t,n){return!n||n===t?!1:!Br(e[t]||``,n)}function Hr(e,t,n){return!n||n===t?!1:!Br(e[t]||``,n)}function Ur(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=zr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=[{capability:`autofix`,scriptName:t}];return n&&Vr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&Hr(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function Wr(e){let t=[],n=Rr(e,`check`),r=zr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Gr(e,t){return t===`fix`?Ur(e):Wr(e)}var Kr=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Gr(t,`fix`);return n.length>0?{detected:!0,reason:`found autofix scripts: ${n.map(e=>`"${e.scriptName}"`).join(`, `)}`}:{detected:!1,reason:`no supported autofix scripts found in package.json`}}plan(e,t){let n=Gr(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function qr(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function Jr(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var Yr=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=Jr(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},Xr=class{id=`biome`;name=`Biome`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=qr(t,`@biomejs/biome`),r=Jr(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-check-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: check --write .`}]:[{id:`biome-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check .`}]}},Zr=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=qr(t,`prettier`),r=!!t?.prettier,i=Jr(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},Qr=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=qr(t,`eslint`),r=!!t?.eslintConfig,i=Jr(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},$r=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=qr(t,`oxlint`),r=Jr(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ei=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=qr(t,`oxfmt`),r=Jr(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},ti=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Kr;vitePlusAdapter=new Yr;biomeAdapter=new Xr;prettierAdapter=new Zr;eslintAdapter=new Qr;oxlintAdapter=new $r;oxfmtAdapter=new ei;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},ni=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},ri=class{id=`python`;name=`Python`;ruffAdapter=new ni;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},ii=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function ai(){let e=new ii;return e.registerProvider(new ri),e.registerProvider(new ti),e}const oi=ai();async function si(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function ci(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(oi,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await si(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function li(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function ui(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await li(e,r,t)}}async function di(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(oi,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function fi(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await si(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}return null}return await ci(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function pi(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await ui(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function mi(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await di(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function hi(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await pi(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await mi(e,r,n);return s&&i.push(s),i}async function gi(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(oi,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await fi(e,i);o&&r.push(o);let s=await hi(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&gi();export{ci as executeJsWorkflow,ui as executePythonWorkflow,di as executeRuffAutofix,gi as run,cn as sanitizePackageManager}; \ No newline at end of file +`&&e[i]!==`\r`;)r+=` `,i++;return i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)t.add(e.capability);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i={...t,hasPythonSource:r},a=[],o=[],s=[],c=e.getProviders(),l=/* @__PURE__ */ new Map;for(let e of c){if(!await e.detect(i))continue;let t=/* @__PURE__ */ new Set;l.set(e.id,t);let r=e.getAdapters(i),c=[];for(let e of r){let t=await e.detect(i);t.detected?c.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&o.push({id:e.id,name:e.name,reason:t.reason})}await Nr(c,t,i,n,a,o,s)}await Pr(e,i,n,a,s);let u=Fr(s);return{tasks:u,selectedTools:a,skippedTools:o,summary:Lr(e,i,a,o,u)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` +`)}function Rr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0}function zr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function Br(e){let t=[],n=``,r=!1,i=!1,a=!1;for(let o=0;o0?{detected:!0,reason:`found autofix scripts: ${n.map(e=>`"${e.scriptName}"`).join(`, `)}`}:{detected:!1,reason:`no supported autofix scripts found in package.json`}}plan(e,t){let n=Kr(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Jr(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function Yr(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var Xr=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=Yr(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},Zr=class{id=`biome`;name=`Biome`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Jr(t,`@biomejs/biome`),r=Yr(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-check-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: check --write .`}]:[{id:`biome-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check .`}]}},Qr=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Jr(t,`prettier`),r=!!t?.prettier,i=Yr(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},$r=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Jr(t,`eslint`),r=!!t?.eslintConfig,i=Yr(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},ei=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Jr(t,`oxlint`),r=Yr(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ti=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Jr(t,`oxfmt`),r=Yr(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},ni=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new qr;vitePlusAdapter=new Xr;biomeAdapter=new Zr;prettierAdapter=new Qr;eslintAdapter=new $r;oxlintAdapter=new ei;oxfmtAdapter=new ti;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},ri=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},ii=class{id=`python`;name=`Python`;ruffAdapter=new ri;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},ai=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function oi(){let e=new ai;return e.registerProvider(new ii),e.registerProvider(new ni),e}const si=oi();async function ci(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function li(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(si,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await ci(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function ui(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function di(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await ui(e,r,t)}}async function fi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(si,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function pi(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await ci(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await li(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function mi(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await di(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function hi(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await fi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function gi(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await mi(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await hi(e,r,n);return s&&i.push(s),i}async function _i(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(si,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await pi(e,i);o&&r.push(o);let s=await gi(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&_i();export{li as executeJsWorkflow,di as executePythonWorkflow,fi as executeRuffAutofix,_i as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index 16e2a61b..b5ca4b2b 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -55,6 +55,104 @@ function resolveLintScript( return scripts["lint:check"] ? "lint:check" : scripts.lint ? "lint" : undefined; } +/** + * Splits a shell command string into pipeline/chained commands (;, &&, ||, |) + * while respecting single quotes ('...'), double quotes ("..."), and backslash escapes (\). + * Replaces any quoted content with blank tokens so text inside strings is never mistaken for commands. + */ +function tokenizeShellCommands(shellText: string): string[] { + const commands: string[] = []; + let currentCmd = ""; + let inSingleQuote = false; + let inDoubleQuote = false; + let isEscaped = false; + + for (let i = 0; i < shellText.length; i++) { + const ch = shellText[i]; + + if (isEscaped) { + currentCmd += " "; + isEscaped = false; + continue; + } + + if (ch === "\\" && !inSingleQuote) { + isEscaped = true; + currentCmd += " "; + continue; + } + + if (ch === "'" && !inDoubleQuote) { + inSingleQuote = !inSingleQuote; + currentCmd += " "; + continue; + } + + if (ch === '"' && !inSingleQuote) { + inDoubleQuote = !inDoubleQuote; + currentCmd += " "; + continue; + } + + // Inside quotes: suppress content + if (inSingleQuote || inDoubleQuote) { + currentCmd += " "; + continue; + } + + // Shell comment: rest of the line is ignored + if (ch === "#") { + while (i < shellText.length && shellText[i] !== "\n") { + i++; + } + continue; + } + + // Command separators: ;, &&, ||, | + if (ch === ";" || ch === "\n") { + if (currentCmd.trim()) { + commands.push(currentCmd.trim()); + } + currentCmd = ""; + continue; + } + + if (ch === "&" && shellText[i + 1] === "&") { + if (currentCmd.trim()) { + commands.push(currentCmd.trim()); + } + currentCmd = ""; + i++; + continue; + } + + if (ch === "|" && shellText[i + 1] === "|") { + if (currentCmd.trim()) { + commands.push(currentCmd.trim()); + } + currentCmd = ""; + i++; + continue; + } + + if (ch === "|") { + if (currentCmd.trim()) { + commands.push(currentCmd.trim()); + } + currentCmd = ""; + continue; + } + + currentCmd += ch; + } + + if (currentCmd.trim()) { + commands.push(currentCmd.trim()); + } + + return commands; +} + /** * Recognizes actual supported package-manager script invocation commands: * e.g. `npm run format:write`, `pnpm run format`, `bun run lint:fix`, `yarn run lint:fix`, `pnpm format`, `bun format` @@ -62,16 +160,35 @@ function resolveLintScript( */ export function doesFixScriptDelegateTo(fixScriptBody: string, targetScriptName: string): boolean { if (!fixScriptBody) return false; - const escapedTarget = targetScriptName.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&"); - // Matches explicit package manager invocation: - // e.g. npm run , pnpm run , bun run , yarn run , pnpm , bun - const pattern = new RegExp( - `(?:^|[;&|]|&&)\\s*(?:npm\\s+run|pnpm\\s+run|bun\\s+run|yarn\\s+run|pnpm|bun|yarn)\\s+${escapedTarget}(?:\\s+[^-;&|]+)*(?:\\s*([;&|]|&&)|$)`, - ); - return pattern.test(fixScriptBody.trim()); + + const commands = tokenizeShellCommands(fixScriptBody); + + for (const cmd of commands) { + // Split into whitespace-separated words + const tokens = cmd.split(/\s+/).filter(Boolean); + if (tokens.length === 0) continue; + + const [first, second, third] = tokens; + + // Check `npm run `, `pnpm run `, `yarn run `, `bun run ` + if ( + (first === "npm" || first === "pnpm" || first === "yarn" || first === "bun") && + second === "run" && + third === targetScriptName + ) { + return true; + } + + // Check `pnpm `, `bun `, `yarn ` + if ((first === "pnpm" || first === "bun" || first === "yarn") && second === targetScriptName) { + return true; + } + } + + return false; } -function shouldIncludeIndependentFormat( +function shouldIncludeFormatWithFix( scripts: Record, fixScript: string, formatScript?: string, @@ -81,7 +198,7 @@ function shouldIncludeIndependentFormat( return !doesFixScriptDelegateTo(fixBody, formatScript); } -function shouldIncludeIndependentLint( +function shouldIncludeLintWithFix( scripts: Record, fixScript: string, lintScript?: string, @@ -104,10 +221,10 @@ function resolveFixScriptTasks(scripts: Record): ScriptMapping[] } const mappings: ScriptMapping[] = [{ capability: "autofix", scriptName: fixScript }]; - if (formatScript && shouldIncludeIndependentFormat(scripts, fixScript, formatScript)) { + if (formatScript && shouldIncludeFormatWithFix(scripts, fixScript, formatScript)) { mappings.push({ capability: "format", scriptName: formatScript }); } - if (lintScript && shouldIncludeIndependentLint(scripts, fixScript, lintScript)) { + if (lintScript && shouldIncludeLintWithFix(scripts, fixScript, lintScript)) { mappings.push({ capability: "lint", scriptName: lintScript }); } diff --git a/src/autofix/planner.ts b/src/autofix/planner.ts index 3ba1e705..b9d4594e 100644 --- a/src/autofix/planner.ts +++ b/src/autofix/planner.ts @@ -8,6 +8,8 @@ import type { ToolAdapter, } from "./types.js"; +import { hasPythonSource } from "../python-env.js"; + interface CandidateTool { adapter: ToolAdapter; reason?: string; @@ -132,6 +134,13 @@ export async function planExecution( context: ProjectContext, mode: ExecutionMode = "fix", ): Promise { + // Ensure consistent Python source detection across provider, adapter, and plan diagnostics + const resolvedHasPythonSource = context.hasPythonSource ?? hasPythonSource(context.cwd); + const effectiveContext: ProjectContext = { + ...context, + hasPythonSource: resolvedHasPythonSource, + }; + const selectedTools: Array<{ id: string; name: string; reason?: string }> = []; const skippedTools: Array<{ id: string; name: string; reason: string }> = []; const tasks: ExecutionTask[] = []; @@ -140,7 +149,7 @@ export async function planExecution( const coveredCapabilities = new Map>(); for (const provider of providers) { - const isDetected = await provider.detect(context); + const isDetected = await provider.detect(effectiveContext); if (!isDetected) { continue; } @@ -148,12 +157,12 @@ export async function planExecution( const providerCapabilities = new Set(); coveredCapabilities.set(provider.id, providerCapabilities); - const adapters = provider.getAdapters(context); + const adapters = provider.getAdapters(effectiveContext); const candidateTools: CandidateTool[] = []; // Detect tools for (const adapter of adapters) { - const result = await adapter.detect(context); + const result = await adapter.detect(effectiveContext); if (result.detected) { candidateTools.push({ adapter, reason: result.reason }); } else if (result.reason && !result.reason.startsWith("no ")) { @@ -164,7 +173,7 @@ export async function planExecution( await processCandidateTools( candidateTools, providerCapabilities, - context, + effectiveContext, mode, selectedTools, skippedTools, @@ -172,14 +181,14 @@ export async function planExecution( ); } - await processStandaloneAdapters(registry, context, mode, selectedTools, tasks); + await processStandaloneAdapters(registry, effectiveContext, mode, selectedTools, tasks); const deduplicatedTasks = deduplicateTasks(tasks); - // Generate explainable summary + // Generate explainable summary using effectiveContext with consistent Python detection const summary = formatExecutionPlanSummary( registry, - context, + effectiveContext, selectedTools, skippedTools, deduplicatedTasks, diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index da728ef4..fa5018f4 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -186,6 +186,28 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { expect(tasks.map((t) => t.scriptName)).toEqual(["fix"]); }); + it("rejects false positives from strings inside echo or comments in doesFixScriptDelegateTo", () => { + const scripts = { + fix: 'echo "&& npm run format:write;" && npm run lint:fix', + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + // "format:write" was inside quotes in echo, so fix does NOT delegate to format:write! + expect(tasks.map((t) => t.scriptName)).toEqual(["fix", "format:write"]); + }); + + it("evaluates Python detection accurately when planExecution receives { cwd } without precomputed hasPythonSource", async () => { + fs.writeFileSync(path.join(tempDir, "app.py"), "print('hello')\n"); + const registry = createDefaultRegistry(); + const plan = await planExecution(registry, { cwd: tempDir }, "fix"); + + expect(plan.tasks.some((t) => t.toolId === "ruff")).toBe(true); + expect(plan.selectedTools.some((t) => t.id === "ruff")).toBe(true); + expect(plan.summary).toContain("Python: true"); + expect(plan.summary).toContain("Ruff: default tool"); + }); + it("distinguishes fix mode and check mode for lint scripts", () => { expect(resolveScriptTasks({ "lint:check": "eslint ." }, "fix")).toEqual([]); expect(resolveScriptTasks({ lint: "eslint ." }, "fix")).toEqual([]); From 0d65467237b0ab75a237477705d4c21bcaa9f636 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 6 Nov 2026 17:06:49 +0000 Subject: [PATCH 07/25] Reduce complexity in script-adapter tokenization Decompose tokenizeShellCommands into smaller helper functions (processQuoteOrEscape, getSeparatorLength, skipComment) to reduce cyclomatic complexity for CodeFactor. Rebuild distribution bundles. --- dist/autofix.mjs | 14 +-- .../adapters/javascript/script-adapter.ts | 114 ++++++++---------- 2 files changed, 57 insertions(+), 71 deletions(-) diff --git a/dist/autofix.mjs b/dist/autofix.mjs index a881b2cc..96424c21 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -304,10 +304,10 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)t.add(e.capability);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i={...t,hasPythonSource:r},a=[],o=[],s=[],c=e.getProviders(),l=/* @__PURE__ */ new Map;for(let e of c){if(!await e.detect(i))continue;let t=/* @__PURE__ */ new Set;l.set(e.id,t);let r=e.getAdapters(i),c=[];for(let e of r){let t=await e.detect(i);t.detected?c.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&o.push({id:e.id,name:e.name,reason:t.reason})}await Nr(c,t,i,n,a,o,s)}await Pr(e,i,n,a,s);let u=Fr(s);return{tasks:u,selectedTools:a,skippedTools:o,summary:Lr(e,i,a,o,u)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` -`)}function Rr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0}function zr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function Br(e){let t=[],n=``,r=!1,i=!1,a=!1;for(let o=0;o0?{detected:!0,reason:`found autofix scripts: ${n.map(e=>`"${e.scriptName}"`).join(`, `)}`}:{detected:!1,reason:`no supported autofix scripts found in package.json`}}plan(e,t){let n=Kr(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Jr(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function Yr(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var Xr=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=Yr(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},Zr=class{id=`biome`;name=`Biome`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Jr(t,`@biomejs/biome`),r=Yr(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-check-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: check --write .`}]:[{id:`biome-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check .`}]}},Qr=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Jr(t,`prettier`),r=!!t?.prettier,i=Yr(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},$r=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Jr(t,`eslint`),r=!!t?.eslintConfig,i=Yr(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},ei=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Jr(t,`oxlint`),r=Yr(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ti=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Jr(t,`oxfmt`),r=Yr(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},ni=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new qr;vitePlusAdapter=new Xr;biomeAdapter=new Zr;prettierAdapter=new Qr;eslintAdapter=new $r;oxlintAdapter=new ei;oxfmtAdapter=new ti;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},ri=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},ii=class{id=`python`;name=`Python`;ruffAdapter=new ri;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},ai=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function oi(){let e=new ai;return e.registerProvider(new ii),e.registerProvider(new ni),e}const si=oi();async function ci(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function li(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(si,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await ci(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function ui(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function di(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await ui(e,r,t)}}async function fi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(si,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function pi(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await ci(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}return null}return await li(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function mi(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await di(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function hi(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await fi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function gi(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await mi(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await hi(e,r,n);return s&&i.push(s),i}async function _i(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(si,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await pi(e,i);o&&r.push(o);let s=await gi(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&_i();export{li as executeJsWorkflow,di as executePythonWorkflow,fi as executeRuffAutofix,_i as run,cn as sanitizePackageManager}; \ No newline at end of file +`)}function Rr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0}function zr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function Br(e,t){return t.isEscaped?(t.isEscaped=!1,!0):e===`\\`&&!t.inSingleQuote?(t.isEscaped=!0,!0):e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote?(t.inDoubleQuote=!t.inDoubleQuote,!0):t.inSingleQuote||t.inDoubleQuote}function Vr(e,t){let n=e[t];return n===`;`||n===` +`?1:n===`&`&&e[t+1]===`&`||n===`|`&&e[t+1]===`|`?2:+(n===`|`)}function Hr(e,t){let n=t;for(;n0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Wr(e,t){if(!e)return!1;let n=Ur(e);for(let e of n){let n=e.split(/\s+/).filter(Boolean);if(n.length===0)continue;let[r,i,a]=n;if((r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t)return!0}return!1}function Gr(e,t,n){return!n||n===t?!1:!Wr(e[t]||``,n)}function Kr(e,t,n){return!n||n===t?!1:!Wr(e[t]||``,n)}function qr(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=zr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=[{capability:`autofix`,scriptName:t}];return n&&Gr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&Kr(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function Jr(e){let t=[],n=Rr(e,`check`),r=zr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Yr(e,t){return t===`fix`?qr(e):Jr(e)}var Xr=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Yr(t,`fix`);return n.length>0?{detected:!0,reason:`found autofix scripts: ${n.map(e=>`"${e.scriptName}"`).join(`, `)}`}:{detected:!1,reason:`no supported autofix scripts found in package.json`}}plan(e,t){let n=Yr(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Zr(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function Qr(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var $r=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=Qr(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},ei=class{id=`biome`;name=`Biome`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Zr(t,`@biomejs/biome`),r=Qr(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-check-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: check --write .`}]:[{id:`biome-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check .`}]}},ti=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Zr(t,`prettier`),r=!!t?.prettier,i=Qr(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},ni=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Zr(t,`eslint`),r=!!t?.eslintConfig,i=Qr(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},ri=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Zr(t,`oxlint`),r=Qr(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ii=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Zr(t,`oxfmt`),r=Qr(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},ai=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Xr;vitePlusAdapter=new $r;biomeAdapter=new ei;prettierAdapter=new ti;eslintAdapter=new ni;oxlintAdapter=new ri;oxfmtAdapter=new ii;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},oi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},si=class{id=`python`;name=`Python`;ruffAdapter=new oi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},ci=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function li(){let e=new ci;return e.registerProvider(new si),e.registerProvider(new ai),e}const ui=li();async function di(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function fi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(ui,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await di(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function pi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function mi(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await pi(e,r,t)}}async function hi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(ui,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function gi(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await di(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await fi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function _i(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await mi(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function vi(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await hi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function yi(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await _i(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await vi(e,r,n);return s&&i.push(s),i}async function bi(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(ui,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await gi(e,i);o&&r.push(o);let s=await yi(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&bi();export{fi as executeJsWorkflow,mi as executePythonWorkflow,hi as executeRuffAutofix,bi as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index b5ca4b2b..2f06fb57 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -55,6 +55,49 @@ function resolveLintScript( return scripts["lint:check"] ? "lint:check" : scripts.lint ? "lint" : undefined; } +interface TokenizerState { + inSingleQuote: boolean; + inDoubleQuote: boolean; + isEscaped: boolean; +} + +function processQuoteOrEscape(ch: string, state: TokenizerState): boolean { + if (state.isEscaped) { + state.isEscaped = false; + return true; + } + if (ch === "\\" && !state.inSingleQuote) { + state.isEscaped = true; + return true; + } + if (ch === "'" && !state.inDoubleQuote) { + state.inSingleQuote = !state.inSingleQuote; + return true; + } + if (ch === '"' && !state.inSingleQuote) { + state.inDoubleQuote = !state.inDoubleQuote; + return true; + } + return state.inSingleQuote || state.inDoubleQuote; +} + +function getSeparatorLength(text: string, index: number): number { + const ch = text[index]; + if (ch === ";" || ch === "\n") return 1; + if (ch === "&" && text[index + 1] === "&") return 2; + if (ch === "|" && text[index + 1] === "|") return 2; + if (ch === "|") return 1; + return 0; +} + +function skipComment(text: string, index: number): number { + let i = index; + while (i < text.length && text[i] !== "\n") { + i++; + } + return i; +} + /** * Splits a shell command string into pipeline/chained commands (;, &&, ||, |) * while respecting single quotes ('...'), double quotes ("..."), and backslash escapes (\). @@ -63,83 +106,26 @@ function resolveLintScript( function tokenizeShellCommands(shellText: string): string[] { const commands: string[] = []; let currentCmd = ""; - let inSingleQuote = false; - let inDoubleQuote = false; - let isEscaped = false; + const state: TokenizerState = { inSingleQuote: false, inDoubleQuote: false, isEscaped: false }; for (let i = 0; i < shellText.length; i++) { const ch = shellText[i]; - if (isEscaped) { - currentCmd += " "; - isEscaped = false; - continue; - } - - if (ch === "\\" && !inSingleQuote) { - isEscaped = true; - currentCmd += " "; - continue; - } - - if (ch === "'" && !inDoubleQuote) { - inSingleQuote = !inSingleQuote; + if (processQuoteOrEscape(ch, state)) { currentCmd += " "; continue; } - if (ch === '"' && !inSingleQuote) { - inDoubleQuote = !inDoubleQuote; - currentCmd += " "; - continue; - } - - // Inside quotes: suppress content - if (inSingleQuote || inDoubleQuote) { - currentCmd += " "; - continue; - } - - // Shell comment: rest of the line is ignored if (ch === "#") { - while (i < shellText.length && shellText[i] !== "\n") { - i++; - } - continue; - } - - // Command separators: ;, &&, ||, | - if (ch === ";" || ch === "\n") { - if (currentCmd.trim()) { - commands.push(currentCmd.trim()); - } - currentCmd = ""; - continue; - } - - if (ch === "&" && shellText[i + 1] === "&") { - if (currentCmd.trim()) { - commands.push(currentCmd.trim()); - } - currentCmd = ""; - i++; - continue; - } - - if (ch === "|" && shellText[i + 1] === "|") { - if (currentCmd.trim()) { - commands.push(currentCmd.trim()); - } - currentCmd = ""; - i++; + i = skipComment(shellText, i); continue; } - if (ch === "|") { - if (currentCmd.trim()) { - commands.push(currentCmd.trim()); - } + const sepLen = getSeparatorLength(shellText, i); + if (sepLen > 0) { + if (currentCmd.trim()) commands.push(currentCmd.trim()); currentCmd = ""; + i += sepLen - 1; continue; } From 0e88eb62b13e54ea261058526647783c4a13c474 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 6 Nov 2026 17:30:36 +0000 Subject: [PATCH 08/25] Fix shell comment parsing in script delegation tokenizer Correct shell comment parsing so '#' only begins a comment when starting a shell word (at line start or preceded by whitespace), preventing URL fragments and words containing '#' from discarding subsequent commands. --- dist/autofix.mjs | 12 +- .../adapters/javascript/script-adapter.ts | 11 +- src/autofix/planner.ts | 5 +- tests/autofix-architecture.test.ts | 104 ++++++++++++++++++ 4 files changed, 123 insertions(+), 9 deletions(-) diff --git a/dist/autofix.mjs b/dist/autofix.mjs index 96424c21..9ccf5328 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -303,11 +303,11 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `?` `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)t.add(e.capability);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i={...t,hasPythonSource:r},a=[],o=[],s=[],c=e.getProviders(),l=/* @__PURE__ */ new Map;for(let e of c){if(!await e.detect(i))continue;let t=/* @__PURE__ */ new Set;l.set(e.id,t);let r=e.getAdapters(i),c=[];for(let e of r){let t=await e.detect(i);t.detected?c.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&o.push({id:e.id,name:e.name,reason:t.reason})}await Nr(c,t,i,n,a,o,s)}await Pr(e,i,n,a,s);let u=Fr(s);return{tasks:u,selectedTools:a,skippedTools:o,summary:Lr(e,i,a,o,u)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` +`&&e[i]!==`\r`;)r+=` `,i++;return i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)t.add(e.capability);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` `)}function Rr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0}function zr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function Br(e,t){return t.isEscaped?(t.isEscaped=!1,!0):e===`\\`&&!t.inSingleQuote?(t.isEscaped=!0,!0):e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote?(t.inDoubleQuote=!t.inDoubleQuote,!0):t.inSingleQuote||t.inDoubleQuote}function Vr(e,t){let n=e[t];return n===`;`||n===` `?1:n===`&`&&e[t+1]===`&`||n===`|`&&e[t+1]===`|`?2:+(n===`|`)}function Hr(e,t){let n=t;for(;n0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Wr(e,t){if(!e)return!1;let n=Ur(e);for(let e of n){let n=e.split(/\s+/).filter(Boolean);if(n.length===0)continue;let[r,i,a]=n;if((r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t)return!0}return!1}function Gr(e,t,n){return!n||n===t?!1:!Wr(e[t]||``,n)}function Kr(e,t,n){return!n||n===t?!1:!Wr(e[t]||``,n)}function qr(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=zr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=[{capability:`autofix`,scriptName:t}];return n&&Gr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&Kr(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function Jr(e){let t=[],n=Rr(e,`check`),r=zr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Yr(e,t){return t===`fix`?qr(e):Jr(e)}var Xr=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Yr(t,`fix`);return n.length>0?{detected:!0,reason:`found autofix scripts: ${n.map(e=>`"${e.scriptName}"`).join(`, `)}`}:{detected:!1,reason:`no supported autofix scripts found in package.json`}}plan(e,t){let n=Yr(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Zr(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function Qr(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var $r=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=Qr(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},ei=class{id=`biome`;name=`Biome`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Zr(t,`@biomejs/biome`),r=Qr(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-check-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: check --write .`}]:[{id:`biome-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check .`}]}},ti=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Zr(t,`prettier`),r=!!t?.prettier,i=Qr(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},ni=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Zr(t,`eslint`),r=!!t?.eslintConfig,i=Qr(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},ri=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Zr(t,`oxlint`),r=Qr(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ii=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Zr(t,`oxfmt`),r=Qr(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},ai=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Xr;vitePlusAdapter=new $r;biomeAdapter=new ei;prettierAdapter=new ti;eslintAdapter=new ni;oxlintAdapter=new ri;oxfmtAdapter=new ii;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},oi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},si=class{id=`python`;name=`Python`;ruffAdapter=new oi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},ci=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function li(){let e=new ci;return e.registerProvider(new si),e.registerProvider(new ai),e}const ui=li();async function di(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function fi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(ui,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await di(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function pi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function mi(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await pi(e,r,t)}}async function hi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(ui,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function gi(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await di(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}return null}return await fi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function _i(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await mi(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function vi(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await hi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function yi(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await _i(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await vi(e,r,n);return s&&i.push(s),i}async function bi(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(ui,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await gi(e,i);o&&r.push(o);let s=await yi(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&bi();export{fi as executeJsWorkflow,mi as executePythonWorkflow,hi as executeRuffAutofix,bi as run,cn as sanitizePackageManager}; \ No newline at end of file +`;)n++;return n>t?n-1:t}function Ur(e){if(e.length===0)return!0;let t=e[e.length-1];return/\s/.test(t)}function Wr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Gr(e,t){if(!e)return!1;let n=Wr(e);for(let e of n){let n=e.split(/\s+/).filter(Boolean);if(n.length===0)continue;let[r,i,a]=n;if((r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t)return!0}return!1}function Kr(e,t,n){return!n||n===t?!1:!Gr(e[t]||``,n)}function qr(e,t,n){return!n||n===t?!1:!Gr(e[t]||``,n)}function Jr(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=zr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=[{capability:`autofix`,scriptName:t}];return n&&Kr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&qr(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function Yr(e){let t=[],n=Rr(e,`check`),r=zr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Xr(e,t){return t===`fix`?Jr(e):Yr(e)}var Zr=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Xr(t,`fix`);return n.length>0?{detected:!0,reason:`found autofix scripts: ${n.map(e=>`"${e.scriptName}"`).join(`, `)}`}:{detected:!1,reason:`no supported autofix scripts found in package.json`}}plan(e,t){let n=Xr(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Qr(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function $r(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ei=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=$r(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},ti=class{id=`biome`;name=`Biome`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Qr(t,`@biomejs/biome`),r=$r(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-check-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: check --write .`}]:[{id:`biome-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check .`}]}},ni=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Qr(t,`prettier`),r=!!t?.prettier,i=$r(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},ri=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Qr(t,`eslint`),r=!!t?.eslintConfig,i=$r(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},ii=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Qr(t,`oxlint`),r=$r(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ai=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Qr(t,`oxfmt`),r=$r(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},oi=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Zr;vitePlusAdapter=new ei;biomeAdapter=new ti;prettierAdapter=new ni;eslintAdapter=new ri;oxlintAdapter=new ii;oxfmtAdapter=new ai;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},si=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},ci=class{id=`python`;name=`Python`;ruffAdapter=new si;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},li=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function ui(){let e=new li;return e.registerProvider(new ci),e.registerProvider(new oi),e}const di=ui();async function fi(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function pi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(di,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await fi(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function mi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function hi(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await mi(e,r,t)}}async function gi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(di,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function _i(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await fi(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await pi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function vi(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await hi(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function yi(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await gi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function bi(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await vi(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await yi(e,r,n);return s&&i.push(s),i}async function xi(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(di,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await _i(e,i);o&&r.push(o);let s=await bi(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&xi();export{pi as executeJsWorkflow,hi as executePythonWorkflow,gi as executeRuffAutofix,xi as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index 2f06fb57..9639a8af 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -95,7 +95,14 @@ function skipComment(text: string, index: number): number { while (i < text.length && text[i] !== "\n") { i++; } - return i; + // Return index immediately before newline so the main loop processes the newline separator + return i > index ? i - 1 : index; +} + +function isShellCommentStart(currentCmd: string): boolean { + if (currentCmd.length === 0) return true; + const lastChar = currentCmd[currentCmd.length - 1]; + return /\s/.test(lastChar); } /** @@ -116,7 +123,7 @@ function tokenizeShellCommands(shellText: string): string[] { continue; } - if (ch === "#") { + if (ch === "#" && isShellCommentStart(currentCmd)) { i = skipComment(shellText, i); continue; } diff --git a/src/autofix/planner.ts b/src/autofix/planner.ts index b9d4594e..0854e469 100644 --- a/src/autofix/planner.ts +++ b/src/autofix/planner.ts @@ -8,6 +8,7 @@ import type { ToolAdapter, } from "./types.js"; +import { inspectJsProjectEnvironment } from "../javascript-env.js"; import { hasPythonSource } from "../python-env.js"; interface CandidateTool { @@ -134,10 +135,12 @@ export async function planExecution( context: ProjectContext, mode: ExecutionMode = "fix", ): Promise { - // Ensure consistent Python source detection across provider, adapter, and plan diagnostics + // Ensure consistent Python source detection and JS project inspection across provider, adapter, and plan diagnostics const resolvedHasPythonSource = context.hasPythonSource ?? hasPythonSource(context.cwd); + const resolvedJsEnv = context.jsEnv ?? inspectJsProjectEnvironment(context.cwd); const effectiveContext: ProjectContext = { ...context, + jsEnv: resolvedJsEnv, hasPythonSource: resolvedHasPythonSource, }; diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index fa5018f4..0236795a 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -197,6 +197,110 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { expect(tasks.map((t) => t.scriptName)).toEqual(["fix", "format:write"]); }); + it("recognizes delegation when URL fragments or ordinary words contain '#' characters", () => { + // Case A: URL fragment + const scriptsUrl = { + fix: "echo https://example.com/#fragment && npm run format:write", + "format:write": "prettier --write .", + }; + const tasksUrl = resolveScriptTasks(scriptsUrl, "fix"); + expect(tasksUrl.map((t) => t.scriptName)).toEqual(["fix"]); + + // Case B: Hash inside ordinary word + const scriptsWord = { + fix: "echo value#fragment && npm run format:write", + "format:write": "prettier --write .", + }; + const tasksWord = resolveScriptTasks(scriptsWord, "fix"); + expect(tasksWord.map((t) => t.scriptName)).toEqual(["fix"]); + + const scriptsPath = { + fix: "echo path/to/file#section && npm run format:write", + "format:write": "prettier --write .", + }; + const tasksPath = resolveScriptTasks(scriptsPath, "fix"); + expect(tasksPath.map((t) => t.scriptName)).toEqual(["fix"]); + }); + + it("properly handles actual shell comments and commented-out delegations", () => { + // Case C: Actual shell comments + // echo hello # npm run format:write\nnpm run lint:fix + const scriptsComment = { + fix: "echo hello # npm run format:write\nnpm run lint:fix", + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }; + const tasksComment = resolveScriptTasks(scriptsComment, "fix"); + // The format:write delegation is commented out, so format:write must NOT be suppressed by fix! + // But lint:fix is on the next line and is executed by fix, so lint:fix is suppressed. + expect(tasksComment.map((t) => t.scriptName)).toEqual(["fix", "format:write"]); + + const scriptsCommentStart = { + fix: "echo hello\n# npm run format:write\nnpm run lint:fix", + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }; + const tasksCommentStart = resolveScriptTasks(scriptsCommentStart, "fix"); + expect(tasksCommentStart.map((t) => t.scriptName)).toEqual(["fix", "format:write"]); + }); + + it("handles hashes inside quoted strings and escaped hashes", () => { + // Case D: Hash inside quotes + const scriptsQuotedHash = { + fix: 'echo "# npm run format:write" && npm run lint:fix', + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }; + const tasksQuotedHash = resolveScriptTasks(scriptsQuotedHash, "fix"); + expect(tasksQuotedHash.map((t) => t.scriptName)).toEqual(["fix", "format:write"]); + + const scriptsSingleQuoteHash = { + fix: "echo 'value#fragment' && npm run format:write", + "format:write": "prettier --write .", + }; + const tasksSingleQuote = resolveScriptTasks(scriptsSingleQuoteHash, "fix"); + expect(tasksSingleQuote.map((t) => t.scriptName)).toEqual(["fix"]); + + // Case E: Escaped hash + const scriptsEscapedHash = { + fix: "echo \\#fragment && npm run format:write", + "format:write": "prettier --write .", + }; + const tasksEscaped = resolveScriptTasks(scriptsEscapedHash, "fix"); + expect(tasksEscaped.map((t) => t.scriptName)).toEqual(["fix"]); + }); + + it("verifies planner integration with URL fragment vs commented-out delegation", async () => { + // 1. URL fragment before real delegation: planner schedules ONLY fix, not format:write + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "echo https://example.com/#fragment && npm run format:write", + "format:write": "prettier --write .", + }, + }), + ); + + const registry = createDefaultRegistry(); + const planDelegated = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planDelegated.tasks.map((t) => t.id)).toEqual(["script-fix"]); + + // 2. Commented out delegation: planner schedules BOTH fix and format:write + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "echo hello # npm run format:write\nexit 0", + "format:write": "prettier --write .", + }, + }), + ); + + const planCommented = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planCommented.tasks.map((t) => t.id)).toEqual(["script-fix", "script-format:write"]); + }); + it("evaluates Python detection accurately when planExecution receives { cwd } without precomputed hasPythonSource", async () => { fs.writeFileSync(path.join(tempDir, "app.py"), "print('hello')\n"); const registry = createDefaultRegistry(); From 408300e50df111d425b55a0fe4f3594fa4b0c0f4 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 7 Nov 2026 07:14:53 +0000 Subject: [PATCH 09/25] Recognize env assignments in script delegation tokenizer Support leading shell environment variable assignments (e.g., NODE_ENV=production npm run format:write) in doesFixScriptDelegateTo so package-manager delegations are properly recognized and redundant formatting or linting tasks are not scheduled. Rebuild bundles. --- dist/autofix.mjs | 10 +- .../adapters/javascript/script-adapter.ts | 55 +++++-- tests/autofix-architecture.test.ts | 134 ++++++++++++++++++ 3 files changed, 179 insertions(+), 20 deletions(-) diff --git a/dist/autofix.mjs b/dist/autofix.mjs index 9ccf5328..c87655a4 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -306,8 +306,8 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `&&e[i]!==`\r`;)r+=` `,i++;return i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)t.add(e.capability);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` `)}function Rr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0}function zr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function Br(e,t){return t.isEscaped?(t.isEscaped=!1,!0):e===`\\`&&!t.inSingleQuote?(t.isEscaped=!0,!0):e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote?(t.inDoubleQuote=!t.inDoubleQuote,!0):t.inSingleQuote||t.inDoubleQuote}function Vr(e,t){let n=e[t];return n===`;`||n===` `?1:n===`&`&&e[t+1]===`&`||n===`|`&&e[t+1]===`|`?2:+(n===`|`)}function Hr(e,t){let n=t;for(;nt?n-1:t}function Ur(e){if(e.length===0)return!0;let t=e[e.length-1];return/\s/.test(t)}function Wr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Gr(e,t){if(!e)return!1;let n=Wr(e);for(let e of n){let n=e.split(/\s+/).filter(Boolean);if(n.length===0)continue;let[r,i,a]=n;if((r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t)return!0}return!1}function Kr(e,t,n){return!n||n===t?!1:!Gr(e[t]||``,n)}function qr(e,t,n){return!n||n===t?!1:!Gr(e[t]||``,n)}function Jr(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=zr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=[{capability:`autofix`,scriptName:t}];return n&&Kr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&qr(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function Yr(e){let t=[],n=Rr(e,`check`),r=zr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Xr(e,t){return t===`fix`?Jr(e):Yr(e)}var Zr=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Xr(t,`fix`);return n.length>0?{detected:!0,reason:`found autofix scripts: ${n.map(e=>`"${e.scriptName}"`).join(`, `)}`}:{detected:!1,reason:`no supported autofix scripts found in package.json`}}plan(e,t){let n=Xr(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Qr(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function $r(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ei=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=$r(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},ti=class{id=`biome`;name=`Biome`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Qr(t,`@biomejs/biome`),r=$r(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-check-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: check --write .`}]:[{id:`biome-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check .`}]}},ni=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Qr(t,`prettier`),r=!!t?.prettier,i=$r(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},ri=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Qr(t,`eslint`),r=!!t?.eslintConfig,i=$r(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},ii=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Qr(t,`oxlint`),r=$r(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ai=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Qr(t,`oxfmt`),r=$r(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},oi=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Zr;vitePlusAdapter=new ei;biomeAdapter=new ti;prettierAdapter=new ni;eslintAdapter=new ri;oxlintAdapter=new ii;oxfmtAdapter=new ai;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},si=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},ci=class{id=`python`;name=`Python`;ruffAdapter=new si;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},li=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function ui(){let e=new li;return e.registerProvider(new ci),e.registerProvider(new oi),e}const di=ui();async function fi(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function pi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(di,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await fi(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function mi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function hi(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await mi(e,r,t)}}async function gi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(di,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function _i(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await fi(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}return null}return await pi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function vi(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await hi(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function yi(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await gi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function bi(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await vi(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await yi(e,r,n);return s&&i.push(s),i}async function xi(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(di,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await _i(e,i);o&&r.push(o);let s=await bi(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&xi();export{pi as executeJsWorkflow,hi as executePythonWorkflow,gi as executeRuffAutofix,xi as run,cn as sanitizePackageManager}; \ No newline at end of file +`;)n++;return n>t?n-1:t}function Ur(e){if(e.length===0)return!0;let t=e[e.length-1];return/\s/.test(t)}function Wr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}const Gr=/^[A-Za-z_][A-Za-z0-9_]*=/;function Kr(e){return Gr.test(e)}function qr(e,t){let n=0;for(;n=e.length)return!1;let r=e[n],i=e[n+1],a=e[n+2];return(r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t}function Jr(e,t){if(!e)return!1;let n=Wr(e);for(let e of n){let n=e.split(/\s+/).filter(Boolean);if(n.length!==0&&qr(n,t))return!0}return!1}function Yr(e,t,n){return!n||n===t?!1:!Jr(e[t]||``,n)}function Xr(e,t,n){return!n||n===t?!1:!Jr(e[t]||``,n)}function Zr(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=zr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=[{capability:`autofix`,scriptName:t}];return n&&Yr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&Xr(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function Qr(e){let t=[],n=Rr(e,`check`),r=zr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function $r(e,t){return t===`fix`?Zr(e):Qr(e)}var ei=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=$r(t,`fix`);return n.length>0?{detected:!0,reason:`found autofix scripts: ${n.map(e=>`"${e.scriptName}"`).join(`, `)}`}:{detected:!1,reason:`no supported autofix scripts found in package.json`}}plan(e,t){let n=$r(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function ti(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ni(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ri=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ni(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},ii=class{id=`biome`;name=`Biome`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ti(t,`@biomejs/biome`),r=ni(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-check-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: check --write .`}]:[{id:`biome-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check .`}]}},ai=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ti(t,`prettier`),r=!!t?.prettier,i=ni(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},oi=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ti(t,`eslint`),r=!!t?.eslintConfig,i=ni(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},si=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ti(t,`oxlint`),r=ni(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ci=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ti(t,`oxfmt`),r=ni(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},li=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new ei;vitePlusAdapter=new ri;biomeAdapter=new ii;prettierAdapter=new ai;eslintAdapter=new oi;oxlintAdapter=new si;oxfmtAdapter=new ci;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},ui=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},di=class{id=`python`;name=`Python`;ruffAdapter=new ui;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},fi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function pi(){let e=new fi;return e.registerProvider(new di),e.registerProvider(new li),e}const mi=pi();async function hi(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function gi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(mi,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await hi(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function _i(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function vi(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await _i(e,r,t)}}async function yi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(mi,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function bi(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await hi(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await gi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function xi(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await vi(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Si(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await yi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ci(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await xi(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await Si(e,r,n);return s&&i.push(s),i}async function wi(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(mi,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await bi(e,i);o&&r.push(o);let s=await Ci(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&wi();export{gi as executeJsWorkflow,vi as executePythonWorkflow,yi as executeRuffAutofix,wi as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index 9639a8af..7b96eab9 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -146,9 +146,47 @@ function tokenizeShellCommands(shellText: string): string[] { return commands; } +const ENV_ASSIGNMENT_REGEX = /^[A-Za-z_][A-Za-z0-9_]*=/; + +function isEnvAssignment(token: string): boolean { + return ENV_ASSIGNMENT_REGEX.test(token); +} + +function matchesPmDelegation(tokens: string[], targetScriptName: string): boolean { + let startIndex = 0; + while (startIndex < tokens.length && isEnvAssignment(tokens[startIndex])) { + startIndex++; + } + + if (startIndex >= tokens.length) { + return false; + } + + const first = tokens[startIndex]; + const second = tokens[startIndex + 1]; + const third = tokens[startIndex + 2]; + + // Check `npm run `, `pnpm run `, `yarn run `, `bun run ` + if ( + (first === "npm" || first === "pnpm" || first === "yarn" || first === "bun") && + second === "run" && + third === targetScriptName + ) { + return true; + } + + // Check `pnpm `, `bun `, `yarn ` + if ((first === "pnpm" || first === "bun" || first === "yarn") && second === targetScriptName) { + return true; + } + + return false; +} + /** * Recognizes actual supported package-manager script invocation commands: - * e.g. `npm run format:write`, `pnpm run format`, `bun run lint:fix`, `yarn run lint:fix`, `pnpm format`, `bun format` + * e.g. `npm run format:write`, `pnpm run format`, `bun run lint:fix`, `yarn run lint:fix`, `pnpm format`, `bun format`, + * including invocations preceded by shell environment variable assignments (e.g. `NODE_ENV=production npm run format:write`). * Does not match `echo format`, comments, quoted explanatory text, or substrings. */ export function doesFixScriptDelegateTo(fixScriptBody: string, targetScriptName: string): boolean { @@ -157,23 +195,10 @@ export function doesFixScriptDelegateTo(fixScriptBody: string, targetScriptName: const commands = tokenizeShellCommands(fixScriptBody); for (const cmd of commands) { - // Split into whitespace-separated words const tokens = cmd.split(/\s+/).filter(Boolean); if (tokens.length === 0) continue; - const [first, second, third] = tokens; - - // Check `npm run `, `pnpm run `, `yarn run `, `bun run ` - if ( - (first === "npm" || first === "pnpm" || first === "yarn" || first === "bun") && - second === "run" && - third === targetScriptName - ) { - return true; - } - - // Check `pnpm `, `bun `, `yarn ` - if ((first === "pnpm" || first === "bun" || first === "yarn") && second === targetScriptName) { + if (matchesPmDelegation(tokens, targetScriptName)) { return true; } } diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index 0236795a..19b7b4ae 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -270,6 +270,140 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { expect(tasksEscaped.map((t) => t.scriptName)).toEqual(["fix"]); }); + it("recognizes package manager delegations preceded by valid environment variable assignments", () => { + // Single environment assignment before npm run + expect( + resolveScriptTasks( + { + fix: "NODE_ENV=production npm run format:write", + "format:write": "prettier --write .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix"]); + + // Multiple environment assignments before pnpm run + expect( + resolveScriptTasks( + { + fix: "NODE_ENV=production CI=true pnpm run format:write", + "format:write": "prettier --write .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix"]); + + // Environment assignments before bun run + expect( + resolveScriptTasks( + { + fix: "DEBUG=1 bun run format:write", + "format:write": "prettier --write .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix"]); + + // Environment assignment before lint autofix script + expect( + resolveScriptTasks( + { + fix: "CI=true npm run lint:fix", + "lint:fix": "eslint --fix .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix"]); + + // Direct package-manager aliases with env assignments: pnpm format, bun format, yarn format + expect( + resolveScriptTasks( + { + fix: "FOO=bar pnpm format:write", + "format:write": "prettier --write .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix"]); + + // Chained commands where one has an environment assignment + expect( + resolveScriptTasks( + { + fix: "NODE_ENV=production npm run format:write && npm run lint:fix", + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix"]); + }); + + it("does not false-positive on assignments after executable, echo arguments, or quoted commands", () => { + // Assignment appearing after executable (an argument, not an assignment prefix) + expect( + resolveScriptTasks( + { + fix: "npm run format:write NODE_ENV=production", + "format:write": "prettier --write .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix"]); // Still delegates to format:write because npm run format:write is the prefix! + + // Assignment-looking text passed to echo + expect( + resolveScriptTasks( + { + fix: "echo NODE_ENV=production", + "format:write": "prettier --write .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix", "format:write"]); + + // Environment assignment preceding non-package-manager command with quoted command string + expect( + resolveScriptTasks( + { + fix: 'NODE_ENV=production echo "npm run format:write"', + "format:write": "prettier --write .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix", "format:write"]); + + // Environment assignment followed by an unrelated command + expect( + resolveScriptTasks( + { + fix: "NODE_ENV=production run-custom-task", + "format:write": "prettier --write .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix", "format:write"]); + }); + + it("verifies planner integration with environment-assignment delegation", async () => { + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "NODE_ENV=production npm run format:write && npm run lint:fix", + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }, + }), + ); + + const registry = createDefaultRegistry(); + const plan = await planExecution(registry, { cwd: tempDir }, "fix"); + + // Because 'fix' delegates to both format:write and lint:fix, only 'fix' should be scheduled + expect(plan.tasks.map((t) => t.id)).toEqual(["script-fix"]); + }); + it("verifies planner integration with URL fragment vs commented-out delegation", async () => { // 1. URL fragment before real delegation: planner schedules ONLY fix, not format:write fs.writeFileSync( From fa26d27d5082a6161786aea2e61a631f64559037 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 7 Nov 2026 10:53:48 +0000 Subject: [PATCH 10/25] Fix script delegation quotes, Biome capabilities & check mode - Preserve single/double quoted script arguments and executables in doesFixScriptDelegateTo while maintaining token boundaries. - Decompose BiomeAdapter into independent format and lint tasks so partial capability conflicts resolve cleanly. - Fix JavaScriptScriptAdapter detection for check-mode scripts. - Add comprehensive regression and integration tests, re-build dist. --- dist/autofix.mjs | 14 +- .../adapters/javascript/script-adapter.ts | 153 ++++++++--- src/autofix/adapters/javascript/tools.ts | 42 ++- tests/autofix-architecture.test.ts | 246 ++++++++++++++++++ 4 files changed, 398 insertions(+), 57 deletions(-) diff --git a/dist/autofix.mjs b/dist/autofix.mjs index c87655a4..f0f28078 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -304,10 +304,10 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)t.add(e.capability);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` -`)}function Rr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0}function zr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function Br(e,t){return t.isEscaped?(t.isEscaped=!1,!0):e===`\\`&&!t.inSingleQuote?(t.isEscaped=!0,!0):e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote?(t.inDoubleQuote=!t.inDoubleQuote,!0):t.inSingleQuote||t.inDoubleQuote}function Vr(e,t){let n=e[t];return n===`;`||n===` -`?1:n===`&`&&e[t+1]===`&`||n===`|`&&e[t+1]===`|`?2:+(n===`|`)}function Hr(e,t){let n=t;for(;nt?n-1:t}function Ur(e){if(e.length===0)return!0;let t=e[e.length-1];return/\s/.test(t)}function Wr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}const Gr=/^[A-Za-z_][A-Za-z0-9_]*=/;function Kr(e){return Gr.test(e)}function qr(e,t){let n=0;for(;n=e.length)return!1;let r=e[n],i=e[n+1],a=e[n+2];return(r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t}function Jr(e,t){if(!e)return!1;let n=Wr(e);for(let e of n){let n=e.split(/\s+/).filter(Boolean);if(n.length!==0&&qr(n,t))return!0}return!1}function Yr(e,t,n){return!n||n===t?!1:!Jr(e[t]||``,n)}function Xr(e,t,n){return!n||n===t?!1:!Jr(e[t]||``,n)}function Zr(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=zr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=[{capability:`autofix`,scriptName:t}];return n&&Yr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&Xr(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function Qr(e){let t=[],n=Rr(e,`check`),r=zr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function $r(e,t){return t===`fix`?Zr(e):Qr(e)}var ei=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=$r(t,`fix`);return n.length>0?{detected:!0,reason:`found autofix scripts: ${n.map(e=>`"${e.scriptName}"`).join(`, `)}`}:{detected:!1,reason:`no supported autofix scripts found in package.json`}}plan(e,t){let n=$r(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function ti(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ni(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ri=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ni(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},ii=class{id=`biome`;name=`Biome`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ti(t,`@biomejs/biome`),r=ni(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-check-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: check --write .`}]:[{id:`biome-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check .`}]}},ai=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ti(t,`prettier`),r=!!t?.prettier,i=ni(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},oi=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ti(t,`eslint`),r=!!t?.eslintConfig,i=ni(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},si=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ti(t,`oxlint`),r=ni(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ci=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ti(t,`oxfmt`),r=ni(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},li=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new ei;vitePlusAdapter=new ri;biomeAdapter=new ii;prettierAdapter=new ai;eslintAdapter=new oi;oxlintAdapter=new si;oxfmtAdapter=new ci;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},ui=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},di=class{id=`python`;name=`Python`;ruffAdapter=new ui;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},fi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function pi(){let e=new fi;return e.registerProvider(new di),e.registerProvider(new li),e}const mi=pi();async function hi(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function gi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(mi,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await hi(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function _i(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function vi(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await _i(e,r,t)}}async function yi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(mi,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function bi(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await hi(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}return null}return await gi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function xi(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await vi(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Si(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await yi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ci(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await xi(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await Si(e,r,n);return s&&i.push(s),i}async function wi(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(mi,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await bi(e,i);o&&r.push(o);let s=await Ci(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&wi();export{gi as executeJsWorkflow,vi as executePythonWorkflow,yi as executeRuffAutofix,wi as run,cn as sanitizePackageManager}; \ No newline at end of file +`)}function Rr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0}function zr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function Br(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` +`?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Vr(e,t){let n=t;for(;nt?n-1:t}function Hr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Ur(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Wr(e,t,n){return t.isEscaped=!1,n+e}function Gr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function Kr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a=e.length)return!1;let r=e[n],i=e[n+1],a=e[n+2];return(r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t}function Xr(e,t){if(!e)return!1;let n=Ur(e);for(let e of n){let n=Kr(e);if(n.length!==0&&Yr(n,t))return!0}return!1}function Zr(e,t,n){return!n||n===t?!1:!Xr(e[t]||``,n)}function Qr(e,t,n){return!n||n===t?!1:!Xr(e[t]||``,n)}function $r(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=zr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=[{capability:`autofix`,scriptName:t}];return n&&Zr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&Qr(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function ei(e){let t=[],n=Rr(e,`check`),r=zr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function ti(e,t){return t===`fix`?$r(e):ei(e)}var ni=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=ti(t,`fix`),r=ti(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=ti(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function ri(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ii(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ai=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ii(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},oi=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`@biomejs/biome`),r=ii(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`}]}},si=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`prettier`),r=!!t?.prettier,i=ii(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},ci=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`eslint`),r=!!t?.eslintConfig,i=ii(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},li=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`oxlint`),r=ii(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ui=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`oxfmt`),r=ii(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},di=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new ni;vitePlusAdapter=new ai;biomeAdapter=new oi;prettierAdapter=new si;eslintAdapter=new ci;oxlintAdapter=new li;oxfmtAdapter=new ui;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},fi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},pi=class{id=`python`;name=`Python`;ruffAdapter=new fi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},mi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function hi(){let e=new mi;return e.registerProvider(new pi),e.registerProvider(new di),e}const gi=hi();async function _i(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function vi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(gi,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await _i(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function yi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function bi(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await yi(e,r,t)}}async function xi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(gi,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function Si(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await _i(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await vi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ci(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await bi(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function wi(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await xi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ti(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await Ci(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await wi(e,r,n);return s&&i.push(s),i}async function Ei(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(gi,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Si(e,i);o&&r.push(o);let s=await Ti(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&Ei();export{vi as executeJsWorkflow,bi as executePythonWorkflow,xi as executeRuffAutofix,Ei as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index 7b96eab9..97dab5d9 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -61,27 +61,8 @@ interface TokenizerState { isEscaped: boolean; } -function processQuoteOrEscape(ch: string, state: TokenizerState): boolean { - if (state.isEscaped) { - state.isEscaped = false; - return true; - } - if (ch === "\\" && !state.inSingleQuote) { - state.isEscaped = true; - return true; - } - if (ch === "'" && !state.inDoubleQuote) { - state.inSingleQuote = !state.inSingleQuote; - return true; - } - if (ch === '"' && !state.inSingleQuote) { - state.inDoubleQuote = !state.inDoubleQuote; - return true; - } - return state.inSingleQuote || state.inDoubleQuote; -} - -function getSeparatorLength(text: string, index: number): number { +function getSeparatorLength(text: string, index: number, state: TokenizerState): number { + if (state.inSingleQuote || state.inDoubleQuote || state.isEscaped) return 0; const ch = text[index]; if (ch === ";" || ch === "\n") return 1; if (ch === "&" && text[index + 1] === "&") return 2; @@ -95,22 +76,21 @@ function skipComment(text: string, index: number): number { while (i < text.length && text[i] !== "\n") { i++; } - // Return index immediately before newline so the main loop processes the newline separator + // Return index immediately before newline so outer loop processes the newline separator return i > index ? i - 1 : index; } -function isShellCommentStart(currentCmd: string): boolean { +function isShellCommentStart(currentCmd: string, state: TokenizerState): boolean { + if (state.inSingleQuote || state.inDoubleQuote || state.isEscaped) return false; if (currentCmd.length === 0) return true; - const lastChar = currentCmd[currentCmd.length - 1]; - return /\s/.test(lastChar); + return /\s/.test(currentCmd[currentCmd.length - 1]); } /** - * Splits a shell command string into pipeline/chained commands (;, &&, ||, |) - * while respecting single quotes ('...'), double quotes ("..."), and backslash escapes (\). - * Replaces any quoted content with blank tokens so text inside strings is never mistaken for commands. + * Splits shell command text into chained commands (;, &&, ||, |, newline) + * while respecting quotes ('...', "..."), escapes (\), and comments. */ -function tokenizeShellCommands(shellText: string): string[] { +function splitChainedCommands(shellText: string): string[] { const commands: string[] = []; let currentCmd = ""; const state: TokenizerState = { inSingleQuote: false, inDoubleQuote: false, isEscaped: false }; @@ -118,17 +98,36 @@ function tokenizeShellCommands(shellText: string): string[] { for (let i = 0; i < shellText.length; i++) { const ch = shellText[i]; - if (processQuoteOrEscape(ch, state)) { - currentCmd += " "; + if (state.isEscaped) { + currentCmd += ch; + state.isEscaped = false; + continue; + } + + if (ch === "\\" && !state.inSingleQuote) { + state.isEscaped = true; + currentCmd += ch; + continue; + } + + if (ch === "'" && !state.inDoubleQuote) { + state.inSingleQuote = !state.inSingleQuote; + currentCmd += ch; + continue; + } + + if (ch === '"' && !state.inSingleQuote) { + state.inDoubleQuote = !state.inDoubleQuote; + currentCmd += ch; continue; } - if (ch === "#" && isShellCommentStart(currentCmd)) { + if (ch === "#" && isShellCommentStart(currentCmd, state)) { i = skipComment(shellText, i); continue; } - const sepLen = getSeparatorLength(shellText, i); + const sepLen = getSeparatorLength(shellText, i, state); if (sepLen > 0) { if (currentCmd.trim()) commands.push(currentCmd.trim()); currentCmd = ""; @@ -146,6 +145,72 @@ function tokenizeShellCommands(shellText: string): string[] { return commands; } +function handleEscapeInWord(ch: string, state: TokenizerState, currentWord: string): string { + state.isEscaped = false; + return currentWord + ch; +} + +function handleQuoteToggle(ch: string, state: TokenizerState): boolean { + if (ch === "'" && !state.inDoubleQuote) { + state.inSingleQuote = !state.inSingleQuote; + return true; + } + if (ch === '"' && !state.inSingleQuote) { + state.inDoubleQuote = !state.inDoubleQuote; + return true; + } + return false; +} + +/** + * Splits a single command line into word tokens, respecting quotes and escapes. + * Strips outer quotes so `"format:write"` or `'format:write'` becomes `format:write`. + */ +function tokenizeCommandLine(cmd: string): string[] { + const tokens: string[] = []; + let currentWord = ""; + let hasCharsInWord = false; + const state: TokenizerState = { inSingleQuote: false, inDoubleQuote: false, isEscaped: false }; + + for (let i = 0; i < cmd.length; i++) { + const ch = cmd[i]; + + if (state.isEscaped) { + currentWord = handleEscapeInWord(ch, state, currentWord); + hasCharsInWord = true; + continue; + } + + if (ch === "\\" && !state.inSingleQuote) { + state.isEscaped = true; + continue; + } + + if (handleQuoteToggle(ch, state)) { + hasCharsInWord = true; + continue; + } + + if (!state.inSingleQuote && !state.inDoubleQuote && /\s/.test(ch)) { + if (hasCharsInWord) { + tokens.push(currentWord); + currentWord = ""; + hasCharsInWord = false; + } + continue; + } + + currentWord += ch; + hasCharsInWord = true; + } + + if (hasCharsInWord) { + tokens.push(currentWord); + } + + return tokens; +} + const ENV_ASSIGNMENT_REGEX = /^[A-Za-z_][A-Za-z0-9_]*=/; function isEnvAssignment(token: string): boolean { @@ -186,16 +251,16 @@ function matchesPmDelegation(tokens: string[], targetScriptName: string): boolea /** * Recognizes actual supported package-manager script invocation commands: * e.g. `npm run format:write`, `pnpm run format`, `bun run lint:fix`, `yarn run lint:fix`, `pnpm format`, `bun format`, - * including invocations preceded by shell environment variable assignments (e.g. `NODE_ENV=production npm run format:write`). + * including quoted script arguments (e.g. `npm run "format:write"`) and environment variable assignments. * Does not match `echo format`, comments, quoted explanatory text, or substrings. */ export function doesFixScriptDelegateTo(fixScriptBody: string, targetScriptName: string): boolean { if (!fixScriptBody) return false; - const commands = tokenizeShellCommands(fixScriptBody); + const commands = splitChainedCommands(fixScriptBody); for (const cmd of commands) { - const tokens = cmd.split(/\s+/).filter(Boolean); + const tokens = tokenizeCommandLine(cmd); if (tokens.length === 0) continue; if (matchesPmDelegation(tokens, targetScriptName)) { @@ -282,13 +347,19 @@ export class JavaScriptScriptAdapter implements ToolAdapter { return { detected: false, reason: "no scripts declared in package.json" }; } - const tasks = resolveScriptTasks(scripts, "fix"); - if (tasks.length > 0) { - const scriptNames = tasks.map((t) => `"${t.scriptName}"`).join(", "); - return { detected: true, reason: `found autofix scripts: ${scriptNames}` }; + const fixTasks = resolveScriptTasks(scripts, "fix"); + const checkTasks = resolveScriptTasks(scripts, "check"); + const allTasks = [...fixTasks, ...checkTasks]; + + if (allTasks.length > 0) { + const uniqueNames = Array.from(new Set(allTasks.map((t) => `"${t.scriptName}"`))).join(", "); + return { detected: true, reason: `found supported scripts: ${uniqueNames}` }; } - return { detected: false, reason: "no supported autofix scripts found in package.json" }; + return { + detected: false, + reason: "no supported autofix or check scripts found in package.json", + }; } public plan(context: ProjectContext, mode: ExecutionMode): ExecutionTask[] { diff --git a/src/autofix/adapters/javascript/tools.ts b/src/autofix/adapters/javascript/tools.ts index 0b59e629..d6e55fa3 100644 --- a/src/autofix/adapters/javascript/tools.ts +++ b/src/autofix/adapters/javascript/tools.ts @@ -119,7 +119,7 @@ export class VitePlusAdapter implements ToolAdapter { export class BiomeAdapter implements ToolAdapter { public readonly id = "biome"; public readonly name = "Biome"; - public readonly capabilities: readonly Capability[] = ["autofix", "format", "lint"]; + public readonly capabilities: readonly Capability[] = ["format", "lint"]; public detect(context: ProjectContext): AdapterDetectionResult { const pkg = context.jsEnv?.packageJson; @@ -142,32 +142,56 @@ export class BiomeAdapter implements ToolAdapter { if (mode === "fix") { return [ { - id: "biome-check-fix", + id: "biome-format-fix", toolId: this.id, toolName: this.name, requiredPackage: "@biomejs/biome", - capability: "autofix", + capability: "format", + executable: "biome", + args: ["format", "--write", "."], + cwd: context.cwd, + mode: "fix", + description: "Biome: format --write .", + }, + { + id: "biome-lint-fix", + toolId: this.id, + toolName: this.name, + requiredPackage: "@biomejs/biome", + capability: "lint", executable: "biome", - args: ["check", "--write", "."], + args: ["lint", "--write", "."], cwd: context.cwd, mode: "fix", - description: "Biome: check --write .", + description: "Biome: lint --write .", }, ]; } return [ { - id: "biome-check", + id: "biome-format-check", toolId: this.id, toolName: this.name, requiredPackage: "@biomejs/biome", - capability: "autofix", + capability: "format", + executable: "biome", + args: ["format", "."], + cwd: context.cwd, + mode: "check", + description: "Biome: format .", + }, + { + id: "biome-lint-check", + toolId: this.id, + toolName: this.name, + requiredPackage: "@biomejs/biome", + capability: "lint", executable: "biome", - args: ["check", "."], + args: ["lint", "."], cwd: context.cwd, mode: "check", - description: "Biome: check .", + description: "Biome: lint .", }, ]; } diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index 19b7b4ae..969c37e2 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -270,6 +270,132 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { expect(tasksEscaped.map((t) => t.scriptName)).toEqual(["fix"]); }); + it("recognizes package manager delegations with single and double-quoted script arguments and executables", () => { + // npm run "format:write" + expect( + resolveScriptTasks( + { + fix: 'npm run "format:write"', + "format:write": "prettier --write .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix"]); + + // npm run 'format:write' + expect( + resolveScriptTasks( + { + fix: "npm run 'format:write'", + "format:write": "prettier --write .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix"]); + + // pnpm run "lint:fix" + expect( + resolveScriptTasks( + { + fix: 'pnpm run "lint:fix"', + "lint:fix": "eslint --fix .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix"]); + + // bun run 'format:write' + expect( + resolveScriptTasks( + { + fix: "bun run 'format:write'", + "format:write": "prettier --write .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix"]); + + // yarn run "lint:fix" + expect( + resolveScriptTasks( + { + fix: 'yarn run "lint:fix"', + "lint:fix": "eslint --fix .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix"]); + + // Quoted executable name: "npm" run "format:write" + expect( + resolveScriptTasks( + { + fix: '"npm" run "format:write"', + "format:write": "prettier --write .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix"]); + + // Environment assignments with quoted script argument + expect( + resolveScriptTasks( + { + fix: 'NODE_ENV=production npm run "format:write"', + "format:write": "prettier --write .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix"]); + + // Multiple commands with quotes: npm run "format:write" && npm run "lint:fix" + expect( + resolveScriptTasks( + { + fix: 'npm run "format:write" && npm run "lint:fix"', + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix"]); + }); + + it("does not false-positive on quotes inside echo, printf, or malformed input", () => { + // echo "npm run format:write" + expect( + resolveScriptTasks( + { + fix: 'echo "npm run format:write"', + "format:write": "prettier --write .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix", "format:write"]); + + // echo 'npm run format:write' + expect( + resolveScriptTasks( + { + fix: "echo 'npm run format:write'", + "format:write": "prettier --write .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix", "format:write"]); + + // printf '%s' "npm run format:write" + expect( + resolveScriptTasks( + { + fix: "printf '%s' \"npm run format:write\"", + "format:write": "prettier --write .", + }, + "fix", + ).map((t) => t.scriptName), + ).toEqual(["fix", "format:write"]); + }); + it("recognizes package manager delegations preceded by valid environment variable assignments", () => { // Single environment assignment before npm run expect( @@ -435,6 +561,126 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { expect(planCommented.tasks.map((t) => t.id)).toEqual(["script-fix", "script-format:write"]); }); + it("handles Biome partial capability resolution scenarios A through F", async () => { + const binDir = path.join(tempDir, "node_modules", ".bin"); + fs.mkdirSync(binDir, { recursive: true }); + fs.writeFileSync(path.join(binDir, "prettier"), ""); + fs.chmodSync(path.join(binDir, "prettier"), "755"); + fs.writeFileSync(path.join(binDir, "biome"), ""); + fs.chmodSync(path.join(binDir, "biome"), "755"); + fs.writeFileSync(path.join(binDir, "eslint"), ""); + fs.chmodSync(path.join(binDir, "eslint"), "755"); + + // Scenario A: Formatting covered by explicit script -> Biome format skipped, Biome lint retained + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + "format:write": "prettier --write .", + }, + devDependencies: { "@biomejs/biome": "^1.9.0" }, + }), + ); + fs.writeFileSync(path.join(tempDir, "biome.json"), "{}"); + + const registry = createDefaultRegistry(); + const planA = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planA.tasks.map((t) => t.id)).toEqual(["script-format:write", "biome-lint-fix"]); + + // Scenario B: Linting covered by explicit script -> Biome lint skipped, Biome format retained + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + "lint:fix": "eslint --fix .", + }, + devDependencies: { "@biomejs/biome": "^1.9.0" }, + }), + ); + + const planB = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planB.tasks.map((t) => t.id)).toEqual(["script-lint:fix", "biome-format-fix"]); + + // Scenario C: Both formatting and linting covered by explicit scripts -> No Biome task scheduled + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }, + devDependencies: { "@biomejs/biome": "^1.9.0" }, + }), + ); + + const planC = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planC.tasks.map((t) => t.id)).toEqual(["script-format:write", "script-lint:fix"]); + + // Scenario D: Neither covered -> Biome schedules both format and lint + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + devDependencies: { "@biomejs/biome": "^1.9.0" }, + }), + ); + + const planD = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planD.tasks.map((t) => t.id)).toEqual(["biome-format-fix", "biome-lint-fix"]); + + // Scenario E: Check mode -> Biome schedules only check commands + const planE = await planExecution(registry, { cwd: tempDir }, "check"); + expect(planE.tasks.map((t) => t.id)).toEqual(["biome-format-check", "biome-lint-check"]); + expect(planE.tasks.every((t) => t.mode === "check")).toBe(true); + + // Scenario F: Deterministic ordering across repeated runs + const planF1 = await planExecution(registry, { cwd: tempDir }, "fix"); + const planF2 = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planF1.tasks.map((t) => t.id)).toEqual(planF2.tasks.map((t) => t.id)); + }); + + it("verifies check-mode and fix-mode detection consistency in JavaScriptScriptAdapter", async () => { + // Check-only project + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + "format:check": "prettier --check .", + "lint:check": "eslint .", + }, + }), + ); + + const registry = createDefaultRegistry(); + const planCheck = await planExecution(registry, { cwd: tempDir }, "check"); + expect(planCheck.tasks.map((t) => t.id)).toEqual([ + "script-format:check", + "script-lint:check", + ]); + + const planFix = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planFix.tasks).toEqual([]); + + // Fix-only project + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }, + }), + ); + + const planFixOnly = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planFixOnly.tasks.map((t) => t.id)).toEqual([ + "script-format:write", + "script-lint:fix", + ]); + + const planCheckOnly = await planExecution(registry, { cwd: tempDir }, "check"); + expect(planCheckOnly.tasks).toEqual([]); + }); + it("evaluates Python detection accurately when planExecution receives { cwd } without precomputed hasPythonSource", async () => { fs.writeFileSync(path.join(tempDir, "app.py"), "print('hello')\n"); const registry = createDefaultRegistry(); From a44d24361a31d018ad09ddd63a33ddca546fce66 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 7 Nov 2026 11:26:40 +0000 Subject: [PATCH 11/25] Preserve Biome assist actions and synchronize documentation Decompose Biome into discrete formatting, linting, and safe assist actions (--formatter-enabled=false --linter-enabled=false) to preserve safe assist actions while enabling capability conflict resolution. Synchronize autofix/README.md documentation. Rebuild bundles. --- autofix/README.md | 2 +- dist/autofix.mjs | 2 +- src/autofix/adapters/javascript/tools.ts | 26 +++++++- tests/autofix-architecture.test.ts | 75 +++++++++++++++++------- 4 files changed, 81 insertions(+), 24 deletions(-) diff --git a/autofix/README.md b/autofix/README.md index 68e81a35..463e0a23 100644 --- a/autofix/README.md +++ b/autofix/README.md @@ -31,7 +31,7 @@ The `autofix` composite action automatically formats and fixes code across multi - **Generic "fix" Interaction:** A generic `fix` script does not blindly suppress independently declared format or lint fix scripts unless it demonstrably delegates to them. - **Tool Adapters:** When explicit scripts are absent or specialized, detects configured tools: - **Vite+:** Project-native toolchain (`vp fmt` and `vp lint --fix` in fix mode, avoiding unnecessary type-checking or validation). - - **Biome:** Fast unified formatter and linter (`biome check --write .`). + - **Biome:** Fast unified toolchain supporting discrete formatting (`biome format --write .` / `biome format .`), safe lint fixes (`biome lint --write .` / `biome lint .`), and safe Assist actions (`biome check --write --formatter-enabled=false --linter-enabled=false .` / `biome check --formatter-enabled=false --linter-enabled=false .`). This decomposition allows capability conflict resolution to preserve independent operations (e.g. running Prettier for format while retaining Biome linting and Assist actions). - **Prettier:** Code formatter (`prettier --write .`). - **ESLint:** Pluggable JavaScript/TypeScript linter (`eslint --fix .`). - **Oxlint:** High-performance JavaScript linter (`oxlint --fix .`). diff --git a/dist/autofix.mjs b/dist/autofix.mjs index f0f28078..665b0724 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -306,7 +306,7 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `&&e[i]!==`\r`;)r+=` `,i++;return i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)t.add(e.capability);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` `)}function Rr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0}function zr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function Br(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` `?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Vr(e,t){let n=t;for(;nt?n-1:t}function Hr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Ur(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Wr(e,t,n){return t.isEscaped=!1,n+e}function Gr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function Kr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a=e.length)return!1;let r=e[n],i=e[n+1],a=e[n+2];return(r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t}function Xr(e,t){if(!e)return!1;let n=Ur(e);for(let e of n){let n=Kr(e);if(n.length!==0&&Yr(n,t))return!0}return!1}function Zr(e,t,n){return!n||n===t?!1:!Xr(e[t]||``,n)}function Qr(e,t,n){return!n||n===t?!1:!Xr(e[t]||``,n)}function $r(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=zr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=[{capability:`autofix`,scriptName:t}];return n&&Zr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&Qr(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function ei(e){let t=[],n=Rr(e,`check`),r=zr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function ti(e,t){return t===`fix`?$r(e):ei(e)}var ni=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=ti(t,`fix`),r=ti(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=ti(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function ri(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ii(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ai=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ii(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},oi=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`@biomejs/biome`),r=ii(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`}]}},si=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`prettier`),r=!!t?.prettier,i=ii(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},ci=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`eslint`),r=!!t?.eslintConfig,i=ii(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},li=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`oxlint`),r=ii(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ui=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`oxfmt`),r=ii(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},di=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new ni;vitePlusAdapter=new ai;biomeAdapter=new oi;prettierAdapter=new si;eslintAdapter=new ci;oxlintAdapter=new li;oxfmtAdapter=new ui;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},fi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},pi=class{id=`python`;name=`Python`;ruffAdapter=new fi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},mi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function hi(){let e=new mi;return e.registerProvider(new pi),e.registerProvider(new di),e}const gi=hi();async function _i(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function vi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(gi,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await _i(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`;)n++;return n>t?n-1:t}function Hr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Ur(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Wr(e,t,n){return t.isEscaped=!1,n+e}function Gr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function Kr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a=e.length)return!1;let r=e[n],i=e[n+1],a=e[n+2];return(r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t}function Xr(e,t){if(!e)return!1;let n=Ur(e);for(let e of n){let n=Kr(e);if(n.length!==0&&Yr(n,t))return!0}return!1}function Zr(e,t,n){return!n||n===t?!1:!Xr(e[t]||``,n)}function Qr(e,t,n){return!n||n===t?!1:!Xr(e[t]||``,n)}function $r(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=zr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=[{capability:`autofix`,scriptName:t}];return n&&Zr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&Qr(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function ei(e){let t=[],n=Rr(e,`check`),r=zr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function ti(e,t){return t===`fix`?$r(e):ei(e)}var ni=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=ti(t,`fix`),r=ti(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=ti(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function ri(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ii(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ai=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ii(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},oi=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`autofix`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`@biomejs/biome`),r=ii(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},si=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`prettier`),r=!!t?.prettier,i=ii(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},ci=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`eslint`),r=!!t?.eslintConfig,i=ii(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},li=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`oxlint`),r=ii(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ui=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`oxfmt`),r=ii(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},di=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new ni;vitePlusAdapter=new ai;biomeAdapter=new oi;prettierAdapter=new si;eslintAdapter=new ci;oxlintAdapter=new li;oxfmtAdapter=new ui;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},fi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},pi=class{id=`python`;name=`Python`;ruffAdapter=new fi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},mi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function hi(){let e=new mi;return e.registerProvider(new pi),e.registerProvider(new di),e}const gi=hi();async function _i(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function vi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(gi,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await _i(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` `))}}async function yi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function bi(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await yi(e,r,t)}}async function xi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(gi,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` `))}}async function Si(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await _i(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` `))}return null}return await vi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ci(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await bi(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function wi(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await xi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ti(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await Ci(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await wi(e,r,n);return s&&i.push(s),i}async function Ei(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(gi,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Si(e,i);o&&r.push(o);let s=await Ti(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` diff --git a/src/autofix/adapters/javascript/tools.ts b/src/autofix/adapters/javascript/tools.ts index d6e55fa3..7d48e89a 100644 --- a/src/autofix/adapters/javascript/tools.ts +++ b/src/autofix/adapters/javascript/tools.ts @@ -119,7 +119,7 @@ export class VitePlusAdapter implements ToolAdapter { export class BiomeAdapter implements ToolAdapter { public readonly id = "biome"; public readonly name = "Biome"; - public readonly capabilities: readonly Capability[] = ["format", "lint"]; + public readonly capabilities: readonly Capability[] = ["format", "lint", "autofix"]; public detect(context: ProjectContext): AdapterDetectionResult { const pkg = context.jsEnv?.packageJson; @@ -165,6 +165,18 @@ export class BiomeAdapter implements ToolAdapter { mode: "fix", description: "Biome: lint --write .", }, + { + id: "biome-assist-fix", + toolId: this.id, + toolName: this.name, + requiredPackage: "@biomejs/biome", + capability: "autofix", + executable: "biome", + args: ["check", "--write", "--formatter-enabled=false", "--linter-enabled=false", "."], + cwd: context.cwd, + mode: "fix", + description: "Biome: safe assist actions (--write)", + }, ]; } @@ -193,6 +205,18 @@ export class BiomeAdapter implements ToolAdapter { mode: "check", description: "Biome: lint .", }, + { + id: "biome-assist-check", + toolId: this.id, + toolName: this.name, + requiredPackage: "@biomejs/biome", + capability: "autofix", + executable: "biome", + args: ["check", "--formatter-enabled=false", "--linter-enabled=false", "."], + cwd: context.cwd, + mode: "check", + description: "Biome: check assist actions", + }, ]; } } diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index 969c37e2..c56cf6ce 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -561,7 +561,7 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { expect(planCommented.tasks.map((t) => t.id)).toEqual(["script-fix", "script-format:write"]); }); - it("handles Biome partial capability resolution scenarios A through F", async () => { + it("handles Biome partial capability resolution and preserves assist actions", async () => { const binDir = path.join(tempDir, "node_modules", ".bin"); fs.mkdirSync(binDir, { recursive: true }); fs.writeFileSync(path.join(binDir, "prettier"), ""); @@ -571,7 +571,7 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { fs.writeFileSync(path.join(binDir, "eslint"), ""); fs.chmodSync(path.join(binDir, "eslint"), "755"); - // Scenario A: Formatting covered by explicit script -> Biome format skipped, Biome lint retained + // Formatting covered by explicit script: format is skipped while Biome lint and assist actions run fs.writeFileSync( path.join(tempDir, "package.json"), JSON.stringify({ @@ -584,10 +584,14 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { fs.writeFileSync(path.join(tempDir, "biome.json"), "{}"); const registry = createDefaultRegistry(); - const planA = await planExecution(registry, { cwd: tempDir }, "fix"); - expect(planA.tasks.map((t) => t.id)).toEqual(["script-format:write", "biome-lint-fix"]); + const planFormatCovered = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planFormatCovered.tasks.map((t) => t.id)).toEqual([ + "script-format:write", + "biome-lint-fix", + "biome-assist-fix", + ]); - // Scenario B: Linting covered by explicit script -> Biome lint skipped, Biome format retained + // Linting covered by explicit script: lint is skipped while Biome format and assist actions run fs.writeFileSync( path.join(tempDir, "package.json"), JSON.stringify({ @@ -598,10 +602,14 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { }), ); - const planB = await planExecution(registry, { cwd: tempDir }, "fix"); - expect(planB.tasks.map((t) => t.id)).toEqual(["script-lint:fix", "biome-format-fix"]); + const planLintCovered = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planLintCovered.tasks.map((t) => t.id)).toEqual([ + "script-lint:fix", + "biome-format-fix", + "biome-assist-fix", + ]); - // Scenario C: Both formatting and linting covered by explicit scripts -> No Biome task scheduled + // Both formatting and linting covered by explicit scripts: all capabilities are covered, so no Biome tasks run fs.writeFileSync( path.join(tempDir, "package.json"), JSON.stringify({ @@ -613,29 +621,54 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { }), ); - const planC = await planExecution(registry, { cwd: tempDir }, "fix"); - expect(planC.tasks.map((t) => t.id)).toEqual(["script-format:write", "script-lint:fix"]); + const planBothCovered = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planBothCovered.tasks.map((t) => t.id)).toEqual([ + "script-format:write", + "script-lint:fix", + ]); - // Scenario D: Neither covered -> Biome schedules both format and lint + // Generic fix script covers autofix, formatting, and linting: all Biome tasks skipped fs.writeFileSync( path.join(tempDir, "package.json"), JSON.stringify({ + scripts: { + fix: "custom-fix-all", + }, devDependencies: { "@biomejs/biome": "^1.9.0" }, }), ); - const planD = await planExecution(registry, { cwd: tempDir }, "fix"); - expect(planD.tasks.map((t) => t.id)).toEqual(["biome-format-fix", "biome-lint-fix"]); + const planGenericFix = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planGenericFix.tasks.map((t) => t.id)).toEqual(["script-fix"]); - // Scenario E: Check mode -> Biome schedules only check commands - const planE = await planExecution(registry, { cwd: tempDir }, "check"); - expect(planE.tasks.map((t) => t.id)).toEqual(["biome-format-check", "biome-lint-check"]); - expect(planE.tasks.every((t) => t.mode === "check")).toBe(true); + // Neither covered: Biome schedules format, lint, and assist actions + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + devDependencies: { "@biomejs/biome": "^1.9.0" }, + }), + ); + + const planNeitherCovered = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planNeitherCovered.tasks.map((t) => t.id)).toEqual([ + "biome-format-fix", + "biome-lint-fix", + "biome-assist-fix", + ]); + + // Check mode: schedules check commands without --write + const planCheckMode = await planExecution(registry, { cwd: tempDir }, "check"); + expect(planCheckMode.tasks.map((t) => t.id)).toEqual([ + "biome-format-check", + "biome-lint-check", + "biome-assist-check", + ]); + expect(planCheckMode.tasks.every((t) => t.mode === "check")).toBe(true); - // Scenario F: Deterministic ordering across repeated runs - const planF1 = await planExecution(registry, { cwd: tempDir }, "fix"); - const planF2 = await planExecution(registry, { cwd: tempDir }, "fix"); - expect(planF1.tasks.map((t) => t.id)).toEqual(planF2.tasks.map((t) => t.id)); + // Deterministic ordering across repeated runs + const planRepeat1 = await planExecution(registry, { cwd: tempDir }, "fix"); + const planRepeat2 = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planRepeat1.tasks.map((t) => t.id)).toEqual(planRepeat2.tasks.map((t) => t.id)); }); it("verifies check-mode and fix-mode detection consistency in JavaScriptScriptAdapter", async () => { From 0127a6cf5ff3b5f07ad1f99957040222c03a8fe7 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 7 Nov 2026 11:46:04 +0000 Subject: [PATCH 12/25] Correct Biome assist capability deduplication Model 'assist' as an independent capability in Capability type and BiomeAdapter so separate format and lint scripts do not mistakenly suppress Biome safe assist actions. Synchronize documentation & dist. --- autofix/README.md | 2 +- dist/autofix.mjs | 4 ++-- src/autofix/adapters/javascript/tools.ts | 6 +++--- src/autofix/planner.ts | 9 ++++++++- src/autofix/types.ts | 2 +- tests/autofix-architecture.test.ts | 12 +++++++++++- 6 files changed, 26 insertions(+), 9 deletions(-) diff --git a/autofix/README.md b/autofix/README.md index 463e0a23..7c55b1f5 100644 --- a/autofix/README.md +++ b/autofix/README.md @@ -31,7 +31,7 @@ The `autofix` composite action automatically formats and fixes code across multi - **Generic "fix" Interaction:** A generic `fix` script does not blindly suppress independently declared format or lint fix scripts unless it demonstrably delegates to them. - **Tool Adapters:** When explicit scripts are absent or specialized, detects configured tools: - **Vite+:** Project-native toolchain (`vp fmt` and `vp lint --fix` in fix mode, avoiding unnecessary type-checking or validation). - - **Biome:** Fast unified toolchain supporting discrete formatting (`biome format --write .` / `biome format .`), safe lint fixes (`biome lint --write .` / `biome lint .`), and safe Assist actions (`biome check --write --formatter-enabled=false --linter-enabled=false .` / `biome check --formatter-enabled=false --linter-enabled=false .`). This decomposition allows capability conflict resolution to preserve independent operations (e.g. running Prettier for format while retaining Biome linting and Assist actions). + - **Biome:** Fast unified toolchain supporting discrete formatting (`biome format --write .` / `biome format .`), safe lint fixes (`biome lint --write .` / `biome lint .`), and safe Assist actions (`biome check --write --formatter-enabled=false --linter-enabled=false .` / `biome check --formatter-enabled=false --linter-enabled=false .`). The `assist` capability is independent of `format` and `lint`; having separate format and lint scripts does not suppress Assist actions unless a generic `fix` script covers the full `autofix` lifecycle. - **Prettier:** Code formatter (`prettier --write .`). - **ESLint:** Pluggable JavaScript/TypeScript linter (`eslint --fix .`). - **Oxlint:** High-performance JavaScript linter (`oxlint --fix .`). diff --git a/dist/autofix.mjs b/dist/autofix.mjs index 665b0724..2b07d060 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -303,10 +303,10 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `?` `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)t.add(e.capability);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` +`&&e[i]!==`\r`;)r+=` `,i++;return i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`)&&t.has(`assist`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)t.add(e.capability);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` `)}function Rr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0}function zr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function Br(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` `?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Vr(e,t){let n=t;for(;nt?n-1:t}function Hr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Ur(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Wr(e,t,n){return t.isEscaped=!1,n+e}function Gr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function Kr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a=e.length)return!1;let r=e[n],i=e[n+1],a=e[n+2];return(r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t}function Xr(e,t){if(!e)return!1;let n=Ur(e);for(let e of n){let n=Kr(e);if(n.length!==0&&Yr(n,t))return!0}return!1}function Zr(e,t,n){return!n||n===t?!1:!Xr(e[t]||``,n)}function Qr(e,t,n){return!n||n===t?!1:!Xr(e[t]||``,n)}function $r(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=zr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=[{capability:`autofix`,scriptName:t}];return n&&Zr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&Qr(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function ei(e){let t=[],n=Rr(e,`check`),r=zr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function ti(e,t){return t===`fix`?$r(e):ei(e)}var ni=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=ti(t,`fix`),r=ti(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=ti(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function ri(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ii(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ai=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ii(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},oi=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`autofix`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`@biomejs/biome`),r=ii(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`autofix`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},si=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`prettier`),r=!!t?.prettier,i=ii(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},ci=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`eslint`),r=!!t?.eslintConfig,i=ii(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},li=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`oxlint`),r=ii(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ui=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`oxfmt`),r=ii(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},di=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new ni;vitePlusAdapter=new ai;biomeAdapter=new oi;prettierAdapter=new si;eslintAdapter=new ci;oxlintAdapter=new li;oxfmtAdapter=new ui;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},fi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},pi=class{id=`python`;name=`Python`;ruffAdapter=new fi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},mi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function hi(){let e=new mi;return e.registerProvider(new pi),e.registerProvider(new di),e}const gi=hi();async function _i(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function vi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(gi,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await _i(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`;)n++;return n>t?n-1:t}function Hr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Ur(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Wr(e,t,n){return t.isEscaped=!1,n+e}function Gr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function Kr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a=e.length)return!1;let r=e[n],i=e[n+1],a=e[n+2];return(r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t}function Xr(e,t){if(!e)return!1;let n=Ur(e);for(let e of n){let n=Kr(e);if(n.length!==0&&Yr(n,t))return!0}return!1}function Zr(e,t,n){return!n||n===t?!1:!Xr(e[t]||``,n)}function Qr(e,t,n){return!n||n===t?!1:!Xr(e[t]||``,n)}function $r(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=zr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=[{capability:`autofix`,scriptName:t}];return n&&Zr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&Qr(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function ei(e){let t=[],n=Rr(e,`check`),r=zr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function ti(e,t){return t===`fix`?$r(e):ei(e)}var ni=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=ti(t,`fix`),r=ti(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=ti(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function ri(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ii(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ai=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ii(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},oi=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`@biomejs/biome`),r=ii(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},si=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`prettier`),r=!!t?.prettier,i=ii(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},ci=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`eslint`),r=!!t?.eslintConfig,i=ii(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},li=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`oxlint`),r=ii(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ui=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`oxfmt`),r=ii(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},di=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new ni;vitePlusAdapter=new ai;biomeAdapter=new oi;prettierAdapter=new si;eslintAdapter=new ci;oxlintAdapter=new li;oxfmtAdapter=new ui;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},fi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},pi=class{id=`python`;name=`Python`;ruffAdapter=new fi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},mi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function hi(){let e=new mi;return e.registerProvider(new pi),e.registerProvider(new di),e}const gi=hi();async function _i(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function vi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(gi,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await _i(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` `))}}async function yi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function bi(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await yi(e,r,t)}}async function xi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(gi,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` `))}}async function Si(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await _i(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` `))}return null}return await vi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ci(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await bi(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function wi(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await xi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ti(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await Ci(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await wi(e,r,n);return s&&i.push(s),i}async function Ei(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(gi,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Si(e,i);o&&r.push(o);let s=await Ti(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` diff --git a/src/autofix/adapters/javascript/tools.ts b/src/autofix/adapters/javascript/tools.ts index 7d48e89a..69885a22 100644 --- a/src/autofix/adapters/javascript/tools.ts +++ b/src/autofix/adapters/javascript/tools.ts @@ -119,7 +119,7 @@ export class VitePlusAdapter implements ToolAdapter { export class BiomeAdapter implements ToolAdapter { public readonly id = "biome"; public readonly name = "Biome"; - public readonly capabilities: readonly Capability[] = ["format", "lint", "autofix"]; + public readonly capabilities: readonly Capability[] = ["format", "lint", "assist"]; public detect(context: ProjectContext): AdapterDetectionResult { const pkg = context.jsEnv?.packageJson; @@ -170,7 +170,7 @@ export class BiomeAdapter implements ToolAdapter { toolId: this.id, toolName: this.name, requiredPackage: "@biomejs/biome", - capability: "autofix", + capability: "assist", executable: "biome", args: ["check", "--write", "--formatter-enabled=false", "--linter-enabled=false", "."], cwd: context.cwd, @@ -210,7 +210,7 @@ export class BiomeAdapter implements ToolAdapter { toolId: this.id, toolName: this.name, requiredPackage: "@biomejs/biome", - capability: "autofix", + capability: "assist", executable: "biome", args: ["check", "--formatter-enabled=false", "--linter-enabled=false", "."], cwd: context.cwd, diff --git a/src/autofix/planner.ts b/src/autofix/planner.ts index 0854e469..04da8bad 100644 --- a/src/autofix/planner.ts +++ b/src/autofix/planner.ts @@ -20,12 +20,19 @@ function isTaskCapabilityCovered( taskCapability: Capability, coveredCapabilities: Set, ): boolean { + // A generic full-autofix task covers all operations (format, lint, assist, etc.) if (coveredCapabilities.has("autofix")) { return true; } + // A task claiming combined autofix is covered if format, lint, and assist are covered if (taskCapability === "autofix") { - return coveredCapabilities.has("format") && coveredCapabilities.has("lint"); + return ( + coveredCapabilities.has("format") && + coveredCapabilities.has("lint") && + coveredCapabilities.has("assist") + ); } + // Assist is independent from format and lint return coveredCapabilities.has(taskCapability); } diff --git a/src/autofix/types.ts b/src/autofix/types.ts index 7ad474e3..28d541b1 100644 --- a/src/autofix/types.ts +++ b/src/autofix/types.ts @@ -1,7 +1,7 @@ import type { JsProjectEnvironment, SupportedPackageManager } from "../javascript-env.js"; import type { PythonPackageManagerInfo, PythonProjectContext } from "../python-env.js"; -export type Capability = "lint" | "format" | "typecheck" | "autofix"; +export type Capability = "lint" | "format" | "typecheck" | "assist" | "autofix"; export type ExecutionMode = "fix" | "check"; diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index c56cf6ce..7835c9ba 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -609,7 +609,7 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { "biome-assist-fix", ]); - // Both formatting and linting covered by explicit scripts: all capabilities are covered, so no Biome tasks run + // Both formatting and linting covered by explicit scripts: format and lint from Biome are skipped, but Assist remains fs.writeFileSync( path.join(tempDir, "package.json"), JSON.stringify({ @@ -625,6 +625,16 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { expect(planBothCovered.tasks.map((t) => t.id)).toEqual([ "script-format:write", "script-lint:fix", + "biome-assist-fix", + ]); + const assistTask = planBothCovered.tasks.find((t) => t.id === "biome-assist-fix"); + expect(assistTask?.capability).toBe("assist"); + expect(assistTask?.args).toEqual([ + "check", + "--write", + "--formatter-enabled=false", + "--linter-enabled=false", + ".", ]); // Generic fix script covers autofix, formatting, and linting: all Biome tasks skipped From e63d534b42e94fee1ed89aa9e572611d0de3cd70 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 7 Nov 2026 12:57:38 +0000 Subject: [PATCH 13/25] Correct autofix capability coverage and check-mode safety - Ensure fix scripts delegating exclusively to formatting or linting only cover those specific capabilities, avoiding suppression of independent Biome Assist tasks. - Prevent check-mode fallback to format/fmt so check mode is strictly non-writing. - Update regression tests, README documentation, and dist bundles. --- autofix/README.md | 4 +- dist/autofix.mjs | 14 ++-- .../adapters/javascript/script-adapter.ts | 51 +++++++++--- src/autofix/planner.ts | 5 ++ src/autofix/types.ts | 1 + tests/autofix-architecture.test.ts | 81 +++++++++++++++++++ 6 files changed, 137 insertions(+), 19 deletions(-) diff --git a/autofix/README.md b/autofix/README.md index 7c55b1f5..1bfc7499 100644 --- a/autofix/README.md +++ b/autofix/README.md @@ -27,8 +27,8 @@ The `autofix` composite action automatically formats and fixes code across multi - Format check: `format:check`, `fmt:check` - Lint fix: `lint:fix`, `lint:write` - Lint check: `lint`, `lint:check` - - **Excluded Scripts:** Validation-only scripts such as plain `lint`, `lint:check`, `check`, `test`, and `typecheck` are strictly excluded from execution as autofix commands in fix mode. - - **Generic "fix" Interaction:** A generic `fix` script does not blindly suppress independently declared format or lint fix scripts unless it demonstrably delegates to them. + - **Excluded Scripts:** Validation-only scripts such as plain `lint`, `lint:check`, `check`, `test`, and `typecheck` are strictly excluded from execution as autofix commands in fix mode. In check mode, only explicitly non-writing verification scripts (such as `format:check` or `fmt:check`) are executed; write-capable scripts like `format` and `fmt` are never scheduled. + - **Generic "fix" Interaction:** A generic `fix` script only covers the capabilities it actually delegates to; delegating only to formatting will not suppress linting or Assist actions. - **Tool Adapters:** When explicit scripts are absent or specialized, detects configured tools: - **Vite+:** Project-native toolchain (`vp fmt` and `vp lint --fix` in fix mode, avoiding unnecessary type-checking or validation). - **Biome:** Fast unified toolchain supporting discrete formatting (`biome format --write .` / `biome format .`), safe lint fixes (`biome lint --write .` / `biome lint .`), and safe Assist actions (`biome check --write --formatter-enabled=false --linter-enabled=false .` / `biome check --formatter-enabled=false --linter-enabled=false .`). The `assist` capability is independent of `format` and `lint`; having separate format and lint scripts does not suppress Assist actions unless a generic `fix` script covers the full `autofix` lifecycle. diff --git a/dist/autofix.mjs b/dist/autofix.mjs index 2b07d060..b01b510a 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -303,11 +303,11 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `?` `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`)&&t.has(`assist`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)t.add(e.capability);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` -`)}function Rr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:e.format?`format`:e.fmt?`fmt`:void 0}function zr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function Br(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` +`&&e[i]!==`\r`;)r+=` `,i++;return i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`)&&t.has(`assist`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)if(t.add(e.capability),e.capabilities)for(let n of e.capabilities)t.add(n);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` +`)}function Rr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:void 0}function zr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function Br(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` `?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Vr(e,t){let n=t;for(;nt?n-1:t}function Hr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Ur(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Wr(e,t,n){return t.isEscaped=!1,n+e}function Gr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function Kr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a=e.length)return!1;let r=e[n],i=e[n+1],a=e[n+2];return(r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t}function Xr(e,t){if(!e)return!1;let n=Ur(e);for(let e of n){let n=Kr(e);if(n.length!==0&&Yr(n,t))return!0}return!1}function Zr(e,t,n){return!n||n===t?!1:!Xr(e[t]||``,n)}function Qr(e,t,n){return!n||n===t?!1:!Xr(e[t]||``,n)}function $r(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=zr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=[{capability:`autofix`,scriptName:t}];return n&&Zr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&Qr(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function ei(e){let t=[],n=Rr(e,`check`),r=zr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function ti(e,t){return t===`fix`?$r(e):ei(e)}var ni=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=ti(t,`fix`),r=ti(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=ti(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function ri(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ii(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ai=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ii(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},oi=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`@biomejs/biome`),r=ii(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},si=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`prettier`),r=!!t?.prettier,i=ii(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},ci=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`eslint`),r=!!t?.eslintConfig,i=ii(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},li=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`oxlint`),r=ii(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ui=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ri(t,`oxfmt`),r=ii(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},di=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new ni;vitePlusAdapter=new ai;biomeAdapter=new oi;prettierAdapter=new si;eslintAdapter=new ci;oxlintAdapter=new li;oxfmtAdapter=new ui;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},fi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},pi=class{id=`python`;name=`Python`;ruffAdapter=new fi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},mi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function hi(){let e=new mi;return e.registerProvider(new pi),e.registerProvider(new di),e}const gi=hi();async function _i(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function vi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(gi,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await _i(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function yi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function bi(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await yi(e,r,t)}}async function xi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(gi,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function Si(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await _i(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}return null}return await vi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ci(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await bi(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function wi(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await xi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ti(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await Ci(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await wi(e,r,n);return s&&i.push(s),i}async function Ei(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(gi,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Si(e,i);o&&r.push(o);let s=await Ti(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&Ei();export{vi as executeJsWorkflow,bi as executePythonWorkflow,xi as executeRuffAutofix,Ei as run,cn as sanitizePackageManager}; \ No newline at end of file +`;)n++;return n>t?n-1:t}function Hr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Ur(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Wr(e,t,n){return t.isEscaped=!1,n+e}function Gr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function Kr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a=e.length)return!1;let r=e[n],i=e[n+1],a=e[n+2];return(r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t}function Xr(e,t){if(!e)return!1;let n=Ur(e);for(let e of n){let n=Kr(e);if(n.length!==0&&Yr(n,t))return!0}return!1}function Zr(e,t,n){return!n||n===t?!1:!Xr(e[t]||``,n)}function Qr(e,t,n){return!n||n===t?!1:!Xr(e[t]||``,n)}function $r(e,t,n,r){let i=e[t]||``,a=n?Xr(i,n):!1,o=r?Xr(i,r):!1;return a&&!o?`format`:o&&!a?`lint`:`autofix`}function ei(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=zr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=e[t]||``,a=n?Xr(i,n):!1,o=r?Xr(i,r):!1;if(a&&o)return[{capability:`format`,capabilities:[`format`,`lint`],scriptName:t}];let s=[{capability:$r(e,t,n,r),scriptName:t}];return n&&Zr(e,t,n)&&s.push({capability:`format`,scriptName:n}),r&&Qr(e,t,r)&&s.push({capability:`lint`,scriptName:r}),s}function ti(e){let t=[],n=Rr(e,`check`),r=zr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function ni(e,t){return t===`fix`?ei(e):ti(e)}var ri=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=ni(t,`fix`),r=ni(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=ni(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function ii(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ai(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var oi=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ai(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},si=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=ii(t,`@biomejs/biome`),r=ai(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},ci=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ii(t,`prettier`),r=!!t?.prettier,i=ai(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},li=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ii(t,`eslint`),r=!!t?.eslintConfig,i=ai(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},ui=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ii(t,`oxlint`),r=ai(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},di=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ii(t,`oxfmt`),r=ai(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},fi=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new ri;vitePlusAdapter=new oi;biomeAdapter=new si;prettierAdapter=new ci;eslintAdapter=new li;oxlintAdapter=new ui;oxfmtAdapter=new di;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},pi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},mi=class{id=`python`;name=`Python`;ruffAdapter=new pi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},hi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function gi(){let e=new hi;return e.registerProvider(new mi),e.registerProvider(new fi),e}const _i=gi();async function vi(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function yi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(_i,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await vi(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function bi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function xi(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await bi(e,r,t)}}async function Si(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(_i,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function Ci(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await vi(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await yi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function wi(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await xi(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ti(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await Si(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ei(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await wi(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await Ti(e,r,n);return s&&i.push(s),i}async function Di(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(_i,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Ci(e,i);o&&r.push(o);let s=await Ei(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&Di();export{yi as executeJsWorkflow,xi as executePythonWorkflow,Si as executeRuffAutofix,Di as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index 97dab5d9..da86a297 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -11,6 +11,7 @@ import { sanitizePackageManager } from "../../../javascript-env.js"; export interface ScriptMapping { capability: Capability; + capabilities?: readonly Capability[]; scriptName: string; } @@ -30,15 +31,9 @@ function resolveFormatScript( ? "fmt" : undefined; } - return scripts["format:check"] - ? "format:check" - : scripts["fmt:check"] - ? "fmt:check" - : scripts.format - ? "format" - : scripts.fmt - ? "fmt" - : undefined; + // In check mode, ONLY select explicitly non-writing scripts. + // Never fall back to "format" or "fmt" as they typically perform file writes. + return scripts["format:check"] ? "format:check" : scripts["fmt:check"] ? "fmt:check" : undefined; } function resolveLintScript( @@ -291,6 +286,29 @@ function shouldIncludeLintWithFix( return !doesFixScriptDelegateTo(fixBody, lintScript); } +function determineFixScriptCapability( + scripts: Record, + fixScript: string, + formatScript?: string, + lintScript?: string, +): Capability { + const fixBody = scripts[fixScript] || ""; + const delegatesToFormat = formatScript ? doesFixScriptDelegateTo(fixBody, formatScript) : false; + const delegatesToLint = lintScript ? doesFixScriptDelegateTo(fixBody, lintScript) : false; + + // If fix exclusively delegates to formatting and NOT linting, its capability is format + if (delegatesToFormat && !delegatesToLint) { + return "format"; + } + + // If fix exclusively delegates to linting and NOT formatting, its capability is lint + if (delegatesToLint && !delegatesToFormat) { + return "lint"; + } + + return "autofix"; +} + function resolveFixScriptTasks(scripts: Record): ScriptMapping[] { const fixScript = scripts.fix ? "fix" : scripts["check:fix"] ? "check:fix" : undefined; const formatScript = resolveFormatScript(scripts, "fix"); @@ -303,7 +321,19 @@ function resolveFixScriptTasks(scripts: Record): ScriptMapping[] return fallbackMappings; } - const mappings: ScriptMapping[] = [{ capability: "autofix", scriptName: fixScript }]; + const fixBody = scripts[fixScript] || ""; + const delegatesToFormat = formatScript ? doesFixScriptDelegateTo(fixBody, formatScript) : false; + const delegatesToLint = lintScript ? doesFixScriptDelegateTo(fixBody, lintScript) : false; + + // When fix delegates to both format and lint scripts, represent both capabilities explicitly + // so that format and lint are covered without falsely claiming "autofix" (which would suppress Assist) + if (delegatesToFormat && delegatesToLint) { + return [{ capability: "format", capabilities: ["format", "lint"], scriptName: fixScript }]; + } + + const fixCapability = determineFixScriptCapability(scripts, fixScript, formatScript, lintScript); + const mappings: ScriptMapping[] = [{ capability: fixCapability, scriptName: fixScript }]; + if (formatScript && shouldIncludeFormatWithFix(scripts, fixScript, formatScript)) { mappings.push({ capability: "format", scriptName: formatScript }); } @@ -371,6 +401,7 @@ export class JavaScriptScriptAdapter implements ToolAdapter { id: `script-${mapping.scriptName}`, toolId: this.id, capability: mapping.capability, + capabilities: mapping.capabilities, executable: pm, args: ["run", mapping.scriptName], cwd: context.cwd, diff --git a/src/autofix/planner.ts b/src/autofix/planner.ts index 04da8bad..bc379347 100644 --- a/src/autofix/planner.ts +++ b/src/autofix/planner.ts @@ -85,6 +85,11 @@ async function processCandidateTools( selectedTools.push({ id: adapter.id, name: adapter.name, reason: candidate.reason }); for (const task of kept) { providerCapabilities.add(task.capability); + if (task.capabilities) { + for (const cap of task.capabilities) { + providerCapabilities.add(cap); + } + } } tasks.push(...kept); diff --git a/src/autofix/types.ts b/src/autofix/types.ts index 28d541b1..5dd7ae71 100644 --- a/src/autofix/types.ts +++ b/src/autofix/types.ts @@ -9,6 +9,7 @@ export interface ExecutionTask { id: string; toolId: string; capability: Capability; + capabilities?: readonly Capability[]; executable: string; args: string[]; cwd: string; diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index 7835c9ba..7d543802 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -591,6 +591,59 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { "biome-assist-fix", ]); + // Fix script delegating only to format: only covers format, so Biome lint and assist remain + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "npm run format:write", + "format:write": "prettier --write .", + }, + devDependencies: { "@biomejs/biome": "^1.9.0" }, + }), + ); + const planFixFormatOnly = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planFixFormatOnly.tasks.map((t) => t.id)).toEqual([ + "script-fix", + "biome-lint-fix", + "biome-assist-fix", + ]); + expect(planFixFormatOnly.tasks[0].capability).toBe("format"); + + // Fix script delegating only to lint: only covers lint, so Biome format and assist remain + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "npm run lint:fix", + "lint:fix": "eslint --fix .", + }, + devDependencies: { "@biomejs/biome": "^1.9.0" }, + }), + ); + const planFixLintOnly = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planFixLintOnly.tasks.map((t) => t.id)).toEqual([ + "script-fix", + "biome-format-fix", + "biome-assist-fix", + ]); + expect(planFixLintOnly.tasks[0].capability).toBe("lint"); + + // Fix script delegating to both format and lint: Biome format and lint skipped, but Assist remains + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "npm run format:write && npm run lint:fix", + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }, + devDependencies: { "@biomejs/biome": "^1.9.0" }, + }), + ); + const planFixBoth = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planFixBoth.tasks.map((t) => t.id)).toEqual(["script-fix", "biome-assist-fix"]); + // Linting covered by explicit script: lint is skipped while Biome format and assist actions run fs.writeFileSync( path.join(tempDir, "package.json"), @@ -722,6 +775,34 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { const planCheckOnly = await planExecution(registry, { cwd: tempDir }, "check"); expect(planCheckOnly.tasks).toEqual([]); + + // Check mode safety: format alone or fmt alone is never scheduled in check mode + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + format: "prettier --write .", + fmt: "prettier --write .", + }, + }), + ); + + const planFormatWriteOnly = await planExecution(registry, { cwd: tempDir }, "check"); + expect(planFormatWriteOnly.tasks).toEqual([]); + + // Check mode safely selects format:check or fmt:check + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + "format:check": "prettier --check .", + format: "prettier --write .", + }, + }), + ); + + const planExplicitCheck = await planExecution(registry, { cwd: tempDir }, "check"); + expect(planExplicitCheck.tasks.map((t) => t.id)).toEqual(["script-format:check"]); }); it("evaluates Python detection accurately when planExecution receives { cwd } without precomputed hasPythonSource", async () => { From a5f97f6b1011ab25bad0fecfd4d0ee7487e2672d Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 7 Nov 2026 13:41:04 +0000 Subject: [PATCH 14/25] Correct fix capability overclaiming & check safety - Avoid overclaiming autofix capability for scripts executing or delegating only to formatting or linting, or unknown custom scripts. - Reject write-capable lint commands (--fix, --write) in check mode. - Streamline autofix/README.md to a concise, user-oriented guide. - Update tests and rebuild distribution bundle dist/autofix.mjs. --- autofix/README.md | 104 ++---------------- dist/autofix.mjs | 14 +-- .../adapters/javascript/script-adapter.ts | 62 ++++++++--- tests/autofix-architecture.test.ts | 73 +++++++++++- 4 files changed, 136 insertions(+), 117 deletions(-) diff --git a/autofix/README.md b/autofix/README.md index 1bfc7499..0e4471f6 100644 --- a/autofix/README.md +++ b/autofix/README.md @@ -1,93 +1,16 @@ # area44/autofix -Automatically format and fix code. +Automatically format and fix code across JavaScript, TypeScript, and Python projects. -## Action Purpose +## Overview -The `autofix` composite action automatically formats and fixes code across multiple languages using a modular, capability-based architecture with default toolchains, hybrid detection, and extensible tool adapters. +The `autofix` action automatically formats and applies safe code fixes to your project: -## Core Architectural Principles - -1. **Default Python Toolchain (Ruff):** Python uses Ruff as the default linting and formatting toolchain. Ruff does not require dependency detection, script detection, or project-specific Ruff declarations in `pyproject.toml`, requirements files, or lockfiles. When Python source files (`.py`/`.pyi`) are detected, Ruff is automatically executed via official `astral-sh/ruff-action` provisioning. -2. **JavaScript/TypeScript Hybrid Detection:** Combines explicit project scripts, project-native toolchains (Vite+), and tool capability detection (ESLint, Prettier, Biome, Oxlint, Oxfmt). -3. **Explicit Project Intent Priority:** Explicit project scripts always take precedence over inferred tool adapters and are never silently overridden. -4. **Deterministic Conflict Resolution:** Prevents overlapping formatters and linters from running over the same files without an explicit selection policy. -5. **Language-Agnostic Core Orchestrator:** Tool detection, capability planning, and task execution are decoupled from language-specific environment setup. -6. **Extensible Static Registry:** New tools and languages can be registered without modifying the core orchestrator. - -## Features and Supported Behavior - -- **Automatic Environment Detection:** Automatically detects Node.js, Bun, and Python environments and package managers (`npm`, `pnpm`, `bun`, `uv`, `pip`). -- **Separation of Setup and Installation:** Official setup actions (`actions/setup-node`, `pnpm/setup`, `oven-sh/setup-bun`, `actions/setup-python`, `astral-sh/setup-uv`, `astral-sh/ruff-action`) provision runtimes, CLI tools, and caches. Dependency installations and autofix executions are performed reliably in TypeScript. -- **Python Formatting and Linting:** Provisions Ruff and executes `ruff check --fix .` (lint capability) and `ruff format .` (format capability) sequentially whenever Python source code is detected. No duplicate installation through `pip` or `uv` is performed. -- **JavaScript/TypeScript Hybrid Detection:** - - **Explicit Script Priority:** Recognizes standard script conventions: - - Combined autofix: `fix`, `check:fix` - - Format write: `format`, `fmt`, `format:write`, `format:fix` - - Format check: `format:check`, `fmt:check` - - Lint fix: `lint:fix`, `lint:write` - - Lint check: `lint`, `lint:check` - - **Excluded Scripts:** Validation-only scripts such as plain `lint`, `lint:check`, `check`, `test`, and `typecheck` are strictly excluded from execution as autofix commands in fix mode. In check mode, only explicitly non-writing verification scripts (such as `format:check` or `fmt:check`) are executed; write-capable scripts like `format` and `fmt` are never scheduled. - - **Generic "fix" Interaction:** A generic `fix` script only covers the capabilities it actually delegates to; delegating only to formatting will not suppress linting or Assist actions. - - **Tool Adapters:** When explicit scripts are absent or specialized, detects configured tools: - - **Vite+:** Project-native toolchain (`vp fmt` and `vp lint --fix` in fix mode, avoiding unnecessary type-checking or validation). - - **Biome:** Fast unified toolchain supporting discrete formatting (`biome format --write .` / `biome format .`), safe lint fixes (`biome lint --write .` / `biome lint .`), and safe Assist actions (`biome check --write --formatter-enabled=false --linter-enabled=false .` / `biome check --formatter-enabled=false --linter-enabled=false .`). The `assist` capability is independent of `format` and `lint`; having separate format and lint scripts does not suppress Assist actions unless a generic `fix` script covers the full `autofix` lifecycle. - - **Prettier:** Code formatter (`prettier --write .`). - - **ESLint:** Pluggable JavaScript/TypeScript linter (`eslint --fix .`). - - **Oxlint:** High-performance JavaScript linter (`oxlint --fix .`). - - **Oxfmt:** High-performance code formatter (`oxfmt --write .`). - - **Intentional Configuration Requirement:** Dependency presence alone is not sufficient to run a tool; active configuration files (e.g., `biome.json`, `.prettierrc`, `eslint.config.js`) or manifest configuration sections must be detected. - - **Execution-Time Executable Resolution:** Adapters construct declarative task definitions during planning without requiring local executables to exist in `node_modules/.bin` beforehand. Dependencies are installed and provisioned prior to task execution, at which point local project binaries are safely resolved (with actionable missing-dependency diagnostics if absent). -- **Explainable Execution Plan:** Logs a readable execution summary detailing detected environments, selected tools, skipped tools with reasons (e.g. overlapping capabilities), and the planned tasks. -- **Independent Execution:** JavaScript and Python workflows run independently within the same action step, aggregating diagnostics and failures. -- **autofix.ci Integration:** Automatically invokes `autofix-ci/action` when running inside the `autofix.ci` workflow context. - -## Execution Plan Example - -During action execution, the planner emits an explainable log: - -```text -Detected environments: - Python: true - JavaScript: true - -Python toolchain: - Ruff: default tool - -JavaScript toolchain: - ESLint: selected - Prettier: selected - Biome: skipped (overlapping capabilities already covered by higher priority tool) - -Execution plan: - 1. Ruff: lint autofix - 2. Ruff: format - 3. Prettier: format - 4. ESLint: lint autofix - -Skipped: - - Biome: overlapping capabilities already covered by higher priority tool -``` - -## Adding New Tool Adapters & Languages - -### Adding a Tool Adapter - -To add a tool adapter within an existing language provider: - -1. Implement the `ToolAdapter` interface (`src/autofix/types.ts`) defining `id`, `name`, `capabilities`, `detect(context)`, and `plan(context, mode)`. -2. Register the adapter in the relevant `LanguageProvider` (e.g., `src/autofix/providers/javascript.ts`). -3. Add unit tests verifying detection, planning, and conflict resolution. - -### Adding a Language Provider - -To add support for a new language (e.g., Go, Rust): - -1. Implement the `LanguageProvider` interface (`src/autofix/types.ts`) defining `id`, `name`, `detect(context)`, and `getAdapters(context)`. -2. Register the provider in `createDefaultRegistry()` (`src/autofix/registry.ts`). -3. Add provider and adapter tests. - -The core orchestrator remains completely untouched. +- **Python:** Uses Ruff as the default toolchain to lint and format code whenever Python source files (`.py`/`.pyi`) are present. +- **JavaScript & TypeScript:** Automatically prioritizes explicit package scripts (e.g., `format:write`, `lint:fix`, `fix`) while detecting configured tools (Prettier, ESLint, Biome, Oxlint, Oxfmt, Vite+). +- **Check-Mode Safety:** In check mode, only non-writing verification commands are scheduled; write-capable scripts (such as `format`, `fmt`, or scripts with `--fix`/`--write`) are never executed. +- **Conflict Prevention:** Detects overlapping tools and deduplicates execution so files are not formatted or linted multiple times redundantly. +- **autofix.ci Support:** Automatically integrates with `autofix-ci/action` when running in autofix.ci contexts. ## Usage Example @@ -113,7 +36,7 @@ jobs: uses: area44/workflows/autofix@main ``` -## Public API Contract +## Public Action Contract ### Inputs @@ -128,12 +51,3 @@ This action accepts no inputs. | `javascript-package-manager` | The package manager used (`npm`, `pnpm`, or `bun`) | | `python-detected` | Whether Python source code (`.py`/`.pyi`) was detected | | `python-package-manager` | The Python package manager detected (`uv` or `pip`) | - -## Related Documentation - -- **[Repository README](../README.md)**: Project overview and action API summary. -- **[Environment Resolution Algorithm Guide](../docs/environment-resolution.md)**: Design principles, decision flow, conflict handling, and setup planning details. -- **[Error Handling Architecture](../docs/errors.md)**: Native JavaScript error boundaries, top-level error handling, and error logging. -- **[Security Boundaries](../docs/security.md)**: Input sanitization, argument tokenization, and command execution boundaries. -- **[Maintenance & Repository Health](../docs/maintenance.md)**: Maintenance workflows, build scripts, and quality gates. -- **[Integration Testing Guide](../docs/integration-testing.md)**: Module integration testing, fixture generators, and CI test harnesses. diff --git a/dist/autofix.mjs b/dist/autofix.mjs index b01b510a..a2384821 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -304,10 +304,10 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`)&&t.has(`assist`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)if(t.add(e.capability),e.capabilities)for(let n of e.capabilities)t.add(n);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` -`)}function Rr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:void 0}function zr(e,t){return t===`fix`?e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0:e[`lint:check`]?`lint:check`:e.lint?`lint`:void 0}function Br(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` -`?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Vr(e,t){let n=t;for(;nt?n-1:t}function Hr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Ur(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Wr(e,t,n){return t.isEscaped=!1,n+e}function Gr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function Kr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a=e.length)return!1;let r=e[n],i=e[n+1],a=e[n+2];return(r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t}function Xr(e,t){if(!e)return!1;let n=Ur(e);for(let e of n){let n=Kr(e);if(n.length!==0&&Yr(n,t))return!0}return!1}function Zr(e,t,n){return!n||n===t?!1:!Xr(e[t]||``,n)}function Qr(e,t,n){return!n||n===t?!1:!Xr(e[t]||``,n)}function $r(e,t,n,r){let i=e[t]||``,a=n?Xr(i,n):!1,o=r?Xr(i,r):!1;return a&&!o?`format`:o&&!a?`lint`:`autofix`}function ei(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=zr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=e[t]||``,a=n?Xr(i,n):!1,o=r?Xr(i,r):!1;if(a&&o)return[{capability:`format`,capabilities:[`format`,`lint`],scriptName:t}];let s=[{capability:$r(e,t,n,r),scriptName:t}];return n&&Zr(e,t,n)&&s.push({capability:`format`,scriptName:n}),r&&Qr(e,t,r)&&s.push({capability:`lint`,scriptName:r}),s}function ti(e){let t=[],n=Rr(e,`check`),r=zr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function ni(e,t){return t===`fix`?ei(e):ti(e)}var ri=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=ni(t,`fix`),r=ni(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=ni(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function ii(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ai(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var oi=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ai(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},si=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=ii(t,`@biomejs/biome`),r=ai(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},ci=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ii(t,`prettier`),r=!!t?.prettier,i=ai(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},li=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ii(t,`eslint`),r=!!t?.eslintConfig,i=ai(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},ui=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ii(t,`oxlint`),r=ai(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},di=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ii(t,`oxfmt`),r=ai(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},fi=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new ri;vitePlusAdapter=new oi;biomeAdapter=new si;prettierAdapter=new ci;eslintAdapter=new li;oxlintAdapter=new ui;oxfmtAdapter=new di;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},pi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},mi=class{id=`python`;name=`Python`;ruffAdapter=new pi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},hi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function gi(){let e=new hi;return e.registerProvider(new mi),e.registerProvider(new fi),e}const _i=gi();async function vi(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function yi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(_i,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await vi(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function bi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function xi(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await bi(e,r,t)}}async function Si(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(_i,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function Ci(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await vi(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}return null}return await yi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function wi(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await xi(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ti(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await Si(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ei(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await wi(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await Ti(e,r,n);return s&&i.push(s),i}async function Di(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(_i,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Ci(e,i);o&&r.push(o);let s=await Ei(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&Di();export{yi as executeJsWorkflow,xi as executePythonWorkflow,Si as executeRuffAutofix,Di as run,cn as sanitizePackageManager}; \ No newline at end of file +`)}function Rr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:void 0}function zr(e){return/(?:^|\s)(?:--fix|--write)(?:$|\s)/.test(e)}function Br(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`])return`lint:check`;if(e.lint&&!zr(e.lint))return`lint`}function Vr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` +`?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Hr(e,t){let n=t;for(;nt?n-1:t}function Ur(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Wr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Gr(e,t,n){return t.isEscaped=!1,n+e}function Kr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function qr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a=e.length)return!1;let r=e[n],i=e[n+1],a=e[n+2];return(r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t}function Zr(e,t){if(!e)return!1;let n=Wr(e);for(let e of n){let n=qr(e);if(n.length!==0&&Xr(n,t))return!0}return!1}function Qr(e,t,n){return!n||n===t?!1:!Zr(e[t]||``,n)}function $r(e,t,n){return!n||n===t?!1:!Zr(e[t]||``,n)}function ei(e){return/\b(prettier|oxfmt|biome format)\b/.test(e)}function ti(e){return/\b(eslint|oxlint|biome lint)\b/.test(e)}function ni(e){return/\b(biome check|vp fmt|vp lint)\b/.test(e)}function ri(e,t,n,r){let i=e[t]||``,a=n?Zr(i,n):!1,o=r?Zr(i,r):!1,s=a||ei(i),c=o||ti(i),l=ni(i);if(s&&!c&&!l)return`format`;if(c&&!s&&!l)return`lint`;if(l)return`autofix`}function ii(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=Br(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=e[t]||``,a=n&&Zr(i,n)||ei(i),o=r&&Zr(i,r)||ti(i);if(a&&o)return[{capability:`format`,capabilities:[`format`,`lint`],scriptName:t}];let s=ri(e,t,n,r),c=s?[{capability:s,scriptName:t}]:[{capability:`typecheck`,capabilities:[],scriptName:t}];return n&&Qr(e,t,n)&&c.push({capability:`format`,scriptName:n}),r&&$r(e,t,r)&&c.push({capability:`lint`,scriptName:r}),c}function ai(e){let t=[],n=Rr(e,`check`),r=Br(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function oi(e,t){return t===`fix`?ii(e):ai(e)}var si=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=oi(t,`fix`),r=oi(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=oi(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function ci(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function li(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ui=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=li(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},di=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=ci(t,`@biomejs/biome`),r=li(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},fi=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ci(t,`prettier`),r=!!t?.prettier,i=li(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},pi=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ci(t,`eslint`),r=!!t?.eslintConfig,i=li(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},mi=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ci(t,`oxlint`),r=li(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},hi=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ci(t,`oxfmt`),r=li(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},gi=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new si;vitePlusAdapter=new ui;biomeAdapter=new di;prettierAdapter=new fi;eslintAdapter=new pi;oxlintAdapter=new mi;oxfmtAdapter=new hi;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},_i=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},vi=class{id=`python`;name=`Python`;ruffAdapter=new _i;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},yi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function bi(){let e=new yi;return e.registerProvider(new vi),e.registerProvider(new gi),e}const xi=bi();async function Si(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function Ci(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(xi,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await Si(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function wi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function Ti(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await wi(e,r,t)}}async function Ei(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(xi,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function Di(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await Si(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await Ci(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Oi(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await Ti(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ki(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await Ei(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ai(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await Oi(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await ki(e,r,n);return s&&i.push(s),i}async function ji(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(xi,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Di(e,i);o&&r.push(o);let s=await Ai(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&ji();export{Ci as executeJsWorkflow,Ti as executePythonWorkflow,Ei as executeRuffAutofix,ji as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index da86a297..f88dc175 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -36,6 +36,10 @@ function resolveFormatScript( return scripts["format:check"] ? "format:check" : scripts["fmt:check"] ? "fmt:check" : undefined; } +function isWriteCapableScript(command: string): boolean { + return /(?:^|\s)(?:--fix|--write)(?:$|\s)/.test(command); +} + function resolveLintScript( scripts: Record, mode: ExecutionMode, @@ -47,7 +51,14 @@ function resolveLintScript( if (scripts["lint:write"]) return "lint:write"; return undefined; } - return scripts["lint:check"] ? "lint:check" : scripts.lint ? "lint" : undefined; + if (scripts["lint:check"]) { + return "lint:check"; + } + // In check mode, only select generic "lint" if it does not contain common write flags (--fix, --write) + if (scripts.lint && !isWriteCapableScript(scripts.lint)) { + return "lint"; + } + return undefined; } interface TokenizerState { @@ -286,27 +297,46 @@ function shouldIncludeLintWithFix( return !doesFixScriptDelegateTo(fixBody, lintScript); } +function hasFormattingCommand(body: string): boolean { + return /\b(prettier|oxfmt|biome format)\b/.test(body); +} + +function hasLintingCommand(body: string): boolean { + return /\b(eslint|oxlint|biome lint)\b/.test(body); +} + +function hasFullCheckCommand(body: string): boolean { + return /\b(biome check|vp fmt|vp lint)\b/.test(body); +} + function determineFixScriptCapability( scripts: Record, fixScript: string, formatScript?: string, lintScript?: string, -): Capability { +): Capability | undefined { const fixBody = scripts[fixScript] || ""; const delegatesToFormat = formatScript ? doesFixScriptDelegateTo(fixBody, formatScript) : false; const delegatesToLint = lintScript ? doesFixScriptDelegateTo(fixBody, lintScript) : false; - // If fix exclusively delegates to formatting and NOT linting, its capability is format - if (delegatesToFormat && !delegatesToLint) { + const isFormatting = delegatesToFormat || hasFormattingCommand(fixBody); + const isLinting = delegatesToLint || hasLintingCommand(fixBody); + const isFullCheck = hasFullCheckCommand(fixBody); + + if (isFormatting && !isLinting && !isFullCheck) { return "format"; } - // If fix exclusively delegates to linting and NOT formatting, its capability is lint - if (delegatesToLint && !delegatesToFormat) { + if (isLinting && !isFormatting && !isFullCheck) { return "lint"; } - return "autofix"; + if (isFullCheck) { + return "autofix"; + } + + // For unknown custom scripts, do not overclaim autofix; claim no single broad capability so it runs as a script without suppressing independent tools + return undefined; } function resolveFixScriptTasks(scripts: Record): ScriptMapping[] { @@ -322,17 +352,23 @@ function resolveFixScriptTasks(scripts: Record): ScriptMapping[] } const fixBody = scripts[fixScript] || ""; - const delegatesToFormat = formatScript ? doesFixScriptDelegateTo(fixBody, formatScript) : false; - const delegatesToLint = lintScript ? doesFixScriptDelegateTo(fixBody, lintScript) : false; - - // When fix delegates to both format and lint scripts, represent both capabilities explicitly + const isFormat = formatScript + ? doesFixScriptDelegateTo(fixBody, formatScript) || hasFormattingCommand(fixBody) + : hasFormattingCommand(fixBody); + const isLint = lintScript + ? doesFixScriptDelegateTo(fixBody, lintScript) || hasLintingCommand(fixBody) + : hasLintingCommand(fixBody); + + // When fix covers both formatting and linting, represent both capabilities explicitly // so that format and lint are covered without falsely claiming "autofix" (which would suppress Assist) - if (delegatesToFormat && delegatesToLint) { + if (isFormat && isLint) { return [{ capability: "format", capabilities: ["format", "lint"], scriptName: fixScript }]; } const fixCapability = determineFixScriptCapability(scripts, fixScript, formatScript, lintScript); - const mappings: ScriptMapping[] = [{ capability: fixCapability, scriptName: fixScript }]; + const mappings: ScriptMapping[] = fixCapability + ? [{ capability: fixCapability, scriptName: fixScript }] + : [{ capability: "typecheck", capabilities: [], scriptName: fixScript }]; // Use a benign capability like typecheck with empty capabilities so it does not suppress format, lint, or assist if (formatScript && shouldIncludeFormatWithFix(scripts, fixScript, formatScript)) { mappings.push({ capability: "format", scriptName: formatScript }); diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index 7d543802..592b9947 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -690,12 +690,12 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { ".", ]); - // Generic fix script covers autofix, formatting, and linting: all Biome tasks skipped + // Generic fix script that runs full check (e.g. biome check --write) legitimately covers autofix: all Biome tasks skipped fs.writeFileSync( path.join(tempDir, "package.json"), JSON.stringify({ scripts: { - fix: "custom-fix-all", + fix: "biome check --write .", }, devDependencies: { "@biomejs/biome": "^1.9.0" }, }), @@ -704,6 +704,25 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { const planGenericFix = await planExecution(registry, { cwd: tempDir }, "fix"); expect(planGenericFix.tasks.map((t) => t.id)).toEqual(["script-fix"]); + // Unknown custom fix script does NOT overclaim autofix and does NOT suppress Biome tasks + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "custom-fix-all", + }, + devDependencies: { "@biomejs/biome": "^1.9.0" }, + }), + ); + + const planUnknownCustomFix = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planUnknownCustomFix.tasks.map((t) => t.id)).toEqual([ + "script-fix", + "biome-format-fix", + "biome-lint-fix", + "biome-assist-fix", + ]); + // Neither covered: Biome schedules format, lint, and assist actions fs.writeFileSync( path.join(tempDir, "package.json"), @@ -831,6 +850,56 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { expect(resolveScriptTasks({ "lint:write": "eslint --fix ." }, "fix")).toEqual([ { capability: "lint", scriptName: "lint:write" }, ]); + + // Check mode safety: lint scripts containing write flags (--fix, --write) are rejected in check mode + expect(resolveScriptTasks({ lint: "eslint . --fix" }, "check")).toEqual([]); + expect(resolveScriptTasks({ lint: "biome check --write ." }, "check")).toEqual([]); + expect(resolveScriptTasks({ lint: "eslint . --fix" }, "fix")).toEqual([]); // Not a recognized fix alias + expect(resolveScriptTasks({ "lint:fix": "eslint . --fix" }, "fix")).toEqual([ + { capability: "lint", scriptName: "lint:fix" }, + ]); + }); + + it("verifies direct tool fix script capability assignment without overclaiming", async () => { + // fix: "prettier --write ." does not suppress Biome lint or Assist tasks + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "prettier --write .", + }, + devDependencies: { "@biomejs/biome": "^2.0.0" }, + }), + ); + fs.writeFileSync(path.join(tempDir, "biome.json"), "{}"); + + const registry = createDefaultRegistry(); + const planPrettier = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planPrettier.tasks.map((t) => t.id)).toEqual([ + "script-fix", + "biome-lint-fix", + "biome-assist-fix", + ]); + expect(planPrettier.tasks[0].capability).toBe("format"); + + // fix: "eslint --fix ." does not suppress Biome format or Assist tasks + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "eslint --fix .", + }, + devDependencies: { "@biomejs/biome": "^2.0.0" }, + }), + ); + + const planEslint = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planEslint.tasks.map((t) => t.id)).toEqual([ + "script-fix", + "biome-format-fix", + "biome-assist-fix", + ]); + expect(planEslint.tasks[0].capability).toBe("lint"); }); }); From 048093bb6e388fc25053c98776145d9e084ca059 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 7 Nov 2026 13:51:59 +0000 Subject: [PATCH 15/25] Reduce cyclomatic complexity in resolveFixScriptTasks Extract checkCoverage and createFixScriptMappings helper functions to simplify capability mapping and reduce cyclomatic complexity in resolveFixScriptTasks. Rebuild dist/autofix.mjs. --- dist/autofix.mjs | 10 +-- .../adapters/javascript/script-adapter.ts | 78 ++++++++----------- 2 files changed, 39 insertions(+), 49 deletions(-) diff --git a/dist/autofix.mjs b/dist/autofix.mjs index a2384821..07000061 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -306,8 +306,8 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `&&e[i]!==`\r`;)r+=` `,i++;return i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`)&&t.has(`assist`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)if(t.add(e.capability),e.capabilities)for(let n of e.capabilities)t.add(n);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` `)}function Rr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:void 0}function zr(e){return/(?:^|\s)(?:--fix|--write)(?:$|\s)/.test(e)}function Br(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`])return`lint:check`;if(e.lint&&!zr(e.lint))return`lint`}function Vr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` `?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Hr(e,t){let n=t;for(;nt?n-1:t}function Ur(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Wr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Gr(e,t,n){return t.isEscaped=!1,n+e}function Kr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function qr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a=e.length)return!1;let r=e[n],i=e[n+1],a=e[n+2];return(r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t}function Zr(e,t){if(!e)return!1;let n=Wr(e);for(let e of n){let n=qr(e);if(n.length!==0&&Xr(n,t))return!0}return!1}function Qr(e,t,n){return!n||n===t?!1:!Zr(e[t]||``,n)}function $r(e,t,n){return!n||n===t?!1:!Zr(e[t]||``,n)}function ei(e){return/\b(prettier|oxfmt|biome format)\b/.test(e)}function ti(e){return/\b(eslint|oxlint|biome lint)\b/.test(e)}function ni(e){return/\b(biome check|vp fmt|vp lint)\b/.test(e)}function ri(e,t,n,r){let i=e[t]||``,a=n?Zr(i,n):!1,o=r?Zr(i,r):!1,s=a||ei(i),c=o||ti(i),l=ni(i);if(s&&!c&&!l)return`format`;if(c&&!s&&!l)return`lint`;if(l)return`autofix`}function ii(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=Br(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=e[t]||``,a=n&&Zr(i,n)||ei(i),o=r&&Zr(i,r)||ti(i);if(a&&o)return[{capability:`format`,capabilities:[`format`,`lint`],scriptName:t}];let s=ri(e,t,n,r),c=s?[{capability:s,scriptName:t}]:[{capability:`typecheck`,capabilities:[],scriptName:t}];return n&&Qr(e,t,n)&&c.push({capability:`format`,scriptName:n}),r&&$r(e,t,r)&&c.push({capability:`lint`,scriptName:r}),c}function ai(e){let t=[],n=Rr(e,`check`),r=Br(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function oi(e,t){return t===`fix`?ii(e):ai(e)}var si=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=oi(t,`fix`),r=oi(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=oi(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function ci(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function li(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ui=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=li(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},di=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=ci(t,`@biomejs/biome`),r=li(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},fi=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ci(t,`prettier`),r=!!t?.prettier,i=li(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},pi=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ci(t,`eslint`),r=!!t?.eslintConfig,i=li(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},mi=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ci(t,`oxlint`),r=li(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},hi=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ci(t,`oxfmt`),r=li(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},gi=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new si;vitePlusAdapter=new ui;biomeAdapter=new di;prettierAdapter=new fi;eslintAdapter=new pi;oxlintAdapter=new mi;oxfmtAdapter=new hi;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},_i=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},vi=class{id=`python`;name=`Python`;ruffAdapter=new _i;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},yi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function bi(){let e=new yi;return e.registerProvider(new vi),e.registerProvider(new gi),e}const xi=bi();async function Si(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function Ci(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(xi,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await Si(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function wi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function Ti(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await wi(e,r,t)}}async function Ei(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(xi,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function Di(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await Si(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}return null}return await Ci(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Oi(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await Ti(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ki(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await Ei(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ai(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await Oi(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await ki(e,r,n);return s&&i.push(s),i}async function ji(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(xi,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Di(e,i);o&&r.push(o);let s=await Ai(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&ji();export{Ci as executeJsWorkflow,Ti as executePythonWorkflow,Ei as executeRuffAutofix,ji as run,cn as sanitizePackageManager}; \ No newline at end of file +`;)n++;return n>t?n-1:t}function Ur(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Wr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Gr(e,t,n){return t.isEscaped=!1,n+e}function Kr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function qr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a=e.length)return!1;let r=e[n],i=e[n+1],a=e[n+2];return(r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t}function Zr(e,t){if(!e)return!1;let n=Wr(e);for(let e of n){let n=qr(e);if(n.length!==0&&Xr(n,t))return!0}return!1}function Qr(e,t,n){return!n||n===t?!1:!Zr(e[t]||``,n)}function $r(e,t,n){return!n||n===t?!1:!Zr(e[t]||``,n)}function ei(e){return/\b(prettier|oxfmt|biome format)\b/.test(e)}function ti(e){return/\b(eslint|oxlint|biome lint)\b/.test(e)}function ni(e){return/\b(biome check|vp fmt|vp lint)\b/.test(e)}function ri(e,t,n){return t&&Zr(e,t)?!0:n(e)}function ii(e,t,n,r){let i=ri(e,n,ei),a=ri(e,r,ti),o=ni(e);return i&&a?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:t}]:i&&!o?[{capability:`format`,scriptName:t}]:a&&!o?[{capability:`lint`,scriptName:t}]:o?[{capability:`autofix`,scriptName:t}]:[{capability:`typecheck`,capabilities:[],scriptName:t}]}function ai(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=Br(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=ii(e[t]||``,t,n,r);return n&&Qr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&$r(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function oi(e){let t=[],n=Rr(e,`check`),r=Br(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function si(e,t){return t===`fix`?ai(e):oi(e)}var ci=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=si(t,`fix`),r=si(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=si(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function li(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ui(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var di=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ui(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},fi=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`@biomejs/biome`),r=ui(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},pi=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`prettier`),r=!!t?.prettier,i=ui(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},mi=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`eslint`),r=!!t?.eslintConfig,i=ui(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},hi=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`oxlint`),r=ui(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},gi=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`oxfmt`),r=ui(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},_i=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new ci;vitePlusAdapter=new di;biomeAdapter=new fi;prettierAdapter=new pi;eslintAdapter=new mi;oxlintAdapter=new hi;oxfmtAdapter=new gi;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},vi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},yi=class{id=`python`;name=`Python`;ruffAdapter=new vi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},bi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function xi(){let e=new bi;return e.registerProvider(new yi),e.registerProvider(new _i),e}const Si=xi();async function Ci(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function wi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(Si,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await Ci(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function Ti(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function Ei(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await Ti(e,r,t)}}async function Di(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(Si,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function Oi(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await Ci(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await wi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ki(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await Ei(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ai(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await Di(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ji(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await ki(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await Ai(e,r,n);return s&&i.push(s),i}async function Mi(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(Si,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Oi(e,i);o&&r.push(o);let s=await ji(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&Mi();export{wi as executeJsWorkflow,Ei as executePythonWorkflow,Di as executeRuffAutofix,Mi as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index f88dc175..23ec887a 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -309,34 +309,40 @@ function hasFullCheckCommand(body: string): boolean { return /\b(biome check|vp fmt|vp lint)\b/.test(body); } -function determineFixScriptCapability( - scripts: Record, - fixScript: string, - formatScript?: string, - lintScript?: string, -): Capability | undefined { - const fixBody = scripts[fixScript] || ""; - const delegatesToFormat = formatScript ? doesFixScriptDelegateTo(fixBody, formatScript) : false; - const delegatesToLint = lintScript ? doesFixScriptDelegateTo(fixBody, lintScript) : false; +function checkCoverage( + body: string, + targetScript: string | undefined, + hasCommand: (b: string) => boolean, +): boolean { + if (targetScript && doesFixScriptDelegateTo(body, targetScript)) { + return true; + } + return hasCommand(body); +} - const isFormatting = delegatesToFormat || hasFormattingCommand(fixBody); - const isLinting = delegatesToLint || hasLintingCommand(fixBody); - const isFullCheck = hasFullCheckCommand(fixBody); +function createFixScriptMappings( + body: string, + fixScript: string, + formatScript: string | undefined, + lintScript: string | undefined, +): ScriptMapping[] { + const isFormat = checkCoverage(body, formatScript, hasFormattingCommand); + const isLint = checkCoverage(body, lintScript, hasLintingCommand); + const isFull = hasFullCheckCommand(body); - if (isFormatting && !isLinting && !isFullCheck) { - return "format"; + if (isFormat && isLint) { + return [{ capability: "format", capabilities: ["format", "lint"], scriptName: fixScript }]; } - - if (isLinting && !isFormatting && !isFullCheck) { - return "lint"; + if (isFormat && !isFull) { + return [{ capability: "format", scriptName: fixScript }]; } - - if (isFullCheck) { - return "autofix"; + if (isLint && !isFull) { + return [{ capability: "lint", scriptName: fixScript }]; } - - // For unknown custom scripts, do not overclaim autofix; claim no single broad capability so it runs as a script without suppressing independent tools - return undefined; + if (isFull) { + return [{ capability: "autofix", scriptName: fixScript }]; + } + return [{ capability: "typecheck", capabilities: [], scriptName: fixScript }]; } function resolveFixScriptTasks(scripts: Record): ScriptMapping[] { @@ -345,30 +351,14 @@ function resolveFixScriptTasks(scripts: Record): ScriptMapping[] const lintScript = resolveLintScript(scripts, "fix"); if (!fixScript) { - const fallbackMappings: ScriptMapping[] = []; - if (formatScript) fallbackMappings.push({ capability: "format", scriptName: formatScript }); - if (lintScript) fallbackMappings.push({ capability: "lint", scriptName: lintScript }); - return fallbackMappings; + const fallback: ScriptMapping[] = []; + if (formatScript) fallback.push({ capability: "format", scriptName: formatScript }); + if (lintScript) fallback.push({ capability: "lint", scriptName: lintScript }); + return fallback; } const fixBody = scripts[fixScript] || ""; - const isFormat = formatScript - ? doesFixScriptDelegateTo(fixBody, formatScript) || hasFormattingCommand(fixBody) - : hasFormattingCommand(fixBody); - const isLint = lintScript - ? doesFixScriptDelegateTo(fixBody, lintScript) || hasLintingCommand(fixBody) - : hasLintingCommand(fixBody); - - // When fix covers both formatting and linting, represent both capabilities explicitly - // so that format and lint are covered without falsely claiming "autofix" (which would suppress Assist) - if (isFormat && isLint) { - return [{ capability: "format", capabilities: ["format", "lint"], scriptName: fixScript }]; - } - - const fixCapability = determineFixScriptCapability(scripts, fixScript, formatScript, lintScript); - const mappings: ScriptMapping[] = fixCapability - ? [{ capability: fixCapability, scriptName: fixScript }] - : [{ capability: "typecheck", capabilities: [], scriptName: fixScript }]; // Use a benign capability like typecheck with empty capabilities so it does not suppress format, lint, or assist + const mappings = createFixScriptMappings(fixBody, fixScript, formatScript, lintScript); if (formatScript && shouldIncludeFormatWithFix(scripts, fixScript, formatScript)) { mappings.push({ capability: "format", scriptName: formatScript }); From 70db3fd86354d031bc812666cab771b797e07815 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sun, 8 Nov 2026 01:04:24 +0000 Subject: [PATCH 16/25] Correct autofix capability detection & check-mode safety - Require explicit write flags (--write, --fix, vp fmt, vp lint --fix) before assigning formatting/linting autofix capabilities to scripts. - Prevent read-only commands (prettier ., eslint .) from suppressing tools. - Prevent standalone vp fmt and vp lint from overclaiming full autofix. - Apply write-safety check to format:check, fmt:check, lint:check, and lint to guarantee check mode is strictly read-only. - Add regression tests and rebuild dist/autofix.mjs. --- dist/autofix.mjs | 4 +- .../adapters/javascript/script-adapter.ts | 46 ++++++-- tests/autofix-architecture.test.ts | 103 +++++++++++++++++- 3 files changed, 137 insertions(+), 16 deletions(-) diff --git a/dist/autofix.mjs b/dist/autofix.mjs index 07000061..5fd5ca39 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -304,9 +304,9 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`)&&t.has(`assist`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)if(t.add(e.capability),e.capabilities)for(let n of e.capabilities)t.add(n);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` -`)}function Rr(e,t){return t===`fix`?e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0:e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:void 0}function zr(e){return/(?:^|\s)(?:--fix|--write)(?:$|\s)/.test(e)}function Br(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`])return`lint:check`;if(e.lint&&!zr(e.lint))return`lint`}function Vr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` +`)}function Rr(e){return/(?:^|\s)(?:--fix|--write)(?:$|\s)/.test(e)}function zr(e,t){if(t===`fix`)return e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0;let n=e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:void 0;if(n&&!Rr(e[n]))return n}function Br(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`]&&!Rr(e[`lint:check`]))return`lint:check`;if(e.lint&&!Rr(e.lint))return`lint`}function Vr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` `?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Hr(e,t){let n=t;for(;nt?n-1:t}function Ur(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Wr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Gr(e,t,n){return t.isEscaped=!1,n+e}function Kr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function qr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a=e.length)return!1;let r=e[n],i=e[n+1],a=e[n+2];return(r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t}function Zr(e,t){if(!e)return!1;let n=Wr(e);for(let e of n){let n=qr(e);if(n.length!==0&&Xr(n,t))return!0}return!1}function Qr(e,t,n){return!n||n===t?!1:!Zr(e[t]||``,n)}function $r(e,t,n){return!n||n===t?!1:!Zr(e[t]||``,n)}function ei(e){return/\b(prettier|oxfmt|biome format)\b/.test(e)}function ti(e){return/\b(eslint|oxlint|biome lint)\b/.test(e)}function ni(e){return/\b(biome check|vp fmt|vp lint)\b/.test(e)}function ri(e,t,n){return t&&Zr(e,t)?!0:n(e)}function ii(e,t,n,r){let i=ri(e,n,ei),a=ri(e,r,ti),o=ni(e);return i&&a?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:t}]:i&&!o?[{capability:`format`,scriptName:t}]:a&&!o?[{capability:`lint`,scriptName:t}]:o?[{capability:`autofix`,scriptName:t}]:[{capability:`typecheck`,capabilities:[],scriptName:t}]}function ai(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Rr(e,`fix`),r=Br(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=ii(e[t]||``,t,n,r);return n&&Qr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&$r(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function oi(e){let t=[],n=Rr(e,`check`),r=Br(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function si(e,t){return t===`fix`?ai(e):oi(e)}var ci=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=si(t,`fix`),r=si(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=si(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function li(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ui(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var di=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ui(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},fi=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`@biomejs/biome`),r=ui(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},pi=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`prettier`),r=!!t?.prettier,i=ui(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},mi=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`eslint`),r=!!t?.eslintConfig,i=ui(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},hi=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`oxlint`),r=ui(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},gi=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`oxfmt`),r=ui(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},_i=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new ci;vitePlusAdapter=new di;biomeAdapter=new fi;prettierAdapter=new pi;eslintAdapter=new mi;oxlintAdapter=new hi;oxfmtAdapter=new gi;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},vi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},yi=class{id=`python`;name=`Python`;ruffAdapter=new vi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},bi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function xi(){let e=new bi;return e.registerProvider(new yi),e.registerProvider(new _i),e}const Si=xi();async function Ci(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function wi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(Si,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await Ci(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`;)n++;return n>t?n-1:t}function Ur(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Wr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Gr(e,t,n){return t.isEscaped=!1,n+e}function Kr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function qr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a=e.length)return!1;let r=e[n],i=e[n+1],a=e[n+2];return(r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t}function Zr(e,t){if(!e)return!1;let n=Wr(e);for(let e of n){let n=qr(e);if(n.length!==0&&Xr(n,t))return!0}return!1}function Qr(e,t,n){return!n||n===t?!1:!Zr(e[t]||``,n)}function $r(e,t,n){return!n||n===t?!1:!Zr(e[t]||``,n)}function ei(e){return/\bvp\s+fmt\b/.test(e)?!0:/\b(prettier|oxfmt|biome\s+format)\b/.test(e)&&/(?:^|\s)(?:--write|-w)(?:$|\s)/.test(e)}function ti(e){return/\bvp\s+lint\b/.test(e)&&/(?:^|\s)--fix(?:$|\s)/.test(e)?!0:/\b(eslint|oxlint)\b/.test(e)&&/(?:^|\s)--fix(?:$|\s)/.test(e)||/\bbiome\s+lint\b/.test(e)&&/(?:^|\s)(?:--write|--fix)(?:$|\s)/.test(e)}function ni(e){return/\bbiome\s+check\b/.test(e)&&/(?:^|\s)(?:--write|--fix)(?:$|\s)/.test(e)}function ri(e,t,n){return t&&Zr(e,t)?!0:n(e)}function ii(e,t,n,r){let i=ri(e,n,ei),a=ri(e,r,ti),o=ni(e);return i&&a?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:t}]:i&&!o?[{capability:`format`,scriptName:t}]:a&&!o?[{capability:`lint`,scriptName:t}]:o?[{capability:`autofix`,scriptName:t}]:[{capability:`typecheck`,capabilities:[],scriptName:t}]}function ai(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=zr(e,`fix`),r=Br(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=ii(e[t]||``,t,n,r);return n&&Qr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&$r(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function oi(e){let t=[],n=zr(e,`check`),r=Br(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function si(e,t){return t===`fix`?ai(e):oi(e)}var ci=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=si(t,`fix`),r=si(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=si(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function li(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ui(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var di=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ui(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},fi=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`@biomejs/biome`),r=ui(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},pi=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`prettier`),r=!!t?.prettier,i=ui(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},mi=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`eslint`),r=!!t?.eslintConfig,i=ui(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},hi=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`oxlint`),r=ui(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},gi=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`oxfmt`),r=ui(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},_i=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new ci;vitePlusAdapter=new di;biomeAdapter=new fi;prettierAdapter=new pi;eslintAdapter=new mi;oxlintAdapter=new hi;oxfmtAdapter=new gi;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},vi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},yi=class{id=`python`;name=`Python`;ruffAdapter=new vi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},bi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function xi(){let e=new bi;return e.registerProvider(new yi),e.registerProvider(new _i),e}const Si=xi();async function Ci(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function wi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(Si,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await Ci(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` `))}}async function Ti(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function Ei(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await Ti(e,r,t)}}async function Di(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(Si,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` `))}}async function Oi(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await Ci(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` `))}return null}return await wi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ki(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await Ei(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ai(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await Di(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ji(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await ki(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await Ai(e,r,n);return s&&i.push(s),i}async function Mi(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(Si,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Oi(e,i);o&&r.push(o);let s=await ji(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index 23ec887a..ed3afb23 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -15,6 +15,10 @@ export interface ScriptMapping { scriptName: string; } +function isWriteCapableScript(command: string): boolean { + return /(?:^|\s)(?:--fix|--write)(?:$|\s)/.test(command); +} + function resolveFormatScript( scripts: Record, mode: ExecutionMode, @@ -32,12 +36,16 @@ function resolveFormatScript( : undefined; } // In check mode, ONLY select explicitly non-writing scripts. - // Never fall back to "format" or "fmt" as they typically perform file writes. - return scripts["format:check"] ? "format:check" : scripts["fmt:check"] ? "fmt:check" : undefined; -} - -function isWriteCapableScript(command: string): boolean { - return /(?:^|\s)(?:--fix|--write)(?:$|\s)/.test(command); + // Reject scripts containing recognized write flags (--write, --fix). + const candidate = scripts["format:check"] + ? "format:check" + : scripts["fmt:check"] + ? "fmt:check" + : undefined; + if (candidate && !isWriteCapableScript(scripts[candidate])) { + return candidate; + } + return undefined; } function resolveLintScript( @@ -51,10 +59,10 @@ function resolveLintScript( if (scripts["lint:write"]) return "lint:write"; return undefined; } - if (scripts["lint:check"]) { + // In check mode, validate that the selected script does not contain write flags (--fix, --write) + if (scripts["lint:check"] && !isWriteCapableScript(scripts["lint:check"])) { return "lint:check"; } - // In check mode, only select generic "lint" if it does not contain common write flags (--fix, --write) if (scripts.lint && !isWriteCapableScript(scripts.lint)) { return "lint"; } @@ -298,15 +306,31 @@ function shouldIncludeLintWithFix( } function hasFormattingCommand(body: string): boolean { - return /\b(prettier|oxfmt|biome format)\b/.test(body); + // Must verify tool AND write flags (or vp fmt which formats by default) + // e.g. prettier --write, oxfmt --write, biome format --write, vp fmt + if (/\bvp\s+fmt\b/.test(body)) { + return true; + } + return ( + /\b(prettier|oxfmt|biome\s+format)\b/.test(body) && /(?:^|\s)(?:--write|-w)(?:$|\s)/.test(body) + ); } function hasLintingCommand(body: string): boolean { - return /\b(eslint|oxlint|biome lint)\b/.test(body); + // Must verify tool AND write flags + // e.g. eslint --fix, oxlint --fix, biome lint --write, vp lint --fix + if (/\bvp\s+lint\b/.test(body) && /(?:^|\s)--fix(?:$|\s)/.test(body)) { + return true; + } + return ( + (/\b(eslint|oxlint)\b/.test(body) && /(?:^|\s)--fix(?:$|\s)/.test(body)) || + (/\bbiome\s+lint\b/.test(body) && /(?:^|\s)(?:--write|--fix)(?:$|\s)/.test(body)) + ); } function hasFullCheckCommand(body: string): boolean { - return /\b(biome check|vp fmt|vp lint)\b/.test(body); + // Only biome check with --write (or full composite runner) demonstrably covers format, lint, and assist + return /\bbiome\s+check\b/.test(body) && /(?:^|\s)(?:--write|--fix)(?:$|\s)/.test(body); } function checkCoverage( diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index 592b9947..65eca0de 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -854,6 +854,9 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { // Check mode safety: lint scripts containing write flags (--fix, --write) are rejected in check mode expect(resolveScriptTasks({ lint: "eslint . --fix" }, "check")).toEqual([]); expect(resolveScriptTasks({ lint: "biome check --write ." }, "check")).toEqual([]); + expect(resolveScriptTasks({ "lint:check": "eslint . --fix" }, "check")).toEqual([]); + expect(resolveScriptTasks({ "format:check": "prettier --write ." }, "check")).toEqual([]); + expect(resolveScriptTasks({ "fmt:check": "prettier --write ." }, "check")).toEqual([]); expect(resolveScriptTasks({ lint: "eslint . --fix" }, "fix")).toEqual([]); // Not a recognized fix alias expect(resolveScriptTasks({ "lint:fix": "eslint . --fix" }, "fix")).toEqual([ { capability: "lint", scriptName: "lint:fix" }, @@ -861,12 +864,12 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { }); it("verifies direct tool fix script capability assignment without overclaiming", async () => { - // fix: "prettier --write ." does not suppress Biome lint or Assist tasks + // Read-only "prettier ." does not claim formatting write capability fs.writeFileSync( path.join(tempDir, "package.json"), JSON.stringify({ scripts: { - fix: "prettier --write .", + fix: "prettier .", }, devDependencies: { "@biomejs/biome": "^2.0.0" }, }), @@ -874,6 +877,43 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { fs.writeFileSync(path.join(tempDir, "biome.json"), "{}"); const registry = createDefaultRegistry(); + const planReadOnlyPrettier = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planReadOnlyPrettier.tasks.map((t) => t.id)).toEqual([ + "script-fix", + "biome-format-fix", + "biome-lint-fix", + "biome-assist-fix", + ]); + + // Read-only "eslint ." does not claim lint write capability + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "eslint .", + }, + devDependencies: { "@biomejs/biome": "^2.0.0" }, + }), + ); + const planReadOnlyEslint = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planReadOnlyEslint.tasks.map((t) => t.id)).toEqual([ + "script-fix", + "biome-format-fix", + "biome-lint-fix", + "biome-assist-fix", + ]); + + // fix: "prettier --write ." claims format and does not suppress Biome lint or Assist tasks + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "prettier --write .", + }, + devDependencies: { "@biomejs/biome": "^2.0.0" }, + }), + ); + const planPrettier = await planExecution(registry, { cwd: tempDir }, "fix"); expect(planPrettier.tasks.map((t) => t.id)).toEqual([ "script-fix", @@ -882,7 +922,7 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { ]); expect(planPrettier.tasks[0].capability).toBe("format"); - // fix: "eslint --fix ." does not suppress Biome format or Assist tasks + // fix: "eslint --fix ." claims lint and does not suppress Biome format or Assist tasks fs.writeFileSync( path.join(tempDir, "package.json"), JSON.stringify({ @@ -900,6 +940,63 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { "biome-assist-fix", ]); expect(planEslint.tasks[0].capability).toBe("lint"); + + // fix: "vp fmt" only claims format and does not suppress Biome lint or Assist tasks + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "vp fmt", + }, + devDependencies: { "@biomejs/biome": "^2.0.0" }, + }), + ); + + const planVpFmt = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planVpFmt.tasks.map((t) => t.id)).toEqual([ + "script-fix", + "biome-lint-fix", + "biome-assist-fix", + ]); + expect(planVpFmt.tasks[0].capability).toBe("format"); + + // fix: "vp lint" without --fix is read-only and does not claim lint write + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "vp lint", + }, + devDependencies: { "@biomejs/biome": "^2.0.0" }, + }), + ); + + const planVpLintReadOnly = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planVpLintReadOnly.tasks.map((t) => t.id)).toEqual([ + "script-fix", + "biome-format-fix", + "biome-lint-fix", + "biome-assist-fix", + ]); + + // fix: "vp lint --fix" only claims lint and does not suppress Biome format or Assist tasks + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "vp lint --fix", + }, + devDependencies: { "@biomejs/biome": "^2.0.0" }, + }), + ); + + const planVpLintFix = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planVpLintFix.tasks.map((t) => t.id)).toEqual([ + "script-fix", + "biome-format-fix", + "biome-assist-fix", + ]); + expect(planVpLintFix.tasks[0].capability).toBe("lint"); }); }); From 5ee3844fc46eee97202f1d3017ad7f7ce2a26e0a Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sun, 8 Nov 2026 01:45:15 +0000 Subject: [PATCH 17/25] Harden script capability detection and check-mode safety - Inspect parsed command tokens to distinguish actual tool invocations from arguments and wrappers like echo or comments. - Require verified write flags (--write, -w, --fix) before attributing formatting/linting autofix capabilities to commands. - Prevent read-only format scripts (prettier --check) from being selected in fix mode and suppressing dedicated formatters. - Validate format:check, fmt:check, lint:check, and lint against write flags to guarantee check mode is strictly read-only. - Add regression tests and rebuild dist/autofix.mjs. --- dist/autofix.mjs | 14 +- .../adapters/javascript/script-adapter.ts | 196 ++++++++++++++---- tests/autofix-architecture.test.ts | 103 +++++++++ 3 files changed, 260 insertions(+), 53 deletions(-) diff --git a/dist/autofix.mjs b/dist/autofix.mjs index 5fd5ca39..fe67ac98 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -304,10 +304,10 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`)&&t.has(`assist`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)if(t.add(e.capability),e.capabilities)for(let n of e.capabilities)t.add(n);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` -`)}function Rr(e){return/(?:^|\s)(?:--fix|--write)(?:$|\s)/.test(e)}function zr(e,t){if(t===`fix`)return e[`format:write`]?`format:write`:e[`format:fix`]?`format:fix`:e.format?`format`:e.fmt?`fmt`:void 0;let n=e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:void 0;if(n&&!Rr(e[n]))return n}function Br(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`]&&!Rr(e[`lint:check`]))return`lint:check`;if(e.lint&&!Rr(e.lint))return`lint`}function Vr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` -`?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Hr(e,t){let n=t;for(;nt?n-1:t}function Ur(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Wr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Gr(e,t,n){return t.isEscaped=!1,n+e}function Kr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function qr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a=e.length)return!1;let r=e[n],i=e[n+1],a=e[n+2];return(r===`npm`||r===`pnpm`||r===`yarn`||r===`bun`)&&i===`run`&&a===t||(r===`pnpm`||r===`bun`||r===`yarn`)&&i===t}function Zr(e,t){if(!e)return!1;let n=Wr(e);for(let e of n){let n=qr(e);if(n.length!==0&&Xr(n,t))return!0}return!1}function Qr(e,t,n){return!n||n===t?!1:!Zr(e[t]||``,n)}function $r(e,t,n){return!n||n===t?!1:!Zr(e[t]||``,n)}function ei(e){return/\bvp\s+fmt\b/.test(e)?!0:/\b(prettier|oxfmt|biome\s+format)\b/.test(e)&&/(?:^|\s)(?:--write|-w)(?:$|\s)/.test(e)}function ti(e){return/\bvp\s+lint\b/.test(e)&&/(?:^|\s)--fix(?:$|\s)/.test(e)?!0:/\b(eslint|oxlint)\b/.test(e)&&/(?:^|\s)--fix(?:$|\s)/.test(e)||/\bbiome\s+lint\b/.test(e)&&/(?:^|\s)(?:--write|--fix)(?:$|\s)/.test(e)}function ni(e){return/\bbiome\s+check\b/.test(e)&&/(?:^|\s)(?:--write|--fix)(?:$|\s)/.test(e)}function ri(e,t,n){return t&&Zr(e,t)?!0:n(e)}function ii(e,t,n,r){let i=ri(e,n,ei),a=ri(e,r,ti),o=ni(e);return i&&a?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:t}]:i&&!o?[{capability:`format`,scriptName:t}]:a&&!o?[{capability:`lint`,scriptName:t}]:o?[{capability:`autofix`,scriptName:t}]:[{capability:`typecheck`,capabilities:[],scriptName:t}]}function ai(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=zr(e,`fix`),r=Br(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=ii(e[t]||``,t,n,r);return n&&Qr(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&$r(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function oi(e){let t=[],n=zr(e,`check`),r=Br(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function si(e,t){return t===`fix`?ai(e):oi(e)}var ci=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=si(t,`fix`),r=si(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=si(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function li(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ui(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var di=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ui(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},fi=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`@biomejs/biome`),r=ui(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},pi=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`prettier`),r=!!t?.prettier,i=ui(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},mi=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`eslint`),r=!!t?.eslintConfig,i=ui(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},hi=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`oxlint`),r=ui(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},gi=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=li(t,`oxfmt`),r=ui(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},_i=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new ci;vitePlusAdapter=new di;biomeAdapter=new fi;prettierAdapter=new pi;eslintAdapter=new mi;oxlintAdapter=new hi;oxfmtAdapter=new gi;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},vi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},yi=class{id=`python`;name=`Python`;ruffAdapter=new vi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},bi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function xi(){let e=new bi;return e.registerProvider(new yi),e.registerProvider(new _i),e}const Si=xi();async function Ci(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function wi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(Si,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await Ci(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function Ti(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function Ei(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await Ti(e,r,t)}}async function Di(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(Si,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function Oi(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await Ci(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}return null}return await wi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ki(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await Ei(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ai(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await Di(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ji(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await ki(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await Ai(e,r,n);return s&&i.push(s),i}async function Mi(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(Si,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Oi(e,i);o&&r.push(o);let s=await ji(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&Mi();export{wi as executeJsWorkflow,Ei as executePythonWorkflow,Di as executeRuffAutofix,Mi as run,cn as sanitizePackageManager}; \ No newline at end of file +`)}function Rr(e){let t=ei(e);return t.length!==0&&t.some(e=>{let[t]=e;return t===`echo`||t===`printf`?!1:ai(e)||oi(e)||si(e)||ci(e)||li(e)||ui(e)||di(e)||fi(e)||pi(e)||ii(e)})}function zr(e){return/\b(prettier|oxfmt|biome\s+format)\b/.test(e)&&/(?:^|\s)(?:--check|-c)(?:$|\s)/.test(e)}function Br(e){if(e[`format:write`])return`format:write`;if(e[`format:fix`])return`format:fix`;if(e.format&&!zr(e.format))return`format`;if(e.fmt&&!zr(e.fmt))return`fmt`}function Vr(e,t){if(t===`fix`)return Br(e);let n=e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:void 0;if(n&&!Rr(e[n]))return n}function Hr(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`]&&!Rr(e[`lint:check`]))return`lint:check`;if(e.lint&&!Rr(e.lint))return`lint`}function Ur(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` +`?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Wr(e,t){let n=t;for(;nt?n-1:t}function Gr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Kr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function qr(e,t,n){return t.isEscaped=!1,n+e}function Jr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function Yr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a0&&n.push(t)}return n}function ti(e,t){let n=ei(e);for(let e of n)if($r(e,t))return!0;return!1}function ni(e,t,n){return!n||n===t?!1:!ti(e[t]||``,n)}function ri(e,t,n){return!n||n===t?!1:!ti(e[t]||``,n)}function ii(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ai(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function oi(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function si(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function ci(e){let[t]=e;return t===`eslint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function li(e){let[t]=e;return t===`oxlint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function ui(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function di(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function fi(e){let[t,n]=e;return t===`vp`&&n===`fmt`}function pi(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function mi(e){return ei(e).some(e=>ai(e)||oi(e)||si(e)||fi(e))}function hi(e){return ei(e).some(e=>ci(e)||li(e)||ui(e)||pi(e))}function gi(e){return ei(e).some(e=>di(e))}function _i(e,t,n){return t&&ti(e,t)?!0:n(e)}function vi(e,t,n,r){let i=_i(e,n,mi),a=_i(e,r,hi),o=gi(e);return i&&a?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:t}]:i&&!o?[{capability:`format`,scriptName:t}]:a&&!o?[{capability:`lint`,scriptName:t}]:o?[{capability:`autofix`,scriptName:t}]:[{capability:`typecheck`,capabilities:[],scriptName:t}]}function yi(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Vr(e,`fix`),r=Hr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=vi(e[t]||``,t,n,r);return n&&ni(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&ri(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function bi(e){let t=[],n=Vr(e,`check`),r=Hr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function xi(e,t){return t===`fix`?yi(e):bi(e)}var Si=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=xi(t,`fix`),r=xi(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=xi(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Ci(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function wi(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var Ti=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=wi(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},Ei=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=Ci(t,`@biomejs/biome`),r=wi(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},Di=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Ci(t,`prettier`),r=!!t?.prettier,i=wi(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},Oi=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Ci(t,`eslint`),r=!!t?.eslintConfig,i=wi(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},ki=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Ci(t,`oxlint`),r=wi(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},Ai=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Ci(t,`oxfmt`),r=wi(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},ji=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Si;vitePlusAdapter=new Ti;biomeAdapter=new Ei;prettierAdapter=new Di;eslintAdapter=new Oi;oxlintAdapter=new ki;oxfmtAdapter=new Ai;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},Mi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},Ni=class{id=`python`;name=`Python`;ruffAdapter=new Mi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},Pi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function Fi(){let e=new Pi;return e.registerProvider(new Ni),e.registerProvider(new ji),e}const Ii=Fi();async function Li(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function Ri(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(Ii,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await Li(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function zi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function Bi(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await zi(e,r,t)}}async function Vi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(Ii,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function Hi(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await Li(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await Ri(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ui(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await Bi(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Wi(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await Vi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Gi(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await Ui(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await Wi(e,r,n);return s&&i.push(s),i}async function Ki(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(Ii,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Hi(e,i);o&&r.push(o);let s=await Gi(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&Ki();export{Ri as executeJsWorkflow,Bi as executePythonWorkflow,Vi as executeRuffAutofix,Ki as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index ed3afb23..ac4af2d8 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -16,7 +16,41 @@ export interface ScriptMapping { } function isWriteCapableScript(command: string): boolean { - return /(?:^|\s)(?:--fix|--write)(?:$|\s)/.test(command); + const invocations = parseCommandInvocations(command); + if (invocations.length === 0) return false; + return invocations.some((tokens) => { + const [exe] = tokens; + if (exe === "echo" || exe === "printf") return false; + return ( + isPrettierWrite(tokens) || + isOxfmtWrite(tokens) || + isBiomeFormatWrite(tokens) || + isEslintFix(tokens) || + isOxlintFix(tokens) || + isBiomeLintWrite(tokens) || + isBiomeCheckWrite(tokens) || + isVpFmt(tokens) || + isVpLintFix(tokens) || + hasWriteFlag(tokens) + ); + }); +} + +function isExplicitReadonlyFormattingCommand(command: string): boolean { + // Reject scripts that explicitly perform read-only check operations + return ( + /\b(prettier|oxfmt|biome\s+format)\b/.test(command) && + /(?:^|\s)(?:--check|-c)(?:$|\s)/.test(command) + ); +} + +function resolveFormatFixCandidate(scripts: Record): string | undefined { + if (scripts["format:write"]) return "format:write"; + if (scripts["format:fix"]) return "format:fix"; + // For generic format / fmt, select unless explicitly read-only (e.g. prettier --check) + if (scripts.format && !isExplicitReadonlyFormattingCommand(scripts.format)) return "format"; + if (scripts.fmt && !isExplicitReadonlyFormattingCommand(scripts.fmt)) return "fmt"; + return undefined; } function resolveFormatScript( @@ -24,19 +58,10 @@ function resolveFormatScript( mode: ExecutionMode, ): string | undefined { if (mode === "fix") { - // Formatter scripts that modify files - return scripts["format:write"] - ? "format:write" - : scripts["format:fix"] - ? "format:fix" - : scripts.format - ? "format" - : scripts.fmt - ? "fmt" - : undefined; + return resolveFormatFixCandidate(scripts); } // In check mode, ONLY select explicitly non-writing scripts. - // Reject scripts containing recognized write flags (--write, --fix). + // Reject scripts containing recognized write flags (--write, -w, --fix). const candidate = scripts["format:check"] ? "format:check" : scripts["fmt:check"] @@ -231,19 +256,17 @@ function isEnvAssignment(token: string): boolean { return ENV_ASSIGNMENT_REGEX.test(token); } -function matchesPmDelegation(tokens: string[], targetScriptName: string): boolean { +function getCommandInvocationTokens(tokens: string[]): string[] { let startIndex = 0; while (startIndex < tokens.length && isEnvAssignment(tokens[startIndex])) { startIndex++; } + return tokens.slice(startIndex); +} - if (startIndex >= tokens.length) { - return false; - } - - const first = tokens[startIndex]; - const second = tokens[startIndex + 1]; - const third = tokens[startIndex + 2]; +function matchesPmDelegation(cmdTokens: string[], targetScriptName: string): boolean { + if (cmdTokens.length === 0) return false; + const [first, second, third] = cmdTokens; // Check `npm run `, `pnpm run `, `yarn run `, `bun run ` if ( @@ -262,6 +285,20 @@ function matchesPmDelegation(tokens: string[], targetScriptName: string): boolea return false; } +export function parseCommandInvocations(scriptBody: string): string[][] { + if (!scriptBody) return []; + const commands = splitChainedCommands(scriptBody); + const invocations: string[][] = []; + for (const cmd of commands) { + const rawTokens = tokenizeCommandLine(cmd); + const cmdTokens = getCommandInvocationTokens(rawTokens); + if (cmdTokens.length > 0) { + invocations.push(cmdTokens); + } + } + return invocations; +} + /** * Recognizes actual supported package-manager script invocation commands: * e.g. `npm run format:write`, `pnpm run format`, `bun run lint:fix`, `yarn run lint:fix`, `pnpm format`, `bun format`, @@ -269,19 +306,12 @@ function matchesPmDelegation(tokens: string[], targetScriptName: string): boolea * Does not match `echo format`, comments, quoted explanatory text, or substrings. */ export function doesFixScriptDelegateTo(fixScriptBody: string, targetScriptName: string): boolean { - if (!fixScriptBody) return false; - - const commands = splitChainedCommands(fixScriptBody); - - for (const cmd of commands) { - const tokens = tokenizeCommandLine(cmd); - if (tokens.length === 0) continue; - + const invocations = parseCommandInvocations(fixScriptBody); + for (const tokens of invocations) { if (matchesPmDelegation(tokens, targetScriptName)) { return true; } } - return false; } @@ -305,32 +335,106 @@ function shouldIncludeLintWithFix( return !doesFixScriptDelegateTo(fixBody, lintScript); } +function hasWriteFlag(tokens: string[]): boolean { + return tokens.some( + (t) => + t === "-w" || + t === "--write" || + t.startsWith("--write=") || + t === "--fix" || + t.startsWith("--fix="), + ); +} + +function isPrettierWrite(tokens: string[]): boolean { + const [exe] = tokens; + if (exe !== "prettier") return false; + return tokens.some((t) => t === "-w" || t === "--write" || t.startsWith("--write=")); +} + +function isOxfmtWrite(tokens: string[]): boolean { + const [exe] = tokens; + if (exe !== "oxfmt") return false; + return tokens.some((t) => t === "-w" || t === "--write" || t.startsWith("--write=")); +} + +function isBiomeFormatWrite(tokens: string[]): boolean { + const [exe, sub] = tokens; + if (exe !== "biome" || sub !== "format") return false; + return tokens.some((t) => t === "-w" || t === "--write" || t.startsWith("--write=")); +} + +function isEslintFix(tokens: string[]): boolean { + const [exe] = tokens; + if (exe !== "eslint") return false; + return tokens.some((t) => t === "--fix" || t.startsWith("--fix=")); +} + +function isOxlintFix(tokens: string[]): boolean { + const [exe] = tokens; + if (exe !== "oxlint") return false; + return tokens.some((t) => t === "--fix" || t.startsWith("--fix=")); +} + +function isBiomeLintWrite(tokens: string[]): boolean { + const [exe, sub] = tokens; + if (exe !== "biome" || sub !== "lint") return false; + return tokens.some( + (t) => + t === "-w" || + t === "--write" || + t.startsWith("--write=") || + t === "--fix" || + t.startsWith("--fix="), + ); +} + +function isBiomeCheckWrite(tokens: string[]): boolean { + const [exe, sub] = tokens; + if (exe !== "biome" || sub !== "check") return false; + return tokens.some( + (t) => + t === "-w" || + t === "--write" || + t.startsWith("--write=") || + t === "--fix" || + t.startsWith("--fix="), + ); +} + +function isVpFmt(tokens: string[]): boolean { + const [exe, sub] = tokens; + return exe === "vp" && sub === "fmt"; +} + +function isVpLintFix(tokens: string[]): boolean { + const [exe, sub] = tokens; + if (exe !== "vp" || sub !== "lint") return false; + return tokens.some((t) => t === "--fix" || t.startsWith("--fix=")); +} + function hasFormattingCommand(body: string): boolean { - // Must verify tool AND write flags (or vp fmt which formats by default) - // e.g. prettier --write, oxfmt --write, biome format --write, vp fmt - if (/\bvp\s+fmt\b/.test(body)) { - return true; - } - return ( - /\b(prettier|oxfmt|biome\s+format)\b/.test(body) && /(?:^|\s)(?:--write|-w)(?:$|\s)/.test(body) + const invocations = parseCommandInvocations(body); + return invocations.some( + (tokens) => + isPrettierWrite(tokens) || + isOxfmtWrite(tokens) || + isBiomeFormatWrite(tokens) || + isVpFmt(tokens), ); } function hasLintingCommand(body: string): boolean { - // Must verify tool AND write flags - // e.g. eslint --fix, oxlint --fix, biome lint --write, vp lint --fix - if (/\bvp\s+lint\b/.test(body) && /(?:^|\s)--fix(?:$|\s)/.test(body)) { - return true; - } - return ( - (/\b(eslint|oxlint)\b/.test(body) && /(?:^|\s)--fix(?:$|\s)/.test(body)) || - (/\bbiome\s+lint\b/.test(body) && /(?:^|\s)(?:--write|--fix)(?:$|\s)/.test(body)) + const invocations = parseCommandInvocations(body); + return invocations.some( + (tokens) => + isEslintFix(tokens) || isOxlintFix(tokens) || isBiomeLintWrite(tokens) || isVpLintFix(tokens), ); } function hasFullCheckCommand(body: string): boolean { - // Only biome check with --write (or full composite runner) demonstrably covers format, lint, and assist - return /\bbiome\s+check\b/.test(body) && /(?:^|\s)(?:--write|--fix)(?:$|\s)/.test(body); + const invocations = parseCommandInvocations(body); + return invocations.some((tokens) => isBiomeCheckWrite(tokens)); } function checkCoverage( diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index 65eca0de..6d43308a 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -855,14 +855,117 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { expect(resolveScriptTasks({ lint: "eslint . --fix" }, "check")).toEqual([]); expect(resolveScriptTasks({ lint: "biome check --write ." }, "check")).toEqual([]); expect(resolveScriptTasks({ "lint:check": "eslint . --fix" }, "check")).toEqual([]); + expect(resolveScriptTasks({ "lint:check": "eslint . --fix=somewhere" }, "check")).toEqual([]); expect(resolveScriptTasks({ "format:check": "prettier --write ." }, "check")).toEqual([]); + expect(resolveScriptTasks({ "format:check": "prettier -w ." }, "check")).toEqual([]); + expect( + resolveScriptTasks({ "format:check": "prettier --write=somewhere ." }, "check"), + ).toEqual([]); expect(resolveScriptTasks({ "fmt:check": "prettier --write ." }, "check")).toEqual([]); + expect(resolveScriptTasks({ "fmt:check": "prettier -w ." }, "check")).toEqual([]); expect(resolveScriptTasks({ lint: "eslint . --fix" }, "fix")).toEqual([]); // Not a recognized fix alias expect(resolveScriptTasks({ "lint:fix": "eslint . --fix" }, "fix")).toEqual([ { capability: "lint", scriptName: "lint:fix" }, ]); }); + it("verifies formatter selection in fix mode rejects read-only format scripts", () => { + // "format: "prettier --check ."" is read-only and must NOT be selected as format write + expect(resolveScriptTasks({ format: "prettier --check ." }, "fix")).toEqual([]); + expect(resolveScriptTasks({ fmt: "prettier --check ." }, "fix")).toEqual([]); + + // "format: "prettier --write ."" is write-capable and is selected as format write + expect(resolveScriptTasks({ format: "prettier --write ." }, "fix")).toEqual([ + { capability: "format", scriptName: "format" }, + ]); + expect(resolveScriptTasks({ fmt: "prettier -w ." }, "fix")).toEqual([ + { capability: "format", scriptName: "fmt" }, + ]); + expect(resolveScriptTasks({ "format:write": "prettier --write ." }, "fix")).toEqual([ + { capability: "format", scriptName: "format:write" }, + ]); + expect(resolveScriptTasks({ "format:fix": "prettier --write ." }, "fix")).toEqual([ + { capability: "format", scriptName: "format:fix" }, + ]); + }); + + it("verifies command-aware capability detection rejects tool names in echo or comments", async () => { + // echo prettier --write . + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "echo prettier --write .", + }, + devDependencies: { "@biomejs/biome": "^2.0.0" }, + }), + ); + fs.writeFileSync(path.join(tempDir, "biome.json"), "{}"); + + const registry = createDefaultRegistry(); + const planEchoPrettier = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planEchoPrettier.tasks.map((t) => t.id)).toEqual([ + "script-fix", + "biome-format-fix", + "biome-lint-fix", + "biome-assist-fix", + ]); + + // echo "eslint . --fix" + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: 'echo "eslint . --fix"', + }, + devDependencies: { "@biomejs/biome": "^2.0.0" }, + }), + ); + const planEchoEslint = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planEchoEslint.tasks.map((t) => t.id)).toEqual([ + "script-fix", + "biome-format-fix", + "biome-lint-fix", + "biome-assist-fix", + ]); + + // Real tool invocation after && + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "echo starting && prettier --write .", + }, + devDependencies: { "@biomejs/biome": "^2.0.0" }, + }), + ); + const planChained = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planChained.tasks.map((t) => t.id)).toEqual([ + "script-fix", + "biome-lint-fix", + "biome-assist-fix", + ]); + expect(planChained.tasks[0].capability).toBe("format"); + + // Real tool invocation after ; + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "echo hello; eslint . --fix", + }, + devDependencies: { "@biomejs/biome": "^2.0.0" }, + }), + ); + const planSemicolon = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planSemicolon.tasks.map((t) => t.id)).toEqual([ + "script-fix", + "biome-format-fix", + "biome-assist-fix", + ]); + expect(planSemicolon.tasks[0].capability).toBe("lint"); + }); + it("verifies direct tool fix script capability assignment without overclaiming", async () => { // Read-only "prettier ." does not claim formatting write capability fs.writeFileSync( From a1bbbfde55361c57e2a0f8e5654843a06bb6446c Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sun, 8 Nov 2026 02:39:50 +0000 Subject: [PATCH 18/25] refactor(autofix): implement capability-based tool architecture - Introduce shared execution model: Capability, ExecutionTask, ToolAdapter, LanguageProvider, and AutofixRegistry. - Set Ruff as default Python toolchain without dependency checks or pyproject declarations. - Implement hybrid JavaScript detection with explicit script precedence, check-mode safety, and tool adapters for Biome, Prettier, ESLint, Oxlint, Oxfmt, and Vite+. - Support independent Biome assist actions alongside format and lint. - Add explainable planning, error aggregation, and comprehensive tests. --- dist/autofix.mjs | 14 +- .../adapters/javascript/script-adapter.ts | 138 +++++++++++++----- 2 files changed, 112 insertions(+), 40 deletions(-) diff --git a/dist/autofix.mjs b/dist/autofix.mjs index fe67ac98..d8290fe6 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -304,10 +304,10 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`)&&t.has(`assist`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)if(t.add(e.capability),e.capabilities)for(let n of e.capabilities)t.add(n);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` -`)}function Rr(e){let t=ei(e);return t.length!==0&&t.some(e=>{let[t]=e;return t===`echo`||t===`printf`?!1:ai(e)||oi(e)||si(e)||ci(e)||li(e)||ui(e)||di(e)||fi(e)||pi(e)||ii(e)})}function zr(e){return/\b(prettier|oxfmt|biome\s+format)\b/.test(e)&&/(?:^|\s)(?:--check|-c)(?:$|\s)/.test(e)}function Br(e){if(e[`format:write`])return`format:write`;if(e[`format:fix`])return`format:fix`;if(e.format&&!zr(e.format))return`format`;if(e.fmt&&!zr(e.fmt))return`fmt`}function Vr(e,t){if(t===`fix`)return Br(e);let n=e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:void 0;if(n&&!Rr(e[n]))return n}function Hr(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`]&&!Rr(e[`lint:check`]))return`lint:check`;if(e.lint&&!Rr(e.lint))return`lint`}function Ur(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` -`?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Wr(e,t){let n=t;for(;nt?n-1:t}function Gr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Kr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function qr(e,t,n){return t.isEscaped=!1,n+e}function Jr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function Yr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a0&&n.push(t)}return n}function ti(e,t){let n=ei(e);for(let e of n)if($r(e,t))return!0;return!1}function ni(e,t,n){return!n||n===t?!1:!ti(e[t]||``,n)}function ri(e,t,n){return!n||n===t?!1:!ti(e[t]||``,n)}function ii(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ai(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function oi(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function si(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function ci(e){let[t]=e;return t===`eslint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function li(e){let[t]=e;return t===`oxlint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function ui(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function di(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function fi(e){let[t,n]=e;return t===`vp`&&n===`fmt`}function pi(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function mi(e){return ei(e).some(e=>ai(e)||oi(e)||si(e)||fi(e))}function hi(e){return ei(e).some(e=>ci(e)||li(e)||ui(e)||pi(e))}function gi(e){return ei(e).some(e=>di(e))}function _i(e,t,n){return t&&ti(e,t)?!0:n(e)}function vi(e,t,n,r){let i=_i(e,n,mi),a=_i(e,r,hi),o=gi(e);return i&&a?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:t}]:i&&!o?[{capability:`format`,scriptName:t}]:a&&!o?[{capability:`lint`,scriptName:t}]:o?[{capability:`autofix`,scriptName:t}]:[{capability:`typecheck`,capabilities:[],scriptName:t}]}function yi(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Vr(e,`fix`),r=Hr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=vi(e[t]||``,t,n,r);return n&&ni(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&ri(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function bi(e){let t=[],n=Vr(e,`check`),r=Hr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function xi(e,t){return t===`fix`?yi(e):bi(e)}var Si=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=xi(t,`fix`),r=xi(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=xi(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Ci(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function wi(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var Ti=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=wi(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},Ei=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=Ci(t,`@biomejs/biome`),r=wi(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},Di=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Ci(t,`prettier`),r=!!t?.prettier,i=wi(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},Oi=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Ci(t,`eslint`),r=!!t?.eslintConfig,i=wi(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},ki=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Ci(t,`oxlint`),r=wi(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},Ai=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Ci(t,`oxfmt`),r=wi(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},ji=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Si;vitePlusAdapter=new Ti;biomeAdapter=new Ei;prettierAdapter=new Di;eslintAdapter=new Oi;oxlintAdapter=new ki;oxfmtAdapter=new Ai;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},Mi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},Ni=class{id=`python`;name=`Python`;ruffAdapter=new Mi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},Pi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function Fi(){let e=new Pi;return e.registerProvider(new Ni),e.registerProvider(new ji),e}const Ii=Fi();async function Li(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function Ri(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(Ii,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await Li(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function zi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function Bi(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await zi(e,r,t)}}async function Vi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(Ii,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function Hi(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await Li(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}return null}return await Ri(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ui(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await Bi(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Wi(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await Vi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Gi(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await Ui(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await Wi(e,r,n);return s&&i.push(s),i}async function Ki(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(Ii,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Hi(e,i);o&&r.push(o);let s=await Gi(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&Ki();export{Ri as executeJsWorkflow,Bi as executePythonWorkflow,Vi as executeRuffAutofix,Ki as run,cn as sanitizePackageManager}; \ No newline at end of file +`)}function Rr(e){return $r(e).some(e=>{let[t,n]=e;return e.some(e=>e===`--check`||e===`-c`)?t===`prettier`||t===`oxfmt`||t===`biome`&&n===`format`||t===`vp`&&n===`fmt`:!1})}function zr(e){if(e[`format:write`])return`format:write`;if(e[`format:fix`])return`format:fix`;if(e.format&&!Rr(e.format))return`format`;if(e.fmt&&!Rr(e.fmt))return`fmt`}function Br(e,t){if(t===`fix`)return zr(e);let n=e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:void 0;if(n&&!_i(e[n],e))return n}function Vr(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`]&&!_i(e[`lint:check`],e))return`lint:check`;if(e.lint&&!_i(e.lint,e))return`lint`}function Hr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` +`?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Ur(e,t){let n=t;for(;nt?n-1:t}function Wr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Gr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Kr(e,t,n){return t.isEscaped=!1,n+e}function qr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function Jr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a0&&n.push(t)}return n}function ei(e,t){let n=$r(e);for(let e of n)if(Qr(e,t))return!0;return!1}function ti(e,t,n){return!n||n===t?!1:!ei(e[t]||``,n)}function ni(e,t,n){return!n||n===t?!1:!ei(e[t]||``,n)}function ri(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ii(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function ai(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function oi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function si(e){let[t]=e;return t===`eslint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function ci(e){let[t]=e;return t===`oxlint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function li(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ui(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function di(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:!e.some(e=>e===`--check`||e===`-c`)}function fi(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function pi(e){if(e.length===0)return;let[t,n,r]=e;if((t===`npm`||t===`pnpm`||t===`yarn`||t===`bun`)&&n===`run`&&r)return r;if((t===`pnpm`||t===`bun`||t===`yarn`)&&n&&!n.startsWith(`-`))return n}function mi(e){if(e.length>=3&&(e[0]===`sh`||e[0]===`bash`)&&e[1]===`-c`)return e[2]}function hi(e,t,n){let[r]=e;if(r===`echo`||r===`printf`)return!1;let i=mi(e);if(i!==void 0)return gi(i,t,n);let a=pi(e);if(a){if(n.has(a))return!1;n.add(a);let e=t[a];return e?gi(e,t,n):!1}return ii(e)||ai(e)||oi(e)||si(e)||ci(e)||li(e)||ui(e)||di(e)||fi(e)||ri(e)}function gi(e,t={},n=/* @__PURE__ */ new Set){let r=$r(e);return r.length!==0&&r.some(e=>hi(e,t,n))}function _i(e,t={}){return gi(e,t)}function vi(e){return $r(e).some(e=>ii(e)||ai(e)||oi(e)||di(e))}function yi(e){return $r(e).some(e=>si(e)||ci(e)||li(e)||fi(e))}function bi(e){return $r(e).some(e=>{if(ui(e))return!0;let[t,n]=e;return t===`vp`&&n===`check`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))})}function xi(e,t,n){return t&&ei(e,t)?!0:n(e)}function Si(e,t,n,r){let i=xi(e,n,vi),a=xi(e,r,yi),o=bi(e);return i&&a?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:t}]:i&&!o?[{capability:`format`,scriptName:t}]:a&&!o?[{capability:`lint`,scriptName:t}]:o?[{capability:`autofix`,scriptName:t}]:[{capability:`typecheck`,capabilities:[],scriptName:t}]}function Ci(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Br(e,`fix`),r=Vr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=Si(e[t]||``,t,n,r);return n&&ti(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&ni(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function wi(e){let t=[],n=Br(e,`check`),r=Vr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Ti(e,t){return t===`fix`?Ci(e):wi(e)}var Ei=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Ti(t,`fix`),r=Ti(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=Ti(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Di(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function Oi(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ki=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=Oi(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},Ai=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=Di(t,`@biomejs/biome`),r=Oi(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},ji=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Di(t,`prettier`),r=!!t?.prettier,i=Oi(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},Mi=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Di(t,`eslint`),r=!!t?.eslintConfig,i=Oi(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},Ni=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Di(t,`oxlint`),r=Oi(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},Pi=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Di(t,`oxfmt`),r=Oi(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},Fi=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Ei;vitePlusAdapter=new ki;biomeAdapter=new Ai;prettierAdapter=new ji;eslintAdapter=new Mi;oxlintAdapter=new Ni;oxfmtAdapter=new Pi;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},Ii=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},Li=class{id=`python`;name=`Python`;ruffAdapter=new Ii;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},Ri=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function zi(){let e=new Ri;return e.registerProvider(new Li),e.registerProvider(new Fi),e}const Bi=zi();async function Vi(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function Hi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(Bi,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await Vi(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function Ui(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function Wi(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await Ui(e,r,t)}}async function Gi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(Bi,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function Ki(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await Vi(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await Hi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function qi(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await Wi(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ji(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await Gi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Yi(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await qi(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await Ji(e,r,n);return s&&i.push(s),i}async function Xi(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(Bi,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Ki(e,i);o&&r.push(o);let s=await Yi(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&Xi();export{Hi as executeJsWorkflow,Wi as executePythonWorkflow,Gi as executeRuffAutofix,Xi as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index ac4af2d8..35acdb32 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -15,35 +15,19 @@ export interface ScriptMapping { scriptName: string; } -function isWriteCapableScript(command: string): boolean { +function isExplicitReadonlyFormattingCommand(command: string): boolean { const invocations = parseCommandInvocations(command); - if (invocations.length === 0) return false; return invocations.some((tokens) => { - const [exe] = tokens; - if (exe === "echo" || exe === "printf") return false; - return ( - isPrettierWrite(tokens) || - isOxfmtWrite(tokens) || - isBiomeFormatWrite(tokens) || - isEslintFix(tokens) || - isOxlintFix(tokens) || - isBiomeLintWrite(tokens) || - isBiomeCheckWrite(tokens) || - isVpFmt(tokens) || - isVpLintFix(tokens) || - hasWriteFlag(tokens) - ); + const [exe, sub] = tokens; + const hasCheckFlag = tokens.some((t) => t === "--check" || t === "-c"); + if (!hasCheckFlag) return false; + if (exe === "prettier" || exe === "oxfmt") return true; + if (exe === "biome" && sub === "format") return true; + if (exe === "vp" && sub === "fmt") return true; + return false; }); } -function isExplicitReadonlyFormattingCommand(command: string): boolean { - // Reject scripts that explicitly perform read-only check operations - return ( - /\b(prettier|oxfmt|biome\s+format)\b/.test(command) && - /(?:^|\s)(?:--check|-c)(?:$|\s)/.test(command) - ); -} - function resolveFormatFixCandidate(scripts: Record): string | undefined { if (scripts["format:write"]) return "format:write"; if (scripts["format:fix"]) return "format:fix"; @@ -61,13 +45,13 @@ function resolveFormatScript( return resolveFormatFixCandidate(scripts); } // In check mode, ONLY select explicitly non-writing scripts. - // Reject scripts containing recognized write flags (--write, -w, --fix). + // Reject scripts containing recognized write flags (--write, -w, --fix) directly or via delegation. const candidate = scripts["format:check"] ? "format:check" : scripts["fmt:check"] ? "fmt:check" : undefined; - if (candidate && !isWriteCapableScript(scripts[candidate])) { + if (candidate && !isWriteCapableScript(scripts[candidate], scripts)) { return candidate; } return undefined; @@ -84,11 +68,11 @@ function resolveLintScript( if (scripts["lint:write"]) return "lint:write"; return undefined; } - // In check mode, validate that the selected script does not contain write flags (--fix, --write) - if (scripts["lint:check"] && !isWriteCapableScript(scripts["lint:check"])) { + // In check mode, validate that the selected script does not contain write flags (--fix, --write) directly or via delegation + if (scripts["lint:check"] && !isWriteCapableScript(scripts["lint:check"], scripts)) { return "lint:check"; } - if (scripts.lint && !isWriteCapableScript(scripts.lint)) { + if (scripts.lint && !isWriteCapableScript(scripts.lint, scripts)) { return "lint"; } return undefined; @@ -402,9 +386,11 @@ function isBiomeCheckWrite(tokens: string[]): boolean { ); } -function isVpFmt(tokens: string[]): boolean { +function isVpFmtWrite(tokens: string[]): boolean { const [exe, sub] = tokens; - return exe === "vp" && sub === "fmt"; + if (exe !== "vp" || sub !== "fmt") return false; + // vp fmt is write-capable unless --check or -c is passed + return !tokens.some((t) => t === "--check" || t === "-c"); } function isVpLintFix(tokens: string[]): boolean { @@ -413,6 +399,85 @@ function isVpLintFix(tokens: string[]): boolean { return tokens.some((t) => t === "--fix" || t.startsWith("--fix=")); } +function extractDelegatedTarget(tokens: string[]): string | undefined { + if (tokens.length === 0) return undefined; + const [first, second, third] = tokens; + if ( + (first === "npm" || first === "pnpm" || first === "yarn" || first === "bun") && + second === "run" && + third + ) { + return third; + } + if ( + (first === "pnpm" || first === "bun" || first === "yarn") && + second && + !second.startsWith("-") + ) { + return second; + } + return undefined; +} + +function extractShellWrapperScript(tokens: string[]): string | undefined { + if (tokens.length >= 3 && (tokens[0] === "sh" || tokens[0] === "bash") && tokens[1] === "-c") { + return tokens[2]; + } + return undefined; +} + +function isCommandInvocationWriteCapable( + tokens: string[], + scripts: Record, + visited: Set, +): boolean { + const [exe] = tokens; + if (exe === "echo" || exe === "printf") return false; + + // Check shell wrappers: sh -c "...", bash -c "..." + const wrappedScript = extractShellWrapperScript(tokens); + if (wrappedScript !== undefined) { + return isScriptWriteCapable(wrappedScript, scripts, visited); + } + + // Check package-manager script delegation + const target = extractDelegatedTarget(tokens); + if (target) { + if (visited.has(target)) return false; + visited.add(target); + const targetScript = scripts[target]; + return targetScript ? isScriptWriteCapable(targetScript, scripts, visited) : false; + } + + // Direct tool write commands + return ( + isPrettierWrite(tokens) || + isOxfmtWrite(tokens) || + isBiomeFormatWrite(tokens) || + isEslintFix(tokens) || + isOxlintFix(tokens) || + isBiomeLintWrite(tokens) || + isBiomeCheckWrite(tokens) || + isVpFmtWrite(tokens) || + isVpLintFix(tokens) || + hasWriteFlag(tokens) + ); +} + +function isScriptWriteCapable( + command: string, + scripts: Record = {}, + visited: Set = new Set(), +): boolean { + const invocations = parseCommandInvocations(command); + if (invocations.length === 0) return false; + return invocations.some((tokens) => isCommandInvocationWriteCapable(tokens, scripts, visited)); +} + +function isWriteCapableScript(command: string, scripts: Record = {}): boolean { + return isScriptWriteCapable(command, scripts); +} + function hasFormattingCommand(body: string): boolean { const invocations = parseCommandInvocations(body); return invocations.some( @@ -420,7 +485,7 @@ function hasFormattingCommand(body: string): boolean { isPrettierWrite(tokens) || isOxfmtWrite(tokens) || isBiomeFormatWrite(tokens) || - isVpFmt(tokens), + isVpFmtWrite(tokens), ); } @@ -434,7 +499,14 @@ function hasLintingCommand(body: string): boolean { function hasFullCheckCommand(body: string): boolean { const invocations = parseCommandInvocations(body); - return invocations.some((tokens) => isBiomeCheckWrite(tokens)); + return invocations.some((tokens) => { + if (isBiomeCheckWrite(tokens)) return true; + const [exe, sub] = tokens; + if (exe === "vp" && sub === "check") { + return tokens.some((t) => t === "--fix" || t.startsWith("--fix=")); + } + return false; + }); } function checkCoverage( From b5dd904d747b8d68757437322ffef49ae9fdae65 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sun, 8 Nov 2026 07:45:59 +0000 Subject: [PATCH 19/25] fix(autofix): harden check-mode safety and formatter verification - Implement fail-safe tri-state script classification ('read-only', 'write-capable', 'unknown') in check mode. - Reject unverified, unknown, and write-capable scripts in check mode across all check conventions. - Positively verify write-capable formatting commands before selecting format candidates and claiming formatting capabilities. - Prevent unverified scripts from suppressing dedicated formatter adapters. - Revert autofix README to PR base branch state without modifications. - Add regression tests covering check-mode safety, delegation cycles, and formatter verification. --- autofix/README.md | 31 +- dist/autofix.mjs | 14 +- .../adapters/javascript/script-adapter.ts | 324 ++++++++++++++---- tests/autofix-architecture.test.ts | 193 ++++++++++- tests/autofix.test.ts | 15 +- 5 files changed, 488 insertions(+), 89 deletions(-) diff --git a/autofix/README.md b/autofix/README.md index 0e4471f6..da18b924 100644 --- a/autofix/README.md +++ b/autofix/README.md @@ -1,16 +1,20 @@ # area44/autofix -Automatically format and fix code across JavaScript, TypeScript, and Python projects. +Automatically format and fix code. -## Overview +## Action Purpose -The `autofix` action automatically formats and applies safe code fixes to your project: +The `autofix` composite action automatically formats and fixes code. -- **Python:** Uses Ruff as the default toolchain to lint and format code whenever Python source files (`.py`/`.pyi`) are present. -- **JavaScript & TypeScript:** Automatically prioritizes explicit package scripts (e.g., `format:write`, `lint:fix`, `fix`) while detecting configured tools (Prettier, ESLint, Biome, Oxlint, Oxfmt, Vite+). -- **Check-Mode Safety:** In check mode, only non-writing verification commands are scheduled; write-capable scripts (such as `format`, `fmt`, or scripts with `--fix`/`--write`) are never executed. -- **Conflict Prevention:** Detects overlapping tools and deduplicates execution so files are not formatted or linted multiple times redundantly. -- **autofix.ci Support:** Automatically integrates with `autofix-ci/action` when running in autofix.ci contexts. +## Features and Supported Behavior + +- **Automatic Environment Detection:** Automatically detects Node.js, Bun, and Python environments and package managers (`npm`, `pnpm`, `bun`, `uv`, `pip`). +- **Separation of Setup and Installation:** Official setup actions (`actions/setup-node`, `pnpm/setup`, `oven-sh/setup-bun`, `actions/setup-python`, `astral-sh/setup-uv`, `astral-sh/ruff-action`) provision runtimes, CLI tools, and tool caches. Dependency installations (`npm install`, `pnpm install --no-frozen-lockfile`, `bun install`, `uv sync`, `pip install`) and autofix executions are performed reliably in TypeScript. +- **Dependency Synchronization & Early Skip:** Inspects project scripts before installing dependencies. If no matching autofix script exists in `package.json`, JavaScript dependency installation is cleanly skipped without modifying lockfiles or running package manager commands. +- **JavaScript/TypeScript Project Scripts:** Selects and executes repository-configured scripts (`fix`, `format`, `fmt`, `lint`, `check`) from `package.json`. +- **Python Formatting and Linting:** Provisions Ruff and executes `ruff check --fix .` and `ruff format .` sequentially whenever Python source code (`.py`/`.pyi`) is detected. +- **Independent Execution:** JavaScript and Python workflows run independently within the same action step, aggregating diagnostics and failures. +- **autofix.ci Integration:** Automatically invokes `autofix-ci/action` when running inside the `autofix.ci` workflow context. ## Usage Example @@ -36,7 +40,7 @@ jobs: uses: area44/workflows/autofix@main ``` -## Public Action Contract +## Public API Contract ### Inputs @@ -51,3 +55,12 @@ This action accepts no inputs. | `javascript-package-manager` | The package manager used (`npm`, `pnpm`, or `bun`) | | `python-detected` | Whether Python source code (`.py`/`.pyi`) was detected | | `python-package-manager` | The Python package manager detected (`uv` or `pip`) | + +## Related Documentation + +- **[Repository README](../README.md)**: Project overview and action API summary. +- **[Environment Resolution Algorithm Guide](../docs/environment-resolution.md)**: Design principles, decision flow, conflict handling, and setup planning details. +- **[Error Handling Architecture](../docs/errors.md)**: Native JavaScript error boundaries, top-level error handling, and error logging. +- **[Security Boundaries](../docs/security.md)**: Input sanitization, argument tokenization, and command execution boundaries. +- **[Maintenance & Repository Health](../docs/maintenance.md)**: Maintenance workflows, build scripts, and quality gates. +- **[Integration Testing Guide](../docs/integration-testing.md)**: Module integration testing, fixture generators, and CI test harnesses. diff --git a/dist/autofix.mjs b/dist/autofix.mjs index d8290fe6..9ccb3bac 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -304,10 +304,10 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`)&&t.has(`assist`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)if(t.add(e.capability),e.capabilities)for(let n of e.capabilities)t.add(n);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` -`)}function Rr(e){return $r(e).some(e=>{let[t,n]=e;return e.some(e=>e===`--check`||e===`-c`)?t===`prettier`||t===`oxfmt`||t===`biome`&&n===`format`||t===`vp`&&n===`fmt`:!1})}function zr(e){if(e[`format:write`])return`format:write`;if(e[`format:fix`])return`format:fix`;if(e.format&&!Rr(e.format))return`format`;if(e.fmt&&!Rr(e.fmt))return`fmt`}function Br(e,t){if(t===`fix`)return zr(e);let n=e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:void 0;if(n&&!_i(e[n],e))return n}function Vr(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`]&&!_i(e[`lint:check`],e))return`lint:check`;if(e.lint&&!_i(e.lint,e))return`lint`}function Hr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` -`?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Ur(e,t){let n=t;for(;nt?n-1:t}function Wr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Gr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Kr(e,t,n){return t.isEscaped=!1,n+e}function qr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function Jr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a0&&n.push(t)}return n}function ei(e,t){let n=$r(e);for(let e of n)if(Qr(e,t))return!0;return!1}function ti(e,t,n){return!n||n===t?!1:!ei(e[t]||``,n)}function ni(e,t,n){return!n||n===t?!1:!ei(e[t]||``,n)}function ri(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ii(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function ai(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function oi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function si(e){let[t]=e;return t===`eslint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function ci(e){let[t]=e;return t===`oxlint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function li(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ui(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function di(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:!e.some(e=>e===`--check`||e===`-c`)}function fi(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function pi(e){if(e.length===0)return;let[t,n,r]=e;if((t===`npm`||t===`pnpm`||t===`yarn`||t===`bun`)&&n===`run`&&r)return r;if((t===`pnpm`||t===`bun`||t===`yarn`)&&n&&!n.startsWith(`-`))return n}function mi(e){if(e.length>=3&&(e[0]===`sh`||e[0]===`bash`)&&e[1]===`-c`)return e[2]}function hi(e,t,n){let[r]=e;if(r===`echo`||r===`printf`)return!1;let i=mi(e);if(i!==void 0)return gi(i,t,n);let a=pi(e);if(a){if(n.has(a))return!1;n.add(a);let e=t[a];return e?gi(e,t,n):!1}return ii(e)||ai(e)||oi(e)||si(e)||ci(e)||li(e)||ui(e)||di(e)||fi(e)||ri(e)}function gi(e,t={},n=/* @__PURE__ */ new Set){let r=$r(e);return r.length!==0&&r.some(e=>hi(e,t,n))}function _i(e,t={}){return gi(e,t)}function vi(e){return $r(e).some(e=>ii(e)||ai(e)||oi(e)||di(e))}function yi(e){return $r(e).some(e=>si(e)||ci(e)||li(e)||fi(e))}function bi(e){return $r(e).some(e=>{if(ui(e))return!0;let[t,n]=e;return t===`vp`&&n===`check`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))})}function xi(e,t,n){return t&&ei(e,t)?!0:n(e)}function Si(e,t,n,r){let i=xi(e,n,vi),a=xi(e,r,yi),o=bi(e);return i&&a?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:t}]:i&&!o?[{capability:`format`,scriptName:t}]:a&&!o?[{capability:`lint`,scriptName:t}]:o?[{capability:`autofix`,scriptName:t}]:[{capability:`typecheck`,capabilities:[],scriptName:t}]}function Ci(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Br(e,`fix`),r=Vr(e,`fix`);if(!t){let e=[];return n&&e.push({capability:`format`,scriptName:n}),r&&e.push({capability:`lint`,scriptName:r}),e}let i=Si(e[t]||``,t,n,r);return n&&ti(e,t,n)&&i.push({capability:`format`,scriptName:n}),r&&ni(e,t,r)&&i.push({capability:`lint`,scriptName:r}),i}function wi(e){let t=[],n=Br(e,`check`),r=Vr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Ti(e,t){return t===`fix`?Ci(e):wi(e)}var Ei=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Ti(t,`fix`),r=Ti(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=Ti(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Di(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function Oi(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ki=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=Oi(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},Ai=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=Di(t,`@biomejs/biome`),r=Oi(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},ji=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Di(t,`prettier`),r=!!t?.prettier,i=Oi(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},Mi=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Di(t,`eslint`),r=!!t?.eslintConfig,i=Oi(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},Ni=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Di(t,`oxlint`),r=Oi(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},Pi=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Di(t,`oxfmt`),r=Oi(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},Fi=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Ei;vitePlusAdapter=new ki;biomeAdapter=new Ai;prettierAdapter=new ji;eslintAdapter=new Mi;oxlintAdapter=new Ni;oxfmtAdapter=new Pi;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},Ii=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},Li=class{id=`python`;name=`Python`;ruffAdapter=new Ii;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},Ri=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function zi(){let e=new Ri;return e.registerProvider(new Li),e.registerProvider(new Fi),e}const Bi=zi();async function Vi(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function Hi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(Bi,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await Vi(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function Ui(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function Wi(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await Ui(e,r,t)}}async function Gi(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(Bi,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function Ki(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await Vi(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}return null}return await Hi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function qi(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await Wi(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ji(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await Gi(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Yi(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await qi(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await Ji(e,r,n);return s&&i.push(s),i}async function Xi(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(Bi,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Ki(e,i);o&&r.push(o);let s=await Yi(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&Xi();export{Hi as executeJsWorkflow,Wi as executePythonWorkflow,Gi as executeRuffAutofix,Xi as run,cn as sanitizePackageManager}; \ No newline at end of file +`)}function Rr(e){for(let t of[`format:write`,`format:fix`,`format`,`fmt`])if(e[t]&&Di(e[t],e))return t}function zr(e,t){if(t===`fix`)return Rr(e);let n=e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:void 0;if(n&&Ei(e[n],e)===`read-only`)return n}function Br(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`]&&Ei(e[`lint:check`],e)===`read-only`)return`lint:check`;if(e.lint&&Ei(e.lint,e)===`read-only`)return`lint`}function Vr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` +`?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Hr(e,t){let n=t;for(;nt?n-1:t}function Ur(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Wr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Gr(e,t,n){return t.isEscaped=!1,n+e}function Kr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function qr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a0&&n.push(t)}return n}function $r(e,t){let n=Qr(e);for(let e of n)if(Zr(e,t))return!0;return!1}function ei(e,t,n){return!n||n===t?!1:!$r(e[t]||``,n)}function ti(e,t,n){return!n||n===t?!1:!$r(e[t]||``,n)}function ni(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ri(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function ii(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function ai(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function oi(e){let[t]=e;return t===`eslint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function si(e){let[t]=e;return t===`oxlint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function ci(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function li(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ui(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:!e.some(e=>e===`--check`||e===`-c`)}function di(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function fi(e){let[t]=e;if(t!==`prettier`)return!1;let n=e.some(e=>e===`--check`||e===`-c`||e===`--list-different`||e===`-l`),r=e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`));return n&&!r}function pi(e){let[t]=e;if(t!==`oxfmt`)return!1;let n=e.some(e=>e===`--check`||e===`-c`),r=e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`));return n&&!r}function mi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function hi(e){let[t]=e;return t===`eslint`&&!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function gi(e){let[t]=e;return t===`oxlint`&&!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function _i(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function vi(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function yi(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:e.some(e=>e===`--check`||e===`-c`)}function bi(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function xi(e){let[t,n]=e;return t!==`vp`||n!==`check`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Si(e){if(e.length===0)return;let[t,n,r]=e;if((t===`npm`||t===`pnpm`||t===`yarn`||t===`bun`)&&n===`run`&&r)return r;if((t===`pnpm`||t===`bun`||t===`yarn`)&&n&&!n.startsWith(`-`))return n}function Ci(e){if(e.length>=3&&(e[0]===`sh`||e[0]===`bash`)&&e[1]===`-c`)return e[2]}function wi(e,t,n){if(e.length===0)return`unknown`;if(ni(e))return`write-capable`;let r=Ci(e);if(r!==void 0)return Ti(r,t,n);let i=Si(e);if(i){if(n.has(i))return`unknown`;n.add(i);let e=t[i];return e?Ti(e,t,n):`unknown`}return ri(e)||ii(e)||ai(e)||oi(e)||si(e)||ci(e)||li(e)||ui(e)||di(e)?`write-capable`:fi(e)||pi(e)||mi(e)||hi(e)||gi(e)||_i(e)||vi(e)||yi(e)||bi(e)||xi(e)?`read-only`:`unknown`}function Ti(e,t,n){let r=Qr(e);if(r.length===0)return`unknown`;let i=!1;for(let e of r){let r=wi(e,t,n);if(r===`write-capable`)return`write-capable`;if(r===`unknown`)return`unknown`;r===`read-only`&&(i=!0)}return i?`read-only`:`unknown`}function Ei(e,t={}){return Ti(e,t,/* @__PURE__ */ new Set)}function Di(e,t={},n=/* @__PURE__ */ new Set){return Qr(e).some(e=>{let r=Si(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Di(e,t,n):!1}let i=Ci(e);return i===void 0?ri(e)||ii(e)||ai(e)||ui(e):Di(i,t,n)})}function Oi(e,t={},n=/* @__PURE__ */ new Set){return Qr(e).some(e=>{let r=Si(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Oi(e,t,n):!1}let i=Ci(e);return i===void 0?oi(e)||si(e)||ci(e)||di(e):Oi(i,t,n)})}function ki(e,t={},n=/* @__PURE__ */ new Set){return Qr(e).some(e=>{let r=Si(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?ki(e,t,n):!1}let i=Ci(e);if(i!==void 0)return ki(i,t,n);if(li(e))return!0;let[a,o]=e;return a===`vp`&&o===`check`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))})}function Ai(e,t,n){return t&&$r(e,t)?!0:n(e)}function ji(e,t,n,r,i){let a=Ai(t,r,t=>Di(t,e)),o=Ai(t,i,t=>Oi(t,e)),s=ki(t,e);return a&&o?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:n}]:a&&!s?[{capability:`format`,scriptName:n}]:o&&!s?[{capability:`lint`,scriptName:n}]:s?[{capability:`autofix`,scriptName:n}]:[{capability:`typecheck`,capabilities:[],scriptName:n}]}function Mi(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=zr(e,`fix`),r=Br(e,`fix`);if(!t){let t=[];return n&&(Di(e[n],e)?t.push({capability:`format`,scriptName:n}):t.push({capability:`typecheck`,capabilities:[],scriptName:n})),r&&(Oi(e[r],e)?t.push({capability:`lint`,scriptName:r}):t.push({capability:`typecheck`,capabilities:[],scriptName:r})),t}let i=ji(e,e[t]||``,t,n,r);if(n&&ei(e,t,n)){let t=Di(e[n],e);i.push({capability:t?`format`:`typecheck`,capabilities:t?[`format`]:[],scriptName:n})}if(r&&ti(e,t,r)){let t=Oi(e[r],e);i.push({capability:t?`lint`:`typecheck`,capabilities:t?[`lint`]:[],scriptName:r})}return i}function Ni(e){let t=[],n=zr(e,`check`),r=Br(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Pi(e,t){return t===`fix`?Mi(e):Ni(e)}var Fi=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Pi(t,`fix`),r=Pi(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=Pi(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Ii(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function Li(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var Ri=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=Li(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},zi=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=Ii(t,`@biomejs/biome`),r=Li(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},Bi=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Ii(t,`prettier`),r=!!t?.prettier,i=Li(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},Vi=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Ii(t,`eslint`),r=!!t?.eslintConfig,i=Li(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},Hi=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Ii(t,`oxlint`),r=Li(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},Ui=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Ii(t,`oxfmt`),r=Li(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},Wi=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Fi;vitePlusAdapter=new Ri;biomeAdapter=new zi;prettierAdapter=new Bi;eslintAdapter=new Vi;oxlintAdapter=new Hi;oxfmtAdapter=new Ui;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},Gi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},Ki=class{id=`python`;name=`Python`;ruffAdapter=new Gi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},qi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function Ji(){let e=new qi;return e.registerProvider(new Ki),e.registerProvider(new Wi),e}const Yi=Ji();async function Xi(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function Zi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(Yi,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await Xi(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function Qi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function $i(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await Qi(e,r,t)}}async function ea(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(Yi,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function ta(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await Xi(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await Zi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function na(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await $i(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ra(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await ea(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ia(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await na(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await ra(e,r,n);return s&&i.push(s),i}async function aa(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(Yi,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await ta(e,i);o&&r.push(o);let s=await ia(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&aa();export{Zi as executeJsWorkflow,$i as executePythonWorkflow,ea as executeRuffAutofix,aa as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index 35acdb32..ca51f43c 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -15,25 +15,15 @@ export interface ScriptMapping { scriptName: string; } -function isExplicitReadonlyFormattingCommand(command: string): boolean { - const invocations = parseCommandInvocations(command); - return invocations.some((tokens) => { - const [exe, sub] = tokens; - const hasCheckFlag = tokens.some((t) => t === "--check" || t === "-c"); - if (!hasCheckFlag) return false; - if (exe === "prettier" || exe === "oxfmt") return true; - if (exe === "biome" && sub === "format") return true; - if (exe === "vp" && sub === "fmt") return true; - return false; - }); -} +export type ScriptClassification = "read-only" | "write-capable" | "unknown"; function resolveFormatFixCandidate(scripts: Record): string | undefined { - if (scripts["format:write"]) return "format:write"; - if (scripts["format:fix"]) return "format:fix"; - // For generic format / fmt, select unless explicitly read-only (e.g. prettier --check) - if (scripts.format && !isExplicitReadonlyFormattingCommand(scripts.format)) return "format"; - if (scripts.fmt && !isExplicitReadonlyFormattingCommand(scripts.fmt)) return "fmt"; + const candidates = ["format:write", "format:fix", "format", "fmt"]; + for (const name of candidates) { + if (scripts[name] && hasVerifiedFormattingCommand(scripts[name], scripts)) { + return name; + } + } return undefined; } @@ -44,14 +34,15 @@ function resolveFormatScript( if (mode === "fix") { return resolveFormatFixCandidate(scripts); } - // In check mode, ONLY select explicitly non-writing scripts. - // Reject scripts containing recognized write flags (--write, -w, --fix) directly or via delegation. + // In check mode, positively require scripts to be "read-only". + // Reject unknown commands, unsupported shell wrappers, unresolved package-manager delegations, + // parser failures, and any script with write flags. const candidate = scripts["format:check"] ? "format:check" : scripts["fmt:check"] ? "fmt:check" : undefined; - if (candidate && !isWriteCapableScript(scripts[candidate], scripts)) { + if (candidate && classifyScript(scripts[candidate], scripts) === "read-only") { return candidate; } return undefined; @@ -68,11 +59,12 @@ function resolveLintScript( if (scripts["lint:write"]) return "lint:write"; return undefined; } - // In check mode, validate that the selected script does not contain write flags (--fix, --write) directly or via delegation - if (scripts["lint:check"] && !isWriteCapableScript(scripts["lint:check"], scripts)) { + // In check mode, positively require scripts to be "read-only". + // Reject unknown commands, unsupported shell wrappers, unresolved delegations, or write flags. + if (scripts["lint:check"] && classifyScript(scripts["lint:check"], scripts) === "read-only") { return "lint:check"; } - if (scripts.lint && !isWriteCapableScript(scripts.lint, scripts)) { + if (scripts.lint && classifyScript(scripts.lint, scripts) === "read-only") { return "lint"; } return undefined; @@ -399,6 +391,87 @@ function isVpLintFix(tokens: string[]): boolean { return tokens.some((t) => t === "--fix" || t.startsWith("--fix=")); } +function isPrettierCheck(tokens: string[]): boolean { + const [exe] = tokens; + if (exe !== "prettier") return false; + const hasCheck = tokens.some( + (t) => t === "--check" || t === "-c" || t === "--list-different" || t === "-l", + ); + const hasWrite = tokens.some((t) => t === "-w" || t === "--write" || t.startsWith("--write=")); + return hasCheck && !hasWrite; +} + +function isOxfmtCheck(tokens: string[]): boolean { + const [exe] = tokens; + if (exe !== "oxfmt") return false; + const hasCheck = tokens.some((t) => t === "--check" || t === "-c"); + const hasWrite = tokens.some((t) => t === "-w" || t === "--write" || t.startsWith("--write=")); + return hasCheck && !hasWrite; +} + +function isBiomeFormatCheck(tokens: string[]): boolean { + const [exe, sub] = tokens; + if (exe !== "biome" || sub !== "format") return false; + const hasWrite = tokens.some((t) => t === "-w" || t === "--write" || t.startsWith("--write=")); + return !hasWrite; +} + +function isEslintCheck(tokens: string[]): boolean { + const [exe] = tokens; + if (exe !== "eslint") return false; + return !tokens.some((t) => t === "--fix" || t.startsWith("--fix=")); +} + +function isOxlintCheck(tokens: string[]): boolean { + const [exe] = tokens; + if (exe !== "oxlint") return false; + return !tokens.some((t) => t === "--fix" || t.startsWith("--fix=")); +} + +function isBiomeLintCheck(tokens: string[]): boolean { + const [exe, sub] = tokens; + if (exe !== "biome" || sub !== "lint") return false; + return !tokens.some( + (t) => + t === "-w" || + t === "--write" || + t.startsWith("--write=") || + t === "--fix" || + t.startsWith("--fix="), + ); +} + +function isBiomeCheckCheck(tokens: string[]): boolean { + const [exe, sub] = tokens; + if (exe !== "biome" || sub !== "check") return false; + return !tokens.some( + (t) => + t === "-w" || + t === "--write" || + t.startsWith("--write=") || + t === "--fix" || + t.startsWith("--fix="), + ); +} + +function isVpFmtCheck(tokens: string[]): boolean { + const [exe, sub] = tokens; + if (exe !== "vp" || sub !== "fmt") return false; + return tokens.some((t) => t === "--check" || t === "-c"); +} + +function isVpLintCheck(tokens: string[]): boolean { + const [exe, sub] = tokens; + if (exe !== "vp" || sub !== "lint") return false; + return !tokens.some((t) => t === "--fix" || t.startsWith("--fix=")); +} + +function isVpCheckCheck(tokens: string[]): boolean { + const [exe, sub] = tokens; + if (exe !== "vp" || sub !== "check") return false; + return !tokens.some((t) => t === "--fix" || t.startsWith("--fix=")); +} + function extractDelegatedTarget(tokens: string[]): string | undefined { if (tokens.length === 0) return undefined; const [first, second, third] = tokens; @@ -426,31 +499,36 @@ function extractShellWrapperScript(tokens: string[]): string | undefined { return undefined; } -function isCommandInvocationWriteCapable( +function classifyInvocation( tokens: string[], scripts: Record, visited: Set, -): boolean { - const [exe] = tokens; - if (exe === "echo" || exe === "printf") return false; +): ScriptClassification { + if (tokens.length === 0) return "unknown"; + + // Unconditionally reject write flags if present anywhere on unrecognized tools + if (hasWriteFlag(tokens)) { + return "write-capable"; + } - // Check shell wrappers: sh -c "...", bash -c "..." + // Shell wrappers: sh -c "...", bash -c "..." const wrappedScript = extractShellWrapperScript(tokens); if (wrappedScript !== undefined) { - return isScriptWriteCapable(wrappedScript, scripts, visited); + return classifyScriptInternal(wrappedScript, scripts, visited); } - // Check package-manager script delegation + // Package-manager script delegation const target = extractDelegatedTarget(tokens); if (target) { - if (visited.has(target)) return false; + if (visited.has(target)) return "unknown"; // cycle detected visited.add(target); const targetScript = scripts[target]; - return targetScript ? isScriptWriteCapable(targetScript, scripts, visited) : false; + if (!targetScript) return "unknown"; // unresolvable target + return classifyScriptInternal(targetScript, scripts, visited); } - // Direct tool write commands - return ( + // Check known write-capable commands + if ( isPrettierWrite(tokens) || isOxfmtWrite(tokens) || isBiomeFormatWrite(tokens) || @@ -459,47 +537,132 @@ function isCommandInvocationWriteCapable( isBiomeLintWrite(tokens) || isBiomeCheckWrite(tokens) || isVpFmtWrite(tokens) || - isVpLintFix(tokens) || - hasWriteFlag(tokens) - ); + isVpLintFix(tokens) + ) { + return "write-capable"; + } + + // Check known read-only commands + if ( + isPrettierCheck(tokens) || + isOxfmtCheck(tokens) || + isBiomeFormatCheck(tokens) || + isEslintCheck(tokens) || + isOxlintCheck(tokens) || + isBiomeLintCheck(tokens) || + isBiomeCheckCheck(tokens) || + isVpFmtCheck(tokens) || + isVpLintCheck(tokens) || + isVpCheckCheck(tokens) + ) { + return "read-only"; + } + + return "unknown"; } -function isScriptWriteCapable( +function classifyScriptInternal( command: string, - scripts: Record = {}, - visited: Set = new Set(), -): boolean { + scripts: Record, + visited: Set, +): ScriptClassification { const invocations = parseCommandInvocations(command); - if (invocations.length === 0) return false; - return invocations.some((tokens) => isCommandInvocationWriteCapable(tokens, scripts, visited)); + if (invocations.length === 0) return "unknown"; + + let hasReadOnly = false; + + for (const tokens of invocations) { + const classification = classifyInvocation(tokens, scripts, visited); + if (classification === "write-capable") { + return "write-capable"; + } + if (classification === "unknown") { + return "unknown"; + } + if (classification === "read-only") { + hasReadOnly = true; + } + } + + return hasReadOnly ? "read-only" : "unknown"; } -function isWriteCapableScript(command: string, scripts: Record = {}): boolean { - return isScriptWriteCapable(command, scripts); +export function classifyScript( + command: string, + scripts: Record = {}, +): ScriptClassification { + return classifyScriptInternal(command, scripts, new Set()); } -function hasFormattingCommand(body: string): boolean { - const invocations = parseCommandInvocations(body); - return invocations.some( - (tokens) => +function hasVerifiedFormattingCommand( + command: string, + scripts: Record = {}, + visited: Set = new Set(), +): boolean { + const invocations = parseCommandInvocations(command); + return invocations.some((tokens) => { + const target = extractDelegatedTarget(tokens); + if (target) { + if (visited.has(target)) return false; + visited.add(target); + const targetScript = scripts[target]; + return targetScript ? hasVerifiedFormattingCommand(targetScript, scripts, visited) : false; + } + const wrappedScript = extractShellWrapperScript(tokens); + if (wrappedScript !== undefined) { + return hasVerifiedFormattingCommand(wrappedScript, scripts, visited); + } + return ( isPrettierWrite(tokens) || isOxfmtWrite(tokens) || isBiomeFormatWrite(tokens) || - isVpFmtWrite(tokens), - ); + isVpFmtWrite(tokens) + ); + }); } -function hasLintingCommand(body: string): boolean { - const invocations = parseCommandInvocations(body); - return invocations.some( - (tokens) => - isEslintFix(tokens) || isOxlintFix(tokens) || isBiomeLintWrite(tokens) || isVpLintFix(tokens), - ); +function hasVerifiedLintingCommand( + command: string, + scripts: Record = {}, + visited: Set = new Set(), +): boolean { + const invocations = parseCommandInvocations(command); + return invocations.some((tokens) => { + const target = extractDelegatedTarget(tokens); + if (target) { + if (visited.has(target)) return false; + visited.add(target); + const targetScript = scripts[target]; + return targetScript ? hasVerifiedLintingCommand(targetScript, scripts, visited) : false; + } + const wrappedScript = extractShellWrapperScript(tokens); + if (wrappedScript !== undefined) { + return hasVerifiedLintingCommand(wrappedScript, scripts, visited); + } + return ( + isEslintFix(tokens) || isOxlintFix(tokens) || isBiomeLintWrite(tokens) || isVpLintFix(tokens) + ); + }); } -function hasFullCheckCommand(body: string): boolean { - const invocations = parseCommandInvocations(body); +function hasVerifiedFullCheckCommand( + command: string, + scripts: Record = {}, + visited: Set = new Set(), +): boolean { + const invocations = parseCommandInvocations(command); return invocations.some((tokens) => { + const target = extractDelegatedTarget(tokens); + if (target) { + if (visited.has(target)) return false; + visited.add(target); + const targetScript = scripts[target]; + return targetScript ? hasVerifiedFullCheckCommand(targetScript, scripts, visited) : false; + } + const wrappedScript = extractShellWrapperScript(tokens); + if (wrappedScript !== undefined) { + return hasVerifiedFullCheckCommand(wrappedScript, scripts, visited); + } if (isBiomeCheckWrite(tokens)) return true; const [exe, sub] = tokens; if (exe === "vp" && sub === "check") { @@ -521,14 +684,17 @@ function checkCoverage( } function createFixScriptMappings( + scripts: Record, body: string, fixScript: string, formatScript: string | undefined, lintScript: string | undefined, ): ScriptMapping[] { - const isFormat = checkCoverage(body, formatScript, hasFormattingCommand); - const isLint = checkCoverage(body, lintScript, hasLintingCommand); - const isFull = hasFullCheckCommand(body); + const isFormat = checkCoverage(body, formatScript, (b) => + hasVerifiedFormattingCommand(b, scripts), + ); + const isLint = checkCoverage(body, lintScript, (b) => hasVerifiedLintingCommand(b, scripts)); + const isFull = hasVerifiedFullCheckCommand(body, scripts); if (isFormat && isLint) { return [{ capability: "format", capabilities: ["format", "lint"], scriptName: fixScript }]; @@ -552,19 +718,43 @@ function resolveFixScriptTasks(scripts: Record): ScriptMapping[] if (!fixScript) { const fallback: ScriptMapping[] = []; - if (formatScript) fallback.push({ capability: "format", scriptName: formatScript }); - if (lintScript) fallback.push({ capability: "lint", scriptName: lintScript }); + if (formatScript) { + const isVerified = hasVerifiedFormattingCommand(scripts[formatScript], scripts); + if (isVerified) { + fallback.push({ capability: "format", scriptName: formatScript }); + } else { + fallback.push({ capability: "typecheck", capabilities: [], scriptName: formatScript }); + } + } + if (lintScript) { + const isVerified = hasVerifiedLintingCommand(scripts[lintScript], scripts); + if (isVerified) { + fallback.push({ capability: "lint", scriptName: lintScript }); + } else { + fallback.push({ capability: "typecheck", capabilities: [], scriptName: lintScript }); + } + } return fallback; } const fixBody = scripts[fixScript] || ""; - const mappings = createFixScriptMappings(fixBody, fixScript, formatScript, lintScript); + const mappings = createFixScriptMappings(scripts, fixBody, fixScript, formatScript, lintScript); if (formatScript && shouldIncludeFormatWithFix(scripts, fixScript, formatScript)) { - mappings.push({ capability: "format", scriptName: formatScript }); + const isVerified = hasVerifiedFormattingCommand(scripts[formatScript], scripts); + mappings.push({ + capability: isVerified ? "format" : "typecheck", + capabilities: isVerified ? ["format"] : [], + scriptName: formatScript, + }); } if (lintScript && shouldIncludeLintWithFix(scripts, fixScript, lintScript)) { - mappings.push({ capability: "lint", scriptName: lintScript }); + const isVerified = hasVerifiedLintingCommand(scripts[lintScript], scripts); + mappings.push({ + capability: isVerified ? "lint" : "typecheck", + capabilities: isVerified ? ["lint"] : [], + scriptName: lintScript, + }); } return mappings; diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index 6d43308a..1c07742c 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -14,7 +14,10 @@ import type { ToolAdapter, } from "../src/autofix/types.js"; -import { resolveScriptTasks } from "../src/autofix/adapters/javascript/script-adapter.js"; +import { + classifyScript, + resolveScriptTasks, +} from "../src/autofix/adapters/javascript/script-adapter.js"; import { ExecutionEngine } from "../src/autofix/engine.js"; import { executeJsWorkflow, run } from "../src/autofix/index.js"; import { planExecution } from "../src/autofix/planner.js"; @@ -1272,6 +1275,194 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { }); }); + describe("Check-Mode Safety & Formatter Detection Regressions", () => { + it("rejects unknown commands and unsupported shell wrappers in check mode", () => { + expect(classifyScript("node scripts/format.js")).toBe("unknown"); + expect(classifyScript("make lint")).toBe("unknown"); + expect(classifyScript("python -m lint")).toBe("unknown"); + expect(classifyScript("zsh -c 'prettier --check .'")).toBe("unknown"); + + // In check mode, resolveScriptTasks rejects unknown commands for all check conventions + const checkTasks = resolveScriptTasks( + { + "format:check": "node scripts/format.js", + "fmt:check": "make fmt", + "lint:check": "python -m lint", + lint: "make lint", + }, + "check", + ); + expect(checkTasks).toEqual([]); + }); + + it("handles unresolved package-manager delegations, nested delegations, and delegation cycles", () => { + // Unresolved delegation + expect( + classifyScript("npm run missing-script", { + "other-script": "prettier --check .", + }), + ).toBe("unknown"); + + // Nested delegation to verified read-only command + expect( + classifyScript("npm run check:fmt", { + "check:fmt": "pnpm run verify:prettier", + "verify:prettier": "prettier --check .", + }), + ).toBe("read-only"); + + // Nested delegation to write-capable command + expect( + classifyScript("npm run check:fmt", { + "check:fmt": "pnpm run run:write", + "run:write": "prettier --write .", + }), + ).toBe("write-capable"); + + // Delegation cycle fails closed as unknown + expect( + classifyScript("npm run loopA", { + loopA: "npm run loopB", + loopB: "npm run loopA", + }), + ).toBe("unknown"); + }); + + it("supports positively identified read-only commands and rejects known write-capable commands in check mode", () => { + const readOnlyScripts = { + "format:check": "prettier --check .", + "fmt:check": "vp fmt --check", + "lint:check": "oxlint", + lint: "eslint .", + }; + const checkTasks = resolveScriptTasks(readOnlyScripts, "check"); + expect(checkTasks).toEqual([ + { capability: "format", scriptName: "format:check" }, + { capability: "lint", scriptName: "lint:check" }, + ]); + + const writeCapableScripts = { + "format:check": "prettier --write .", + "fmt:check": "oxfmt --write .", + "lint:check": "eslint --fix .", + lint: "oxlint --fix", + }; + const writeTasks = resolveScriptTasks(writeCapableScripts, "check"); + expect(writeTasks).toEqual([]); + }); + + it("verifies formatter detection rejects echo, read-only commands, and unknown behavior in fix mode", () => { + // "format: 'echo formatting is disabled'" does not qualify as a formatter + expect( + resolveScriptTasks( + { + format: "echo formatting is disabled", + }, + "fix", + ), + ).toEqual([]); + + // Generic format delegating to a read-only script does not qualify + expect( + resolveScriptTasks( + { + format: "npm run check-format", + "check-format": "prettier --check .", + }, + "fix", + ), + ).toEqual([]); + + // Generic format with unknown behavior does not qualify + expect( + resolveScriptTasks( + { + format: "node scripts/run-format.js", + }, + "fix", + ), + ).toEqual([]); + + // Generic scripts with verified write-capable commands are selected + expect( + resolveScriptTasks( + { + format: "prettier --write .", + }, + "fix", + ), + ).toEqual([{ capability: "format", scriptName: "format" }]); + + expect( + resolveScriptTasks( + { + fmt: "vp fmt", + }, + "fix", + ), + ).toEqual([{ capability: "format", scriptName: "fmt" }]); + }); + + it("ensures invalid generic format scripts do not suppress dedicated formatter adapters", async () => { + // A project with prettier configured and format: "echo formatting is disabled" + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + format: "echo formatting is disabled", + }, + devDependencies: { prettier: "^3.0.0" }, + }), + ); + fs.writeFileSync(path.join(tempDir, ".prettierrc"), "{}"); + + const registry = createDefaultRegistry(); + const plan = await planExecution(registry, { cwd: tempDir }, "fix"); + + // Prettier formatter adapter must NOT be suppressed by the invalid echo format script! + expect(plan.selectedTools.map((t) => t.id)).toContain("prettier"); + expect(plan.tasks.map((t) => t.id)).toEqual(["prettier-format"]); + }); + + it("ensures invalid format:write and format:fix bodies do not claim formatting capability", async () => { + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + "format:write": "echo not a formatter", + "format:fix": "prettier --check .", + }, + devDependencies: { prettier: "^3.0.0" }, + }), + ); + fs.writeFileSync(path.join(tempDir, ".prettierrc"), "{}"); + + const registry = createDefaultRegistry(); + const plan = await planExecution(registry, { cwd: tempDir }, "fix"); + + // Neither invalid script is planned as a format task; Prettier runs cleanly + expect(plan.selectedTools.map((t) => t.id)).toContain("prettier"); + expect(plan.tasks.map((t) => t.id)).toEqual(["prettier-format"]); + }); + + it("preserves Vite+ behavior including vp fmt --check and vp fmt", () => { + // vp fmt --check is read-only + expect(classifyScript("vp fmt --check")).toBe("read-only"); + expect(classifyScript("vp fmt -c")).toBe("read-only"); + + // vp fmt is write-capable + expect(classifyScript("vp fmt")).toBe("write-capable"); + + // vp fmt --check in check mode is selected + const checkTasks = resolveScriptTasks({ "fmt:check": "vp fmt --check" }, "check"); + expect(checkTasks).toEqual([{ capability: "format", scriptName: "fmt:check" }]); + + // vp fmt in fix mode is selected + const fixTasks = resolveScriptTasks({ fmt: "vp fmt" }, "fix"); + expect(fixTasks).toEqual([{ capability: "format", scriptName: "fmt" }]); + }); + }); + describe("Registry Extensibility", () => { it("allows adding a new language provider and tool adapter without modifying the core orchestrator", async () => { const registry = new AutofixRegistry(); diff --git a/tests/autofix.test.ts b/tests/autofix.test.ts index bd002d62..8b3badab 100644 --- a/tests/autofix.test.ts +++ b/tests/autofix.test.ts @@ -86,6 +86,11 @@ describe("autofix", () => { async ({ action, runtime, pm, type, executable, installArgs, expectedScriptNames }) => { const scenarioPath = path.join(tempDir, `${action}-${runtime}-${pm}-${type}`); createConsumerProject(scenarioPath, { action, runtime, pm, type }); + const pkgJsonPath = path.join(scenarioPath, "package.json"); + const pkgData = JSON.parse(fs.readFileSync(pkgJsonPath, "utf8")); + pkgData.scripts = { format: "prettier --write ." }; + fs.writeFileSync(pkgJsonPath, JSON.stringify(pkgData, null, 2)); + process.chdir(scenarioPath); process.env.PACKAGE_MANAGER = pm; @@ -944,7 +949,7 @@ describe("autofix", () => { }, { name: "format:write and lint:fix scripts when fix is absent", - scripts: { "format:write": "echo format", "lint:fix": "echo lint" }, + scripts: { "format:write": "prettier --write .", "lint:fix": "eslint --fix ." }, expectedCalls: [ ["npm", ["run", "format:write"]], ["npm", ["run", "lint:fix"]], @@ -952,7 +957,7 @@ describe("autofix", () => { }, { name: "fmt and lint:fix scripts when format is absent", - scripts: { fmt: "echo fmt", "lint:fix": "echo lint" }, + scripts: { fmt: "prettier --write .", "lint:fix": "eslint --fix ." }, expectedCalls: [ ["npm", ["run", "fmt"]], ["npm", ["run", "lint:fix"]], @@ -960,17 +965,17 @@ describe("autofix", () => { }, { name: "format script only", - scripts: { format: "echo format" }, + scripts: { format: "prettier --write ." }, expectedCalls: [["npm", ["run", "format"]]], }, { name: "fmt script only", - scripts: { fmt: "echo fmt" }, + scripts: { fmt: "prettier --write ." }, expectedCalls: [["npm", ["run", "fmt"]]], }, { name: "lint:fix script only", - scripts: { "lint:fix": "echo lint" }, + scripts: { "lint:fix": "eslint --fix ." }, expectedCalls: [["npm", ["run", "lint:fix"]]], }, { From dd2eac6a3bd2d344584f231dda1de0ce40b26913 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sun, 8 Nov 2026 08:00:24 +0000 Subject: [PATCH 20/25] refactor(autofix): reduce cyclomatic complexity in script adapter - Decompose resolveFixScriptTasks into modular helper functions - Address CodeFactor complexity check warning - Rebuild distribution bundles cleanly --- dist/autofix.mjs | 10 +-- .../adapters/javascript/script-adapter.ts | 88 +++++++++++-------- 2 files changed, 57 insertions(+), 41 deletions(-) diff --git a/dist/autofix.mjs b/dist/autofix.mjs index 9ccb3bac..509f8ae3 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -306,8 +306,8 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `&&e[i]!==`\r`;)r+=` `,i++;return i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`)&&t.has(`assist`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)if(t.add(e.capability),e.capabilities)for(let n of e.capabilities)t.add(n);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` `)}function Rr(e){for(let t of[`format:write`,`format:fix`,`format`,`fmt`])if(e[t]&&Di(e[t],e))return t}function zr(e,t){if(t===`fix`)return Rr(e);let n=e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:void 0;if(n&&Ei(e[n],e)===`read-only`)return n}function Br(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`]&&Ei(e[`lint:check`],e)===`read-only`)return`lint:check`;if(e.lint&&Ei(e.lint,e)===`read-only`)return`lint`}function Vr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` `?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Hr(e,t){let n=t;for(;nt?n-1:t}function Ur(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Wr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Gr(e,t,n){return t.isEscaped=!1,n+e}function Kr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function qr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a0&&n.push(t)}return n}function $r(e,t){let n=Qr(e);for(let e of n)if(Zr(e,t))return!0;return!1}function ei(e,t,n){return!n||n===t?!1:!$r(e[t]||``,n)}function ti(e,t,n){return!n||n===t?!1:!$r(e[t]||``,n)}function ni(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ri(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function ii(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function ai(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function oi(e){let[t]=e;return t===`eslint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function si(e){let[t]=e;return t===`oxlint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function ci(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function li(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ui(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:!e.some(e=>e===`--check`||e===`-c`)}function di(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function fi(e){let[t]=e;if(t!==`prettier`)return!1;let n=e.some(e=>e===`--check`||e===`-c`||e===`--list-different`||e===`-l`),r=e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`));return n&&!r}function pi(e){let[t]=e;if(t!==`oxfmt`)return!1;let n=e.some(e=>e===`--check`||e===`-c`),r=e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`));return n&&!r}function mi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function hi(e){let[t]=e;return t===`eslint`&&!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function gi(e){let[t]=e;return t===`oxlint`&&!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function _i(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function vi(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function yi(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:e.some(e=>e===`--check`||e===`-c`)}function bi(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function xi(e){let[t,n]=e;return t!==`vp`||n!==`check`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Si(e){if(e.length===0)return;let[t,n,r]=e;if((t===`npm`||t===`pnpm`||t===`yarn`||t===`bun`)&&n===`run`&&r)return r;if((t===`pnpm`||t===`bun`||t===`yarn`)&&n&&!n.startsWith(`-`))return n}function Ci(e){if(e.length>=3&&(e[0]===`sh`||e[0]===`bash`)&&e[1]===`-c`)return e[2]}function wi(e,t,n){if(e.length===0)return`unknown`;if(ni(e))return`write-capable`;let r=Ci(e);if(r!==void 0)return Ti(r,t,n);let i=Si(e);if(i){if(n.has(i))return`unknown`;n.add(i);let e=t[i];return e?Ti(e,t,n):`unknown`}return ri(e)||ii(e)||ai(e)||oi(e)||si(e)||ci(e)||li(e)||ui(e)||di(e)?`write-capable`:fi(e)||pi(e)||mi(e)||hi(e)||gi(e)||_i(e)||vi(e)||yi(e)||bi(e)||xi(e)?`read-only`:`unknown`}function Ti(e,t,n){let r=Qr(e);if(r.length===0)return`unknown`;let i=!1;for(let e of r){let r=wi(e,t,n);if(r===`write-capable`)return`write-capable`;if(r===`unknown`)return`unknown`;r===`read-only`&&(i=!0)}return i?`read-only`:`unknown`}function Ei(e,t={}){return Ti(e,t,/* @__PURE__ */ new Set)}function Di(e,t={},n=/* @__PURE__ */ new Set){return Qr(e).some(e=>{let r=Si(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Di(e,t,n):!1}let i=Ci(e);return i===void 0?ri(e)||ii(e)||ai(e)||ui(e):Di(i,t,n)})}function Oi(e,t={},n=/* @__PURE__ */ new Set){return Qr(e).some(e=>{let r=Si(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Oi(e,t,n):!1}let i=Ci(e);return i===void 0?oi(e)||si(e)||ci(e)||di(e):Oi(i,t,n)})}function ki(e,t={},n=/* @__PURE__ */ new Set){return Qr(e).some(e=>{let r=Si(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?ki(e,t,n):!1}let i=Ci(e);if(i!==void 0)return ki(i,t,n);if(li(e))return!0;let[a,o]=e;return a===`vp`&&o===`check`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))})}function Ai(e,t,n){return t&&$r(e,t)?!0:n(e)}function ji(e,t,n,r,i){let a=Ai(t,r,t=>Di(t,e)),o=Ai(t,i,t=>Oi(t,e)),s=ki(t,e);return a&&o?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:n}]:a&&!s?[{capability:`format`,scriptName:n}]:o&&!s?[{capability:`lint`,scriptName:n}]:s?[{capability:`autofix`,scriptName:n}]:[{capability:`typecheck`,capabilities:[],scriptName:n}]}function Mi(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=zr(e,`fix`),r=Br(e,`fix`);if(!t){let t=[];return n&&(Di(e[n],e)?t.push({capability:`format`,scriptName:n}):t.push({capability:`typecheck`,capabilities:[],scriptName:n})),r&&(Oi(e[r],e)?t.push({capability:`lint`,scriptName:r}):t.push({capability:`typecheck`,capabilities:[],scriptName:r})),t}let i=ji(e,e[t]||``,t,n,r);if(n&&ei(e,t,n)){let t=Di(e[n],e);i.push({capability:t?`format`:`typecheck`,capabilities:t?[`format`]:[],scriptName:n})}if(r&&ti(e,t,r)){let t=Oi(e[r],e);i.push({capability:t?`lint`:`typecheck`,capabilities:t?[`lint`]:[],scriptName:r})}return i}function Ni(e){let t=[],n=zr(e,`check`),r=Br(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Pi(e,t){return t===`fix`?Mi(e):Ni(e)}var Fi=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Pi(t,`fix`),r=Pi(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=Pi(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Ii(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function Li(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var Ri=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=Li(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},zi=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=Ii(t,`@biomejs/biome`),r=Li(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},Bi=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Ii(t,`prettier`),r=!!t?.prettier,i=Li(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},Vi=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Ii(t,`eslint`),r=!!t?.eslintConfig,i=Li(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},Hi=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Ii(t,`oxlint`),r=Li(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},Ui=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Ii(t,`oxfmt`),r=Li(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},Wi=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Fi;vitePlusAdapter=new Ri;biomeAdapter=new zi;prettierAdapter=new Bi;eslintAdapter=new Vi;oxlintAdapter=new Hi;oxfmtAdapter=new Ui;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},Gi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},Ki=class{id=`python`;name=`Python`;ruffAdapter=new Gi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},qi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function Ji(){let e=new qi;return e.registerProvider(new Ki),e.registerProvider(new Wi),e}const Yi=Ji();async function Xi(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function Zi(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(Yi,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await Xi(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function Qi(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function $i(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await Qi(e,r,t)}}async function ea(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(Yi,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function ta(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await Xi(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}return null}return await Zi(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function na(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await $i(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ra(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await ea(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ia(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await na(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await ra(e,r,n);return s&&i.push(s),i}async function aa(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(Yi,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await ta(e,i);o&&r.push(o);let s=await ia(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&aa();export{Zi as executeJsWorkflow,$i as executePythonWorkflow,ea as executeRuffAutofix,aa as run,cn as sanitizePackageManager}; \ No newline at end of file +`;)n++;return n>t?n-1:t}function Ur(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Wr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Gr(e,t,n){return t.isEscaped=!1,n+e}function Kr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function qr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a0&&n.push(t)}return n}function $r(e,t){let n=Qr(e);for(let e of n)if(Zr(e,t))return!0;return!1}function ei(e,t,n){return!n||n===t?!1:!$r(e[t]||``,n)}function ti(e,t,n){return!n||n===t?!1:!$r(e[t]||``,n)}function ni(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ri(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function ii(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function ai(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function oi(e){let[t]=e;return t===`eslint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function si(e){let[t]=e;return t===`oxlint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function ci(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function li(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ui(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:!e.some(e=>e===`--check`||e===`-c`)}function di(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function fi(e){let[t]=e;if(t!==`prettier`)return!1;let n=e.some(e=>e===`--check`||e===`-c`||e===`--list-different`||e===`-l`),r=e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`));return n&&!r}function pi(e){let[t]=e;if(t!==`oxfmt`)return!1;let n=e.some(e=>e===`--check`||e===`-c`),r=e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`));return n&&!r}function mi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function hi(e){let[t]=e;return t===`eslint`&&!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function gi(e){let[t]=e;return t===`oxlint`&&!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function _i(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function vi(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function yi(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:e.some(e=>e===`--check`||e===`-c`)}function bi(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function xi(e){let[t,n]=e;return t!==`vp`||n!==`check`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Si(e){if(e.length===0)return;let[t,n,r]=e;if((t===`npm`||t===`pnpm`||t===`yarn`||t===`bun`)&&n===`run`&&r)return r;if((t===`pnpm`||t===`bun`||t===`yarn`)&&n&&!n.startsWith(`-`))return n}function Ci(e){if(e.length>=3&&(e[0]===`sh`||e[0]===`bash`)&&e[1]===`-c`)return e[2]}function wi(e,t,n){if(e.length===0)return`unknown`;if(ni(e))return`write-capable`;let r=Ci(e);if(r!==void 0)return Ti(r,t,n);let i=Si(e);if(i){if(n.has(i))return`unknown`;n.add(i);let e=t[i];return e?Ti(e,t,n):`unknown`}return ri(e)||ii(e)||ai(e)||oi(e)||si(e)||ci(e)||li(e)||ui(e)||di(e)?`write-capable`:fi(e)||pi(e)||mi(e)||hi(e)||gi(e)||_i(e)||vi(e)||yi(e)||bi(e)||xi(e)?`read-only`:`unknown`}function Ti(e,t,n){let r=Qr(e);if(r.length===0)return`unknown`;let i=!1;for(let e of r){let r=wi(e,t,n);if(r===`write-capable`)return`write-capable`;if(r===`unknown`)return`unknown`;r===`read-only`&&(i=!0)}return i?`read-only`:`unknown`}function Ei(e,t={}){return Ti(e,t,/* @__PURE__ */ new Set)}function Di(e,t={},n=/* @__PURE__ */ new Set){return Qr(e).some(e=>{let r=Si(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Di(e,t,n):!1}let i=Ci(e);return i===void 0?ri(e)||ii(e)||ai(e)||ui(e):Di(i,t,n)})}function Oi(e,t={},n=/* @__PURE__ */ new Set){return Qr(e).some(e=>{let r=Si(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Oi(e,t,n):!1}let i=Ci(e);return i===void 0?oi(e)||si(e)||ci(e)||di(e):Oi(i,t,n)})}function ki(e,t={},n=/* @__PURE__ */ new Set){return Qr(e).some(e=>{let r=Si(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?ki(e,t,n):!1}let i=Ci(e);if(i!==void 0)return ki(i,t,n);if(li(e))return!0;let[a,o]=e;return a===`vp`&&o===`check`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))})}function Ai(e,t,n){return t&&$r(e,t)?!0:n(e)}function ji(e,t,n,r,i){let a=Ai(t,r,t=>Di(t,e)),o=Ai(t,i,t=>Oi(t,e)),s=ki(t,e);return a&&o?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:n}]:a&&!s?[{capability:`format`,scriptName:n}]:o&&!s?[{capability:`lint`,scriptName:n}]:s?[{capability:`autofix`,scriptName:n}]:[{capability:`typecheck`,capabilities:[],scriptName:n}]}function Mi(e,t){return Di(t[e],t)?{capability:`format`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function Ni(e,t){return Oi(t[e],t)?{capability:`lint`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function Pi(e,t,n){let r=[];return e&&r.push(Mi(e,n)),t&&r.push(Ni(t,n)),r}function Fi(e,t,n,r,i){r&&ei(t,n,r)&&e.push(Mi(r,t)),i&&ti(t,n,i)&&e.push(Ni(i,t))}function Ii(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=zr(e,`fix`),r=Br(e,`fix`);if(!t)return Pi(n,r,e);let i=ji(e,e[t]||``,t,n,r);return Fi(i,e,t,n,r),i}function Li(e){let t=[],n=zr(e,`check`),r=Br(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Ri(e,t){return t===`fix`?Ii(e):Li(e)}var zi=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Ri(t,`fix`),r=Ri(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=Ri(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Bi(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function Vi(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var Hi=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=Vi(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},Ui=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=Bi(t,`@biomejs/biome`),r=Vi(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},Wi=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Bi(t,`prettier`),r=!!t?.prettier,i=Vi(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},Gi=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Bi(t,`eslint`),r=!!t?.eslintConfig,i=Vi(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},Ki=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Bi(t,`oxlint`),r=Vi(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},qi=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Bi(t,`oxfmt`),r=Vi(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},Ji=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new zi;vitePlusAdapter=new Hi;biomeAdapter=new Ui;prettierAdapter=new Wi;eslintAdapter=new Gi;oxlintAdapter=new Ki;oxfmtAdapter=new qi;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},Yi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},Xi=class{id=`python`;name=`Python`;ruffAdapter=new Yi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},Zi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function Qi(){let e=new Zi;return e.registerProvider(new Xi),e.registerProvider(new Ji),e}const $i=Qi();async function ea(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function ta(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir($i,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await ea(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function na(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function ra(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await na(e,r,t)}}async function ia(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir($i,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function aa(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await ea(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await ta(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function oa(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await ra(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function sa(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await ia(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ca(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await oa(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await sa(e,r,n);return s&&i.push(s),i}async function la(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir($i,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await aa(e,i);o&&r.push(o);let s=await ca(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&la();export{ta as executeJsWorkflow,ra as executePythonWorkflow,ia as executeRuffAutofix,la as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index ca51f43c..5bc5666b 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -711,52 +711,68 @@ function createFixScriptMappings( return [{ capability: "typecheck", capabilities: [], scriptName: fixScript }]; } +function createFallbackFormatMapping( + formatScript: string, + scripts: Record, +): ScriptMapping { + const isVerified = hasVerifiedFormattingCommand(scripts[formatScript], scripts); + return isVerified + ? { capability: "format", scriptName: formatScript } + : { capability: "typecheck", capabilities: [], scriptName: formatScript }; +} + +function createFallbackLintMapping( + lintScript: string, + scripts: Record, +): ScriptMapping { + const isVerified = hasVerifiedLintingCommand(scripts[lintScript], scripts); + return isVerified + ? { capability: "lint", scriptName: lintScript } + : { capability: "typecheck", capabilities: [], scriptName: lintScript }; +} + +function resolveFixlessTasks( + formatScript: string | undefined, + lintScript: string | undefined, + scripts: Record, +): ScriptMapping[] { + const fallback: ScriptMapping[] = []; + if (formatScript) { + fallback.push(createFallbackFormatMapping(formatScript, scripts)); + } + if (lintScript) { + fallback.push(createFallbackLintMapping(lintScript, scripts)); + } + return fallback; +} + +function appendIndependentFixTasks( + mappings: ScriptMapping[], + scripts: Record, + fixScript: string, + formatScript: string | undefined, + lintScript: string | undefined, +): void { + if (formatScript && shouldIncludeFormatWithFix(scripts, fixScript, formatScript)) { + mappings.push(createFallbackFormatMapping(formatScript, scripts)); + } + if (lintScript && shouldIncludeLintWithFix(scripts, fixScript, lintScript)) { + mappings.push(createFallbackLintMapping(lintScript, scripts)); + } +} + function resolveFixScriptTasks(scripts: Record): ScriptMapping[] { const fixScript = scripts.fix ? "fix" : scripts["check:fix"] ? "check:fix" : undefined; const formatScript = resolveFormatScript(scripts, "fix"); const lintScript = resolveLintScript(scripts, "fix"); if (!fixScript) { - const fallback: ScriptMapping[] = []; - if (formatScript) { - const isVerified = hasVerifiedFormattingCommand(scripts[formatScript], scripts); - if (isVerified) { - fallback.push({ capability: "format", scriptName: formatScript }); - } else { - fallback.push({ capability: "typecheck", capabilities: [], scriptName: formatScript }); - } - } - if (lintScript) { - const isVerified = hasVerifiedLintingCommand(scripts[lintScript], scripts); - if (isVerified) { - fallback.push({ capability: "lint", scriptName: lintScript }); - } else { - fallback.push({ capability: "typecheck", capabilities: [], scriptName: lintScript }); - } - } - return fallback; + return resolveFixlessTasks(formatScript, lintScript, scripts); } const fixBody = scripts[fixScript] || ""; const mappings = createFixScriptMappings(scripts, fixBody, fixScript, formatScript, lintScript); - - if (formatScript && shouldIncludeFormatWithFix(scripts, fixScript, formatScript)) { - const isVerified = hasVerifiedFormattingCommand(scripts[formatScript], scripts); - mappings.push({ - capability: isVerified ? "format" : "typecheck", - capabilities: isVerified ? ["format"] : [], - scriptName: formatScript, - }); - } - if (lintScript && shouldIncludeLintWithFix(scripts, fixScript, lintScript)) { - const isVerified = hasVerifiedLintingCommand(scripts[lintScript], scripts); - mappings.push({ - capability: isVerified ? "lint" : "typecheck", - capabilities: isVerified ? ["lint"] : [], - scriptName: lintScript, - }); - } - + appendIndependentFixTasks(mappings, scripts, fixScript, formatScript, lintScript); return mappings; } From d14e2ddd795b4ebbc035b5b56fc60f1afc4324a7 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sun, 8 Nov 2026 16:32:25 +0700 Subject: [PATCH 21/25] fix(autofix): shell parser safety and check script fallback (#331) - Prevent unsafe shell commands with redirections, backgrounding, or substitutions from being classified as read-only - Fail closed on malformed quotes and incomplete command substitutions - Fall back to fmt:check when format:check cannot be safely classified as read-only - Regenerate dist/autofix.mjs bundle - Add regression test coverage for shell safety and check script candidate fallback Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- dist/autofix.mjs | 14 +- .../adapters/javascript/script-adapter.ts | 357 +++++++++++++----- tests/autofix-architecture.test.ts | 149 ++++++++ 3 files changed, 409 insertions(+), 111 deletions(-) diff --git a/dist/autofix.mjs b/dist/autofix.mjs index 509f8ae3..7f36cdaa 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -304,10 +304,10 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`)&&t.has(`assist`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)if(t.add(e.capability),e.capabilities)for(let n of e.capabilities)t.add(n);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` -`)}function Rr(e){for(let t of[`format:write`,`format:fix`,`format`,`fmt`])if(e[t]&&Di(e[t],e))return t}function zr(e,t){if(t===`fix`)return Rr(e);let n=e[`format:check`]?`format:check`:e[`fmt:check`]?`fmt:check`:void 0;if(n&&Ei(e[n],e)===`read-only`)return n}function Br(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`]&&Ei(e[`lint:check`],e)===`read-only`)return`lint:check`;if(e.lint&&Ei(e.lint,e)===`read-only`)return`lint`}function Vr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` -`?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Hr(e,t){let n=t;for(;nt?n-1:t}function Ur(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Wr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=o-1):n+=a}return n.trim()&&t.push(n.trim()),t}function Gr(e,t,n){return t.isEscaped=!1,n+e}function Kr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function qr(e){let t=[],n=``,r=!1,i={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1};for(let a=0;a0&&n.push(t)}return n}function $r(e,t){let n=Qr(e);for(let e of n)if(Zr(e,t))return!0;return!1}function ei(e,t,n){return!n||n===t?!1:!$r(e[t]||``,n)}function ti(e,t,n){return!n||n===t?!1:!$r(e[t]||``,n)}function ni(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ri(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function ii(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function ai(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function oi(e){let[t]=e;return t===`eslint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function si(e){let[t]=e;return t===`oxlint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function ci(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function li(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ui(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:!e.some(e=>e===`--check`||e===`-c`)}function di(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function fi(e){let[t]=e;if(t!==`prettier`)return!1;let n=e.some(e=>e===`--check`||e===`-c`||e===`--list-different`||e===`-l`),r=e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`));return n&&!r}function pi(e){let[t]=e;if(t!==`oxfmt`)return!1;let n=e.some(e=>e===`--check`||e===`-c`),r=e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`));return n&&!r}function mi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function hi(e){let[t]=e;return t===`eslint`&&!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function gi(e){let[t]=e;return t===`oxlint`&&!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function _i(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function vi(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function yi(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:e.some(e=>e===`--check`||e===`-c`)}function bi(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function xi(e){let[t,n]=e;return t!==`vp`||n!==`check`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Si(e){if(e.length===0)return;let[t,n,r]=e;if((t===`npm`||t===`pnpm`||t===`yarn`||t===`bun`)&&n===`run`&&r)return r;if((t===`pnpm`||t===`bun`||t===`yarn`)&&n&&!n.startsWith(`-`))return n}function Ci(e){if(e.length>=3&&(e[0]===`sh`||e[0]===`bash`)&&e[1]===`-c`)return e[2]}function wi(e,t,n){if(e.length===0)return`unknown`;if(ni(e))return`write-capable`;let r=Ci(e);if(r!==void 0)return Ti(r,t,n);let i=Si(e);if(i){if(n.has(i))return`unknown`;n.add(i);let e=t[i];return e?Ti(e,t,n):`unknown`}return ri(e)||ii(e)||ai(e)||oi(e)||si(e)||ci(e)||li(e)||ui(e)||di(e)?`write-capable`:fi(e)||pi(e)||mi(e)||hi(e)||gi(e)||_i(e)||vi(e)||yi(e)||bi(e)||xi(e)?`read-only`:`unknown`}function Ti(e,t,n){let r=Qr(e);if(r.length===0)return`unknown`;let i=!1;for(let e of r){let r=wi(e,t,n);if(r===`write-capable`)return`write-capable`;if(r===`unknown`)return`unknown`;r===`read-only`&&(i=!0)}return i?`read-only`:`unknown`}function Ei(e,t={}){return Ti(e,t,/* @__PURE__ */ new Set)}function Di(e,t={},n=/* @__PURE__ */ new Set){return Qr(e).some(e=>{let r=Si(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Di(e,t,n):!1}let i=Ci(e);return i===void 0?ri(e)||ii(e)||ai(e)||ui(e):Di(i,t,n)})}function Oi(e,t={},n=/* @__PURE__ */ new Set){return Qr(e).some(e=>{let r=Si(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Oi(e,t,n):!1}let i=Ci(e);return i===void 0?oi(e)||si(e)||ci(e)||di(e):Oi(i,t,n)})}function ki(e,t={},n=/* @__PURE__ */ new Set){return Qr(e).some(e=>{let r=Si(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?ki(e,t,n):!1}let i=Ci(e);if(i!==void 0)return ki(i,t,n);if(li(e))return!0;let[a,o]=e;return a===`vp`&&o===`check`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))})}function Ai(e,t,n){return t&&$r(e,t)?!0:n(e)}function ji(e,t,n,r,i){let a=Ai(t,r,t=>Di(t,e)),o=Ai(t,i,t=>Oi(t,e)),s=ki(t,e);return a&&o?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:n}]:a&&!s?[{capability:`format`,scriptName:n}]:o&&!s?[{capability:`lint`,scriptName:n}]:s?[{capability:`autofix`,scriptName:n}]:[{capability:`typecheck`,capabilities:[],scriptName:n}]}function Mi(e,t){return Di(t[e],t)?{capability:`format`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function Ni(e,t){return Oi(t[e],t)?{capability:`lint`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function Pi(e,t,n){let r=[];return e&&r.push(Mi(e,n)),t&&r.push(Ni(t,n)),r}function Fi(e,t,n,r,i){r&&ei(t,n,r)&&e.push(Mi(r,t)),i&&ti(t,n,i)&&e.push(Ni(i,t))}function Ii(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=zr(e,`fix`),r=Br(e,`fix`);if(!t)return Pi(n,r,e);let i=ji(e,e[t]||``,t,n,r);return Fi(i,e,t,n,r),i}function Li(e){let t=[],n=zr(e,`check`),r=Br(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Ri(e,t){return t===`fix`?Ii(e):Li(e)}var zi=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Ri(t,`fix`),r=Ri(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=Ri(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function Bi(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function Vi(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var Hi=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=Vi(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},Ui=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=Bi(t,`@biomejs/biome`),r=Vi(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},Wi=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Bi(t,`prettier`),r=!!t?.prettier,i=Vi(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},Gi=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Bi(t,`eslint`),r=!!t?.eslintConfig,i=Vi(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},Ki=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=Bi(t,`oxlint`),r=Vi(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},qi=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=Bi(t,`oxfmt`),r=Vi(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},Ji=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new zi;vitePlusAdapter=new Hi;biomeAdapter=new Ui;prettierAdapter=new Wi;eslintAdapter=new Gi;oxlintAdapter=new Ki;oxfmtAdapter=new qi;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},Yi=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},Xi=class{id=`python`;name=`Python`;ruffAdapter=new Yi;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},Zi=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function Qi(){let e=new Zi;return e.registerProvider(new Xi),e.registerProvider(new Ji),e}const $i=Qi();async function ea(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function ta(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir($i,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await ea(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function na(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function ra(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await na(e,r,t)}}async function ia(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir($i,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function aa(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await ea(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}return null}return await ta(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function oa(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await ra(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function sa(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await ia(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ca(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await oa(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await sa(e,r,n);return s&&i.push(s),i}async function la(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir($i,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await aa(e,i);o&&r.push(o);let s=await ca(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&la();export{ta as executeJsWorkflow,ra as executePythonWorkflow,ia as executeRuffAutofix,la as run,cn as sanitizePackageManager}; \ No newline at end of file +`)}function Rr(e){for(let t of[`format:write`,`format:fix`,`format`,`fmt`])if(e[t]&&Bi(e[t],e))return t}function zr(e){if(e[`format:check`]&&zi(e[`format:check`],e)===`read-only`)return`format:check`;if(e[`fmt:check`]&&zi(e[`fmt:check`],e)===`read-only`)return`fmt:check`}function Br(e,t){return t===`fix`?Rr(e):zr(e)}function Vr(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`]&&zi(e[`lint:check`],e)===`read-only`)return`lint:check`;if(e.lint&&zi(e.lint,e)===`read-only`)return`lint`}function Hr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` +`?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Ur(e,t){let n=t;for(;nt?n-1:t}function Wr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Gr(e,t){return t.isEscaped=!1,{ch:e,advance:!0}}function Kr(e,t,n,r){let i=e[t];if(n.isEscaped)return{newCmd:r+Gr(i,n).ch,nextIndex:t,sepLen:0};if(i===`\\`&&!n.inSingleQuote)return n.isEscaped=!0,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`'`&&!n.inDoubleQuote)return n.inSingleQuote=!n.inSingleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`"`&&!n.inSingleQuote)return n.inDoubleQuote=!n.inDoubleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`#`&&Wr(r,n))return{newCmd:r,nextIndex:Ur(e,t),sepLen:0};let a=Hr(e,t,n);return{newCmd:r+(a===0?i:``),nextIndex:t,sepLen:a}}function qr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1,hasSyntaxError:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=a.sepLen-1):(n=a.newCmd,i=a.nextIndex)}return(r.inSingleQuote||r.inDoubleQuote||r.isEscaped)&&(r.hasSyntaxError=!0),n.trim()&&t.push(n.trim()),{commands:t,hasSyntaxError:r.hasSyntaxError}}function Jr(e){return qr(e).commands}function Yr(e,t,n){return t.isEscaped=!1,n+e}function Xr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function Zr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped||e[t]!==`&`)return!1;let r=t>0?e[t-1]:``,i=t+1`}function Qr(e,t,n){if(n.inSingleQuote||n.isEscaped)return!1;let r=e[t];return r==="`"||r===`$`&&t+1`)&&t+1`||r===`<`||r===`&`&&t+1`}function ti(e,t,n){return Zr(e,t,n.state)||Qr(e,t,n.state)||$r(e,t,n.state)?(n.inspection.hasUnsupportedSyntax=!0,!0):ei(e,t,n.state)?(n.inspection.hasRedirection=!0,n.inspection.hasUnsupportedSyntax=!0,!0):!1}function ni(e,t,n,r){let i=e[t];return n.state.isEscaped?{word:Yr(i,n.state,r),hasChars:!0,skipped:!1}:i===`\\`&&!n.state.inSingleQuote?(n.state.isEscaped=!0,{word:r,hasChars:!1,skipped:!0}):(ti(e,t,n),Xr(i,n.state)?{word:r,hasChars:!0,skipped:!0}:{word:r+i,hasChars:!0,skipped:!1})}function ri(e){let t={tokens:[],hasUnsupportedSyntax:!1,hasRedirection:!1},n={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1},r={inspection:t,state:n},i=``,a=!1;for(let o=0;o0&&n.push(t)}return n}function ui(e,t){let n=li(e);for(let e of n)if(ci(e,t))return!0;return!1}function di(e,t,n){return!n||n===t?!1:!ui(e[t]||``,n)}function fi(e,t,n){return!n||n===t?!1:!ui(e[t]||``,n)}function pi(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function mi(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function hi(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function gi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function _i(e){let[t]=e;return t===`eslint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function vi(e){let[t]=e;return t===`oxlint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function yi(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function bi(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function xi(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:!e.some(e=>e===`--check`||e===`-c`)}function Si(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Ci(e){let[t]=e;if(t!==`prettier`)return!1;let n=e.some(e=>e===`--check`||e===`-c`||e===`--list-different`||e===`-l`),r=e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`));return n&&!r}function wi(e){let[t]=e;if(t!==`oxfmt`)return!1;let n=e.some(e=>e===`--check`||e===`-c`),r=e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`));return n&&!r}function Ti(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function Ei(e){let[t]=e;return t===`eslint`&&!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Di(e){let[t]=e;return t===`oxlint`&&!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Oi(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ki(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function Ai(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:e.some(e=>e===`--check`||e===`-c`)}function ji(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Mi(e){let[t,n]=e;return t!==`vp`||n!==`check`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Ni(e){if(e.length===0)return;let[t,n,r]=e;if((t===`npm`||t===`pnpm`||t===`yarn`||t===`bun`)&&n===`run`&&r)return r;if((t===`pnpm`||t===`bun`||t===`yarn`)&&n&&!n.startsWith(`-`))return n}function Pi(e){if(e.length>=3&&(e[0]===`sh`||e[0]===`bash`)&&e[1]===`-c`)return e[2]}function Fi(e){return mi(e)||hi(e)||gi(e)||_i(e)||vi(e)||yi(e)||bi(e)||xi(e)||Si(e)}function Ii(e){return Ci(e)||wi(e)||Ti(e)||Ei(e)||Di(e)||Oi(e)||ki(e)||Ai(e)||ji(e)||Mi(e)}function Li(e,t,n){if(e.length===0)return`unknown`;if(pi(e))return`write-capable`;let r=Pi(e);if(r!==void 0)return Ri(r,t,n);let i=Ni(e);if(i){if(n.has(i))return`unknown`;n.add(i);let e=t[i];return e?Ri(e,t,n):`unknown`}return Fi(e)?`write-capable`:Ii(e)?`read-only`:`unknown`}function Ri(e,t,n){let r=qr(e);if(r.hasSyntaxError)return`unknown`;let{commands:i}=r;if(i.length===0)return`unknown`;let a=!1;for(let e of i){let r=ri(e),i=Li(si(r.tokens),t,n);if(i===`write-capable`)return`write-capable`;if(r.hasUnsupportedSyntax||i===`unknown`)return`unknown`;i===`read-only`&&(a=!0)}return a?`read-only`:`unknown`}function zi(e,t={}){return Ri(e,t,/* @__PURE__ */ new Set)}function Bi(e,t={},n=/* @__PURE__ */ new Set){return li(e).some(e=>{let r=Ni(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Bi(e,t,n):!1}let i=Pi(e);return i===void 0?mi(e)||hi(e)||gi(e)||xi(e):Bi(i,t,n)})}function Vi(e,t={},n=/* @__PURE__ */ new Set){return li(e).some(e=>{let r=Ni(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Vi(e,t,n):!1}let i=Pi(e);return i===void 0?_i(e)||vi(e)||yi(e)||Si(e):Vi(i,t,n)})}function Hi(e,t={},n=/* @__PURE__ */ new Set){return li(e).some(e=>{let r=Ni(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Hi(e,t,n):!1}let i=Pi(e);if(i!==void 0)return Hi(i,t,n);if(bi(e))return!0;let[a,o]=e;return a===`vp`&&o===`check`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))})}function Ui(e,t,n){return t&&ui(e,t)?!0:n(e)}function Wi(e,t,n,r,i){let a=Ui(t,r,t=>Bi(t,e)),o=Ui(t,i,t=>Vi(t,e)),s=Hi(t,e);return a&&o?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:n}]:a&&!s?[{capability:`format`,scriptName:n}]:o&&!s?[{capability:`lint`,scriptName:n}]:s?[{capability:`autofix`,scriptName:n}]:[{capability:`typecheck`,capabilities:[],scriptName:n}]}function Gi(e,t){return Bi(t[e],t)?{capability:`format`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function Ki(e,t){return Vi(t[e],t)?{capability:`lint`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function qi(e,t,n){let r=[];return e&&r.push(Gi(e,n)),t&&r.push(Ki(t,n)),r}function Ji(e,t,n,r,i){r&&di(t,n,r)&&e.push(Gi(r,t)),i&&fi(t,n,i)&&e.push(Ki(i,t))}function Yi(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Br(e,`fix`),r=Vr(e,`fix`);if(!t)return qi(n,r,e);let i=Wi(e,e[t]||``,t,n,r);return Ji(i,e,t,n,r),i}function Xi(e){let t=[],n=Br(e,`check`),r=Vr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Zi(e,t){return t===`fix`?Yi(e):Xi(e)}var Qi=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Zi(t,`fix`),r=Zi(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=Zi(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function $i(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ea(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ta=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ea(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},na=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=$i(t,`@biomejs/biome`),r=ea(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},ra=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=$i(t,`prettier`),r=!!t?.prettier,i=ea(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},ia=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=$i(t,`eslint`),r=!!t?.eslintConfig,i=ea(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},aa=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=$i(t,`oxlint`),r=ea(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},oa=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=$i(t,`oxfmt`),r=ea(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},sa=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Qi;vitePlusAdapter=new ta;biomeAdapter=new na;prettierAdapter=new ra;eslintAdapter=new ia;oxlintAdapter=new aa;oxfmtAdapter=new oa;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},ca=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},la=class{id=`python`;name=`Python`;ruffAdapter=new ca;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},ua=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function da(){let e=new ua;return e.registerProvider(new la),e.registerProvider(new sa),e}const fa=da();async function pa(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function ma(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(fa,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await pa(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function ha(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function ga(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await ha(e,r,t)}}async function _a(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(fa,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function va(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await pa(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await ma(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ya(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await ga(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ba(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await _a(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function xa(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await ya(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await ba(e,r,n);return s&&i.push(s),i}async function Sa(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(fa,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await va(e,i);o&&r.push(o);let s=await xa(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&Sa();export{ma as executeJsWorkflow,ga as executePythonWorkflow,_a as executeRuffAutofix,Sa as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index 5bc5666b..26802d53 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -27,6 +27,18 @@ function resolveFormatFixCandidate(scripts: Record): string | un return undefined; } +function resolveFormatCheckCandidate(scripts: Record): string | undefined { + // In check mode, positively require scripts to be "read-only". + // Fall back to "fmt:check" when "format:check" is missing or cannot be safely verified as read-only. + if (scripts["format:check"] && classifyScript(scripts["format:check"], scripts) === "read-only") { + return "format:check"; + } + if (scripts["fmt:check"] && classifyScript(scripts["fmt:check"], scripts) === "read-only") { + return "fmt:check"; + } + return undefined; +} + function resolveFormatScript( scripts: Record, mode: ExecutionMode, @@ -34,18 +46,7 @@ function resolveFormatScript( if (mode === "fix") { return resolveFormatFixCandidate(scripts); } - // In check mode, positively require scripts to be "read-only". - // Reject unknown commands, unsupported shell wrappers, unresolved package-manager delegations, - // parser failures, and any script with write flags. - const candidate = scripts["format:check"] - ? "format:check" - : scripts["fmt:check"] - ? "fmt:check" - : undefined; - if (candidate && classifyScript(scripts[candidate], scripts) === "read-only") { - return candidate; - } - return undefined; + return resolveFormatCheckCandidate(scripts); } function resolveLintScript( @@ -76,6 +77,10 @@ interface TokenizerState { isEscaped: boolean; } +interface SplitState extends TokenizerState { + hasSyntaxError: boolean; +} + function getSeparatorLength(text: string, index: number, state: TokenizerState): number { if (state.inSingleQuote || state.inDoubleQuote || state.isEscaped) return 0; const ch = text[index]; @@ -91,7 +96,6 @@ function skipComment(text: string, index: number): number { while (i < text.length && text[i] !== "\n") { i++; } - // Return index immediately before newline so outer loop processes the newline separator return i > index ? i - 1 : index; } @@ -101,63 +105,93 @@ function isShellCommentStart(currentCmd: string, state: TokenizerState): boolean return /\s/.test(currentCmd[currentCmd.length - 1]); } +interface SplitResult { + commands: string[]; + hasSyntaxError: boolean; +} + +function handleEscapeInSplit(ch: string, state: SplitState): { ch: string; advance: boolean } { + state.isEscaped = false; + return { ch, advance: true }; +} + +function processSplitChar( + shellText: string, + i: number, + state: SplitState, + currentCmd: string, +): { newCmd: string; nextIndex: number; sepLen: number } { + const ch = shellText[i]; + + if (state.isEscaped) { + const res = handleEscapeInSplit(ch, state); + return { newCmd: currentCmd + res.ch, nextIndex: i, sepLen: 0 }; + } + + if (ch === "\\" && !state.inSingleQuote) { + state.isEscaped = true; + return { newCmd: currentCmd + ch, nextIndex: i, sepLen: 0 }; + } + + if (ch === "'" && !state.inDoubleQuote) { + state.inSingleQuote = !state.inSingleQuote; + return { newCmd: currentCmd + ch, nextIndex: i, sepLen: 0 }; + } + + if (ch === '"' && !state.inSingleQuote) { + state.inDoubleQuote = !state.inDoubleQuote; + return { newCmd: currentCmd + ch, nextIndex: i, sepLen: 0 }; + } + + if (ch === "#" && isShellCommentStart(currentCmd, state)) { + const nextIdx = skipComment(shellText, i); + return { newCmd: currentCmd, nextIndex: nextIdx, sepLen: 0 }; + } + + const sepLen = getSeparatorLength(shellText, i, state); + return { newCmd: currentCmd + (sepLen === 0 ? ch : ""), nextIndex: i, sepLen }; +} + /** * Splits shell command text into chained commands (;, &&, ||, |, newline) * while respecting quotes ('...', "..."), escapes (\), and comments. + * Tracks syntax errors such as unterminated quotes or trailing escape. */ -function splitChainedCommands(shellText: string): string[] { +function splitChainedCommandsDetailed(shellText: string): SplitResult { const commands: string[] = []; let currentCmd = ""; - const state: TokenizerState = { inSingleQuote: false, inDoubleQuote: false, isEscaped: false }; + const state: SplitState = { + inSingleQuote: false, + inDoubleQuote: false, + isEscaped: false, + hasSyntaxError: false, + }; for (let i = 0; i < shellText.length; i++) { - const ch = shellText[i]; - - if (state.isEscaped) { - currentCmd += ch; - state.isEscaped = false; - continue; - } - - if (ch === "\\" && !state.inSingleQuote) { - state.isEscaped = true; - currentCmd += ch; - continue; - } - - if (ch === "'" && !state.inDoubleQuote) { - state.inSingleQuote = !state.inSingleQuote; - currentCmd += ch; - continue; - } - - if (ch === '"' && !state.inSingleQuote) { - state.inDoubleQuote = !state.inDoubleQuote; - currentCmd += ch; - continue; - } - - if (ch === "#" && isShellCommentStart(currentCmd, state)) { - i = skipComment(shellText, i); - continue; - } - - const sepLen = getSeparatorLength(shellText, i, state); - if (sepLen > 0) { + const processed = processSplitChar(shellText, i, state, currentCmd); + if (processed.sepLen > 0) { if (currentCmd.trim()) commands.push(currentCmd.trim()); currentCmd = ""; - i += sepLen - 1; + i += processed.sepLen - 1; continue; } + currentCmd = processed.newCmd; + i = processed.nextIndex; + } - currentCmd += ch; + if (state.inSingleQuote || state.inDoubleQuote || state.isEscaped) { + state.hasSyntaxError = true; } if (currentCmd.trim()) { commands.push(currentCmd.trim()); } - return commands; + return { commands, hasSyntaxError: state.hasSyntaxError }; +} + +function splitChainedCommands(shellText: string): string[] { + return splitChainedCommandsDetailed(shellText).commands; } function handleEscapeInWord(ch: string, state: TokenizerState, currentWord: string): string { @@ -177,53 +211,145 @@ function handleQuoteToggle(ch: string, state: TokenizerState): boolean { return false; } +interface CommandInspection { + tokens: string[]; + hasUnsupportedSyntax: boolean; + hasRedirection: boolean; +} + +function isBackgroundOp(cmd: string, index: number, state: TokenizerState): boolean { + if (state.inSingleQuote || state.inDoubleQuote || state.isEscaped) return false; + if (cmd[index] !== "&") return false; + const prev = index > 0 ? cmd[index - 1] : ""; + const next = index + 1 < cmd.length ? cmd[index + 1] : ""; + return prev !== "&" && next !== "&" && next !== ">"; +} + +function isCommandSubstitutionStart(cmd: string, index: number, state: TokenizerState): boolean { + if (state.inSingleQuote || state.isEscaped) return false; + const ch = cmd[index]; + if (ch === "`") return true; + if (ch === "$" && index + 1 < cmd.length && cmd[index + 1] === "(") return true; + return false; +} + +function isProcessSubstitutionStart(cmd: string, index: number, state: TokenizerState): boolean { + if (state.inSingleQuote || state.inDoubleQuote || state.isEscaped) return false; + const ch = cmd[index]; + if ((ch === "<" || ch === ">") && index + 1 < cmd.length && cmd[index + 1] === "(") { + return true; + } + return false; +} + +function isRedirectionChar(cmd: string, index: number, state: TokenizerState): boolean { + if (state.inSingleQuote || state.inDoubleQuote || state.isEscaped) return false; + const ch = cmd[index]; + if (ch === ">") return true; + if (ch === "<") return true; + if (ch === "&" && index + 1 < cmd.length && cmd[index + 1] === ">") return true; + return false; +} + +interface TokenizeScanContext { + inspection: CommandInspection; + state: TokenizerState; +} + +function inspectSpecialConstructs(cmd: string, i: number, ctx: TokenizeScanContext): boolean { + if (isBackgroundOp(cmd, i, ctx.state)) { + ctx.inspection.hasUnsupportedSyntax = true; + return true; + } + if (isCommandSubstitutionStart(cmd, i, ctx.state)) { + ctx.inspection.hasUnsupportedSyntax = true; + return true; + } + if (isProcessSubstitutionStart(cmd, i, ctx.state)) { + ctx.inspection.hasUnsupportedSyntax = true; + return true; + } + if (isRedirectionChar(cmd, i, ctx.state)) { + ctx.inspection.hasRedirection = true; + ctx.inspection.hasUnsupportedSyntax = true; + return true; + } + return false; +} + +function stepTokenizeChar( + cmd: string, + i: number, + ctx: TokenizeScanContext, + currentWord: string, +): { word: string; hasChars: boolean; skipped: boolean } { + const ch = cmd[i]; + + if (ctx.state.isEscaped) { + const word = handleEscapeInWord(ch, ctx.state, currentWord); + return { word, hasChars: true, skipped: false }; + } + + if (ch === "\\" && !ctx.state.inSingleQuote) { + ctx.state.isEscaped = true; + return { word: currentWord, hasChars: false, skipped: true }; + } + + inspectSpecialConstructs(cmd, i, ctx); + + if (handleQuoteToggle(ch, ctx.state)) { + return { word: currentWord, hasChars: true, skipped: true }; + } + + return { word: currentWord + ch, hasChars: true, skipped: false }; +} + /** * Splits a single command line into word tokens, respecting quotes and escapes. - * Strips outer quotes so `"format:write"` or `'format:write'` becomes `format:write`. + * Detects unsupported shell constructs (backgrounding, command substitutions, + * process substitutions, output/input redirections, unclosed quotes/escapes). */ -function tokenizeCommandLine(cmd: string): string[] { - const tokens: string[] = []; +function inspectAndTokenizeCommandLine(cmd: string): CommandInspection { + const inspection: CommandInspection = { + tokens: [], + hasUnsupportedSyntax: false, + hasRedirection: false, + }; + const state: TokenizerState = { inSingleQuote: false, inDoubleQuote: false, isEscaped: false }; + const ctx: TokenizeScanContext = { inspection, state }; + let currentWord = ""; let hasCharsInWord = false; - const state: TokenizerState = { inSingleQuote: false, inDoubleQuote: false, isEscaped: false }; for (let i = 0; i < cmd.length; i++) { const ch = cmd[i]; - - if (state.isEscaped) { - currentWord = handleEscapeInWord(ch, state, currentWord); - hasCharsInWord = true; - continue; - } - - if (ch === "\\" && !state.inSingleQuote) { - state.isEscaped = true; - continue; - } - - if (handleQuoteToggle(ch, state)) { - hasCharsInWord = true; - continue; - } - - if (!state.inSingleQuote && !state.inDoubleQuote && /\s/.test(ch)) { + if (!state.inSingleQuote && !state.inDoubleQuote && !state.isEscaped && /\s/.test(ch)) { if (hasCharsInWord) { - tokens.push(currentWord); + inspection.tokens.push(currentWord); currentWord = ""; hasCharsInWord = false; } continue; } - currentWord += ch; - hasCharsInWord = true; + const step = stepTokenizeChar(cmd, i, ctx, currentWord); + currentWord = step.word; + if (step.hasChars) hasCharsInWord = true; + } + + if (state.inSingleQuote || state.inDoubleQuote || state.isEscaped) { + inspection.hasUnsupportedSyntax = true; } if (hasCharsInWord) { - tokens.push(currentWord); + inspection.tokens.push(currentWord); } - return tokens; + return inspection; +} + +function tokenizeCommandLine(cmd: string): string[] { + return inspectAndTokenizeCommandLine(cmd).tokens; } const ENV_ASSIGNMENT_REGEX = /^[A-Za-z_][A-Za-z0-9_]*=/; @@ -499,6 +625,35 @@ function extractShellWrapperScript(tokens: string[]): string | undefined { return undefined; } +function isKnownWriteCommand(tokens: string[]): boolean { + return ( + isPrettierWrite(tokens) || + isOxfmtWrite(tokens) || + isBiomeFormatWrite(tokens) || + isEslintFix(tokens) || + isOxlintFix(tokens) || + isBiomeLintWrite(tokens) || + isBiomeCheckWrite(tokens) || + isVpFmtWrite(tokens) || + isVpLintFix(tokens) + ); +} + +function isKnownReadOnlyCommand(tokens: string[]): boolean { + return ( + isPrettierCheck(tokens) || + isOxfmtCheck(tokens) || + isBiomeFormatCheck(tokens) || + isEslintCheck(tokens) || + isOxlintCheck(tokens) || + isBiomeLintCheck(tokens) || + isBiomeCheckCheck(tokens) || + isVpFmtCheck(tokens) || + isVpLintCheck(tokens) || + isVpCheckCheck(tokens) + ); +} + function classifyInvocation( tokens: string[], scripts: Record, @@ -528,33 +683,12 @@ function classifyInvocation( } // Check known write-capable commands - if ( - isPrettierWrite(tokens) || - isOxfmtWrite(tokens) || - isBiomeFormatWrite(tokens) || - isEslintFix(tokens) || - isOxlintFix(tokens) || - isBiomeLintWrite(tokens) || - isBiomeCheckWrite(tokens) || - isVpFmtWrite(tokens) || - isVpLintFix(tokens) - ) { + if (isKnownWriteCommand(tokens)) { return "write-capable"; } // Check known read-only commands - if ( - isPrettierCheck(tokens) || - isOxfmtCheck(tokens) || - isBiomeFormatCheck(tokens) || - isEslintCheck(tokens) || - isOxlintCheck(tokens) || - isBiomeLintCheck(tokens) || - isBiomeCheckCheck(tokens) || - isVpFmtCheck(tokens) || - isVpLintCheck(tokens) || - isVpCheckCheck(tokens) - ) { + if (isKnownReadOnlyCommand(tokens)) { return "read-only"; } @@ -566,16 +700,31 @@ function classifyScriptInternal( scripts: Record, visited: Set, ): ScriptClassification { - const invocations = parseCommandInvocations(command); - if (invocations.length === 0) return "unknown"; + const splitResult = splitChainedCommandsDetailed(command); + if (splitResult.hasSyntaxError) { + return "unknown"; + } + + const { commands } = splitResult; + if (commands.length === 0) return "unknown"; let hasReadOnly = false; - for (const tokens of invocations) { + for (const cmd of commands) { + const inspection = inspectAndTokenizeCommandLine(cmd); + const tokens = getCommandInvocationTokens(inspection.tokens); const classification = classifyInvocation(tokens, scripts, visited); + if (classification === "write-capable") { return "write-capable"; } + + // Fail closed: If command contains unsupported shell syntax, redirections, or substitutions, + // it must NEVER be classified as read-only. + if (inspection.hasUnsupportedSyntax) { + return "unknown"; + } + if (classification === "unknown") { return "unknown"; } diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index 1c07742c..c4276941 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -1461,6 +1461,155 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { const fixTasks = resolveScriptTasks({ fmt: "vp fmt" }, "fix"); expect(fixTasks).toEqual([{ capability: "format", scriptName: "fmt" }]); }); + + it("prevents unsafe shell constructs, redirections, backgrounding, and substitutions from being classified as read-only", () => { + // Background execution: & + expect(classifyScript("eslint . & touch marker.txt")).toBe("unknown"); + expect( + resolveScriptTasks( + { + "lint:check": "eslint . & touch marker.txt", + }, + "check", + ), + ).toEqual([]); + + // Output redirection: >, >>, 2>, 2>>, &> + expect(classifyScript("prettier --check . > package.json")).toBe("unknown"); + expect( + resolveScriptTasks( + { + "format:check": "prettier --check . > package.json", + }, + "check", + ), + ).toEqual([]); + + expect(classifyScript("eslint . >> output.log")).toBe("unknown"); + expect( + resolveScriptTasks( + { + "lint:check": "eslint . >> output.log", + }, + "check", + ), + ).toEqual([]); + + expect(classifyScript("eslint . 2> errors.log")).toBe("unknown"); + expect( + resolveScriptTasks( + { + "lint:check": "eslint . 2> errors.log", + }, + "check", + ), + ).toEqual([]); + + expect(classifyScript("eslint . 2>> errors.log")).toBe("unknown"); + expect(classifyScript("eslint . &> errors.log")).toBe("unknown"); + + // Command substitutions: $(...) and `...` + expect(classifyScript('eslint "$(touch marker.txt)"')).toBe("unknown"); + expect( + resolveScriptTasks( + { + "lint:check": 'eslint "$(touch marker.txt)"', + }, + "check", + ), + ).toEqual([]); + + expect(classifyScript("eslint `touch marker.txt`")).toBe("unknown"); + expect( + resolveScriptTasks( + { + "lint:check": "eslint `touch marker.txt`", + }, + "check", + ), + ).toEqual([]); + + // Process substitutions: <(...) and >(...) + expect(classifyScript("eslint <(touch marker.txt)")).toBe("unknown"); + expect( + resolveScriptTasks( + { + "lint:check": "eslint <(touch marker.txt)", + }, + "check", + ), + ).toEqual([]); + + expect(classifyScript("eslint >(touch marker.txt)")).toBe("unknown"); + + // Malformed quotes or unclosed command substitutions + expect(classifyScript('eslint "unterminated')).toBe("unknown"); + expect(classifyScript("eslint 'unterminated")).toBe("unknown"); + expect(classifyScript("eslint $(touch marker.txt")).toBe("unknown"); + expect(classifyScript("eslint `touch marker.txt")).toBe("unknown"); + + // Valid chained read-only commands continue to work + expect(classifyScript("eslint . && prettier --check .")).toBe("read-only"); + + // Valid quoted arguments containing characters that should not be treated as shell operators + expect(classifyScript('eslint --rule "semi: [error, always]"')).toBe("read-only"); + expect(classifyScript("prettier --check 'src/**/*.{js,ts}'")).toBe("read-only"); + expect(classifyScript('echo "> not redirected"')).toBe("unknown"); // echo is unknown command, not read-only + + // Escaped shell characters are literal + expect(classifyScript("eslint \\>")).toBe("read-only"); + }); + + it("falls back to fmt:check when format:check cannot be safely classified as read-only", () => { + // 1. Unknown format:check with valid fmt:check -> selects fmt:check + const unknownFormatWithValidFmt = { + "format:check": "node scripts/custom-format.js", + "fmt:check": "prettier --check .", + }; + expect(resolveScriptTasks(unknownFormatWithValidFmt, "check")).toEqual([ + { capability: "format", scriptName: "fmt:check" }, + ]); + + // 2. Write-capable format:check with valid fmt:check -> selects fmt:check + const writeFormatWithValidFmt = { + "format:check": "prettier --write .", + "fmt:check": "prettier --check .", + }; + expect(resolveScriptTasks(writeFormatWithValidFmt, "check")).toEqual([ + { capability: "format", scriptName: "fmt:check" }, + ]); + + // 3. Read-only format:check takes precedence over fmt:check + const bothReadOnly = { + "format:check": "prettier --check .", + "fmt:check": "vp fmt --check", + }; + expect(resolveScriptTasks(bothReadOnly, "check")).toEqual([ + { capability: "format", scriptName: "format:check" }, + ]); + + // 4. Both candidates unknown -> none selected + const bothUnknown = { + "format:check": "node scripts/format.js", + "fmt:check": "python -m format", + }; + expect(resolveScriptTasks(bothUnknown, "check")).toEqual([]); + + // 5. Both candidates write-capable -> none selected + const bothWriteCapable = { + "format:check": "prettier --write .", + "fmt:check": "vp fmt", + }; + expect(resolveScriptTasks(bothWriteCapable, "check")).toEqual([]); + + // 6. Only one valid candidate exists + expect(resolveScriptTasks({ "fmt:check": "prettier --check ." }, "check")).toEqual([ + { capability: "format", scriptName: "fmt:check" }, + ]); + expect(resolveScriptTasks({ "format:check": "prettier --check ." }, "check")).toEqual([ + { capability: "format", scriptName: "format:check" }, + ]); + }); }); describe("Registry Extensibility", () => { From 97a59e17ca15d4ceb4d0f9f3808a0e7aa079b7a5 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 9 Nov 2026 15:58:40 +0700 Subject: [PATCH 22/25] fix(autofix): shell variable expansion safety and windows binary shims (#332) * fix(autofix): shell variable expansion safety and windows binary shims * fix(autofix): reject explicit ps1 shims and verify windows binary resolution * fix(autofix): restrict windows executable extensions * fix(autofix): restrict windows executable extensions --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- dist/autofix.mjs | 14 +- .../adapters/javascript/script-adapter.ts | 29 +++ src/autofix/engine.ts | 54 ++++- tests/autofix-architecture.test.ts | 190 +++++++++++++++++- 4 files changed, 274 insertions(+), 13 deletions(-) diff --git a/dist/autofix.mjs b/dist/autofix.mjs index 7f36cdaa..5deaa093 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -303,11 +303,11 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `?` `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t){let n=p.join(e,`node_modules`,`.bin`,t);if(f.existsSync(n))return n;let r=await Vt(t,!1);if(r)return r}var Ar=class{async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`)&&t.has(`assist`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)if(t.add(e.capability),e.capabilities)for(let n of e.capabilities)t.add(n);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` -`)}function Rr(e){for(let t of[`format:write`,`format:fix`,`format`,`fmt`])if(e[t]&&Bi(e[t],e))return t}function zr(e){if(e[`format:check`]&&zi(e[`format:check`],e)===`read-only`)return`format:check`;if(e[`fmt:check`]&&zi(e[`fmt:check`],e)===`read-only`)return`fmt:check`}function Br(e,t){return t===`fix`?Rr(e):zr(e)}function Vr(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`]&&zi(e[`lint:check`],e)===`read-only`)return`lint:check`;if(e.lint&&zi(e.lint,e)===`read-only`)return`lint`}function Hr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` +`&&e[i]!==`\r`;)r+=` `,i++;return i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t,n=process.platform){let r=p.join(e,`node_modules`,`.bin`),i=/* @__PURE__ */ new Set([`.cmd`,`.bat`,`.exe`]);if(n===`win32`){let e=p.extname(t).toLowerCase();if(e){if(!i.has(e))return;let n=p.join(r,t);if(f.existsSync(n))return n}else for(let e of[`.cmd`,`.bat`,`.exe`,``]){let n=p.join(r,`${t}${e}`);if(f.existsSync(n))return n}}else{let e=p.join(r,t);if(f.existsSync(e))return e}let a=await Vt(t,!1);if(a){if(n===`win32`){let e=p.extname(a).toLowerCase();if(e&&!i.has(e))return}return a}}var Ar=class{platform;constructor(e=process.platform){this.platform=e}async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable,this.platform);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`)&&t.has(`assist`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)if(t.add(e.capability),e.capabilities)for(let n of e.capabilities)t.add(n);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` +`)}function Rr(e){for(let t of[`format:write`,`format:fix`,`format`,`fmt`])if(e[t]&&Hi(e[t],e))return t}function zr(e){if(e[`format:check`]&&Vi(e[`format:check`],e)===`read-only`)return`format:check`;if(e[`fmt:check`]&&Vi(e[`fmt:check`],e)===`read-only`)return`fmt:check`}function Br(e,t){return t===`fix`?Rr(e):zr(e)}function Vr(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`]&&Vi(e[`lint:check`],e)===`read-only`)return`lint:check`;if(e.lint&&Vi(e.lint,e)===`read-only`)return`lint`}function Hr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` `?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Ur(e,t){let n=t;for(;nt?n-1:t}function Wr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Gr(e,t){return t.isEscaped=!1,{ch:e,advance:!0}}function Kr(e,t,n,r){let i=e[t];if(n.isEscaped)return{newCmd:r+Gr(i,n).ch,nextIndex:t,sepLen:0};if(i===`\\`&&!n.inSingleQuote)return n.isEscaped=!0,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`'`&&!n.inDoubleQuote)return n.inSingleQuote=!n.inSingleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`"`&&!n.inSingleQuote)return n.inDoubleQuote=!n.inDoubleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`#`&&Wr(r,n))return{newCmd:r,nextIndex:Ur(e,t),sepLen:0};let a=Hr(e,t,n);return{newCmd:r+(a===0?i:``),nextIndex:t,sepLen:a}}function qr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1,hasSyntaxError:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=a.sepLen-1):(n=a.newCmd,i=a.nextIndex)}return(r.inSingleQuote||r.inDoubleQuote||r.isEscaped)&&(r.hasSyntaxError=!0),n.trim()&&t.push(n.trim()),{commands:t,hasSyntaxError:r.hasSyntaxError}}function Jr(e){return qr(e).commands}function Yr(e,t,n){return t.isEscaped=!1,n+e}function Xr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}function Zr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped||e[t]!==`&`)return!1;let r=t>0?e[t-1]:``,i=t+1`}function Qr(e,t,n){if(n.inSingleQuote||n.isEscaped)return!1;let r=e[t];return r==="`"||r===`$`&&t+1`)&&t+1`||r===`<`||r===`&`&&t+1`}function ti(e,t,n){return Zr(e,t,n.state)||Qr(e,t,n.state)||$r(e,t,n.state)?(n.inspection.hasUnsupportedSyntax=!0,!0):ei(e,t,n.state)?(n.inspection.hasRedirection=!0,n.inspection.hasUnsupportedSyntax=!0,!0):!1}function ni(e,t,n,r){let i=e[t];return n.state.isEscaped?{word:Yr(i,n.state,r),hasChars:!0,skipped:!1}:i===`\\`&&!n.state.inSingleQuote?(n.state.isEscaped=!0,{word:r,hasChars:!1,skipped:!0}):(ti(e,t,n),Xr(i,n.state)?{word:r,hasChars:!0,skipped:!0}:{word:r+i,hasChars:!0,skipped:!1})}function ri(e){let t={tokens:[],hasUnsupportedSyntax:!1,hasRedirection:!1},n={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1},r={inspection:t,state:n},i=``,a=!1;for(let o=0;o0&&n.push(t)}return n}function ui(e,t){let n=li(e);for(let e of n)if(ci(e,t))return!0;return!1}function di(e,t,n){return!n||n===t?!1:!ui(e[t]||``,n)}function fi(e,t,n){return!n||n===t?!1:!ui(e[t]||``,n)}function pi(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function mi(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function hi(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function gi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function _i(e){let[t]=e;return t===`eslint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function vi(e){let[t]=e;return t===`oxlint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function yi(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function bi(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function xi(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:!e.some(e=>e===`--check`||e===`-c`)}function Si(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Ci(e){let[t]=e;if(t!==`prettier`)return!1;let n=e.some(e=>e===`--check`||e===`-c`||e===`--list-different`||e===`-l`),r=e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`));return n&&!r}function wi(e){let[t]=e;if(t!==`oxfmt`)return!1;let n=e.some(e=>e===`--check`||e===`-c`),r=e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`));return n&&!r}function Ti(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function Ei(e){let[t]=e;return t===`eslint`&&!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Di(e){let[t]=e;return t===`oxlint`&&!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Oi(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ki(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function Ai(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:e.some(e=>e===`--check`||e===`-c`)}function ji(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Mi(e){let[t,n]=e;return t!==`vp`||n!==`check`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Ni(e){if(e.length===0)return;let[t,n,r]=e;if((t===`npm`||t===`pnpm`||t===`yarn`||t===`bun`)&&n===`run`&&r)return r;if((t===`pnpm`||t===`bun`||t===`yarn`)&&n&&!n.startsWith(`-`))return n}function Pi(e){if(e.length>=3&&(e[0]===`sh`||e[0]===`bash`)&&e[1]===`-c`)return e[2]}function Fi(e){return mi(e)||hi(e)||gi(e)||_i(e)||vi(e)||yi(e)||bi(e)||xi(e)||Si(e)}function Ii(e){return Ci(e)||wi(e)||Ti(e)||Ei(e)||Di(e)||Oi(e)||ki(e)||Ai(e)||ji(e)||Mi(e)}function Li(e,t,n){if(e.length===0)return`unknown`;if(pi(e))return`write-capable`;let r=Pi(e);if(r!==void 0)return Ri(r,t,n);let i=Ni(e);if(i){if(n.has(i))return`unknown`;n.add(i);let e=t[i];return e?Ri(e,t,n):`unknown`}return Fi(e)?`write-capable`:Ii(e)?`read-only`:`unknown`}function Ri(e,t,n){let r=qr(e);if(r.hasSyntaxError)return`unknown`;let{commands:i}=r;if(i.length===0)return`unknown`;let a=!1;for(let e of i){let r=ri(e),i=Li(si(r.tokens),t,n);if(i===`write-capable`)return`write-capable`;if(r.hasUnsupportedSyntax||i===`unknown`)return`unknown`;i===`read-only`&&(a=!0)}return a?`read-only`:`unknown`}function zi(e,t={}){return Ri(e,t,/* @__PURE__ */ new Set)}function Bi(e,t={},n=/* @__PURE__ */ new Set){return li(e).some(e=>{let r=Ni(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Bi(e,t,n):!1}let i=Pi(e);return i===void 0?mi(e)||hi(e)||gi(e)||xi(e):Bi(i,t,n)})}function Vi(e,t={},n=/* @__PURE__ */ new Set){return li(e).some(e=>{let r=Ni(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Vi(e,t,n):!1}let i=Pi(e);return i===void 0?_i(e)||vi(e)||yi(e)||Si(e):Vi(i,t,n)})}function Hi(e,t={},n=/* @__PURE__ */ new Set){return li(e).some(e=>{let r=Ni(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Hi(e,t,n):!1}let i=Pi(e);if(i!==void 0)return Hi(i,t,n);if(bi(e))return!0;let[a,o]=e;return a===`vp`&&o===`check`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))})}function Ui(e,t,n){return t&&ui(e,t)?!0:n(e)}function Wi(e,t,n,r,i){let a=Ui(t,r,t=>Bi(t,e)),o=Ui(t,i,t=>Vi(t,e)),s=Hi(t,e);return a&&o?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:n}]:a&&!s?[{capability:`format`,scriptName:n}]:o&&!s?[{capability:`lint`,scriptName:n}]:s?[{capability:`autofix`,scriptName:n}]:[{capability:`typecheck`,capabilities:[],scriptName:n}]}function Gi(e,t){return Bi(t[e],t)?{capability:`format`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function Ki(e,t){return Vi(t[e],t)?{capability:`lint`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function qi(e,t,n){let r=[];return e&&r.push(Gi(e,n)),t&&r.push(Ki(t,n)),r}function Ji(e,t,n,r,i){r&&di(t,n,r)&&e.push(Gi(r,t)),i&&fi(t,n,i)&&e.push(Ki(i,t))}function Yi(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Br(e,`fix`),r=Vr(e,`fix`);if(!t)return qi(n,r,e);let i=Wi(e,e[t]||``,t,n,r);return Ji(i,e,t,n,r),i}function Xi(e){let t=[],n=Br(e,`check`),r=Vr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function Zi(e,t){return t===`fix`?Yi(e):Xi(e)}var Qi=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=Zi(t,`fix`),r=Zi(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=Zi(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function $i(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ea(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ta=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ea(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},na=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=$i(t,`@biomejs/biome`),r=ea(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},ra=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=$i(t,`prettier`),r=!!t?.prettier,i=ea(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},ia=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=$i(t,`eslint`),r=!!t?.eslintConfig,i=ea(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},aa=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=$i(t,`oxlint`),r=ea(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},oa=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=$i(t,`oxfmt`),r=ea(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},sa=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new Qi;vitePlusAdapter=new ta;biomeAdapter=new na;prettierAdapter=new ra;eslintAdapter=new ia;oxlintAdapter=new aa;oxfmtAdapter=new oa;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},ca=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},la=class{id=`python`;name=`Python`;ruffAdapter=new ca;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},ua=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function da(){let e=new ua;return e.registerProvider(new la),e.registerProvider(new sa),e}const fa=da();async function pa(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function ma(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(fa,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await pa(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function ha(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function ga(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await ha(e,r,t)}}async function _a(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(fa,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function va(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await pa(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}return null}return await ma(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ya(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await ga(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ba(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await _a(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function xa(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await ya(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await ba(e,r,n);return s&&i.push(s),i}async function Sa(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(fa,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await va(e,i);o&&r.push(o);let s=await xa(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&Sa();export{ma as executeJsWorkflow,ga as executePythonWorkflow,_a as executeRuffAutofix,Sa as run,cn as sanitizePackageManager}; \ No newline at end of file +`;)n++;return n>t?n-1:t}function Wr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Gr(e,t){return t.isEscaped=!1,{ch:e,advance:!0}}function Kr(e,t,n,r){let i=e[t];if(n.isEscaped)return{newCmd:r+Gr(i,n).ch,nextIndex:t,sepLen:0};if(i===`\\`&&!n.inSingleQuote)return n.isEscaped=!0,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`'`&&!n.inDoubleQuote)return n.inSingleQuote=!n.inSingleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`"`&&!n.inSingleQuote)return n.inDoubleQuote=!n.inDoubleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`#`&&Wr(r,n))return{newCmd:r,nextIndex:Ur(e,t),sepLen:0};let a=Hr(e,t,n);return{newCmd:r+(a===0?i:``),nextIndex:t,sepLen:a}}function qr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1,hasSyntaxError:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=a.sepLen-1):(n=a.newCmd,i=a.nextIndex)}return(r.inSingleQuote||r.inDoubleQuote||r.isEscaped)&&(r.hasSyntaxError=!0),n.trim()&&t.push(n.trim()),{commands:t,hasSyntaxError:r.hasSyntaxError}}function Jr(e){return qr(e).commands}function Yr(e,t,n){return t.isEscaped=!1,n+e}function Xr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}const Zr=/* @__PURE__ */ new Set([`@`,`*`,`#`,`?`,`-`,`$`,`!`,`0`]);function Qr(e,t,n){if(n.inSingleQuote||n.isEscaped||e[t]!==`$`||t+1>=e.length)return!1;let r=e[t+1];return!!(r===`{`||Zr.has(r)||r>=`1`&&r<=`9`||r===`_`||r>=`a`&&r<=`z`||r>=`A`&&r<=`Z`)}function $r(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped||e[t]!==`&`)return!1;let r=t>0?e[t-1]:``,i=t+1`}function ei(e,t,n){if(n.inSingleQuote||n.isEscaped)return!1;let r=e[t];return r==="`"||r===`$`&&t+1`)&&t+1`||r===`<`||r===`&`&&t+1`}function ri(e,t,n){return $r(e,t,n.state)||Qr(e,t,n.state)||ei(e,t,n.state)||ti(e,t,n.state)?(n.inspection.hasUnsupportedSyntax=!0,!0):ni(e,t,n.state)?(n.inspection.hasRedirection=!0,n.inspection.hasUnsupportedSyntax=!0,!0):!1}function ii(e,t,n,r){let i=e[t];return n.state.isEscaped?{word:Yr(i,n.state,r),hasChars:!0,skipped:!1}:i===`\\`&&!n.state.inSingleQuote?(n.state.isEscaped=!0,{word:r,hasChars:!1,skipped:!0}):(ri(e,t,n),Xr(i,n.state)?{word:r,hasChars:!0,skipped:!0}:{word:r+i,hasChars:!0,skipped:!1})}function ai(e){let t={tokens:[],hasUnsupportedSyntax:!1,hasRedirection:!1},n={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1},r={inspection:t,state:n},i=``,a=!1;for(let o=0;o0&&n.push(t)}return n}function fi(e,t){let n=di(e);for(let e of n)if(ui(e,t))return!0;return!1}function pi(e,t,n){return!n||n===t?!1:!fi(e[t]||``,n)}function mi(e,t,n){return!n||n===t?!1:!fi(e[t]||``,n)}function hi(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function gi(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function _i(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function vi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function yi(e){let[t]=e;return t===`eslint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function bi(e){let[t]=e;return t===`oxlint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function xi(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function Si(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function Ci(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:!e.some(e=>e===`--check`||e===`-c`)}function wi(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Ti(e){let[t]=e;if(t!==`prettier`)return!1;let n=e.some(e=>e===`--check`||e===`-c`||e===`--list-different`||e===`-l`),r=e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`));return n&&!r}function Ei(e){let[t]=e;if(t!==`oxfmt`)return!1;let n=e.some(e=>e===`--check`||e===`-c`),r=e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`));return n&&!r}function Di(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function Oi(e){let[t]=e;return t===`eslint`&&!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function ki(e){let[t]=e;return t===`oxlint`&&!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Ai(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ji(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function Mi(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:e.some(e=>e===`--check`||e===`-c`)}function Ni(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Pi(e){let[t,n]=e;return t!==`vp`||n!==`check`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Fi(e){if(e.length===0)return;let[t,n,r]=e;if((t===`npm`||t===`pnpm`||t===`yarn`||t===`bun`)&&n===`run`&&r)return r;if((t===`pnpm`||t===`bun`||t===`yarn`)&&n&&!n.startsWith(`-`))return n}function Ii(e){if(e.length>=3&&(e[0]===`sh`||e[0]===`bash`)&&e[1]===`-c`)return e[2]}function Li(e){return gi(e)||_i(e)||vi(e)||yi(e)||bi(e)||xi(e)||Si(e)||Ci(e)||wi(e)}function Ri(e){return Ti(e)||Ei(e)||Di(e)||Oi(e)||ki(e)||Ai(e)||ji(e)||Mi(e)||Ni(e)||Pi(e)}function zi(e,t,n){if(e.length===0)return`unknown`;if(hi(e))return`write-capable`;let r=Ii(e);if(r!==void 0)return Bi(r,t,n);let i=Fi(e);if(i){if(n.has(i))return`unknown`;n.add(i);let e=t[i];return e?Bi(e,t,n):`unknown`}return Li(e)?`write-capable`:Ri(e)?`read-only`:`unknown`}function Bi(e,t,n){let r=qr(e);if(r.hasSyntaxError)return`unknown`;let{commands:i}=r;if(i.length===0)return`unknown`;let a=!1;for(let e of i){let r=ai(e),i=zi(li(r.tokens),t,n);if(i===`write-capable`)return`write-capable`;if(r.hasUnsupportedSyntax||i===`unknown`)return`unknown`;i===`read-only`&&(a=!0)}return a?`read-only`:`unknown`}function Vi(e,t={}){return Bi(e,t,/* @__PURE__ */ new Set)}function Hi(e,t={},n=/* @__PURE__ */ new Set){return di(e).some(e=>{let r=Fi(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Hi(e,t,n):!1}let i=Ii(e);return i===void 0?gi(e)||_i(e)||vi(e)||Ci(e):Hi(i,t,n)})}function Ui(e,t={},n=/* @__PURE__ */ new Set){return di(e).some(e=>{let r=Fi(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Ui(e,t,n):!1}let i=Ii(e);return i===void 0?yi(e)||bi(e)||xi(e)||wi(e):Ui(i,t,n)})}function Wi(e,t={},n=/* @__PURE__ */ new Set){return di(e).some(e=>{let r=Fi(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Wi(e,t,n):!1}let i=Ii(e);if(i!==void 0)return Wi(i,t,n);if(Si(e))return!0;let[a,o]=e;return a===`vp`&&o===`check`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))})}function Gi(e,t,n){return t&&fi(e,t)?!0:n(e)}function Ki(e,t,n,r,i){let a=Gi(t,r,t=>Hi(t,e)),o=Gi(t,i,t=>Ui(t,e)),s=Wi(t,e);return a&&o?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:n}]:a&&!s?[{capability:`format`,scriptName:n}]:o&&!s?[{capability:`lint`,scriptName:n}]:s?[{capability:`autofix`,scriptName:n}]:[{capability:`typecheck`,capabilities:[],scriptName:n}]}function qi(e,t){return Hi(t[e],t)?{capability:`format`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function Ji(e,t){return Ui(t[e],t)?{capability:`lint`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function Yi(e,t,n){let r=[];return e&&r.push(qi(e,n)),t&&r.push(Ji(t,n)),r}function Xi(e,t,n,r,i){r&&pi(t,n,r)&&e.push(qi(r,t)),i&&mi(t,n,i)&&e.push(Ji(i,t))}function Zi(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Br(e,`fix`),r=Vr(e,`fix`);if(!t)return Yi(n,r,e);let i=Ki(e,e[t]||``,t,n,r);return Xi(i,e,t,n,r),i}function Qi(e){let t=[],n=Br(e,`check`),r=Vr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function $i(e,t){return t===`fix`?Zi(e):Qi(e)}var ea=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=$i(t,`fix`),r=$i(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=$i(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function ta(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function na(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ra=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=na(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},ia=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=ta(t,`@biomejs/biome`),r=na(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},aa=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ta(t,`prettier`),r=!!t?.prettier,i=na(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},oa=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ta(t,`eslint`),r=!!t?.eslintConfig,i=na(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},sa=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ta(t,`oxlint`),r=na(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ca=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ta(t,`oxfmt`),r=na(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},la=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new ea;vitePlusAdapter=new ra;biomeAdapter=new ia;prettierAdapter=new aa;eslintAdapter=new oa;oxlintAdapter=new sa;oxfmtAdapter=new ca;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},ua=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},da=class{id=`python`;name=`Python`;ruffAdapter=new ua;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},fa=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function pa(){let e=new fa;return e.registerProvider(new da),e.registerProvider(new la),e}const ma=pa();async function ha(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function ga(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(ma,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await ha(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function _a(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function va(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await _a(e,r,t)}}async function ya(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(ma,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function ba(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await ha(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await ga(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function xa(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await va(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Sa(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await ya(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ca(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await xa(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await Sa(e,r,n);return s&&i.push(s),i}async function wa(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(ma,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await ba(e,i);o&&r.push(o);let s=await Ca(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&wa();export{ga as executeJsWorkflow,va as executePythonWorkflow,ya as executeRuffAutofix,wa as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index 26802d53..a5d60fce 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -211,6 +211,31 @@ function handleQuoteToggle(ch: string, state: TokenizerState): boolean { return false; } +const SPECIAL_PARAMETERS = new Set(["@", "*", "#", "?", "-", "$", "!", "0"]); + +function isParameterExpansionStart(cmd: string, index: number, state: TokenizerState): boolean { + if (state.inSingleQuote || state.isEscaped) return false; + if (cmd[index] !== "$") return false; + if (index + 1 >= cmd.length) return false; + + const next = cmd[index + 1]; + + // Braced parameter expansion: ${...} + if (next === "{") return true; + + // Positional parameters: $1, $2, etc. or special parameters: $@, $*, $#, $?, $-, $$, $!, $0 + if (SPECIAL_PARAMETERS.has(next) || (next >= "1" && next <= "9")) { + return true; + } + + // Shell variable identifier: starts with letter or underscore + if (next === "_" || (next >= "a" && next <= "z") || (next >= "A" && next <= "Z")) { + return true; + } + + return false; +} + interface CommandInspection { tokens: string[]; hasUnsupportedSyntax: boolean; @@ -261,6 +286,10 @@ function inspectSpecialConstructs(cmd: string, i: number, ctx: TokenizeScanConte ctx.inspection.hasUnsupportedSyntax = true; return true; } + if (isParameterExpansionStart(cmd, i, ctx.state)) { + ctx.inspection.hasUnsupportedSyntax = true; + return true; + } if (isCommandSubstitutionStart(cmd, i, ctx.state)) { ctx.inspection.hasUnsupportedSyntax = true; return true; diff --git a/src/autofix/engine.ts b/src/autofix/engine.ts index 3cfd3cae..961d248a 100644 --- a/src/autofix/engine.ts +++ b/src/autofix/engine.ts @@ -14,19 +14,61 @@ export interface ExecutionResult { /** * Resolves local project binary safely without falling back to `npx` (which could download unpinned packages). - * Checks node_modules/.bin/ first, then PATH via io.which. + * On Unix-like systems, checks node_modules/.bin/. + * On Windows, resolves executable shims (preferring .cmd, then .bat, .exe, or extensionless). + * Falls back to PATH via io.which. */ export async function resolveProjectBinary( cwd: string, toolBinary: string, + platform: NodeJS.Platform = process.platform, ): Promise { - const localBinPath = path.join(cwd, "node_modules", ".bin", toolBinary); - if (fs.existsSync(localBinPath)) { - return localBinPath; + const binDir = path.join(cwd, "node_modules", ".bin"); + + const SUPPORTED_WIN_EXTENSIONS = new Set([".cmd", ".bat", ".exe"]); + + if (platform === "win32") { + const ext = path.extname(toolBinary).toLowerCase(); + // If the binary already has an extension, only accept supported Windows extensions + if (ext) { + if (!SUPPORTED_WIN_EXTENSIONS.has(ext)) { + return undefined; + } + const explicitPath = path.join(binDir, toolBinary); + if (fs.existsSync(explicitPath)) { + return explicitPath; + } + } else { + // Shims generated by npm/pnpm on Windows include .cmd, .bat, and .exe. + // @actions/exec launches .cmd and .bat through cmd.exe /D /S /C and .exe directly. + // Extensionless executable resolution order on Windows: + // 1. .cmd + // 2. .bat + // 3. .exe + // 4. Extensionless executable + const winExtensions = [".cmd", ".bat", ".exe", ""]; + for (const winExt of winExtensions) { + const candidate = path.join(binDir, `${toolBinary}${winExt}`); + if (fs.existsSync(candidate)) { + return candidate; + } + } + } + } else { + const localBinPath = path.join(binDir, toolBinary); + if (fs.existsSync(localBinPath)) { + return localBinPath; + } } const pathBin = await io.which(toolBinary, false); if (pathBin) { + if (platform === "win32") { + const pathExt = path.extname(pathBin).toLowerCase(); + if (pathExt && !SUPPORTED_WIN_EXTENSIONS.has(pathExt)) { + return undefined; + } + } return pathBin; } @@ -34,6 +76,8 @@ export async function resolveProjectBinary( } export class ExecutionEngine { + constructor(private readonly platform: NodeJS.Platform = process.platform) {} + /** * Resolves the executable path for a task at execution time (after dependencies are provisioned). */ @@ -51,7 +95,7 @@ export class ExecutionEngine { } // Tool adapters: resolve from node_modules/.bin or PATH - const resolved = await resolveProjectBinary(task.cwd, task.executable); + const resolved = await resolveProjectBinary(task.cwd, task.executable, this.platform); if (!resolved) { const toolName = task.toolName || task.toolId; const depName = task.requiredPackage || task.executable; diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index c4276941..37a9500b 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -18,7 +18,7 @@ import { classifyScript, resolveScriptTasks, } from "../src/autofix/adapters/javascript/script-adapter.js"; -import { ExecutionEngine } from "../src/autofix/engine.js"; +import { ExecutionEngine, resolveProjectBinary } from "../src/autofix/engine.js"; import { executeJsWorkflow, run } from "../src/autofix/index.js"; import { planExecution } from "../src/autofix/planner.js"; import { AutofixRegistry, createDefaultRegistry } from "../src/autofix/registry.js"; @@ -1560,6 +1560,62 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { expect(classifyScript("eslint \\>")).toBe("read-only"); }); + it("rejects shell parameter expansions outside single quotes in check mode", () => { + // Unquoted variable expansions + expect(classifyScript("eslint . $VAR")).toBe("unknown"); + expect(classifyScript("eslint . ${VAR}")).toBe("unknown"); + + // Quoted variable expansions + expect(classifyScript('eslint . "$VAR"')).toBe("unknown"); + expect(classifyScript('eslint . "${VAR}"')).toBe("unknown"); + + // Positional and special parameters + expect(classifyScript("eslint . $@")).toBe("unknown"); + expect(classifyScript('eslint . "$@"')).toBe("unknown"); + expect(classifyScript("eslint . $*")).toBe("unknown"); + expect(classifyScript('eslint . "$*"')).toBe("unknown"); + expect(classifyScript("eslint . $1")).toBe("unknown"); + expect(classifyScript("eslint . $2")).toBe("unknown"); + expect(classifyScript('eslint . "$1"')).toBe("unknown"); + expect(classifyScript("eslint . $?")).toBe("unknown"); + expect(classifyScript("eslint . $$")).toBe("unknown"); + expect(classifyScript("eslint . $!")).toBe("unknown"); + expect(classifyScript("eslint . $#")).toBe("unknown"); + + // Check mode resolves no tasks for scripts containing unsupported parameter expansion + expect( + resolveScriptTasks( + { + "lint:check": "eslint . $VAR", + "format:check": 'prettier --check . "${PRETTIER_ARGS}"', + }, + "check", + ), + ).toEqual([]); + + // Regression test: Environment variable injecting arguments into ESLint check script + // e.g. LINT_ARGS="--fix" would turn a check command into a modifying command + const envInjectionScripts = { + "lint:check": 'eslint . "$LINT_ARGS"', + }; + expect(classifyScript(envInjectionScripts["lint:check"])).toBe("unknown"); + expect(resolveScriptTasks(envInjectionScripts, "check")).toEqual([]); + + // Escaped dollar characters are literal and not shell expansions + expect(classifyScript("eslint . \\$VAR")).toBe("read-only"); + expect(classifyScript('eslint . "\\$VAR"')).toBe("read-only"); + + // Dollar characters inside single-quoted strings are literal (no shell parameter expansion) + expect(classifyScript("eslint . '$VAR'")).toBe("read-only"); + expect(classifyScript("eslint . '${VAR}'")).toBe("read-only"); + expect(classifyScript("eslint . '$@'")).toBe("read-only"); + expect(classifyScript("eslint . '$1'")).toBe("read-only"); + + // Literal dollar characters that are not shell expansions + expect(classifyScript("eslint . $")).toBe("read-only"); + expect(classifyScript("eslint . $.")).toBe("read-only"); + }); + it("falls back to fmt:check when format:check cannot be safely classified as read-only", () => { // 1. Unknown format:check with valid fmt:check -> selects fmt:check const unknownFormatWithValidFmt = { @@ -1613,6 +1669,138 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { }); describe("Registry Extensibility", () => { + it("resolves project binaries and Windows executable shims cleanly", async () => { + const binDir = path.join(tempDir, "node_modules", ".bin"); + fs.mkdirSync(binDir, { recursive: true }); + + // 1. Unix extensionless local binary + const prettierUnix = path.join(binDir, "prettier"); + fs.writeFileSync(prettierUnix, ""); + const resolvedUnix = await resolveProjectBinary(tempDir, "prettier", "linux"); + expect(resolvedUnix).toBe(prettierUnix); + + // On Windows without extension or shim, returns extensionless if exists + const resolvedWinFallback = await resolveProjectBinary(tempDir, "prettier", "win32"); + expect(resolvedWinFallback).toBe(prettierUnix); + + // 2. Windows .cmd local shim + const eslintCmd = path.join(binDir, "eslint.cmd"); + const eslintPs1 = path.join(binDir, "eslint.ps1"); + fs.writeFileSync(eslintCmd, "@echo off\n"); + fs.writeFileSync(eslintPs1, "Write-Host 'shim'\n"); + + // On win32, should resolve .cmd and NOT select .ps1 + const resolvedWinCmd = await resolveProjectBinary(tempDir, "eslint", "win32"); + expect(resolvedWinCmd).toBe(eslintCmd); + + // On linux, does not automatically append .cmd + const resolvedLinuxCmd = await resolveProjectBinary(tempDir, "eslint", "linux"); + expect(resolvedLinuxCmd).toBeUndefined(); + + // Explicit extensions provided on Windows: .cmd, .bat, .exe + const batShim = path.join(binDir, "tool.bat"); + const exeShim = path.join(binDir, "tool.exe"); + fs.writeFileSync(batShim, "@echo off\n"); + fs.writeFileSync(exeShim, ""); + + const resolvedExplicitCmd = await resolveProjectBinary(tempDir, "eslint.cmd", "win32"); + expect(resolvedExplicitCmd).toBe(eslintCmd); + + const resolvedExplicitBat = await resolveProjectBinary(tempDir, "tool.bat", "win32"); + expect(resolvedExplicitBat).toBe(batShim); + + const resolvedExplicitExe = await resolveProjectBinary(tempDir, "tool.exe", "win32"); + expect(resolvedExplicitExe).toBe(exeShim); + + // Explicit unsupported extensions (.ps1, .js, .sh, .vbs) must NOT be returned on Windows even if the files exist + const jsShim = path.join(binDir, "tool.js"); + const shShim = path.join(binDir, "tool.sh"); + const vbsShim = path.join(binDir, "tool.vbs"); + fs.writeFileSync(jsShim, "console.log('js');"); + fs.writeFileSync(shShim, "#!/bin/sh\nexit 0"); + fs.writeFileSync(vbsShim, "WScript.Quit 0"); + + expect(await resolveProjectBinary(tempDir, "eslint.ps1", "win32")).toBeUndefined(); + expect(await resolveProjectBinary(tempDir, "tool.js", "win32")).toBeUndefined(); + expect(await resolveProjectBinary(tempDir, "tool.sh", "win32")).toBeUndefined(); + expect(await resolveProjectBinary(tempDir, "tool.vbs", "win32")).toBeUndefined(); + + // Missing explicit shim returns undefined + const resolvedMissingExplicit = await resolveProjectBinary(tempDir, "missing.cmd", "win32"); + expect(resolvedMissingExplicit).toBeUndefined(); + + // 3. Missing local binary with successful io.which fallback + vi.spyOn(io, "which").mockImplementation(async (tool) => { + if (tool === "biome") return "/usr/local/bin/biome"; + return ""; + }); + const resolvedWhich = await resolveProjectBinary(tempDir, "biome", "linux"); + expect(resolvedWhich).toBe("/usr/local/bin/biome"); + + const resolvedWhichWin = await resolveProjectBinary(tempDir, "biome", "win32"); + expect(resolvedWhichWin).toBe("/usr/local/bin/biome"); + + // io.which returning unsupported extensions (.ps1, .js, .sh, .vbs) on Windows is rejected + vi.spyOn(io, "which").mockImplementation(async (tool) => { + if (tool === "ps-tool") return "C:\\tools\\ps-tool.ps1"; + if (tool === "js-tool") return "C:\\tools\\js-tool.js"; + if (tool === "sh-tool") return "C:\\tools\\sh-tool.sh"; + if (tool === "vbs-tool") return "C:\\tools\\vbs-tool.vbs"; + return ""; + }); + expect(await resolveProjectBinary(tempDir, "ps-tool", "win32")).toBeUndefined(); + expect(await resolveProjectBinary(tempDir, "js-tool", "win32")).toBeUndefined(); + expect(await resolveProjectBinary(tempDir, "sh-tool", "win32")).toBeUndefined(); + expect(await resolveProjectBinary(tempDir, "vbs-tool", "win32")).toBeUndefined(); + + // 4. Missing binary with no fallback result + const resolvedMissing = await resolveProjectBinary(tempDir, "nonexistent-tool", "linux"); + expect(resolvedMissing).toBeUndefined(); + + const resolvedMissingWin = await resolveProjectBinary(tempDir, "nonexistent-tool", "win32"); + expect(resolvedMissingWin).toBeUndefined(); + + // 5. Correct executable invocation via ExecutionEngine on Windows + const winEngine = new ExecutionEngine("win32"); + vi.mocked(exec.exec).mockResolvedValue(0); + + const winTask: ExecutionTask = { + id: "eslint-fix", + toolId: "eslint", + capability: "lint", + executable: "eslint", + args: ["--fix", "."], + cwd: tempDir, + mode: "fix", + }; + + const resolvedExe = await winEngine.resolveTaskExecutable(winTask); + expect(resolvedExe).toBe(eslintCmd); + + const results = await winEngine.executeTasks([winTask]); + expect(results).toHaveLength(1); + expect(results[0].exitCode).toBe(0); + expect(exec.exec).toHaveBeenCalledWith( + eslintCmd, + ["--fix", "."], + expect.objectContaining({ cwd: tempDir }), + ); + + // Verify that ExecutionEngine throws an understandable, actionable error when a .ps1 task is planned + const psTask: ExecutionTask = { + id: "ps-task", + toolId: "custom-ps", + capability: "lint", + executable: "tool.ps1", + args: ["check"], + cwd: tempDir, + mode: "check", + }; + await expect(winEngine.resolveTaskExecutable(psTask)).rejects.toThrow( + /Configured tool "custom-ps" could not run: executable "tool.ps1" is not available in node_modules\/\.bin or PATH/, + ); + }); + it("allows adding a new language provider and tool adapter without modifying the core orchestrator", async () => { const registry = new AutofixRegistry(); From df8d164a3884bc5bd92ce0e568216597100baea5 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2026 09:25:46 +0700 Subject: [PATCH 23/25] fix(autofix): nested script delegation and classification issues (#333) * fix(autofix): nested script delegation and classification issues - F-01: Prevent duplicate formatting and linting task execution from nested script delegation via recursive delegation resolver. - F-02: Reject commands with file-writing side effects (cache, output-file, reporter-file, init, etc.) from read-only classification. - F-03: Use active call-path tracking instead of global visited sets to permit sequential delegation without false circular-dependency detection. - Synchronize dist/autofix.mjs bundle. * fix(autofix): nested script delegation and classification issues - F-01: Prevent duplicate formatting and linting task execution from nested script delegation via recursive delegation resolver. - F-02: Reject commands with file-writing side effects (cache, output-file, reporter-file, init, etc.) from read-only classification, while classifying ESLint --fix-dry-run as read-only. - F-03: Use active call-path tracking instead of global visited sets to permit sequential delegation without false circular-dependency detection. - Add changeset for patch release. - Synchronize dist/autofix.mjs bundle. --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- .changeset/fix-autofix-script-delegation.md | 5 + dist/autofix.mjs | 12 +- .../adapters/javascript/script-adapter.ts | 241 +++++++++++---- tests/autofix-architecture.test.ts | 283 ++++++++++++++++++ 4 files changed, 473 insertions(+), 68 deletions(-) create mode 100644 .changeset/fix-autofix-script-delegation.md diff --git a/.changeset/fix-autofix-script-delegation.md b/.changeset/fix-autofix-script-delegation.md new file mode 100644 index 00000000..cb779b4e --- /dev/null +++ b/.changeset/fix-autofix-script-delegation.md @@ -0,0 +1,5 @@ +--- +"@area44/workflows": patch +--- + +Fix autofix script delegation and classification issues (nested delegation, sequential delegation, and dry-run/write-option classification). diff --git a/dist/autofix.mjs b/dist/autofix.mjs index 5deaa093..85bad52b 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -304,10 +304,10 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t,n=process.platform){let r=p.join(e,`node_modules`,`.bin`),i=/* @__PURE__ */ new Set([`.cmd`,`.bat`,`.exe`]);if(n===`win32`){let e=p.extname(t).toLowerCase();if(e){if(!i.has(e))return;let n=p.join(r,t);if(f.existsSync(n))return n}else for(let e of[`.cmd`,`.bat`,`.exe`,``]){let n=p.join(r,`${t}${e}`);if(f.existsSync(n))return n}}else{let e=p.join(r,t);if(f.existsSync(e))return e}let a=await Vt(t,!1);if(a){if(n===`win32`){let e=p.extname(a).toLowerCase();if(e&&!i.has(e))return}return a}}var Ar=class{platform;constructor(e=process.platform){this.platform=e}async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable,this.platform);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`)&&t.has(`assist`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)if(t.add(e.capability),e.capabilities)for(let n of e.capabilities)t.add(n);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` -`)}function Rr(e){for(let t of[`format:write`,`format:fix`,`format`,`fmt`])if(e[t]&&Hi(e[t],e))return t}function zr(e){if(e[`format:check`]&&Vi(e[`format:check`],e)===`read-only`)return`format:check`;if(e[`fmt:check`]&&Vi(e[`fmt:check`],e)===`read-only`)return`fmt:check`}function Br(e,t){return t===`fix`?Rr(e):zr(e)}function Vr(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`]&&Vi(e[`lint:check`],e)===`read-only`)return`lint:check`;if(e.lint&&Vi(e.lint,e)===`read-only`)return`lint`}function Hr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` +`)}function Rr(e){for(let t of[`format:write`,`format:fix`,`format`,`fmt`])if(e[t]&&qi(e[t],e))return t}function zr(e){if(e[`format:check`]&&Ki(e[`format:check`],e)===`read-only`)return`format:check`;if(e[`fmt:check`]&&Ki(e[`fmt:check`],e)===`read-only`)return`fmt:check`}function Br(e,t){return t===`fix`?Rr(e):zr(e)}function Vr(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`]&&Ki(e[`lint:check`],e)===`read-only`)return`lint:check`;if(e.lint&&Ki(e.lint,e)===`read-only`)return`lint`}function Hr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` `?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Ur(e,t){let n=t;for(;nt?n-1:t}function Wr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Gr(e,t){return t.isEscaped=!1,{ch:e,advance:!0}}function Kr(e,t,n,r){let i=e[t];if(n.isEscaped)return{newCmd:r+Gr(i,n).ch,nextIndex:t,sepLen:0};if(i===`\\`&&!n.inSingleQuote)return n.isEscaped=!0,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`'`&&!n.inDoubleQuote)return n.inSingleQuote=!n.inSingleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`"`&&!n.inSingleQuote)return n.inDoubleQuote=!n.inDoubleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`#`&&Wr(r,n))return{newCmd:r,nextIndex:Ur(e,t),sepLen:0};let a=Hr(e,t,n);return{newCmd:r+(a===0?i:``),nextIndex:t,sepLen:a}}function qr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1,hasSyntaxError:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=a.sepLen-1):(n=a.newCmd,i=a.nextIndex)}return(r.inSingleQuote||r.inDoubleQuote||r.isEscaped)&&(r.hasSyntaxError=!0),n.trim()&&t.push(n.trim()),{commands:t,hasSyntaxError:r.hasSyntaxError}}function Jr(e){return qr(e).commands}function Yr(e,t,n){return t.isEscaped=!1,n+e}function Xr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}const Zr=/* @__PURE__ */ new Set([`@`,`*`,`#`,`?`,`-`,`$`,`!`,`0`]);function Qr(e,t,n){if(n.inSingleQuote||n.isEscaped||e[t]!==`$`||t+1>=e.length)return!1;let r=e[t+1];return!!(r===`{`||Zr.has(r)||r>=`1`&&r<=`9`||r===`_`||r>=`a`&&r<=`z`||r>=`A`&&r<=`Z`)}function $r(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped||e[t]!==`&`)return!1;let r=t>0?e[t-1]:``,i=t+1`}function ei(e,t,n){if(n.inSingleQuote||n.isEscaped)return!1;let r=e[t];return r==="`"||r===`$`&&t+1`)&&t+1`||r===`<`||r===`&`&&t+1`}function ri(e,t,n){return $r(e,t,n.state)||Qr(e,t,n.state)||ei(e,t,n.state)||ti(e,t,n.state)?(n.inspection.hasUnsupportedSyntax=!0,!0):ni(e,t,n.state)?(n.inspection.hasRedirection=!0,n.inspection.hasUnsupportedSyntax=!0,!0):!1}function ii(e,t,n,r){let i=e[t];return n.state.isEscaped?{word:Yr(i,n.state,r),hasChars:!0,skipped:!1}:i===`\\`&&!n.state.inSingleQuote?(n.state.isEscaped=!0,{word:r,hasChars:!1,skipped:!0}):(ri(e,t,n),Xr(i,n.state)?{word:r,hasChars:!0,skipped:!0}:{word:r+i,hasChars:!0,skipped:!1})}function ai(e){let t={tokens:[],hasUnsupportedSyntax:!1,hasRedirection:!1},n={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1},r={inspection:t,state:n},i=``,a=!1;for(let o=0;o0&&n.push(t)}return n}function fi(e,t){let n=di(e);for(let e of n)if(ui(e,t))return!0;return!1}function pi(e,t,n){return!n||n===t?!1:!fi(e[t]||``,n)}function mi(e,t,n){return!n||n===t?!1:!fi(e[t]||``,n)}function hi(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function gi(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function _i(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function vi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function yi(e){let[t]=e;return t===`eslint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function bi(e){let[t]=e;return t===`oxlint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function xi(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function Si(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function Ci(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:!e.some(e=>e===`--check`||e===`-c`)}function wi(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Ti(e){let[t]=e;if(t!==`prettier`)return!1;let n=e.some(e=>e===`--check`||e===`-c`||e===`--list-different`||e===`-l`),r=e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`));return n&&!r}function Ei(e){let[t]=e;if(t!==`oxfmt`)return!1;let n=e.some(e=>e===`--check`||e===`-c`),r=e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`));return n&&!r}function Di(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function Oi(e){let[t]=e;return t===`eslint`&&!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function ki(e){let[t]=e;return t===`oxlint`&&!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Ai(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function ji(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:!e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function Mi(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:e.some(e=>e===`--check`||e===`-c`)}function Ni(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Pi(e){let[t,n]=e;return t!==`vp`||n!==`check`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Fi(e){if(e.length===0)return;let[t,n,r]=e;if((t===`npm`||t===`pnpm`||t===`yarn`||t===`bun`)&&n===`run`&&r)return r;if((t===`pnpm`||t===`bun`||t===`yarn`)&&n&&!n.startsWith(`-`))return n}function Ii(e){if(e.length>=3&&(e[0]===`sh`||e[0]===`bash`)&&e[1]===`-c`)return e[2]}function Li(e){return gi(e)||_i(e)||vi(e)||yi(e)||bi(e)||xi(e)||Si(e)||Ci(e)||wi(e)}function Ri(e){return Ti(e)||Ei(e)||Di(e)||Oi(e)||ki(e)||Ai(e)||ji(e)||Mi(e)||Ni(e)||Pi(e)}function zi(e,t,n){if(e.length===0)return`unknown`;if(hi(e))return`write-capable`;let r=Ii(e);if(r!==void 0)return Bi(r,t,n);let i=Fi(e);if(i){if(n.has(i))return`unknown`;n.add(i);let e=t[i];return e?Bi(e,t,n):`unknown`}return Li(e)?`write-capable`:Ri(e)?`read-only`:`unknown`}function Bi(e,t,n){let r=qr(e);if(r.hasSyntaxError)return`unknown`;let{commands:i}=r;if(i.length===0)return`unknown`;let a=!1;for(let e of i){let r=ai(e),i=zi(li(r.tokens),t,n);if(i===`write-capable`)return`write-capable`;if(r.hasUnsupportedSyntax||i===`unknown`)return`unknown`;i===`read-only`&&(a=!0)}return a?`read-only`:`unknown`}function Vi(e,t={}){return Bi(e,t,/* @__PURE__ */ new Set)}function Hi(e,t={},n=/* @__PURE__ */ new Set){return di(e).some(e=>{let r=Fi(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Hi(e,t,n):!1}let i=Ii(e);return i===void 0?gi(e)||_i(e)||vi(e)||Ci(e):Hi(i,t,n)})}function Ui(e,t={},n=/* @__PURE__ */ new Set){return di(e).some(e=>{let r=Fi(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Ui(e,t,n):!1}let i=Ii(e);return i===void 0?yi(e)||bi(e)||xi(e)||wi(e):Ui(i,t,n)})}function Wi(e,t={},n=/* @__PURE__ */ new Set){return di(e).some(e=>{let r=Fi(e);if(r){if(n.has(r))return!1;n.add(r);let e=t[r];return e?Wi(e,t,n):!1}let i=Ii(e);if(i!==void 0)return Wi(i,t,n);if(Si(e))return!0;let[a,o]=e;return a===`vp`&&o===`check`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))})}function Gi(e,t,n){return t&&fi(e,t)?!0:n(e)}function Ki(e,t,n,r,i){let a=Gi(t,r,t=>Hi(t,e)),o=Gi(t,i,t=>Ui(t,e)),s=Wi(t,e);return a&&o?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:n}]:a&&!s?[{capability:`format`,scriptName:n}]:o&&!s?[{capability:`lint`,scriptName:n}]:s?[{capability:`autofix`,scriptName:n}]:[{capability:`typecheck`,capabilities:[],scriptName:n}]}function qi(e,t){return Hi(t[e],t)?{capability:`format`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function Ji(e,t){return Ui(t[e],t)?{capability:`lint`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function Yi(e,t,n){let r=[];return e&&r.push(qi(e,n)),t&&r.push(Ji(t,n)),r}function Xi(e,t,n,r,i){r&&pi(t,n,r)&&e.push(qi(r,t)),i&&mi(t,n,i)&&e.push(Ji(i,t))}function Zi(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Br(e,`fix`),r=Vr(e,`fix`);if(!t)return Yi(n,r,e);let i=Ki(e,e[t]||``,t,n,r);return Xi(i,e,t,n,r),i}function Qi(e){let t=[],n=Br(e,`check`),r=Vr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function $i(e,t){return t===`fix`?Zi(e):Qi(e)}var ea=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=$i(t,`fix`),r=$i(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=$i(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function ta(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function na(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ra=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=na(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},ia=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=ta(t,`@biomejs/biome`),r=na(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},aa=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ta(t,`prettier`),r=!!t?.prettier,i=na(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},oa=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ta(t,`eslint`),r=!!t?.eslintConfig,i=na(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},sa=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=ta(t,`oxlint`),r=na(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ca=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=ta(t,`oxfmt`),r=na(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},la=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new ea;vitePlusAdapter=new ra;biomeAdapter=new ia;prettierAdapter=new aa;eslintAdapter=new oa;oxlintAdapter=new sa;oxfmtAdapter=new ca;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},ua=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},da=class{id=`python`;name=`Python`;ruffAdapter=new ua;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},fa=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function pa(){let e=new fa;return e.registerProvider(new da),e.registerProvider(new la),e}const ma=pa();async function ha(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function ga(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(ma,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await ha(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function _a(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function va(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await _a(e,r,t)}}async function ya(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(ma,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function ba(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await ha(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}return null}return await ga(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function xa(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await va(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Sa(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await ya(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ca(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await xa(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await Sa(e,r,n);return s&&i.push(s),i}async function wa(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(ma,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await ba(e,i);o&&r.push(o);let s=await Ca(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&wa();export{ga as executeJsWorkflow,va as executePythonWorkflow,ya as executeRuffAutofix,wa as run,cn as sanitizePackageManager}; \ No newline at end of file +`;)n++;return n>t?n-1:t}function Wr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Gr(e,t){return t.isEscaped=!1,{ch:e,advance:!0}}function Kr(e,t,n,r){let i=e[t];if(n.isEscaped)return{newCmd:r+Gr(i,n).ch,nextIndex:t,sepLen:0};if(i===`\\`&&!n.inSingleQuote)return n.isEscaped=!0,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`'`&&!n.inDoubleQuote)return n.inSingleQuote=!n.inSingleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`"`&&!n.inSingleQuote)return n.inDoubleQuote=!n.inDoubleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`#`&&Wr(r,n))return{newCmd:r,nextIndex:Ur(e,t),sepLen:0};let a=Hr(e,t,n);return{newCmd:r+(a===0?i:``),nextIndex:t,sepLen:a}}function qr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1,hasSyntaxError:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=a.sepLen-1):(n=a.newCmd,i=a.nextIndex)}return(r.inSingleQuote||r.inDoubleQuote||r.isEscaped)&&(r.hasSyntaxError=!0),n.trim()&&t.push(n.trim()),{commands:t,hasSyntaxError:r.hasSyntaxError}}function Jr(e){return qr(e).commands}function Yr(e,t,n){return t.isEscaped=!1,n+e}function Xr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}const Zr=/* @__PURE__ */ new Set([`@`,`*`,`#`,`?`,`-`,`$`,`!`,`0`]);function Qr(e,t,n){if(n.inSingleQuote||n.isEscaped||e[t]!==`$`||t+1>=e.length)return!1;let r=e[t+1];return!!(r===`{`||Zr.has(r)||r>=`1`&&r<=`9`||r===`_`||r>=`a`&&r<=`z`||r>=`A`&&r<=`Z`)}function $r(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped||e[t]!==`&`)return!1;let r=t>0?e[t-1]:``,i=t+1`}function ei(e,t,n){if(n.inSingleQuote||n.isEscaped)return!1;let r=e[t];return r==="`"||r===`$`&&t+1`)&&t+1`||r===`<`||r===`&`&&t+1`}function ri(e,t,n){return $r(e,t,n.state)||Qr(e,t,n.state)||ei(e,t,n.state)||ti(e,t,n.state)?(n.inspection.hasUnsupportedSyntax=!0,!0):ni(e,t,n.state)?(n.inspection.hasRedirection=!0,n.inspection.hasUnsupportedSyntax=!0,!0):!1}function ii(e,t,n,r){let i=e[t];return n.state.isEscaped?{word:Yr(i,n.state,r),hasChars:!0,skipped:!1}:i===`\\`&&!n.state.inSingleQuote?(n.state.isEscaped=!0,{word:r,hasChars:!1,skipped:!0}):(ri(e,t,n),Xr(i,n.state)?{word:r,hasChars:!0,skipped:!0}:{word:r+i,hasChars:!0,skipped:!1})}function ai(e){let t={tokens:[],hasUnsupportedSyntax:!1,hasRedirection:!1},n={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1},r={inspection:t,state:n},i=``,a=!1;for(let o=0;o0&&n.push(t)}return n}function fi(e,t,n={},r=/* @__PURE__ */ new Set){if(!e||!t)return!1;let i=di(n[e]===void 0?e:n[e]);for(let e of i){if(ui(e,t))return!0;let i=Bi(e);if(i){if(i===t)return!0;if(!r.has(i)&&n[i]!==void 0){r.add(i);try{if(fi(n[i],t,n,r))return!0}finally{r.delete(i)}}}let a=Vi(e);if(a!==void 0&&fi(a,t,n,r))return!0}return!1}function pi(e,t,n){return!n||n===t?!1:!fi(e[t]||``,n,e)}function mi(e,t,n){return!n||n===t?!1:!fi(e[t]||``,n,e)}function hi(e){let[t]=e;return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||(e===`--fix`||e.startsWith(`--fix=`))&&(t!==`eslint`||e!==`--fix-dry-run`))}function gi(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function _i(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function vi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function yi(e){let[t]=e;return t===`eslint`&&e.some(e=>(e===`--fix`||e.startsWith(`--fix=`))&&e!==`--fix-dry-run`)}function bi(e){let[t]=e;return t===`oxlint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function xi(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function Si(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function Ci(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:!e.some(e=>e===`--check`||e===`-c`)}function wi(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Ti(e){return e.some(e=>e===`--fix`||e.startsWith(`--fix=`)&&e!==`--fix-dry-run`||e===`-o`||e.startsWith(`-o=`)||e===`--output-file`||e.startsWith(`--output-file=`)||e===`--cache`||e===`--cache-file`||e.startsWith(`--cache-file=`)||e===`--cache-location`||e.startsWith(`--cache-location=`))}function Ei(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--cache`||e===`--cache-location`||e.startsWith(`--cache-location=`)||e===`--insert-pragma`)}function Di(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`)||e===`--reporter-file`||e.startsWith(`--reporter-file=`)||e===`--log-file`||e.startsWith(`--log-file=`))}function Oi(e){return e.some(e=>e===`--fix`||e.startsWith(`--fix=`)||e===`--fix-suggestions`||e===`--fix-dangerously`||e===`--init`)}function ki(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--init`||e===`--migrate`||e.startsWith(`--migrate=`))}function Ai(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`--check`||e===`-c`||e===`--list-different`||e===`-l`)&&!Ei(e)}function ji(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`--check`||e===`-c`)&&!ki(e)}function Mi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:!Di(e)}function Ni(e){let[t]=e;return t===`eslint`&&!Ti(e)}function Pi(e){let[t]=e;return t===`oxlint`&&!Oi(e)}function Fi(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:!Di(e)}function Ii(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:!Di(e)}function Li(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:e.some(e=>e===`--check`||e===`-c`)&&!ki(e)}function Ri(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:!Oi(e)}function zi(e){let[t,n]=e;return t!==`vp`||n!==`check`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Bi(e){if(e.length===0)return;let[t,n,r]=e;if((t===`npm`||t===`pnpm`||t===`yarn`||t===`bun`)&&n===`run`&&r)return r;if((t===`pnpm`||t===`bun`||t===`yarn`)&&n&&!n.startsWith(`-`))return n}function Vi(e){if(e.length>=3&&(e[0]===`sh`||e[0]===`bash`)&&e[1]===`-c`)return e[2]}function Hi(e){return gi(e)||_i(e)||vi(e)||yi(e)||bi(e)||xi(e)||Si(e)||Ci(e)||wi(e)}function Ui(e){return Ai(e)||ji(e)||Mi(e)||Ni(e)||Pi(e)||Fi(e)||Ii(e)||Li(e)||Ri(e)||zi(e)}function Wi(e,t,n){if(e.length===0)return`unknown`;if(hi(e))return`write-capable`;let r=Vi(e);if(r!==void 0)return Gi(r,t,n);let i=Bi(e);if(i){if(n.has(i))return`unknown`;let e=t[i];if(!e)return`unknown`;n.add(i);try{return Gi(e,t,n)}finally{n.delete(i)}}return Hi(e)?`write-capable`:Ui(e)?`read-only`:`unknown`}function Gi(e,t,n){let r=qr(e);if(r.hasSyntaxError)return`unknown`;let{commands:i}=r;if(i.length===0)return`unknown`;let a=!1;for(let e of i){let r=ai(e),i=Wi(li(r.tokens),t,n);if(i===`write-capable`)return`write-capable`;if(r.hasUnsupportedSyntax||i===`unknown`)return`unknown`;i===`read-only`&&(a=!0)}return a?`read-only`:`unknown`}function Ki(e,t={}){return Gi(e,t,/* @__PURE__ */ new Set)}function qi(e,t={},n=/* @__PURE__ */ new Set){return di(e).some(e=>{let r=Bi(e);if(r){if(n.has(r))return!1;let e=t[r];if(!e)return!1;n.add(r);try{return qi(e,t,n)}finally{n.delete(r)}}let i=Vi(e);return i===void 0?gi(e)||_i(e)||vi(e)||Ci(e):qi(i,t,n)})}function Ji(e,t={},n=/* @__PURE__ */ new Set){return di(e).some(e=>{let r=Bi(e);if(r){if(n.has(r))return!1;let e=t[r];if(!e)return!1;n.add(r);try{return Ji(e,t,n)}finally{n.delete(r)}}let i=Vi(e);return i===void 0?yi(e)||bi(e)||xi(e)||wi(e):Ji(i,t,n)})}function Yi(e,t={},n=/* @__PURE__ */ new Set){return di(e).some(e=>{let r=Bi(e);if(r){if(n.has(r))return!1;let e=t[r];if(!e)return!1;n.add(r);try{return Yi(e,t,n)}finally{n.delete(r)}}let i=Vi(e);if(i!==void 0)return Yi(i,t,n);if(Si(e))return!0;let[a,o]=e;return a===`vp`&&o===`check`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))})}function Xi(e,t,n,r){return t&&fi(e,t,n)?!0:r(e)}function Zi(e,t,n,r,i){let a=Xi(t,r,e,t=>qi(t,e)),o=Xi(t,i,e,t=>Ji(t,e)),s=Yi(t,e);return a&&o?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:n}]:a&&!s?[{capability:`format`,scriptName:n}]:o&&!s?[{capability:`lint`,scriptName:n}]:s?[{capability:`autofix`,scriptName:n}]:[{capability:`typecheck`,capabilities:[],scriptName:n}]}function Qi(e,t){return qi(t[e],t)?{capability:`format`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function $i(e,t){return Ji(t[e],t)?{capability:`lint`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function ea(e,t,n){let r=[];return e&&r.push(Qi(e,n)),t&&r.push($i(t,n)),r}function ta(e,t,n,r,i){r&&pi(t,n,r)&&e.push(Qi(r,t)),i&&mi(t,n,i)&&e.push($i(i,t))}function na(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Br(e,`fix`),r=Vr(e,`fix`);if(!t)return ea(n,r,e);let i=Zi(e,e[t]||``,t,n,r);return ta(i,e,t,n,r),i}function ra(e){let t=[],n=Br(e,`check`),r=Vr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function ia(e,t){return t===`fix`?na(e):ra(e)}var aa=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=ia(t,`fix`),r=ia(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=ia(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function oa(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function sa(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ca=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=sa(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},la=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=oa(t,`@biomejs/biome`),r=sa(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},ua=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=oa(t,`prettier`),r=!!t?.prettier,i=sa(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},da=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=oa(t,`eslint`),r=!!t?.eslintConfig,i=sa(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},fa=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=oa(t,`oxlint`),r=sa(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},pa=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=oa(t,`oxfmt`),r=sa(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},ma=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new aa;vitePlusAdapter=new ca;biomeAdapter=new la;prettierAdapter=new ua;eslintAdapter=new da;oxlintAdapter=new fa;oxfmtAdapter=new pa;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},ha=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},ga=class{id=`python`;name=`Python`;ruffAdapter=new ha;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},_a=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function va(){let e=new _a;return e.registerProvider(new ga),e.registerProvider(new ma),e}const ya=va();async function ba(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function xa(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(ya,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await ba(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function Sa(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function Ca(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await Sa(e,r,t)}}async function wa(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(ya,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function Ta(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await ba(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await xa(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ea(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await Ca(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Da(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await wa(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Oa(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await Ea(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await Da(e,r,n);return s&&i.push(s),i}async function ka(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(ya,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Ta(e,i);o&&r.push(o);let s=await Oa(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&ka();export{xa as executeJsWorkflow,Ca as executePythonWorkflow,wa as executeRuffAutofix,ka as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index a5d60fce..fa6e9bc0 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -431,21 +431,65 @@ export function parseCommandInvocations(scriptBody: string): string[][] { } /** - * Recognizes actual supported package-manager script invocation commands: - * e.g. `npm run format:write`, `pnpm run format`, `bun run lint:fix`, `yarn run lint:fix`, `pnpm format`, `bun format`, - * including quoted script arguments (e.g. `npm run "format:write"`) and environment variable assignments. - * Does not match `echo format`, comments, quoted explanatory text, or substrings. + * Recursively checks whether a script body or script reference delegates to a target script, + * safely handling arbitrary depth, shell wrappers (`sh -c`, `bash -c`), and circular dependencies. */ -export function doesFixScriptDelegateTo(fixScriptBody: string, targetScriptName: string): boolean { - const invocations = parseCommandInvocations(fixScriptBody); +export function delegatesToScript( + scriptBodyOrName: string, + targetScriptName: string, + scripts: Record = {}, + activePath: Set = new Set(), +): boolean { + if (!scriptBodyOrName || !targetScriptName) return false; + + const scriptBody = + scripts[scriptBodyOrName] !== undefined ? scripts[scriptBodyOrName] : scriptBodyOrName; + + const invocations = parseCommandInvocations(scriptBody); for (const tokens of invocations) { if (matchesPmDelegation(tokens, targetScriptName)) { return true; } + + const delegated = extractDelegatedTarget(tokens); + if (delegated) { + if (delegated === targetScriptName) return true; + if (!activePath.has(delegated) && scripts[delegated] !== undefined) { + activePath.add(delegated); + try { + if (delegatesToScript(scripts[delegated], targetScriptName, scripts, activePath)) { + return true; + } + } finally { + activePath.delete(delegated); + } + } + } + + const wrappedScript = extractShellWrapperScript(tokens); + if (wrappedScript !== undefined) { + if (delegatesToScript(wrappedScript, targetScriptName, scripts, activePath)) { + return true; + } + } } return false; } +/** + * Recognizes actual supported package-manager script invocation commands: + * e.g. `npm run format:write`, `pnpm run format`, `bun run lint:fix`, `yarn run lint:fix`, `pnpm format`, `bun format`, + * including quoted script arguments (e.g. `npm run "format:write"`) and environment variable assignments. + * Supports recursive inspection when scripts are provided. + */ +export function doesFixScriptDelegateTo( + fixScriptBody: string, + targetScriptName: string, + scripts: Record = {}, +): boolean { + return delegatesToScript(fixScriptBody, targetScriptName, scripts); +} + function shouldIncludeFormatWithFix( scripts: Record, fixScript: string, @@ -453,7 +497,7 @@ function shouldIncludeFormatWithFix( ): boolean { if (!formatScript || formatScript === fixScript) return false; const fixBody = scripts[fixScript] || ""; - return !doesFixScriptDelegateTo(fixBody, formatScript); + return !delegatesToScript(fixBody, formatScript, scripts); } function shouldIncludeLintWithFix( @@ -463,17 +507,17 @@ function shouldIncludeLintWithFix( ): boolean { if (!lintScript || lintScript === fixScript) return false; const fixBody = scripts[fixScript] || ""; - return !doesFixScriptDelegateTo(fixBody, lintScript); + return !delegatesToScript(fixBody, lintScript, scripts); } function hasWriteFlag(tokens: string[]): boolean { + const [exe] = tokens; return tokens.some( (t) => t === "-w" || t === "--write" || t.startsWith("--write=") || - t === "--fix" || - t.startsWith("--fix="), + ((t === "--fix" || t.startsWith("--fix=")) && !(exe === "eslint" && t === "--fix-dry-run")), ); } @@ -498,7 +542,7 @@ function isBiomeFormatWrite(tokens: string[]): boolean { function isEslintFix(tokens: string[]): boolean { const [exe] = tokens; if (exe !== "eslint") return false; - return tokens.some((t) => t === "--fix" || t.startsWith("--fix=")); + return tokens.some((t) => (t === "--fix" || t.startsWith("--fix=")) && t !== "--fix-dry-run"); } function isOxlintFix(tokens: string[]): boolean { @@ -546,79 +590,130 @@ function isVpLintFix(tokens: string[]): boolean { return tokens.some((t) => t === "--fix" || t.startsWith("--fix=")); } +function hasEslintWriteOption(tokens: string[]): boolean { + return tokens.some( + (t) => + t === "--fix" || + (t.startsWith("--fix=") && t !== "--fix-dry-run") || + t === "-o" || + t.startsWith("-o=") || + t === "--output-file" || + t.startsWith("--output-file=") || + t === "--cache" || + t === "--cache-file" || + t.startsWith("--cache-file=") || + t === "--cache-location" || + t.startsWith("--cache-location="), + ); +} + +function hasPrettierWriteOption(tokens: string[]): boolean { + return tokens.some( + (t) => + t === "-w" || + t === "--write" || + t.startsWith("--write=") || + t === "--cache" || + t === "--cache-location" || + t.startsWith("--cache-location=") || + t === "--insert-pragma", + ); +} + +function hasBiomeWriteOption(tokens: string[]): boolean { + return tokens.some( + (t) => + t === "-w" || + t === "--write" || + t.startsWith("--write=") || + t === "--fix" || + t.startsWith("--fix=") || + t === "--reporter-file" || + t.startsWith("--reporter-file=") || + t === "--log-file" || + t.startsWith("--log-file="), + ); +} + +function hasOxlintWriteOption(tokens: string[]): boolean { + return tokens.some( + (t) => + t === "--fix" || + t.startsWith("--fix=") || + t === "--fix-suggestions" || + t === "--fix-dangerously" || + t === "--init", + ); +} + +function hasOxfmtWriteOption(tokens: string[]): boolean { + return tokens.some( + (t) => + t === "-w" || + t === "--write" || + t.startsWith("--write=") || + t === "--init" || + t === "--migrate" || + t.startsWith("--migrate="), + ); +} + function isPrettierCheck(tokens: string[]): boolean { const [exe] = tokens; if (exe !== "prettier") return false; const hasCheck = tokens.some( (t) => t === "--check" || t === "-c" || t === "--list-different" || t === "-l", ); - const hasWrite = tokens.some((t) => t === "-w" || t === "--write" || t.startsWith("--write=")); - return hasCheck && !hasWrite; + return hasCheck && !hasPrettierWriteOption(tokens); } function isOxfmtCheck(tokens: string[]): boolean { const [exe] = tokens; if (exe !== "oxfmt") return false; const hasCheck = tokens.some((t) => t === "--check" || t === "-c"); - const hasWrite = tokens.some((t) => t === "-w" || t === "--write" || t.startsWith("--write=")); - return hasCheck && !hasWrite; + return hasCheck && !hasOxfmtWriteOption(tokens); } function isBiomeFormatCheck(tokens: string[]): boolean { const [exe, sub] = tokens; if (exe !== "biome" || sub !== "format") return false; - const hasWrite = tokens.some((t) => t === "-w" || t === "--write" || t.startsWith("--write=")); - return !hasWrite; + return !hasBiomeWriteOption(tokens); } function isEslintCheck(tokens: string[]): boolean { const [exe] = tokens; if (exe !== "eslint") return false; - return !tokens.some((t) => t === "--fix" || t.startsWith("--fix=")); + return !hasEslintWriteOption(tokens); } function isOxlintCheck(tokens: string[]): boolean { const [exe] = tokens; if (exe !== "oxlint") return false; - return !tokens.some((t) => t === "--fix" || t.startsWith("--fix=")); + return !hasOxlintWriteOption(tokens); } function isBiomeLintCheck(tokens: string[]): boolean { const [exe, sub] = tokens; if (exe !== "biome" || sub !== "lint") return false; - return !tokens.some( - (t) => - t === "-w" || - t === "--write" || - t.startsWith("--write=") || - t === "--fix" || - t.startsWith("--fix="), - ); + return !hasBiomeWriteOption(tokens); } function isBiomeCheckCheck(tokens: string[]): boolean { const [exe, sub] = tokens; if (exe !== "biome" || sub !== "check") return false; - return !tokens.some( - (t) => - t === "-w" || - t === "--write" || - t.startsWith("--write=") || - t === "--fix" || - t.startsWith("--fix="), - ); + return !hasBiomeWriteOption(tokens); } function isVpFmtCheck(tokens: string[]): boolean { const [exe, sub] = tokens; if (exe !== "vp" || sub !== "fmt") return false; - return tokens.some((t) => t === "--check" || t === "-c"); + return tokens.some((t) => t === "--check" || t === "-c") && !hasOxfmtWriteOption(tokens); } function isVpLintCheck(tokens: string[]): boolean { const [exe, sub] = tokens; if (exe !== "vp" || sub !== "lint") return false; - return !tokens.some((t) => t === "--fix" || t.startsWith("--fix=")); + return !hasOxlintWriteOption(tokens); } function isVpCheckCheck(tokens: string[]): boolean { @@ -686,7 +781,7 @@ function isKnownReadOnlyCommand(tokens: string[]): boolean { function classifyInvocation( tokens: string[], scripts: Record, - visited: Set, + activePath: Set, ): ScriptClassification { if (tokens.length === 0) return "unknown"; @@ -698,17 +793,21 @@ function classifyInvocation( // Shell wrappers: sh -c "...", bash -c "..." const wrappedScript = extractShellWrapperScript(tokens); if (wrappedScript !== undefined) { - return classifyScriptInternal(wrappedScript, scripts, visited); + return classifyScriptInternal(wrappedScript, scripts, activePath); } // Package-manager script delegation const target = extractDelegatedTarget(tokens); if (target) { - if (visited.has(target)) return "unknown"; // cycle detected - visited.add(target); + if (activePath.has(target)) return "unknown"; // true cycle detected const targetScript = scripts[target]; if (!targetScript) return "unknown"; // unresolvable target - return classifyScriptInternal(targetScript, scripts, visited); + activePath.add(target); + try { + return classifyScriptInternal(targetScript, scripts, activePath); + } finally { + activePath.delete(target); + } } // Check known write-capable commands @@ -727,7 +826,7 @@ function classifyInvocation( function classifyScriptInternal( command: string, scripts: Record, - visited: Set, + activePath: Set, ): ScriptClassification { const splitResult = splitChainedCommandsDetailed(command); if (splitResult.hasSyntaxError) { @@ -742,7 +841,7 @@ function classifyScriptInternal( for (const cmd of commands) { const inspection = inspectAndTokenizeCommandLine(cmd); const tokens = getCommandInvocationTokens(inspection.tokens); - const classification = classifyInvocation(tokens, scripts, visited); + const classification = classifyInvocation(tokens, scripts, activePath); if (classification === "write-capable") { return "write-capable"; @@ -775,20 +874,25 @@ export function classifyScript( function hasVerifiedFormattingCommand( command: string, scripts: Record = {}, - visited: Set = new Set(), + activePath: Set = new Set(), ): boolean { const invocations = parseCommandInvocations(command); return invocations.some((tokens) => { const target = extractDelegatedTarget(tokens); if (target) { - if (visited.has(target)) return false; - visited.add(target); + if (activePath.has(target)) return false; const targetScript = scripts[target]; - return targetScript ? hasVerifiedFormattingCommand(targetScript, scripts, visited) : false; + if (!targetScript) return false; + activePath.add(target); + try { + return hasVerifiedFormattingCommand(targetScript, scripts, activePath); + } finally { + activePath.delete(target); + } } const wrappedScript = extractShellWrapperScript(tokens); if (wrappedScript !== undefined) { - return hasVerifiedFormattingCommand(wrappedScript, scripts, visited); + return hasVerifiedFormattingCommand(wrappedScript, scripts, activePath); } return ( isPrettierWrite(tokens) || @@ -802,20 +906,25 @@ function hasVerifiedFormattingCommand( function hasVerifiedLintingCommand( command: string, scripts: Record = {}, - visited: Set = new Set(), + activePath: Set = new Set(), ): boolean { const invocations = parseCommandInvocations(command); return invocations.some((tokens) => { const target = extractDelegatedTarget(tokens); if (target) { - if (visited.has(target)) return false; - visited.add(target); + if (activePath.has(target)) return false; const targetScript = scripts[target]; - return targetScript ? hasVerifiedLintingCommand(targetScript, scripts, visited) : false; + if (!targetScript) return false; + activePath.add(target); + try { + return hasVerifiedLintingCommand(targetScript, scripts, activePath); + } finally { + activePath.delete(target); + } } const wrappedScript = extractShellWrapperScript(tokens); if (wrappedScript !== undefined) { - return hasVerifiedLintingCommand(wrappedScript, scripts, visited); + return hasVerifiedLintingCommand(wrappedScript, scripts, activePath); } return ( isEslintFix(tokens) || isOxlintFix(tokens) || isBiomeLintWrite(tokens) || isVpLintFix(tokens) @@ -826,20 +935,25 @@ function hasVerifiedLintingCommand( function hasVerifiedFullCheckCommand( command: string, scripts: Record = {}, - visited: Set = new Set(), + activePath: Set = new Set(), ): boolean { const invocations = parseCommandInvocations(command); return invocations.some((tokens) => { const target = extractDelegatedTarget(tokens); if (target) { - if (visited.has(target)) return false; - visited.add(target); + if (activePath.has(target)) return false; const targetScript = scripts[target]; - return targetScript ? hasVerifiedFullCheckCommand(targetScript, scripts, visited) : false; + if (!targetScript) return false; + activePath.add(target); + try { + return hasVerifiedFullCheckCommand(targetScript, scripts, activePath); + } finally { + activePath.delete(target); + } } const wrappedScript = extractShellWrapperScript(tokens); if (wrappedScript !== undefined) { - return hasVerifiedFullCheckCommand(wrappedScript, scripts, visited); + return hasVerifiedFullCheckCommand(wrappedScript, scripts, activePath); } if (isBiomeCheckWrite(tokens)) return true; const [exe, sub] = tokens; @@ -853,9 +967,10 @@ function hasVerifiedFullCheckCommand( function checkCoverage( body: string, targetScript: string | undefined, + scripts: Record, hasCommand: (b: string) => boolean, ): boolean { - if (targetScript && doesFixScriptDelegateTo(body, targetScript)) { + if (targetScript && delegatesToScript(body, targetScript, scripts)) { return true; } return hasCommand(body); @@ -868,10 +983,12 @@ function createFixScriptMappings( formatScript: string | undefined, lintScript: string | undefined, ): ScriptMapping[] { - const isFormat = checkCoverage(body, formatScript, (b) => + const isFormat = checkCoverage(body, formatScript, scripts, (b) => hasVerifiedFormattingCommand(b, scripts), ); - const isLint = checkCoverage(body, lintScript, (b) => hasVerifiedLintingCommand(b, scripts)); + const isLint = checkCoverage(body, lintScript, scripts, (b) => + hasVerifiedLintingCommand(b, scripts), + ); const isFull = hasVerifiedFullCheckCommand(body, scripts); if (isFormat && isLint) { diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index 37a9500b..862e9605 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -1858,4 +1858,287 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { ); }); }); + + describe("Regression: F-01 Nested Delegation and Duplicate Task Prevention", () => { + it("handles direct delegation: fix -> format:write", () => { + const scripts = { + fix: "npm run format:write", + "format:write": "prettier --write .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks).toEqual([{ capability: "format", scriptName: "fix" }]); + }); + + it("handles one-level nested delegation: fix -> all-fix -> format:write", () => { + const scripts = { + fix: "npm run all-fix", + "all-fix": "npm run format:write", + "format:write": "prettier --write .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks).toEqual([{ capability: "format", scriptName: "fix" }]); + }); + + it("handles multiple nested levels: fix -> all-fix -> frontend-fix -> format:write", () => { + const scripts = { + fix: "npm run all-fix", + "all-fix": "npm run frontend-fix", + "frontend-fix": "npm run format:write", + "format:write": "prettier --write .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks).toEqual([{ capability: "format", scriptName: "fix" }]); + }); + + it("handles nested lint delegation: fix -> all-fix -> lint:fix", () => { + const scripts = { + fix: "npm run all-fix", + "all-fix": "npm run lint:fix", + "lint:fix": "eslint --fix .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks).toEqual([{ capability: "lint", scriptName: "fix" }]); + }); + + it("handles a fix script that delegates to both formatting and linting across nested levels", () => { + const scripts = { + fix: "npm run all-fix", + "all-fix": "npm run format:write && npm run lint:fix", + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks).toEqual([ + { capability: "format", capabilities: ["format", "lint"], scriptName: "fix" }, + ]); + }); + + it("handles a fix script that delegates only to formatting, while linting remains independent", () => { + const scripts = { + fix: "npm run all-fix", + "all-fix": "npm run format:write", + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks).toEqual([ + { capability: "format", scriptName: "fix" }, + { capability: "lint", scriptName: "lint:fix" }, + ]); + }); + + it("handles a fix script that delegates only to linting, while formatting remains independent", () => { + const scripts = { + fix: "npm run all-fix", + "all-fix": "npm run lint:fix", + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks).toEqual([ + { capability: "lint", scriptName: "fix" }, + { capability: "format", scriptName: "format:write" }, + ]); + }); + + it("safely handles circular script references without infinite recursion in delegation", () => { + const scripts = { + fix: "npm run cycle-a", + "cycle-a": "npm run cycle-b", + "cycle-b": "npm run cycle-a", + "format:write": "prettier --write .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks).toEqual([ + { capability: "typecheck", capabilities: [], scriptName: "fix" }, + { capability: "format", scriptName: "format:write" }, + ]); + }); + + it("leaves unrelated scripts independent", () => { + const scripts = { + fix: "echo custom-fix", + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks).toEqual([ + { capability: "typecheck", capabilities: [], scriptName: "fix" }, + { capability: "format", scriptName: "format:write" }, + { capability: "lint", scriptName: "lint:fix" }, + ]); + }); + }); + + describe("Regression: F-02 Read-Only Classifier Audit for File-Writing Options", () => { + it("classifies ESLint with --fix, --cache, and --output-file as non-read-only", () => { + expect(classifyScript("eslint --fix .")).toBe("write-capable"); + expect(classifyScript("eslint . --cache")).toBe("unknown"); + expect(classifyScript("eslint . --cache-file .eslintcache")).toBe("unknown"); + expect(classifyScript("eslint . --cache-location ./cache/")).toBe("unknown"); + expect(classifyScript("eslint . --output-file report.json")).toBe("unknown"); + expect(classifyScript("eslint . -o report.json")).toBe("unknown"); + expect(classifyScript("eslint . --output-file=report.json")).toBe("unknown"); + expect(classifyScript("eslint . -o=report.json")).toBe("unknown"); + + // Dry-run does not write modified source files. + expect(classifyScript("eslint . --fix-dry-run")).toBe("read-only"); + + // Dry-run combined with an output file is not read-only. + expect(classifyScript("eslint . --fix-dry-run -o report.json")).toBe("unknown"); + expect(classifyScript("eslint . --fix-dry-run --output-file report.json")).toBe("unknown"); + + // Cache still prevents read-only classification even with --fix-dry-run. + expect(classifyScript("eslint . --fix-dry-run --cache")).toBe("unknown"); + expect(classifyScript("eslint . --fix-dry-run --cache-location .cache")).toBe("unknown"); + + // Check mode resolution rejects writing combinations but accepts read-only dry-run + expect(resolveScriptTasks({ "lint:check": "eslint . --cache" }, "check")).toEqual([]); + expect(resolveScriptTasks({ "lint:check": "eslint . -o report.json" }, "check")).toEqual([]); + expect(resolveScriptTasks({ "lint:check": "eslint . --fix-dry-run" }, "check")).toEqual([ + { capability: "lint", scriptName: "lint:check" }, + ]); + expect( + resolveScriptTasks({ "lint:check": "eslint . --fix-dry-run --cache" }, "check"), + ).toEqual([]); + }); + + it("classifies Prettier write, check, and cache modes correctly", () => { + expect(classifyScript("prettier --write .")).toBe("write-capable"); + expect(classifyScript("prettier -w .")).toBe("write-capable"); + expect(classifyScript("prettier --check .")).toBe("read-only"); + expect(classifyScript("prettier -c .")).toBe("read-only"); + expect(classifyScript("prettier --list-different .")).toBe("read-only"); + expect(classifyScript("prettier -l .")).toBe("read-only"); + + // Cache or insert-pragma options write files + expect(classifyScript("prettier --check . --cache")).toBe("unknown"); + expect(classifyScript("prettier --check . --cache-location .cache")).toBe("unknown"); + expect(classifyScript("prettier --check . --insert-pragma")).toBe("unknown"); + }); + + it("classifies Biome write, check, and reporter/log output options correctly", () => { + expect(classifyScript("biome format --write .")).toBe("write-capable"); + expect(classifyScript("biome format .")).toBe("read-only"); + expect(classifyScript("biome format . --reporter-file=out.json")).toBe("unknown"); + expect(classifyScript("biome format . --log-file=biome.log")).toBe("unknown"); + + expect(classifyScript("biome lint --write .")).toBe("write-capable"); + expect(classifyScript("biome lint .")).toBe("read-only"); + expect(classifyScript("biome lint . --reporter-file=out.json")).toBe("unknown"); + expect(classifyScript("biome lint . --log-file=biome.log")).toBe("unknown"); + + expect(classifyScript("biome check --write .")).toBe("write-capable"); + expect(classifyScript("biome check .")).toBe("read-only"); + expect(classifyScript("biome check . --reporter-file=out.json")).toBe("unknown"); + expect(classifyScript("biome check . --log-file=biome.log")).toBe("unknown"); + }); + + it("classifies Oxlint fix, suggestions, dangerously, and check modes correctly", () => { + expect(classifyScript("oxlint --fix")).toBe("write-capable"); + expect(classifyScript("oxlint --fix-suggestions")).toBe("unknown"); + expect(classifyScript("oxlint --fix-dangerously")).toBe("unknown"); + expect(classifyScript("oxlint --init")).toBe("unknown"); + expect(classifyScript("oxlint .")).toBe("read-only"); + }); + + it("classifies Vite+ format and lint write/check modes correctly", () => { + expect(classifyScript("vp fmt")).toBe("write-capable"); + expect(classifyScript("vp fmt --write")).toBe("write-capable"); + expect(classifyScript("vp fmt --check")).toBe("read-only"); + expect(classifyScript("vp fmt -c")).toBe("read-only"); + expect(classifyScript("vp fmt --check --init")).toBe("unknown"); + + expect(classifyScript("vp lint --fix")).toBe("write-capable"); + expect(classifyScript("vp lint")).toBe("read-only"); + expect(classifyScript("vp lint --fix-suggestions")).toBe("unknown"); + + expect(classifyScript("vp check --fix")).toBe("write-capable"); + expect(classifyScript("vp check")).toBe("read-only"); + }); + + it("classifies unknown options and commands with quoted arguments correctly", () => { + expect(classifyScript("eslint --unknown-option .")).toBe("read-only"); + expect(classifyScript('eslint . --rule "quotes: [error, double]"')).toBe("read-only"); + expect(classifyScript('prettier --check "src/**/*.ts"')).toBe("read-only"); + expect(classifyScript('eslint . --output-file "dir with spaces/report.json"')).toBe( + "unknown", + ); + expect(classifyScript("unknown-tool .")).toBe("unknown"); + }); + + it("preserves genuinely read-only commands in check mode", () => { + const scripts = { + "format:check": "prettier --check .", + "fmt:check": "oxfmt --check .", + "lint:check": "eslint .", + lint: "oxlint .", + }; + const checkTasks = resolveScriptTasks(scripts, "check"); + expect(checkTasks).toEqual([ + { capability: "format", scriptName: "format:check" }, + { capability: "lint", scriptName: "lint:check" }, + ]); + }); + }); + + describe("Regression: F-03 Sequential Script Delegation vs Cycle Detection", () => { + it("handles a script referencing the same child script twice sequentially", () => { + const scripts = { + lint: "npm run lint:base && npm run lint:base", + "lint:base": "eslint .", + }; + expect(classifyScript("npm run lint", scripts)).toBe("read-only"); + const tasks = resolveScriptTasks(scripts, "check"); + expect(tasks).toEqual([{ capability: "lint", scriptName: "lint" }]); + }); + + it("handles multiple independent branches referencing the same child script", () => { + const scripts = { + check: "npm run branch-a && npm run branch-b", + "branch-a": "npm run common", + "branch-b": "npm run common", + common: "prettier --check .", + }; + expect(classifyScript("npm run check", scripts)).toBe("read-only"); + }); + + it("handles nested repeated delegation cleanly", () => { + const scripts = { + main: "npm run sub1 && npm run sub2", + sub1: "npm run helper", + sub2: "npm run helper", + helper: "oxlint .", + }; + expect(classifyScript("npm run main", scripts)).toBe("read-only"); + }); + + it("detects genuine direct cycle: a -> a", () => { + const scripts = { + loop: "npm run loop", + }; + expect(classifyScript("npm run loop", scripts)).toBe("unknown"); + }); + + it("detects genuine indirect cycle: a -> b -> c -> a", () => { + const scripts = { + a: "npm run b", + b: "npm run c", + c: "npm run a", + }; + expect(classifyScript("npm run a", scripts)).toBe("unknown"); + }); + + it("handles a cycle inside one branch while another branch remains valid", () => { + const scripts = { + composite: "npm run broken || npm run valid", + broken: "npm run loopA", + loopA: "npm run loopB", + loopB: "npm run loopA", + valid: "eslint .", + }; + // Because 'broken' is a cycle and evaluates to 'unknown', composite evaluates to 'unknown' + expect(classifyScript("npm run composite", scripts)).toBe("unknown"); + }); + }); }); From 947dcadd08b9524ad5c196dad199a2942b3fc5ba Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2026 16:15:14 +0700 Subject: [PATCH 24/25] Fix Standalone Adapter Conflict Resolution and Vite+ Detection (#334) * fix(autofix): standalone adapter conflict resolution and vite-plus detection - F-01: Include standalone adapters in capability conflict resolution by reusing processCandidateTools and sharing coveredCapabilities. - F-02: Make Vite+ detection resistant to false positives using parseCommandInvocations. - Rebuild dist/autofix.mjs bundle. - Add changeset and comprehensive regression tests. * fix(autofix): provider capability isolation and vite-plus wrapper detection - F-01: Preserve capability isolation across language providers using scope-based capability tracking (adapter.scope ?? provider.id / 'standalone'), preventing unrelated language providers from suppressing each other's execution tasks. - F-02: Support Vite+ detection through command wrappers (cross-env, sh -c, bash -c, package-manager runners, script delegations) via unwrapEnvironmentWrapper and hasVitePlusCommand. - Rebuild dist/autofix.mjs bundle. - Add changeset and comprehensive regression tests. * fix(autofix): standalone adapter scope semantics and cross-env option parsing - F-01: Clarify and correct standalone adapter scope semantics with explicit conflict domains, defaulting unassigned standalone adapters to isolated per-adapter scopes (standalone:${id}) and unassigned provider adapters to provider.id. - F-02: Implement option-aware parsing in unwrapEnvironmentWrapper for cross-env and cross-env-shell to handle options consuming separate arguments (-f, --file, -c, --config, --env-file), inline values (--option=val), boolean flags, and delimiter -- while failing closed on unrecognized options. - Rebuild dist/autofix.mjs bundle. - Add changeset and comprehensive regression tests. * fix(autofix): correct cross-env CLI parsing and unwrapping - Align unwrapEnvironmentWrapper with actual cross-env CLI syntax by removing hypothetical options (-f, --file, etc.) and stripping leading environment variable assignments. - Update regression tests to verify valid cross-env invocations and prevent false-positive detection from unsupported options or unrelated commands. - Synchronize dist/autofix.mjs bundle. * fix(autofix): reject invalid shell syntax during vite-plus detection - Expose syntax error diagnostics via parseCommandInvocationsDetailed. - Make hasVitePlusCommand reject commands containing confirmed shell syntax errors (unterminated quotes, trailing escapes). - Synchronize dist/autofix.mjs bundle. - Add regression tests covering malformed commands and wrappers. --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- ...apter-conflicts-and-vite-plus-detection.md | 5 + dist/autofix.mjs | 16 +- .../adapters/javascript/script-adapter.ts | 120 ++- src/autofix/adapters/javascript/tools.ts | 13 +- src/autofix/planner.ts | 65 +- src/autofix/types.ts | 8 + tests/autofix-architecture.test.ts | 701 ++++++++++++++++++ 7 files changed, 892 insertions(+), 36 deletions(-) create mode 100644 .changeset/fix-standalone-adapter-conflicts-and-vite-plus-detection.md diff --git a/.changeset/fix-standalone-adapter-conflicts-and-vite-plus-detection.md b/.changeset/fix-standalone-adapter-conflicts-and-vite-plus-detection.md new file mode 100644 index 00000000..457b3ec1 --- /dev/null +++ b/.changeset/fix-standalone-adapter-conflicts-and-vite-plus-detection.md @@ -0,0 +1,5 @@ +--- +"@area44/workflows": patch +--- + +Fix provider capability isolation in multi-language monorepos and support wrapped Vite+ command detection. diff --git a/dist/autofix.mjs b/dist/autofix.mjs index 85bad52b..8418d70a 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -303,11 +303,11 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `?` `:` `,i++;return i=t+1&&e[a]===`\\`;)n++,a--;if(n%2==0)return r+=` `,[r,i+1]}r+=` `,i++}return[r,i]}function dr(e,t,n){let r=` `,i=t+1;for(;i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t,n=process.platform){let r=p.join(e,`node_modules`,`.bin`),i=/* @__PURE__ */ new Set([`.cmd`,`.bat`,`.exe`]);if(n===`win32`){let e=p.extname(t).toLowerCase();if(e){if(!i.has(e))return;let n=p.join(r,t);if(f.existsSync(n))return n}else for(let e of[`.cmd`,`.bat`,`.exe`,``]){let n=p.join(r,`${t}${e}`);if(f.existsSync(n))return n}}else{let e=p.join(r,t);if(f.existsSync(e))return e}let a=await Vt(t,!1);if(a){if(n===`win32`){let e=p.extname(a).toLowerCase();if(e&&!i.has(e))return}return a}}var Ar=class{platform;constructor(e=process.platform){this.platform=e}async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable,this.platform);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`)&&t.has(`assist`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}async function Nr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=await e.plan(n,r);if(c.length===0)continue;let{kept:l,skipped:u}=Mr(c,t);if(l.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of l)if(t.add(e.capability),e.capabilities)for(let n of e.capabilities)t.add(n);if(o.push(...l),u.length>0){let t=Array.from(new Set(u.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Pr(e,t,n,r,i){for(let a of e.getStandaloneAdapters()){let e=await a.detect(t);if(e.detected){r.push({id:a.id,name:a.name,reason:e.reason});let o=await a.plan(t,n);i.push(...o)}}}function Fr(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Ir(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=/* @__PURE__ */ new Set;u.set(e.id,t);let r=e.getAdapters(a),i=[];for(let e of r){let t=await e.detect(a);t.detected?i.push({adapter:e,reason:t.reason}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:e.id,name:e.name,reason:t.reason})}await Nr(i,t,a,n,o,s,c)}await Pr(e,a,n,o,c);let d=Fr(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Lr(e,a,o,s,d)}}function Lr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` -`)}function Rr(e){for(let t of[`format:write`,`format:fix`,`format`,`fmt`])if(e[t]&&qi(e[t],e))return t}function zr(e){if(e[`format:check`]&&Ki(e[`format:check`],e)===`read-only`)return`format:check`;if(e[`fmt:check`]&&Ki(e[`fmt:check`],e)===`read-only`)return`fmt:check`}function Br(e,t){return t===`fix`?Rr(e):zr(e)}function Vr(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`]&&Ki(e[`lint:check`],e)===`read-only`)return`lint:check`;if(e.lint&&Ki(e.lint,e)===`read-only`)return`lint`}function Hr(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` -`?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Ur(e,t){let n=t;for(;nt?n-1:t}function Wr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Gr(e,t){return t.isEscaped=!1,{ch:e,advance:!0}}function Kr(e,t,n,r){let i=e[t];if(n.isEscaped)return{newCmd:r+Gr(i,n).ch,nextIndex:t,sepLen:0};if(i===`\\`&&!n.inSingleQuote)return n.isEscaped=!0,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`'`&&!n.inDoubleQuote)return n.inSingleQuote=!n.inSingleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`"`&&!n.inSingleQuote)return n.inDoubleQuote=!n.inDoubleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`#`&&Wr(r,n))return{newCmd:r,nextIndex:Ur(e,t),sepLen:0};let a=Hr(e,t,n);return{newCmd:r+(a===0?i:``),nextIndex:t,sepLen:a}}function qr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1,hasSyntaxError:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=a.sepLen-1):(n=a.newCmd,i=a.nextIndex)}return(r.inSingleQuote||r.inDoubleQuote||r.isEscaped)&&(r.hasSyntaxError=!0),n.trim()&&t.push(n.trim()),{commands:t,hasSyntaxError:r.hasSyntaxError}}function Jr(e){return qr(e).commands}function Yr(e,t,n){return t.isEscaped=!1,n+e}function Xr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}const Zr=/* @__PURE__ */ new Set([`@`,`*`,`#`,`?`,`-`,`$`,`!`,`0`]);function Qr(e,t,n){if(n.inSingleQuote||n.isEscaped||e[t]!==`$`||t+1>=e.length)return!1;let r=e[t+1];return!!(r===`{`||Zr.has(r)||r>=`1`&&r<=`9`||r===`_`||r>=`a`&&r<=`z`||r>=`A`&&r<=`Z`)}function $r(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped||e[t]!==`&`)return!1;let r=t>0?e[t-1]:``,i=t+1`}function ei(e,t,n){if(n.inSingleQuote||n.isEscaped)return!1;let r=e[t];return r==="`"||r===`$`&&t+1`)&&t+1`||r===`<`||r===`&`&&t+1`}function ri(e,t,n){return $r(e,t,n.state)||Qr(e,t,n.state)||ei(e,t,n.state)||ti(e,t,n.state)?(n.inspection.hasUnsupportedSyntax=!0,!0):ni(e,t,n.state)?(n.inspection.hasRedirection=!0,n.inspection.hasUnsupportedSyntax=!0,!0):!1}function ii(e,t,n,r){let i=e[t];return n.state.isEscaped?{word:Yr(i,n.state,r),hasChars:!0,skipped:!1}:i===`\\`&&!n.state.inSingleQuote?(n.state.isEscaped=!0,{word:r,hasChars:!1,skipped:!0}):(ri(e,t,n),Xr(i,n.state)?{word:r,hasChars:!0,skipped:!0}:{word:r+i,hasChars:!0,skipped:!1})}function ai(e){let t={tokens:[],hasUnsupportedSyntax:!1,hasRedirection:!1},n={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1},r={inspection:t,state:n},i=``,a=!1;for(let o=0;o0&&n.push(t)}return n}function fi(e,t,n={},r=/* @__PURE__ */ new Set){if(!e||!t)return!1;let i=di(n[e]===void 0?e:n[e]);for(let e of i){if(ui(e,t))return!0;let i=Bi(e);if(i){if(i===t)return!0;if(!r.has(i)&&n[i]!==void 0){r.add(i);try{if(fi(n[i],t,n,r))return!0}finally{r.delete(i)}}}let a=Vi(e);if(a!==void 0&&fi(a,t,n,r))return!0}return!1}function pi(e,t,n){return!n||n===t?!1:!fi(e[t]||``,n,e)}function mi(e,t,n){return!n||n===t?!1:!fi(e[t]||``,n,e)}function hi(e){let[t]=e;return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||(e===`--fix`||e.startsWith(`--fix=`))&&(t!==`eslint`||e!==`--fix-dry-run`))}function gi(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function _i(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function vi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function yi(e){let[t]=e;return t===`eslint`&&e.some(e=>(e===`--fix`||e.startsWith(`--fix=`))&&e!==`--fix-dry-run`)}function bi(e){let[t]=e;return t===`oxlint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function xi(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function Si(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function Ci(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:!e.some(e=>e===`--check`||e===`-c`)}function wi(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Ti(e){return e.some(e=>e===`--fix`||e.startsWith(`--fix=`)&&e!==`--fix-dry-run`||e===`-o`||e.startsWith(`-o=`)||e===`--output-file`||e.startsWith(`--output-file=`)||e===`--cache`||e===`--cache-file`||e.startsWith(`--cache-file=`)||e===`--cache-location`||e.startsWith(`--cache-location=`))}function Ei(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--cache`||e===`--cache-location`||e.startsWith(`--cache-location=`)||e===`--insert-pragma`)}function Di(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`)||e===`--reporter-file`||e.startsWith(`--reporter-file=`)||e===`--log-file`||e.startsWith(`--log-file=`))}function Oi(e){return e.some(e=>e===`--fix`||e.startsWith(`--fix=`)||e===`--fix-suggestions`||e===`--fix-dangerously`||e===`--init`)}function ki(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--init`||e===`--migrate`||e.startsWith(`--migrate=`))}function Ai(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`--check`||e===`-c`||e===`--list-different`||e===`-l`)&&!Ei(e)}function ji(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`--check`||e===`-c`)&&!ki(e)}function Mi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:!Di(e)}function Ni(e){let[t]=e;return t===`eslint`&&!Ti(e)}function Pi(e){let[t]=e;return t===`oxlint`&&!Oi(e)}function Fi(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:!Di(e)}function Ii(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:!Di(e)}function Li(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:e.some(e=>e===`--check`||e===`-c`)&&!ki(e)}function Ri(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:!Oi(e)}function zi(e){let[t,n]=e;return t!==`vp`||n!==`check`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Bi(e){if(e.length===0)return;let[t,n,r]=e;if((t===`npm`||t===`pnpm`||t===`yarn`||t===`bun`)&&n===`run`&&r)return r;if((t===`pnpm`||t===`bun`||t===`yarn`)&&n&&!n.startsWith(`-`))return n}function Vi(e){if(e.length>=3&&(e[0]===`sh`||e[0]===`bash`)&&e[1]===`-c`)return e[2]}function Hi(e){return gi(e)||_i(e)||vi(e)||yi(e)||bi(e)||xi(e)||Si(e)||Ci(e)||wi(e)}function Ui(e){return Ai(e)||ji(e)||Mi(e)||Ni(e)||Pi(e)||Fi(e)||Ii(e)||Li(e)||Ri(e)||zi(e)}function Wi(e,t,n){if(e.length===0)return`unknown`;if(hi(e))return`write-capable`;let r=Vi(e);if(r!==void 0)return Gi(r,t,n);let i=Bi(e);if(i){if(n.has(i))return`unknown`;let e=t[i];if(!e)return`unknown`;n.add(i);try{return Gi(e,t,n)}finally{n.delete(i)}}return Hi(e)?`write-capable`:Ui(e)?`read-only`:`unknown`}function Gi(e,t,n){let r=qr(e);if(r.hasSyntaxError)return`unknown`;let{commands:i}=r;if(i.length===0)return`unknown`;let a=!1;for(let e of i){let r=ai(e),i=Wi(li(r.tokens),t,n);if(i===`write-capable`)return`write-capable`;if(r.hasUnsupportedSyntax||i===`unknown`)return`unknown`;i===`read-only`&&(a=!0)}return a?`read-only`:`unknown`}function Ki(e,t={}){return Gi(e,t,/* @__PURE__ */ new Set)}function qi(e,t={},n=/* @__PURE__ */ new Set){return di(e).some(e=>{let r=Bi(e);if(r){if(n.has(r))return!1;let e=t[r];if(!e)return!1;n.add(r);try{return qi(e,t,n)}finally{n.delete(r)}}let i=Vi(e);return i===void 0?gi(e)||_i(e)||vi(e)||Ci(e):qi(i,t,n)})}function Ji(e,t={},n=/* @__PURE__ */ new Set){return di(e).some(e=>{let r=Bi(e);if(r){if(n.has(r))return!1;let e=t[r];if(!e)return!1;n.add(r);try{return Ji(e,t,n)}finally{n.delete(r)}}let i=Vi(e);return i===void 0?yi(e)||bi(e)||xi(e)||wi(e):Ji(i,t,n)})}function Yi(e,t={},n=/* @__PURE__ */ new Set){return di(e).some(e=>{let r=Bi(e);if(r){if(n.has(r))return!1;let e=t[r];if(!e)return!1;n.add(r);try{return Yi(e,t,n)}finally{n.delete(r)}}let i=Vi(e);if(i!==void 0)return Yi(i,t,n);if(Si(e))return!0;let[a,o]=e;return a===`vp`&&o===`check`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))})}function Xi(e,t,n,r){return t&&fi(e,t,n)?!0:r(e)}function Zi(e,t,n,r,i){let a=Xi(t,r,e,t=>qi(t,e)),o=Xi(t,i,e,t=>Ji(t,e)),s=Yi(t,e);return a&&o?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:n}]:a&&!s?[{capability:`format`,scriptName:n}]:o&&!s?[{capability:`lint`,scriptName:n}]:s?[{capability:`autofix`,scriptName:n}]:[{capability:`typecheck`,capabilities:[],scriptName:n}]}function Qi(e,t){return qi(t[e],t)?{capability:`format`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function $i(e,t){return Ji(t[e],t)?{capability:`lint`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function ea(e,t,n){let r=[];return e&&r.push(Qi(e,n)),t&&r.push($i(t,n)),r}function ta(e,t,n,r,i){r&&pi(t,n,r)&&e.push(Qi(r,t)),i&&mi(t,n,i)&&e.push($i(i,t))}function na(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Br(e,`fix`),r=Vr(e,`fix`);if(!t)return ea(n,r,e);let i=Zi(e,e[t]||``,t,n,r);return ta(i,e,t,n,r),i}function ra(e){let t=[],n=Br(e,`check`),r=Vr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function ia(e,t){return t===`fix`?na(e):ra(e)}var aa=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=ia(t,`fix`),r=ia(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=ia(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function oa(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function sa(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var ca=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=sa(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&t?.scripts&&Object.values(t.scripts).some(e=>e.includes(`vp `))?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},la=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=oa(t,`@biomejs/biome`),r=sa(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},ua=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=oa(t,`prettier`),r=!!t?.prettier,i=sa(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},da=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=oa(t,`eslint`),r=!!t?.eslintConfig,i=sa(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},fa=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=oa(t,`oxlint`),r=sa(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},pa=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=oa(t,`oxfmt`),r=sa(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},ma=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new aa;vitePlusAdapter=new ca;biomeAdapter=new la;prettierAdapter=new ua;eslintAdapter=new da;oxlintAdapter=new fa;oxfmtAdapter=new pa;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},ha=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},ga=class{id=`python`;name=`Python`;ruffAdapter=new ha;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},_a=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function va(){let e=new _a;return e.registerProvider(new ga),e.registerProvider(new ma),e}const ya=va();async function ba(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function xa(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Ir(ya,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await ba(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function Sa(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function Ca(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await Sa(e,r,t)}}async function wa(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Ir(ya,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}}async function Ta(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await ba(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` -`))}return null}return await xa(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Ea(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await Ca(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Da(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await wa(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Oa(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await Ea(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await Da(e,r,n);return s&&i.push(s),i}async function ka(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Ir(ya,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Ta(e,i);o&&r.push(o);let s=await Oa(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` -`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&ka();export{xa as executeJsWorkflow,Ca as executePythonWorkflow,wa as executeRuffAutofix,ka as run,cn as sanitizePackageManager}; \ No newline at end of file +`&&e[i]!==`\r`;)r+=` `,i++;return i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t,n=process.platform){let r=p.join(e,`node_modules`,`.bin`),i=/* @__PURE__ */ new Set([`.cmd`,`.bat`,`.exe`]);if(n===`win32`){let e=p.extname(t).toLowerCase();if(e){if(!i.has(e))return;let n=p.join(r,t);if(f.existsSync(n))return n}else for(let e of[`.cmd`,`.bat`,`.exe`,``]){let n=p.join(r,`${t}${e}`);if(f.existsSync(n))return n}}else{let e=p.join(r,t);if(f.existsSync(e))return e}let a=await Vt(t,!1);if(a){if(n===`win32`){let e=p.extname(a).toLowerCase();if(e&&!i.has(e))return}return a}}var Ar=class{platform;constructor(e=process.platform){this.platform=e}async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable,this.platform);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`)&&t.has(`assist`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}function Nr(e,t){let n=e.get(t);return n||(n=/* @__PURE__ */ new Set,e.set(t,n)),n}async function Pr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=Nr(t,s.scope),l=await e.plan(n,r);if(l.length===0)continue;let{kept:u,skipped:d}=Mr(l,c);if(u.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of u)if(c.add(e.capability),e.capabilities)for(let t of e.capabilities)c.add(t);if(o.push(...u),d.length>0){let t=Array.from(new Set(d.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Fr(e,t,n,r,i,a,o){let s=[];for(let t of e.getStandaloneAdapters()){let e=await t.detect(n),r=t.scope??`standalone:${t.id}`;e.detected?s.push({adapter:t,reason:e.reason,scope:r}):e.reason&&!e.reason.startsWith(`no `)&&a.push({id:t.id,name:t.name,reason:e.reason})}await Pr(s,t,n,r,i,a,o)}function Ir(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Lr(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=e.getAdapters(a),r=[];for(let n of t){let t=await n.detect(a),i=n.scope??e.id;t.detected?r.push({adapter:n,reason:t.reason,scope:i}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:n.id,name:n.name,reason:t.reason})}await Pr(r,u,a,n,o,s,c)}await Fr(e,u,a,n,o,s,c);let d=Ir(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Rr(e,a,o,s,d)}}function Rr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` +`)}function zr(e){for(let t of[`format:write`,`format:fix`,`format`,`fmt`])if(e[t]&&Yi(e[t],e))return t}function Br(e){if(e[`format:check`]&&Ji(e[`format:check`],e)===`read-only`)return`format:check`;if(e[`fmt:check`]&&Ji(e[`fmt:check`],e)===`read-only`)return`fmt:check`}function Vr(e,t){return t===`fix`?zr(e):Br(e)}function Hr(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`]&&Ji(e[`lint:check`],e)===`read-only`)return`lint:check`;if(e.lint&&Ji(e.lint,e)===`read-only`)return`lint`}function Ur(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` +`?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Wr(e,t){let n=t;for(;nt?n-1:t}function Gr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Kr(e,t){return t.isEscaped=!1,{ch:e,advance:!0}}function qr(e,t,n,r){let i=e[t];if(n.isEscaped)return{newCmd:r+Kr(i,n).ch,nextIndex:t,sepLen:0};if(i===`\\`&&!n.inSingleQuote)return n.isEscaped=!0,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`'`&&!n.inDoubleQuote)return n.inSingleQuote=!n.inSingleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`"`&&!n.inSingleQuote)return n.inDoubleQuote=!n.inDoubleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`#`&&Gr(r,n))return{newCmd:r,nextIndex:Wr(e,t),sepLen:0};let a=Ur(e,t,n);return{newCmd:r+(a===0?i:``),nextIndex:t,sepLen:a}}function Jr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1,hasSyntaxError:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=a.sepLen-1):(n=a.newCmd,i=a.nextIndex)}return(r.inSingleQuote||r.inDoubleQuote||r.isEscaped)&&(r.hasSyntaxError=!0),n.trim()&&t.push(n.trim()),{commands:t,hasSyntaxError:r.hasSyntaxError}}function Yr(e,t,n){return t.isEscaped=!1,n+e}function Xr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}const Zr=/* @__PURE__ */ new Set([`@`,`*`,`#`,`?`,`-`,`$`,`!`,`0`]);function Qr(e,t,n){if(n.inSingleQuote||n.isEscaped||e[t]!==`$`||t+1>=e.length)return!1;let r=e[t+1];return!!(r===`{`||Zr.has(r)||r>=`1`&&r<=`9`||r===`_`||r>=`a`&&r<=`z`||r>=`A`&&r<=`Z`)}function $r(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped||e[t]!==`&`)return!1;let r=t>0?e[t-1]:``,i=t+1`}function ei(e,t,n){if(n.inSingleQuote||n.isEscaped)return!1;let r=e[t];return r==="`"||r===`$`&&t+1`)&&t+1`||r===`<`||r===`&`&&t+1`}function ri(e,t,n){return $r(e,t,n.state)||Qr(e,t,n.state)||ei(e,t,n.state)||ti(e,t,n.state)?(n.inspection.hasUnsupportedSyntax=!0,!0):ni(e,t,n.state)?(n.inspection.hasRedirection=!0,n.inspection.hasUnsupportedSyntax=!0,!0):!1}function ii(e,t,n,r){let i=e[t];return n.state.isEscaped?{word:Yr(i,n.state,r),hasChars:!0,skipped:!1}:i===`\\`&&!n.state.inSingleQuote?(n.state.isEscaped=!0,{word:r,hasChars:!1,skipped:!0}):(ri(e,t,n),Xr(i,n.state)?{word:r,hasChars:!0,skipped:!0}:{word:r+i,hasChars:!0,skipped:!1})}function ai(e){let t={tokens:[],hasUnsupportedSyntax:!1,hasRedirection:!1,hasSyntaxError:!1},n={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1},r={inspection:t,state:n},i=``,a=!1;for(let o=0;o0&&r.push(i)}return{invocations:r,hasSyntaxError:n}}function di(e){return ui(e).invocations}function fi(e,t,n={},r=/* @__PURE__ */ new Set){if(!e||!t)return!1;let i=di(n[e]===void 0?e:n[e]);for(let e of i){if(li(e,t))return!0;let i=Bi(e);if(i){if(i===t)return!0;if(!r.has(i)&&n[i]!==void 0){r.add(i);try{if(fi(n[i],t,n,r))return!0}finally{r.delete(i)}}}let a=Vi(e);if(a!==void 0&&fi(a,t,n,r))return!0}return!1}function pi(e,t,n){return!n||n===t?!1:!fi(e[t]||``,n,e)}function mi(e,t,n){return!n||n===t?!1:!fi(e[t]||``,n,e)}function hi(e){let[t]=e;return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||(e===`--fix`||e.startsWith(`--fix=`))&&(t!==`eslint`||e!==`--fix-dry-run`))}function gi(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function _i(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function vi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function yi(e){let[t]=e;return t===`eslint`&&e.some(e=>(e===`--fix`||e.startsWith(`--fix=`))&&e!==`--fix-dry-run`)}function bi(e){let[t]=e;return t===`oxlint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function xi(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function Si(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function Ci(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:!e.some(e=>e===`--check`||e===`-c`)}function wi(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Ti(e){return e.some(e=>e===`--fix`||e.startsWith(`--fix=`)&&e!==`--fix-dry-run`||e===`-o`||e.startsWith(`-o=`)||e===`--output-file`||e.startsWith(`--output-file=`)||e===`--cache`||e===`--cache-file`||e.startsWith(`--cache-file=`)||e===`--cache-location`||e.startsWith(`--cache-location=`))}function Ei(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--cache`||e===`--cache-location`||e.startsWith(`--cache-location=`)||e===`--insert-pragma`)}function Di(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`)||e===`--reporter-file`||e.startsWith(`--reporter-file=`)||e===`--log-file`||e.startsWith(`--log-file=`))}function Oi(e){return e.some(e=>e===`--fix`||e.startsWith(`--fix=`)||e===`--fix-suggestions`||e===`--fix-dangerously`||e===`--init`)}function ki(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--init`||e===`--migrate`||e.startsWith(`--migrate=`))}function Ai(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`--check`||e===`-c`||e===`--list-different`||e===`-l`)&&!Ei(e)}function ji(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`--check`||e===`-c`)&&!ki(e)}function Mi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:!Di(e)}function Ni(e){let[t]=e;return t===`eslint`&&!Ti(e)}function Pi(e){let[t]=e;return t===`oxlint`&&!Oi(e)}function Fi(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:!Di(e)}function Ii(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:!Di(e)}function Li(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:e.some(e=>e===`--check`||e===`-c`)&&!ki(e)}function Ri(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:!Oi(e)}function zi(e){let[t,n]=e;return t!==`vp`||n!==`check`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Bi(e){if(e.length===0)return;let[t,n,r]=e;if((t===`npm`||t===`pnpm`||t===`yarn`||t===`bun`)&&n===`run`&&r)return r;if((t===`pnpm`||t===`bun`||t===`yarn`)&&n&&!n.startsWith(`-`))return n}function Vi(e){if(e.length>=3&&(e[0]===`sh`||e[0]===`bash`)&&e[1]===`-c`)return e[2]}function Hi(e){if(e.length===0)return e;let[t]=e;if(t!==`cross-env`&&t!==`cross-env-shell`)return e;let n=1;for(;n{let r=Bi(e);if(r){if(n.has(r))return!1;let e=t[r];if(!e)return!1;n.add(r);try{return Yi(e,t,n)}finally{n.delete(r)}}let i=Vi(e);return i===void 0?gi(e)||_i(e)||vi(e)||Ci(e):Yi(i,t,n)})}function Xi(e,t={},n=/* @__PURE__ */ new Set){return di(e).some(e=>{let r=Bi(e);if(r){if(n.has(r))return!1;let e=t[r];if(!e)return!1;n.add(r);try{return Xi(e,t,n)}finally{n.delete(r)}}let i=Vi(e);return i===void 0?yi(e)||bi(e)||xi(e)||wi(e):Xi(i,t,n)})}function Zi(e,t={},n=/* @__PURE__ */ new Set){return di(e).some(e=>{let r=Bi(e);if(r){if(n.has(r))return!1;let e=t[r];if(!e)return!1;n.add(r);try{return Zi(e,t,n)}finally{n.delete(r)}}let i=Vi(e);if(i!==void 0)return Zi(i,t,n);if(Si(e))return!0;let[a,o]=e;return a===`vp`&&o===`check`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))})}function Qi(e,t,n,r){return t&&fi(e,t,n)?!0:r(e)}function $i(e,t,n,r,i){let a=Qi(t,r,e,t=>Yi(t,e)),o=Qi(t,i,e,t=>Xi(t,e)),s=Zi(t,e);return a&&o?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:n}]:a&&!s?[{capability:`format`,scriptName:n}]:o&&!s?[{capability:`lint`,scriptName:n}]:s?[{capability:`autofix`,scriptName:n}]:[{capability:`typecheck`,capabilities:[],scriptName:n}]}function ea(e,t){return Yi(t[e],t)?{capability:`format`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function ta(e,t){return Xi(t[e],t)?{capability:`lint`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function na(e,t,n){let r=[];return e&&r.push(ea(e,n)),t&&r.push(ta(t,n)),r}function ra(e,t,n,r,i){r&&pi(t,n,r)&&e.push(ea(r,t)),i&&mi(t,n,i)&&e.push(ta(i,t))}function ia(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Vr(e,`fix`),r=Hr(e,`fix`);if(!t)return na(n,r,e);let i=$i(e,e[t]||``,t,n,r);return ra(i,e,t,n,r),i}function aa(e){let t=[],n=Vr(e,`check`),r=Hr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function oa(e,t){return t===`fix`?ia(e):aa(e)}var sa=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=oa(t,`fix`),r=oa(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=oa(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function ca(e){return e?Object.values(e).some(t=>Ui(t,e)):!1}function la(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ua(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var da=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ua(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&ca(t?.scripts)?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},fa=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=la(t,`@biomejs/biome`),r=ua(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},pa=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=la(t,`prettier`),r=!!t?.prettier,i=ua(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},ma=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=la(t,`eslint`),r=!!t?.eslintConfig,i=ua(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},ha=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=la(t,`oxlint`),r=ua(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ga=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=la(t,`oxfmt`),r=ua(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},_a=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new sa;vitePlusAdapter=new da;biomeAdapter=new fa;prettierAdapter=new pa;eslintAdapter=new ma;oxlintAdapter=new ha;oxfmtAdapter=new ga;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},va=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},ya=class{id=`python`;name=`Python`;ruffAdapter=new va;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},ba=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function xa(){let e=new ba;return e.registerProvider(new ya),e.registerProvider(new _a),e}const Sa=xa();async function Ca(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function wa(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Lr(Sa,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await Ca(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function Ta(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function Ea(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await Ta(e,r,t)}}async function Da(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Lr(Sa,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}}async function Oa(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await Ca(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`))}return null}return await wa(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ka(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await Ea(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Aa(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await Da(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ja(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await ka(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await Aa(e,r,n);return s&&i.push(s),i}async function Ma(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Lr(Sa,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Oa(e,i);o&&r.push(o);let s=await ja(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` +`)}`),process.env.NODE_ENV!==`test`&&process.exit(1))}process.env.NODE_ENV!==`test`&&Or(import.meta.url)&&Ma();export{wa as executeJsWorkflow,Ea as executePythonWorkflow,Da as executeRuffAutofix,Ma as run,cn as sanitizePackageManager}; \ No newline at end of file diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index fa6e9bc0..af8581af 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -190,7 +190,7 @@ function splitChainedCommandsDetailed(shellText: string): SplitResult { return { commands, hasSyntaxError: state.hasSyntaxError }; } -function splitChainedCommands(shellText: string): string[] { +export function splitChainedCommands(shellText: string): string[] { return splitChainedCommandsDetailed(shellText).commands; } @@ -240,6 +240,7 @@ interface CommandInspection { tokens: string[]; hasUnsupportedSyntax: boolean; hasRedirection: boolean; + hasSyntaxError: boolean; } function isBackgroundOp(cmd: string, index: number, state: TokenizerState): boolean { @@ -343,6 +344,7 @@ function inspectAndTokenizeCommandLine(cmd: string): CommandInspection { tokens: [], hasUnsupportedSyntax: false, hasRedirection: false, + hasSyntaxError: false, }; const state: TokenizerState = { inSingleQuote: false, inDoubleQuote: false, isEscaped: false }; const ctx: TokenizeScanContext = { inspection, state }; @@ -368,6 +370,7 @@ function inspectAndTokenizeCommandLine(cmd: string): CommandInspection { if (state.inSingleQuote || state.inDoubleQuote || state.isEscaped) { inspection.hasUnsupportedSyntax = true; + inspection.hasSyntaxError = true; } if (hasCharsInWord) { @@ -377,7 +380,7 @@ function inspectAndTokenizeCommandLine(cmd: string): CommandInspection { return inspection; } -function tokenizeCommandLine(cmd: string): string[] { +export function tokenizeCommandLine(cmd: string): string[] { return inspectAndTokenizeCommandLine(cmd).tokens; } @@ -416,18 +419,33 @@ function matchesPmDelegation(cmdTokens: string[], targetScriptName: string): boo return false; } -export function parseCommandInvocations(scriptBody: string): string[][] { - if (!scriptBody) return []; - const commands = splitChainedCommands(scriptBody); +export interface ParsedCommandInvocations { + invocations: string[][]; + hasSyntaxError: boolean; +} + +export function parseCommandInvocationsDetailed(scriptBody: string): ParsedCommandInvocations { + if (!scriptBody) return { invocations: [], hasSyntaxError: false }; + const splitResult = splitChainedCommandsDetailed(scriptBody); + let hasSyntaxError = splitResult.hasSyntaxError; const invocations: string[][] = []; - for (const cmd of commands) { - const rawTokens = tokenizeCommandLine(cmd); - const cmdTokens = getCommandInvocationTokens(rawTokens); + + for (const cmd of splitResult.commands) { + const inspection = inspectAndTokenizeCommandLine(cmd); + if (inspection.hasSyntaxError) { + hasSyntaxError = true; + } + const cmdTokens = getCommandInvocationTokens(inspection.tokens); if (cmdTokens.length > 0) { invocations.push(cmdTokens); } } - return invocations; + + return { invocations, hasSyntaxError }; +} + +export function parseCommandInvocations(scriptBody: string): string[][] { + return parseCommandInvocationsDetailed(scriptBody).invocations; } /** @@ -742,13 +760,95 @@ function extractDelegatedTarget(tokens: string[]): string | undefined { return undefined; } -function extractShellWrapperScript(tokens: string[]): string | undefined { +export function extractShellWrapperScript(tokens: string[]): string | undefined { if (tokens.length >= 3 && (tokens[0] === "sh" || tokens[0] === "bash") && tokens[1] === "-c") { return tokens[2]; } return undefined; } +/** + * Unwraps environment wrapper commands like `cross-env` or `cross-env-shell`, + * stripping initial environment variable assignments to retrieve the target command tokens. + * In accordance with cross-env CLI syntax, cross-env accepts environment variable + * setters (`KEY=val`) followed by the command and its arguments. + */ +export function unwrapEnvironmentWrapper(tokens: string[]): string[] { + if (tokens.length === 0) return tokens; + const [exe] = tokens; + if (exe !== "cross-env" && exe !== "cross-env-shell") { + return tokens; + } + + let i = 1; + while (i < tokens.length && isEnvAssignment(tokens[i])) { + i++; + } + + return tokens.slice(i); +} + +/** + * Checks whether an invocation (or nested wrapped invocations) executes the `vp` command. + * Supports direct invocations, environment wrappers (cross-env), shell wrappers (sh -c, bash -c), + * package-manager execution wrappers (npx, bunx, pnpm exec, etc.), and script delegations. + */ +export function hasVitePlusCommand( + scriptBody: string, + scripts: Record = {}, + activePath: Set = new Set(), +): boolean { + if (!scriptBody) return false; + const { invocations, hasSyntaxError } = parseCommandInvocationsDetailed(scriptBody); + if (hasSyntaxError) { + return false; + } + + for (const rawTokens of invocations) { + const tokens = unwrapEnvironmentWrapper(rawTokens); + if (tokens.length === 0) continue; + + if (tokens[0] === "vp") { + return true; + } + + // Package-manager runner wrappers: npx vp, bunx vp, pnpm dlx vp, yarn dlx vp, npm exec vp, pnpm exec vp + if ((tokens[0] === "npx" || tokens[0] === "bunx") && tokens[1] === "vp") { + return true; + } + if ( + (tokens[0] === "npm" || tokens[0] === "pnpm" || tokens[0] === "yarn") && + (tokens[1] === "exec" || tokens[1] === "dlx") && + tokens[2] === "vp" + ) { + return true; + } + + // Shell wrappers: sh -c "...", bash -c "..." + const wrapped = extractShellWrapperScript(tokens); + if (wrapped !== undefined) { + if (hasVitePlusCommand(wrapped, scripts, activePath)) { + return true; + } + } + + // Package-manager script delegation + const target = extractDelegatedTarget(tokens); + if (target && !activePath.has(target) && scripts[target]) { + activePath.add(target); + try { + if (hasVitePlusCommand(scripts[target], scripts, activePath)) { + return true; + } + } finally { + activePath.delete(target); + } + } + } + + return false; +} + function isKnownWriteCommand(tokens: string[]): boolean { return ( isPrettierWrite(tokens) || diff --git a/src/autofix/adapters/javascript/tools.ts b/src/autofix/adapters/javascript/tools.ts index 69885a22..6645e141 100644 --- a/src/autofix/adapters/javascript/tools.ts +++ b/src/autofix/adapters/javascript/tools.ts @@ -11,6 +11,14 @@ import type { } from "../../types.js"; import { hasVitePlusDependency, type JsPackageManifest } from "../../../javascript-env.js"; +import { hasVitePlusCommand } from "./script-adapter.js"; + +function hasVitePlusScript(scripts?: Record): boolean { + if (!scripts) return false; + return Object.values(scripts).some((scriptBody) => { + return hasVitePlusCommand(scriptBody, scripts); + }); +} function hasDependency(pkg: JsPackageManifest | undefined, depName: string): boolean { if (!pkg) return false; @@ -47,10 +55,7 @@ export class VitePlusAdapter implements ToolAdapter { "vite.config.cjs", ]); - if ( - hasDep || - (hasConfig && pkg?.scripts && Object.values(pkg.scripts).some((s) => s.includes("vp "))) - ) { + if (hasDep || (hasConfig && hasVitePlusScript(pkg?.scripts))) { return { detected: true, reason: "Vite+ dependency and/or configuration detected" }; } return { detected: false, reason: "no Vite+ dependency or configuration" }; diff --git a/src/autofix/planner.ts b/src/autofix/planner.ts index bc379347..579d5388 100644 --- a/src/autofix/planner.ts +++ b/src/autofix/planner.ts @@ -14,6 +14,7 @@ import { hasPythonSource } from "../python-env.js"; interface CandidateTool { adapter: ToolAdapter; reason?: string; + scope: string; } function isTaskCapabilityCovered( @@ -54,9 +55,21 @@ function filterCandidateTasks( return { kept, skipped }; } +function getOrCreateScopeCapabilities( + coveredCapabilitiesByScope: Map>, + scope: string, +): Set { + let caps = coveredCapabilitiesByScope.get(scope); + if (!caps) { + caps = new Set(); + coveredCapabilitiesByScope.set(scope, caps); + } + return caps; +} + async function processCandidateTools( candidateTools: CandidateTool[], - providerCapabilities: Set, + coveredCapabilitiesByScope: Map>, context: ProjectContext, mode: ExecutionMode, selectedTools: Array<{ id: string; name: string; reason?: string }>, @@ -65,13 +78,17 @@ async function processCandidateTools( ): Promise { for (const candidate of candidateTools) { const adapter = candidate.adapter; + const scopeCapabilities = getOrCreateScopeCapabilities( + coveredCapabilitiesByScope, + candidate.scope, + ); const plannedTasks = await adapter.plan(context, mode); if (plannedTasks.length === 0) { continue; } - const { kept, skipped } = filterCandidateTasks(plannedTasks, providerCapabilities); + const { kept, skipped } = filterCandidateTasks(plannedTasks, scopeCapabilities); if (kept.length === 0) { skippedTools.push({ @@ -84,10 +101,10 @@ async function processCandidateTools( selectedTools.push({ id: adapter.id, name: adapter.name, reason: candidate.reason }); for (const task of kept) { - providerCapabilities.add(task.capability); + scopeCapabilities.add(task.capability); if (task.capabilities) { for (const cap of task.capabilities) { - providerCapabilities.add(cap); + scopeCapabilities.add(cap); } } } @@ -106,19 +123,33 @@ async function processCandidateTools( async function processStandaloneAdapters( registry: AutofixRegistry, + coveredCapabilitiesByScope: Map>, context: ProjectContext, mode: ExecutionMode, selectedTools: Array<{ id: string; name: string; reason?: string }>, + skippedTools: Array<{ id: string; name: string; reason: string }>, tasks: ExecutionTask[], ): Promise { + const candidateTools: CandidateTool[] = []; for (const adapter of registry.getStandaloneAdapters()) { const result = await adapter.detect(context); + const scope = adapter.scope ?? `standalone:${adapter.id}`; if (result.detected) { - selectedTools.push({ id: adapter.id, name: adapter.name, reason: result.reason }); - const toolTasks = await adapter.plan(context, mode); - tasks.push(...toolTasks); + candidateTools.push({ adapter, reason: result.reason, scope }); + } else if (result.reason && !result.reason.startsWith("no ")) { + skippedTools.push({ id: adapter.id, name: adapter.name, reason: result.reason }); } } + + await processCandidateTools( + candidateTools, + coveredCapabilitiesByScope, + context, + mode, + selectedTools, + skippedTools, + tasks, + ); } function deduplicateTasks(tasks: ExecutionTask[]): ExecutionTask[] { @@ -161,7 +192,7 @@ export async function planExecution( const tasks: ExecutionTask[] = []; const providers = registry.getProviders(); - const coveredCapabilities = new Map>(); + const coveredCapabilitiesByScope = new Map>(); for (const provider of providers) { const isDetected = await provider.detect(effectiveContext); @@ -169,17 +200,15 @@ export async function planExecution( continue; } - const providerCapabilities = new Set(); - coveredCapabilities.set(provider.id, providerCapabilities); - const adapters = provider.getAdapters(effectiveContext); const candidateTools: CandidateTool[] = []; // Detect tools for (const adapter of adapters) { const result = await adapter.detect(effectiveContext); + const scope = adapter.scope ?? provider.id; if (result.detected) { - candidateTools.push({ adapter, reason: result.reason }); + candidateTools.push({ adapter, reason: result.reason, scope }); } else if (result.reason && !result.reason.startsWith("no ")) { skippedTools.push({ id: adapter.id, name: adapter.name, reason: result.reason }); } @@ -187,7 +216,7 @@ export async function planExecution( await processCandidateTools( candidateTools, - providerCapabilities, + coveredCapabilitiesByScope, effectiveContext, mode, selectedTools, @@ -196,7 +225,15 @@ export async function planExecution( ); } - await processStandaloneAdapters(registry, effectiveContext, mode, selectedTools, tasks); + await processStandaloneAdapters( + registry, + coveredCapabilitiesByScope, + effectiveContext, + mode, + selectedTools, + skippedTools, + tasks, + ); const deduplicatedTasks = deduplicateTasks(tasks); diff --git a/src/autofix/types.ts b/src/autofix/types.ts index 5dd7ae71..91958836 100644 --- a/src/autofix/types.ts +++ b/src/autofix/types.ts @@ -38,6 +38,14 @@ export interface ToolAdapter { id: string; name: string; capabilities: readonly Capability[]; + /** + * Conflict domain scope for capability deduplication and conflict resolution. + * - For provider adapters, defaults to `provider.id` (e.g. "javascript", "python"). + * - For standalone adapters, can explicitly match a provider id (e.g. "javascript") + * or another shared scope name to resolve genuine conflicts within that domain. + * When omitted, defaults to an isolated per-adapter scope (`standalone:${id}`). + */ + scope?: string; detect(context: ProjectContext): Promise | AdapterDetectionResult; diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index 862e9605..a6ed04cc 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -1668,6 +1668,707 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { }); }); + describe("Vite+ Detection & False-Positive Prevention", () => { + it("detects Vite+ when package script invokes vp command directly", async () => { + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fmt: "vp fmt", + }, + }), + ); + fs.writeFileSync(path.join(tempDir, "vite.config.ts"), "export default {};"); + + const registry = createDefaultRegistry(); + const plan = await planExecution(registry, { cwd: tempDir }, "fix"); + // Script fmt runs, and VitePlusAdapter is detected (and fmt script covers format) + expect(plan.selectedTools.map((t) => t.id)).toContain("vite-plus"); + }); + + it("detects Vite+ when package script invokes vp in chained command or with env prefix", async () => { + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + build: "echo ready && vp build", + check: "NODE_ENV=production vp check", + }, + }), + ); + fs.writeFileSync(path.join(tempDir, "vite.config.ts"), "export default {};"); + + const registry = createDefaultRegistry(); + const plan = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(plan.selectedTools.map((t) => t.id)).toContain("vite-plus"); + expect(plan.tasks.map((t) => t.id)).toContain("vite-plus-fmt"); + expect(plan.tasks.map((t) => t.id)).toContain("vite-plus-lint-fix"); + }); + + it("detects Vite+ through command wrappers: cross-env, sh -c, bash -c, and runner wrappers", async () => { + // 1. cross-env + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + format: "cross-env NODE_ENV=production vp fmt", + }, + }), + ); + fs.writeFileSync(path.join(tempDir, "vite.config.ts"), "export default {};"); + + const registry = createDefaultRegistry(); + const planCrossEnv = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planCrossEnv.selectedTools.map((t) => t.id)).toContain("vite-plus"); + + // 2. cross-env-shell + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + format: "cross-env-shell NODE_ENV=production vp fmt", + }, + }), + ); + const planCrossEnvShell = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planCrossEnvShell.selectedTools.map((t) => t.id)).toContain("vite-plus"); + + // 3. cross-env with multiple environment variable assignments + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + formatMultipleEnv: "cross-env CI=true NODE_ENV=production vp lint", + }, + }), + ); + const planCrossEnvMultiple = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planCrossEnvMultiple.selectedTools.map((t) => t.id)).toContain("vite-plus"); + + // 4. cross-env delegating to a script that invokes vp + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + formatDelegated: "cross-env NODE_ENV=production npm run format:vp", + "format:vp": "vp fmt", + }, + }), + ); + const planCrossEnvDelegated = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planCrossEnvDelegated.selectedTools.map((t) => t.id)).toContain("vite-plus"); + + // 5. unsupported options or flags must not be treated as valid and must not cause false-positive Vite+ detection + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + formatShort: "cross-env -f .env vp fmt", + formatLong: "cross-env --file .env vp fmt", + formatUnknown: "cross-env -unknown-flag vp fmt", + }, + }), + ); + const planCrossEnvUnknown = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planCrossEnvUnknown.selectedTools.map((t) => t.id)).not.toContain("vite-plus"); + + // 6. cross-env with missing command after environment assignments + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + noCommand: "cross-env NODE_ENV=production", + }, + }), + ); + const planCrossEnvNoCommand = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planCrossEnvNoCommand.selectedTools.map((t) => t.id)).not.toContain("vite-plus"); + + // 7. cross-env running an unrelated command with vp in arguments must not trigger Vite+ detection + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + grepTest: "cross-env NODE_ENV=production grep vp file.txt", + }, + }), + ); + const planCrossEnvGrep = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planCrossEnvGrep.selectedTools.map((t) => t.id)).not.toContain("vite-plus"); + + // 5. sh -c + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + check: "sh -c 'vp check'", + }, + }), + ); + const planSh = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planSh.selectedTools.map((t) => t.id)).toContain("vite-plus"); + + // 6. bash -c + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fmt: "bash -c 'vp fmt'", + }, + }), + ); + const planBash = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planBash.selectedTools.map((t) => t.id)).toContain("vite-plus"); + + // 7. npx vp / bunx vp / pnpm exec vp + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fmt1: "npx vp fmt", + fmt2: "bunx vp fmt", + fmt3: "pnpm exec vp fmt", + }, + }), + ); + const planRunners = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planRunners.selectedTools.map((t) => t.id)).toContain("vite-plus"); + + // 8. script delegation invoking vp + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + all: "npm run vp-task", + "vp-task": "vp fmt", + }, + }), + ); + const planDelegation = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planDelegation.selectedTools.map((t) => t.id)).toContain("vite-plus"); + }); + + it("prevents false positive when 'vp ' only appears inside echo or descriptive string", async () => { + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + help: 'echo "vp is not installed"', + info: 'echo "run vp fmt later"', + }, + }), + ); + fs.writeFileSync(path.join(tempDir, "vite.config.ts"), "export default {};"); + + const registry = createDefaultRegistry(); + const plan = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(plan.selectedTools.map((t) => t.id)).not.toContain("vite-plus"); + expect(plan.tasks.map((t) => t.id)).not.toContain("vite-plus-fmt"); + expect(plan.tasks.map((t) => t.id)).not.toContain("vite-plus-lint-fix"); + }); + + it("prevents false positive when 'vp ' only appears in a comment", async () => { + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + test: "node test.js # vp fmt", + }, + }), + ); + fs.writeFileSync(path.join(tempDir, "vite.config.ts"), "export default {};"); + + const registry = createDefaultRegistry(); + const plan = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(plan.selectedTools.map((t) => t.id)).not.toContain("vite-plus"); + }); + + it("prevents false positive when 'vp' appears as an argument to an unrelated command", async () => { + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + search: "grep vp file.txt", + }, + }), + ); + fs.writeFileSync(path.join(tempDir, "vite.config.ts"), "export default {};"); + + const registry = createDefaultRegistry(); + const plan = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(plan.selectedTools.map((t) => t.id)).not.toContain("vite-plus"); + }); + + it("prevents false positive when project has vite.config.ts but scripts do not invoke vp", async () => { + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + build: "vite build", + test: "vitest run", + }, + }), + ); + fs.writeFileSync(path.join(tempDir, "vite.config.ts"), "export default {};"); + + const registry = createDefaultRegistry(); + const plan = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(plan.selectedTools.map((t) => t.id)).not.toContain("vite-plus"); + }); + + it("rejects malformed commands with confirmed shell syntax errors during Vite+ detection", async () => { + // 1. Unterminated single quote + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + broken1: "vp fmt 'unterminated", + }, + }), + ); + fs.writeFileSync(path.join(tempDir, "vite.config.ts"), "export default {};"); + + const registry = createDefaultRegistry(); + const planSingle = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planSingle.selectedTools.map((t) => t.id)).not.toContain("vite-plus"); + + // 2. Unterminated double quote + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + broken2: 'vp fmt "unterminated', + }, + }), + ); + const planDouble = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planDouble.selectedTools.map((t) => t.id)).not.toContain("vite-plus"); + + // 3. Command ending with an incomplete trailing escape \ + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + broken3: "vp fmt \\", + }, + }), + ); + const planEscape = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planEscape.selectedTools.map((t) => t.id)).not.toContain("vite-plus"); + + // 4. Malformed nested shell-wrapper invocation (unterminated quote in sh -c argument) + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + broken4: "sh -c 'vp check", + }, + }), + ); + const planMalformedSh = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planMalformedSh.selectedTools.map((t) => t.id)).not.toContain("vite-plus"); + + // 5. Malformed nested shell-wrapper invocation (unterminated quote inside wrapped script) + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + broken5: 'bash -c "vp fmt \'unterminated"', + }, + }), + ); + const planMalformedBash = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planMalformedBash.selectedTools.map((t) => t.id)).not.toContain("vite-plus"); + + // 6. Malformed command containing vp in argument position + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + broken6: "grep 'unterminated vp", + }, + }), + ); + const planGrepMalformed = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(planGrepMalformed.selectedTools.map((t) => t.id)).not.toContain("vite-plus"); + }); + }); + + describe("Multi-Language Monorepo Capability Isolation", () => { + it("preserves independent tasks for Python (Ruff) and JavaScript (Prettier/ESLint) without mutual suppression", async () => { + // Python source file + fs.writeFileSync(path.join(tempDir, "app.py"), "print('hello')\n"); + + // JS configuration with prettier and eslint + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }, + }), + ); + + const registry = createDefaultRegistry(); + const plan = await planExecution(registry, { cwd: tempDir, hasPythonSource: true }, "fix"); + + // Verify Python tasks are scheduled (Ruff lint and format) + expect(plan.tasks.some((t) => t.id === "ruff-lint-fix")).toBe(true); + expect(plan.tasks.some((t) => t.id === "ruff-format")).toBe(true); + + // Verify JavaScript tasks are NOT suppressed by Python's lint/format capabilities + expect(plan.tasks.some((t) => t.id === "script-format:write")).toBe(true); + expect(plan.tasks.some((t) => t.id === "script-lint:fix")).toBe(true); + + // Verify plan contains all 4 tasks + expect(plan.tasks.map((t) => t.id)).toEqual([ + "ruff-lint-fix", + "ruff-format", + "script-format:write", + "script-lint:fix", + ]); + + // Summary contains both Python and JavaScript toolchains + expect(plan.summary).toContain("Python toolchain:"); + expect(plan.summary).toContain("Ruff: default tool"); + expect(plan.summary).toContain("JavaScript toolchain:"); + }); + }); + + describe("Standalone Adapter Conflict Resolution", () => { + it("skips a standalone adapter task when its capability is already covered by a regular adapter in the same scope", async () => { + const registry = createDefaultRegistry(); + + class StandaloneFormatAdapter implements ToolAdapter { + id = "standalone-fmt"; + name = "Standalone Formatter"; + capabilities: ["format"] = ["format"]; + scope = "javascript"; + detect() { + return { detected: true, reason: "standalone formatter config detected" }; + } + plan(ctx: ProjectContext, mode: ExecutionMode): ExecutionTask[] { + return [ + { + id: "standalone-fmt-task", + toolId: this.id, + capability: "format", + executable: "standalone-fmt", + args: ["."], + cwd: ctx.cwd, + mode, + }, + ]; + } + } + + registry.registerAdapter(new StandaloneFormatAdapter()); + + // Configure explicit script covering format + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + "format:write": "prettier --write .", + }, + }), + ); + + const plan = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(plan.tasks.map((t) => t.id)).toEqual(["script-format:write"]); + expect(plan.skippedTools).toContainEqual( + expect.objectContaining({ + id: "standalone-fmt", + reason: "all capabilities already covered by higher priority tool", + }), + ); + }); + + it("skips a lower-priority adapter when a higher-priority standalone adapter ran first and covered the capability in the same scope", async () => { + const customRegistry = new AutofixRegistry(); + + class StandaloneFormatAdapter implements ToolAdapter { + id = "standalone-fmt"; + name = "Standalone Formatter"; + capabilities: ["format"] = ["format"]; + scope = "custom-format-scope"; + detect() { + return { detected: true, reason: "standalone formatter config detected" }; + } + plan(ctx: ProjectContext, mode: ExecutionMode): ExecutionTask[] { + return [ + { + id: "standalone-fmt-task", + toolId: this.id, + capability: "format", + executable: "standalone-fmt", + args: ["."], + cwd: ctx.cwd, + mode, + }, + ]; + } + } + + // Test two standalone adapters sharing the same scope where first standalone adapter conflicts with second standalone adapter: + class SecondStandaloneFormatAdapter implements ToolAdapter { + id = "second-fmt"; + name = "Second Formatter"; + capabilities: ["format"] = ["format"]; + scope = "custom-format-scope"; + detect() { + return { detected: true, reason: "second formatter config detected" }; + } + plan(ctx: ProjectContext, mode: ExecutionMode): ExecutionTask[] { + return [ + { + id: "second-fmt-task", + toolId: this.id, + capability: "format", + executable: "second-fmt", + args: ["."], + cwd: ctx.cwd, + mode, + }, + ]; + } + } + + customRegistry.registerAdapter(new StandaloneFormatAdapter()); + customRegistry.registerAdapter(new SecondStandaloneFormatAdapter()); + + const plan = await planExecution(customRegistry, { cwd: tempDir }, "fix"); + expect(plan.tasks.map((t) => t.id)).toEqual(["standalone-fmt-task"]); + expect(plan.skippedTools).toContainEqual( + expect.objectContaining({ + id: "second-fmt", + reason: "all capabilities already covered by higher priority tool", + }), + ); + }); + + it("retains tasks when standalone and regular adapters produce independent capabilities", async () => { + const registry = createDefaultRegistry(); + + class StandaloneTypecheckAdapter implements ToolAdapter { + id = "standalone-typecheck"; + name = "Standalone Typechecker"; + capabilities: ["typecheck"] = ["typecheck"]; + detect() { + return { detected: true, reason: "typecheck config detected" }; + } + plan(ctx: ProjectContext, mode: ExecutionMode): ExecutionTask[] { + return [ + { + id: "standalone-typecheck-task", + toolId: this.id, + capability: "typecheck", + executable: "tsc", + args: ["--noEmit"], + cwd: ctx.cwd, + mode, + }, + ]; + } + } + + registry.registerAdapter(new StandaloneTypecheckAdapter()); + + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + "format:write": "prettier --write .", + }, + }), + ); + + const plan = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(plan.tasks.map((t) => t.id)).toEqual([ + "script-format:write", + "standalone-typecheck-task", + ]); + expect(plan.selectedTools.map((t) => t.id)).toContain("standalone-typecheck"); + }); + + it("partially skips overlapping capabilities between standalone and regular adapters in the same scope", async () => { + const registry = createDefaultRegistry(); + + class StandaloneMultiToolAdapter implements ToolAdapter { + id = "standalone-multi"; + name = "Standalone Multi Tool"; + capabilities: ["format", "assist"] = ["format", "assist"]; + scope = "javascript"; + detect() { + return { detected: true, reason: "multi tool config detected" }; + } + plan(ctx: ProjectContext, mode: ExecutionMode): ExecutionTask[] { + return [ + { + id: "standalone-multi-fmt", + toolId: this.id, + capability: "format", + executable: "standalone-multi", + args: ["fmt"], + cwd: ctx.cwd, + mode, + }, + { + id: "standalone-multi-assist", + toolId: this.id, + capability: "assist", + executable: "standalone-multi", + args: ["assist"], + cwd: ctx.cwd, + mode, + }, + ]; + } + } + + registry.registerAdapter(new StandaloneMultiToolAdapter()); + + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + "format:write": "prettier --write .", + }, + }), + ); + + const plan = await planExecution(registry, { cwd: tempDir }, "fix"); + expect(plan.tasks.map((t) => t.id)).toEqual([ + "script-format:write", + "standalone-multi-assist", + ]); + expect(plan.skippedTools).toContainEqual( + expect.objectContaining({ + id: "standalone-multi", + reason: "partially skipped (format covered by higher priority tool)", + }), + ); + }); + + it("preserves task ID deduplication behavior", async () => { + const customRegistry = new AutofixRegistry(); + + class StandaloneAdapter1 implements ToolAdapter { + id = "adapter-1"; + name = "Adapter 1"; + capabilities: ["typecheck"] = ["typecheck"]; + detect() { + return { detected: true, reason: "adapter 1 detected" }; + } + plan(ctx: ProjectContext, mode: ExecutionMode): ExecutionTask[] { + return [ + { + id: "shared-task-id", + toolId: this.id, + capability: "typecheck", + executable: "check-1", + args: [], + cwd: ctx.cwd, + mode, + }, + ]; + } + } + + class StandaloneAdapter2 implements ToolAdapter { + id = "adapter-2"; + name = "Adapter 2"; + capabilities: ["assist"] = ["assist"]; + detect() { + return { detected: true, reason: "adapter 2 detected" }; + } + plan(ctx: ProjectContext, mode: ExecutionMode): ExecutionTask[] { + return [ + { + id: "shared-task-id", + toolId: this.id, + capability: "assist", + executable: "check-2", + args: [], + cwd: ctx.cwd, + mode, + }, + ]; + } + } + + customRegistry.registerAdapter(new StandaloneAdapter1()); + customRegistry.registerAdapter(new StandaloneAdapter2()); + + const plan = await planExecution(customRegistry, { cwd: tempDir }, "fix"); + // Even though capabilities are independent (typecheck vs assist), task IDs are identical, so second is deduplicated + expect(plan.tasks).toHaveLength(1); + expect(plan.tasks[0].executable).toBe("check-1"); + }); + + it("ensures standalone adapters without explicit scope do not conflict with each other or provider adapters", async () => { + const customRegistry = new AutofixRegistry(); + + // Standalone format adapter with default scope + class StandaloneDefault1 implements ToolAdapter { + id = "default-standalone-1"; + name = "Default Standalone 1"; + capabilities: ["format"] = ["format"]; + detect() { + return { detected: true, reason: "default standalone 1 detected" }; + } + plan(ctx: ProjectContext, mode: ExecutionMode): ExecutionTask[] { + return [ + { + id: "default-standalone-1-fmt", + toolId: this.id, + capability: "format", + executable: "fmt-1", + args: [], + cwd: ctx.cwd, + mode, + }, + ]; + } + } + + // Standalone format adapter with default scope + class StandaloneDefault2 implements ToolAdapter { + id = "default-standalone-2"; + name = "Default Standalone 2"; + capabilities: ["format"] = ["format"]; + detect() { + return { detected: true, reason: "default standalone 2 detected" }; + } + plan(ctx: ProjectContext, mode: ExecutionMode): ExecutionTask[] { + return [ + { + id: "default-standalone-2-fmt", + toolId: this.id, + capability: "format", + executable: "fmt-2", + args: [], + cwd: ctx.cwd, + mode, + }, + ]; + } + } + + customRegistry.registerAdapter(new StandaloneDefault1()); + customRegistry.registerAdapter(new StandaloneDefault2()); + + const plan = await planExecution(customRegistry, { cwd: tempDir }, "fix"); + // Both default standalone adapters have independent default scopes (standalone:default-standalone-1 and standalone:default-standalone-2), + // so neither suppresses the other! + expect(plan.tasks.map((t) => t.id)).toEqual([ + "default-standalone-1-fmt", + "default-standalone-2-fmt", + ]); + }); + }); + describe("Registry Extensibility", () => { it("resolves project binaries and Windows executable shims cleanly", async () => { const binDir = path.join(tempDir, "node_modules", ".bin"); From b503c517dc7460eb639a74e612dea869de079b23 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 11 Nov 2026 21:08:22 +0700 Subject: [PATCH 25/25] Consistent Environment Wrapper Handling in Script Delegation (#335) * fix(autofix): handle environment wrappers in script delegation * fix(autofix): parse quoted shell commands in cross-env-shell * fix(autofix): preserve syntax errors in recursive script analysis --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- ...x-environment-wrapper-script-delegation.md | 5 + dist/autofix.mjs | 3 +- .../adapters/javascript/script-adapter.ts | 113 +++++--- tests/autofix-architecture.test.ts | 267 ++++++++++++++++++ 4 files changed, 355 insertions(+), 33 deletions(-) create mode 100644 .changeset/fix-environment-wrapper-script-delegation.md diff --git a/.changeset/fix-environment-wrapper-script-delegation.md b/.changeset/fix-environment-wrapper-script-delegation.md new file mode 100644 index 00000000..cd9cdfb7 --- /dev/null +++ b/.changeset/fix-environment-wrapper-script-delegation.md @@ -0,0 +1,5 @@ +--- +"@area44/workflows": patch +--- + +Handle environment wrappers consistently in script delegation and command verification to prevent duplicate autofix task execution. diff --git a/dist/autofix.mjs b/dist/autofix.mjs index 8418d70a..2b254bb1 100644 --- a/dist/autofix.mjs +++ b/dist/autofix.mjs @@ -306,7 +306,8 @@ const Vn=[`uv`,`pip`],Hn=[`.git`,`.venv`,`venv`,`env`,`.env`,`virtualenv`,`.virt `&&e[i]!==`\r`;)r+=` `,i++;return i!Un(e))}function mr(e,t){if(!Un(e[`build-system`]))return!1;if(typeof t==`string`){let e=fr(t);return/(?:^|\n)\s*\[\s*build-system\s*\]\s*(?:\n|$)/.test(e)}let n=Object.entries(e[`build-system`]);return n.length===0||n.some(([,e])=>!Un(e))}function hr(e,t){if(pr(e,t)||mr(e,t))return!0;if(Un(e.tool)&&Un(e.tool.uv)){let t=e.tool.uv;return Yn(t.workspace)||Array.isArray(t[`dev-dependencies`])}return!1}function gr(e){return Un(e.tool)&&Un(e.tool.uv)}function _r(e,t){return pr(e,t)||mr(e,t)}function vr(e,t){return p.relative(e,t)||`.`}function yr(e,t){if(!t)throw Error(`Invalid Python project configuration: 'uv.lock' was detected without a valid 'pyproject.toml' project or workspace configuration ('[project]', '[build-system]', or '[tool.uv.workspace]'). 'uv sync' requires a valid 'pyproject.toml' file.`);return{name:`uv`,lockfile:`uv.lock`,configFile:`pyproject.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}}function br(e,t){if(e.hasRequirementsTxt&&e.requirementsDir){let t=vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`));return{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`pip`,`install`,`-r`,t]}],execPrefix:`uv run`}}return t?{name:`uv`,configFile:e.pyprojectDir?`pyproject.toml`:`uv.toml`,installCommands:[{executable:`uv`,args:[`sync`]}],lockCommand:`uv lock`,syncCommand:`uv sync`,execPrefix:`uv run`}:null}function xr(e){let t=e.pyprojectToml?.success===!0&&hr(e.pyprojectToml.data,e.pyprojectToml.rawContent),n=e.workspaceRootToml?.success===!0&&hr(e.workspaceRootToml.data,e.workspaceRootToml.rawContent),r=t||n,i=e.uvToml?.success===!0,a=e.pyprojectToml?.success===!0&&gr(e.pyprojectToml.data)||e.workspaceRootToml?.success===!0&&gr(e.workspaceRootToml.data);return e.hasUvLock?yr(e,r):a||i?br(e,r):null}function Sr(e){let t=e.pyprojectToml?.success===!0&&_r(e.pyprojectToml.data,e.pyprojectToml.rawContent);if(!(e.hasRequirementsTxt||e.hasSetupPy||e.hasSetupCfg||t))return null;let n;t?n=`pyproject.toml`:e.hasSetupPy?n=`setup.py`:e.hasSetupCfg&&(n=`setup.cfg`);let r=[],i,a=e.hasSetupPy||e.hasSetupCfg||t,o=e.requirementsDir?vr(e.cwd,p.join(e.requirementsDir,`requirements.txt`)):`requirements.txt`,s=vr(e.cwd,e.projectDir);return e.hasRequirementsTxt&&a?(r=[{executable:`pip`,args:[`install`,`-r`,o]},{executable:`pip`,args:[`install`,`-e`,s]}],i=`requirements.txt`):e.hasRequirementsTxt?(r=[{executable:`pip`,args:[`install`,`-r`,o]}],i=`requirements.txt`):a&&(r=[{executable:`pip`,args:[`install`,`-e`,s]}]),{name:`pip`,lockfile:i,configFile:n,installCommands:r,execPrefix:``}}function Cr(e=process.cwd(),t){if(t?.hasSource??or(e))return!0;let n=t?.ctx??ir(e);if(n.projectDir===n.cwd&&tr(n.cwd)&&(n.pyprojectToml?.success===!0&&hr(n.pyprojectToml.data,n.pyprojectToml.rawContent)||n.hasUvLock||n.hasRequirementsTxt||n.hasSetupPy||n.hasSetupCfg))return!0;if(n.workspaceRootDir&&n.workspaceRootToml?.success===!0){let t=Zn(n.workspaceRootDir);if(t&&Xn(n.workspaceRootDir,p.resolve(e),t.config))return!0}return!1}function wr(e,t){t!=null&&(e.pyprojectToml=t);for(let t of Vn)if(t===`uv`){let t=xr(e);if(t)return t}else if(t===`pip`){let t=Sr(e);if(t)return t}return{name:`pip`,installCommands:[],execPrefix:``,isStandalone:!0}}function Tr(e=process.cwd(),t,n){let r=n?.ctx??ir(e);return n?.isProject??Cr(e,{ctx:r,hasSource:n?.hasSource})?wr(r,t):null}function Er(e){if(!Array.isArray(e))throw Error(`Invalid Python environment: "pmInfo.installCommands" must be an array`);for(let t of e){if(!t||typeof t!=`object`)throw Error(`Invalid Python environment: malformed "installCommands" item`);let e=t;if(typeof e.executable!=`string`||!e.executable.trim()||!Array.isArray(e.args)||!e.args.every(e=>typeof e==`string`))throw Error(`Invalid Python environment: malformed "installCommands" item`)}}function Dr(e,t=`Invalid Python environment: "pmInfo" must be an object`){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(t);let n=e;if(n.name!==`uv`&&n.name!==`pip`)throw Error(`Invalid Python environment: pmInfo name must be "uv" or "pip"`);return Er(n.installCommands),n}function Or(e){if(!process.argv[1])return!1;try{return l(e)===f.realpathSync(process.argv[1])}catch{return!1}}async function kr(e,t,n=process.platform){let r=p.join(e,`node_modules`,`.bin`),i=/* @__PURE__ */ new Set([`.cmd`,`.bat`,`.exe`]);if(n===`win32`){let e=p.extname(t).toLowerCase();if(e){if(!i.has(e))return;let n=p.join(r,t);if(f.existsSync(n))return n}else for(let e of[`.cmd`,`.bat`,`.exe`,``]){let n=p.join(r,`${t}${e}`);if(f.existsSync(n))return n}}else{let e=p.join(r,t);if(f.existsSync(e))return e}let a=await Vt(t,!1);if(a){if(n===`win32`){let e=p.extname(a).toLowerCase();if(e&&!i.has(e))return}return a}}var Ar=class{platform;constructor(e=process.platform){this.platform=e}async resolveTaskExecutable(e){if(e.toolId===`npm-scripts`)return e.executable;if(e.toolId===`ruff`){if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);return`ruff`}let t=await kr(e.cwd,e.executable,this.platform);if(!t){let t=e.toolName||e.toolId,n=e.requiredPackage||e.executable;throw Error(`Configured tool "${t}" could not run: executable "${e.executable}" is not available in node_modules/.bin or PATH. Please install "${n}" in project dependencies.`)}return t}async executeTasks(e){let t=[];for(let n of e){let e=`${n.executable} ${n.args.join(` `)}`.trim();try{let r=await this.resolveTaskExecutable(n);en(`Executing: ${e}`);let i=n.env?Object.fromEntries(Object.entries({...process.env,...n.env}).filter(e=>e[1]!==void 0)):void 0,a=await Yt(r,n.args,{cwd:n.cwd,env:i,ignoreReturnCode:!0});if(a!==0){let r=n.toolId===`ruff`?`Ruff command "${e}" failed. Check Python and Ruff configuration.`:n.toolId===`npm-scripts`?`Script "${n.args[1]||e}" failed while executing "${e}".`:`Task "${n.id}" (${e}) failed with exit code ${a}.`;t.push({task:n,exitCode:a,error:Error(r)})}else t.push({task:n,exitCode:a})}catch(e){let r=e instanceof Error?e:Error(String(e));t.push({task:n,exitCode:1,error:r})}}return t}};function jr(e,t){return t.has(`autofix`)?!0:e===`autofix`?t.has(`format`)&&t.has(`lint`)&&t.has(`assist`):t.has(e)}function Mr(e,t){let n=[],r=[];for(let i of e)jr(i.capability,t)?r.push(i):n.push(i);return{kept:n,skipped:r}}function Nr(e,t){let n=e.get(t);return n||(n=/* @__PURE__ */ new Set,e.set(t,n)),n}async function Pr(e,t,n,r,i,a,o){for(let s of e){let e=s.adapter,c=Nr(t,s.scope),l=await e.plan(n,r);if(l.length===0)continue;let{kept:u,skipped:d}=Mr(l,c);if(u.length===0)a.push({id:e.id,name:e.name,reason:`all capabilities already covered by higher priority tool`});else{i.push({id:e.id,name:e.name,reason:s.reason});for(let e of u)if(c.add(e.capability),e.capabilities)for(let t of e.capabilities)c.add(t);if(o.push(...u),d.length>0){let t=Array.from(new Set(d.map(e=>e.capability))).join(`, `);a.push({id:e.id,name:e.name,reason:`partially skipped (${t} covered by higher priority tool)`})}}}}async function Fr(e,t,n,r,i,a,o){let s=[];for(let t of e.getStandaloneAdapters()){let e=await t.detect(n),r=t.scope??`standalone:${t.id}`;e.detected?s.push({adapter:t,reason:e.reason,scope:r}):e.reason&&!e.reason.startsWith(`no `)&&a.push({id:t.id,name:t.name,reason:e.reason})}await Pr(s,t,n,r,i,a,o)}function Ir(e){let t=[],n=/* @__PURE__ */ new Set;for(let r of e)n.has(r.id)||(n.add(r.id),t.push(r));return t}async function Lr(e,t,n=`fix`){let r=t.hasPythonSource??or(t.cwd),i=t.jsEnv??fn(t.cwd),a={...t,jsEnv:i,hasPythonSource:r},o=[],s=[],c=[],l=e.getProviders(),u=/* @__PURE__ */ new Map;for(let e of l){if(!await e.detect(a))continue;let t=e.getAdapters(a),r=[];for(let n of t){let t=await n.detect(a),i=n.scope??e.id;t.detected?r.push({adapter:n,reason:t.reason,scope:i}):t.reason&&!t.reason.startsWith(`no `)&&s.push({id:n.id,name:n.name,reason:t.reason})}await Pr(r,u,a,n,o,s,c)}await Fr(e,u,a,n,o,s,c);let d=Ir(c);return{tasks:d,selectedTools:o,skippedTools:s,summary:Rr(e,a,o,s,d)}}function Rr(e,t,n,r,i){let a=[];a.push(`Detected environments:`);let o=t.hasPythonSource??!1,s=t.jsEnv?.hasPackageJson??!1;if(a.push(` Python: ${o}`),a.push(` JavaScript: ${s}`),o&&(a.push(``),a.push(`Python toolchain:`),n.filter(e=>e.id===`ruff`).length>0?a.push(` Ruff: default tool`):a.push(` None`)),s){a.push(``),a.push(`JavaScript toolchain:`);let e=n.filter(e=>e.id!==`ruff`);for(let t of e)a.push(` ${t.name}: selected`);let t=r.filter(e=>e.id!==`ruff`);for(let e of t)a.push(` ${e.name}: skipped (${e.reason})`)}if(a.push(``),a.push(`Execution plan:`),i.length===0?a.push(` (no tasks to execute)`):i.forEach((e,t)=>{let n=e.description||`${e.executable} ${e.args.join(` `)}`;a.push(` ${t+1}. ${n}`)}),r.length>0){a.push(``),a.push(`Skipped:`);for(let e of r)a.push(` - ${e.name}: ${e.reason}`)}return a.join(` `)}function zr(e){for(let t of[`format:write`,`format:fix`,`format`,`fmt`])if(e[t]&&Yi(e[t],e))return t}function Br(e){if(e[`format:check`]&&Ji(e[`format:check`],e)===`read-only`)return`format:check`;if(e[`fmt:check`]&&Ji(e[`fmt:check`],e)===`read-only`)return`fmt:check`}function Vr(e,t){return t===`fix`?zr(e):Br(e)}function Hr(e,t){if(t===`fix`)return e[`lint:fix`]?`lint:fix`:e[`lint:write`]?`lint:write`:void 0;if(e[`lint:check`]&&Ji(e[`lint:check`],e)===`read-only`)return`lint:check`;if(e.lint&&Ji(e.lint,e)===`read-only`)return`lint`}function Ur(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped)return 0;let r=e[t];return r===`;`||r===` `?1:r===`&`&&e[t+1]===`&`||r===`|`&&e[t+1]===`|`?2:+(r===`|`)}function Wr(e,t){let n=t;for(;nt?n-1:t}function Gr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Kr(e,t){return t.isEscaped=!1,{ch:e,advance:!0}}function qr(e,t,n,r){let i=e[t];if(n.isEscaped)return{newCmd:r+Kr(i,n).ch,nextIndex:t,sepLen:0};if(i===`\\`&&!n.inSingleQuote)return n.isEscaped=!0,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`'`&&!n.inDoubleQuote)return n.inSingleQuote=!n.inSingleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`"`&&!n.inSingleQuote)return n.inDoubleQuote=!n.inDoubleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`#`&&Gr(r,n))return{newCmd:r,nextIndex:Wr(e,t),sepLen:0};let a=Ur(e,t,n);return{newCmd:r+(a===0?i:``),nextIndex:t,sepLen:a}}function Jr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1,hasSyntaxError:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=a.sepLen-1):(n=a.newCmd,i=a.nextIndex)}return(r.inSingleQuote||r.inDoubleQuote||r.isEscaped)&&(r.hasSyntaxError=!0),n.trim()&&t.push(n.trim()),{commands:t,hasSyntaxError:r.hasSyntaxError}}function Yr(e,t,n){return t.isEscaped=!1,n+e}function Xr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}const Zr=/* @__PURE__ */ new Set([`@`,`*`,`#`,`?`,`-`,`$`,`!`,`0`]);function Qr(e,t,n){if(n.inSingleQuote||n.isEscaped||e[t]!==`$`||t+1>=e.length)return!1;let r=e[t+1];return!!(r===`{`||Zr.has(r)||r>=`1`&&r<=`9`||r===`_`||r>=`a`&&r<=`z`||r>=`A`&&r<=`Z`)}function $r(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped||e[t]!==`&`)return!1;let r=t>0?e[t-1]:``,i=t+1`}function ei(e,t,n){if(n.inSingleQuote||n.isEscaped)return!1;let r=e[t];return r==="`"||r===`$`&&t+1`)&&t+1`||r===`<`||r===`&`&&t+1`}function ri(e,t,n){return $r(e,t,n.state)||Qr(e,t,n.state)||ei(e,t,n.state)||ti(e,t,n.state)?(n.inspection.hasUnsupportedSyntax=!0,!0):ni(e,t,n.state)?(n.inspection.hasRedirection=!0,n.inspection.hasUnsupportedSyntax=!0,!0):!1}function ii(e,t,n,r){let i=e[t];return n.state.isEscaped?{word:Yr(i,n.state,r),hasChars:!0,skipped:!1}:i===`\\`&&!n.state.inSingleQuote?(n.state.isEscaped=!0,{word:r,hasChars:!1,skipped:!0}):(ri(e,t,n),Xr(i,n.state)?{word:r,hasChars:!0,skipped:!0}:{word:r+i,hasChars:!0,skipped:!1})}function ai(e){let t={tokens:[],hasUnsupportedSyntax:!1,hasRedirection:!1,hasSyntaxError:!1},n={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1},r={inspection:t,state:n},i=``,a=!1;for(let o=0;o0&&r.push(i)}return{invocations:r,hasSyntaxError:n}}function di(e){return ui(e).invocations}function fi(e,t,n={},r=/* @__PURE__ */ new Set){if(!e||!t)return!1;let i=di(n[e]===void 0?e:n[e]);for(let e of i){if(li(e,t))return!0;let i=Bi(e);if(i){if(i===t)return!0;if(!r.has(i)&&n[i]!==void 0){r.add(i);try{if(fi(n[i],t,n,r))return!0}finally{r.delete(i)}}}let a=Vi(e);if(a!==void 0&&fi(a,t,n,r))return!0}return!1}function pi(e,t,n){return!n||n===t?!1:!fi(e[t]||``,n,e)}function mi(e,t,n){return!n||n===t?!1:!fi(e[t]||``,n,e)}function hi(e){let[t]=e;return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||(e===`--fix`||e.startsWith(`--fix=`))&&(t!==`eslint`||e!==`--fix-dry-run`))}function gi(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function _i(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function vi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function yi(e){let[t]=e;return t===`eslint`&&e.some(e=>(e===`--fix`||e.startsWith(`--fix=`))&&e!==`--fix-dry-run`)}function bi(e){let[t]=e;return t===`oxlint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function xi(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function Si(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function Ci(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:!e.some(e=>e===`--check`||e===`-c`)}function wi(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Ti(e){return e.some(e=>e===`--fix`||e.startsWith(`--fix=`)&&e!==`--fix-dry-run`||e===`-o`||e.startsWith(`-o=`)||e===`--output-file`||e.startsWith(`--output-file=`)||e===`--cache`||e===`--cache-file`||e.startsWith(`--cache-file=`)||e===`--cache-location`||e.startsWith(`--cache-location=`))}function Ei(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--cache`||e===`--cache-location`||e.startsWith(`--cache-location=`)||e===`--insert-pragma`)}function Di(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`)||e===`--reporter-file`||e.startsWith(`--reporter-file=`)||e===`--log-file`||e.startsWith(`--log-file=`))}function Oi(e){return e.some(e=>e===`--fix`||e.startsWith(`--fix=`)||e===`--fix-suggestions`||e===`--fix-dangerously`||e===`--init`)}function ki(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--init`||e===`--migrate`||e.startsWith(`--migrate=`))}function Ai(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`--check`||e===`-c`||e===`--list-different`||e===`-l`)&&!Ei(e)}function ji(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`--check`||e===`-c`)&&!ki(e)}function Mi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:!Di(e)}function Ni(e){let[t]=e;return t===`eslint`&&!Ti(e)}function Pi(e){let[t]=e;return t===`oxlint`&&!Oi(e)}function Fi(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:!Di(e)}function Ii(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:!Di(e)}function Li(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:e.some(e=>e===`--check`||e===`-c`)&&!ki(e)}function Ri(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:!Oi(e)}function zi(e){let[t,n]=e;return t!==`vp`||n!==`check`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Bi(e){if(e.length===0)return;let[t,n,r]=e;if((t===`npm`||t===`pnpm`||t===`yarn`||t===`bun`)&&n===`run`&&r)return r;if((t===`pnpm`||t===`bun`||t===`yarn`)&&n&&!n.startsWith(`-`))return n}function Vi(e){if(e.length>=3&&(e[0]===`sh`||e[0]===`bash`)&&e[1]===`-c`)return e[2]}function Hi(e){if(e.length===0)return e;let[t]=e;if(t!==`cross-env`&&t!==`cross-env-shell`)return e;let n=1;for(;n{let r=Bi(e);if(r){if(n.has(r))return!1;let e=t[r];if(!e)return!1;n.add(r);try{return Yi(e,t,n)}finally{n.delete(r)}}let i=Vi(e);return i===void 0?gi(e)||_i(e)||vi(e)||Ci(e):Yi(i,t,n)})}function Xi(e,t={},n=/* @__PURE__ */ new Set){return di(e).some(e=>{let r=Bi(e);if(r){if(n.has(r))return!1;let e=t[r];if(!e)return!1;n.add(r);try{return Xi(e,t,n)}finally{n.delete(r)}}let i=Vi(e);return i===void 0?yi(e)||bi(e)||xi(e)||wi(e):Xi(i,t,n)})}function Zi(e,t={},n=/* @__PURE__ */ new Set){return di(e).some(e=>{let r=Bi(e);if(r){if(n.has(r))return!1;let e=t[r];if(!e)return!1;n.add(r);try{return Zi(e,t,n)}finally{n.delete(r)}}let i=Vi(e);if(i!==void 0)return Zi(i,t,n);if(Si(e))return!0;let[a,o]=e;return a===`vp`&&o===`check`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))})}function Qi(e,t,n,r){return t&&fi(e,t,n)?!0:r(e)}function $i(e,t,n,r,i){let a=Qi(t,r,e,t=>Yi(t,e)),o=Qi(t,i,e,t=>Xi(t,e)),s=Zi(t,e);return a&&o?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:n}]:a&&!s?[{capability:`format`,scriptName:n}]:o&&!s?[{capability:`lint`,scriptName:n}]:s?[{capability:`autofix`,scriptName:n}]:[{capability:`typecheck`,capabilities:[],scriptName:n}]}function ea(e,t){return Yi(t[e],t)?{capability:`format`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function ta(e,t){return Xi(t[e],t)?{capability:`lint`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function na(e,t,n){let r=[];return e&&r.push(ea(e,n)),t&&r.push(ta(t,n)),r}function ra(e,t,n,r,i){r&&pi(t,n,r)&&e.push(ea(r,t)),i&&mi(t,n,i)&&e.push(ta(i,t))}function ia(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Vr(e,`fix`),r=Hr(e,`fix`);if(!t)return na(n,r,e);let i=$i(e,e[t]||``,t,n,r);return ra(i,e,t,n,r),i}function aa(e){let t=[],n=Vr(e,`check`),r=Hr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function oa(e,t){return t===`fix`?ia(e):aa(e)}var sa=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=oa(t,`fix`),r=oa(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=oa(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function ca(e){return e?Object.values(e).some(t=>Ui(t,e)):!1}function la(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ua(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var da=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ua(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&ca(t?.scripts)?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},fa=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=la(t,`@biomejs/biome`),r=ua(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},pa=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=la(t,`prettier`),r=!!t?.prettier,i=ua(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},ma=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=la(t,`eslint`),r=!!t?.eslintConfig,i=ua(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},ha=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=la(t,`oxlint`),r=ua(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ga=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=la(t,`oxfmt`),r=ua(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},_a=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new sa;vitePlusAdapter=new da;biomeAdapter=new fa;prettierAdapter=new pa;eslintAdapter=new ma;oxlintAdapter=new ha;oxfmtAdapter=new ga;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},va=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},ya=class{id=`python`;name=`Python`;ruffAdapter=new va;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},ba=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function xa(){let e=new ba;return e.registerProvider(new ya),e.registerProvider(new _a),e}const Sa=xa();async function Ca(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function wa(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Lr(Sa,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await Ca(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` +`;)n++;return n>t?n-1:t}function Gr(e,t){return t.inSingleQuote||t.inDoubleQuote||t.isEscaped?!1:e.length===0||/\s/.test(e[e.length-1])}function Kr(e,t){return t.isEscaped=!1,{ch:e,advance:!0}}function qr(e,t,n,r){let i=e[t];if(n.isEscaped)return{newCmd:r+Kr(i,n).ch,nextIndex:t,sepLen:0};if(i===`\\`&&!n.inSingleQuote)return n.isEscaped=!0,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`'`&&!n.inDoubleQuote)return n.inSingleQuote=!n.inSingleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`"`&&!n.inSingleQuote)return n.inDoubleQuote=!n.inDoubleQuote,{newCmd:r+i,nextIndex:t,sepLen:0};if(i===`#`&&Gr(r,n))return{newCmd:r,nextIndex:Wr(e,t),sepLen:0};let a=Ur(e,t,n);return{newCmd:r+(a===0?i:``),nextIndex:t,sepLen:a}}function Jr(e){let t=[],n=``,r={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1,hasSyntaxError:!1};for(let i=0;i0?(n.trim()&&t.push(n.trim()),n=``,i+=a.sepLen-1):(n=a.newCmd,i=a.nextIndex)}return(r.inSingleQuote||r.inDoubleQuote||r.isEscaped)&&(r.hasSyntaxError=!0),n.trim()&&t.push(n.trim()),{commands:t,hasSyntaxError:r.hasSyntaxError}}function Yr(e,t,n){return t.isEscaped=!1,n+e}function Xr(e,t){return e===`'`&&!t.inDoubleQuote?(t.inSingleQuote=!t.inSingleQuote,!0):e===`"`&&!t.inSingleQuote&&(t.inDoubleQuote=!t.inDoubleQuote,!0)}const Zr=/* @__PURE__ */ new Set([`@`,`*`,`#`,`?`,`-`,`$`,`!`,`0`]);function Qr(e,t,n){if(n.inSingleQuote||n.isEscaped||e[t]!==`$`||t+1>=e.length)return!1;let r=e[t+1];return!!(r===`{`||Zr.has(r)||r>=`1`&&r<=`9`||r===`_`||r>=`a`&&r<=`z`||r>=`A`&&r<=`Z`)}function $r(e,t,n){if(n.inSingleQuote||n.inDoubleQuote||n.isEscaped||e[t]!==`&`)return!1;let r=t>0?e[t-1]:``,i=t+1`}function ei(e,t,n){if(n.inSingleQuote||n.isEscaped)return!1;let r=e[t];return r==="`"||r===`$`&&t+1`)&&t+1`||r===`<`||r===`&`&&t+1`}function ri(e,t,n){return $r(e,t,n.state)||Qr(e,t,n.state)||ei(e,t,n.state)||ti(e,t,n.state)?(n.inspection.hasUnsupportedSyntax=!0,!0):ni(e,t,n.state)?(n.inspection.hasRedirection=!0,n.inspection.hasUnsupportedSyntax=!0,!0):!1}function ii(e,t,n,r){let i=e[t];return n.state.isEscaped?{word:Yr(i,n.state,r),hasChars:!0,skipped:!1}:i===`\\`&&!n.state.inSingleQuote?(n.state.isEscaped=!0,{word:r,hasChars:!1,skipped:!0}):(ri(e,t,n),Xr(i,n.state)?{word:r,hasChars:!0,skipped:!0}:{word:r+i,hasChars:!0,skipped:!1})}function ai(e){let t={tokens:[],hasUnsupportedSyntax:!1,hasRedirection:!1,hasSyntaxError:!1},n={inSingleQuote:!1,inDoubleQuote:!1,isEscaped:!1},r={inspection:t,state:n},i=``,a=!1;for(let o=0;o0;){let e=0;for(;e0&&(t[0]===`cross-env`||t[0]===`cross-env-shell`)){let e=ci(t);if(e===t)break;t=e}else break}return t}function ui(e){return li(e)}function di(e,t){if(e.length===0)return!1;let[n,r,i]=e;return(n===`npm`||n===`pnpm`||n===`yarn`||n===`bun`)&&r===`run`&&i===t||(n===`pnpm`||n===`bun`||n===`yarn`)&&r===t}function fi(e){if(!e)return{invocations:[],hasSyntaxError:!1};let t=Jr(e),n=t.hasSyntaxError,r=[];for(let e of t.commands){let t=ai(e);t.hasSyntaxError&&(n=!0);let i=ui(t.tokens);i.length>0&&r.push(i)}return{invocations:r,hasSyntaxError:n}}function pi(e,t,n={},r=/* @__PURE__ */ new Set){if(!e||!t)return!1;let{invocations:i,hasSyntaxError:a}=fi(n[e]===void 0?e:n[e]);if(a)return!1;for(let e of i){if(di(e,t))return!0;let i=Vi(e);if(i){if(i===t)return!0;if(!r.has(i)&&n[i]!==void 0){r.add(i);try{if(pi(n[i],t,n,r))return!0}finally{r.delete(i)}}}let a=Hi(e);if(a!==void 0&&pi(a,t,n,r))return!0}return!1}function mi(e,t,n){return!n||n===t?!1:!pi(e[t]||``,n,e)}function hi(e,t,n){return!n||n===t?!1:!pi(e[t]||``,n,e)}function gi(e){let[t]=e;return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||(e===`--fix`||e.startsWith(`--fix=`))&&(t!==`eslint`||e!==`--fix-dry-run`))}function _i(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function vi(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function yi(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`))}function bi(e){let[t]=e;return t===`eslint`&&e.some(e=>(e===`--fix`||e.startsWith(`--fix=`))&&e!==`--fix-dry-run`)}function xi(e){let[t]=e;return t===`oxlint`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Si(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function Ci(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`))}function wi(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:!e.some(e=>e===`--check`||e===`-c`)}function Ti(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Ei(e){return e.some(e=>e===`--fix`||e.startsWith(`--fix=`)&&e!==`--fix-dry-run`||e===`-o`||e.startsWith(`-o=`)||e===`--output-file`||e.startsWith(`--output-file=`)||e===`--cache`||e===`--cache-file`||e.startsWith(`--cache-file=`)||e===`--cache-location`||e.startsWith(`--cache-location=`))}function Di(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--cache`||e===`--cache-location`||e.startsWith(`--cache-location=`)||e===`--insert-pragma`)}function Oi(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--fix`||e.startsWith(`--fix=`)||e===`--reporter-file`||e.startsWith(`--reporter-file=`)||e===`--log-file`||e.startsWith(`--log-file=`))}function ki(e){return e.some(e=>e===`--fix`||e.startsWith(`--fix=`)||e===`--fix-suggestions`||e===`--fix-dangerously`||e===`--init`)}function Ai(e){return e.some(e=>e===`-w`||e===`--write`||e.startsWith(`--write=`)||e===`--init`||e===`--migrate`||e.startsWith(`--migrate=`))}function ji(e){let[t]=e;return t===`prettier`&&e.some(e=>e===`--check`||e===`-c`||e===`--list-different`||e===`-l`)&&!Di(e)}function Mi(e){let[t]=e;return t===`oxfmt`&&e.some(e=>e===`--check`||e===`-c`)&&!Ai(e)}function Ni(e){let[t,n]=e;return t!==`biome`||n!==`format`?!1:!Oi(e)}function Pi(e){let[t]=e;return t===`eslint`&&!Ei(e)}function Fi(e){let[t]=e;return t===`oxlint`&&!ki(e)}function Ii(e){let[t,n]=e;return t!==`biome`||n!==`lint`?!1:!Oi(e)}function Li(e){let[t,n]=e;return t!==`biome`||n!==`check`?!1:!Oi(e)}function Ri(e){let[t,n]=e;return t!==`vp`||n!==`fmt`?!1:e.some(e=>e===`--check`||e===`-c`)&&!Ai(e)}function zi(e){let[t,n]=e;return t!==`vp`||n!==`lint`?!1:!ki(e)}function Bi(e){let[t,n]=e;return t!==`vp`||n!==`check`?!1:!e.some(e=>e===`--fix`||e.startsWith(`--fix=`))}function Vi(e){if(e.length===0)return;let[t,n,r]=e;if((t===`npm`||t===`pnpm`||t===`yarn`||t===`bun`)&&n===`run`&&r)return r;if((t===`pnpm`||t===`bun`||t===`yarn`)&&n&&!n.startsWith(`-`))return n}function Hi(e){if(e.length>=3&&(e[0]===`sh`||e[0]===`bash`)&&e[1]===`-c`)return e[2];if(e.length===1&&e[0].trim()!==``&&(e[0].includes(` `)||e[0].includes(` `)||e[0].includes(` +`)||e[0].includes(`;`)||e[0].includes(`&`)||e[0].includes(`|`)))return e[0]}function Ui(e,t={},n=/* @__PURE__ */ new Set){if(!e)return!1;let{invocations:r,hasSyntaxError:i}=fi(e);if(i)return!1;for(let e of r){if(e.length===0)continue;if(e[0]===`vp`||(e[0]===`npx`||e[0]===`bunx`)&&e[1]===`vp`||(e[0]===`npm`||e[0]===`pnpm`||e[0]===`yarn`)&&(e[1]===`exec`||e[1]===`dlx`)&&e[2]===`vp`)return!0;let r=Hi(e);if(r!==void 0&&Ui(r,t,n))return!0;let i=Vi(e);if(i&&!n.has(i)&&t[i]){n.add(i);try{if(Ui(t[i],t,n))return!0}finally{n.delete(i)}}}return!1}function Wi(e){return _i(e)||vi(e)||yi(e)||bi(e)||xi(e)||Si(e)||Ci(e)||wi(e)||Ti(e)}function Gi(e){return ji(e)||Mi(e)||Ni(e)||Pi(e)||Fi(e)||Ii(e)||Li(e)||Ri(e)||zi(e)||Bi(e)}function Ki(e,t,n){if(e.length===0)return`unknown`;if(gi(e))return`write-capable`;let r=Hi(e);if(r!==void 0)return qi(r,t,n);let i=Vi(e);if(i){if(n.has(i))return`unknown`;let e=t[i];if(!e)return`unknown`;n.add(i);try{return qi(e,t,n)}finally{n.delete(i)}}return Wi(e)?`write-capable`:Gi(e)?`read-only`:`unknown`}function qi(e,t,n){let r=Jr(e);if(r.hasSyntaxError)return`unknown`;let{commands:i}=r;if(i.length===0)return`unknown`;let a=!1;for(let e of i){let r=ai(e),i=Ki(ui(r.tokens),t,n);if(i===`write-capable`)return`write-capable`;if(r.hasUnsupportedSyntax||i===`unknown`)return`unknown`;i===`read-only`&&(a=!0)}return a?`read-only`:`unknown`}function Ji(e,t={}){return qi(e,t,/* @__PURE__ */ new Set)}function Yi(e,t={},n=/* @__PURE__ */ new Set){let{invocations:r,hasSyntaxError:i}=fi(e);return!i&&r.some(e=>{let r=Vi(e);if(r){if(n.has(r))return!1;let e=t[r];if(!e)return!1;n.add(r);try{return Yi(e,t,n)}finally{n.delete(r)}}let i=Hi(e);return i===void 0?_i(e)||vi(e)||yi(e)||wi(e):Yi(i,t,n)})}function Xi(e,t={},n=/* @__PURE__ */ new Set){let{invocations:r,hasSyntaxError:i}=fi(e);return!i&&r.some(e=>{let r=Vi(e);if(r){if(n.has(r))return!1;let e=t[r];if(!e)return!1;n.add(r);try{return Xi(e,t,n)}finally{n.delete(r)}}let i=Hi(e);return i===void 0?bi(e)||xi(e)||Si(e)||Ti(e):Xi(i,t,n)})}function Zi(e,t={},n=/* @__PURE__ */ new Set){let{invocations:r,hasSyntaxError:i}=fi(e);return!i&&r.some(e=>{let r=Vi(e);if(r){if(n.has(r))return!1;let e=t[r];if(!e)return!1;n.add(r);try{return Zi(e,t,n)}finally{n.delete(r)}}let i=Hi(e);if(i!==void 0)return Zi(i,t,n);if(Ci(e))return!0;let[a,o]=e;return a===`vp`&&o===`check`&&e.some(e=>e===`--fix`||e.startsWith(`--fix=`))})}function Qi(e,t,n,r){return t&&pi(e,t,n)?!0:r(e)}function $i(e,t,n,r,i){let a=Qi(t,r,e,t=>Yi(t,e)),o=Qi(t,i,e,t=>Xi(t,e)),s=Zi(t,e);return a&&o?[{capability:`format`,capabilities:[`format`,`lint`],scriptName:n}]:a&&!s?[{capability:`format`,scriptName:n}]:o&&!s?[{capability:`lint`,scriptName:n}]:s?[{capability:`autofix`,scriptName:n}]:[{capability:`typecheck`,capabilities:[],scriptName:n}]}function ea(e,t){return Yi(t[e],t)?{capability:`format`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function ta(e,t){return Xi(t[e],t)?{capability:`lint`,scriptName:e}:{capability:`typecheck`,capabilities:[],scriptName:e}}function na(e,t,n){let r=[];return e&&r.push(ea(e,n)),t&&r.push(ta(t,n)),r}function ra(e,t,n,r,i){r&&mi(t,n,r)&&e.push(ea(r,t)),i&&hi(t,n,i)&&e.push(ta(i,t))}function ia(e){let t=e.fix?`fix`:e[`check:fix`]?`check:fix`:void 0,n=Vr(e,`fix`),r=Hr(e,`fix`);if(!t)return na(n,r,e);let i=$i(e,e[t]||``,t,n,r);return ra(i,e,t,n,r),i}function aa(e){let t=[],n=Vr(e,`check`),r=Hr(e,`check`);return n&&t.push({capability:`format`,scriptName:n}),r&&t.push({capability:`lint`,scriptName:r}),t}function oa(e,t){return t===`fix`?ia(e):aa(e)}var sa=class{id=`npm-scripts`;name=`package.json scripts`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson?.scripts;if(!t||Object.keys(t).length===0)return{detected:!1,reason:`no scripts declared in package.json`};let n=oa(t,`fix`),r=oa(t,`check`),i=[...n,...r];return i.length>0?{detected:!0,reason:`found supported scripts: ${Array.from(new Set(i.map(e=>`"${e.scriptName}"`))).join(`, `)}`}:{detected:!1,reason:`no supported autofix or check scripts found in package.json`}}plan(e,t){let n=oa(e.jsEnv?.packageJson?.scripts||{},t),r=cn(e.jsPm||`npm`);return n.map(n=>({id:`script-${n.scriptName}`,toolId:this.id,capability:n.capability,capabilities:n.capabilities,executable:r,args:[`run`,n.scriptName],cwd:e.cwd,mode:t,description:`package.json script: ${r} run ${n.scriptName}`}))}};function ca(e){return e?Object.values(e).some(t=>Ui(t,e)):!1}function la(e,t){return e?!!(e.dependencies?.[t]||e.devDependencies?.[t]||e.peerDependencies?.[t]||e.optionalDependencies?.[t]):!1}function ua(e,t){for(let n of t)if(f.existsSync(p.join(e,n)))return!0;return!1}var da=class{id=`vite-plus`;name=`Vite+`;capabilities=[`autofix`,`format`,`lint`];detect(e){let t=e.jsEnv?.packageJson,n=sn(t),r=ua(e.cwd,[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`,`vite.config.cjs`]);return n||r&&ca(t?.scripts)?{detected:!0,reason:`Vite+ dependency and/or configuration detected`}:{detected:!1,reason:`no Vite+ dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`vite-plus-fmt`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp fmt`},{id:`vite-plus-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`,`--fix`],cwd:e.cwd,mode:`fix`,description:`Vite+: vp lint --fix`}]:[{id:`vite-plus-fmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`format`,executable:`vp`,args:[`fmt`,`--check`],cwd:e.cwd,mode:`check`,description:`Vite+: vp fmt --check`},{id:`vite-plus-lint`,toolId:this.id,toolName:this.name,requiredPackage:`vite-plus`,capability:`lint`,executable:`vp`,args:[`lint`],cwd:e.cwd,mode:`check`,description:`Vite+: vp lint`}]}},fa=class{id=`biome`;name=`Biome`;capabilities=[`format`,`lint`,`assist`];detect(e){let t=e.jsEnv?.packageJson,n=la(t,`@biomejs/biome`),r=ua(e.cwd,[`biome.json`,`biome.jsonc`]);return n&&r?{detected:!0,reason:`Biome dependency and configuration detected`}:r?{detected:!0,reason:`Biome configuration detected`}:n?{detected:!1,reason:`Biome dependency present without configuration file`}:{detected:!1,reason:`no Biome dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`biome-format-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: format --write .`},{id:`biome-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: lint --write .`},{id:`biome-assist-fix`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--write`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`fix`,description:`Biome: safe assist actions (--write)`}]:[{id:`biome-format-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`format`,executable:`biome`,args:[`format`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: format .`},{id:`biome-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`lint`,executable:`biome`,args:[`lint`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: lint .`},{id:`biome-assist-check`,toolId:this.id,toolName:this.name,requiredPackage:`@biomejs/biome`,capability:`assist`,executable:`biome`,args:[`check`,`--formatter-enabled=false`,`--linter-enabled=false`,`.`],cwd:e.cwd,mode:`check`,description:`Biome: check assist actions`}]}},pa=class{id=`prettier`;name=`Prettier`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=la(t,`prettier`),r=!!t?.prettier,i=ua(e.cwd,[`.prettierrc`,`.prettierrc.json`,`.prettierrc.yml`,`.prettierrc.yaml`,`.prettierrc.json5`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`]);return n&&(r||i)?{detected:!0,reason:`Prettier dependency and configuration detected`}:r||i?{detected:!0,reason:`Prettier configuration detected`}:n?{detected:!1,reason:`Prettier dependency present without configuration`}:{detected:!1,reason:`no Prettier dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`prettier-format`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Prettier: format`}]:[{id:`prettier-check`,toolId:this.id,toolName:this.name,requiredPackage:`prettier`,capability:`format`,executable:`prettier`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Prettier: format check`}]}},ma=class{id=`eslint`;name=`ESLint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=la(t,`eslint`),r=!!t?.eslintConfig,i=ua(e.cwd,[`eslint.config.js`,`eslint.config.mjs`,`eslint.config.cjs`,`eslint.config.ts`,`.eslintrc`,`.eslintrc.js`,`.eslintrc.cjs`,`.eslintrc.json`,`.eslintrc.yaml`,`.eslintrc.yml`]);return n&&(r||i)?{detected:!0,reason:`ESLint dependency and configuration detected`}:r||i?{detected:!0,reason:`ESLint configuration detected`}:n?{detected:!1,reason:`ESLint dependency present without configuration`}:{detected:!1,reason:`no ESLint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`eslint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`ESLint: lint autofix`}]:[{id:`eslint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`eslint`,capability:`lint`,executable:`eslint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`ESLint: lint check`}]}},ha=class{id=`oxlint`;name=`Oxlint`;capabilities=[`lint`];detect(e){let t=e.jsEnv?.packageJson,n=la(t,`oxlint`),r=ua(e.cwd,[`.oxlintrc.json`,`oxlint.json`,`oxlint.config.ts`,`oxlint.config.js`]);return n&&r?{detected:!0,reason:`Oxlint dependency and configuration detected`}:r?{detected:!0,reason:`Oxlint configuration detected`}:n?{detected:!1,reason:`Oxlint dependency present without configuration`}:{detected:!1,reason:`no Oxlint dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxlint-lint-fix`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxlint: lint autofix`}]:[{id:`oxlint-lint-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxlint`,capability:`lint`,executable:`oxlint`,args:[`.`],cwd:e.cwd,mode:`check`,description:`Oxlint: lint check`}]}},ga=class{id=`oxfmt`;name=`Oxfmt`;capabilities=[`format`];detect(e){let t=e.jsEnv?.packageJson,n=la(t,`oxfmt`),r=ua(e.cwd,[`.oxfmtrc.json`,`oxfmt.json`,`oxfmt.config.ts`,`oxfmt.config.js`]);return n&&r?{detected:!0,reason:`Oxfmt dependency and configuration detected`}:r?{detected:!0,reason:`Oxfmt configuration detected`}:n?{detected:!1,reason:`Oxfmt dependency present without configuration`}:{detected:!1,reason:`no Oxfmt dependency or configuration`}}plan(e,t){return t===`fix`?[{id:`oxfmt-format`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--write`,`.`],cwd:e.cwd,mode:`fix`,description:`Oxfmt: format`}]:[{id:`oxfmt-check`,toolId:this.id,toolName:this.name,requiredPackage:`oxfmt`,capability:`format`,executable:`oxfmt`,args:[`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Oxfmt: format check`}]}},_a=class{id=`javascript`;name=`JavaScript/TypeScript`;scriptAdapter=new sa;vitePlusAdapter=new da;biomeAdapter=new fa;prettierAdapter=new pa;eslintAdapter=new ma;oxlintAdapter=new ha;oxfmtAdapter=new ga;detect(e){return!!e.jsEnv?.hasPackageJson}getAdapters(e){return[this.scriptAdapter,this.vitePlusAdapter,this.biomeAdapter,this.oxfmtAdapter,this.prettierAdapter,this.oxlintAdapter,this.eslintAdapter]}},va=class{id=`ruff`;name=`Ruff`;capabilities=[`lint`,`format`];detect(e){return e.hasPythonSource??or(e.cwd)?{detected:!0,reason:`default Python toolchain`}:{detected:!1,reason:`no Python source files detected`}}plan(e,t){let n=[];return t===`fix`?n.push({id:`ruff-lint-fix`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`--fix`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: lint autofix`},{id:`ruff-format`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`.`],cwd:e.cwd,mode:`fix`,description:`Ruff: format`}):n.push({id:`ruff-lint-check`,toolId:this.id,capability:`lint`,executable:`ruff`,args:[`check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: lint check`},{id:`ruff-format-check`,toolId:this.id,capability:`format`,executable:`ruff`,args:[`format`,`--check`,`.`],cwd:e.cwd,mode:`check`,description:`Ruff: format check`}),n}},ya=class{id=`python`;name=`Python`;ruffAdapter=new va;detect(e){return e.hasPythonSource??or(e.cwd)}getAdapters(e){return[this.ruffAdapter]}},ba=class{providers=/* @__PURE__ */ new Map;standaloneAdapters=/* @__PURE__ */ new Map;registerProvider(e){this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}getProviders(){return Array.from(this.providers.values())}registerAdapter(e){this.standaloneAdapters.set(e.id,e)}getAdapter(e){return this.standaloneAdapters.get(e)}getStandaloneAdapters(){return Array.from(this.standaloneAdapters.values())}clear(){this.providers.clear(),this.standaloneAdapters.clear()}};function xa(){let e=new ba;return e.registerProvider(new ya),e.registerProvider(new _a),e}const Sa=xa();async function Ca(e,t=process.cwd()){let n=`${e.command} ${e.args.join(` `)}`.trim();if(en(`Installing JS dependencies: ${n}`),await Yt(e.command,e.args,{cwd:t,ignoreReturnCode:!0})!==0)throw Error(`JS dependency installation failed executing "${n}". Check dependency constraints or lockfile compatibility.`)}async function wa(e=process.cwd()){let t=fn(e);if(!t.hasPackageJson){en(`No package.json found. Skipping scripts.`);return}if(t.packageJsonError)throw Error(t.packageJsonError);let n=cn(process.env.PACKAGE_MANAGER||_n(t).name),r=(await Lr(Sa,{cwd:e,jsEnv:t,jsPm:n,hasPythonSource:!1},`fix`)).tasks.filter(e=>e.toolId!==`ruff`);if(r.length===0){en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`);return}await Ca(vn(n),e);let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` `))}}async function Ta(e,t,n=process.cwd()){let r=`${e} ${t.join(` `)}`.trim();if(en(`Executing: ${r}`),await Yt(e,t,{cwd:n,ignoreReturnCode:!0})!==0)throw Error(`Python command "${r}" failed. Check Python environment and dependency configuration.`)}async function Ea(e,t=process.cwd()){Dr(e,`Invalid Python environment: "pmInfo" must be an object`);let n=e.name===`pip`?`pip`:e.name;if(!await Vt(n,!1)&&!e.isStandalone){let e=`Required Python package manager '${n}' is not available in PATH.`;throw Error(e)}if(!e.isStandalone&&e.installCommands.length>0){let n=e.installCommands;en(`Installing Python dependencies: ${n.map(e=>`${e.executable} ${e.args.join(` `)}`).join(` && `)}`);for(let{executable:e,args:r}of n)await Ta(e,r,t)}}async function Da(e=process.cwd(),t,n){if(!(t??or(e)))return;let r;if(n)r=n;else{if(!await Vt(`ruff`,!1))throw Error(`Required Python binary 'ruff' is not available in PATH.`);r=(await Lr(Sa,{cwd:e,hasPythonSource:!0},`fix`)).tasks.filter(e=>e.toolId===`ruff`)}let i=(await new Ar().executeTasks(r)).filter(e=>e.error);if(i.length>0){let e=i.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` `))}}async function Oa(e,t){if(process.env.JS_SETUP_OUTCOME===`failure`||process.env.NODE_SETUP_OUTCOME===`failure`||process.env.BUN_SETUP_OUTCOME===`failure`||process.env.PNPM_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`JavaScript runtime or package manager setup failed.`);try{if(t){let n=fn(e);if(!n.hasPackageJson)return en(`No package.json found. Skipping scripts.`),null;if(n.packageJsonError)throw Error(n.packageJsonError);if(t.length===0)return en(`No matching scripts (fix, format, lint, check, etc.) found in package.json.`),null;await Ca(vn(cn(process.env.PACKAGE_MANAGER||_n(n).name)),e);let r=(await new Ar().executeTasks(t)).filter(e=>e.error);if(r.length>0){let e=r.map(e=>e.error?.message||`Task ${e.task.id} failed`);throw Error(e.join(` `))}return null}return await wa(e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ka(e,t){if(process.env.PYTHON_SETUP_OUTCOME===`failure`||process.env.UV_SETUP_OUTCOME===`failure`||process.env.PY_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Python runtime or package manager setup failed.`);let n=t&&`pmInfo`in t?t.pmInfo:Tr(e,void 0,{ctx:t?.ctx,hasSource:t?.hasSource});if(!n)return null;try{return await Ea(n,e),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function Aa(e,t,n){if(process.env.RUFF_SETUP_OUTCOME===`failure`)return/* @__PURE__ */ Error(`Ruff setup failed.`);try{return await Da(e,t,n),null}catch(e){return e instanceof Error?e:Error(String(e))}}async function ja(e,t,n){let r=t??or(e);if(!r)return[];let i=[],a=ir(e),o=await ka(e,{ctx:a,hasSource:!0,pmInfo:Tr(e,void 0,{ctx:a,hasSource:!0,isProject:!0})});o&&i.push(o);let s=await Aa(e,r,n);return s&&i.push(s),i}async function Ma(e=process.cwd()){let t=or(e),n;try{let r=fn(e),i={cwd:e,jsEnv:r,jsPm:cn(process.env.PACKAGE_MANAGER||_n(r).name),hasPythonSource:t};n=await Lr(Sa,i,`fix`),en(n.summary)}catch{}let r=[],i=n?n.tasks.filter(e=>e.toolId!==`ruff`):void 0,a=n?n.tasks.filter(e=>e.toolId===`ruff`):void 0,o=await Oa(e,i);o&&r.push(o);let s=await ja(e,t,a);r.push(...s),r.length>0&&(Zt(`Failed to run scripts: ${r.map(e=>e.message).join(` diff --git a/src/autofix/adapters/javascript/script-adapter.ts b/src/autofix/adapters/javascript/script-adapter.ts index af8581af..15292a3b 100644 --- a/src/autofix/adapters/javascript/script-adapter.ts +++ b/src/autofix/adapters/javascript/script-adapter.ts @@ -390,12 +390,56 @@ function isEnvAssignment(token: string): boolean { return ENV_ASSIGNMENT_REGEX.test(token); } -function getCommandInvocationTokens(tokens: string[]): string[] { - let startIndex = 0; - while (startIndex < tokens.length && isEnvAssignment(tokens[startIndex])) { - startIndex++; +/** + * Unwraps environment wrapper commands like `cross-env` or `cross-env-shell`, + * stripping initial environment variable assignments to retrieve the target command tokens. + * In accordance with cross-env CLI syntax, cross-env accepts environment variable + * setters (`KEY=val`) followed by the command and its arguments. + */ +export function unwrapEnvironmentWrapper(tokens: string[]): string[] { + if (tokens.length === 0) return tokens; + const [exe] = tokens; + if (exe !== "cross-env" && exe !== "cross-env-shell") { + return tokens; } - return tokens.slice(startIndex); + + let i = 1; + while (i < tokens.length && isEnvAssignment(tokens[i])) { + i++; + } + + return tokens.slice(i); +} + +/** + * Normalizes command invocation tokens by stripping leading inline environment + * variable assignments (e.g. `FOO=bar`) and unwrapping environment wrappers + * (`cross-env`, `cross-env-shell`) along with any subsequent environment variable assignments. + */ +export function normalizeCommandTokens(tokens: string[]): string[] { + let current = tokens; + while (current.length > 0) { + let startIndex = 0; + while (startIndex < current.length && isEnvAssignment(current[startIndex])) { + startIndex++; + } + current = current.slice(startIndex); + + if (current.length > 0 && (current[0] === "cross-env" || current[0] === "cross-env-shell")) { + const unwrapped = unwrapEnvironmentWrapper(current); + if (unwrapped === current) { + break; + } + current = unwrapped; + } else { + break; + } + } + return current; +} + +function getCommandInvocationTokens(tokens: string[]): string[] { + return normalizeCommandTokens(tokens); } function matchesPmDelegation(cmdTokens: string[], targetScriptName: string): boolean { @@ -463,7 +507,11 @@ export function delegatesToScript( const scriptBody = scripts[scriptBodyOrName] !== undefined ? scripts[scriptBodyOrName] : scriptBodyOrName; - const invocations = parseCommandInvocations(scriptBody); + const { invocations, hasSyntaxError } = parseCommandInvocationsDetailed(scriptBody); + if (hasSyntaxError) { + return false; + } + for (const tokens of invocations) { if (matchesPmDelegation(tokens, targetScriptName)) { return true; @@ -764,28 +812,21 @@ export function extractShellWrapperScript(tokens: string[]): string | undefined if (tokens.length >= 3 && (tokens[0] === "sh" || tokens[0] === "bash") && tokens[1] === "-c") { return tokens[2]; } - return undefined; -} - -/** - * Unwraps environment wrapper commands like `cross-env` or `cross-env-shell`, - * stripping initial environment variable assignments to retrieve the target command tokens. - * In accordance with cross-env CLI syntax, cross-env accepts environment variable - * setters (`KEY=val`) followed by the command and its arguments. - */ -export function unwrapEnvironmentWrapper(tokens: string[]): string[] { - if (tokens.length === 0) return tokens; - const [exe] = tokens; - if (exe !== "cross-env" && exe !== "cross-env-shell") { - return tokens; - } - - let i = 1; - while (i < tokens.length && isEnvAssignment(tokens[i])) { - i++; + // When a command string is passed as a single quoted argument (e.g. from cross-env-shell), + // recognize it as a shell script to be recursively parsed. + if ( + tokens.length === 1 && + tokens[0].trim() !== "" && + (tokens[0].includes(" ") || + tokens[0].includes("\t") || + tokens[0].includes("\n") || + tokens[0].includes(";") || + tokens[0].includes("&") || + tokens[0].includes("|")) + ) { + return tokens[0]; } - - return tokens.slice(i); + return undefined; } /** @@ -804,8 +845,7 @@ export function hasVitePlusCommand( return false; } - for (const rawTokens of invocations) { - const tokens = unwrapEnvironmentWrapper(rawTokens); + for (const tokens of invocations) { if (tokens.length === 0) continue; if (tokens[0] === "vp") { @@ -976,7 +1016,10 @@ function hasVerifiedFormattingCommand( scripts: Record = {}, activePath: Set = new Set(), ): boolean { - const invocations = parseCommandInvocations(command); + const { invocations, hasSyntaxError } = parseCommandInvocationsDetailed(command); + if (hasSyntaxError) { + return false; + } return invocations.some((tokens) => { const target = extractDelegatedTarget(tokens); if (target) { @@ -1008,7 +1051,10 @@ function hasVerifiedLintingCommand( scripts: Record = {}, activePath: Set = new Set(), ): boolean { - const invocations = parseCommandInvocations(command); + const { invocations, hasSyntaxError } = parseCommandInvocationsDetailed(command); + if (hasSyntaxError) { + return false; + } return invocations.some((tokens) => { const target = extractDelegatedTarget(tokens); if (target) { @@ -1037,7 +1083,10 @@ function hasVerifiedFullCheckCommand( scripts: Record = {}, activePath: Set = new Set(), ): boolean { - const invocations = parseCommandInvocations(command); + const { invocations, hasSyntaxError } = parseCommandInvocationsDetailed(command); + if (hasSyntaxError) { + return false; + } return invocations.some((tokens) => { const target = extractDelegatedTarget(tokens); if (target) { diff --git a/tests/autofix-architecture.test.ts b/tests/autofix-architecture.test.ts index a6ed04cc..65ba40c6 100644 --- a/tests/autofix-architecture.test.ts +++ b/tests/autofix-architecture.test.ts @@ -2669,6 +2669,273 @@ describe("Refactored Autofix Architecture & Tool Adapters", () => { { capability: "lint", scriptName: "lint:fix" }, ]); }); + + it("handles delegation through cross-env environment wrappers", () => { + const scripts = { + fix: "cross-env CI=1 npm run format:write && npm run lint:fix", + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks).toEqual([ + { capability: "format", capabilities: ["format", "lint"], scriptName: "fix" }, + ]); + }); + + it("handles delegation through cross-env-shell environment wrappers", () => { + const scripts = { + fix: "cross-env-shell NODE_ENV=production npm run lint:fix", + "lint:fix": "eslint --fix .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks).toEqual([{ capability: "lint", scriptName: "fix" }]); + }); + + it("handles multiple environment assignments with cross-env and cross-env-shell", () => { + const scripts = { + fix: "cross-env CI=1 NODE_ENV=production DEBUG=false npm run format:write", + "format:write": "prettier --write .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks).toEqual([{ capability: "format", scriptName: "fix" }]); + }); + + it("handles cross-env delegation with no environment assignments", () => { + const scripts = { + fix: "cross-env npm run format:write", + "format:write": "prettier --write .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks).toEqual([{ capability: "format", scriptName: "fix" }]); + }); + + it("handles nested delegation with environment wrappers", () => { + const scripts = { + fix: "cross-env CI=1 npm run all-fix", + "all-fix": "cross-env-shell NODE_ENV=production npm run format:write && npm run lint:fix", + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks).toEqual([ + { capability: "format", capabilities: ["format", "lint"], scriptName: "fix" }, + ]); + }); + + it("handles cyclic delegation safely when wrapped in cross-env", () => { + const scripts = { + fix: "cross-env CI=1 npm run cycle-a", + "cycle-a": "cross-env NODE_ENV=development npm run cycle-b", + "cycle-b": "cross-env npm run cycle-a", + "format:write": "prettier --write .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks).toEqual([ + { capability: "typecheck", capabilities: [], scriptName: "fix" }, + { capability: "format", scriptName: "format:write" }, + ]); + }); + + it("verifies execution planning with cross-env delegation prevents duplicate task scheduling", async () => { + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: "cross-env CI=1 npm run format:write && npm run lint:fix", + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }, + }), + ); + + const registry = createDefaultRegistry(); + const plan = await planExecution(registry, { cwd: tempDir }, "fix"); + + expect(plan.tasks.map((t) => t.id)).toEqual(["script-fix"]); + expect(plan.tasks[0].capability).toBe("format"); + expect(plan.tasks[0].capabilities).toEqual(["format", "lint"]); + }); + + it("verifies direct tool verification with cross-env", () => { + const scripts = { + fix: "cross-env CI=1 prettier --write . && cross-env-shell NODE_ENV=production eslint --fix .", + }; + const tasks = resolveScriptTasks(scripts, "fix"); + expect(tasks).toEqual([ + { capability: "format", capabilities: ["format", "lint"], scriptName: "fix" }, + ]); + }); + + it("verifies check mode classification with cross-env", () => { + const checkScripts = { + "format:check": "cross-env CI=1 prettier --check .", + "lint:check": "cross-env-shell NODE_ENV=production eslint .", + }; + const tasks = resolveScriptTasks(checkScripts, "check"); + expect(tasks).toEqual([ + { capability: "format", scriptName: "format:check" }, + { capability: "lint", scriptName: "lint:check" }, + ]); + }); + + it("handles quoted shell commands passed to cross-env-shell", () => { + // A. Quoted shell commands + const scriptsChained = { + fix: 'cross-env-shell CI=1 "npm run format:write && npm run lint:fix"', + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }; + const tasksChained = resolveScriptTasks(scriptsChained, "fix"); + expect(tasksChained).toEqual([ + { capability: "format", capabilities: ["format", "lint"], scriptName: "fix" }, + ]); + + const scriptsPrettier = { + "format:write": 'cross-env-shell NODE_ENV=production "prettier --write ."', + }; + const tasksPrettier = resolveScriptTasks(scriptsPrettier, "fix"); + expect(tasksPrettier).toEqual([{ capability: "format", scriptName: "format:write" }]); + + const scriptsEslint = { + "lint:fix": 'cross-env-shell CI=1 "eslint --fix ."', + }; + const tasksEslint = resolveScriptTasks(scriptsEslint, "fix"); + expect(tasksEslint).toEqual([{ capability: "lint", scriptName: "lint:fix" }]); + + // B. Multiple environment assignments + const scriptsMultiEnv = { + fix: 'cross-env-shell CI=1 NODE_ENV=production DEBUG=false "npm run format:write"', + "format:write": "prettier --write .", + }; + const tasksMultiEnv = resolveScriptTasks(scriptsMultiEnv, "fix"); + expect(tasksMultiEnv).toEqual([{ capability: "format", scriptName: "fix" }]); + + // C. Nested delegation + const scriptsNested = { + fix: 'cross-env-shell CI=1 "npm run all-fix"', + "all-fix": 'cross-env-shell NODE_ENV=production "npm run format:write && npm run lint:fix"', + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }; + const tasksNested = resolveScriptTasks(scriptsNested, "fix"); + expect(tasksNested).toEqual([ + { capability: "format", capabilities: ["format", "lint"], scriptName: "fix" }, + ]); + + // D. Direct command compatibility + const scriptsDirectCompat = { + fix: "cross-env CI=1 npm run format:write", + "format:write": "cross-env-shell CI=1 prettier --write .", + }; + const tasksDirectCompat = resolveScriptTasks(scriptsDirectCompat, "fix"); + expect(tasksDirectCompat).toEqual([{ capability: "format", scriptName: "fix" }]); + }); + + it("verifies syntax validation and fail-closed handling in cross-env-shell", () => { + // Unterminated quote inside shell script + expect(classifyScript('cross-env-shell CI=1 "prettier --write . \'unterminated"')).toBe( + "unknown", + ); + + // Trailing escape inside shell script + expect(classifyScript('cross-env-shell CI=1 "prettier --write . \\"')).toBe("unknown"); + + // Empty quoted command + expect(classifyScript('cross-env-shell CI=1 ""')).toBe("unknown"); + + // Unsupported shell syntax inside quoted command (redirection or backgrounding) + expect(classifyScript('cross-env-shell CI=1 "prettier --check . > output.txt"')).toBe( + "unknown", + ); + expect(classifyScript('cross-env-shell CI=1 "eslint . &"')).toBe("unknown"); + + // Quoted arguments containing spaces within quoted shell commands + expect(classifyScript('cross-env-shell CI=1 "prettier --write \\"dir with spaces\\""')).toBe( + "write-capable", + ); + + expect(classifyScript('cross-env-shell CI=1 "prettier --check \\"dir with spaces\\""')).toBe( + "read-only", + ); + }); + + it("verifies execution planning with quoted cross-env-shell prevents duplicate task scheduling", async () => { + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: { + fix: 'cross-env-shell CI=1 "npm run format:write && npm run lint:fix"', + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }, + }), + ); + + const registry = createDefaultRegistry(); + const plan = await planExecution(registry, { cwd: tempDir }, "fix"); + + expect(plan.tasks.map((t) => t.id)).toEqual(["script-fix"]); + expect(plan.tasks[0].capability).toBe("format"); + expect(plan.tasks[0].capabilities).toEqual(["format", "lint"]); + }); + + it("verifies malformed quoted commands fail closed and do not claim capability coverage or suppress child tasks", async () => { + // A. Malformed quoted command in cross-env-shell + const scriptsCrossEnvShell = { + fix: 'cross-env-shell CI=1 "npm run format:write && npm run lint:fix \'unterminated"', + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }; + const tasksCrossEnvShell = resolveScriptTasks(scriptsCrossEnvShell, "fix"); + expect(tasksCrossEnvShell).toEqual([ + { capability: "typecheck", capabilities: [], scriptName: "fix" }, + { capability: "format", scriptName: "format:write" }, + { capability: "lint", scriptName: "lint:fix" }, + ]); + + // B. Malformed nested command in sh -c + const scriptsSh = { + fix: 'sh -c "npm run format:write && npm run lint:fix \\"', + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }; + const tasksSh = resolveScriptTasks(scriptsSh, "fix"); + expect(tasksSh).toEqual([ + { capability: "typecheck", capabilities: [], scriptName: "fix" }, + { capability: "format", scriptName: "format:write" }, + { capability: "lint", scriptName: "lint:fix" }, + ]); + + // C. Malformed nested command in bash -c + const scriptsBash = { + fix: 'bash -c "npm run format:write && npm run lint:fix \\"', + "format:write": "prettier --write .", + "lint:fix": "eslint --fix .", + }; + const tasksBash = resolveScriptTasks(scriptsBash, "fix"); + expect(tasksBash).toEqual([ + { capability: "typecheck", capabilities: [], scriptName: "fix" }, + { capability: "format", scriptName: "format:write" }, + { capability: "lint", scriptName: "lint:fix" }, + ]); + + // D. Full planExecution with malformed cross-env-shell preserves child tasks + fs.writeFileSync( + path.join(tempDir, "package.json"), + JSON.stringify({ + scripts: scriptsCrossEnvShell, + }), + ); + + const registry = createDefaultRegistry(); + const plan = await planExecution(registry, { cwd: tempDir }, "fix"); + + expect(plan.tasks.map((t) => t.id)).toEqual([ + "script-fix", + "script-format:write", + "script-lint:fix", + ]); + }); }); describe("Regression: F-02 Read-Only Classifier Audit for File-Writing Options", () => {