diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7828a10 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +*.streamDeckPlugin +.DS_Store diff --git a/com.bryce.llamawatch.sdPlugin/bin/package.json b/com.bryce.llamawatch.sdPlugin/bin/package.json new file mode 100644 index 0000000..bb34440 --- /dev/null +++ b/com.bryce.llamawatch.sdPlugin/bin/package.json @@ -0,0 +1 @@ +{ "type": "module" } \ No newline at end of file diff --git a/com.bryce.llamawatch.sdPlugin/bin/plugin.js b/com.bryce.llamawatch.sdPlugin/bin/plugin.js new file mode 100644 index 0000000..9d1c470 --- /dev/null +++ b/com.bryce.llamawatch.sdPlugin/bin/plugin.js @@ -0,0 +1 @@ +import e from"events";import t from"https";import s from"http";import n from"net";import i from"tls";import r from"crypto";import o from"stream";import a from"url";import c from"zlib";import l from"buffer";import h from"util";import d,{existsSync as u,readFileSync as f}from"node:fs";import p,{join as m}from"node:path";import{cwd as _}from"node:process";import{randomUUID as g}from"node:crypto";class v{events=new Map;addListener(e,t){return this.add(e,t,e=>e.push({listener:t}))}disposableOn(e,t){return this.add(e,t,e=>e.push({listener:t})),function(e){let t=!1;const s=()=>{t||(e(),t=!0)};return{[Symbol.dispose]:s,dispose:s}}(()=>this.removeListener(e,t))}emit(e,...t){const s=this.events.get(e);if(void 0===s)return!1;for(let n=0;n{e.listener===t&&n++}),n}listeners(e){return Array.from(this.events.get(e)||[]).map(({listener:e})=>e)}off(e,t){const s=this.events.get(e)??[];for(let n=s.length-1;n>=0;n--)s[n].listener===t&&this.remove(e,s,n);return this}on(e,t){return this.add(e,t,e=>e.push({listener:t}))}once(e,t){return this.add(e,t,e=>e.push({listener:t,once:!0}))}prependListener(e,t){return this.add(e,t,e=>e.splice(0,0,{listener:t}))}prependOnceListener(e,t){return this.add(e,t,e=>e.splice(0,0,{listener:t,once:!0}))}removeAllListeners(e){const t=this.events.get(e)??[];for(;t.length>0;)this.remove(e,t,0);return this.events.delete(e),this}removeListener(e,t){return this.off(e,t)}add(e,t,s){let n=this.events.get(e);if(void 0===n&&(n=[],this.events.set(e,n)),s(n),"newListener"!==e){const s=[e,t];this.emit("newListener",...s)}return this}remove(e,t,s){const[{listener:n}]=t.splice(s,1);if("removeListener"!==e){const t=[e,n];this.emit("removeListener",...t)}}}function y(e){null==e||"object"!=typeof e||Object.isFrozen(e)||(Object.freeze(e),Object.values(e).forEach(y))}function b(e,t){return t.split(".").reduce((e,t)=>e&&e[t],e)}class w{#e;#t=new Map;#s;#n=new v;constructor(e,t){this.#e=e,this.#s=t}get language(){return this.#e}set language(e){this.#e!==e&&(this.#e=e,this.#n.emit("languageChange",e))}onLanguageChange(e){return this.#n.disposableOn("languageChange",e)}t(e,t=this.language){return this.translate(e,t)}translate(e,t=this.language){const s=new Set([t,t.replaceAll("_","-").split("-").at(0),"en"]);for(const t of s){const s=b(this.getTranslations(t),e);if(s)return s.toString()}return e}getTranslations(e){let t=this.#t.get(e);return void 0===t&&(t=this.#s(e),y(t),this.#t.set(e,t)),t}}class S{#i;#r;#o;constructor(e){e instanceof S?(this.#i=e.#i,this.#r=e.#r):Array.isArray(e)?(this.#i=()=>e.values(),this.#r=()=>e.length):e instanceof Map||e instanceof Set?(this.#i=()=>e.values(),this.#r=()=>e.size):(this.#i=e,this.#r=()=>{let e=0;for(const t of this)e++;return e})}get length(){return this.#r()}*[Symbol.iterator](){for(const e of this.#i())yield e}asIndexedPairs(){return new S(function*(){let e=0;for(const t of this)yield[e++,t]}.bind(this))}drop(e){if(isNaN(e)||e<0)throw new RangeError("limit must be 0, or a positive number");return new S(function*(){let t=0;for(const s of this)t++>=e&&(yield s)}.bind(this))}every(e){for(const t of this)if(!e(t))return!1;return!0}filter(e){return new S(function*(){for(const t of this)e(t)&&(yield t)}.bind(this))}find(e){for(const t of this)if(e(t))return t}findLast(e){let t;for(const s of this)e(s)&&(t=s);return t}flatMap(e){return new S(function*(){for(const t of this)for(const s of e(t))yield s}.bind(this))}forEach(e){for(const t of this)e(t)}includes(e){return this.some(t=>t===e)}map(e){return new S(function*(){for(const t of this)yield e(t)}.bind(this))}next(...e){this.#o??=this.#i();const t=this.#o.next(...e);return t.done&&(this.#o=void 0),t}reduce(e,t){if(0===this.length){if(void 0===t)throw new TypeError("Reduce of empty enumerable with no initial value.");return t}let s=t;for(const t of this)s=void 0===s?t:e(s,t);return s}return(e){return this.#o=void 0,{done:!0,value:e}}some(e){for(const t of this)if(e(t))return!0;return!1}take(e){if(isNaN(e)||e<0)throw new RangeError("limit must be 0, or a positive number");return new S(function*(){let t=0;for(const s of this)t++{e=s,t=n}),resolve:e,reject:t}}function k(e,t,s){function n(s,n){var i;Object.defineProperty(s,"_zod",{value:s._zod??{},enumerable:!1}),(i=s._zod).traits??(i.traits=new Set),s._zod.traits.add(e),t(s,n);for(const e in o.prototype)e in s||Object.defineProperty(s,e,{value:o.prototype[e].bind(s)});s._zod.constr=o,s._zod.def=n}const i=s?.Parent??Object;class r extends i{}function o(e){var t;const i=s?.Parent?new r:this;n(i,e),(t=i._zod).deferred??(t.deferred=[]);for(const e of i._zod.deferred)e();return i}return Object.defineProperty(r,"name",{value:e}),Object.defineProperty(o,"init",{value:n}),Object.defineProperty(o,Symbol.hasInstance,{value:t=>!!(s?.Parent&&t instanceof s.Parent)||t?._zod?.traits?.has(e)}),Object.defineProperty(o,"name",{value:e}),o}class O extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}const T={};function P(e){return T}function D(e,t){return"bigint"==typeof t?t.toString():t}function C(e){return{get value(){{const t=e();return Object.defineProperty(this,"value",{value:t}),t}}}}function I(e){const t=e.startsWith("^")?1:0,s=e.endsWith("$")?e.length-1:e.length;return e.slice(t,s)}function N(e,t,s){Object.defineProperty(e,t,{get(){{const n=s();return e[t]=n,n}},set(s){Object.defineProperty(e,t,{value:s})},configurable:!0})}function L(e){return JSON.stringify(e)}const R=Error.captureStackTrace?Error.captureStackTrace:(...e)=>{};function U(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}const B=C(()=>{if("undefined"!=typeof navigator&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{return new Function(""),!0}catch(e){return!1}});function z(e,t=0){for(let s=t;s{var s;return(s=t).path??(s.path=[]),t.path.unshift(e),t})}function A(e){return"string"==typeof e?e:e?.message}function M(e,t,s){const n={...e,path:e.path??[]};if(!e.message){const i=A(e.inst?._zod.def?.error?.(e))??A(t?.error?.(e))??A(s.customError?.(e))??A(s.localeError?.(e))??"Invalid input";n.message=i}return delete n.inst,delete n.continue,t?.reportInput||delete n.input,n}const j=(e,t)=>{e.name="$ZodError",Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),Object.defineProperty(e,"message",{get:()=>JSON.stringify(t,D,2),enumerable:!0}),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},F=k("$ZodError",j),W=k("$ZodError",j,{Parent:Error}),G=(e=>(t,s,n,i)=>{const r=n?Object.assign(n,{async:!1}):{async:!1},o=t._zod.run({value:s,issues:[]},r);if(o instanceof Promise)throw new O;if(o.issues.length){const t=new(i?.Err??e)(o.issues.map(e=>M(e,r,P())));throw R(t,i?.callee),t}return o.value})(W),V=(e=>async(t,s,n,i)=>{const r=n?Object.assign(n,{async:!0}):{async:!0};let o=t._zod.run({value:s,issues:[]},r);if(o instanceof Promise&&(o=await o),o.issues.length){const t=new(i?.Err??e)(o.issues.map(e=>M(e,r,P())));throw R(t,i?.callee),t}return o.value})(W),q=(e=>(t,s,n)=>{const i=n?{...n,async:!1}:{async:!1},r=t._zod.run({value:s,issues:[]},i);if(r instanceof Promise)throw new O;return r.issues.length?{success:!1,error:new(e??F)(r.issues.map(e=>M(e,i,P())))}:{success:!0,data:r.value}})(W),Z=(e=>async(t,s,n)=>{const i=n?Object.assign(n,{async:!0}):{async:!0};let r=t._zod.run({value:s,issues:[]},i);return r instanceof Promise&&(r=await r),r.issues.length?{success:!1,error:new e(r.issues.map(e=>M(e,i,P())))}:{success:!0,data:r.value}})(W),K=/^-?\d+(?:\.\d+)?/i,H=/true|false/i;class J{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),this.indent-=1}write(e){if("function"==typeof e)return e(this,{execution:"sync"}),void e(this,{execution:"async"});const t=e.split("\n").filter(e=>e),s=Math.min(...t.map(e=>e.length-e.trimStart().length)),n=t.map(e=>e.slice(s)).map(e=>" ".repeat(2*this.indent)+e);for(const e of n)this.content.push(e)}compile(){const e=Function,t=this?.args;return new e(...t,[...(this?.content??[""]).map(e=>` ${e}`)].join("\n"))}}const Y={major:4,minor:0,patch:0},X=k("$ZodType",(e,t)=>{var s;e??(e={}),e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=Y;const n=[...e._zod.def.checks??[]];e._zod.traits.has("$ZodCheck")&&n.unshift(e);for(const t of n)for(const s of t._zod.onattach)s(e);if(0===n.length)(s=e._zod).deferred??(s.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{const t=(e,t,s)=>{let n,i=z(e);for(const r of t){if(r._zod.def.when){if(!r._zod.def.when(e))continue}else if(i)continue;const t=e.issues.length,o=r._zod.check(e);if(o instanceof Promise&&!1===s?.async)throw new O;if(n||o instanceof Promise)n=(n??Promise.resolve()).then(async()=>{await o;e.issues.length!==t&&(i||(i=z(e,t)))});else{if(e.issues.length===t)continue;i||(i=z(e,t))}}return n?n.then(()=>e):e};e._zod.run=(s,i)=>{const r=e._zod.parse(s,i);if(r instanceof Promise){if(!1===i.async)throw new O;return r.then(e=>t(e,n,i))}return t(r,n,i)}}e["~standard"]={validate:t=>{try{const s=q(e,t);return s.success?{value:s.data}:{issues:s.error?.issues}}catch(s){return Z(e,t).then(e=>e.success?{value:e.data}:{issues:e.error?.issues})}},vendor:"zod",version:1}}),Q=k("$ZodString",(e,t)=>{var s;X.init(e,t),e._zod.pattern=[...e?._zod.bag?.patterns??[]].pop()??(s=e._zod.bag,new RegExp(`^${s?`[\\s\\S]{${s?.minimum??0},${s?.maximum??""}}`:"[\\s\\S]*"}$`)),e._zod.parse=(s,n)=>{if(t.coerce)try{s.value=String(s.value)}catch(n){}return"string"==typeof s.value||s.issues.push({expected:"string",code:"invalid_type",input:s.value,inst:e}),s}}),ee=k("$ZodNumber",(e,t)=>{X.init(e,t),e._zod.pattern=e._zod.bag.pattern??K,e._zod.parse=(s,n)=>{if(t.coerce)try{s.value=Number(s.value)}catch(e){}const i=s.value;if("number"==typeof i&&!Number.isNaN(i)&&Number.isFinite(i))return s;const r="number"==typeof i?Number.isNaN(i)?"NaN":Number.isFinite(i)?void 0:"Infinity":void 0;return s.issues.push({expected:"number",code:"invalid_type",input:i,inst:e,...r?{received:r}:{}}),s}}),te=k("$ZodBoolean",(e,t)=>{X.init(e,t),e._zod.pattern=H,e._zod.parse=(s,n)=>{if(t.coerce)try{s.value=Boolean(s.value)}catch(e){}const i=s.value;return"boolean"==typeof i||s.issues.push({expected:"boolean",code:"invalid_type",input:i,inst:e}),s}});function se(e,t,s){e.issues.length&&t.issues.push(...$(s,e.issues)),t.value[s]=e.value}const ne=k("$ZodArray",(e,t)=>{X.init(e,t),e._zod.parse=(s,n)=>{const i=s.value;if(!Array.isArray(i))return s.issues.push({expected:"array",code:"invalid_type",input:i,inst:e}),s;s.value=Array(i.length);const r=[];for(let e=0;ese(t,s,e))):se(a,s,e)}return r.length?Promise.all(r).then(()=>s):s}});function ie(e,t,s){e.issues.length&&t.issues.push(...$(s,e.issues)),t.value[s]=e.value}function re(e,t,s,n){e.issues.length?void 0===n[s]?t.value[s]=s in n?void 0:e.value:t.issues.push(...$(s,e.issues)):void 0===e.value?s in n&&(t.value[s]=void 0):t.value[s]=e.value}const oe=k("$ZodObject",(e,t)=>{X.init(e,t);const s=C(()=>{const e=Object.keys(t.shape);for(const s of e)if(!(t.shape[s]instanceof X))throw new Error(`Invalid element at key "${s}": expected a Zod schema`);const s=(n=t.shape,Object.keys(n).filter(e=>"optional"===n[e]._zod.optin&&"optional"===n[e]._zod.optout));var n;return{shape:t.shape,keys:e,keySet:new Set(e),numKeys:e.length,optionalKeys:new Set(s)}});N(e._zod,"propValues",()=>{const e=t.shape,s={};for(const t in e){const n=e[t]._zod;if(n.values){s[t]??(s[t]=new Set);for(const e of n.values)s[t].add(e)}}return s});let n;const i=U,r=!T.jitless,o=r&&B.value,a=t.catchall;let c;e._zod.parse=(l,h)=>{c??(c=s.value);const d=l.value;if(!i(d))return l.issues.push({expected:"object",code:"invalid_type",input:d,inst:e}),l;const u=[];if(r&&o&&!1===h?.async&&!0!==h.jitless)n||(n=(e=>{const t=new J(["shape","payload","ctx"]),n=s.value,i=e=>{const t=L(e);return`shape[${t}]._zod.run({ value: input[${t}], issues: [] }, ctx)`};t.write("const input = payload.value;");const r=Object.create(null);let o=0;for(const e of n.keys)r[e]="key_"+o++;t.write("const newResult = {}");for(const e of n.keys)if(n.optionalKeys.has(e)){const s=r[e];t.write(`const ${s} = ${i(e)};`);const n=L(e);t.write(`\n if (${s}.issues.length) {\n if (input[${n}] === undefined) {\n if (${n} in input) {\n newResult[${n}] = undefined;\n }\n } else {\n payload.issues = payload.issues.concat(\n ${s}.issues.map((iss) => ({\n ...iss,\n path: iss.path ? [${n}, ...iss.path] : [${n}],\n }))\n );\n }\n } else if (${s}.value === undefined) {\n if (${n} in input) newResult[${n}] = undefined;\n } else {\n newResult[${n}] = ${s}.value;\n }\n `)}else{const s=r[e];t.write(`const ${s} = ${i(e)};`),t.write(`\n if (${s}.issues.length) payload.issues = payload.issues.concat(${s}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${L(e)}, ...iss.path] : [${L(e)}]\n })));`),t.write(`newResult[${L(e)}] = ${s}.value`)}t.write("payload.value = newResult;"),t.write("return payload;");const a=t.compile();return(t,s)=>a(e,t,s)})(t.shape)),l=n(l,h);else{l.value={};const e=c.shape;for(const t of c.keys){const s=e[t],n=s._zod.run({value:d[t],issues:[]},h),i="optional"===s._zod.optin&&"optional"===s._zod.optout;n instanceof Promise?u.push(n.then(e=>i?re(e,l,t,d):ie(e,l,t))):i?re(n,l,t,d):ie(n,l,t)}}if(!a)return u.length?Promise.all(u).then(()=>l):l;const f=[],p=c.keySet,m=a._zod,_=m.def.type;for(const e of Object.keys(d)){if(p.has(e))continue;if("never"===_){f.push(e);continue}const t=m.run({value:d[e],issues:[]},h);t instanceof Promise?u.push(t.then(t=>ie(t,l,e))):ie(t,l,e)}return f.length&&l.issues.push({code:"unrecognized_keys",keys:f,input:d,inst:e}),u.length?Promise.all(u).then(()=>l):l}});function ae(e,t,s,n){for(const s of e)if(0===s.issues.length)return t.value=s.value,t;return t.issues.push({code:"invalid_union",input:t.value,inst:s,errors:e.map(e=>e.issues.map(e=>M(e,n,P())))}),t}const ce=k("$ZodUnion",(e,t)=>{X.init(e,t),N(e._zod,"optin",()=>t.options.some(e=>"optional"===e._zod.optin)?"optional":void 0),N(e._zod,"optout",()=>t.options.some(e=>"optional"===e._zod.optout)?"optional":void 0),N(e._zod,"values",()=>{if(t.options.every(e=>e._zod.values))return new Set(t.options.flatMap(e=>Array.from(e._zod.values)))}),N(e._zod,"pattern",()=>{if(t.options.every(e=>e._zod.pattern)){const e=t.options.map(e=>e._zod.pattern);return new RegExp(`^(${e.map(e=>I(e.source)).join("|")})$`)}}),e._zod.parse=(s,n)=>{let i=!1;const r=[];for(const e of t.options){const t=e._zod.run({value:s.value,issues:[]},n);if(t instanceof Promise)r.push(t),i=!0;else{if(0===t.issues.length)return t;r.push(t)}}return i?Promise.all(r).then(t=>ae(t,s,e,n)):ae(r,s,e,n)}}),le=k("$ZodLiteral",(e,t)=>{X.init(e,t),e._zod.values=new Set(t.values),e._zod.pattern=new RegExp(`^(${t.values.map(e=>"string"==typeof e?e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"):e?e.toString():String(e)).join("|")})$`),e._zod.parse=(s,n)=>{const i=s.value;return e._zod.values.has(i)||s.issues.push({code:"invalid_value",values:t.values,input:i,inst:e}),s}}),he=k("$ZodOptional",(e,t)=>{X.init(e,t),e._zod.optin="optional",e._zod.optout="optional",N(e._zod,"values",()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,void 0]):void 0),N(e._zod,"pattern",()=>{const e=t.innerType._zod.pattern;return e?new RegExp(`^(${I(e.source)})?$`):void 0}),e._zod.parse=(e,s)=>"optional"===t.innerType._zod.optin?t.innerType._zod.run(e,s):void 0===e.value?e:t.innerType._zod.run(e,s)}),de=k("$ZodLazy",(e,t)=>{X.init(e,t),N(e._zod,"innerType",()=>t.getter()),N(e._zod,"pattern",()=>e._zod.innerType._zod.pattern),N(e._zod,"propValues",()=>e._zod.innerType._zod.propValues),N(e._zod,"optin",()=>e._zod.innerType._zod.optin),N(e._zod,"optout",()=>e._zod.innerType._zod.optout),e._zod.parse=(t,s)=>e._zod.innerType._zod.run(t,s)});const ue=k("ZodMiniType",(e,t)=>{if(!e._zod)throw new Error("Uninitialized schema in ZodMiniType.");X.init(e,t),e.def=t,e.parse=(t,s)=>G(e,t,s,{callee:e.parse}),e.safeParse=(t,s)=>q(e,t,s),e.parseAsync=async(t,s)=>V(e,t,s,{callee:e.parseAsync}),e.safeParseAsync=async(t,s)=>Z(e,t,s),e.check=(...s)=>e.clone({...t,checks:[...t.checks??[],...s.map(e=>"function"==typeof e?{_zod:{check:e,def:{check:"custom"},onattach:[]}}:e)]}),e.clone=(t,s)=>function(e,t,s){const n=new e._zod.constr(t??e._zod.def);return t&&!s?.parent||(n._zod.parent=e),n}(e,t,s),e.brand=()=>e,e.register=(t,s)=>(t.add(e,s),e)}),fe=k("ZodMiniString",(e,t)=>{Q.init(e,t),ue.init(e,t)});function pe(e){return new fe({type:"string"})}const me=k("ZodMiniNumber",(e,t)=>{ee.init(e,t),ue.init(e,t)});const _e=k("ZodMiniBoolean",(e,t)=>{te.init(e,t),ue.init(e,t)});function ge(e){return new _e({type:"boolean"})}const ve=k("ZodMiniArray",(e,t)=>{ne.init(e,t),ue.init(e,t)});const ye=k("ZodMiniObject",(e,t)=>{oe.init(e,t),ue.init(e,t),N(e,"shape",()=>t.shape)});function be(e,t){return new ye({type:"object",get shape(){var t,s,n;return t=this,s="shape",n={...e},Object.defineProperty(t,s,{value:n,writable:!0,enumerable:!0,configurable:!0}),this.shape}})}const we=k("ZodMiniUnion",(e,t)=>{ce.init(e,t),ue.init(e,t)});function Se(e,t){return new we({type:"union",options:e})}const Ee=k("ZodMiniLiteral",(e,t)=>{le.init(e,t),ue.init(e,t)});function xe(e,t){return new Ee({type:"literal",values:Array.isArray(e)?e:[e]})}const ke=k("ZodMiniOptional",(e,t)=>{he.init(e,t),ue.init(e,t)});function Oe(e){return new ke({type:"optional",innerType:e})}const Te=k("ZodMiniLazy",(e,t)=>{de.init(e,t),ue.init(e,t)});const Pe=be({type:xe("option"),disabled:Oe(ge()),label:pe(),value:Se([ge(),new me({type:"number",checks:[]}),pe()])}),De=be({type:xe("option-group"),disabled:Oe(ge()),options:(Ce=()=>{return e=Se([Pe,De]),new ve({type:"array",element:e});var e},new Te({type:"lazy",getter:Ce})),label:pe()});var Ce;function Ie(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Ne,Le,Re,Ue,Be,ze,$e,Ae={exports:{}};function Me(){if(Le)return Ne;Le=1;const e=["nodebuffer","arraybuffer","fragments"],t="undefined"!=typeof Blob;return t&&e.push("blob"),Ne={BINARY_TYPES:e,CLOSE_TIMEOUT:3e4,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:t,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}function je(){if(Re)return Ae.exports;Re=1;const{EMPTY_BUFFER:e}=Me(),t=Buffer[Symbol.species];function s(e,t,s,n,i){for(let r=0;r{this.pending--,this[t]()},this.concurrency=s||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[t]()}[t](){if(this.pending!==this.concurrency&&this.jobs.length){const t=this.jobs.shift();this.pending++,t(this[e])}}}}(),{kStatusCode:n}=Me(),i=Buffer[Symbol.species],r=Buffer.from([0,0,255,255]),o=Symbol("permessage-deflate"),a=Symbol("total-length"),l=Symbol("callback"),h=Symbol("buffers"),d=Symbol("error");let u;function f(e){this[h].push(e),this[a]+=e.length}function p(e){this[a]+=e.length,this[o]._maxPayload<1||this[a]<=this[o]._maxPayload?this[h].push(e):(this[d]=new RangeError("Max payload size exceeded"),this[d].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[d][n]=1009,this.removeListener("data",p),this.reset())}function m(e){this[o]._inflate=null,this[d]?this[l](this[d]):(e[n]=1007,this[l](e))}return ze=class{constructor(e){if(this._options=e||{},this._threshold=void 0!==this._options.threshold?this._options.threshold:1024,this._maxPayload=0|this._options.maxPayload,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!u){const e=void 0!==this._options.concurrencyLimit?this._options.concurrencyLimit:10;u=new s(e)}}static get extensionName(){return"permessage-deflate"}offer(){const e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:null==this._options.clientMaxWindowBits&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){const e=this._deflate[l];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){const t=this._options,s=e.find(e=>!(!1===t.serverNoContextTakeover&&e.server_no_context_takeover||e.server_max_window_bits&&(!1===t.serverMaxWindowBits||"number"==typeof t.serverMaxWindowBits&&t.serverMaxWindowBits>e.server_max_window_bits)||"number"==typeof t.clientMaxWindowBits&&("number"==typeof e.client_max_window_bits?t.clientMaxWindowBits>e.client_max_window_bits:!e.client_max_window_bits)));if(!s)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(s.server_no_context_takeover=!0),t.clientNoContextTakeover&&(s.client_no_context_takeover=!0),"number"==typeof t.serverMaxWindowBits&&(s.server_max_window_bits=t.serverMaxWindowBits),"number"==typeof t.clientMaxWindowBits?s.client_max_window_bits=t.clientMaxWindowBits:!0!==s.client_max_window_bits&&!1!==t.clientMaxWindowBits||delete s.client_max_window_bits,s}acceptAsClient(e){const t=e[0];if(!1===this._options.clientNoContextTakeover&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(t.client_max_window_bits){if(!1===this._options.clientMaxWindowBits||"number"==typeof this._options.clientMaxWindowBits&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"')}else"number"==typeof this._options.clientMaxWindowBits&&(t.client_max_window_bits=this._options.clientMaxWindowBits);return t}normalizeParams(e){return e.forEach(e=>{Object.keys(e).forEach(t=>{let s=e[t];if(s.length>1)throw new Error(`Parameter "${t}" must have only a single value`);if(s=s[0],"client_max_window_bits"===t){if(!0!==s){const e=+s;if(!Number.isInteger(e)||e<8||e>15)throw new TypeError(`Invalid value for parameter "${t}": ${s}`);s=e}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${t}": ${s}`)}else if("server_max_window_bits"===t){const e=+s;if(!Number.isInteger(e)||e<8||e>15)throw new TypeError(`Invalid value for parameter "${t}": ${s}`);s=e}else{if("client_no_context_takeover"!==t&&"server_no_context_takeover"!==t)throw new Error(`Unknown parameter "${t}"`);if(!0!==s)throw new TypeError(`Invalid value for parameter "${t}": ${s}`)}e[t]=s})}),e}decompress(e,t,s){u.add(n=>{this._decompress(e,t,(e,t)=>{n(),s(e,t)})})}compress(e,t,s){u.add(n=>{this._compress(e,t,(e,t)=>{n(),s(e,t)})})}_decompress(s,n,i){const c=this._isServer?"client":"server";if(!this._inflate){const t=`${c}_max_window_bits`,s="number"!=typeof this.params[t]?e.Z_DEFAULT_WINDOWBITS:this.params[t];this._inflate=e.createInflateRaw({...this._options.zlibInflateOptions,windowBits:s}),this._inflate[o]=this,this._inflate[a]=0,this._inflate[h]=[],this._inflate.on("error",m),this._inflate.on("data",p)}this._inflate[l]=i,this._inflate.write(s),n&&this._inflate.write(r),this._inflate.flush(()=>{const e=this._inflate[d];if(e)return this._inflate.close(),this._inflate=null,void i(e);const s=t.concat(this._inflate[h],this._inflate[a]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[a]=0,this._inflate[h]=[],n&&this.params[`${c}_no_context_takeover`]&&this._inflate.reset()),i(null,s)})}_compress(s,n,r){const o=this._isServer?"server":"client";if(!this._deflate){const t=`${o}_max_window_bits`,s="number"!=typeof this.params[t]?e.Z_DEFAULT_WINDOWBITS:this.params[t];this._deflate=e.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:s}),this._deflate[a]=0,this._deflate[h]=[],this._deflate.on("data",f)}this._deflate[l]=r,this._deflate.write(s),this._deflate.flush(e.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let e=t.concat(this._deflate[h],this._deflate[a]);n&&(e=new i(e.buffer,e.byteOffset,e.length-4)),this._deflate[l]=null,this._deflate[a]=0,this._deflate[h]=[],n&&this.params[`${o}_no_context_takeover`]&&this._deflate.reset(),r(null,e)})}}}var We,Ge,Ve,qe,Ze,Ke,He,Je,Ye,Xe,Qe,et,tt,st,nt,it={exports:{}};function rt(){if(We)return it.exports;We=1;const{isUtf8:e}=l,{hasBlob:t}=Me();function s(e){const t=e.length;let s=0;for(;s=t||128!=(192&e[s+1])||128!=(192&e[s+2])||224===e[s]&&128==(224&e[s+1])||237===e[s]&&160==(224&e[s+1]))return!1;s+=3}else{if(240!=(248&e[s]))return!1;if(s+3>=t||128!=(192&e[s+1])||128!=(192&e[s+2])||128!=(192&e[s+3])||240===e[s]&&128==(240&e[s+1])||244===e[s]&&e[s+1]>143||e[s]>244)return!1;s+=4}else s++;return!0}if(it.exports={isBlob:function(e){return t&&"object"==typeof e&&"function"==typeof e.arrayBuffer&&"string"==typeof e.type&&"function"==typeof e.stream&&("Blob"===e[Symbol.toStringTag]||"File"===e[Symbol.toStringTag])},isValidStatusCode:function(e){return e>=1e3&&e<=1014&&1004!==e&&1005!==e&&1006!==e||e>=3e3&&e<=4999},isValidUTF8:s,tokenChars:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0]},e)it.exports.isValidUTF8=function(t){return t.length<24?s(t):e(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{const e=require("utf-8-validate");it.exports.isValidUTF8=function(t){return t.length<32?s(t):e(t)}}catch(e){}return it.exports}function ot(){if(Ve)return Ge;Ve=1;const{Writable:e}=o,t=Fe(),{BINARY_TYPES:s,EMPTY_BUFFER:n,kStatusCode:i,kWebSocket:r}=Me(),{concat:a,toArrayBuffer:c,unmask:l}=je(),{isValidStatusCode:h,isValidUTF8:d}=rt(),u=Buffer[Symbol.species];return Ge=class extends e{constructor(e={}){super(),this._allowSynchronousEvents=void 0===e.allowSynchronousEvents||e.allowSynchronousEvents,this._binaryType=e.binaryType||s[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxBufferedChunks=0|e.maxBufferedChunks,this._maxFragments=0|e.maxFragments,this._maxPayload=0|e.maxPayload,this._skipUTF8Validation=!!e.skipUTF8Validation,this[r]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._numFragments=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=0}_write(e,t,s){if(8===this._opcode&&0==this._state)return s();this._maxBufferedChunks>0&&this._buffers.length>=this._maxBufferedChunks?s(this.createError(RangeError,"Too many buffered chunks",!1,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS")):(this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(s))}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e=s.length?t.set(this._buffers.shift(),n):(t.set(new Uint8Array(s.buffer,s.byteOffset,e),n),this._buffers[0]=new u(s.buffer,s.byteOffset+e,s.length-e)),e-=s.length}while(e>0);return t}startLoop(e){this._loop=!0;do{switch(this._state){case 0:this.getInfo(e);break;case 1:this.getPayloadLength16(e);break;case 2:this.getPayloadLength64(e);break;case 3:this.getMask();break;case 4:this.getData(e);break;case 5:case 6:return void(this._loop=!1)}}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2)return void(this._loop=!1);const s=this.consume(2);if(48&s[0]){return void e(this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3"))}const n=!(64&~s[0]);if(n&&!this._extensions[t.extensionName]){return void e(this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1"))}if(this._fin=!(128&~s[0]),this._opcode=15&s[0],this._payloadLength=127&s[1],0===this._opcode){if(n){return void e(this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1"))}if(!this._fragmented){return void e(this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE"))}this._opcode=this._fragmented}else if(1===this._opcode||2===this._opcode){if(this._fragmented){return void e(this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE"))}this._compressed=n}else{if(!(this._opcode>7&&this._opcode<11)){return void e(this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE"))}if(!this._fin){return void e(this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN"))}if(n){return void e(this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1"))}if(this._payloadLength>125||8===this._opcode&&1===this._payloadLength){return void e(this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH"))}}if(this._fin||this._fragmented||(this._fragmented=this._opcode),this._masked=!(128&~s[1]),this._isServer){if(!this._masked){return void e(this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK"))}}else if(this._masked){return void e(this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK"))}126===this._payloadLength?this._state=1:127===this._payloadLength?this._state=2:this.haveLength(e)}getPayloadLength16(e){this._bufferedBytes<2?this._loop=!1:(this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e))}getPayloadLength64(e){if(this._bufferedBytes<8)return void(this._loop=!1);const t=this.consume(8),s=t.readUInt32BE(0);if(s>Math.pow(2,21)-1){return void e(this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH"))}this._payloadLength=s*Math.pow(2,32)+t.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){return void e(this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH"))}this._masked?this._state=3:this._state=4}getMask(){this._bufferedBytes<4?this._loop=!1:(this._mask=this.consume(4),this._state=4)}getData(e){let t=n;if(this._payloadLength){if(this._bufferedBytes7)this.controlMessage(t,e);else{if(this._maxFragments>0&&++this._numFragments>this._maxFragments){return void e(this.createError(RangeError,"Too many message fragments",!1,1008,"WS_ERR_TOO_MANY_BUFFERED_PARTS"))}if(this._compressed)return this._state=5,void this.decompress(t,e);t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage(e)}}decompress(e,s){this._extensions[t.extensionName].decompress(e,this._fin,(e,t)=>{if(e)return s(e);if(t.length){if(this._messageLength+=t.length,this._messageLength>this._maxPayload&&this._maxPayload>0){const e=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");return void s(e)}this._fragments.push(t)}this.dataMessage(s),0===this._state&&this.startLoop(s)})}dataMessage(e){if(!this._fin)return void(this._state=0);const t=this._messageLength,s=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._numFragments=0,this._fragments=[],2===this._opcode){let n;n="nodebuffer"===this._binaryType?a(s,t):"arraybuffer"===this._binaryType?c(a(s,t)):"blob"===this._binaryType?new Blob(s):s,this._allowSynchronousEvents?(this.emit("message",n,!0),this._state=0):(this._state=6,setImmediate(()=>{this.emit("message",n,!0),this._state=0,this.startLoop(e)}))}else{const n=a(s,t);if(!this._skipUTF8Validation&&!d(n)){const t=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");return void e(t)}5===this._state||this._allowSynchronousEvents?(this.emit("message",n,!1),this._state=0):(this._state=6,setImmediate(()=>{this.emit("message",n,!1),this._state=0,this.startLoop(e)}))}}controlMessage(e,t){if(8!==this._opcode)this._allowSynchronousEvents?(this.emit(9===this._opcode?"ping":"pong",e),this._state=0):(this._state=6,setImmediate(()=>{this.emit(9===this._opcode?"ping":"pong",e),this._state=0,this.startLoop(t)}));else{if(0===e.length)this._loop=!1,this.emit("conclude",1005,n),this.end();else{const s=e.readUInt16BE(0);if(!h(s)){const e=this.createError(RangeError,`invalid status code ${s}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");return void t(e)}const n=new u(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!d(n)){const e=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");return void t(e)}this._loop=!1,this.emit("conclude",s,n),this.end()}this._state=0}}createError(e,t,s,n,r){this._loop=!1,this._errored=!0;const o=new e(s?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(o,this.createError),o.code=r,o[i]=n,o}}}function at(){if(Ze)return qe;Ze=1;const{Duplex:e}=o,{randomFillSync:t}=r,{types:{isUint8Array:s}}=h,n=Fe(),{EMPTY_BUFFER:i,kWebSocket:a,NOOP:c}=Me(),{isBlob:l,isValidStatusCode:d}=rt(),{mask:u,toBuffer:f}=je(),p=Symbol("kByteLength"),m=Buffer.alloc(4),_=8192;let g,v=_;class y{constructor(e,t,s){this._extensions=t||{},s&&(this._generateMask=s,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=0,this.onerror=c,this[a]=void 0}static frame(e,s){let n,i,r=!1,o=2,a=!1;s.mask&&(n=s.maskBuffer||m,s.generateMask?s.generateMask(n):(v===_&&(void 0===g&&(g=Buffer.alloc(_)),t(g,0,_),v=0),n[0]=g[v++],n[1]=g[v++],n[2]=g[v++],n[3]=g[v++]),a=0===(n[0]|n[1]|n[2]|n[3]),o=6),"string"==typeof e?i=s.mask&&!a||void 0===s[p]?(e=Buffer.from(e)).length:s[p]:(i=e.length,r=s.mask&&s.readOnly&&!a);let c=i;i>=65536?(o+=8,c=127):i>125&&(o+=2,c=126);const l=Buffer.allocUnsafe(r?i+o:o);return l[0]=s.fin?128|s.opcode:s.opcode,s.rsv1&&(l[0]|=64),l[1]=c,126===c?l.writeUInt16BE(i,2):127===c&&(l[2]=l[3]=0,l.writeUIntBE(i,4,6)),s.mask?(l[1]|=128,l[o-4]=n[0],l[o-3]=n[1],l[o-2]=n[2],l[o-1]=n[3],a?[l,e]:r?(u(e,n,l,o,i),[l]):(u(e,n,e,0,i),[l,e])):[l,e]}close(e,t,n,r){let o;if(void 0===e)o=i;else{if("number"!=typeof e||!d(e))throw new TypeError("First argument must be a valid error code number");if(void 0!==t&&t.length){const n=Buffer.byteLength(t);if(n>123)throw new RangeError("The message must not be greater than 123 bytes");if(o=Buffer.allocUnsafe(2+n),o.writeUInt16BE(e,0),"string"==typeof t)o.write(t,2);else{if(!s(t))throw new TypeError("Second argument must be a string or a Uint8Array");o.set(t,2)}}else o=Buffer.allocUnsafe(2),o.writeUInt16BE(e,0)}const a={[p]:o.length,fin:!0,generateMask:this._generateMask,mask:n,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};0!==this._state?this.enqueue([this.dispatch,o,!1,a,r]):this.sendFrame(y.frame(o,a),r)}ping(e,t,s){let n,i;if("string"==typeof e?(n=Buffer.byteLength(e),i=!1):l(e)?(n=e.size,i=!1):(n=(e=f(e)).length,i=f.readOnly),n>125)throw new RangeError("The data size must not be greater than 125 bytes");const r={[p]:n,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:!1};l(e)?0!==this._state?this.enqueue([this.getBlobData,e,!1,r,s]):this.getBlobData(e,!1,r,s):0!==this._state?this.enqueue([this.dispatch,e,!1,r,s]):this.sendFrame(y.frame(e,r),s)}pong(e,t,s){let n,i;if("string"==typeof e?(n=Buffer.byteLength(e),i=!1):l(e)?(n=e.size,i=!1):(n=(e=f(e)).length,i=f.readOnly),n>125)throw new RangeError("The data size must not be greater than 125 bytes");const r={[p]:n,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:!1};l(e)?0!==this._state?this.enqueue([this.getBlobData,e,!1,r,s]):this.getBlobData(e,!1,r,s):0!==this._state?this.enqueue([this.dispatch,e,!1,r,s]):this.sendFrame(y.frame(e,r),s)}send(e,t,s){const i=this._extensions[n.extensionName];let r,o,a=t.binary?2:1,c=t.compress;"string"==typeof e?(r=Buffer.byteLength(e),o=!1):l(e)?(r=e.size,o=!1):(r=(e=f(e)).length,o=f.readOnly),this._firstFragment?(this._firstFragment=!1,c&&i&&i.params[i._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(c=r>=i._threshold),this._compress=c):(c=!1,a=0),t.fin&&(this._firstFragment=!0);const h={[p]:r,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:a,readOnly:o,rsv1:c};l(e)?0!==this._state?this.enqueue([this.getBlobData,e,this._compress,h,s]):this.getBlobData(e,this._compress,h,s):0!==this._state?this.enqueue([this.dispatch,e,this._compress,h,s]):this.dispatch(e,this._compress,h,s)}getBlobData(e,t,s,n){this._bufferedBytes+=s[p],this._state=2,e.arrayBuffer().then(e=>{if(this._socket.destroyed){const e=new Error("The socket was closed while the blob was being read");return void process.nextTick(b,this,e,n)}this._bufferedBytes-=s[p];const i=f(e);t?this.dispatch(i,t,s,n):(this._state=0,this.sendFrame(y.frame(i,s),n),this.dequeue())}).catch(e=>{process.nextTick(w,this,e,n)})}dispatch(e,t,s,i){if(!t)return void this.sendFrame(y.frame(e,s),i);const r=this._extensions[n.extensionName];this._bufferedBytes+=s[p],this._state=1,r.compress(e,s.fin,(e,t)=>{if(this._socket.destroyed){return void b(this,new Error("The socket was closed while data was being compressed"),i)}this._bufferedBytes-=s[p],this._state=0,s.readOnly=!1,this.sendFrame(y.frame(t,s),i),this.dequeue()})}dequeue(){for(;0===this._state&&this._queue.length;){const e=this._queue.shift();this._bufferedBytes-=e[3][p],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][p],this._queue.push(e)}sendFrame(e,t){2===e.length?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}}function b(e,t,s){"function"==typeof s&&s(t);for(let s=0;s{let s=e[t];return Array.isArray(s)||(s=[s]),s.map(e=>[t].concat(Object.keys(e).map(t=>{let s=e[t];return Array.isArray(s)||(s=[s]),s.map(e=>!0===e?t:`${t}=${e}`).join("; ")})).join("; ")).join(", ")}).join(", ")},parse:function(s){const n=Object.create(null);let i,r,o=Object.create(null),a=!1,c=!1,l=!1,h=-1,d=-1,u=-1,f=0;for(;f0&&e.unshift(t),e.on("close",ne),e.on("data",ie),e.on("end",re),e.on("error",oe),this._readyState=M.OPEN,this.emit("open")}emitClose(){if(!this._socket)return this._readyState=M.CLOSED,void this.emit("close",this._closeCode,this._closeMessage);this._extensions[v.extensionName]&&this._extensions[v.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=M.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==M.CLOSED){if(this.readyState===M.CONNECTING){const e="WebSocket was closed before the connection was established";return void V(this,this._req,e)}this.readyState!==M.CLOSING?(this._readyState=M.CLOSING,this._sender.close(e,t,!this._isServer,e=>{e||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),se(this)):this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end()}}pause(){this.readyState!==M.CONNECTING&&this.readyState!==M.CLOSED&&(this._paused=!0,this._socket.pause())}ping(e,t,s){if(this.readyState===M.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");"function"==typeof e?(s=e,e=t=void 0):"function"==typeof t&&(s=t,t=void 0),"number"==typeof e&&(e=e.toString()),this.readyState===M.OPEN?(void 0===t&&(t=!this._isServer),this._sender.ping(e||x,t,s)):q(this,e,s)}pong(e,t,s){if(this.readyState===M.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");"function"==typeof e?(s=e,e=t=void 0):"function"==typeof t&&(s=t,t=void 0),"number"==typeof e&&(e=e.toString()),this.readyState===M.OPEN?(void 0===t&&(t=!this._isServer),this._sender.pong(e||x,t,s)):q(this,e,s)}resume(){this.readyState!==M.CONNECTING&&this.readyState!==M.CLOSED&&(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,s){if(this.readyState===M.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if("function"==typeof t&&(s=t,t={}),"number"==typeof e&&(e=e.toString()),this.readyState!==M.OPEN)return void q(this,e,s);const n={binary:"string"!=typeof e,mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[v.extensionName]||(n.compress=!1),this._sender.send(e||x,n,s)}terminate(){if(this.readyState!==M.CLOSED){if(this.readyState===M.CONNECTING){const e="WebSocket was closed before the connection was established";return void V(this,this._req,e)}this._socket&&(this._readyState=M.CLOSING,this._socket.destroy())}}}function j(e,t,s,n){const i={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:E,protocolVersion:z[1],maxBufferedChunks:262144,maxFragments:16384,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...n,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(e._autoPong=i.autoPong,e._closeTimeout=i.closeTimeout,!z.includes(i.protocolVersion))throw new RangeError(`Unsupported protocol version: ${i.protocolVersion} (supported versions: ${z.join(", ")})`);let r;if(t instanceof g)r=t;else try{r=new g(t)}catch{throw new SyntaxError(`Invalid URL: ${t}`)}"http:"===r.protocol?r.protocol="ws:":"https:"===r.protocol&&(r.protocol="wss:"),e._url=r.href;const o="wss:"===r.protocol,a="ws+unix:"===r.protocol;let c;if("ws:"===r.protocol||o||a?a&&!r.pathname?c="The URL's pathname is empty":r.hash&&(c="The URL contains a fragment identifier"):c='The URL\'s protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"',c){const t=new SyntaxError(c);if(0===e._redirects)throw t;return void F(e,t)}const d=o?443:80,u=f(16).toString("base64"),m=o?l.request:h.request,_=new Set;let y,b;if(i.createConnection=i.createConnection||(o?G:W),i.defaultPort=i.defaultPort||d,i.port=r.port||d,i.host=r.hostname.startsWith("[")?r.hostname.slice(1,-1):r.hostname,i.headers={...i.headers,"Sec-WebSocket-Version":i.protocolVersion,"Sec-WebSocket-Key":u,Connection:"Upgrade",Upgrade:"websocket"},i.path=r.pathname+r.search,i.timeout=i.handshakeTimeout,i.perMessageDeflate&&(y=new v({...i.perMessageDeflate,isServer:!1,maxPayload:i.maxPayload}),i.headers["Sec-WebSocket-Extensions"]=L({[v.extensionName]:y.offer()})),s.length){for(const e of s){if("string"!=typeof e||!A.test(e)||_.has(e))throw new SyntaxError("An invalid or duplicated subprotocol was specified");_.add(e)}i.headers["Sec-WebSocket-Protocol"]=s.join(",")}if(i.origin&&(i.protocolVersion<13?i.headers["Sec-WebSocket-Origin"]=i.origin:i.headers.Origin=i.origin),(r.username||r.password)&&(i.auth=`${r.username}:${r.password}`),a){const e=i.path.split(":");i.socketPath=e[0],i.path=e[1]}if(i.followRedirects){if(0===e._redirects){e._originalIpc=a,e._originalSecure=o,e._originalHostOrSocketPath=a?i.socketPath:r.host;const t=n&&n.headers;if(n={...n,headers:{}},t)for(const[e,s]of Object.entries(t))n.headers[e.toLowerCase()]=s}else if(0===e.listenerCount("redirect")){const t=a?!!e._originalIpc&&i.socketPath===e._originalHostOrSocketPath:!e._originalIpc&&r.host===e._originalHostOrSocketPath;(!t||e._originalSecure&&!o)&&(delete i.headers.authorization,delete i.headers.cookie,t||delete i.headers.host,i.auth=void 0)}i.auth&&!n.headers.authorization&&(n.headers.authorization="Basic "+Buffer.from(i.auth).toString("base64")),b=e._req=m(i),e._redirects&&e.emit("redirect",e.url,b)}else b=e._req=m(i);i.timeout&&b.on("timeout",()=>{V(e,b,"Opening handshake has timed out")}),b.on("error",t=>{null===b||b[B]||(b=e._req=null,F(e,t))}),b.on("response",r=>{const o=r.headers.location,a=r.statusCode;if(o&&i.followRedirects&&a>=300&&a<400){if(++e._redirects>i.maxRedirects)return void V(e,b,"Maximum redirects exceeded");let r;b.abort();try{r=new g(o,t)}catch(t){const s=new SyntaxError(`Invalid URL: ${o}`);return void F(e,s)}j(e,r,s,n)}else e.emit("unexpected-response",b,r)||V(e,b,`Unexpected server response: ${r.statusCode}`)}),b.on("upgrade",(t,s,n)=>{if(e.emit("upgrade",t),e.readyState!==M.CONNECTING)return;b=e._req=null;const r=t.headers.upgrade;if(void 0===r||"websocket"!==r.toLowerCase())return void V(e,s,"Invalid Upgrade header");const o=p("sha1").update(u+k).digest("base64");if(t.headers["sec-websocket-accept"]!==o)return void V(e,s,"Invalid Sec-WebSocket-Accept header");const a=t.headers["sec-websocket-protocol"];let c;if(void 0!==a?_.size?_.has(a)||(c="Server sent an invalid subprotocol"):c="Server sent a subprotocol but none was requested":_.size&&(c="Server sent no subprotocol"),c)return void V(e,s,c);a&&(e._protocol=a);const l=t.headers["sec-websocket-extensions"];if(void 0!==l){if(!y){return void V(e,s,"Server sent a Sec-WebSocket-Extensions header but no extension was requested")}let t;try{t=R(l)}catch(t){return void V(e,s,"Invalid Sec-WebSocket-Extensions header")}const n=Object.keys(t);if(1!==n.length||n[0]!==v.extensionName){return void V(e,s,"Server indicated an extension that was not requested")}try{y.accept(t[v.extensionName])}catch(t){return void V(e,s,"Invalid Sec-WebSocket-Extensions header")}e._extensions[v.extensionName]=y}e.setSocket(s,n,{allowSynchronousEvents:i.allowSynchronousEvents,generateMask:i.generateMask,maxBufferedChunks:i.maxBufferedChunks,maxFragments:i.maxFragments,maxPayload:i.maxPayload,skipUTF8Validation:i.skipUTF8Validation})}),i.finishRequest?i.finishRequest(b,e):b.end()}function F(e,t){e._readyState=M.CLOSING,e._errorEmitted=!0,e.emit("error",t),e.emitClose()}function W(e){return e.path=e.socketPath,d.connect(e)}function G(e){return e.path=void 0,e.servername||""===e.servername||(e.servername=d.isIP(e.host)?"":e.host),u.connect(e)}function V(e,t,s){e._readyState=M.CLOSING;const n=new Error(s);Error.captureStackTrace(n,V),t.setHeader?(t[B]=!0,t.abort(),t.socket&&!t.socket.destroyed&&t.socket.destroy(),process.nextTick(F,e,n)):(t.destroy(n),t.once("error",e.emit.bind(e,"error")),t.once("close",e.emitClose.bind(e)))}function q(e,t,s){if(t){const s=w(t)?t.size:U(t).length;e._socket?e._sender._bufferedBytes+=s:e._bufferedAmount+=s}if(s){const t=new Error(`WebSocket is not open: readyState ${e.readyState} (${$[e.readyState]})`);process.nextTick(s,t)}}function Z(e,t){const s=this[D];s._closeFrameReceived=!0,s._closeMessage=t,s._closeCode=e,void 0!==s._socket[D]&&(s._socket.removeListener("data",ie),process.nextTick(ee,s._socket),1005===e?s.close():s.close(e,t))}function K(){const e=this[D];e.isPaused||e._socket.resume()}function H(e){const t=this[D];void 0!==t._socket[D]&&(t._socket.removeListener("data",ie),process.nextTick(ee,t._socket),t.close(e[P])),t._errorEmitted||(t._errorEmitted=!0,t.emit("error",e))}function J(){this[D].emitClose()}function Y(e,t){this[D].emit("message",e,t)}function X(e){const t=this[D];t._autoPong&&t.pong(e,!this._isServer,C),t.emit("ping",e)}function Q(e){this[D].emit("pong",e)}function ee(e){e.resume()}function te(e){const t=this[D];t.readyState!==M.CLOSED&&(t.readyState===M.OPEN&&(t._readyState=M.CLOSING,se(t)),this._socket.end(),t._errorEmitted||(t._errorEmitted=!0,t.emit("error",e)))}function se(e){e._closeTimer=setTimeout(e._socket.destroy.bind(e._socket),e._closeTimeout)}function ne(){const e=this[D];if(this.removeListener("close",ne),this.removeListener("data",ie),this.removeListener("end",re),e._readyState=M.CLOSING,!this._readableState.endEmitted&&!e._closeFrameReceived&&!e._receiver._writableState.errorEmitted&&0!==this._readableState.length){const t=this.read(this._readableState.length);e._receiver.write(t)}e._receiver.end(),this[D]=void 0,clearTimeout(e._closeTimer),e._receiver._writableState.finished||e._receiver._writableState.errorEmitted?e.emitClose():(e._receiver.on("error",J),e._receiver.on("finish",J))}function ie(e){this[D]._receiver.write(e)||this.pause()}function re(){const e=this[D];e._readyState=M.CLOSING,e._receiver.end(),this.end()}function oe(){const e=this[D];this.removeListener("error",oe),this.on("error",C),e&&(e._readyState=M.CLOSING,this.destroy())}return Object.defineProperty(M,"CONNECTING",{enumerable:!0,value:$.indexOf("CONNECTING")}),Object.defineProperty(M.prototype,"CONNECTING",{enumerable:!0,value:$.indexOf("CONNECTING")}),Object.defineProperty(M,"OPEN",{enumerable:!0,value:$.indexOf("OPEN")}),Object.defineProperty(M.prototype,"OPEN",{enumerable:!0,value:$.indexOf("OPEN")}),Object.defineProperty(M,"CLOSING",{enumerable:!0,value:$.indexOf("CLOSING")}),Object.defineProperty(M.prototype,"CLOSING",{enumerable:!0,value:$.indexOf("CLOSING")}),Object.defineProperty(M,"CLOSED",{enumerable:!0,value:$.indexOf("CLOSED")}),Object.defineProperty(M.prototype,"CLOSED",{enumerable:!0,value:$.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(e=>{Object.defineProperty(M.prototype,e,{enumerable:!0})}),["open","error","close","message"].forEach(e=>{Object.defineProperty(M.prototype,`on${e}`,{enumerable:!0,get(){for(const t of this.listeners(e))if(t[O])return t[T];return null},set(t){for(const t of this.listeners(e))if(t[O]){this.removeListener(e,t);break}"function"==typeof t&&this.addEventListener(e,t,{[O]:!0})}})}),M.prototype.addEventListener=I,M.prototype.removeEventListener=N,Xe=M}function ht(){if(nt)return st;nt=1;const{tokenChars:e}=rt();return st={parse:function(t){const s=new Set;let n=-1,i=-1,r=0;for(;r`${e}: ${i[e]}`).join("\r\n")+"\r\n\r\n"+s)}function y(e,t,s,n,i,r){if(e.listenerCount("wsClientError")){const n=new Error(i);Error.captureStackTrace(n,y),e.emit("wsClientError",n,s,t)}else v(s,n,i,r)}dt=class extends t{constructor(e,t){if(super(),null==(e={allowSynchronousEvents:!0,autoPong:!0,maxBufferedChunks:262144,maxFragments:16384,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:u,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:d,...e}).port&&!e.server&&!e.noServer||null!=e.port&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(null!=e.port?(this._server=n.createServer((e,t)=>{const s=n.STATUS_CODES[426];t.writeHead(426,{"Content-Length":s.length,"Content-Type":"text/plain"}),t.end(s)}),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){const e=this.emit.bind(this,"connection");this._removeListeners=function(e,t){for(const s of Object.keys(t))e.on(s,t[s]);return function(){for(const s of Object.keys(t))e.removeListener(s,t[s])}}(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(t,s,n)=>{this.handleUpgrade(t,s,n,e)}})}!0===e.perMessageDeflate&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=0}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(2===this._state)return e&&this.once("close",()=>{e(new Error("The server is not running"))}),void process.nextTick(_,this);if(e&&this.once("close",e),1!==this._state)if(this._state=1,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients&&this.clients.size?this._shouldEmitClose=!0:process.nextTick(_,this);else{const e=this._server;this._removeListeners(),this._removeListeners=this._server=null,e.close(()=>{_(this)})}}shouldHandle(e){if(this.options.path){const t=e.url.indexOf("?");if((-1!==t?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,s,n){t.on("error",g);const i=e.headers["sec-websocket-key"],r=e.headers.upgrade,o=+e.headers["sec-websocket-version"];if("GET"!==e.method){return void y(this,e,t,405,"Invalid HTTP method")}if(void 0===r||"websocket"!==r.toLowerCase()){return void y(this,e,t,400,"Invalid Upgrade header")}if(void 0===i||!m.test(i)){return void y(this,e,t,400,"Missing or invalid Sec-WebSocket-Key header")}if(13!==o&&8!==o){return void y(this,e,t,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"})}if(!this.shouldHandle(e))return void v(t,400);const a=e.headers["sec-websocket-protocol"];let d=new Set;if(void 0!==a)try{d=h.parse(a)}catch(s){return void y(this,e,t,400,"Invalid Sec-WebSocket-Protocol header")}const u=e.headers["sec-websocket-extensions"],f={};if(this.options.perMessageDeflate&&void 0!==u){const s=new l({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{const e=c.parse(u);e[l.extensionName]&&(s.accept(e[l.extensionName]),f[l.extensionName]=s)}catch(s){return void y(this,e,t,400,"Invalid or unacceptable Sec-WebSocket-Extensions header")}}if(this.options.verifyClient){const r={origin:e.headers[""+(8===o?"sec-websocket-origin":"origin")],secure:!(!e.socket.authorized&&!e.socket.encrypted),req:e};if(2===this.options.verifyClient.length)return void this.options.verifyClient(r,(r,o,a,c)=>{if(!r)return v(t,o||401,a,c);this.completeUpgrade(f,i,d,e,t,s,n)});if(!this.options.verifyClient(r))return v(t,401)}this.completeUpgrade(f,i,d,e,t,s,n)}completeUpgrade(e,t,s,n,i,r,o){if(!i.readable||!i.writable)return i.destroy();if(i[p])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>0)return v(i,503);const h=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${a("sha1").update(t+f).digest("base64")}`],d=new this.options.WebSocket(null,void 0,this.options);if(s.size){const e=this.options.handleProtocols?this.options.handleProtocols(s,n):s.values().next().value;e&&(h.push(`Sec-WebSocket-Protocol: ${e}`),d._protocol=e)}if(e[l.extensionName]){const t=e[l.extensionName].params,s=c.format({[l.extensionName]:[t]});h.push(`Sec-WebSocket-Extensions: ${s}`),d._extensions=e}this.emit("headers",h,n),i.write(h.concat("\r\n").join("\r\n")),i.removeListener("error",g),d.setSocket(i,r,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxBufferedChunks:this.options.maxBufferedChunks,maxFragments:this.options.maxFragments,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(d),d.on("close",()=>{this.clients.delete(d),this._shouldEmitClose&&!this.clients.size&&process.nextTick(_,this)})),o(d,n)}}}(),function(e){e[e.StreamDeck=0]="StreamDeck",e[e.StreamDeckMini=1]="StreamDeckMini",e[e.StreamDeckXL=2]="StreamDeckXL",e[e.StreamDeckMobile=3]="StreamDeckMobile",e[e.CorsairGKeys=4]="CorsairGKeys",e[e.StreamDeckPedal=5]="StreamDeckPedal",e[e.CorsairVoyager=6]="CorsairVoyager",e[e.StreamDeckPlus=7]="StreamDeckPlus",e[e.SCUFController=8]="SCUFController",e[e.StreamDeckNeo=9]="StreamDeckNeo",e[e.StreamDeckStudio=10]="StreamDeckStudio",e[e.VirtualStreamDeck=11]="VirtualStreamDeck",e[e.Galleon100SD=12]="Galleon100SD",e[e.StreamDeckPlusXL=13]="StreamDeckPlusXL"}(ft||(ft={})),function(e){e[e.Rectangle=0]="Rectangle",e[e.DoubleRectangle=1]="DoubleRectangle",e[e.Trapezoid=2]="Trapezoid",e[e.DoubleTrapezoid=3]="DoubleTrapezoid",e[e.Groove=4]="Groove"}(pt||(pt={})),function(e){e.Port="-port",e.Info="-info",e.PluginUUID="-pluginUUID",e.RegisterEvent="-registerEvent"}(mt||(mt={})),function(e){e[e.HardwareAndSoftware=0]="HardwareAndSoftware",e[e.Hardware=1]="Hardware",e[e.Software=2]="Software"}(_t||(_t={}));class vt{build;major;minor;patch;constructor(e){const t=e.match(/^(0|[1-9]\d*)(?:\.(0|[1-9]\d*))?(?:\.(0|[1-9]\d*))?(?:\.(0|[1-9]\d*))?$/);if(null===t)throw new Error(`Invalid format; expected "{major}[.{minor}[.{patch}[.{build}]]]" but was "${e}"`);[,this.major,this.minor,this.patch,this.build]=[...t.map(e=>parseInt(e)||0)]}compareTo(e){const t=({major:e,minor:t,build:s,patch:n})=>[e,t,s,n],s=t(this),n=t(e);for(let e=0;e<4;e++){if(s[e]n[e])return 1}return 0}toString(){return`${this.major}.${this.minor}`}}class yt{write(e){switch(e.level){case"error":console.error(...e.data);break;case"warn":console.warn(...e.data);break;default:console.log(...e.data)}}}const bt="\n";function wt(e){switch(e){case"error":return 0;case"warn":return 1;case"info":return 2;case"debug":return 3;default:return 4}}class St{#l;#h;#d;constructor(e){this.#h={minimumLevel:"trace",...e},this.#d=void 0===this.#h.scope||""===this.#h.scope.trim()?"":this.#h.scope,"function"!=typeof this.#h.level&&this.setLevel(this.#h.level)}get level(){return void 0!==this.#l?this.#l:"function"==typeof this.#h.level?this.#h.level():this.#h.level}createScope(e){return""===(e=e.trim())?this:new St({...this.#h,level:()=>this.level,scope:this.#h.scope?`${this.#h.scope}->${e}`:e})}debug(...e){return this.write({level:"debug",data:e,scope:this.#d})}error(...e){return this.write({level:"error",data:e,scope:this.#d})}info(...e){return this.write({level:"info",data:e,scope:this.#d})}setLevel(e){return void 0!==e&&wt(e)>wt(this.#h.minimumLevel)?this.#l="info":this.#l=e,this}trace(...e){return this.write({level:"trace",data:e,scope:this.#d})}warn(...e){return this.write({level:"warn",data:e,scope:this.#d})}write(e){return wt(e.level)<=wt(this.level)&&this.#h.targets.forEach(t=>t.write(e)),this}}let Et;function xt(){return void 0===Et&&(Et=process.execArgv.some(e=>{const t=e.split("=")[0];return"--inspect"===t||"--inspect-brk"===t||"--inspect-port"===t})),Et}const kt=[new class{#u;#h;#f=0;constructor(e){this.#h=e,this.#u=this.getLogFilePath(),this.reIndex()}write(e){const t=d.openSync(this.#u,"a");try{const s=this.#h.format(e);d.writeSync(t,s+"\n"),this.#f+=s.length}finally{d.closeSync(t)}this.#f>=this.#h.maxSize&&(this.reIndex(),this.#f=0)}getLogFilePath(e=0){return p.join(this.#h.dest,`${this.#h.fileName}.${e}.log`)}getLogFiles(){const e=/^\.(\d+)\.log$/;return d.readdirSync(this.#h.dest,{withFileTypes:!0}).reduce((t,s)=>{if(s.isDirectory()||s.name.indexOf(this.#h.fileName)<0)return t;const n=s.name.substring(this.#h.fileName.length).match(e);return 2!==n?.length||t.push({path:p.join(this.#h.dest,s.name),index:parseInt(n[1])}),t},[]).sort(({index:e},{index:t})=>et?1:0)}reIndex(){if(!d.existsSync(this.#h.dest))return void d.mkdirSync(this.#h.dest,{recursive:!0});const e=this.getLogFiles();for(let t=e.length-1;t>=0;t--){const s=e[t];t>=this.#h.maxFileCount-1?d.rmSync(s.path):d.renameSync(s.path,this.getLogFilePath(t+1))}}}({dest:p.join(_(),"logs"),fileName:function(){const e=p.basename(process.cwd()),t=e.lastIndexOf(".sdPlugin");return t<0?e:e.substring(0,t)}(),format:e=>{const{data:t,level:s,scope:n}=e;let i=`${(new Date).toISOString()} ${s.toUpperCase().padEnd(5)} `;return n&&(i+=`${n}: `),`${i}${function(e){let t="",s=!1;for(const n of e)"object"==typeof n&&n instanceof Error?(t+=`${bt}${n.stack}`,s=!0):(s&&(t+=bt,s=!1),t+="object"==typeof n?JSON.stringify(n):n,t+=" ");return t.trimEnd()}(t)}`},maxFileCount:10,maxSize:52428800})];xt()&&kt.splice(0,0,new yt);const Ot=new St({level:xt()?"debug":"info",minimumLevel:xt()?"trace":"debug",targets:kt});process.once("uncaughtException",e=>Ot.error("Process encountered uncaught exception",e));const Tt=new class extends v{_registrationParameters;_version;canConnect=!0;connection=x();logger=Ot.createScope("Connection");get registrationParameters(){return this._registrationParameters??=this.getRegistrationParameters()}get version(){return this._version??=new vt(this.registrationParameters.info.application.version)}async connect(){if(this.canConnect){this.canConnect=!1;const e=new gt(`ws://127.0.0.1:${this.registrationParameters.port}`);e.onmessage=e=>this.tryEmit(e),e.onopen=()=>{e.send(JSON.stringify({event:this.registrationParameters.registerEvent,uuid:this.registrationParameters.pluginUUID})),this.connection.resolve(e),this.emit("connected",this.registrationParameters.info)}}await this.connection.promise}async send(e){const t=await this.connection.promise,s=JSON.stringify(e);this.logger.trace(s),t.send(s)}getRegistrationParameters(){const e={port:void 0,info:void 0,pluginUUID:void 0,registerEvent:void 0},t=Ot.createScope("RegistrationParameters");for(let s=0;s{void 0===t&&s.push(e)};if(n(mt.Port,e.port),n(mt.PluginUUID,e.pluginUUID),n(mt.RegisterEvent,e.registerEvent),n(mt.Info,e.info),s.length>0)throw new Error(`Unable to establish a connection with Stream Deck, missing command line arguments: ${s.join(", ")}`);return e}tryEmit(e){try{const t=JSON.parse(e.data.toString());t.event?(this.logger.trace(e.data.toString()),this.emit(t.event,t)):this.logger.warn(`Received unknown message: ${e.data}`)}catch(t){this.logger.error(`Failed to parse message: ${e.data}`,t)}}};class Pt{type;constructor(e){this.type=e.event}}class Dt extends Pt{action;constructor(e,t){super(t),this.action=e}}class Ct extends Dt{payload;constructor(e,t){super(e,t),this.payload=t.payload}}const It=new E(()=>{const e=m(process.cwd(),"manifest.json");if(!u(e))throw new Error("Failed to read manifest.json as the file does not exist.");try{return JSON.parse(f(e,{encoding:"utf-8",flag:"r"}).toString())}catch(e){if(e instanceof SyntaxError)return null;throw e}}),Nt=new E(()=>null===It.value?null:new vt(It.value.Software.MinimumVersion));function Lt(){return Nt.value}const Rt={useExperimentalMessageIdentifiers:!1},Ut=new Map;class Bt extends S{constructor(){super(Ut)}getActionById(e){return Ut.get(e)}}const zt=new class extends Bt{delete(e){Ut.delete(e)}set(e){Ut.set(e.id,e)}};class $t extends Pt{application;constructor(e){super(e),this.application=e.payload.application}}class At extends Pt{device;constructor(e,t){super(e),this.device=t}}class Mt extends Pt{url;constructor(e){super(e),this.url=new Ft(e.payload.url)}}const jt="streamdeck://";class Ft{fragment;href;path;query;queryParameters;constructor(e){const t=new URL(`${jt}${e}`);this.fragment=t.hash.substring(1),this.href=t.href.substring(13),this.path=Ft.parsePath(this.href),this.query=t.search.substring(1),this.queryParameters=t.searchParams}static parsePath(e){const t=t=>{const s=e.indexOf(t);return s>=0?s:e.length};return e.substring(0,Math.min(t("?"),t("#")))}}class Wt extends Pt{settings;constructor(e){super(e),this.settings=e.payload.settings}}class Gt extends Pt{action;payload;constructor(e,t){super(t),this.action=e,this.payload=t.payload}}function Vt(e,t){const s=It.value?.SDKVersion??null;if(null!==s&&e>s)throw new Error(`[ERR_NOT_SUPPORTED]: ${t} requires manifest SDK version ${e} or higher, but found version ${s}; please update the "SDKVersion" in the plugin's manifest to ${e} or higher.`)}function qt(e,t,s){const n={major:Math.floor(e),minor:Number(e.toString().split(".").at(1)??0),patch:0,build:0};if(-1===t.compareTo(n))throw new Error(`[ERR_NOT_SUPPORTED]: ${s} requires Stream Deck version ${n.major}.${n.minor} or higher, but current version is ${t.major}.${t.minor}; please update Stream Deck and the "Software.MinimumVersion" in the plugin's manifest to "${n.major}.${n.minor}" or higher.`);const i=Lt();if(null!==i&&-1===i.compareTo(n))throw new Error(`[ERR_NOT_SUPPORTED]: ${s} requires Stream Deck version ${n.major}.${n.minor} or higher; please update the "Software.MinimumVersion" in the plugin's manifest to "${n.major}.${n.minor}" or higher.`)}const Zt={get useExperimentalMessageIdentifiers(){return Rt.useExperimentalMessageIdentifiers},set useExperimentalMessageIdentifiers(e){qt(7.1,Tt.version,"Message identifiers"),Rt.useExperimentalMessageIdentifiers=e},getGlobalSettings:()=>new Promise(e=>{Tt.once("didReceiveGlobalSettings",t=>e(t.payload.settings)),Tt.send({event:"getGlobalSettings",context:Tt.registrationParameters.pluginUUID,id:g()})}),onDidReceiveGlobalSettings:e=>Tt.disposableOn("didReceiveGlobalSettings",t=>{Zt.useExperimentalMessageIdentifiers&&t.id||e(new Wt(t))}),onDidReceiveSettings:e=>Tt.disposableOn("didReceiveSettings",t=>{if(Zt.useExperimentalMessageIdentifiers&&t.id)return;const s=zt.getActionById(t.context);s&&e(new Ct(s,t))}),setGlobalSettings:async e=>{await Tt.send({event:"setGlobalSettings",context:Tt.registrationParameters.pluginUUID,payload:e})}};const Kt=new class{#p;#m=0;constructor(){this.onDidAppear(e=>{this.#_(e.action)?this.#m++:(this.#m=1,this.#p=e.action)}),this.onDidDisappear(e=>{this.#_(e.action)&&(this.#m--,this.#m<=0&&(this.#p=void 0))})}get action(){return this.#p}onDidAppear(e){return Tt.disposableOn("propertyInspectorDidAppear",t=>{const s=zt.getActionById(t.context);s&&e(new Dt(s,t))})}onDidDisappear(e){return Tt.disposableOn("propertyInspectorDidDisappear",t=>{const s=zt.getActionById(t.context);s&&e(new Dt(s,t))})}onSendToPlugin(e){return Tt.disposableOn("sendToPlugin",t=>{const s=zt.getActionById(t.context);s&&e(new Gt(s,t))})}async sendToPropertyInspector(e){this.#p&&await Tt.send({event:"sendToPropertyInspector",context:this.#p.id,payload:e})}#_(e){return this.#p?.id===e.id&&this.#p?.manifestId===e.manifestId&&this.#p?.device?.id===e.device.id}};const Ht=new class{#g=new Map;delete(e){this.#g.delete(e)}get(e){const t=this.#g.get(e);return void 0!==t?structuredClone(t):void 0}set(e,t){this.#g.set(e,structuredClone(t))}},Jt=new Map;class Yt extends S{constructor(){super(Jt)}getDeviceById(e){return Jt.get(e)}}const Xt=new class extends Yt{set(e){Jt.set(e.id,e)}};class Qt{#v;#y;constructor(e){this.#y=e;const t=Xt.getDeviceById(e.device);if(!t)throw new Error(`Failed to initialize action; device ${e.device} not found`);this.#v=t}get controllerType(){return this.#y.payload.controller}get device(){return this.#v}get id(){return this.#y.context}get manifestId(){return this.#y.action}toJSON(){return{controllerType:this.controllerType,device:this.device,id:this.id,manifestId:this.manifestId}}}class es extends Qt{async getResources(){qt(7.1,Tt.version,"getResources");return(await this.#b("getResources","didReceiveResources")).payload.resources}async getSettings(){if(Rt.useExperimentalMessageIdentifiers){const e=Ht.get(this.id);if(void 0!==e)return Ot.trace(JSON.stringify({event:"getSettings",context:this.id,source:"cache",settings:e})),e}return(await this.#b("getSettings","didReceiveSettings")).payload.settings}isDial(){return"Encoder"===this.controllerType}isKey(){return"Keypad"===this.controllerType}setResources(e){return qt(7.1,Tt.version,"setResources"),Tt.send({event:"setResources",context:this.id,payload:e})}setSettings(e){return Ht.delete(this.id),Tt.send({event:"setSettings",context:this.id,payload:e})}showAlert(){return Tt.send({event:"showAlert",context:this.id})}async#b(e,t){const{resolve:s,reject:n,promise:i}=x(),r=setTimeout(()=>{o.dispose(),n("The request timed out")},15e3),o=Tt.disposableOn(t,e=>{e.context==this.id&&(clearTimeout(r),o.dispose(),s(e))});return await Tt.send({event:e,context:this.id,id:g()}),i}}class ts extends es{#w;constructor(e){if(super(e),"Encoder"!==e.payload.controller)throw new Error("Unable to create DialAction; source event is not a Encoder");this.#w=Object.freeze(e.payload.coordinates)}get coordinates(){return this.#w}setFeedback(e){return Tt.send({event:"setFeedback",context:this.id,payload:e})}setFeedbackLayout(e){return Tt.send({event:"setFeedbackLayout",context:this.id,payload:{layout:e}})}setImage(e){return Tt.send({event:"setImage",context:this.id,payload:{image:e}})}setTitle(e){return this.setFeedback({title:e})}setTriggerDescription(e){return Tt.send({event:"setTriggerDescription",context:this.id,payload:e||{}})}toJSON(){return{...super.toJSON(),coordinates:this.coordinates}}}class ss extends es{#w;#y;constructor(e){if(super(e),"Keypad"!==e.payload.controller)throw new Error("Unable to create KeyAction; source event is not a Keypad");this.#w=e.payload.isInMultiAction?void 0:Object.freeze(e.payload.coordinates),this.#y=e}get coordinates(){return this.#w}isInMultiAction(){return this.#y.payload.isInMultiAction}setImage(e,t){return Tt.send({event:"setImage",context:this.id,payload:{image:e,...t}})}setState(e){return Tt.send({event:"setState",context:this.id,payload:{state:e}})}setTitle(e,t){return Tt.send({event:"setTitle",context:this.id,payload:{title:e,...t}})}showOk(){return Tt.send({event:"showOk",context:this.id})}toJSON(){return{...super.toJSON(),coordinates:this.coordinates,isInMultiAction:this.isInMultiAction()}}}const ns=new E(()=>It.value);const is=new class extends Bt{constructor(){super(),Tt.prependListener("willAppear",e=>{const t="Encoder"===e.payload.controller?new ts(e):new ss(e);zt.set(t),Rt.useExperimentalMessageIdentifiers&&Ht.set(e.context,e.payload.settings)}),Tt.prependListener("didReceiveSettings",e=>{Rt.useExperimentalMessageIdentifiers&&Ht.set(e.context,e.payload.settings)}),Tt.prependListener("willDisappear",e=>{zt.delete(e.context),Ht.delete(e.context)})}onDialDown(e){return Tt.disposableOn("dialDown",t=>{const s=zt.getActionById(t.context);s?.isDial()&&e(new Ct(s,t))})}onDialRotate(e){return Tt.disposableOn("dialRotate",t=>{const s=zt.getActionById(t.context);s?.isDial()&&e(new Ct(s,t))})}onDialUp(e){return Tt.disposableOn("dialUp",t=>{const s=zt.getActionById(t.context);s?.isDial()&&e(new Ct(s,t))})}onDidReceiveResources(e){return Tt.disposableOn("didReceiveResources",t=>{if(void 0!==t.id)return;const s=zt.getActionById(t.context);s&&e(new Ct(s,t))})}onKeyDown(e){return Tt.disposableOn("keyDown",t=>{const s=zt.getActionById(t.context);s?.isKey()&&e(new Ct(s,t))})}onKeyUp(e){return Tt.disposableOn("keyUp",t=>{const s=zt.getActionById(t.context);s?.isKey()&&e(new Ct(s,t))})}onTitleParametersDidChange(e){return Tt.disposableOn("titleParametersDidChange",t=>{const s=zt.getActionById(t.context);s&&e(new Ct(s,t))})}onTouchTap(e){return Tt.disposableOn("touchTap",t=>{const s=zt.getActionById(t.context);s?.isDial()&&e(new Ct(s,t))})}onWillAppear(e){return Tt.disposableOn("willAppear",t=>{const s=zt.getActionById(t.context);s&&e(new Ct(s,t))})}onWillDisappear(e){return Tt.disposableOn("willDisappear",t=>e(new Ct(new Qt(t),t)))}registerAction(e){if(void 0===e.manifestId)throw new Error("The action's manifestId cannot be undefined.");if(null!==ns.value&&!ns.value.Actions.some(t=>t.UUID===e.manifestId))throw new Error(`The action's manifestId was not found within the manifest: ${e.manifestId}`);const{manifestId:t}=e,s=(s,n)=>{const i=n?.bind(e);void 0!==i&&s.bind(e)(async e=>{e.action.manifestId==t&&await i(e)})};s(this.onDialDown,e.onDialDown),s(this.onDialUp,e.onDialUp),s(this.onDialRotate,e.onDialRotate),s(Kt.onSendToPlugin,e.onSendToPlugin),s(this.onDidReceiveResources,e.onDidReceiveResources),s(Zt.onDidReceiveSettings,e.onDidReceiveSettings),s(this.onKeyDown,e.onKeyDown),s(this.onKeyUp,e.onKeyUp),s(Kt.onDidAppear,e.onPropertyInspectorDidAppear),s(Kt.onDidDisappear,e.onPropertyInspectorDidDisappear),s(this.onTitleParametersDidChange,e.onTitleParametersDidChange),s(this.onTouchTap,e.onTouchTap),s(this.onWillAppear,e.onWillAppear),s(this.onWillDisappear,e.onWillDisappear)}};class rs{#S=!1;#E;id;constructor(e,t,s){this.id=e,this.#E=t,this.#S=s,Tt.prependListener("deviceDidConnect",e=>{e.device===this.id&&(this.#E=e.deviceInfo,this.#S=!0)}),Tt.prependListener("deviceDidChange",e=>{e.device===this.id&&(this.#E=e.deviceInfo)}),Tt.prependListener("deviceDidDisconnect",e=>{e.device===this.id&&(this.#S=!1)})}get actions(){return zt.filter(e=>e.device.id===this.id)}get isConnected(){return this.#S}get name(){return this.#E.name}get size(){return this.#E.size}get type(){return this.#E.type}}const os=new class extends Yt{constructor(){super(),Tt.once("connected",e=>{e.devices.forEach(e=>Xt.set(new rs(e.id,e,!1)))}),Tt.on("deviceDidConnect",({device:e,deviceInfo:t})=>{Xt.getDeviceById(e)||Xt.set(new rs(e,t,!0))}),Tt.on("deviceDidChange",({device:e,deviceInfo:t})=>{Xt.getDeviceById(e)||Xt.set(new rs(e,t,!1))})}onDeviceDidChange(e){return qt(7,Tt.version,"onDeviceDidChange"),Tt.disposableOn("deviceDidChange",t=>e(new At(t,this.getDeviceById(t.device))))}onDeviceDidConnect(e){return Tt.disposableOn("deviceDidConnect",t=>e(new At(t,this.getDeviceById(t.device))))}onDeviceDidDisconnect(e){return Tt.disposableOn("deviceDidDisconnect",t=>e(new At(t,this.getDeviceById(t.device))))}};function as(e){const t=p.join(process.cwd(),`${e}.json`);if(!d.existsSync(t))return null;try{const e=d.readFileSync(t,{flag:"r"})?.toString();return function(e){const t=JSON.parse(e);if(null!=t&&"object"==typeof t&&"Localization"in t)return t.Localization;throw new TypeError('Translations must be a JSON object nested under a property named "Localization"')}(e)}catch(e){return Ot.error(`Failed to load translations from ${t}`,e),null}}var cs=Object.freeze({__proto__:null,switchToProfile:function(e,t,s){return void 0!==s&&qt(6.5,Tt.version,"Switching to a profile page"),Tt.send({event:"switchToProfile",context:Tt.registrationParameters.pluginUUID,device:e,payload:{page:s,profile:t}})}});var ls=Object.freeze({__proto__:null,getSecrets:function(){return qt(6.9,Tt.version,"Secrets"),Vt(3,"Secrets"),new Promise(e=>{Tt.once("didReceiveSecrets",t=>e(t.payload.secrets)),Tt.send({event:"getSecrets",context:Tt.registrationParameters.pluginUUID})})},onApplicationDidLaunch:function(e){return Tt.disposableOn("applicationDidLaunch",t=>e(new $t(t)))},onApplicationDidTerminate:function(e){return Tt.disposableOn("applicationDidTerminate",t=>e(new $t(t)))},onDidReceiveDeepLink:function(e){return qt(6.5,Tt.version,"Receiving deep-link messages"),Tt.disposableOn("didReceiveDeepLink",t=>e(new Mt(t)))},onSystemDidWakeUp:function(e){return Tt.disposableOn("systemDidWakeUp",t=>e(new Pt(t)))},openUrl:function(e){return Tt.send({event:"openUrl",payload:{url:e}})}});let hs;({get actions(){return is},get devices(){return os},get i18n(){return hs??=new w(this.info.application.language,as)},get info(){return Tt.registrationParameters.info},get logger(){return Ot},get profiles(){return cs},get settings(){return Zt},get system(){return ls},get ui(){return Kt},connect:()=>Tt.connect()}).connect(); diff --git a/com.bryce.llamawatch.sdPlugin/manifest.json b/com.bryce.llamawatch.sdPlugin/manifest.json new file mode 100644 index 0000000..4c6214b --- /dev/null +++ b/com.bryce.llamawatch.sdPlugin/manifest.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://schemas.elgato.com/streamdeck/plugins/manifest.json", + "Name": "llama-watch", + "Version": "1.0.0.0", + "Author": "Bryce Zuccaro", + "Actions": [], + "Category": "llama-watch", + "CodePath": "bin/plugin.js", + "Description": "Monitor llama-swap: in-flight requests per model and live GPU metric graphs.", + "Icon": "imgs/plugin/icon", + "SDKVersion": 2, + "Software": { "MinimumVersion": "6.5" }, + "OS": [{ "Platform": "mac", "MinimumVersion": "13" }], + "Nodejs": { "Version": "24" }, + "UUID": "com.bryce.llamawatch" +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..63c4ce2 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2559 @@ +{ + "name": "llama-watch", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "llama-watch", + "version": "1.0.0", + "dependencies": { + "@elgato/streamdeck": "^2.1.1" + }, + "devDependencies": { + "@elgato/cli": "^1.8.1", + "@rollup/plugin-commonjs": "^28.0.2", + "@rollup/plugin-node-resolve": "^16.0.0", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^12.1.2", + "@tsconfig/node20": "^20.1.4", + "@types/node": "22.13.0", + "rollup": "^4.32.1", + "tslib": "^2.8.1", + "tsx": "^4.19.2", + "typescript": "^5.7.3" + } + }, + "node_modules/@elgato/cli": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@elgato/cli/-/cli-1.8.1.tgz", + "integrity": "sha512-c4nhUrssspNdCA53DVspJcYFbxUPgYeqzJKVlGJvjMAPUk7BSs6yUzLF5IsQwDxlO8XWydp54wNPQftuNX1++A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@elgato/schemas": "^0.4.14", + "@humanwhocodes/momoa": "^3.0.0", + "@zip.js/zip.js": "^2.7.54", + "ajv": "^8.17.1", + "chalk": "^5.4.1", + "commander": "^13.0.0", + "ejs": "^3.1.10", + "find-process": "^1.4.10", + "ignore": "^7.0.3", + "inquirer": "^12.3.2", + "is-interactive": "^2.0.0", + "lodash": "^4.17.21", + "log-symbols": "^7.0.0", + "rage-edit": "^1.2.0", + "semver": "^7.6.3" + }, + "bin": { + "sd": "bin/streamdeck.mjs", + "streamdeck": "bin/streamdeck.mjs" + }, + "engines": { + "node": ">=20.1.0" + } + }, + "node_modules/@elgato/schemas": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/@elgato/schemas/-/schemas-0.4.15.tgz", + "integrity": "sha512-UpELAqazf52PFer+hqg/hvEhYoPHCH3R0af6P7Ih3Hk6xCCJENn7cA5TIpXAIGEWe6dIteHuo/e/iPGLUP7yXA==", + "license": "MIT" + }, + "node_modules/@elgato/streamdeck": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@elgato/streamdeck/-/streamdeck-2.1.1.tgz", + "integrity": "sha512-1viBEWDZWtRJHmY6uceyNZSExb6b0nRBqHlQfPyPulBUQ8tDdzfS7YDZ9MusHYHq1d80GjgwFiJCyHbujrJrHQ==", + "license": "MIT", + "dependencies": { + "@elgato/schemas": "^0.4.14", + "@elgato/utils": "0.5.0", + "ws": "^8.19.0" + }, + "engines": { + "node": ">=20.5.1" + } + }, + "node_modules/@elgato/utils": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@elgato/utils/-/utils-0.5.0.tgz", + "integrity": "sha512-qFIl5uT6LzQsesngwJZAQ+sFUzg5SRPbSwdWwrYe/HBRlWRwJoqZDUVYgbxdofpQQeCYgO22iAzzqw+MuSLzNA==", + "license": "MIT", + "dependencies": { + "zod": "^3.25.24" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@humanwhocodes/momoa": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-3.3.10.tgz", + "integrity": "sha512-KWiFQpSAqEIyrTXko3hFNLeQvSK8zXlJQzhhxsyVn58WFRYXST99b3Nqnu+ttOtjds2Pl2grUHGpe2NzhPynuQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", + "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.21", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", + "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.23", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", + "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", + "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", + "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", + "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", + "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", + "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.3.2", + "@inquirer/confirm": "^5.1.21", + "@inquirer/editor": "^4.2.23", + "@inquirer/expand": "^4.0.23", + "@inquirer/input": "^4.3.1", + "@inquirer/number": "^3.0.23", + "@inquirer/password": "^4.0.23", + "@inquirer/rawlist": "^4.1.11", + "@inquirer/search": "^3.2.2", + "@inquirer/select": "^4.4.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", + "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", + "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", + "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "28.0.9", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.9.tgz", + "integrity": "sha512-PIR4/OHZ79romx0BVVll/PkwWpJ7e5lsqFa3gFfcrFPWwLXLV39JVUzQV9RKjWerE7B845Hqjj9VYlQeieZ2dA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "fdir": "^6.2.0", + "is-reference": "1.2.1", + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0 || 14 >= 14.17" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz", + "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-typescript": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.3.0.tgz", + "integrity": "sha512-7DP0/p7y3t67+NabT9f8oTBFE6gGkto4SA6Np2oudYmZE/m1dt8RB0SjL1msMxFpLo631qjRCcBlAbq1ml/Big==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0||^4.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", + "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz", + "integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz", + "integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz", + "integrity": "sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz", + "integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz", + "integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz", + "integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz", + "integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz", + "integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz", + "integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz", + "integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz", + "integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz", + "integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz", + "integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz", + "integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz", + "integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz", + "integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz", + "integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz", + "integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz", + "integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz", + "integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz", + "integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz", + "integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz", + "integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz", + "integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz", + "integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tsconfig/node20": { + "version": "20.1.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.9.tgz", + "integrity": "sha512-IjlTv1RsvnPtUcjTqtVsZExKVq+KQx4g5pCP5tI7rAs6Xesl2qFwSz/tPDBC4JajkL/MlezBu3gPUwqRHl+RIg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.0.tgz", + "integrity": "sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@zip.js/zip.js": { + "version": "2.8.49", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.49.tgz", + "integrity": "sha512-TY3fKR/IQqPJqrOQAohvW6kv7Qd1aehzU7M7hbqhNNKxVP8uKSMO+aUlBwtdWzTCd62E0YOB+HHW9N0hMihrWw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "bun": ">=0.7.0", + "deno": ">=1.0.0", + "node": ">=18.0.0" + } + }, + "node_modules/acorn": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.2.0.tgz", + "integrity": "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", + "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/filelist": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/find-process": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.11.tgz", + "integrity": "sha512-mAOh9gGk9WZ4ip5UjV0o6Vb4SrfnAmtsFNzkMRH9HQiFXVQnDyQFrSHTK5UoG6E+KV+s+cIznbtwpfN41l2nFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "~4.1.2", + "commander": "^12.1.0", + "loglevel": "^1.9.2" + }, + "bin": { + "find-process": "bin/find-process.js" + } + }, + "node_modules/find-process/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/find-process/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ignore": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", + "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/inquirer": { + "version": "12.11.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.11.1.tgz", + "integrity": "sha512-9VF7mrY+3OmsAfjH3yKz/pLbJ5z22E23hENKw3/LNSaA/sAt3v49bDRY+Ygct1xwuKT+U+cBfTzjCPySna69Qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/prompts": "^7.10.1", + "@inquirer/type": "^3.0.10", + "mute-stream": "^2.0.0", + "run-async": "^4.0.6", + "rxjs": "^7.8.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/is-core-module": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loglevel": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", + "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/rage-edit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rage-edit/-/rage-edit-1.2.0.tgz", + "integrity": "sha512-0RspBRc2s6We4g7hRCvT5mu7YPEnfjvQK8Tt354a2uUNJCMC7MKLvo/1mLvHUCQ/zbP6siQyp5VRZN7UCpMFZg==", + "dev": true, + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rollup": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", + "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.62.4", + "@rollup/rollup-android-arm64": "4.62.4", + "@rollup/rollup-darwin-arm64": "4.62.4", + "@rollup/rollup-darwin-x64": "4.62.4", + "@rollup/rollup-freebsd-arm64": "4.62.4", + "@rollup/rollup-freebsd-x64": "4.62.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", + "@rollup/rollup-linux-arm-musleabihf": "4.62.4", + "@rollup/rollup-linux-arm64-gnu": "4.62.4", + "@rollup/rollup-linux-arm64-musl": "4.62.4", + "@rollup/rollup-linux-loong64-gnu": "4.62.4", + "@rollup/rollup-linux-loong64-musl": "4.62.4", + "@rollup/rollup-linux-ppc64-gnu": "4.62.4", + "@rollup/rollup-linux-ppc64-musl": "4.62.4", + "@rollup/rollup-linux-riscv64-gnu": "4.62.4", + "@rollup/rollup-linux-riscv64-musl": "4.62.4", + "@rollup/rollup-linux-s390x-gnu": "4.62.4", + "@rollup/rollup-linux-x64-gnu": "4.62.4", + "@rollup/rollup-linux-x64-musl": "4.62.4", + "@rollup/rollup-openbsd-x64": "4.62.4", + "@rollup/rollup-openharmony-arm64": "4.62.4", + "@rollup/rollup-win32-arm64-msvc": "4.62.4", + "@rollup/rollup-win32-ia32-msvc": "4.62.4", + "@rollup/rollup-win32-x64-gnu": "4.62.4", + "@rollup/rollup-win32-x64-msvc": "4.62.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-async": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", + "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/smob": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.6.2.tgz", + "integrity": "sha512-RQsvleCbF8cVHEv+xuDGaA4pOizFqJ0GgjtMSRo6oP8pnN7WsigHgVGey6aILRBKv4W2YOMHLqbKdnB6hpB9fw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/terser": { + "version": "5.50.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.50.0.tgz", + "integrity": "sha512-CN9BVxWhgS/hRxtUMjtC2uRWSTcSfQFHMDWma6sKKfIivCD91sM+FOPfvwoaRMqCSrUpe1nv3jDamd9eEQ4y+w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsx": { + "version": "4.23.12", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.12.tgz", + "integrity": "sha512-FDf4L4sYzKtzWYhU/Xm0AQFdTjdIxNo9ElTf2mxXM6k8YMHXzYUe4yODVaXP4V9uMFbVg8c0qyBccK2OOxb45Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.28.0" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ws": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", + "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yoctocolors": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.2.0.tgz", + "integrity": "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..79fd379 --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "llama-watch", + "version": "1.0.0", + "description": "Stream Deck plugin to monitor llama-swap requests and GPU metrics.", + "private": true, + "type": "module", + "scripts": { + "build": "rollup -c", + "watch": "rollup -c -w --watch.onEnd=\"streamdeck restart com.bryce.llamawatch\"", + "test": "tsx --test tests/" + }, + "devDependencies": { + "@elgato/cli": "^1.8.1", + "@rollup/plugin-commonjs": "^28.0.2", + "@rollup/plugin-node-resolve": "^16.0.0", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^12.1.2", + "@tsconfig/node20": "^20.1.4", + "@types/node": "22.13.0", + "rollup": "^4.32.1", + "tslib": "^2.8.1", + "tsx": "^4.19.2", + "typescript": "^5.7.3" + }, + "dependencies": { + "@elgato/streamdeck": "^2.1.1" + } +} diff --git a/rollup.config.mjs b/rollup.config.mjs new file mode 100644 index 0000000..d460108 --- /dev/null +++ b/rollup.config.mjs @@ -0,0 +1,40 @@ +import commonjs from "@rollup/plugin-commonjs"; +import nodeResolve from "@rollup/plugin-node-resolve"; +import terser from "@rollup/plugin-terser"; +import typescript from "@rollup/plugin-typescript"; +import path from "node:path"; +import url from "node:url"; + +const isWatching = !!process.env.ROLLUP_WATCH; +const sdPlugin = "com.bryce.llamawatch.sdPlugin"; + +const config = { + input: "src/plugin.ts", + output: { + file: `${sdPlugin}/bin/plugin.js`, + sourcemap: isWatching, + sourcemapPathTransform: (relativeSourcePath, sourcemapPath) => { + return url.pathToFileURL(path.resolve(path.dirname(sourcemapPath), relativeSourcePath)).href; + }, + }, + plugins: [ + { + name: "watch-externals", + buildStart: function () { + this.addWatchFile(`${sdPlugin}/manifest.json`); + }, + }, + typescript({ mapRoot: isWatching ? "./" : undefined }), + nodeResolve({ browser: false, exportConditions: ["node"], preferBuiltins: true }), + commonjs(), + !isWatching && terser(), + { + name: "emit-module-package-file", + generateBundle() { + this.emitFile({ fileName: "package.json", source: `{ "type": "module" }`, type: "asset" }); + }, + }, + ], +}; + +export default config; diff --git a/src/actions/gpu-graph.ts b/src/actions/gpu-graph.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/actions/gpu-graph.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/actions/inflight-monitor.ts b/src/actions/inflight-monitor.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/src/actions/inflight-monitor.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/plugin.ts b/src/plugin.ts new file mode 100644 index 0000000..cd429e8 --- /dev/null +++ b/src/plugin.ts @@ -0,0 +1,3 @@ +import streamDeck from "@elgato/streamdeck"; + +streamDeck.connect(); diff --git a/tests/.gitkeep b/tests/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..cc8cfc4 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@tsconfig/node20/tsconfig.json", + "compilerOptions": { + "customConditions": ["node"], + "noImplicitOverride": true, + "module": "ES2022", + "moduleResolution": "Bundler" + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] +}