@vee_stack/cli 6.0.12 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +216 -141
  2. package/package.json +23 -17
package/dist/index.js CHANGED
@@ -1,176 +1,251 @@
1
1
  #!/usr/bin/env node
2
- import {createRequire}from'module';import {glob}from'glob';import*as q from'fs';import {existsSync,readFileSync,statSync,writeFileSync}from'fs';import*as Ye from'path';import {join,resolve}from'path';import*as ce from'crypto';import ce__default from'crypto';import w from'chalk';import {fileURLToPath}from'url';import {Command}from'commander';import Ii from'ora';import*as st from'os';import {homedir}from'os';import*as N from'fs/promises';import so from'readline';import co from'open';import {execSync}from'child_process';import Lr from'prompts';createRequire(import.meta.url);
3
- var Mr=Object.defineProperty;var V=(t,e)=>()=>(t&&(e=t(t=0)),e);var xn=(t,e)=>{for(var n in e)Mr(t,n,{get:e[n],enumerable:true});};var ve,z,Qt,re,Ke,At,tn,nn=V(()=>{ve="6.0.6",z=ve,Qt=`vs_cli_v${ve}`,re="2.0.0",Ke="2.0.0",At="3.0",tn="v2";});var S,rn,f,se,lt=V(()=>{(function(t){t.assertEqual=s=>{};function e(s){}t.assertIs=e;function n(s){throw new Error}t.assertNever=n,t.arrayToEnum=s=>{let i={};for(let o of s)i[o]=o;return i},t.getValidEnumValues=s=>{let i=t.objectKeys(s).filter(a=>typeof s[s[a]]!="number"),o={};for(let a of i)o[a]=s[a];return t.objectValues(o)},t.objectValues=s=>t.objectKeys(s).map(function(i){return s[i]}),t.objectKeys=typeof Object.keys=="function"?s=>Object.keys(s):s=>{let i=[];for(let o in s)Object.prototype.hasOwnProperty.call(s,o)&&i.push(o);return i},t.find=(s,i)=>{for(let o of s)if(i(o))return o},t.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function r(s,i=" | "){return s.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}t.joinValues=r,t.jsonStringifyReplacer=(s,i)=>typeof i=="bigint"?i.toString():i;})(S||(S={}));(function(t){t.mergeShapes=(e,n)=>({...e,...n});})(rn||(rn={}));f=S.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),se=t=>{switch(typeof t){case "undefined":return f.undefined;case "string":return f.string;case "number":return Number.isNaN(t)?f.nan:f.number;case "boolean":return f.boolean;case "function":return f.function;case "bigint":return f.bigint;case "symbol":return f.symbol;case "object":return Array.isArray(t)?f.array:t===null?f.null:t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?f.promise:typeof Map<"u"&&t instanceof Map?f.map:typeof Set<"u"&&t instanceof Set?f.set:typeof Date<"u"&&t instanceof Date?f.date:f.object;default:return f.unknown}};});var u,zr,B,xt=V(()=>{lt();u=S.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),zr=t=>JSON.stringify(t,null,2).replace(/"([^"]+)":/g,"$1:"),B=class t extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r];},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r];};let n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=e;}format(e){let n=e||function(i){return i.message},r={_errors:[]},s=i=>{for(let o of i.issues)if(o.code==="invalid_union")o.unionErrors.map(s);else if(o.code==="invalid_return_type")s(o.returnTypeError);else if(o.code==="invalid_arguments")s(o.argumentsError);else if(o.path.length===0)r._errors.push(n(o));else {let a=r,c=0;for(;c<o.path.length;){let l=o.path[c];c===o.path.length-1?(a[l]=a[l]||{_errors:[]},a[l]._errors.push(n(o))):a[l]=a[l]||{_errors:[]},a=a[l],c++;}}};return s(this),r}static assert(e){if(!(e instanceof t))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,S.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=n=>n.message){let n={},r=[];for(let s of this.issues)if(s.path.length>0){let i=s.path[0];n[i]=n[i]||[],n[i].push(e(s));}else r.push(e(s));return {formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}};B.create=t=>new B(t);});var Wr,de,sn=V(()=>{xt();lt();Wr=(t,e)=>{let n;switch(t.code){case u.invalid_type:t.received===f.undefined?n="Required":n=`Expected ${t.expected}, received ${t.received}`;break;case u.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(t.expected,S.jsonStringifyReplacer)}`;break;case u.unrecognized_keys:n=`Unrecognized key(s) in object: ${S.joinValues(t.keys,", ")}`;break;case u.invalid_union:n="Invalid input";break;case u.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${S.joinValues(t.options)}`;break;case u.invalid_enum_value:n=`Invalid enum value. Expected ${S.joinValues(t.options)}, received '${t.received}'`;break;case u.invalid_arguments:n="Invalid function arguments";break;case u.invalid_return_type:n="Invalid function return type";break;case u.invalid_date:n="Invalid date";break;case u.invalid_string:typeof t.validation=="object"?"includes"in t.validation?(n=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${t.validation.position}`)):"startsWith"in t.validation?n=`Invalid input: must start with "${t.validation.startsWith}"`:"endsWith"in t.validation?n=`Invalid input: must end with "${t.validation.endsWith}"`:S.assertNever(t.validation):t.validation!=="regex"?n=`Invalid ${t.validation}`:n="Invalid";break;case u.too_small:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="bigint"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`:n="Invalid input";break;case u.too_big:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="bigint"?n=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`:n="Invalid input";break;case u.custom:n="Invalid input";break;case u.invalid_intersection_types:n="Intersection results could not be merged";break;case u.not_multiple_of:n=`Number must be a multiple of ${t.multipleOf}`;break;case u.not_finite:n="Number must be finite";break;default:n=e.defaultError,S.assertNever(t);}return {message:n}},de=Wr;});function Yr(t){Dn=t;}function Je(){return Dn}var Dn,Rt=V(()=>{sn();Dn=de;});function p(t,e){let n=Je(),r=ut({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,n,n===de?void 0:de].filter(s=>!!s)});t.common.issues.push(r);}var ut,Zr,D,h,Ae,j,bt,Ct,_e,qe,on=V(()=>{Rt();sn();ut=t=>{let{data:e,path:n,errorMaps:r,issueData:s}=t,i=[...n,...s.path||[]],o={...s,path:i};if(s.message!==void 0)return {...s,path:i,message:s.message};let a="",c=r.filter(l=>!!l).slice().reverse();for(let l of c)a=l(o,{data:e,defaultError:a}).message;return {...s,path:i,message:a}},Zr=[];D=class t{constructor(){this.value="valid";}dirty(){this.value==="valid"&&(this.value="dirty");}abort(){this.value!=="aborted"&&(this.value="aborted");}static mergeArray(e,n){let r=[];for(let s of n){if(s.status==="aborted")return h;s.status==="dirty"&&e.dirty(),r.push(s.value);}return {status:e.value,value:r}}static async mergeObjectAsync(e,n){let r=[];for(let s of n){let i=await s.key,o=await s.value;r.push({key:i,value:o});}return t.mergeObjectSync(e,r)}static mergeObjectSync(e,n){let r={};for(let s of n){let{key:i,value:o}=s;if(i.status==="aborted"||o.status==="aborted")return h;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||s.alwaysSet)&&(r[i.value]=o.value);}return {status:e.value,value:r}}},h=Object.freeze({status:"aborted"}),Ae=t=>({status:"dirty",value:t}),j=t=>({status:"valid",value:t}),bt=t=>t.status==="aborted",Ct=t=>t.status==="dirty",_e=t=>t.status==="valid",qe=t=>typeof Promise<"u"&&t instanceof Promise;});var Pn=V(()=>{});var g,Ln=V(()=>{(function(t){t.errToObj=e=>typeof e=="string"?{message:e}:e||{},t.toString=e=>typeof e=="string"?e:e?.message;})(g||(g={}));});function k(t){if(!t)return {};let{errorMap:e,invalid_type_error:n,required_error:r,description:s}=t;if(e&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(o,a)=>{let{message:c}=t;return o.code==="invalid_enum_value"?{message:c??a.defaultError}:typeof a.data>"u"?{message:c??r??a.defaultError}:o.code!=="invalid_type"?{message:a.defaultError}:{message:c??n??a.defaultError}},description:s}}function $n(t){let e="[0-5]\\d";t.precision?e=`${e}\\.\\d{${t.precision}}`:t.precision==null&&(e=`${e}(\\.\\d+)?`);let n=t.precision?"+":"?";return `([01]\\d|2[0-3]):[0-5]\\d(:${e})${n}`}function us(t){return new RegExp(`^${$n(t)}$`)}function Fn(t){let e=`${Mn}T${$n(t)}`,n=[];return n.push(t.local?"Z?":"Z"),t.offset&&n.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${n.join("|")})`,new RegExp(`^${e}$`)}function ds(t,e){return !!((e==="v4"||!e)&&rs.test(t)||(e==="v6"||!e)&&is.test(t))}function ps(t,e){if(!Qr.test(t))return false;try{let[n]=t.split(".");if(!n)return !1;let r=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),s=JSON.parse(atob(r));return !(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return false}}function fs(t,e){return !!((e==="v4"||!e)&&ss.test(t)||(e==="v6"||!e)&&os.test(t))}function gs(t,e){let n=(t.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,s=n>r?n:r,i=Number.parseInt(t.toFixed(s).replace(".","")),o=Number.parseInt(e.toFixed(s).replace(".",""));return i%o/10**s}function Xe(t){if(t instanceof H){let e={};for(let n in t.shape){let r=t.shape[n];e[n]=G.create(Xe(r));}return new H({...t._def,shape:()=>e})}else return t instanceof ge?new ge({...t._def,type:Xe(t.element)}):t instanceof G?G.create(Xe(t.unwrap())):t instanceof oe?oe.create(Xe(t.unwrap())):t instanceof ie?ie.create(t.items.map(e=>Xe(e))):t}function cn(t,e){let n=se(t),r=se(e);if(t===e)return {valid:true,data:t};if(n===f.object&&r===f.object){let s=S.objectKeys(e),i=S.objectKeys(t).filter(a=>s.indexOf(a)!==-1),o={...t,...e};for(let a of i){let c=cn(t[a],e[a]);if(!c.valid)return {valid:false};o[a]=c.data;}return {valid:true,data:o}}else if(n===f.array&&r===f.array){if(t.length!==e.length)return {valid:false};let s=[];for(let i=0;i<t.length;i++){let o=t[i],a=e[i],c=cn(o,a);if(!c.valid)return {valid:false};s.push(c.data);}return {valid:true,data:s}}else return n===f.date&&r===f.date&&+t==+e?{valid:true,data:t}:{valid:false}}function Vn(t,e){return new je({values:t,typeName:y.ZodEnum,...k(e)})}function Un(t,e){let n=typeof t=="function"?t(e):typeof t=="string"?{message:t}:t;return typeof n=="string"?{message:n}:n}function Bn(t,e={},n){return t?Ee.create().superRefine((r,s)=>{let i=t(r);if(i instanceof Promise)return i.then(o=>{if(!o){let a=Un(e,r),c=a.fatal??n??true;s.addIssue({code:"custom",...a,fatal:c});}});if(!i){let o=Un(e,r),a=o.fatal??n??true;s.addIssue({code:"custom",...o,fatal:a});}}):Ee.create()}var K,jn,E,Gr,Kr,Jr,qr,Xr,Qr,es,ts,ns,an,rs,ss,is,os,as,cs,Mn,ls,ke,xe,Re,be,Ce,Qe,Ie,Ne,Ee,fe,X,et,ge,H,Oe,pe,It,De,ie,Nt,tt,nt,Ot,Pe,Le,je,Ue,Se,J,G,oe,Me,$e,rt,ms,dt,pt,Fe,hs,y,ys,Hn,zn,vs,_s,Wn,ks,Es,Ss,Ts,ws,As,xs,Rs,bs,Cs,Is,Ns,Os,Ds,Ps,Ls,js,Us,Ms,$s,Fs,Vs,Bs,Hs,zs,Ws,Ys,Zs,Gs,Ks,Js,qs,Xs,Qs,Yn=V(()=>{xt();Rt();Ln();on();lt();K=class{constructor(e,n,r,s){this._cachedPath=[],this.parent=e,this.data=n,this._path=r,this._key=s;}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},jn=(t,e)=>{if(_e(e))return {success:true,data:e.value};if(!t.common.issues.length)throw new Error("Validation failed but no issues detected.");return {success:false,get error(){if(this._error)return this._error;let n=new B(t.common.issues);return this._error=n,this._error}}};E=class{get description(){return this._def.description}_getType(e){return se(e.data)}_getOrReturnCtx(e,n){return n||{common:e.parent.common,data:e.data,parsedType:se(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return {status:new D,ctx:{common:e.parent.common,data:e.data,parsedType:se(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let n=this._parse(e);if(qe(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(e){let n=this._parse(e);return Promise.resolve(n)}parse(e,n){let r=this.safeParse(e,n);if(r.success)return r.data;throw r.error}safeParse(e,n){let r={common:{issues:[],async:n?.async??false,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:se(e)},s=this._parseSync({data:e,path:r.path,parent:r});return jn(r,s)}"~validate"(e){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:se(e)};if(!this["~standard"].async)try{let r=this._parseSync({data:e,path:[],parent:n});return _e(r)?{value:r.value}:{issues:n.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=true),n.common={issues:[],async:true};}return this._parseAsync({data:e,path:[],parent:n}).then(r=>_e(r)?{value:r.value}:{issues:n.common.issues})}async parseAsync(e,n){let r=await this.safeParseAsync(e,n);if(r.success)return r.data;throw r.error}async safeParseAsync(e,n){let r={common:{issues:[],contextualErrorMap:n?.errorMap,async:true},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:se(e)},s=this._parse({data:e,path:r.path,parent:r}),i=await(qe(s)?s:Promise.resolve(s));return jn(r,i)}refine(e,n){let r=s=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(s):n;return this._refinement((s,i)=>{let o=e(s),a=()=>i.addIssue({code:u.custom,...r(s)});return typeof Promise<"u"&&o instanceof Promise?o.then(c=>c?true:(a(),false)):o?true:(a(),false)})}refinement(e,n){return this._refinement((r,s)=>e(r)?true:(s.addIssue(typeof n=="function"?n(r,s):n),false))}_refinement(e){return new J({schema:this,typeName:y.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:n=>this["~validate"](n)};}optional(){return G.create(this,this._def)}nullable(){return oe.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return ge.create(this)}promise(){return Se.create(this,this._def)}or(e){return Oe.create([this,e],this._def)}and(e){return De.create(this,e,this._def)}transform(e){return new J({...k(this._def),schema:this,typeName:y.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let n=typeof e=="function"?e:()=>e;return new Me({...k(this._def),innerType:this,defaultValue:n,typeName:y.ZodDefault})}brand(){return new dt({typeName:y.ZodBranded,type:this,...k(this._def)})}catch(e){let n=typeof e=="function"?e:()=>e;return new $e({...k(this._def),innerType:this,catchValue:n,typeName:y.ZodCatch})}describe(e){let n=this.constructor;return new n({...this._def,description:e})}pipe(e){return pt.create(this,e)}readonly(){return Fe.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Gr=/^c[^\s-]{8,}$/i,Kr=/^[0-9a-z]+$/,Jr=/^[0-9A-HJKMNP-TV-Z]{26}$/i,qr=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Xr=/^[a-z0-9_-]{21}$/i,Qr=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,es=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,ts=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,ns="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",rs=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ss=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,is=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,os=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,as=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,cs=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Mn="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",ls=new RegExp(`^${Mn}$`);ke=class t extends E{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==f.string){let i=this._getOrReturnCtx(e);return p(i,{code:u.invalid_type,expected:f.string,received:i.parsedType}),h}let r=new D,s;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(s=this._getOrReturnCtx(e,s),p(s,{code:u.too_small,minimum:i.value,type:"string",inclusive:true,exact:false,message:i.message}),r.dirty());else if(i.kind==="max")e.data.length>i.value&&(s=this._getOrReturnCtx(e,s),p(s,{code:u.too_big,maximum:i.value,type:"string",inclusive:true,exact:false,message:i.message}),r.dirty());else if(i.kind==="length"){let o=e.data.length>i.value,a=e.data.length<i.value;(o||a)&&(s=this._getOrReturnCtx(e,s),o?p(s,{code:u.too_big,maximum:i.value,type:"string",inclusive:true,exact:true,message:i.message}):a&&p(s,{code:u.too_small,minimum:i.value,type:"string",inclusive:true,exact:true,message:i.message}),r.dirty());}else if(i.kind==="email")ts.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"email",code:u.invalid_string,message:i.message}),r.dirty());else if(i.kind==="emoji")an||(an=new RegExp(ns,"u")),an.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"emoji",code:u.invalid_string,message:i.message}),r.dirty());else if(i.kind==="uuid")qr.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"uuid",code:u.invalid_string,message:i.message}),r.dirty());else if(i.kind==="nanoid")Xr.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"nanoid",code:u.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid")Gr.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"cuid",code:u.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid2")Kr.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"cuid2",code:u.invalid_string,message:i.message}),r.dirty());else if(i.kind==="ulid")Jr.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"ulid",code:u.invalid_string,message:i.message}),r.dirty());else if(i.kind==="url")try{new URL(e.data);}catch{s=this._getOrReturnCtx(e,s),p(s,{validation:"url",code:u.invalid_string,message:i.message}),r.dirty();}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"regex",code:u.invalid_string,message:i.message}),r.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(s=this._getOrReturnCtx(e,s),p(s,{code:u.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),r.dirty()):i.kind==="toLowerCase"?e.data=e.data.toLowerCase():i.kind==="toUpperCase"?e.data=e.data.toUpperCase():i.kind==="startsWith"?e.data.startsWith(i.value)||(s=this._getOrReturnCtx(e,s),p(s,{code:u.invalid_string,validation:{startsWith:i.value},message:i.message}),r.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(s=this._getOrReturnCtx(e,s),p(s,{code:u.invalid_string,validation:{endsWith:i.value},message:i.message}),r.dirty()):i.kind==="datetime"?Fn(i).test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{code:u.invalid_string,validation:"datetime",message:i.message}),r.dirty()):i.kind==="date"?ls.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{code:u.invalid_string,validation:"date",message:i.message}),r.dirty()):i.kind==="time"?us(i).test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{code:u.invalid_string,validation:"time",message:i.message}),r.dirty()):i.kind==="duration"?es.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"duration",code:u.invalid_string,message:i.message}),r.dirty()):i.kind==="ip"?ds(e.data,i.version)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"ip",code:u.invalid_string,message:i.message}),r.dirty()):i.kind==="jwt"?ps(e.data,i.alg)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"jwt",code:u.invalid_string,message:i.message}),r.dirty()):i.kind==="cidr"?fs(e.data,i.version)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"cidr",code:u.invalid_string,message:i.message}),r.dirty()):i.kind==="base64"?as.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"base64",code:u.invalid_string,message:i.message}),r.dirty()):i.kind==="base64url"?cs.test(e.data)||(s=this._getOrReturnCtx(e,s),p(s,{validation:"base64url",code:u.invalid_string,message:i.message}),r.dirty()):S.assertNever(i);return {status:r.value,value:e.data}}_regex(e,n,r){return this.refinement(s=>e.test(s),{validation:n,code:u.invalid_string,...g.errToObj(r)})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...g.errToObj(e)})}url(e){return this._addCheck({kind:"url",...g.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...g.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...g.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...g.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...g.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...g.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...g.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...g.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...g.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...g.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...g.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...g.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:false,local:false,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??false,local:e?.local??false,...g.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...g.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...g.errToObj(e)})}regex(e,n){return this._addCheck({kind:"regex",regex:e,...g.errToObj(n)})}includes(e,n){return this._addCheck({kind:"includes",value:e,position:n?.position,...g.errToObj(n?.message)})}startsWith(e,n){return this._addCheck({kind:"startsWith",value:e,...g.errToObj(n)})}endsWith(e,n){return this._addCheck({kind:"endsWith",value:e,...g.errToObj(n)})}min(e,n){return this._addCheck({kind:"min",value:e,...g.errToObj(n)})}max(e,n){return this._addCheck({kind:"max",value:e,...g.errToObj(n)})}length(e,n){return this._addCheck({kind:"length",value:e,...g.errToObj(n)})}nonempty(e){return this.min(1,g.errToObj(e))}trim(){return new t({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return !!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return !!this._def.checks.find(e=>e.kind==="date")}get isTime(){return !!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return !!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return !!this._def.checks.find(e=>e.kind==="email")}get isURL(){return !!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return !!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return !!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return !!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return !!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return !!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return !!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return !!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return !!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return !!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return !!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxLength(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};ke.create=t=>new ke({checks:[],typeName:y.ZodString,coerce:t?.coerce??false,...k(t)});xe=class t extends E{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf;}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==f.number){let i=this._getOrReturnCtx(e);return p(i,{code:u.invalid_type,expected:f.number,received:i.parsedType}),h}let r,s=new D;for(let i of this._def.checks)i.kind==="int"?S.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),p(r,{code:u.invalid_type,expected:"integer",received:"float",message:i.message}),s.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),p(r,{code:u.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:false,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(r=this._getOrReturnCtx(e,r),p(r,{code:u.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:false,message:i.message}),s.dirty()):i.kind==="multipleOf"?gs(e.data,i.value)!==0&&(r=this._getOrReturnCtx(e,r),p(r,{code:u.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),p(r,{code:u.not_finite,message:i.message}),s.dirty()):S.assertNever(i);return {status:s.value,value:e.data}}gte(e,n){return this.setLimit("min",e,true,g.toString(n))}gt(e,n){return this.setLimit("min",e,false,g.toString(n))}lte(e,n){return this.setLimit("max",e,true,g.toString(n))}lt(e,n){return this.setLimit("max",e,false,g.toString(n))}setLimit(e,n,r,s){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:g.toString(s)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:g.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:false,message:g.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:false,message:g.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:true,message:g.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:true,message:g.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:g.toString(n)})}finite(e){return this._addCheck({kind:"finite",message:g.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:true,value:Number.MIN_SAFE_INTEGER,message:g.toString(e)})._addCheck({kind:"max",inclusive:true,value:Number.MAX_SAFE_INTEGER,message:g.toString(e)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}get isInt(){return !!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&S.isInteger(e.value))}get isFinite(){let e=null,n=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return true;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value);}return Number.isFinite(n)&&Number.isFinite(e)}};xe.create=t=>new xe({checks:[],typeName:y.ZodNumber,coerce:t?.coerce||false,...k(t)});Re=class t extends E{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte;}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data);}catch{return this._getInvalidInput(e)}if(this._getType(e)!==f.bigint)return this._getInvalidInput(e);let r,s=new D;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),p(r,{code:u.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(r=this._getOrReturnCtx(e,r),p(r,{code:u.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),s.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),p(r,{code:u.not_multiple_of,multipleOf:i.value,message:i.message}),s.dirty()):S.assertNever(i);return {status:s.value,value:e.data}}_getInvalidInput(e){let n=this._getOrReturnCtx(e);return p(n,{code:u.invalid_type,expected:f.bigint,received:n.parsedType}),h}gte(e,n){return this.setLimit("min",e,true,g.toString(n))}gt(e,n){return this.setLimit("min",e,false,g.toString(n))}lte(e,n){return this.setLimit("max",e,true,g.toString(n))}lt(e,n){return this.setLimit("max",e,false,g.toString(n))}setLimit(e,n,r,s){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:g.toString(s)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:false,message:g.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:false,message:g.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:true,message:g.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:true,message:g.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:g.toString(n)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};Re.create=t=>new Re({checks:[],typeName:y.ZodBigInt,coerce:t?.coerce??false,...k(t)});be=class extends E{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==f.boolean){let r=this._getOrReturnCtx(e);return p(r,{code:u.invalid_type,expected:f.boolean,received:r.parsedType}),h}return j(e.data)}};be.create=t=>new be({typeName:y.ZodBoolean,coerce:t?.coerce||false,...k(t)});Ce=class t extends E{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==f.date){let i=this._getOrReturnCtx(e);return p(i,{code:u.invalid_type,expected:f.date,received:i.parsedType}),h}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return p(i,{code:u.invalid_date}),h}let r=new D,s;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(s=this._getOrReturnCtx(e,s),p(s,{code:u.too_small,message:i.message,inclusive:true,exact:false,minimum:i.value,type:"date"}),r.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(s=this._getOrReturnCtx(e,s),p(s,{code:u.too_big,message:i.message,inclusive:true,exact:false,maximum:i.value,type:"date"}),r.dirty()):S.assertNever(i);return {status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}min(e,n){return this._addCheck({kind:"min",value:e.getTime(),message:g.toString(n)})}max(e,n){return this._addCheck({kind:"max",value:e.getTime(),message:g.toString(n)})}get minDate(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e!=null?new Date(e):null}};Ce.create=t=>new Ce({checks:[],coerce:t?.coerce||false,typeName:y.ZodDate,...k(t)});Qe=class extends E{_parse(e){if(this._getType(e)!==f.symbol){let r=this._getOrReturnCtx(e);return p(r,{code:u.invalid_type,expected:f.symbol,received:r.parsedType}),h}return j(e.data)}};Qe.create=t=>new Qe({typeName:y.ZodSymbol,...k(t)});Ie=class extends E{_parse(e){if(this._getType(e)!==f.undefined){let r=this._getOrReturnCtx(e);return p(r,{code:u.invalid_type,expected:f.undefined,received:r.parsedType}),h}return j(e.data)}};Ie.create=t=>new Ie({typeName:y.ZodUndefined,...k(t)});Ne=class extends E{_parse(e){if(this._getType(e)!==f.null){let r=this._getOrReturnCtx(e);return p(r,{code:u.invalid_type,expected:f.null,received:r.parsedType}),h}return j(e.data)}};Ne.create=t=>new Ne({typeName:y.ZodNull,...k(t)});Ee=class extends E{constructor(){super(...arguments),this._any=true;}_parse(e){return j(e.data)}};Ee.create=t=>new Ee({typeName:y.ZodAny,...k(t)});fe=class extends E{constructor(){super(...arguments),this._unknown=true;}_parse(e){return j(e.data)}};fe.create=t=>new fe({typeName:y.ZodUnknown,...k(t)});X=class extends E{_parse(e){let n=this._getOrReturnCtx(e);return p(n,{code:u.invalid_type,expected:f.never,received:n.parsedType}),h}};X.create=t=>new X({typeName:y.ZodNever,...k(t)});et=class extends E{_parse(e){if(this._getType(e)!==f.undefined){let r=this._getOrReturnCtx(e);return p(r,{code:u.invalid_type,expected:f.void,received:r.parsedType}),h}return j(e.data)}};et.create=t=>new et({typeName:y.ZodVoid,...k(t)});ge=class t extends E{_parse(e){let{ctx:n,status:r}=this._processInputParams(e),s=this._def;if(n.parsedType!==f.array)return p(n,{code:u.invalid_type,expected:f.array,received:n.parsedType}),h;if(s.exactLength!==null){let o=n.data.length>s.exactLength.value,a=n.data.length<s.exactLength.value;(o||a)&&(p(n,{code:o?u.too_big:u.too_small,minimum:a?s.exactLength.value:void 0,maximum:o?s.exactLength.value:void 0,type:"array",inclusive:true,exact:true,message:s.exactLength.message}),r.dirty());}if(s.minLength!==null&&n.data.length<s.minLength.value&&(p(n,{code:u.too_small,minimum:s.minLength.value,type:"array",inclusive:true,exact:false,message:s.minLength.message}),r.dirty()),s.maxLength!==null&&n.data.length>s.maxLength.value&&(p(n,{code:u.too_big,maximum:s.maxLength.value,type:"array",inclusive:true,exact:false,message:s.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((o,a)=>s.type._parseAsync(new K(n,o,n.path,a)))).then(o=>D.mergeArray(r,o));let i=[...n.data].map((o,a)=>s.type._parseSync(new K(n,o,n.path,a)));return D.mergeArray(r,i)}get element(){return this._def.type}min(e,n){return new t({...this._def,minLength:{value:e,message:g.toString(n)}})}max(e,n){return new t({...this._def,maxLength:{value:e,message:g.toString(n)}})}length(e,n){return new t({...this._def,exactLength:{value:e,message:g.toString(n)}})}nonempty(e){return this.min(1,e)}};ge.create=(t,e)=>new ge({type:t,minLength:null,maxLength:null,exactLength:null,typeName:y.ZodArray,...k(e)});H=class t extends E{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend;}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),n=S.objectKeys(e);return this._cached={shape:e,keys:n},this._cached}_parse(e){if(this._getType(e)!==f.object){let l=this._getOrReturnCtx(e);return p(l,{code:u.invalid_type,expected:f.object,received:l.parsedType}),h}let{status:r,ctx:s}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),a=[];if(!(this._def.catchall instanceof X&&this._def.unknownKeys==="strip"))for(let l in s.data)o.includes(l)||a.push(l);let c=[];for(let l of o){let m=i[l],T=s.data[l];c.push({key:{status:"valid",value:l},value:m._parse(new K(s,T,s.path,l)),alwaysSet:l in s.data});}if(this._def.catchall instanceof X){let l=this._def.unknownKeys;if(l==="passthrough")for(let m of a)c.push({key:{status:"valid",value:m},value:{status:"valid",value:s.data[m]}});else if(l==="strict")a.length>0&&(p(s,{code:u.unrecognized_keys,keys:a}),r.dirty());else if(l!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else {let l=this._def.catchall;for(let m of a){let T=s.data[m];c.push({key:{status:"valid",value:m},value:l._parse(new K(s,T,s.path,m)),alwaysSet:m in s.data});}}return s.common.async?Promise.resolve().then(async()=>{let l=[];for(let m of c){let T=await m.key,C=await m.value;l.push({key:T,value:C,alwaysSet:m.alwaysSet});}return l}).then(l=>D.mergeObjectSync(r,l)):D.mergeObjectSync(r,c)}get shape(){return this._def.shape()}strict(e){return g.errToObj,new t({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(n,r)=>{let s=this._def.errorMap?.(n,r).message??r.defaultError;return n.code==="unrecognized_keys"?{message:g.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new t({...this._def,unknownKeys:"strip"})}passthrough(){return new t({...this._def,unknownKeys:"passthrough"})}extend(e){return new t({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new t({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:y.ZodObject})}setKey(e,n){return this.augment({[e]:n})}catchall(e){return new t({...this._def,catchall:e})}pick(e){let n={};for(let r of S.objectKeys(e))e[r]&&this.shape[r]&&(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}omit(e){let n={};for(let r of S.objectKeys(this.shape))e[r]||(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}deepPartial(){return Xe(this)}partial(e){let n={};for(let r of S.objectKeys(this.shape)){let s=this.shape[r];e&&!e[r]?n[r]=s:n[r]=s.optional();}return new t({...this._def,shape:()=>n})}required(e){let n={};for(let r of S.objectKeys(this.shape))if(e&&!e[r])n[r]=this.shape[r];else {let i=this.shape[r];for(;i instanceof G;)i=i._def.innerType;n[r]=i;}return new t({...this._def,shape:()=>n})}keyof(){return Vn(S.objectKeys(this.shape))}};H.create=(t,e)=>new H({shape:()=>t,unknownKeys:"strip",catchall:X.create(),typeName:y.ZodObject,...k(e)});H.strictCreate=(t,e)=>new H({shape:()=>t,unknownKeys:"strict",catchall:X.create(),typeName:y.ZodObject,...k(e)});H.lazycreate=(t,e)=>new H({shape:t,unknownKeys:"strip",catchall:X.create(),typeName:y.ZodObject,...k(e)});Oe=class extends E{_parse(e){let{ctx:n}=this._processInputParams(e),r=this._def.options;function s(i){for(let a of i)if(a.result.status==="valid")return a.result;for(let a of i)if(a.result.status==="dirty")return n.common.issues.push(...a.ctx.common.issues),a.result;let o=i.map(a=>new B(a.ctx.common.issues));return p(n,{code:u.invalid_union,unionErrors:o}),h}if(n.common.async)return Promise.all(r.map(async i=>{let o={...n,common:{...n.common,issues:[]},parent:null};return {result:await i._parseAsync({data:n.data,path:n.path,parent:o}),ctx:o}})).then(s);{let i,o=[];for(let c of r){let l={...n,common:{...n.common,issues:[]},parent:null},m=c._parseSync({data:n.data,path:n.path,parent:l});if(m.status==="valid")return m;m.status==="dirty"&&!i&&(i={result:m,ctx:l}),l.common.issues.length&&o.push(l.common.issues);}if(i)return n.common.issues.push(...i.ctx.common.issues),i.result;let a=o.map(c=>new B(c));return p(n,{code:u.invalid_union,unionErrors:a}),h}}get options(){return this._def.options}};Oe.create=(t,e)=>new Oe({options:t,typeName:y.ZodUnion,...k(e)});pe=t=>t instanceof Pe?pe(t.schema):t instanceof J?pe(t.innerType()):t instanceof Le?[t.value]:t instanceof je?t.options:t instanceof Ue?S.objectValues(t.enum):t instanceof Me?pe(t._def.innerType):t instanceof Ie?[void 0]:t instanceof Ne?[null]:t instanceof G?[void 0,...pe(t.unwrap())]:t instanceof oe?[null,...pe(t.unwrap())]:t instanceof dt||t instanceof Fe?pe(t.unwrap()):t instanceof $e?pe(t._def.innerType):[],It=class t extends E{_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==f.object)return p(n,{code:u.invalid_type,expected:f.object,received:n.parsedType}),h;let r=this.discriminator,s=n.data[r],i=this.optionsMap.get(s);return i?n.common.async?i._parseAsync({data:n.data,path:n.path,parent:n}):i._parseSync({data:n.data,path:n.path,parent:n}):(p(n,{code:u.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),h)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,n,r){let s=new Map;for(let i of n){let o=pe(i.shape[e]);if(!o.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let a of o){if(s.has(a))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(a)}`);s.set(a,i);}}return new t({typeName:y.ZodDiscriminatedUnion,discriminator:e,options:n,optionsMap:s,...k(r)})}};De=class extends E{_parse(e){let{status:n,ctx:r}=this._processInputParams(e),s=(i,o)=>{if(bt(i)||bt(o))return h;let a=cn(i.value,o.value);return a.valid?((Ct(i)||Ct(o))&&n.dirty(),{status:n.value,value:a.data}):(p(r,{code:u.invalid_intersection_types}),h)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([i,o])=>s(i,o)):s(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};De.create=(t,e,n)=>new De({left:t,right:e,typeName:y.ZodIntersection,...k(n)});ie=class t extends E{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==f.array)return p(r,{code:u.invalid_type,expected:f.array,received:r.parsedType}),h;if(r.data.length<this._def.items.length)return p(r,{code:u.too_small,minimum:this._def.items.length,inclusive:true,exact:false,type:"array"}),h;!this._def.rest&&r.data.length>this._def.items.length&&(p(r,{code:u.too_big,maximum:this._def.items.length,inclusive:true,exact:false,type:"array"}),n.dirty());let i=[...r.data].map((o,a)=>{let c=this._def.items[a]||this._def.rest;return c?c._parse(new K(r,o,r.path,a)):null}).filter(o=>!!o);return r.common.async?Promise.all(i).then(o=>D.mergeArray(n,o)):D.mergeArray(n,i)}get items(){return this._def.items}rest(e){return new t({...this._def,rest:e})}};ie.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new ie({items:t,typeName:y.ZodTuple,rest:null,...k(e)})};Nt=class t extends E{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==f.object)return p(r,{code:u.invalid_type,expected:f.object,received:r.parsedType}),h;let s=[],i=this._def.keyType,o=this._def.valueType;for(let a in r.data)s.push({key:i._parse(new K(r,a,r.path,a)),value:o._parse(new K(r,r.data[a],r.path,a)),alwaysSet:a in r.data});return r.common.async?D.mergeObjectAsync(n,s):D.mergeObjectSync(n,s)}get element(){return this._def.valueType}static create(e,n,r){return n instanceof E?new t({keyType:e,valueType:n,typeName:y.ZodRecord,...k(r)}):new t({keyType:ke.create(),valueType:e,typeName:y.ZodRecord,...k(n)})}},tt=class extends E{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==f.map)return p(r,{code:u.invalid_type,expected:f.map,received:r.parsedType}),h;let s=this._def.keyType,i=this._def.valueType,o=[...r.data.entries()].map(([a,c],l)=>({key:s._parse(new K(r,a,r.path,[l,"key"])),value:i._parse(new K(r,c,r.path,[l,"value"]))}));if(r.common.async){let a=new Map;return Promise.resolve().then(async()=>{for(let c of o){let l=await c.key,m=await c.value;if(l.status==="aborted"||m.status==="aborted")return h;(l.status==="dirty"||m.status==="dirty")&&n.dirty(),a.set(l.value,m.value);}return {status:n.value,value:a}})}else {let a=new Map;for(let c of o){let l=c.key,m=c.value;if(l.status==="aborted"||m.status==="aborted")return h;(l.status==="dirty"||m.status==="dirty")&&n.dirty(),a.set(l.value,m.value);}return {status:n.value,value:a}}}};tt.create=(t,e,n)=>new tt({valueType:e,keyType:t,typeName:y.ZodMap,...k(n)});nt=class t extends E{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==f.set)return p(r,{code:u.invalid_type,expected:f.set,received:r.parsedType}),h;let s=this._def;s.minSize!==null&&r.data.size<s.minSize.value&&(p(r,{code:u.too_small,minimum:s.minSize.value,type:"set",inclusive:true,exact:false,message:s.minSize.message}),n.dirty()),s.maxSize!==null&&r.data.size>s.maxSize.value&&(p(r,{code:u.too_big,maximum:s.maxSize.value,type:"set",inclusive:true,exact:false,message:s.maxSize.message}),n.dirty());let i=this._def.valueType;function o(c){let l=new Set;for(let m of c){if(m.status==="aborted")return h;m.status==="dirty"&&n.dirty(),l.add(m.value);}return {status:n.value,value:l}}let a=[...r.data.values()].map((c,l)=>i._parse(new K(r,c,r.path,l)));return r.common.async?Promise.all(a).then(c=>o(c)):o(a)}min(e,n){return new t({...this._def,minSize:{value:e,message:g.toString(n)}})}max(e,n){return new t({...this._def,maxSize:{value:e,message:g.toString(n)}})}size(e,n){return this.min(e,n).max(e,n)}nonempty(e){return this.min(1,e)}};nt.create=(t,e)=>new nt({valueType:t,minSize:null,maxSize:null,typeName:y.ZodSet,...k(e)});Ot=class t extends E{constructor(){super(...arguments),this.validate=this.implement;}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==f.function)return p(n,{code:u.invalid_type,expected:f.function,received:n.parsedType}),h;function r(a,c){return ut({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,Je(),de].filter(l=>!!l),issueData:{code:u.invalid_arguments,argumentsError:c}})}function s(a,c){return ut({data:a,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,Je(),de].filter(l=>!!l),issueData:{code:u.invalid_return_type,returnTypeError:c}})}let i={errorMap:n.common.contextualErrorMap},o=n.data;if(this._def.returns instanceof Se){let a=this;return j(async function(...c){let l=new B([]),m=await a._def.args.parseAsync(c,i).catch(L=>{throw l.addIssue(r(c,L)),l}),T=await Reflect.apply(o,this,m);return await a._def.returns._def.type.parseAsync(T,i).catch(L=>{throw l.addIssue(s(T,L)),l})})}else {let a=this;return j(function(...c){let l=a._def.args.safeParse(c,i);if(!l.success)throw new B([r(c,l.error)]);let m=Reflect.apply(o,this,l.data),T=a._def.returns.safeParse(m,i);if(!T.success)throw new B([s(m,T.error)]);return T.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new t({...this._def,args:ie.create(e).rest(fe.create())})}returns(e){return new t({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,n,r){return new t({args:e||ie.create([]).rest(fe.create()),returns:n||fe.create(),typeName:y.ZodFunction,...k(r)})}},Pe=class extends E{get schema(){return this._def.getter()}_parse(e){let{ctx:n}=this._processInputParams(e);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}};Pe.create=(t,e)=>new Pe({getter:t,typeName:y.ZodLazy,...k(e)});Le=class extends E{_parse(e){if(e.data!==this._def.value){let n=this._getOrReturnCtx(e);return p(n,{received:n.data,code:u.invalid_literal,expected:this._def.value}),h}return {status:"valid",value:e.data}}get value(){return this._def.value}};Le.create=(t,e)=>new Le({value:t,typeName:y.ZodLiteral,...k(e)});je=class t extends E{_parse(e){if(typeof e.data!="string"){let n=this._getOrReturnCtx(e),r=this._def.values;return p(n,{expected:S.joinValues(r),received:n.parsedType,code:u.invalid_type}),h}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let n=this._getOrReturnCtx(e),r=this._def.values;return p(n,{received:n.data,code:u.invalid_enum_value,options:r}),h}return j(e.data)}get options(){return this._def.values}get enum(){let e={};for(let n of this._def.values)e[n]=n;return e}get Values(){let e={};for(let n of this._def.values)e[n]=n;return e}get Enum(){let e={};for(let n of this._def.values)e[n]=n;return e}extract(e,n=this._def){return t.create(e,{...this._def,...n})}exclude(e,n=this._def){return t.create(this.options.filter(r=>!e.includes(r)),{...this._def,...n})}};je.create=Vn;Ue=class extends E{_parse(e){let n=S.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==f.string&&r.parsedType!==f.number){let s=S.objectValues(n);return p(r,{expected:S.joinValues(s),received:r.parsedType,code:u.invalid_type}),h}if(this._cache||(this._cache=new Set(S.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=S.objectValues(n);return p(r,{received:r.data,code:u.invalid_enum_value,options:s}),h}return j(e.data)}get enum(){return this._def.values}};Ue.create=(t,e)=>new Ue({values:t,typeName:y.ZodNativeEnum,...k(e)});Se=class extends E{unwrap(){return this._def.type}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==f.promise&&n.common.async===false)return p(n,{code:u.invalid_type,expected:f.promise,received:n.parsedType}),h;let r=n.parsedType===f.promise?n.data:Promise.resolve(n.data);return j(r.then(s=>this._def.type.parseAsync(s,{path:n.path,errorMap:n.common.contextualErrorMap})))}};Se.create=(t,e)=>new Se({type:t,typeName:y.ZodPromise,...k(e)});J=class extends E{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===y.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:n,ctx:r}=this._processInputParams(e),s=this._def.effect||null,i={addIssue:o=>{p(r,o),o.fatal?n.abort():n.dirty();},get path(){return r.path}};if(i.addIssue=i.addIssue.bind(i),s.type==="preprocess"){let o=s.transform(r.data,i);if(r.common.async)return Promise.resolve(o).then(async a=>{if(n.value==="aborted")return h;let c=await this._def.schema._parseAsync({data:a,path:r.path,parent:r});return c.status==="aborted"?h:c.status==="dirty"?Ae(c.value):n.value==="dirty"?Ae(c.value):c});{if(n.value==="aborted")return h;let a=this._def.schema._parseSync({data:o,path:r.path,parent:r});return a.status==="aborted"?h:a.status==="dirty"?Ae(a.value):n.value==="dirty"?Ae(a.value):a}}if(s.type==="refinement"){let o=a=>{let c=s.refinement(a,i);if(r.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return a};if(r.common.async===false){let a=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?h:(a.status==="dirty"&&n.dirty(),o(a.value),{status:n.value,value:a.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(a=>a.status==="aborted"?h:(a.status==="dirty"&&n.dirty(),o(a.value).then(()=>({status:n.value,value:a.value}))))}if(s.type==="transform")if(r.common.async===false){let o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!_e(o))return h;let a=s.transform(o.value,i);if(a instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return {status:n.value,value:a}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>_e(o)?Promise.resolve(s.transform(o.value,i)).then(a=>({status:n.value,value:a})):h);S.assertNever(s);}};J.create=(t,e,n)=>new J({schema:t,typeName:y.ZodEffects,effect:e,...k(n)});J.createWithPreprocess=(t,e,n)=>new J({schema:e,effect:{type:"preprocess",transform:t},typeName:y.ZodEffects,...k(n)});G=class extends E{_parse(e){return this._getType(e)===f.undefined?j(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};G.create=(t,e)=>new G({innerType:t,typeName:y.ZodOptional,...k(e)});oe=class extends E{_parse(e){return this._getType(e)===f.null?j(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};oe.create=(t,e)=>new oe({innerType:t,typeName:y.ZodNullable,...k(e)});Me=class extends E{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return n.parsedType===f.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}};Me.create=(t,e)=>new Me({innerType:t,typeName:y.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...k(e)});$e=class extends E{_parse(e){let{ctx:n}=this._processInputParams(e),r={...n,common:{...n.common,issues:[]}},s=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return qe(s)?s.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new B(r.common.issues)},input:r.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new B(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};$e.create=(t,e)=>new $e({innerType:t,typeName:y.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...k(e)});rt=class extends E{_parse(e){if(this._getType(e)!==f.nan){let r=this._getOrReturnCtx(e);return p(r,{code:u.invalid_type,expected:f.nan,received:r.parsedType}),h}return {status:"valid",value:e.data}}};rt.create=t=>new rt({typeName:y.ZodNaN,...k(t)});ms=Symbol("zod_brand"),dt=class extends E{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}},pt=class t extends E{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.common.async)return (async()=>{let i=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?h:i.status==="dirty"?(n.dirty(),Ae(i.value)):this._def.out._parseAsync({data:i.value,path:r.path,parent:r})})();{let s=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?h:s.status==="dirty"?(n.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:r.path,parent:r})}}static create(e,n){return new t({in:e,out:n,typeName:y.ZodPipeline})}},Fe=class extends E{_parse(e){let n=this._def.innerType._parse(e),r=s=>(_e(s)&&(s.value=Object.freeze(s.value)),s);return qe(n)?n.then(s=>r(s)):r(n)}unwrap(){return this._def.innerType}};Fe.create=(t,e)=>new Fe({innerType:t,typeName:y.ZodReadonly,...k(e)});hs={object:H.lazycreate};(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly";})(y||(y={}));ys=(t,e={message:`Input not instance of ${t.name}`})=>Bn(n=>n instanceof t,e),Hn=ke.create,zn=xe.create,vs=rt.create,_s=Re.create,Wn=be.create,ks=Ce.create,Es=Qe.create,Ss=Ie.create,Ts=Ne.create,ws=Ee.create,As=fe.create,xs=X.create,Rs=et.create,bs=ge.create,Cs=H.create,Is=H.strictCreate,Ns=Oe.create,Os=It.create,Ds=De.create,Ps=ie.create,Ls=Nt.create,js=tt.create,Us=nt.create,Ms=Ot.create,$s=Pe.create,Fs=Le.create,Vs=je.create,Bs=Ue.create,Hs=Se.create,zs=J.create,Ws=G.create,Ys=oe.create,Zs=J.createWithPreprocess,Gs=pt.create,Ks=()=>Hn().optional(),Js=()=>zn().optional(),qs=()=>Wn().optional(),Xs={string:(t=>ke.create({...t,coerce:true})),number:(t=>xe.create({...t,coerce:true})),boolean:(t=>be.create({...t,coerce:true})),bigint:(t=>Re.create({...t,coerce:true})),date:(t=>Ce.create({...t,coerce:true}))},Qs=h;});var d={};xn(d,{BRAND:()=>ms,DIRTY:()=>Ae,EMPTY_PATH:()=>Zr,INVALID:()=>h,NEVER:()=>Qs,OK:()=>j,ParseStatus:()=>D,Schema:()=>E,ZodAny:()=>Ee,ZodArray:()=>ge,ZodBigInt:()=>Re,ZodBoolean:()=>be,ZodBranded:()=>dt,ZodCatch:()=>$e,ZodDate:()=>Ce,ZodDefault:()=>Me,ZodDiscriminatedUnion:()=>It,ZodEffects:()=>J,ZodEnum:()=>je,ZodError:()=>B,ZodFirstPartyTypeKind:()=>y,ZodFunction:()=>Ot,ZodIntersection:()=>De,ZodIssueCode:()=>u,ZodLazy:()=>Pe,ZodLiteral:()=>Le,ZodMap:()=>tt,ZodNaN:()=>rt,ZodNativeEnum:()=>Ue,ZodNever:()=>X,ZodNull:()=>Ne,ZodNullable:()=>oe,ZodNumber:()=>xe,ZodObject:()=>H,ZodOptional:()=>G,ZodParsedType:()=>f,ZodPipeline:()=>pt,ZodPromise:()=>Se,ZodReadonly:()=>Fe,ZodRecord:()=>Nt,ZodSchema:()=>E,ZodSet:()=>nt,ZodString:()=>ke,ZodSymbol:()=>Qe,ZodTransformer:()=>J,ZodTuple:()=>ie,ZodType:()=>E,ZodUndefined:()=>Ie,ZodUnion:()=>Oe,ZodUnknown:()=>fe,ZodVoid:()=>et,addIssueToContext:()=>p,any:()=>ws,array:()=>bs,bigint:()=>_s,boolean:()=>Wn,coerce:()=>Xs,custom:()=>Bn,date:()=>ks,datetimeRegex:()=>Fn,defaultErrorMap:()=>de,discriminatedUnion:()=>Os,effect:()=>zs,enum:()=>Vs,function:()=>Ms,getErrorMap:()=>Je,getParsedType:()=>se,instanceof:()=>ys,intersection:()=>Ds,isAborted:()=>bt,isAsync:()=>qe,isDirty:()=>Ct,isValid:()=>_e,late:()=>hs,lazy:()=>$s,literal:()=>Fs,makeIssue:()=>ut,map:()=>js,nan:()=>vs,nativeEnum:()=>Bs,never:()=>xs,null:()=>Ts,nullable:()=>Ys,number:()=>zn,object:()=>Cs,objectUtil:()=>rn,oboolean:()=>qs,onumber:()=>Js,optional:()=>Ws,ostring:()=>Ks,pipeline:()=>Gs,preprocess:()=>Zs,promise:()=>Hs,quotelessJson:()=>zr,record:()=>Ls,set:()=>Us,setErrorMap:()=>Yr,strictObject:()=>Is,string:()=>Hn,symbol:()=>Es,transformer:()=>zs,tuple:()=>Ps,undefined:()=>Ss,union:()=>Ns,unknown:()=>As,util:()=>S,void:()=>Rs});var ln=V(()=>{Rt();on();Pn();lt();Yn();xt();});var Zn=V(()=>{ln();ln();});function ni(){try{return ti.parse(process.env)}catch(t){if(t instanceof d.ZodError){let e=t.errors.map(n=>n.path.join(".")).join(", ");throw new Error(`Environment validation failed:
2
+ import {createRequire}from'module';import {glob}from'glob';import*as te from'fs';import {existsSync,readFileSync,writeFileSync,statSync}from'fs';import*as Ge from'path';import {join,resolve}from'path';import*as le from'crypto';import le__default from'crypto';import y from'chalk';import {fileURLToPath}from'url';import {Command}from'commander';import Bo from'ora';import Ho from'cli-progress';import zo from'cli-table3';import*as ot from'os';import {homedir}from'os';import*as U from'fs/promises';import _i from'readline';import wi from'open';import {execSync}from'child_process';import Gr from'prompts';import va from'omelette';createRequire(import.meta.url);
3
+ var Jr=Object.defineProperty;var G=(t,e)=>()=>(t&&(e=t(t=0)),e);var $n=(t,e)=>{for(var n in e)Jr(t,n,{get:e[n],enumerable:true});};var ye,H,cn,oe,Ke,Dt,un,dn=G(()=>{ye="6.0.13",H=ye,cn=`vs_cli_v${ye}`,oe="2.0.0",Ke="2.0.0",Dt="3.0",un="v2";});var A,pn,g,ie,gt=G(()=>{(function(t){t.assertEqual=s=>{};function e(s){}t.assertIs=e;function n(s){throw new Error}t.assertNever=n,t.arrayToEnum=s=>{let o={};for(let a of s)o[a]=a;return o},t.getValidEnumValues=s=>{let o=t.objectKeys(s).filter(i=>typeof s[s[i]]!="number"),a={};for(let i of o)a[i]=s[i];return t.objectValues(a)},t.objectValues=s=>t.objectKeys(s).map(function(o){return s[o]}),t.objectKeys=typeof Object.keys=="function"?s=>Object.keys(s):s=>{let o=[];for(let a in s)Object.prototype.hasOwnProperty.call(s,a)&&o.push(a);return o},t.find=(s,o)=>{for(let a of s)if(o(a))return a},t.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function r(s,o=" | "){return s.map(a=>typeof a=="string"?`'${a}'`:a).join(o)}t.joinValues=r,t.jsonStringifyReplacer=(s,o)=>typeof o=="bigint"?o.toString():o;})(A||(A={}));(function(t){t.mergeShapes=(e,n)=>({...e,...n});})(pn||(pn={}));g=A.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),ie=t=>{switch(typeof t){case "undefined":return g.undefined;case "string":return g.string;case "number":return Number.isNaN(t)?g.nan:g.number;case "boolean":return g.boolean;case "function":return g.function;case "bigint":return g.bigint;case "symbol":return g.symbol;case "object":return Array.isArray(t)?g.array:t===null?g.null:t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?g.promise:typeof Map<"u"&&t instanceof Map?g.map:typeof Set<"u"&&t instanceof Set?g.set:typeof Date<"u"&&t instanceof Date?g.date:g.object;default:return g.unknown}};});var u,ts,Y,Pt=G(()=>{gt();u=A.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),ts=t=>JSON.stringify(t,null,2).replace(/"([^"]+)":/g,"$1:"),Y=class t extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r];},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r];};let n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=e;}format(e){let n=e||function(o){return o.message},r={_errors:[]},s=o=>{for(let a of o.issues)if(a.code==="invalid_union")a.unionErrors.map(s);else if(a.code==="invalid_return_type")s(a.returnTypeError);else if(a.code==="invalid_arguments")s(a.argumentsError);else if(a.path.length===0)r._errors.push(n(a));else {let i=r,c=0;for(;c<a.path.length;){let l=a.path[c];c===a.path.length-1?(i[l]=i[l]||{_errors:[]},i[l]._errors.push(n(a))):i[l]=i[l]||{_errors:[]},i=i[l],c++;}}};return s(this),r}static assert(e){if(!(e instanceof t))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,A.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=n=>n.message){let n={},r=[];for(let s of this.issues)if(s.path.length>0){let o=s.path[0];n[o]=n[o]||[],n[o].push(e(s));}else r.push(e(s));return {formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}};Y.create=t=>new Y(t);});var ns,ue,fn=G(()=>{Pt();gt();ns=(t,e)=>{let n;switch(t.code){case u.invalid_type:t.received===g.undefined?n="Required":n=`Expected ${t.expected}, received ${t.received}`;break;case u.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(t.expected,A.jsonStringifyReplacer)}`;break;case u.unrecognized_keys:n=`Unrecognized key(s) in object: ${A.joinValues(t.keys,", ")}`;break;case u.invalid_union:n="Invalid input";break;case u.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${A.joinValues(t.options)}`;break;case u.invalid_enum_value:n=`Invalid enum value. Expected ${A.joinValues(t.options)}, received '${t.received}'`;break;case u.invalid_arguments:n="Invalid function arguments";break;case u.invalid_return_type:n="Invalid function return type";break;case u.invalid_date:n="Invalid date";break;case u.invalid_string:typeof t.validation=="object"?"includes"in t.validation?(n=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${t.validation.position}`)):"startsWith"in t.validation?n=`Invalid input: must start with "${t.validation.startsWith}"`:"endsWith"in t.validation?n=`Invalid input: must end with "${t.validation.endsWith}"`:A.assertNever(t.validation):t.validation!=="regex"?n=`Invalid ${t.validation}`:n="Invalid";break;case u.too_small:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="bigint"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`:n="Invalid input";break;case u.too_big:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="bigint"?n=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`:n="Invalid input";break;case u.custom:n="Invalid input";break;case u.invalid_intersection_types:n="Intersection results could not be merged";break;case u.not_multiple_of:n=`Number must be a multiple of ${t.multipleOf}`;break;case u.not_finite:n="Number must be finite";break;default:n=e.defaultError,A.assertNever(t);}return {message:n}},ue=ns;});function rs(t){Wn=t;}function qe(){return Wn}var Wn,Lt=G(()=>{fn();Wn=ue;});function f(t,e){let n=qe(),r=mt({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,n,n===ue?void 0:ue].filter(s=>!!s)});t.common.issues.push(r);}var mt,ss,M,h,Ae,V,jt,Ut,ve,Xe,gn=G(()=>{Lt();fn();mt=t=>{let{data:e,path:n,errorMaps:r,issueData:s}=t,o=[...n,...s.path||[]],a={...s,path:o};if(s.message!==void 0)return {...s,path:o,message:s.message};let i="",c=r.filter(l=>!!l).slice().reverse();for(let l of c)i=l(a,{data:e,defaultError:i}).message;return {...s,path:o,message:i}},ss=[];M=class t{constructor(){this.value="valid";}dirty(){this.value==="valid"&&(this.value="dirty");}abort(){this.value!=="aborted"&&(this.value="aborted");}static mergeArray(e,n){let r=[];for(let s of n){if(s.status==="aborted")return h;s.status==="dirty"&&e.dirty(),r.push(s.value);}return {status:e.value,value:r}}static async mergeObjectAsync(e,n){let r=[];for(let s of n){let o=await s.key,a=await s.value;r.push({key:o,value:a});}return t.mergeObjectSync(e,r)}static mergeObjectSync(e,n){let r={};for(let s of n){let{key:o,value:a}=s;if(o.status==="aborted"||a.status==="aborted")return h;o.status==="dirty"&&e.dirty(),a.status==="dirty"&&e.dirty(),o.value!=="__proto__"&&(typeof a.value<"u"||s.alwaysSet)&&(r[o.value]=a.value);}return {status:e.value,value:r}}},h=Object.freeze({status:"aborted"}),Ae=t=>({status:"dirty",value:t}),V=t=>({status:"valid",value:t}),jt=t=>t.status==="aborted",Ut=t=>t.status==="dirty",ve=t=>t.status==="valid",Xe=t=>typeof Promise<"u"&&t instanceof Promise;});var Gn=G(()=>{});var m,Yn=G(()=>{(function(t){t.errToObj=e=>typeof e=="string"?{message:e}:e||{},t.toString=e=>typeof e=="string"?e:e?.message;})(m||(m={}));});function S(t){if(!t)return {};let{errorMap:e,invalid_type_error:n,required_error:r,description:s}=t;if(e&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:s}:{errorMap:(a,i)=>{let{message:c}=t;return a.code==="invalid_enum_value"?{message:c??i.defaultError}:typeof i.data>"u"?{message:c??r??i.defaultError}:a.code!=="invalid_type"?{message:i.defaultError}:{message:c??n??i.defaultError}},description:s}}function qn(t){let e="[0-5]\\d";t.precision?e=`${e}\\.\\d{${t.precision}}`:t.precision==null&&(e=`${e}(\\.\\d+)?`);let n=t.precision?"+":"?";return `([01]\\d|2[0-3]):[0-5]\\d(:${e})${n}`}function Es(t){return new RegExp(`^${qn(t)}$`)}function Xn(t){let e=`${Kn}T${qn(t)}`,n=[];return n.push(t.local?"Z?":"Z"),t.offset&&n.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${n.join("|")})`,new RegExp(`^${e}$`)}function Ss(t,e){return !!((e==="v4"||!e)&&gs.test(t)||(e==="v6"||!e)&&hs.test(t))}function ws(t,e){if(!us.test(t))return false;try{let[n]=t.split(".");if(!n)return !1;let r=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),s=JSON.parse(atob(r));return !(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||e&&s.alg!==e)}catch{return false}}function Ts(t,e){return !!((e==="v4"||!e)&&ms.test(t)||(e==="v6"||!e)&&ys.test(t))}function As(t,e){let n=(t.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,s=n>r?n:r,o=Number.parseInt(t.toFixed(s).replace(".","")),a=Number.parseInt(e.toFixed(s).replace(".",""));return o%a/10**s}function Qe(t){if(t instanceof Z){let e={};for(let n in t.shape){let r=t.shape[n];e[n]=X.create(Qe(r));}return new Z({...t._def,shape:()=>e})}else return t instanceof fe?new fe({...t._def,type:Qe(t.element)}):t instanceof X?X.create(Qe(t.unwrap())):t instanceof ce?ce.create(Qe(t.unwrap())):t instanceof ae?ae.create(t.items.map(e=>Qe(e))):t}function hn(t,e){let n=ie(t),r=ie(e);if(t===e)return {valid:true,data:t};if(n===g.object&&r===g.object){let s=A.objectKeys(e),o=A.objectKeys(t).filter(i=>s.indexOf(i)!==-1),a={...t,...e};for(let i of o){let c=hn(t[i],e[i]);if(!c.valid)return {valid:false};a[i]=c.data;}return {valid:true,data:a}}else if(n===g.array&&r===g.array){if(t.length!==e.length)return {valid:false};let s=[];for(let o=0;o<t.length;o++){let a=t[o],i=e[o],c=hn(a,i);if(!c.valid)return {valid:false};s.push(c.data);}return {valid:true,data:s}}else return n===g.date&&r===g.date&&+t==+e?{valid:true,data:t}:{valid:false}}function Qn(t,e){return new je({values:t,typeName:v.ZodEnum,...S(e)})}function Jn(t,e){let n=typeof t=="function"?t(e):typeof t=="string"?{message:t}:t;return typeof n=="string"?{message:n}:n}function er(t,e={},n){return t?ke.create().superRefine((r,s)=>{let o=t(r);if(o instanceof Promise)return o.then(a=>{if(!a){let i=Jn(e,r),c=i.fatal??n??true;s.addIssue({code:"custom",...i,fatal:c});}});if(!o){let a=Jn(e,r),i=a.fatal??n??true;s.addIssue({code:"custom",...a,fatal:i});}}):ke.create()}var Q,Zn,w,os,is,as,cs,ls,us,ds,ps,fs,mn,gs,ms,hs,ys,vs,_s,Kn,ks,_e,xe,Re,be,Ce,et,Ie,Ne,ke,pe,ne,tt,fe,Z,Oe,de,$t,De,ae,Mt,nt,rt,Ft,Pe,Le,je,Ue,Ee,ee,X,ce,$e,Me,st,xs,ht,yt,Fe,Rs,v,bs,tr,nr,Cs,Is,rr,Ns,Os,Ds,Ps,Ls,js,Us,$s,Ms,Fs,Vs,Bs,Hs,zs,Ws,Gs,Ys,Zs,Js,Ks,qs,Xs,Qs,eo,to,no,ro,so,oo,io,ao,co,lo,uo,sr=G(()=>{Pt();Lt();Yn();gn();gt();Q=class{constructor(e,n,r,s){this._cachedPath=[],this.parent=e,this.data=n,this._path=r,this._key=s;}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Zn=(t,e)=>{if(ve(e))return {success:true,data:e.value};if(!t.common.issues.length)throw new Error("Validation failed but no issues detected.");return {success:false,get error(){if(this._error)return this._error;let n=new Y(t.common.issues);return this._error=n,this._error}}};w=class{get description(){return this._def.description}_getType(e){return ie(e.data)}_getOrReturnCtx(e,n){return n||{common:e.parent.common,data:e.data,parsedType:ie(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return {status:new M,ctx:{common:e.parent.common,data:e.data,parsedType:ie(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let n=this._parse(e);if(Xe(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(e){let n=this._parse(e);return Promise.resolve(n)}parse(e,n){let r=this.safeParse(e,n);if(r.success)return r.data;throw r.error}safeParse(e,n){let r={common:{issues:[],async:n?.async??false,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:ie(e)},s=this._parseSync({data:e,path:r.path,parent:r});return Zn(r,s)}"~validate"(e){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:ie(e)};if(!this["~standard"].async)try{let r=this._parseSync({data:e,path:[],parent:n});return ve(r)?{value:r.value}:{issues:n.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=true),n.common={issues:[],async:true};}return this._parseAsync({data:e,path:[],parent:n}).then(r=>ve(r)?{value:r.value}:{issues:n.common.issues})}async parseAsync(e,n){let r=await this.safeParseAsync(e,n);if(r.success)return r.data;throw r.error}async safeParseAsync(e,n){let r={common:{issues:[],contextualErrorMap:n?.errorMap,async:true},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:ie(e)},s=this._parse({data:e,path:r.path,parent:r}),o=await(Xe(s)?s:Promise.resolve(s));return Zn(r,o)}refine(e,n){let r=s=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(s):n;return this._refinement((s,o)=>{let a=e(s),i=()=>o.addIssue({code:u.custom,...r(s)});return typeof Promise<"u"&&a instanceof Promise?a.then(c=>c?true:(i(),false)):a?true:(i(),false)})}refinement(e,n){return this._refinement((r,s)=>e(r)?true:(s.addIssue(typeof n=="function"?n(r,s):n),false))}_refinement(e){return new ee({schema:this,typeName:v.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:n=>this["~validate"](n)};}optional(){return X.create(this,this._def)}nullable(){return ce.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return fe.create(this)}promise(){return Ee.create(this,this._def)}or(e){return Oe.create([this,e],this._def)}and(e){return De.create(this,e,this._def)}transform(e){return new ee({...S(this._def),schema:this,typeName:v.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let n=typeof e=="function"?e:()=>e;return new $e({...S(this._def),innerType:this,defaultValue:n,typeName:v.ZodDefault})}brand(){return new ht({typeName:v.ZodBranded,type:this,...S(this._def)})}catch(e){let n=typeof e=="function"?e:()=>e;return new Me({...S(this._def),innerType:this,catchValue:n,typeName:v.ZodCatch})}describe(e){let n=this.constructor;return new n({...this._def,description:e})}pipe(e){return yt.create(this,e)}readonly(){return Fe.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},os=/^c[^\s-]{8,}$/i,is=/^[0-9a-z]+$/,as=/^[0-9A-HJKMNP-TV-Z]{26}$/i,cs=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,ls=/^[a-z0-9_-]{21}$/i,us=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,ds=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,ps=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,fs="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",gs=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ms=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,hs=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,ys=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,vs=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,_s=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Kn="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",ks=new RegExp(`^${Kn}$`);_e=class t extends w{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==g.string){let o=this._getOrReturnCtx(e);return f(o,{code:u.invalid_type,expected:g.string,received:o.parsedType}),h}let r=new M,s;for(let o of this._def.checks)if(o.kind==="min")e.data.length<o.value&&(s=this._getOrReturnCtx(e,s),f(s,{code:u.too_small,minimum:o.value,type:"string",inclusive:true,exact:false,message:o.message}),r.dirty());else if(o.kind==="max")e.data.length>o.value&&(s=this._getOrReturnCtx(e,s),f(s,{code:u.too_big,maximum:o.value,type:"string",inclusive:true,exact:false,message:o.message}),r.dirty());else if(o.kind==="length"){let a=e.data.length>o.value,i=e.data.length<o.value;(a||i)&&(s=this._getOrReturnCtx(e,s),a?f(s,{code:u.too_big,maximum:o.value,type:"string",inclusive:true,exact:true,message:o.message}):i&&f(s,{code:u.too_small,minimum:o.value,type:"string",inclusive:true,exact:true,message:o.message}),r.dirty());}else if(o.kind==="email")ps.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"email",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="emoji")mn||(mn=new RegExp(fs,"u")),mn.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"emoji",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="uuid")cs.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"uuid",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="nanoid")ls.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"nanoid",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="cuid")os.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"cuid",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="cuid2")is.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"cuid2",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="ulid")as.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"ulid",code:u.invalid_string,message:o.message}),r.dirty());else if(o.kind==="url")try{new URL(e.data);}catch{s=this._getOrReturnCtx(e,s),f(s,{validation:"url",code:u.invalid_string,message:o.message}),r.dirty();}else o.kind==="regex"?(o.regex.lastIndex=0,o.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"regex",code:u.invalid_string,message:o.message}),r.dirty())):o.kind==="trim"?e.data=e.data.trim():o.kind==="includes"?e.data.includes(o.value,o.position)||(s=this._getOrReturnCtx(e,s),f(s,{code:u.invalid_string,validation:{includes:o.value,position:o.position},message:o.message}),r.dirty()):o.kind==="toLowerCase"?e.data=e.data.toLowerCase():o.kind==="toUpperCase"?e.data=e.data.toUpperCase():o.kind==="startsWith"?e.data.startsWith(o.value)||(s=this._getOrReturnCtx(e,s),f(s,{code:u.invalid_string,validation:{startsWith:o.value},message:o.message}),r.dirty()):o.kind==="endsWith"?e.data.endsWith(o.value)||(s=this._getOrReturnCtx(e,s),f(s,{code:u.invalid_string,validation:{endsWith:o.value},message:o.message}),r.dirty()):o.kind==="datetime"?Xn(o).test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{code:u.invalid_string,validation:"datetime",message:o.message}),r.dirty()):o.kind==="date"?ks.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{code:u.invalid_string,validation:"date",message:o.message}),r.dirty()):o.kind==="time"?Es(o).test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{code:u.invalid_string,validation:"time",message:o.message}),r.dirty()):o.kind==="duration"?ds.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"duration",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="ip"?Ss(e.data,o.version)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"ip",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="jwt"?ws(e.data,o.alg)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"jwt",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="cidr"?Ts(e.data,o.version)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"cidr",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="base64"?vs.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"base64",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="base64url"?_s.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"base64url",code:u.invalid_string,message:o.message}),r.dirty()):A.assertNever(o);return {status:r.value,value:e.data}}_regex(e,n,r){return this.refinement(s=>e.test(s),{validation:n,code:u.invalid_string,...m.errToObj(r)})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...m.errToObj(e)})}url(e){return this._addCheck({kind:"url",...m.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...m.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...m.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...m.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...m.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...m.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...m.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...m.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...m.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...m.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...m.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...m.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:false,local:false,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??false,local:e?.local??false,...m.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...m.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...m.errToObj(e)})}regex(e,n){return this._addCheck({kind:"regex",regex:e,...m.errToObj(n)})}includes(e,n){return this._addCheck({kind:"includes",value:e,position:n?.position,...m.errToObj(n?.message)})}startsWith(e,n){return this._addCheck({kind:"startsWith",value:e,...m.errToObj(n)})}endsWith(e,n){return this._addCheck({kind:"endsWith",value:e,...m.errToObj(n)})}min(e,n){return this._addCheck({kind:"min",value:e,...m.errToObj(n)})}max(e,n){return this._addCheck({kind:"max",value:e,...m.errToObj(n)})}length(e,n){return this._addCheck({kind:"length",value:e,...m.errToObj(n)})}nonempty(e){return this.min(1,m.errToObj(e))}trim(){return new t({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return !!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return !!this._def.checks.find(e=>e.kind==="date")}get isTime(){return !!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return !!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return !!this._def.checks.find(e=>e.kind==="email")}get isURL(){return !!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return !!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return !!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return !!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return !!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return !!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return !!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return !!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return !!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return !!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return !!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxLength(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};_e.create=t=>new _e({checks:[],typeName:v.ZodString,coerce:t?.coerce??false,...S(t)});xe=class t extends w{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf;}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==g.number){let o=this._getOrReturnCtx(e);return f(o,{code:u.invalid_type,expected:g.number,received:o.parsedType}),h}let r,s=new M;for(let o of this._def.checks)o.kind==="int"?A.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),f(r,{code:u.invalid_type,expected:"integer",received:"float",message:o.message}),s.dirty()):o.kind==="min"?(o.inclusive?e.data<o.value:e.data<=o.value)&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.too_small,minimum:o.value,type:"number",inclusive:o.inclusive,exact:false,message:o.message}),s.dirty()):o.kind==="max"?(o.inclusive?e.data>o.value:e.data>=o.value)&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.too_big,maximum:o.value,type:"number",inclusive:o.inclusive,exact:false,message:o.message}),s.dirty()):o.kind==="multipleOf"?As(e.data,o.value)!==0&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.not_multiple_of,multipleOf:o.value,message:o.message}),s.dirty()):o.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),f(r,{code:u.not_finite,message:o.message}),s.dirty()):A.assertNever(o);return {status:s.value,value:e.data}}gte(e,n){return this.setLimit("min",e,true,m.toString(n))}gt(e,n){return this.setLimit("min",e,false,m.toString(n))}lte(e,n){return this.setLimit("max",e,true,m.toString(n))}lt(e,n){return this.setLimit("max",e,false,m.toString(n))}setLimit(e,n,r,s){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:m.toString(s)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:m.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:false,message:m.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:false,message:m.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:true,message:m.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:true,message:m.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:m.toString(n)})}finite(e){return this._addCheck({kind:"finite",message:m.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:true,value:Number.MIN_SAFE_INTEGER,message:m.toString(e)})._addCheck({kind:"max",inclusive:true,value:Number.MAX_SAFE_INTEGER,message:m.toString(e)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}get isInt(){return !!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&A.isInteger(e.value))}get isFinite(){let e=null,n=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return true;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value);}return Number.isFinite(n)&&Number.isFinite(e)}};xe.create=t=>new xe({checks:[],typeName:v.ZodNumber,coerce:t?.coerce||false,...S(t)});Re=class t extends w{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte;}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data);}catch{return this._getInvalidInput(e)}if(this._getType(e)!==g.bigint)return this._getInvalidInput(e);let r,s=new M;for(let o of this._def.checks)o.kind==="min"?(o.inclusive?e.data<o.value:e.data<=o.value)&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.too_small,type:"bigint",minimum:o.value,inclusive:o.inclusive,message:o.message}),s.dirty()):o.kind==="max"?(o.inclusive?e.data>o.value:e.data>=o.value)&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.too_big,type:"bigint",maximum:o.value,inclusive:o.inclusive,message:o.message}),s.dirty()):o.kind==="multipleOf"?e.data%o.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.not_multiple_of,multipleOf:o.value,message:o.message}),s.dirty()):A.assertNever(o);return {status:s.value,value:e.data}}_getInvalidInput(e){let n=this._getOrReturnCtx(e);return f(n,{code:u.invalid_type,expected:g.bigint,received:n.parsedType}),h}gte(e,n){return this.setLimit("min",e,true,m.toString(n))}gt(e,n){return this.setLimit("min",e,false,m.toString(n))}lte(e,n){return this.setLimit("max",e,true,m.toString(n))}lt(e,n){return this.setLimit("max",e,false,m.toString(n))}setLimit(e,n,r,s){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:m.toString(s)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:false,message:m.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:false,message:m.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:true,message:m.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:true,message:m.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:m.toString(n)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};Re.create=t=>new Re({checks:[],typeName:v.ZodBigInt,coerce:t?.coerce??false,...S(t)});be=class extends w{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==g.boolean){let r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:g.boolean,received:r.parsedType}),h}return V(e.data)}};be.create=t=>new be({typeName:v.ZodBoolean,coerce:t?.coerce||false,...S(t)});Ce=class t extends w{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==g.date){let o=this._getOrReturnCtx(e);return f(o,{code:u.invalid_type,expected:g.date,received:o.parsedType}),h}if(Number.isNaN(e.data.getTime())){let o=this._getOrReturnCtx(e);return f(o,{code:u.invalid_date}),h}let r=new M,s;for(let o of this._def.checks)o.kind==="min"?e.data.getTime()<o.value&&(s=this._getOrReturnCtx(e,s),f(s,{code:u.too_small,message:o.message,inclusive:true,exact:false,minimum:o.value,type:"date"}),r.dirty()):o.kind==="max"?e.data.getTime()>o.value&&(s=this._getOrReturnCtx(e,s),f(s,{code:u.too_big,message:o.message,inclusive:true,exact:false,maximum:o.value,type:"date"}),r.dirty()):A.assertNever(o);return {status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}min(e,n){return this._addCheck({kind:"min",value:e.getTime(),message:m.toString(n)})}max(e,n){return this._addCheck({kind:"max",value:e.getTime(),message:m.toString(n)})}get minDate(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e!=null?new Date(e):null}};Ce.create=t=>new Ce({checks:[],coerce:t?.coerce||false,typeName:v.ZodDate,...S(t)});et=class extends w{_parse(e){if(this._getType(e)!==g.symbol){let r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:g.symbol,received:r.parsedType}),h}return V(e.data)}};et.create=t=>new et({typeName:v.ZodSymbol,...S(t)});Ie=class extends w{_parse(e){if(this._getType(e)!==g.undefined){let r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:g.undefined,received:r.parsedType}),h}return V(e.data)}};Ie.create=t=>new Ie({typeName:v.ZodUndefined,...S(t)});Ne=class extends w{_parse(e){if(this._getType(e)!==g.null){let r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:g.null,received:r.parsedType}),h}return V(e.data)}};Ne.create=t=>new Ne({typeName:v.ZodNull,...S(t)});ke=class extends w{constructor(){super(...arguments),this._any=true;}_parse(e){return V(e.data)}};ke.create=t=>new ke({typeName:v.ZodAny,...S(t)});pe=class extends w{constructor(){super(...arguments),this._unknown=true;}_parse(e){return V(e.data)}};pe.create=t=>new pe({typeName:v.ZodUnknown,...S(t)});ne=class extends w{_parse(e){let n=this._getOrReturnCtx(e);return f(n,{code:u.invalid_type,expected:g.never,received:n.parsedType}),h}};ne.create=t=>new ne({typeName:v.ZodNever,...S(t)});tt=class extends w{_parse(e){if(this._getType(e)!==g.undefined){let r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:g.void,received:r.parsedType}),h}return V(e.data)}};tt.create=t=>new tt({typeName:v.ZodVoid,...S(t)});fe=class t extends w{_parse(e){let{ctx:n,status:r}=this._processInputParams(e),s=this._def;if(n.parsedType!==g.array)return f(n,{code:u.invalid_type,expected:g.array,received:n.parsedType}),h;if(s.exactLength!==null){let a=n.data.length>s.exactLength.value,i=n.data.length<s.exactLength.value;(a||i)&&(f(n,{code:a?u.too_big:u.too_small,minimum:i?s.exactLength.value:void 0,maximum:a?s.exactLength.value:void 0,type:"array",inclusive:true,exact:true,message:s.exactLength.message}),r.dirty());}if(s.minLength!==null&&n.data.length<s.minLength.value&&(f(n,{code:u.too_small,minimum:s.minLength.value,type:"array",inclusive:true,exact:false,message:s.minLength.message}),r.dirty()),s.maxLength!==null&&n.data.length>s.maxLength.value&&(f(n,{code:u.too_big,maximum:s.maxLength.value,type:"array",inclusive:true,exact:false,message:s.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((a,i)=>s.type._parseAsync(new Q(n,a,n.path,i)))).then(a=>M.mergeArray(r,a));let o=[...n.data].map((a,i)=>s.type._parseSync(new Q(n,a,n.path,i)));return M.mergeArray(r,o)}get element(){return this._def.type}min(e,n){return new t({...this._def,minLength:{value:e,message:m.toString(n)}})}max(e,n){return new t({...this._def,maxLength:{value:e,message:m.toString(n)}})}length(e,n){return new t({...this._def,exactLength:{value:e,message:m.toString(n)}})}nonempty(e){return this.min(1,e)}};fe.create=(t,e)=>new fe({type:t,minLength:null,maxLength:null,exactLength:null,typeName:v.ZodArray,...S(e)});Z=class t extends w{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend;}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),n=A.objectKeys(e);return this._cached={shape:e,keys:n},this._cached}_parse(e){if(this._getType(e)!==g.object){let l=this._getOrReturnCtx(e);return f(l,{code:u.invalid_type,expected:g.object,received:l.parsedType}),h}let{status:r,ctx:s}=this._processInputParams(e),{shape:o,keys:a}=this._getCached(),i=[];if(!(this._def.catchall instanceof ne&&this._def.unknownKeys==="strip"))for(let l in s.data)a.includes(l)||i.push(l);let c=[];for(let l of a){let d=o[l],T=s.data[l];c.push({key:{status:"valid",value:l},value:d._parse(new Q(s,T,s.path,l)),alwaysSet:l in s.data});}if(this._def.catchall instanceof ne){let l=this._def.unknownKeys;if(l==="passthrough")for(let d of i)c.push({key:{status:"valid",value:d},value:{status:"valid",value:s.data[d]}});else if(l==="strict")i.length>0&&(f(s,{code:u.unrecognized_keys,keys:i}),r.dirty());else if(l!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else {let l=this._def.catchall;for(let d of i){let T=s.data[d];c.push({key:{status:"valid",value:d},value:l._parse(new Q(s,T,s.path,d)),alwaysSet:d in s.data});}}return s.common.async?Promise.resolve().then(async()=>{let l=[];for(let d of c){let T=await d.key,b=await d.value;l.push({key:T,value:b,alwaysSet:d.alwaysSet});}return l}).then(l=>M.mergeObjectSync(r,l)):M.mergeObjectSync(r,c)}get shape(){return this._def.shape()}strict(e){return m.errToObj,new t({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(n,r)=>{let s=this._def.errorMap?.(n,r).message??r.defaultError;return n.code==="unrecognized_keys"?{message:m.errToObj(e).message??s}:{message:s}}}:{}})}strip(){return new t({...this._def,unknownKeys:"strip"})}passthrough(){return new t({...this._def,unknownKeys:"passthrough"})}extend(e){return new t({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new t({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:v.ZodObject})}setKey(e,n){return this.augment({[e]:n})}catchall(e){return new t({...this._def,catchall:e})}pick(e){let n={};for(let r of A.objectKeys(e))e[r]&&this.shape[r]&&(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}omit(e){let n={};for(let r of A.objectKeys(this.shape))e[r]||(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}deepPartial(){return Qe(this)}partial(e){let n={};for(let r of A.objectKeys(this.shape)){let s=this.shape[r];e&&!e[r]?n[r]=s:n[r]=s.optional();}return new t({...this._def,shape:()=>n})}required(e){let n={};for(let r of A.objectKeys(this.shape))if(e&&!e[r])n[r]=this.shape[r];else {let o=this.shape[r];for(;o instanceof X;)o=o._def.innerType;n[r]=o;}return new t({...this._def,shape:()=>n})}keyof(){return Qn(A.objectKeys(this.shape))}};Z.create=(t,e)=>new Z({shape:()=>t,unknownKeys:"strip",catchall:ne.create(),typeName:v.ZodObject,...S(e)});Z.strictCreate=(t,e)=>new Z({shape:()=>t,unknownKeys:"strict",catchall:ne.create(),typeName:v.ZodObject,...S(e)});Z.lazycreate=(t,e)=>new Z({shape:t,unknownKeys:"strip",catchall:ne.create(),typeName:v.ZodObject,...S(e)});Oe=class extends w{_parse(e){let{ctx:n}=this._processInputParams(e),r=this._def.options;function s(o){for(let i of o)if(i.result.status==="valid")return i.result;for(let i of o)if(i.result.status==="dirty")return n.common.issues.push(...i.ctx.common.issues),i.result;let a=o.map(i=>new Y(i.ctx.common.issues));return f(n,{code:u.invalid_union,unionErrors:a}),h}if(n.common.async)return Promise.all(r.map(async o=>{let a={...n,common:{...n.common,issues:[]},parent:null};return {result:await o._parseAsync({data:n.data,path:n.path,parent:a}),ctx:a}})).then(s);{let o,a=[];for(let c of r){let l={...n,common:{...n.common,issues:[]},parent:null},d=c._parseSync({data:n.data,path:n.path,parent:l});if(d.status==="valid")return d;d.status==="dirty"&&!o&&(o={result:d,ctx:l}),l.common.issues.length&&a.push(l.common.issues);}if(o)return n.common.issues.push(...o.ctx.common.issues),o.result;let i=a.map(c=>new Y(c));return f(n,{code:u.invalid_union,unionErrors:i}),h}}get options(){return this._def.options}};Oe.create=(t,e)=>new Oe({options:t,typeName:v.ZodUnion,...S(e)});de=t=>t instanceof Pe?de(t.schema):t instanceof ee?de(t.innerType()):t instanceof Le?[t.value]:t instanceof je?t.options:t instanceof Ue?A.objectValues(t.enum):t instanceof $e?de(t._def.innerType):t instanceof Ie?[void 0]:t instanceof Ne?[null]:t instanceof X?[void 0,...de(t.unwrap())]:t instanceof ce?[null,...de(t.unwrap())]:t instanceof ht||t instanceof Fe?de(t.unwrap()):t instanceof Me?de(t._def.innerType):[],$t=class t extends w{_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==g.object)return f(n,{code:u.invalid_type,expected:g.object,received:n.parsedType}),h;let r=this.discriminator,s=n.data[r],o=this.optionsMap.get(s);return o?n.common.async?o._parseAsync({data:n.data,path:n.path,parent:n}):o._parseSync({data:n.data,path:n.path,parent:n}):(f(n,{code:u.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),h)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,n,r){let s=new Map;for(let o of n){let a=de(o.shape[e]);if(!a.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let i of a){if(s.has(i))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(i)}`);s.set(i,o);}}return new t({typeName:v.ZodDiscriminatedUnion,discriminator:e,options:n,optionsMap:s,...S(r)})}};De=class extends w{_parse(e){let{status:n,ctx:r}=this._processInputParams(e),s=(o,a)=>{if(jt(o)||jt(a))return h;let i=hn(o.value,a.value);return i.valid?((Ut(o)||Ut(a))&&n.dirty(),{status:n.value,value:i.data}):(f(r,{code:u.invalid_intersection_types}),h)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([o,a])=>s(o,a)):s(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};De.create=(t,e,n)=>new De({left:t,right:e,typeName:v.ZodIntersection,...S(n)});ae=class t extends w{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==g.array)return f(r,{code:u.invalid_type,expected:g.array,received:r.parsedType}),h;if(r.data.length<this._def.items.length)return f(r,{code:u.too_small,minimum:this._def.items.length,inclusive:true,exact:false,type:"array"}),h;!this._def.rest&&r.data.length>this._def.items.length&&(f(r,{code:u.too_big,maximum:this._def.items.length,inclusive:true,exact:false,type:"array"}),n.dirty());let o=[...r.data].map((a,i)=>{let c=this._def.items[i]||this._def.rest;return c?c._parse(new Q(r,a,r.path,i)):null}).filter(a=>!!a);return r.common.async?Promise.all(o).then(a=>M.mergeArray(n,a)):M.mergeArray(n,o)}get items(){return this._def.items}rest(e){return new t({...this._def,rest:e})}};ae.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new ae({items:t,typeName:v.ZodTuple,rest:null,...S(e)})};Mt=class t extends w{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==g.object)return f(r,{code:u.invalid_type,expected:g.object,received:r.parsedType}),h;let s=[],o=this._def.keyType,a=this._def.valueType;for(let i in r.data)s.push({key:o._parse(new Q(r,i,r.path,i)),value:a._parse(new Q(r,r.data[i],r.path,i)),alwaysSet:i in r.data});return r.common.async?M.mergeObjectAsync(n,s):M.mergeObjectSync(n,s)}get element(){return this._def.valueType}static create(e,n,r){return n instanceof w?new t({keyType:e,valueType:n,typeName:v.ZodRecord,...S(r)}):new t({keyType:_e.create(),valueType:e,typeName:v.ZodRecord,...S(n)})}},nt=class extends w{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==g.map)return f(r,{code:u.invalid_type,expected:g.map,received:r.parsedType}),h;let s=this._def.keyType,o=this._def.valueType,a=[...r.data.entries()].map(([i,c],l)=>({key:s._parse(new Q(r,i,r.path,[l,"key"])),value:o._parse(new Q(r,c,r.path,[l,"value"]))}));if(r.common.async){let i=new Map;return Promise.resolve().then(async()=>{for(let c of a){let l=await c.key,d=await c.value;if(l.status==="aborted"||d.status==="aborted")return h;(l.status==="dirty"||d.status==="dirty")&&n.dirty(),i.set(l.value,d.value);}return {status:n.value,value:i}})}else {let i=new Map;for(let c of a){let l=c.key,d=c.value;if(l.status==="aborted"||d.status==="aborted")return h;(l.status==="dirty"||d.status==="dirty")&&n.dirty(),i.set(l.value,d.value);}return {status:n.value,value:i}}}};nt.create=(t,e,n)=>new nt({valueType:e,keyType:t,typeName:v.ZodMap,...S(n)});rt=class t extends w{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==g.set)return f(r,{code:u.invalid_type,expected:g.set,received:r.parsedType}),h;let s=this._def;s.minSize!==null&&r.data.size<s.minSize.value&&(f(r,{code:u.too_small,minimum:s.minSize.value,type:"set",inclusive:true,exact:false,message:s.minSize.message}),n.dirty()),s.maxSize!==null&&r.data.size>s.maxSize.value&&(f(r,{code:u.too_big,maximum:s.maxSize.value,type:"set",inclusive:true,exact:false,message:s.maxSize.message}),n.dirty());let o=this._def.valueType;function a(c){let l=new Set;for(let d of c){if(d.status==="aborted")return h;d.status==="dirty"&&n.dirty(),l.add(d.value);}return {status:n.value,value:l}}let i=[...r.data.values()].map((c,l)=>o._parse(new Q(r,c,r.path,l)));return r.common.async?Promise.all(i).then(c=>a(c)):a(i)}min(e,n){return new t({...this._def,minSize:{value:e,message:m.toString(n)}})}max(e,n){return new t({...this._def,maxSize:{value:e,message:m.toString(n)}})}size(e,n){return this.min(e,n).max(e,n)}nonempty(e){return this.min(1,e)}};rt.create=(t,e)=>new rt({valueType:t,minSize:null,maxSize:null,typeName:v.ZodSet,...S(e)});Ft=class t extends w{constructor(){super(...arguments),this.validate=this.implement;}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==g.function)return f(n,{code:u.invalid_type,expected:g.function,received:n.parsedType}),h;function r(i,c){return mt({data:i,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,qe(),ue].filter(l=>!!l),issueData:{code:u.invalid_arguments,argumentsError:c}})}function s(i,c){return mt({data:i,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,qe(),ue].filter(l=>!!l),issueData:{code:u.invalid_return_type,returnTypeError:c}})}let o={errorMap:n.common.contextualErrorMap},a=n.data;if(this._def.returns instanceof Ee){let i=this;return V(async function(...c){let l=new Y([]),d=await i._def.args.parseAsync(c,o).catch(j=>{throw l.addIssue(r(c,j)),l}),T=await Reflect.apply(a,this,d);return await i._def.returns._def.type.parseAsync(T,o).catch(j=>{throw l.addIssue(s(T,j)),l})})}else {let i=this;return V(function(...c){let l=i._def.args.safeParse(c,o);if(!l.success)throw new Y([r(c,l.error)]);let d=Reflect.apply(a,this,l.data),T=i._def.returns.safeParse(d,o);if(!T.success)throw new Y([s(d,T.error)]);return T.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new t({...this._def,args:ae.create(e).rest(pe.create())})}returns(e){return new t({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,n,r){return new t({args:e||ae.create([]).rest(pe.create()),returns:n||pe.create(),typeName:v.ZodFunction,...S(r)})}},Pe=class extends w{get schema(){return this._def.getter()}_parse(e){let{ctx:n}=this._processInputParams(e);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}};Pe.create=(t,e)=>new Pe({getter:t,typeName:v.ZodLazy,...S(e)});Le=class extends w{_parse(e){if(e.data!==this._def.value){let n=this._getOrReturnCtx(e);return f(n,{received:n.data,code:u.invalid_literal,expected:this._def.value}),h}return {status:"valid",value:e.data}}get value(){return this._def.value}};Le.create=(t,e)=>new Le({value:t,typeName:v.ZodLiteral,...S(e)});je=class t extends w{_parse(e){if(typeof e.data!="string"){let n=this._getOrReturnCtx(e),r=this._def.values;return f(n,{expected:A.joinValues(r),received:n.parsedType,code:u.invalid_type}),h}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let n=this._getOrReturnCtx(e),r=this._def.values;return f(n,{received:n.data,code:u.invalid_enum_value,options:r}),h}return V(e.data)}get options(){return this._def.values}get enum(){let e={};for(let n of this._def.values)e[n]=n;return e}get Values(){let e={};for(let n of this._def.values)e[n]=n;return e}get Enum(){let e={};for(let n of this._def.values)e[n]=n;return e}extract(e,n=this._def){return t.create(e,{...this._def,...n})}exclude(e,n=this._def){return t.create(this.options.filter(r=>!e.includes(r)),{...this._def,...n})}};je.create=Qn;Ue=class extends w{_parse(e){let n=A.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==g.string&&r.parsedType!==g.number){let s=A.objectValues(n);return f(r,{expected:A.joinValues(s),received:r.parsedType,code:u.invalid_type}),h}if(this._cache||(this._cache=new Set(A.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let s=A.objectValues(n);return f(r,{received:r.data,code:u.invalid_enum_value,options:s}),h}return V(e.data)}get enum(){return this._def.values}};Ue.create=(t,e)=>new Ue({values:t,typeName:v.ZodNativeEnum,...S(e)});Ee=class extends w{unwrap(){return this._def.type}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==g.promise&&n.common.async===false)return f(n,{code:u.invalid_type,expected:g.promise,received:n.parsedType}),h;let r=n.parsedType===g.promise?n.data:Promise.resolve(n.data);return V(r.then(s=>this._def.type.parseAsync(s,{path:n.path,errorMap:n.common.contextualErrorMap})))}};Ee.create=(t,e)=>new Ee({type:t,typeName:v.ZodPromise,...S(e)});ee=class extends w{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===v.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:n,ctx:r}=this._processInputParams(e),s=this._def.effect||null,o={addIssue:a=>{f(r,a),a.fatal?n.abort():n.dirty();},get path(){return r.path}};if(o.addIssue=o.addIssue.bind(o),s.type==="preprocess"){let a=s.transform(r.data,o);if(r.common.async)return Promise.resolve(a).then(async i=>{if(n.value==="aborted")return h;let c=await this._def.schema._parseAsync({data:i,path:r.path,parent:r});return c.status==="aborted"?h:c.status==="dirty"?Ae(c.value):n.value==="dirty"?Ae(c.value):c});{if(n.value==="aborted")return h;let i=this._def.schema._parseSync({data:a,path:r.path,parent:r});return i.status==="aborted"?h:i.status==="dirty"?Ae(i.value):n.value==="dirty"?Ae(i.value):i}}if(s.type==="refinement"){let a=i=>{let c=s.refinement(i,o);if(r.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return i};if(r.common.async===false){let i=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?h:(i.status==="dirty"&&n.dirty(),a(i.value),{status:n.value,value:i.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(i=>i.status==="aborted"?h:(i.status==="dirty"&&n.dirty(),a(i.value).then(()=>({status:n.value,value:i.value}))))}if(s.type==="transform")if(r.common.async===false){let a=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!ve(a))return h;let i=s.transform(a.value,o);if(i instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return {status:n.value,value:i}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(a=>ve(a)?Promise.resolve(s.transform(a.value,o)).then(i=>({status:n.value,value:i})):h);A.assertNever(s);}};ee.create=(t,e,n)=>new ee({schema:t,typeName:v.ZodEffects,effect:e,...S(n)});ee.createWithPreprocess=(t,e,n)=>new ee({schema:e,effect:{type:"preprocess",transform:t},typeName:v.ZodEffects,...S(n)});X=class extends w{_parse(e){return this._getType(e)===g.undefined?V(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};X.create=(t,e)=>new X({innerType:t,typeName:v.ZodOptional,...S(e)});ce=class extends w{_parse(e){return this._getType(e)===g.null?V(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};ce.create=(t,e)=>new ce({innerType:t,typeName:v.ZodNullable,...S(e)});$e=class extends w{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return n.parsedType===g.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}};$e.create=(t,e)=>new $e({innerType:t,typeName:v.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...S(e)});Me=class extends w{_parse(e){let{ctx:n}=this._processInputParams(e),r={...n,common:{...n.common,issues:[]}},s=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return Xe(s)?s.then(o=>({status:"valid",value:o.status==="valid"?o.value:this._def.catchValue({get error(){return new Y(r.common.issues)},input:r.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new Y(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};Me.create=(t,e)=>new Me({innerType:t,typeName:v.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...S(e)});st=class extends w{_parse(e){if(this._getType(e)!==g.nan){let r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:g.nan,received:r.parsedType}),h}return {status:"valid",value:e.data}}};st.create=t=>new st({typeName:v.ZodNaN,...S(t)});xs=Symbol("zod_brand"),ht=class extends w{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}},yt=class t extends w{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.common.async)return (async()=>{let o=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?h:o.status==="dirty"?(n.dirty(),Ae(o.value)):this._def.out._parseAsync({data:o.value,path:r.path,parent:r})})();{let s=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?h:s.status==="dirty"?(n.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:r.path,parent:r})}}static create(e,n){return new t({in:e,out:n,typeName:v.ZodPipeline})}},Fe=class extends w{_parse(e){let n=this._def.innerType._parse(e),r=s=>(ve(s)&&(s.value=Object.freeze(s.value)),s);return Xe(n)?n.then(s=>r(s)):r(n)}unwrap(){return this._def.innerType}};Fe.create=(t,e)=>new Fe({innerType:t,typeName:v.ZodReadonly,...S(e)});Rs={object:Z.lazycreate};(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly";})(v||(v={}));bs=(t,e={message:`Input not instance of ${t.name}`})=>er(n=>n instanceof t,e),tr=_e.create,nr=xe.create,Cs=st.create,Is=Re.create,rr=be.create,Ns=Ce.create,Os=et.create,Ds=Ie.create,Ps=Ne.create,Ls=ke.create,js=pe.create,Us=ne.create,$s=tt.create,Ms=fe.create,Fs=Z.create,Vs=Z.strictCreate,Bs=Oe.create,Hs=$t.create,zs=De.create,Ws=ae.create,Gs=Mt.create,Ys=nt.create,Zs=rt.create,Js=Ft.create,Ks=Pe.create,qs=Le.create,Xs=je.create,Qs=Ue.create,eo=Ee.create,to=ee.create,no=X.create,ro=ce.create,so=ee.createWithPreprocess,oo=yt.create,io=()=>tr().optional(),ao=()=>nr().optional(),co=()=>rr().optional(),lo={string:(t=>_e.create({...t,coerce:true})),number:(t=>xe.create({...t,coerce:true})),boolean:(t=>be.create({...t,coerce:true})),bigint:(t=>Re.create({...t,coerce:true})),date:(t=>Ce.create({...t,coerce:true}))},uo=h;});var p={};$n(p,{BRAND:()=>xs,DIRTY:()=>Ae,EMPTY_PATH:()=>ss,INVALID:()=>h,NEVER:()=>uo,OK:()=>V,ParseStatus:()=>M,Schema:()=>w,ZodAny:()=>ke,ZodArray:()=>fe,ZodBigInt:()=>Re,ZodBoolean:()=>be,ZodBranded:()=>ht,ZodCatch:()=>Me,ZodDate:()=>Ce,ZodDefault:()=>$e,ZodDiscriminatedUnion:()=>$t,ZodEffects:()=>ee,ZodEnum:()=>je,ZodError:()=>Y,ZodFirstPartyTypeKind:()=>v,ZodFunction:()=>Ft,ZodIntersection:()=>De,ZodIssueCode:()=>u,ZodLazy:()=>Pe,ZodLiteral:()=>Le,ZodMap:()=>nt,ZodNaN:()=>st,ZodNativeEnum:()=>Ue,ZodNever:()=>ne,ZodNull:()=>Ne,ZodNullable:()=>ce,ZodNumber:()=>xe,ZodObject:()=>Z,ZodOptional:()=>X,ZodParsedType:()=>g,ZodPipeline:()=>yt,ZodPromise:()=>Ee,ZodReadonly:()=>Fe,ZodRecord:()=>Mt,ZodSchema:()=>w,ZodSet:()=>rt,ZodString:()=>_e,ZodSymbol:()=>et,ZodTransformer:()=>ee,ZodTuple:()=>ae,ZodType:()=>w,ZodUndefined:()=>Ie,ZodUnion:()=>Oe,ZodUnknown:()=>pe,ZodVoid:()=>tt,addIssueToContext:()=>f,any:()=>Ls,array:()=>Ms,bigint:()=>Is,boolean:()=>rr,coerce:()=>lo,custom:()=>er,date:()=>Ns,datetimeRegex:()=>Xn,defaultErrorMap:()=>ue,discriminatedUnion:()=>Hs,effect:()=>to,enum:()=>Xs,function:()=>Js,getErrorMap:()=>qe,getParsedType:()=>ie,instanceof:()=>bs,intersection:()=>zs,isAborted:()=>jt,isAsync:()=>Xe,isDirty:()=>Ut,isValid:()=>ve,late:()=>Rs,lazy:()=>Ks,literal:()=>qs,makeIssue:()=>mt,map:()=>Ys,nan:()=>Cs,nativeEnum:()=>Qs,never:()=>Us,null:()=>Ps,nullable:()=>ro,number:()=>nr,object:()=>Fs,objectUtil:()=>pn,oboolean:()=>co,onumber:()=>ao,optional:()=>no,ostring:()=>io,pipeline:()=>oo,preprocess:()=>so,promise:()=>eo,quotelessJson:()=>ts,record:()=>Gs,set:()=>Zs,setErrorMap:()=>rs,strictObject:()=>Vs,string:()=>tr,symbol:()=>Os,transformer:()=>to,tuple:()=>Ws,undefined:()=>Ds,union:()=>Bs,unknown:()=>js,util:()=>A,void:()=>$s});var yn=G(()=>{Lt();gn();Gn();gt();sr();Pt();});var or=G(()=>{yn();yn();});function go(){try{return fo.parse(process.env)}catch(t){if(t instanceof p.ZodError){let e=t.errors.map(n=>n.path.join(".")).join(", ");throw new Error(`Environment validation failed:
4
4
  Missing or invalid variables: ${e}
5
- Please check your .env file and ensure all required variables are set.`)}throw t}}function ri(){return un||(un=ni()),un}function si(t=ei.api.rateLimit){let{windowMs:e,maxRequests:n,message:r}=t;return {check(s){let i=Date.now(),o=Ve.get(s);o&&i>o.resetTime&&Ve.delete(s);let a=Ve.get(s)||{count:0,resetTime:i+e};return a.count>=n?{success:false,remaining:0,resetTime:a.resetTime,error:r||"Too many requests"}:(a.count++,Ve.set(s,a),{success:true,remaining:n-a.count,resetTime:a.resetTime})},reset(s){Ve.delete(s);},cleanup(){let s=Date.now();for(let[i,o]of Ve.entries())s>o.resetTime&&Ve.delete(i);}}}var ei,ti,un,v,Gn,Dt,_,Ve,ae=V(()=>{nn();nn();Zn();ei={versions:{cli:ve,engine:ve,frontend:ve,api:tn,snapshot:re,engine_target:Ke},analysis:{maxFileSize:2*1024*1024,maxFileCount:2e3,maxDependencyCount:2e3,maxDirectoryDepth:10,timeout:5e3},scoring:{baseScore:100,CRITICAL:25,HIGH:15,MEDIUM:8,LOW:3,severityBands:{HEALTHY:{min:90,max:100},STABLE:{min:75,max:89},STRUCTURAL_CONCERN:{min:60,max:74},HIGH_RISK:{min:0,max:59}}},api:{rateLimit:{windowMs:900*1e3,maxRequests:100},timeout:1e4},snapshot:{schemaVersion:re,engineTargetVersion:Ke},usage:{free:{scansPerMonth:3,retentionDays:7},pro:{scansPerMonth:100,retentionDays:90}},security:{bcryptRounds:10,jwtExpiration:"7d",maxLoginAttempts:5,lockoutDuration:900*1e3},storage:{bucketName:"snapshots",maxRetries:3,chunkSize:1024*1024},ui:{maxFindingsPerPage:50,maxReportHistory:100}},d.object({snapshot_version:d.string(),engine_target_version:d.string(),project_id:d.string(),generated_at:d.string(),root_path_hash:d.string(),metadata:d.object({total_files:d.number().int().nonnegative(),total_dependencies:d.number().int().nonnegative(),total_size_bytes:d.number().int().nonnegative(),total_lines:d.number().int().nonnegative(),max_directory_depth:d.number().int().nonnegative(),language_breakdown:d.record(d.string(),d.number().int().nonnegative())}),files:d.array(d.object({id:d.string(),path_hash:d.string(),depth:d.number().int().nonnegative(),size_bytes:d.number().int().nonnegative(),estimated_lines:d.number().int().nonnegative(),extension:d.string(),is_binary:d.boolean(),import_count:d.number().int().nonnegative().optional(),function_count:d.number().int().nonnegative().optional(),class_count:d.number().int().nonnegative().optional()})),dependencies:d.array(d.object({id:d.string(),name_hash:d.string(),major_version:d.number().int().nonnegative(),minor_version:d.number().int().nonnegative(),category:d.enum(["dev","prod","peer"])}))}),d.object({name:d.string().min(1).max(100)}),d.object({analysis_version:d.string(),snapshot_schema_version:d.string(),total_score:d.number().min(0).max(100),severity_band:d.enum(["HEALTHY","STABLE","STRUCTURAL_CONCERN","HIGH_RISK"]),engines:d.array(d.object({engine_name:d.string(),score_impact:d.number(),risk_level:d.enum(["HEALTHY","STABLE","STRUCTURAL_CONCERN","HIGH_RISK"]),metrics:d.record(d.number()),findings:d.array(d.object({rule_id:d.string(),title:d.string(),message:d.string(),severity:d.enum(["CRITICAL","HIGH","MEDIUM","LOW"]),category:d.enum(["SECURITY","STRUCTURE","COMPLEXITY","DEPENDENCY","REPOSITORY_HYGIENE","DOCUMENTATION","QUALITY"]),evidence:d.array(d.string()).optional(),explanation:d.string().optional(),impact:d.string().optional(),effort:d.enum(["Low","Medium","High"]).optional(),recommendations:d.array(d.string()).optional()}))})),summary:d.object({total_findings:d.number().int().nonnegative(),critical_count:d.number().int().nonnegative(),high_count:d.number().int().nonnegative(),medium_count:d.number().int().nonnegative(),low_count:d.number().int().nonnegative(),categories:d.record(d.string(),d.number().int().nonnegative())}),generated_at:d.string()}),ti=d.object({NEXT_PUBLIC_SUPABASE_URL:d.string().url("Invalid SUPABASE_URL"),NEXT_PUBLIC_SUPABASE_ANON_KEY:d.string().min(1,"SUPABASE_ANON_KEY is required"),SUPABASE_SERVICE_ROLE_KEY:d.string().min(1,"SERVICE_ROLE_KEY is required"),NODE_ENV:d.enum(["development","production","test"],{errorMap:()=>({message:"NODE_ENV must be development, production, or test"})}),JWT_SECRET:d.string().min(32,"JWT_SECRET must be at least 32 characters").optional()});un=null;new Proxy({},{get(t,e){return ri()[e]}}),v={plans:{FREE:{name:"free",scansPerMonth:10,projects:3,snapshots:10,reports:10,maxFileSizeMB:5,maxFilesPerSnapshot:100,storageMB:100,teamMembers:1,support:"community",features:["basic-analysis","security-scan"]},PRO:{name:"pro",scansPerMonth:-1,projects:-1,snapshots:-1,reports:-1,maxFileSizeMB:50,maxFilesPerSnapshot:1e3,storageMB:1e4,teamMembers:10,support:"priority",features:["basic-analysis","security-scan","advanced-analytics","api-access","team-collaboration","priority-support"]}},roles:{MEMBER:"member",SUPPORT:"support",ADMIN:"admin",OWNER:"owner"},permissions:{PROJECT_READ:"project:read",PROJECT_CREATE:"project:create",PROJECT_UPDATE:"project:update",PROJECT_DELETE:"project:delete",SNAPSHOT_READ:"snapshot:read",SNAPSHOT_CREATE:"snapshot:create",SNAPSHOT_DELETE:"snapshot:delete",REPORT_READ:"report:read",REPORT_DOWNLOAD:"report:download",TEAM_READ:"team:read",TEAM_INVITE:"team:invite",TEAM_REMOVE:"team:remove",USER_READ:"user:read",USER_UPDATE:"user:update",USER_DELETE:"user:delete",SYSTEM_MANAGE:"system:manage",ALL:"*",READ_OWN:"read:own",CREATE_OWN:"create:own",UPDATE_OWN:"update:own",DELETE_OWN:"delete:own",READ_ALL:"read:all",CREATE_ALL:"create:all",UPDATE_ALL:"update:all",DELETE_ALL:"delete:all",SCAN_OWN:"scan:own",REPORT_OWN:"report:own",ANALYTICS_VIEW:"analytics:view",SUPPORT_ACCESS:"support:access",SUPPORT_VIEW_TICKETS:"support:view-tickets"},features:{BASIC_ANALYSIS:"basic-analysis",SECURITY_SCAN:"security-scan",ADVANCED_ANALYTICS:"advanced-analytics",API_ACCESS:"api-access",TEAM_COLLAB:"team-collaboration",PRIORITY_SUPPORT:"priority-support"}},Gn={FREE:v.plans.FREE.name,PRO:v.plans.PRO.name},{BASIC_ANALYSIS:v.features.BASIC_ANALYSIS,SECURITY_SCAN:v.features.SECURITY_SCAN,ADVANCED_ANALYTICS:v.features.ADVANCED_ANALYTICS,API_ACCESS:v.features.API_ACCESS,TEAM_COLLAB:v.features.TEAM_COLLAB,PRIORITY_SUPPORT:v.features.PRIORITY_SUPPORT},{[Gn.FREE]:v.plans.FREE,[Gn.PRO]:v.plans.PRO},Dt={MEMBER:v.roles.MEMBER,SUPPORT:v.roles.SUPPORT,ADMIN:v.roles.ADMIN,OWNER:v.roles.OWNER},_={PROJECT_READ:v.permissions.PROJECT_READ,PROJECT_CREATE:v.permissions.PROJECT_CREATE,PROJECT_UPDATE:v.permissions.PROJECT_UPDATE,PROJECT_DELETE:v.permissions.PROJECT_DELETE,SNAPSHOT_READ:v.permissions.SNAPSHOT_READ,SNAPSHOT_CREATE:v.permissions.SNAPSHOT_CREATE,SNAPSHOT_DELETE:v.permissions.SNAPSHOT_DELETE,REPORT_READ:v.permissions.REPORT_READ,REPORT_DOWNLOAD:v.permissions.REPORT_DOWNLOAD,TEAM_READ:v.permissions.TEAM_READ,TEAM_INVITE:v.permissions.TEAM_INVITE,TEAM_REMOVE:v.permissions.TEAM_REMOVE,USER_READ:v.permissions.USER_READ,USER_UPDATE:v.permissions.USER_UPDATE,USER_DELETE:v.permissions.USER_DELETE,SYSTEM_MANAGE:v.permissions.SYSTEM_MANAGE,ALL:v.permissions.ALL,READ_OWN:v.permissions.READ_OWN,CREATE_OWN:v.permissions.CREATE_OWN,UPDATE_OWN:v.permissions.UPDATE_OWN,DELETE_OWN:v.permissions.DELETE_OWN,READ_ALL:v.permissions.READ_ALL,CREATE_ALL:v.permissions.CREATE_ALL,UPDATE_ALL:v.permissions.UPDATE_ALL,DELETE_ALL:v.permissions.DELETE_ALL,SCAN_OWN:v.permissions.SCAN_OWN,REPORT_OWN:v.permissions.REPORT_OWN,ANALYTICS_VIEW:v.permissions.ANALYTICS_VIEW,SUPPORT_ACCESS:v.permissions.SUPPORT_ACCESS,SUPPORT_VIEW_TICKETS:v.permissions.SUPPORT_VIEW_TICKETS},{[Dt.MEMBER]:[_.READ_OWN,_.CREATE_OWN,_.UPDATE_OWN,_.DELETE_OWN,_.SCAN_OWN,_.REPORT_OWN,_.PROJECT_READ,_.PROJECT_CREATE,_.PROJECT_UPDATE,_.PROJECT_DELETE,_.SNAPSHOT_READ,_.SNAPSHOT_CREATE,_.SNAPSHOT_DELETE,_.REPORT_READ,_.REPORT_DOWNLOAD],[Dt.SUPPORT]:[_.READ_ALL,_.PROJECT_READ,_.SNAPSHOT_READ,_.REPORT_READ,_.USER_READ,_.SUPPORT_ACCESS,_.SUPPORT_VIEW_TICKETS],[Dt.ADMIN]:[_.READ_ALL,_.CREATE_ALL,_.UPDATE_ALL,_.DELETE_ALL,_.USER_READ,_.USER_UPDATE,_.USER_DELETE,_.SYSTEM_MANAGE,_.REPORT_READ,_.ANALYTICS_VIEW],[Dt.OWNER]:[_.ALL]},{projects:{read:_.PROJECT_READ,create:_.PROJECT_CREATE,update:_.PROJECT_UPDATE,delete:_.PROJECT_DELETE},snapshots:{read:_.SNAPSHOT_READ,create:_.SNAPSHOT_CREATE,delete:_.SNAPSHOT_DELETE},reports:{read:_.REPORT_READ},users:{read:_.USER_READ,update:_.USER_UPDATE}},Ve=new Map;si();});var Wt,Yt,pr=V(()=>{Wt={BASE_SCORE:100,MIN_SCORE:0,MAX_SCORE:100},Yt={HEALTHY:{min:90,max:100},STABLE:{min:75,max:89},STRUCTURAL_CONCERN:{min:60,max:74},HIGH_RISK:{min:0,max:59}};});var yn={};xn(yn,{CoreEngine:()=>Ui,ProjectScanner:()=>_r,RULES:()=>Qi,ReportGenerator:()=>vr,RuleRegistry:()=>hr,ScoringEngine:()=>yr,SnapshotValidator:()=>mr,scanProject:()=>no});async function no(t,e,n){return new _r({projectPath:t,...n}).scan(e)}var fr,mr,hr,yr,vr,Ui,Mi,$i,Fi,Vi,Bi,Hi,zi,Wi,Yi,Zi,Gi,Ki,Ji,qi,Xi,Qi,_r,vn=V(()=>{pr();ae();ae();fr=(t=>typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>e[n]}):t)(function(t){throw Error('Dynamic require of "'+t+'" is not supported')}),mr=class{validate(t){let e=[];return t.snapshot_version||e.push("Missing snapshot_version"),t.engine_target_version||e.push("Missing engine_target_version"),(!t.files||!Array.isArray(t.files))&&e.push("Invalid or missing files array"),(!t.dependencies||!Array.isArray(t.dependencies))&&e.push("Invalid or missing dependencies array"),t.files&&t.files.length>2e3&&e.push("File count exceeds maximum limit of 2000"),{valid:e.length===0,error:e.length>0?e.join(", "):void 0}}},hr=class{rules=[];register(t){this.rules.push(t);}executeAllRules(t){let e=[],n=[...this.rules].sort((r,s)=>r.id.localeCompare(s.id));for(let r of n)try{let s=r.evaluator(t);s&&e.push({rule_id:r.id,severity:s.severity,weight:r.weight,title:s.title,message:s.message,category:s.category,evidence:s.evidence,explanation:s.explanation,impact:s.impact,effort:s.effort,recommendations:s.recommendations});}catch{}return e}},yr=class{calculateScore(t){let e=Wt.BASE_SCORE;for(let n of t)e-=n.weight;return Math.max(Wt.MIN_SCORE,Math.min(Wt.MAX_SCORE,e))}getSeverityBand(t){return t>=Yt.HEALTHY.min?"HEALTHY":t>=Yt.STABLE.min?"STABLE":t>=Yt.STRUCTURAL_CONCERN.min?"STRUCTURAL_CONCERN":"HIGH_RISK"}},vr=class{generateReport(t,e,n,r){let s=e.map(a=>({rule_id:a.rule_id,title:a.title,message:a.message,severity:a.severity,category:a.category,evidence:a.evidence,explanation:a.explanation,impact:a.impact,effort:a.effort,recommendations:a.recommendations})),i=this.generateSummary(e),o={engine_name:"VeeStack Core Engine",score_impact:100-n,risk_level:r,metrics:{total_files:t.metadata.total_files,total_dependencies:t.metadata.total_dependencies,total_size_bytes:t.metadata.total_size_bytes,max_directory_depth:t.metadata.max_directory_depth},findings:s};return {analysis_version:re,snapshot_schema_version:t.snapshot_version,total_score:n,severity_band:r,engines:[o],summary:i,generated_at:new Date().toISOString()}}generateSummary(t){let e={};for(let n of t){let r=this.getCategoryFromRuleId(n.rule_id);e[r]=(e[r]||0)+1;}return {total_findings:t.length,critical_count:t.filter(n=>n.severity==="CRITICAL").length,high_count:t.filter(n=>n.severity==="HIGH").length,medium_count:t.filter(n=>n.severity==="MEDIUM").length,low_count:t.filter(n=>n.severity==="LOW").length,categories:e}}getCategoryFromRuleId(t){let e=t.split("_")[0];return {SEC:"SECURITY",STR:"STRUCTURE",COM:"COMPLEXITY",DEP:"DEPENDENCY",HYG:"REPOSITORY_HYGIENE",DOC:"DOCUMENTATION",QUA:"QUALITY"}[e]||"OTHER"}},Ui=class{validator;ruleRegistry;scoringEngine;reportGenerator;constructor(){this.validator=new mr,this.ruleRegistry=new hr,this.scoringEngine=new yr,this.reportGenerator=new vr;}registerRule(t){this.ruleRegistry.register(t);}async analyze(t){let e=this.validator.validate(t);if(!e.valid)return {success:false,error:{error:e.error,code:400}};let n=this.ruleRegistry.executeAllRules(t),r=this.scoringEngine.calculateScore(n),s=this.scoringEngine.getSeverityBand(r);return {success:true,report:this.reportGenerator.generateReport(t,n,r,s)}}},Mi={id:"RULE_001",name:"Environment File Committed",category:"SECURITY",description:"Sensitive environment configuration file detected in repository",severity:"CRITICAL",weight:25,evaluator:t=>{let e=t.files.filter(n=>n.path_hash.endsWith(".env")||n.path_hash.endsWith(".env.local")||n.path_hash.endsWith(".env.development")||n.path_hash.endsWith(".env.production")||n.path_hash.endsWith(".pem")||n.path_hash.endsWith(".key"));return e.length>0?{rule_id:"RULE_001",title:"Sensitive Environment File Detected",message:`Found ${e.length} environment configuration files in source`,severity:"CRITICAL",category:"SECURITY",evidence:e.map(n=>n.path),explanation:"Environment files often contain passwords, API keys, and secrets. Committing them exposes credentials in version history.",impact:"Security breach risk. Credentials may be exposed to anyone with repository access.",effort:"Low",recommendations:["Add .env files to .gitignore immediately","Rotate any exposed credentials","Use environment variable managers like doppler or 1password","Document proper environment setup in README"]}:null}},$i={id:"RULE_002",name:"Node Modules in Snapshot",category:"REPOSITORY_HYGIENE",description:"node_modules directory detected in snapshot",severity:"HIGH",weight:15,evaluator:t=>{let e=t.files.filter(n=>n.path_hash.includes("node_modules"));return e.length>0?{rule_id:"RULE_002",title:"Node Modules in Repository",message:`Found ${e.length} files in node_modules directory`,severity:"HIGH",category:"REPOSITORY_HYGIENE",evidence:["node_modules detected"],explanation:"node_modules should never be committed. It bloats the repo and causes merge conflicts.",impact:"Repository size increases by 100MB+. CI/CD slows down. Merge conflicts multiply.",effort:"Low",recommendations:["Add node_modules to .gitignore","Remove node_modules from git history","Ensure package.json and lock files are committed","Document npm install step in README"]}:null}},Fi={id:"RULE_003",name:"Excessive File Count",category:"STRUCTURE",description:"Project contains unusually high number of files",severity:"HIGH",weight:15,evaluator:t=>t.metadata.total_files>5e3?{rule_id:"RULE_003",title:"Excessive File Count",message:`Project contains ${t.metadata.total_files} files (threshold: 5000)`,severity:"HIGH",category:"STRUCTURE",explanation:"High file count increases cognitive load and slows down development.",impact:"Onboarding takes 2-3x longer. CI/CD more complex. Tooling inconsistent.",effort:"High",recommendations:["Split large projects into smaller sub-projects","Remove unused or redundant files","Consider a monorepo structure"]}:null},Vi={id:"RULE_004",name:"Deep Directory Nesting",category:"STRUCTURE",description:"Directory depth exceeds maintainable structure",severity:"MEDIUM",weight:8,evaluator:t=>t.metadata.max_directory_depth>10?{rule_id:"RULE_004",title:"Deeply Nested Directory Structure",message:`Maximum directory depth is ${t.metadata.max_directory_depth} levels (threshold: 10)`,severity:"MEDIUM",category:"STRUCTURE",explanation:"Deep nesting makes imports verbose and navigation difficult.",impact:"Developer productivity decreases. File paths become unmanageable.",effort:"Medium",recommendations:["Flatten directory structure where possible","Use barrel exports (index.ts) to simplify imports","Consolidate related modules"]}:null},Bi={id:"RULE_005",name:"Large Single Files",category:"COMPLEXITY",description:"Detects files exceeding size thresholds with language-aware limits",severity:"MEDIUM",weight:15,evaluator:t=>{let e=[/\.(generated|auto|min|bundle|spec)\.\w+$/i,/\.(test|spec)\.(ts|tsx|js|jsx)$/i,/\d{14}_/i,/migration/i,/\.config\./i,/\.d\.ts$/i,/lock\.json$/i,/\.lock$/i,/\.lockb$/i,/pnpm-lock\.yaml$/i,/\.tsbuildinfo$/i,/\.sql$/i,/\.csv$/i,/\.json$/i,/node_modules/i,/dist\//i,/build\//i,/out\//i],n={tsx:{warning:400,critical:800},jsx:{warning:400,critical:800},ts:{warning:600,critical:1200},js:{warning:500,critical:1e3},py:{warning:800,critical:1600},java:{warning:800,critical:1500},cs:{warning:800,critical:1500},go:{warning:400,critical:800},rb:{warning:500,critical:1e3},php:{warning:600,critical:1200},c:{warning:800,critical:1500},cpp:{warning:800,critical:1500},default:{warning:600,critical:1200}},r=[];for(let l of t.files){if(l.is_binary||e.some(L=>L.test(l.path)))continue;let T=l.extension.toLowerCase(),C=n[T]||n.default;l.estimated_lines>C.critical?r.push({path:l.path,lines:l.estimated_lines,threshold:C.critical,level:"critical"}):l.estimated_lines>C.warning&&r.push({path:l.path,lines:l.estimated_lines,threshold:C.warning,level:"warning"});}if(r.length===0)return null;let s=r.filter(l=>l.level==="critical"),i=r.filter(l=>l.level==="warning"),o,a,c;if(s.length>0){a="HIGH";let l=s.slice(0,3).map(m=>`${m.path} (${m.lines} lines)`);o=s.length===1?`Found 1 very large file (${s[0].lines} lines). Consider splitting into smaller modules with single responsibilities.`:`Found ${s.length} very large files (>${s[0].threshold} lines each). Splitting into smaller modules will improve maintainability and testability.`,c=l;}else {a="MEDIUM";let l=i.slice(0,3).map(m=>`${m.path} (${m.lines} lines)`);o=i.length===1?`Found 1 large file (${i[0].lines} lines). Consider if it can be decomposed into smaller units.`:`Found ${i.length} large files. Review for potential decomposition into smaller, focused modules.`,c=l;}return {rule_id:"RULE_005",title:"Large File Detected",message:o,severity:a,category:"COMPLEXITY",evidence:c.length>0?c:void 0,explanation:"Large files slow down code reviews, increase cognitive load, and make refactoring risky. They often indicate multiple responsibilities mixed together.",impact:"Onboarding takes 2-3x longer. Bugs are harder to locate. Testing becomes difficult.",effort:a==="HIGH"?"Medium":"Low",recommendations:["Extract business logic into service modules","Move data access into repository layer","Split route handlers by resource/entity","Create dedicated validation utilities"]}}},Hi={id:"RULE_006",name:"High Dependency Footprint",category:"DEPENDENCY",description:"Detects projects with excessive dependencies",severity:"MEDIUM",weight:8,evaluator:t=>t.metadata.total_dependencies>500?{rule_id:"RULE_006",title:"High Dependency Count",message:`Project has ${t.metadata.total_dependencies} dependencies (threshold: 500)`,severity:"MEDIUM",category:"DEPENDENCY",explanation:"Excessive dependencies increase attack surface, build time, and complexity.",impact:"Security vulnerabilities multiply. Updates become painful. Bundle size grows.",effort:"High",recommendations:["Audit dependencies with npm audit","Remove unused dependencies","Consolidate similar packages","Consider smaller alternatives"]}:null},zi={id:"RULE_007",name:"Missing README",category:"DOCUMENTATION",description:"README.md not found in root directory",severity:"LOW",weight:3,evaluator:t=>t.files.some(n=>n.path.toLowerCase()==="readme.md"||n.path.toLowerCase().endsWith("/readme.md"))?null:{rule_id:"RULE_007",title:"Missing README Documentation",message:"No README.md file found in project root",severity:"LOW",category:"DOCUMENTATION",explanation:"README is the first thing developers see. It should explain what the project does and how to use it.",impact:"Onboarding slows down. External contributions decrease.",effort:"Low",recommendations:["Create README.md with project overview","Include installation and setup instructions","Add usage examples and API documentation"]}},Wi={id:"RULE_008",name:"No Test Directory",category:"QUALITY",description:"Detects projects without test directories",severity:"MEDIUM",weight:8,evaluator:t=>t.files.some(n=>n.path.toLowerCase().includes("/test/")||n.path.toLowerCase().includes("/tests/")||n.path.toLowerCase().includes("/__tests__/")||n.path.toLowerCase().includes("/spec/")||n.path.toLowerCase().includes("/specs/")||n.path.toLowerCase().endsWith(".test.ts")||n.path.toLowerCase().endsWith(".test.tsx")||n.path.toLowerCase().endsWith(".spec.ts")||n.path.toLowerCase().endsWith(".spec.tsx")||n.path.toLowerCase().endsWith(".test.js")||n.path.toLowerCase().endsWith(".spec.js"))?null:{rule_id:"RULE_008",title:"No Test Suite Detected",message:"No test directory or test files found in project",severity:"MEDIUM",category:"QUALITY",explanation:"Tests catch bugs early, enable refactoring, and document expected behavior.",impact:"Bugs reach production. Refactoring is risky. Code quality degrades over time.",effort:"Medium",recommendations:["Set up testing framework (Jest, Vitest, etc.)","Start with critical path tests","Add tests for new features going forward","Aim for 70%+ coverage gradually"]}},Yi={id:"RULE_009",name:"Binary Files in Source",category:"REPOSITORY_HYGIENE",description:"Binary files detected in source tree",severity:"MEDIUM",weight:8,evaluator:t=>{let e=[".png",".jpg",".jpeg",".zip",".exe",".dll",".mp4"],n=t.files.filter(s=>{let i="."+s.extension.toLowerCase();return e.includes(i)}),r=n.length/t.metadata.total_files;return r>.05?{rule_id:"RULE_009",title:"Binary Files in Source",message:`Found ${n.length} binary files in source (${(r*100).toFixed(1)}% of total)`,severity:"MEDIUM",category:"REPOSITORY_HYGIENE",explanation:"Binary files bloat the repository and cannot be diffed effectively.",impact:"Clone times increase. Git operations slow down.",effort:"Low",recommendations:["Move binaries to external storage/CDN","Use Git LFS for large files if necessary","Keep images in separate assets repo"]}:null}},Zi={id:"RULE_010",name:"Build Artifacts Committed",category:"REPOSITORY_HYGIENE",description:"Compiled artifacts detected",severity:"HIGH",weight:15,evaluator:t=>{let e=t.files.filter(n=>n.path.includes("/dist/")||n.path.includes("/build/")||n.path.includes("/out/")||n.path.includes("/target/"));return e.length>0?{rule_id:"RULE_010",title:"Build Artifacts Committed",message:`Found ${e.length} build artifact files in source`,severity:"HIGH",category:"REPOSITORY_HYGIENE",explanation:"Build outputs should be generated during CI/CD, not committed. They cause merge conflicts.",impact:"Merge conflicts multiply. Repository size balloons unnecessarily.",effort:"Low",recommendations:["Remove dist/build folders from git","Add dist/ and build/ to .gitignore","Configure CI/CD to generate artifacts"]}:null}},Gi={id:"RULE_011",name:"Large Snapshot Size",category:"STRUCTURE",description:"Detects snapshots exceeding size limits",severity:"HIGH",weight:15,evaluator:t=>{let e=t.metadata.total_size_bytes/1048576;return e>5?{rule_id:"RULE_011",title:"Large Snapshot Size",message:`Snapshot size is ${e.toFixed(2)}MB (threshold: 5MB)`,severity:"HIGH",category:"STRUCTURE",explanation:"Very large repositories slow down all git operations and CI/CD.",impact:"Clone takes minutes. CI/CD pipelines slow. Developer productivity drops.",effort:"High",recommendations:["Split into microservices or monorepo packages","Remove large files from history","Use shallow clones in CI/CD"]}:null}},Ki={id:"RULE_012",name:"Configuration Files Missing",category:"QUALITY",description:"No package.json, requirements.txt, or equivalent found",severity:"LOW",weight:3,evaluator:t=>t.files.some(n=>{let r=n.path.split("/").pop()?.toLowerCase()||"";return r==="package.json"||r==="requirements.txt"||r==="cargo.toml"||r==="go.mod"||r==="pom.xml"})?null:{rule_id:"RULE_012",title:"Missing Dependency Configuration",message:"No recognized dependency configuration file found",severity:"LOW",category:"QUALITY",explanation:"A proper dependency file enables reproducible builds and version management.",impact:"New developers cannot install dependencies. Build is not reproducible.",effort:"Low",recommendations:["Add package.json for Node.js projects","Use appropriate config for your language (requirements.txt, Cargo.toml, etc.)","Commit lock files for reproducibility"]}},Ji={id:"RULE_013",name:"High Average File Size",category:"COMPLEXITY",description:"Average file size exceeds threshold",severity:"MEDIUM",weight:8,evaluator:t=>{let e=t.metadata.total_lines/t.metadata.total_files;return e>400?{rule_id:"RULE_013",title:"High Average File Size",message:`Average file size is ${e.toFixed(0)} lines (threshold: 400)`,severity:"MEDIUM",category:"COMPLEXITY",explanation:"When average file size is high, the codebase is likely to have structural issues.",impact:"Overall maintainability suffers. Code reviews take longer.",effort:"Medium",recommendations:["Review largest files for decomposition","Establish file size guidelines for team","Use lint rules to enforce limits"]}:null}},qi={id:"RULE_014",name:"Multiple Lock Files",category:"DEPENDENCY",description:"Multiple dependency lock files detected",severity:"LOW",weight:3,evaluator:t=>{let e=t.files.filter(n=>{let r=n.path.split("/").pop()?.toLowerCase()||"";return r==="package-lock.json"||r==="yarn.lock"||r==="pnpm-lock.yaml"||r==="bun.lockb"});return e.length>1?{rule_id:"RULE_014",title:"Multiple Lock Files Detected",message:`Found ${e.length} lock files (expected: 1)`,severity:"LOW",category:"DEPENDENCY",explanation:"Multiple lock files indicate different package managers being used, causing inconsistency.",impact:"Dependency versions may differ between environments. Confusion for developers.",effort:"Low",recommendations:["Choose one package manager (npm, yarn, or pnpm)","Delete lock files from other managers","Document chosen package manager in README"]}:null}},Xi={id:"RULE_015",name:"Hardcoded Secrets Detection",category:"SECURITY",description:"Detects hardcoded secrets in source files",severity:"CRITICAL",weight:25,evaluator:t=>{let e=["ts","tsx","js","jsx","json","yaml","yml","env","config","conf"],n=[{name:"Stripe API Key",pattern:/sk_(live|test)_[0-9a-zA-Z]{20,}/g,severity:"CRITICAL"},{name:"JWT Secret",pattern:/JWT_SECRET\s*=\s*["']([^"']{8,})["']/g,severity:"CRITICAL"},{name:"Database Password",pattern:/(DB_PASSWORD|DATABASE_URL)\s*=\s*["']([^"']+)["']/g,severity:"CRITICAL"},{name:"Private Key",pattern:/-----BEGIN (RSA )?PRIVATE KEY-----/g,severity:"CRITICAL"},{name:"Generic Secret Assignment",pattern:/(password|secret|token|api_key|apikey)\s*[:=]\s*["']([^"']{8,})["']/gi,severity:"HIGH"}],r=[];for(let s of t.files){if(s.is_binary||s.size_bytes>1024*1024)continue;let i=s.extension.toLowerCase();if(e.includes(i))try{let o=fr("fs"),a=fr("path"),c=t.project_root?a.join(t.project_root,s.path):s.path,l=o.readFileSync(c,"utf-8");for(let m of n){let T=l.matchAll(m.pattern);for(let C of T){let L=C[0].replace(/["']([^"']{4,})["']/g,'"****"');r.push({file:s.path,type:m.name,severity:m.severity,masked:L});}}}catch{continue}}if(r.length>0){let s=r.filter(a=>a.severity==="CRITICAL");r.filter(a=>a.severity==="HIGH");let o=r.slice(0,10).map(a=>`${a.file}: ${a.type} (${a.masked})`);return {rule_id:"RULE_015",title:"Hardcoded Secrets Detected",message:`Found ${r.length} hardcoded secret(s) in source code`,severity:s.length>0?"CRITICAL":"HIGH",category:"SECURITY",evidence:o,explanation:"Hardcoded secrets in source code are a critical security risk. They can be extracted from version history and used to compromise your systems.",impact:"Attackers can access your databases, APIs, and services. Credentials remain exposed forever in git history.",effort:"Medium",recommendations:["Move all secrets to environment variables","Use secret management services (AWS Secrets Manager, Doppler, etc.)","Rotate all exposed credentials immediately","Add pre-commit hooks to prevent future commits","Remove secrets from git history using git-filter-repo"]}}return null}},Qi=[Mi,$i,Fi,Vi,Bi,Hi,zi,Wi,Yi,Zi,Gi,Ki,Ji,qi,Xi],_r=class{options;constructor(t){this.options={maxFiles:100,includeRawContent:false,...t};}async scan(t){let e=await this.discoverFiles(),n=await this.extractDependencies(),r=this.options.framework||this.detectFramework(),s=this.detectLanguage(e),o=e.slice(0,this.options.maxFiles).map(c=>{let l=this.extractASTTokens(c.content,c.extension);return {path_hash:this.hash(c.path),content_hash:this.hash(c.content),extension:c.extension,size_bytes:c.size,ast_tokens:l.slice(0,500),raw_content:this.options.includeRawContent?c.content:void 0}}),a={framework:r,language:s,total_files:e.length,total_dependencies:n.length,file_types:this.calculateFileTypes(e)};return {version:re,project_id:ce__default.randomUUID(),session_id:t,generated_at:new Date().toISOString(),metadata:a,files:o,dependencies:n}}async discoverFiles(){let t=[],e=await glob(["**/*.{ts,tsx,js,jsx,json}"],{cwd:this.options.projectPath,ignore:["**/node_modules/**","**/.git/**","**/dist/**","**/build/**","**/.next/**","**/out/**","**/coverage/**","**/.veestack/**"],absolute:false});for(let n of e){let r=join(this.options.projectPath,n);try{let s=statSync(r);if(!s.isFile()||s.size>1024*1024)continue;let i=readFileSync(r,"utf-8"),o=n.split(".").pop()||"";t.push({path:n,content:i,extension:o,size:s.size});}catch{continue}}return t}extractASTTokens(t,e){let n=[],r=t.split(`
6
- `),s=new Set(["function","const","let","var","class","import","export","return","if","else","for","while","try","catch","eval","dangerouslySetInnerHTML","document","window"]),i=new Set(["eval","setTimeout","setInterval","Function","exec","innerHTML","document.write","dangerouslySetInnerHTML"]);return r.forEach((o,a)=>{let c=a+1;if(s.forEach(T=>{let C=new RegExp(`\\b${T}\\b`,"g"),L;for(;(L=C.exec(o))!==null;)n.push({type:"keyword",value:T,line:c,column:L.index+1});}),i.forEach(T=>{let C=new RegExp(`${T.replace(".","\\.")}\\s*\\(`,"g"),L;for(;(L=C.exec(o))!==null;)n.push({type:"call_expression",value:T,line:c,column:L.index+1});}),e==="tsx"||e==="jsx"){let T=/<[A-Z][a-zA-Z0-9]*/g,C;for(;(C=T.exec(o))!==null;)n.push({type:"jsx_element",value:C[0].substring(1),line:c,column:C.index+1});o.includes("dangerouslySetInnerHTML")&&n.push({type:"property_access",value:"dangerouslySetInnerHTML",line:c,column:o.indexOf("dangerouslySetInnerHTML")+1});}let l=/['"]([^'"]*)['"]/g,m;for(;(m=l.exec(o))!==null;){let T=m[1];(T.includes(".env")||T.includes(".pem")||T.includes(".key"))&&n.push({type:"string",value:T,line:c,column:m.index+1});}}),n}async extractDependencies(){let t=[];try{let e=join(this.options.projectPath,"package.json");if(!existsSync(e))return t;let n=JSON.parse(readFileSync(e,"utf-8")),r=(s,i)=>{for(let[o,a]of Object.entries(s)){let c=a.match(/^(\d+)\.(\d+)/),l=c?parseInt(c[1]):0;t.push({name_hash:this.hash(o),version:a.replace(/[^\d.]/g,""),major_version:l,category:i});}};n.dependencies&&r(n.dependencies,"production"),n.devDependencies&&r(n.devDependencies,"development"),n.peerDependencies&&r(n.peerDependencies,"peer");}catch{}return t}detectFramework(){let t=this.options.projectPath;if(existsSync(join(t,"next.config.js"))||existsSync(join(t,"next.config.mjs"))||existsSync(join(t,"next.config.ts")))return "nextjs";try{let e=JSON.parse(readFileSync(join(t,"package.json"),"utf-8"));if(e.dependencies?.next)return "nextjs";if(e.dependencies?.react)return "react";if(e.dependencies?.vue)return "vue";if(e.dependencies?.["@angular/core"])return "angular";if(e.dependencies?.svelte)return "svelte"}catch{}return "node"}detectLanguage(t){let e=0,n=0;return t.forEach(r=>{r.extension==="ts"||r.extension==="tsx"?e++:(r.extension==="js"||r.extension==="jsx")&&n++;}),e>0&&n>0?"mixed":e>0?"typescript":"javascript"}calculateFileTypes(t){let e={};return t.forEach(n=>{let r=n.extension||"unknown";e[r]=(e[r]||0)+1;}),e}hash(t){return ce__default.createHash("sha256").update(t).digest("hex")}};});var $r=[/^--token[=\s]/i,/^-t[=\s]/i,/^--api-key[=\s]/i,/^--apikey[=\s]/i,/^--key[=\s]/i,/^--auth[=\s]/i,/^--bearer[=\s]/i,/token[=:]\s*[a-zA-Z0-9_-]{10,}/i,/api[_-]?key[=:]\s*[a-zA-Z0-9_-]{10,}/i],Ze=/vs_[a-zA-Z0-9_-]{20,}/i;function Rn(){let t=process.argv.slice(2);for(let e of t){for(let n of $r)n.test(e)&&(console.error(w.red(`
7
- \u274C Security Error: Token detected in command line arguments`)),console.error(w.yellow(`
8
- Passing tokens via CLI arguments is not allowed.`)),console.error(w.yellow("This prevents tokens from being saved in shell history (~/.bash_history, ~/.zsh_history)")),console.error(w.gray(`
9
- Instead, use:`)),console.error(w.cyan(" veestack login")),console.error(w.gray(`
10
- Or set via environment variable:`)),console.error(w.cyan(" export VEESTACK_API_KEY=your_key")),console.error(w.gray(`
5
+ Please check your .env file and ensure all required variables are set.`)}throw t}}function mo(){return vn||(vn=go()),vn}function ho(t=po.api.rateLimit){let{windowMs:e,maxRequests:n,message:r}=t;return {check(s){let o=Date.now(),a=Ve.get(s);a&&o>a.resetTime&&Ve.delete(s);let i=Ve.get(s)||{count:0,resetTime:o+e};return i.count>=n?{success:false,remaining:0,resetTime:i.resetTime,error:r||"Too many requests"}:(i.count++,Ve.set(s,i),{success:true,remaining:n-i.count,resetTime:i.resetTime})},reset(s){Ve.delete(s);},cleanup(){let s=Date.now();for(let[o,a]of Ve.entries())s>a.resetTime&&Ve.delete(o);}}}var po,fo,vn,k,ir,Vt,E,Ve,re=G(()=>{dn();dn();or();po={versions:{cli:ye,engine:ye,frontend:ye,api:un,snapshot:oe,engine_target:Ke},analysis:{maxFileSize:2*1024*1024,maxFileCount:2e3,maxDependencyCount:2e3,maxDirectoryDepth:10,timeout:5e3},scoring:{baseScore:100,CRITICAL:25,HIGH:15,MEDIUM:8,LOW:3,severityBands:{HEALTHY:{min:90,max:100},STABLE:{min:75,max:89},STRUCTURAL_CONCERN:{min:60,max:74},HIGH_RISK:{min:0,max:59}}},api:{rateLimit:{windowMs:900*1e3,maxRequests:100},timeout:1e4},snapshot:{schemaVersion:oe,engineTargetVersion:Ke},usage:{free:{scansPerMonth:3,retentionDays:7},pro:{scansPerMonth:100,retentionDays:90}},security:{bcryptRounds:10,jwtExpiration:"7d",maxLoginAttempts:5,lockoutDuration:900*1e3},storage:{bucketName:"snapshots",maxRetries:3,chunkSize:1024*1024},ui:{maxFindingsPerPage:50,maxReportHistory:100}},p.object({snapshot_version:p.string(),engine_target_version:p.string(),project_id:p.string(),generated_at:p.string(),root_path_hash:p.string(),metadata:p.object({total_files:p.number().int().nonnegative(),total_dependencies:p.number().int().nonnegative(),total_size_bytes:p.number().int().nonnegative(),total_lines:p.number().int().nonnegative(),max_directory_depth:p.number().int().nonnegative(),language_breakdown:p.record(p.string(),p.number().int().nonnegative())}),files:p.array(p.object({id:p.string(),path_hash:p.string(),depth:p.number().int().nonnegative(),size_bytes:p.number().int().nonnegative(),estimated_lines:p.number().int().nonnegative(),extension:p.string(),is_binary:p.boolean(),import_count:p.number().int().nonnegative().optional(),function_count:p.number().int().nonnegative().optional(),class_count:p.number().int().nonnegative().optional()})),dependencies:p.array(p.object({id:p.string(),name_hash:p.string(),major_version:p.number().int().nonnegative(),minor_version:p.number().int().nonnegative(),category:p.enum(["dev","prod","peer"])}))}),p.object({name:p.string().min(1).max(100)}),p.object({analysis_version:p.string(),snapshot_schema_version:p.string(),total_score:p.number().min(0).max(100),severity_band:p.enum(["HEALTHY","STABLE","STRUCTURAL_CONCERN","HIGH_RISK"]),engines:p.array(p.object({engine_name:p.string(),score_impact:p.number(),risk_level:p.enum(["HEALTHY","STABLE","STRUCTURAL_CONCERN","HIGH_RISK"]),metrics:p.record(p.number()),findings:p.array(p.object({rule_id:p.string(),title:p.string(),message:p.string(),severity:p.enum(["CRITICAL","HIGH","MEDIUM","LOW"]),category:p.enum(["SECURITY","STRUCTURE","COMPLEXITY","DEPENDENCY","REPOSITORY_HYGIENE","DOCUMENTATION","QUALITY"]),evidence:p.array(p.string()).optional(),explanation:p.string().optional(),impact:p.string().optional(),effort:p.enum(["Low","Medium","High"]).optional(),recommendations:p.array(p.string()).optional()}))})),summary:p.object({total_findings:p.number().int().nonnegative(),critical_count:p.number().int().nonnegative(),high_count:p.number().int().nonnegative(),medium_count:p.number().int().nonnegative(),low_count:p.number().int().nonnegative(),categories:p.record(p.string(),p.number().int().nonnegative())}),generated_at:p.string()}),fo=p.object({NEXT_PUBLIC_SUPABASE_URL:p.string().url("Invalid SUPABASE_URL"),NEXT_PUBLIC_SUPABASE_ANON_KEY:p.string().min(1,"SUPABASE_ANON_KEY is required"),SUPABASE_SERVICE_ROLE_KEY:p.string().min(1,"SERVICE_ROLE_KEY is required"),NODE_ENV:p.enum(["development","production","test"],{errorMap:()=>({message:"NODE_ENV must be development, production, or test"})}),JWT_SECRET:p.string().min(32,"JWT_SECRET must be at least 32 characters").optional()});vn=null;new Proxy({},{get(t,e){return mo()[e]}}),k={plans:{FREE:{name:"free",scansPerMonth:10,projects:3,snapshots:10,reports:10,maxFileSizeMB:5,maxFilesPerSnapshot:100,storageMB:100,teamMembers:1,support:"community",features:["basic-analysis","security-scan"]},PRO:{name:"pro",scansPerMonth:-1,projects:-1,snapshots:-1,reports:-1,maxFileSizeMB:50,maxFilesPerSnapshot:1e3,storageMB:1e4,teamMembers:10,support:"priority",features:["basic-analysis","security-scan","advanced-analytics","api-access","team-collaboration","priority-support"]}},roles:{MEMBER:"member",SUPPORT:"support",ADMIN:"admin",OWNER:"owner"},permissions:{PROJECT_READ:"project:read",PROJECT_CREATE:"project:create",PROJECT_UPDATE:"project:update",PROJECT_DELETE:"project:delete",SNAPSHOT_READ:"snapshot:read",SNAPSHOT_CREATE:"snapshot:create",SNAPSHOT_DELETE:"snapshot:delete",REPORT_READ:"report:read",REPORT_DOWNLOAD:"report:download",TEAM_READ:"team:read",TEAM_INVITE:"team:invite",TEAM_REMOVE:"team:remove",USER_READ:"user:read",USER_UPDATE:"user:update",USER_DELETE:"user:delete",SYSTEM_MANAGE:"system:manage",ALL:"*",READ_OWN:"read:own",CREATE_OWN:"create:own",UPDATE_OWN:"update:own",DELETE_OWN:"delete:own",READ_ALL:"read:all",CREATE_ALL:"create:all",UPDATE_ALL:"update:all",DELETE_ALL:"delete:all",SCAN_OWN:"scan:own",REPORT_OWN:"report:own",ANALYTICS_VIEW:"analytics:view",SUPPORT_ACCESS:"support:access",SUPPORT_VIEW_TICKETS:"support:view-tickets"},features:{BASIC_ANALYSIS:"basic-analysis",SECURITY_SCAN:"security-scan",ADVANCED_ANALYTICS:"advanced-analytics",API_ACCESS:"api-access",TEAM_COLLAB:"team-collaboration",PRIORITY_SUPPORT:"priority-support"}},ir={FREE:k.plans.FREE.name,PRO:k.plans.PRO.name},{BASIC_ANALYSIS:k.features.BASIC_ANALYSIS,SECURITY_SCAN:k.features.SECURITY_SCAN,ADVANCED_ANALYTICS:k.features.ADVANCED_ANALYTICS,API_ACCESS:k.features.API_ACCESS,TEAM_COLLAB:k.features.TEAM_COLLAB,PRIORITY_SUPPORT:k.features.PRIORITY_SUPPORT},{[ir.FREE]:k.plans.FREE,[ir.PRO]:k.plans.PRO},Vt={MEMBER:k.roles.MEMBER,SUPPORT:k.roles.SUPPORT,ADMIN:k.roles.ADMIN,OWNER:k.roles.OWNER},E={PROJECT_READ:k.permissions.PROJECT_READ,PROJECT_CREATE:k.permissions.PROJECT_CREATE,PROJECT_UPDATE:k.permissions.PROJECT_UPDATE,PROJECT_DELETE:k.permissions.PROJECT_DELETE,SNAPSHOT_READ:k.permissions.SNAPSHOT_READ,SNAPSHOT_CREATE:k.permissions.SNAPSHOT_CREATE,SNAPSHOT_DELETE:k.permissions.SNAPSHOT_DELETE,REPORT_READ:k.permissions.REPORT_READ,REPORT_DOWNLOAD:k.permissions.REPORT_DOWNLOAD,TEAM_READ:k.permissions.TEAM_READ,TEAM_INVITE:k.permissions.TEAM_INVITE,TEAM_REMOVE:k.permissions.TEAM_REMOVE,USER_READ:k.permissions.USER_READ,USER_UPDATE:k.permissions.USER_UPDATE,USER_DELETE:k.permissions.USER_DELETE,SYSTEM_MANAGE:k.permissions.SYSTEM_MANAGE,ALL:k.permissions.ALL,READ_OWN:k.permissions.READ_OWN,CREATE_OWN:k.permissions.CREATE_OWN,UPDATE_OWN:k.permissions.UPDATE_OWN,DELETE_OWN:k.permissions.DELETE_OWN,READ_ALL:k.permissions.READ_ALL,CREATE_ALL:k.permissions.CREATE_ALL,UPDATE_ALL:k.permissions.UPDATE_ALL,DELETE_ALL:k.permissions.DELETE_ALL,SCAN_OWN:k.permissions.SCAN_OWN,REPORT_OWN:k.permissions.REPORT_OWN,ANALYTICS_VIEW:k.permissions.ANALYTICS_VIEW,SUPPORT_ACCESS:k.permissions.SUPPORT_ACCESS,SUPPORT_VIEW_TICKETS:k.permissions.SUPPORT_VIEW_TICKETS},{[Vt.MEMBER]:[E.READ_OWN,E.CREATE_OWN,E.UPDATE_OWN,E.DELETE_OWN,E.SCAN_OWN,E.REPORT_OWN,E.PROJECT_READ,E.PROJECT_CREATE,E.PROJECT_UPDATE,E.PROJECT_DELETE,E.SNAPSHOT_READ,E.SNAPSHOT_CREATE,E.SNAPSHOT_DELETE,E.REPORT_READ,E.REPORT_DOWNLOAD],[Vt.SUPPORT]:[E.READ_ALL,E.PROJECT_READ,E.SNAPSHOT_READ,E.REPORT_READ,E.USER_READ,E.SUPPORT_ACCESS,E.SUPPORT_VIEW_TICKETS],[Vt.ADMIN]:[E.READ_ALL,E.CREATE_ALL,E.UPDATE_ALL,E.DELETE_ALL,E.USER_READ,E.USER_UPDATE,E.USER_DELETE,E.SYSTEM_MANAGE,E.REPORT_READ,E.ANALYTICS_VIEW],[Vt.OWNER]:[E.ALL]},{projects:{read:E.PROJECT_READ,create:E.PROJECT_CREATE,update:E.PROJECT_UPDATE,delete:E.PROJECT_DELETE},snapshots:{read:E.SNAPSHOT_READ,create:E.SNAPSHOT_CREATE,delete:E.SNAPSHOT_DELETE},reports:{read:E.REPORT_READ},users:{read:E.USER_READ,update:E.USER_UPDATE}},Ve=new Map;ho();});var tn,nn,Er=G(()=>{tn={BASE_SCORE:100,MIN_SCORE:0,MAX_SCORE:100},nn={HEALTHY:{min:90,max:100},STABLE:{min:75,max:89},STRUCTURAL_CONCERN:{min:60,max:74},HIGH_RISK:{min:0,max:59}};});var Rn={};$n(Rn,{CoreEngine:()=>Xo,ProjectScanner:()=>br,RULES:()=>gi,ReportGenerator:()=>Rr,RuleRegistry:()=>Ar,ScoringEngine:()=>xr,SnapshotValidator:()=>Tr,scanProject:()=>yi});async function yi(t,e,n){return new br({projectPath:t,...n}).scan(e)}var Sr,Tr,Ar,xr,Rr,Xo,Qo,ei,ti,ni,ri,si,oi,ii,ai,ci,li,ui,di,pi,fi,gi,br,bn=G(()=>{Er();re();re();Sr=(t=>typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>e[n]}):t)(function(t){throw Error('Dynamic require of "'+t+'" is not supported')}),Tr=class{validate(t){let e=[];return t.snapshot_version||e.push("Missing snapshot_version"),t.engine_target_version||e.push("Missing engine_target_version"),(!t.files||!Array.isArray(t.files))&&e.push("Invalid or missing files array"),(!t.dependencies||!Array.isArray(t.dependencies))&&e.push("Invalid or missing dependencies array"),t.files&&t.files.length>2e3&&e.push("File count exceeds maximum limit of 2000"),{valid:e.length===0,error:e.length>0?e.join(", "):void 0}}},Ar=class{rules=[];register(t){this.rules.push(t);}executeAllRules(t){let e=[],n=[...this.rules].sort((r,s)=>r.id.localeCompare(s.id));for(let r of n)try{let s=r.evaluator(t);s&&e.push({rule_id:r.id,severity:s.severity,weight:r.weight,title:s.title,message:s.message,category:s.category,evidence:s.evidence,explanation:s.explanation,impact:s.impact,effort:s.effort,recommendations:s.recommendations});}catch{}return e}},xr=class{calculateScore(t){let e=tn.BASE_SCORE;for(let n of t)e-=n.weight;return Math.max(tn.MIN_SCORE,Math.min(tn.MAX_SCORE,e))}getSeverityBand(t){return t>=nn.HEALTHY.min?"HEALTHY":t>=nn.STABLE.min?"STABLE":t>=nn.STRUCTURAL_CONCERN.min?"STRUCTURAL_CONCERN":"HIGH_RISK"}},Rr=class{generateReport(t,e,n,r){let s=e.map(i=>({rule_id:i.rule_id,title:i.title,message:i.message,severity:i.severity,category:i.category,evidence:i.evidence,explanation:i.explanation,impact:i.impact,effort:i.effort,recommendations:i.recommendations})),o=this.generateSummary(e),a={engine_name:"VeeStack Core Engine",score_impact:100-n,risk_level:r,metrics:{total_files:t.metadata.total_files,total_dependencies:t.metadata.total_dependencies,total_size_bytes:t.metadata.total_size_bytes,max_directory_depth:t.metadata.max_directory_depth},findings:s};return {analysis_version:oe,snapshot_schema_version:t.snapshot_version,total_score:n,severity_band:r,engines:[a],summary:o,generated_at:new Date().toISOString()}}generateSummary(t){let e={};for(let n of t){let r=this.getCategoryFromRuleId(n.rule_id);e[r]=(e[r]||0)+1;}return {total_findings:t.length,critical_count:t.filter(n=>n.severity==="CRITICAL").length,high_count:t.filter(n=>n.severity==="HIGH").length,medium_count:t.filter(n=>n.severity==="MEDIUM").length,low_count:t.filter(n=>n.severity==="LOW").length,categories:e}}getCategoryFromRuleId(t){let e=t.split("_")[0];return {SEC:"SECURITY",STR:"STRUCTURE",COM:"COMPLEXITY",DEP:"DEPENDENCY",HYG:"REPOSITORY_HYGIENE",DOC:"DOCUMENTATION",QUA:"QUALITY"}[e]||"OTHER"}},Xo=class{validator;ruleRegistry;scoringEngine;reportGenerator;constructor(){this.validator=new Tr,this.ruleRegistry=new Ar,this.scoringEngine=new xr,this.reportGenerator=new Rr;}registerRule(t){this.ruleRegistry.register(t);}async analyze(t){let e=this.validator.validate(t);if(!e.valid)return {success:false,error:{error:e.error,code:400}};let n=this.ruleRegistry.executeAllRules(t),r=this.scoringEngine.calculateScore(n),s=this.scoringEngine.getSeverityBand(r);return {success:true,report:this.reportGenerator.generateReport(t,n,r,s)}}},Qo={id:"RULE_001",name:"Environment File Committed",category:"SECURITY",description:"Sensitive environment configuration file detected in repository",severity:"CRITICAL",weight:25,evaluator:t=>{let e=t.files.filter(n=>n.path_hash.endsWith(".env")||n.path_hash.endsWith(".env.local")||n.path_hash.endsWith(".env.development")||n.path_hash.endsWith(".env.production")||n.path_hash.endsWith(".pem")||n.path_hash.endsWith(".key"));return e.length>0?{rule_id:"RULE_001",title:"Sensitive Environment File Detected",message:`Found ${e.length} environment configuration files in source`,severity:"CRITICAL",category:"SECURITY",evidence:e.map(n=>n.path),explanation:"Environment files often contain passwords, API keys, and secrets. Committing them exposes credentials in version history.",impact:"Security breach risk. Credentials may be exposed to anyone with repository access.",effort:"Low",recommendations:["Add .env files to .gitignore immediately","Rotate any exposed credentials","Use environment variable managers like doppler or 1password","Document proper environment setup in README"]}:null}},ei={id:"RULE_002",name:"Node Modules in Snapshot",category:"REPOSITORY_HYGIENE",description:"node_modules directory detected in snapshot",severity:"HIGH",weight:15,evaluator:t=>{let e=t.files.filter(n=>n.path_hash.includes("node_modules"));return e.length>0?{rule_id:"RULE_002",title:"Node Modules in Repository",message:`Found ${e.length} files in node_modules directory`,severity:"HIGH",category:"REPOSITORY_HYGIENE",evidence:["node_modules detected"],explanation:"node_modules should never be committed. It bloats the repo and causes merge conflicts.",impact:"Repository size increases by 100MB+. CI/CD slows down. Merge conflicts multiply.",effort:"Low",recommendations:["Add node_modules to .gitignore","Remove node_modules from git history","Ensure package.json and lock files are committed","Document npm install step in README"]}:null}},ti={id:"RULE_003",name:"Excessive File Count",category:"STRUCTURE",description:"Project contains unusually high number of files",severity:"HIGH",weight:15,evaluator:t=>t.metadata.total_files>5e3?{rule_id:"RULE_003",title:"Excessive File Count",message:`Project contains ${t.metadata.total_files} files (threshold: 5000)`,severity:"HIGH",category:"STRUCTURE",explanation:"High file count increases cognitive load and slows down development.",impact:"Onboarding takes 2-3x longer. CI/CD more complex. Tooling inconsistent.",effort:"High",recommendations:["Split large projects into smaller sub-projects","Remove unused or redundant files","Consider a monorepo structure"]}:null},ni={id:"RULE_004",name:"Deep Directory Nesting",category:"STRUCTURE",description:"Directory depth exceeds maintainable structure",severity:"MEDIUM",weight:8,evaluator:t=>t.metadata.max_directory_depth>10?{rule_id:"RULE_004",title:"Deeply Nested Directory Structure",message:`Maximum directory depth is ${t.metadata.max_directory_depth} levels (threshold: 10)`,severity:"MEDIUM",category:"STRUCTURE",explanation:"Deep nesting makes imports verbose and navigation difficult.",impact:"Developer productivity decreases. File paths become unmanageable.",effort:"Medium",recommendations:["Flatten directory structure where possible","Use barrel exports (index.ts) to simplify imports","Consolidate related modules"]}:null},ri={id:"RULE_005",name:"Large Single Files",category:"COMPLEXITY",description:"Detects files exceeding size thresholds with language-aware limits",severity:"MEDIUM",weight:15,evaluator:t=>{let e=[/\.(generated|auto|min|bundle|spec)\.\w+$/i,/\.(test|spec)\.(ts|tsx|js|jsx)$/i,/\d{14}_/i,/migration/i,/\.config\./i,/\.d\.ts$/i,/lock\.json$/i,/\.lock$/i,/\.lockb$/i,/pnpm-lock\.yaml$/i,/\.tsbuildinfo$/i,/\.sql$/i,/\.csv$/i,/\.json$/i,/node_modules/i,/dist\//i,/build\//i,/out\//i],n={tsx:{warning:400,critical:800},jsx:{warning:400,critical:800},ts:{warning:600,critical:1200},js:{warning:500,critical:1e3},py:{warning:800,critical:1600},java:{warning:800,critical:1500},cs:{warning:800,critical:1500},go:{warning:400,critical:800},rb:{warning:500,critical:1e3},php:{warning:600,critical:1200},c:{warning:800,critical:1500},cpp:{warning:800,critical:1500},default:{warning:600,critical:1200}},r=[];for(let l of t.files){if(l.is_binary||e.some(j=>j.test(l.path)))continue;let T=l.extension.toLowerCase(),b=n[T]||n.default;l.estimated_lines>b.critical?r.push({path:l.path,lines:l.estimated_lines,threshold:b.critical,level:"critical"}):l.estimated_lines>b.warning&&r.push({path:l.path,lines:l.estimated_lines,threshold:b.warning,level:"warning"});}if(r.length===0)return null;let s=r.filter(l=>l.level==="critical"),o=r.filter(l=>l.level==="warning"),a,i,c;if(s.length>0){i="HIGH";let l=s.slice(0,3).map(d=>`${d.path} (${d.lines} lines)`);a=s.length===1?`Found 1 very large file (${s[0].lines} lines). Consider splitting into smaller modules with single responsibilities.`:`Found ${s.length} very large files (>${s[0].threshold} lines each). Splitting into smaller modules will improve maintainability and testability.`,c=l;}else {i="MEDIUM";let l=o.slice(0,3).map(d=>`${d.path} (${d.lines} lines)`);a=o.length===1?`Found 1 large file (${o[0].lines} lines). Consider if it can be decomposed into smaller units.`:`Found ${o.length} large files. Review for potential decomposition into smaller, focused modules.`,c=l;}return {rule_id:"RULE_005",title:"Large File Detected",message:a,severity:i,category:"COMPLEXITY",evidence:c.length>0?c:void 0,explanation:"Large files slow down code reviews, increase cognitive load, and make refactoring risky. They often indicate multiple responsibilities mixed together.",impact:"Onboarding takes 2-3x longer. Bugs are harder to locate. Testing becomes difficult.",effort:i==="HIGH"?"Medium":"Low",recommendations:["Extract business logic into service modules","Move data access into repository layer","Split route handlers by resource/entity","Create dedicated validation utilities"]}}},si={id:"RULE_006",name:"High Dependency Footprint",category:"DEPENDENCY",description:"Detects projects with excessive dependencies",severity:"MEDIUM",weight:8,evaluator:t=>t.metadata.total_dependencies>500?{rule_id:"RULE_006",title:"High Dependency Count",message:`Project has ${t.metadata.total_dependencies} dependencies (threshold: 500)`,severity:"MEDIUM",category:"DEPENDENCY",explanation:"Excessive dependencies increase attack surface, build time, and complexity.",impact:"Security vulnerabilities multiply. Updates become painful. Bundle size grows.",effort:"High",recommendations:["Audit dependencies with npm audit","Remove unused dependencies","Consolidate similar packages","Consider smaller alternatives"]}:null},oi={id:"RULE_007",name:"Missing README",category:"DOCUMENTATION",description:"README.md not found in root directory",severity:"LOW",weight:3,evaluator:t=>t.files.some(n=>n.path.toLowerCase()==="readme.md"||n.path.toLowerCase().endsWith("/readme.md"))?null:{rule_id:"RULE_007",title:"Missing README Documentation",message:"No README.md file found in project root",severity:"LOW",category:"DOCUMENTATION",explanation:"README is the first thing developers see. It should explain what the project does and how to use it.",impact:"Onboarding slows down. External contributions decrease.",effort:"Low",recommendations:["Create README.md with project overview","Include installation and setup instructions","Add usage examples and API documentation"]}},ii={id:"RULE_008",name:"No Test Directory",category:"QUALITY",description:"Detects projects without test directories",severity:"MEDIUM",weight:8,evaluator:t=>t.files.some(n=>n.path.toLowerCase().includes("/test/")||n.path.toLowerCase().includes("/tests/")||n.path.toLowerCase().includes("/__tests__/")||n.path.toLowerCase().includes("/spec/")||n.path.toLowerCase().includes("/specs/")||n.path.toLowerCase().endsWith(".test.ts")||n.path.toLowerCase().endsWith(".test.tsx")||n.path.toLowerCase().endsWith(".spec.ts")||n.path.toLowerCase().endsWith(".spec.tsx")||n.path.toLowerCase().endsWith(".test.js")||n.path.toLowerCase().endsWith(".spec.js"))?null:{rule_id:"RULE_008",title:"No Test Suite Detected",message:"No test directory or test files found in project",severity:"MEDIUM",category:"QUALITY",explanation:"Tests catch bugs early, enable refactoring, and document expected behavior.",impact:"Bugs reach production. Refactoring is risky. Code quality degrades over time.",effort:"Medium",recommendations:["Set up testing framework (Jest, Vitest, etc.)","Start with critical path tests","Add tests for new features going forward","Aim for 70%+ coverage gradually"]}},ai={id:"RULE_009",name:"Binary Files in Source",category:"REPOSITORY_HYGIENE",description:"Binary files detected in source tree",severity:"MEDIUM",weight:8,evaluator:t=>{let e=[".png",".jpg",".jpeg",".zip",".exe",".dll",".mp4"],n=t.files.filter(s=>{let o="."+s.extension.toLowerCase();return e.includes(o)}),r=n.length/t.metadata.total_files;return r>.05?{rule_id:"RULE_009",title:"Binary Files in Source",message:`Found ${n.length} binary files in source (${(r*100).toFixed(1)}% of total)`,severity:"MEDIUM",category:"REPOSITORY_HYGIENE",explanation:"Binary files bloat the repository and cannot be diffed effectively.",impact:"Clone times increase. Git operations slow down.",effort:"Low",recommendations:["Move binaries to external storage/CDN","Use Git LFS for large files if necessary","Keep images in separate assets repo"]}:null}},ci={id:"RULE_010",name:"Build Artifacts Committed",category:"REPOSITORY_HYGIENE",description:"Compiled artifacts detected",severity:"HIGH",weight:15,evaluator:t=>{let e=t.files.filter(n=>n.path.includes("/dist/")||n.path.includes("/build/")||n.path.includes("/out/")||n.path.includes("/target/"));return e.length>0?{rule_id:"RULE_010",title:"Build Artifacts Committed",message:`Found ${e.length} build artifact files in source`,severity:"HIGH",category:"REPOSITORY_HYGIENE",explanation:"Build outputs should be generated during CI/CD, not committed. They cause merge conflicts.",impact:"Merge conflicts multiply. Repository size balloons unnecessarily.",effort:"Low",recommendations:["Remove dist/build folders from git","Add dist/ and build/ to .gitignore","Configure CI/CD to generate artifacts"]}:null}},li={id:"RULE_011",name:"Large Snapshot Size",category:"STRUCTURE",description:"Detects snapshots exceeding size limits",severity:"HIGH",weight:15,evaluator:t=>{let e=t.metadata.total_size_bytes/1048576;return e>5?{rule_id:"RULE_011",title:"Large Snapshot Size",message:`Snapshot size is ${e.toFixed(2)}MB (threshold: 5MB)`,severity:"HIGH",category:"STRUCTURE",explanation:"Very large repositories slow down all git operations and CI/CD.",impact:"Clone takes minutes. CI/CD pipelines slow. Developer productivity drops.",effort:"High",recommendations:["Split into microservices or monorepo packages","Remove large files from history","Use shallow clones in CI/CD"]}:null}},ui={id:"RULE_012",name:"Configuration Files Missing",category:"QUALITY",description:"No package.json, requirements.txt, or equivalent found",severity:"LOW",weight:3,evaluator:t=>t.files.some(n=>{let r=n.path.split("/").pop()?.toLowerCase()||"";return r==="package.json"||r==="requirements.txt"||r==="cargo.toml"||r==="go.mod"||r==="pom.xml"})?null:{rule_id:"RULE_012",title:"Missing Dependency Configuration",message:"No recognized dependency configuration file found",severity:"LOW",category:"QUALITY",explanation:"A proper dependency file enables reproducible builds and version management.",impact:"New developers cannot install dependencies. Build is not reproducible.",effort:"Low",recommendations:["Add package.json for Node.js projects","Use appropriate config for your language (requirements.txt, Cargo.toml, etc.)","Commit lock files for reproducibility"]}},di={id:"RULE_013",name:"High Average File Size",category:"COMPLEXITY",description:"Average file size exceeds threshold",severity:"MEDIUM",weight:8,evaluator:t=>{let e=t.metadata.total_lines/t.metadata.total_files;return e>400?{rule_id:"RULE_013",title:"High Average File Size",message:`Average file size is ${e.toFixed(0)} lines (threshold: 400)`,severity:"MEDIUM",category:"COMPLEXITY",explanation:"When average file size is high, the codebase is likely to have structural issues.",impact:"Overall maintainability suffers. Code reviews take longer.",effort:"Medium",recommendations:["Review largest files for decomposition","Establish file size guidelines for team","Use lint rules to enforce limits"]}:null}},pi={id:"RULE_014",name:"Multiple Lock Files",category:"DEPENDENCY",description:"Multiple dependency lock files detected",severity:"LOW",weight:3,evaluator:t=>{let e=t.files.filter(n=>{let r=n.path.split("/").pop()?.toLowerCase()||"";return r==="package-lock.json"||r==="yarn.lock"||r==="pnpm-lock.yaml"||r==="bun.lockb"});return e.length>1?{rule_id:"RULE_014",title:"Multiple Lock Files Detected",message:`Found ${e.length} lock files (expected: 1)`,severity:"LOW",category:"DEPENDENCY",explanation:"Multiple lock files indicate different package managers being used, causing inconsistency.",impact:"Dependency versions may differ between environments. Confusion for developers.",effort:"Low",recommendations:["Choose one package manager (npm, yarn, or pnpm)","Delete lock files from other managers","Document chosen package manager in README"]}:null}},fi={id:"RULE_015",name:"Hardcoded Secrets Detection",category:"SECURITY",description:"Detects hardcoded secrets in source files",severity:"CRITICAL",weight:25,evaluator:t=>{let e=["ts","tsx","js","jsx","json","yaml","yml","env","config","conf"],n=[{name:"Stripe API Key",pattern:/sk_(live|test)_[0-9a-zA-Z]{20,}/g,severity:"CRITICAL"},{name:"JWT Secret",pattern:/JWT_SECRET\s*=\s*["']([^"']{8,})["']/g,severity:"CRITICAL"},{name:"Database Password",pattern:/(DB_PASSWORD|DATABASE_URL)\s*=\s*["']([^"']+)["']/g,severity:"CRITICAL"},{name:"Private Key",pattern:/-----BEGIN (RSA )?PRIVATE KEY-----/g,severity:"CRITICAL"},{name:"Generic Secret Assignment",pattern:/(password|secret|token|api_key|apikey)\s*[:=]\s*["']([^"']{8,})["']/gi,severity:"HIGH"}],r=[];for(let s of t.files){if(s.is_binary||s.size_bytes>1024*1024)continue;let o=s.extension.toLowerCase();if(e.includes(o))try{let a=Sr("fs"),i=Sr("path"),c=t.project_root?i.join(t.project_root,s.path):s.path,l=a.readFileSync(c,"utf-8");for(let d of n){let T=l.matchAll(d.pattern);for(let b of T){let j=b[0].replace(/["']([^"']{4,})["']/g,'"****"');r.push({file:s.path,type:d.name,severity:d.severity,masked:j});}}}catch{continue}}if(r.length>0){let s=r.filter(i=>i.severity==="CRITICAL");r.filter(i=>i.severity==="HIGH");let a=r.slice(0,10).map(i=>`${i.file}: ${i.type} (${i.masked})`);return {rule_id:"RULE_015",title:"Hardcoded Secrets Detected",message:`Found ${r.length} hardcoded secret(s) in source code`,severity:s.length>0?"CRITICAL":"HIGH",category:"SECURITY",evidence:a,explanation:"Hardcoded secrets in source code are a critical security risk. They can be extracted from version history and used to compromise your systems.",impact:"Attackers can access your databases, APIs, and services. Credentials remain exposed forever in git history.",effort:"Medium",recommendations:["Move all secrets to environment variables","Use secret management services (AWS Secrets Manager, Doppler, etc.)","Rotate all exposed credentials immediately","Add pre-commit hooks to prevent future commits","Remove secrets from git history using git-filter-repo"]}}return null}},gi=[Qo,ei,ti,ni,ri,si,oi,ii,ai,ci,li,ui,di,pi,fi],br=class{options;constructor(t){this.options={maxFiles:100,includeRawContent:false,...t};}async scan(t){let e=await this.discoverFiles(),n=await this.extractDependencies(),r=this.options.framework||this.detectFramework(),s=this.detectLanguage(e),a=e.slice(0,this.options.maxFiles).map(c=>{let l=this.extractASTTokens(c.content,c.extension);return {path_hash:this.hash(c.path),content_hash:this.hash(c.content),extension:c.extension,size_bytes:c.size,ast_tokens:l.slice(0,500),raw_content:this.options.includeRawContent?c.content:void 0}}),i={framework:r,language:s,total_files:e.length,total_dependencies:n.length,file_types:this.calculateFileTypes(e)};return {version:oe,project_id:le__default.randomUUID(),session_id:t,generated_at:new Date().toISOString(),metadata:i,files:a,dependencies:n}}async discoverFiles(){let t=[],e=await glob(["**/*.{ts,tsx,js,jsx,json}"],{cwd:this.options.projectPath,ignore:["**/node_modules/**","**/.git/**","**/dist/**","**/build/**","**/.next/**","**/out/**","**/coverage/**","**/.veestack/**"],absolute:false});for(let n of e){let r=join(this.options.projectPath,n);try{let s=statSync(r);if(!s.isFile()||s.size>1024*1024)continue;let o=readFileSync(r,"utf-8"),a=n.split(".").pop()||"";t.push({path:n,content:o,extension:a,size:s.size});}catch{continue}}return t}extractASTTokens(t,e){let n=[],r=t.split(`
6
+ `),s=new Set(["function","const","let","var","class","import","export","return","if","else","for","while","try","catch","eval","dangerouslySetInnerHTML","document","window"]),o=new Set(["eval","setTimeout","setInterval","Function","exec","innerHTML","document.write","dangerouslySetInnerHTML"]);return r.forEach((a,i)=>{let c=i+1;if(s.forEach(T=>{let b=new RegExp(`\\b${T}\\b`,"g"),j;for(;(j=b.exec(a))!==null;)n.push({type:"keyword",value:T,line:c,column:j.index+1});}),o.forEach(T=>{let b=new RegExp(`${T.replace(".","\\.")}\\s*\\(`,"g"),j;for(;(j=b.exec(a))!==null;)n.push({type:"call_expression",value:T,line:c,column:j.index+1});}),e==="tsx"||e==="jsx"){let T=/<[A-Z][a-zA-Z0-9]*/g,b;for(;(b=T.exec(a))!==null;)n.push({type:"jsx_element",value:b[0].substring(1),line:c,column:b.index+1});a.includes("dangerouslySetInnerHTML")&&n.push({type:"property_access",value:"dangerouslySetInnerHTML",line:c,column:a.indexOf("dangerouslySetInnerHTML")+1});}let l=/['"]([^'"]*)['"]/g,d;for(;(d=l.exec(a))!==null;){let T=d[1];(T.includes(".env")||T.includes(".pem")||T.includes(".key"))&&n.push({type:"string",value:T,line:c,column:d.index+1});}}),n}async extractDependencies(){let t=[];try{let e=join(this.options.projectPath,"package.json");if(!existsSync(e))return t;let n=JSON.parse(readFileSync(e,"utf-8")),r=(s,o)=>{for(let[a,i]of Object.entries(s)){let c=i.match(/^(\d+)\.(\d+)/),l=c?parseInt(c[1]):0;t.push({name_hash:this.hash(a),version:i.replace(/[^\d.]/g,""),major_version:l,category:o});}};n.dependencies&&r(n.dependencies,"production"),n.devDependencies&&r(n.devDependencies,"development"),n.peerDependencies&&r(n.peerDependencies,"peer");}catch{}return t}detectFramework(){let t=this.options.projectPath;if(existsSync(join(t,"next.config.js"))||existsSync(join(t,"next.config.mjs"))||existsSync(join(t,"next.config.ts")))return "nextjs";try{let e=JSON.parse(readFileSync(join(t,"package.json"),"utf-8"));if(e.dependencies?.next)return "nextjs";if(e.dependencies?.react)return "react";if(e.dependencies?.vue)return "vue";if(e.dependencies?.["@angular/core"])return "angular";if(e.dependencies?.svelte)return "svelte"}catch{}return "node"}detectLanguage(t){let e=0,n=0;return t.forEach(r=>{r.extension==="ts"||r.extension==="tsx"?e++:(r.extension==="js"||r.extension==="jsx")&&n++;}),e>0&&n>0?"mixed":e>0?"typescript":"javascript"}calculateFileTypes(t){let e={};return t.forEach(n=>{let r=n.extension||"unknown";e[r]=(e[r]||0)+1;}),e}hash(t){return le__default.createHash("sha256").update(t).digest("hex")}};});var Kr=[/^--token[=\s]/i,/^-t[=\s]/i,/^--api-key[=\s]/i,/^--apikey[=\s]/i,/^--key[=\s]/i,/^--auth[=\s]/i,/^--bearer[=\s]/i,/token[=:]\s*[a-zA-Z0-9_-]{10,}/i,/api[_-]?key[=:]\s*[a-zA-Z0-9_-]{10,}/i],Ze=/vs_[a-zA-Z0-9_-]{20,}/i;function Mn(){let t=process.argv.slice(2);for(let e of t){for(let n of Kr)n.test(e)&&(console.error(y.red(`
7
+ \u274C Security Error: Token detected in command line arguments`)),console.error(y.yellow(`
8
+ Passing tokens via CLI arguments is not allowed.`)),console.error(y.yellow("This prevents tokens from being saved in shell history (~/.bash_history, ~/.zsh_history)")),console.error(y.gray(`
9
+ Instead, use:`)),console.error(y.cyan(" veestack login")),console.error(y.gray(`
10
+ Or set via environment variable:`)),console.error(y.cyan(" export VEESTACK_API_KEY=your_key")),console.error(y.gray(`
11
11
  Your token has been detected and blocked for your security.
12
- `)),process.exit(1));Ze.test(e)&&(console.error(w.red(`
13
- \u274C Security Error: VeeStack token detected in command line`)),console.error(w.yellow(`
14
- Tokens should never be passed as command arguments.`)),console.error(w.gray(`
15
- Use login instead:`)),console.error(w.cyan(" veestack login")),process.exit(1));}}function bn(){for(let t=0;t<process.argv.length;t++){let e=process.argv[t];Ze.test(e)&&(process.argv[t]="[REDACTED_TOKEN]"),/authorization[:\s]/i.test(e)&&(process.argv[t]="[REDACTED_AUTH_HEADER]");}}function Cn(){let t=console.error,e=console.log,n=console.warn,r=s=>s.map(i=>typeof i=="string"?i.replace(Ze,"[REDACTED]").replace(/Bearer\s+[a-zA-Z0-9_-]+/gi,"Bearer [REDACTED]"):i);console.log=(...s)=>e(...r(s)),console.error=(...s)=>t(...r(s)),console.warn=(...s)=>n(...r(s));}function In(){process.on("uncaughtException",t=>{console.error(`
12
+ `)),process.exit(1));Ze.test(e)&&(console.error(y.red(`
13
+ \u274C Security Error: VeeStack token detected in command line`)),console.error(y.yellow(`
14
+ Tokens should never be passed as command arguments.`)),console.error(y.gray(`
15
+ Use login instead:`)),console.error(y.cyan(" veestack login")),process.exit(1));}}function Fn(){for(let t=0;t<process.argv.length;t++){let e=process.argv[t];Ze.test(e)&&(process.argv[t]="[REDACTED_TOKEN]"),/authorization[:\s]/i.test(e)&&(process.argv[t]="[REDACTED_AUTH_HEADER]");}}function Vn(){let t=console.error,e=console.log,n=console.warn,r=s=>s.map(o=>typeof o=="string"?o.replace(Ze,"[REDACTED]").replace(/Bearer\s+[a-zA-Z0-9_-]+/gi,"Bearer [REDACTED]"):o);console.log=(...s)=>e(...r(s)),console.error=(...s)=>t(...r(s)),console.warn=(...s)=>n(...r(s));}function Bn(){process.on("uncaughtException",t=>{console.error(`
16
16
  \u274C Fatal Error occurred`);let e=t.message||"Unknown error";if(e=e.replace(Ze,"[REDACTED]").replace(/Bearer\s+[a-zA-Z0-9_-]+/gi,"Bearer [REDACTED]").replace(/Authorization[:\s][^\s]*/gi,"Authorization: [REDACTED]"),console.error(`Error: ${e}`),t.stack){let n=t.stack.split(`
17
17
  `).map(r=>r.replace(Ze,"[REDACTED]").replace(/Bearer\s+[a-zA-Z0-9_-]+/gi,"Bearer [REDACTED]")).join(`
18
18
  `);process.env.DEBUG||process.env.VEESTACK_DEBUG?console.error(`
19
19
  Stack trace:`,n):console.error(`
20
20
  Run with DEBUG=veestack for full stack trace (sanitized)`);}process.exit(1);}),process.on("unhandledRejection",t=>{let e=t instanceof Error?t:new Error(String(t));console.error(`
21
- \u274C Unhandled Promise Rejection`);let n=e.message||"Unknown error";n=n.replace(Ze,"[REDACTED]").replace(/Bearer\s+[a-zA-Z0-9_-]+/gi,"Bearer [REDACTED]"),console.error(`Error: ${n}`),process.exit(1);});}var Ge=["veestack-tools","@vee_stack/cli"],Vr=["veestack","veestack-cli","veestacktool","veestack-tool","vee-stack","veestack-cli-tool","veestack-scanner","veestack-analyzer"],Br=[/veestak/i,/veestac/i,/veestackk/i,/veestackh/i,/vvestack/i,/veee/i,/veestack-cli-hack/i,/veestack-free/i,/veestack-pro-free/i];function Nn(){try{let t=fileURLToPath(import.meta.url),n=Ye.dirname(t);for(let r=0;r<5;r++){let s=Ye.join(n,"package.json");if(q.existsSync(s))return JSON.parse(q.readFileSync(s,"utf-8")).name||"unknown";let i=Ye.dirname(n);if(i===n)break;n=i;}}catch{}return "unknown"}function Hr(){let t=Nn(),e=[];if(Ge.includes(t))return {isOfficial:true,warnings:[]};if(Vr.includes(t))return e.push(`\u26A0\uFE0F WARNING: You are using "${t}" which is NOT the official VeeStack CLI.`),e.push(`The official package is: ${w.cyan(Ge[0])}`),e.push("Unofficial packages may contain malware or steal your data."),{isOfficial:false,warnings:e};for(let n of Br)if(n.test(t))return e.push(`\u26A0\uFE0F WARNING: Package name "${t}" looks suspicious.`),e.push("This might be a typosquatting attack."),e.push(`The official package is: ${w.cyan(Ge[0])}`),{isOfficial:false,warnings:e};return e.push(`\u26A0\uFE0F WARNING: Unofficial package "${t}" detected.`),e.push(`The official package is: ${w.cyan(Ge[0])}`),{isOfficial:false,warnings:e}}function On(){let{isOfficial:t,warnings:e}=Hr();if(!t){console.log(w.red(`
22
- `+"\u2550".repeat(60))),console.log(w.red.bold(`\u{1F6A8} SECURITY WARNING
23
- `));for(let n of e)console.log(w.yellow(n));console.log(w.gray(`
24
- To install the official CLI:`)),console.log(w.cyan(" npm install -g veestack-tools")),console.log(w.red("\u2550".repeat(60)+`
25
- `)),process.exit(1);}process.env.VEESTACK_DEBUG==="true"&&console.log(w.gray(`\u2713 Official package verified: ${Ge.join(" or ")}`));}function wt(){let t=Nn(),e=Ge.includes(t);return {packageName:t,isOfficial:e,homepage:"https://veestack.tools",repository:"https://github.com/Mohmed-ElZehiry/VeeStack"}}ae();ae();ae();var ii={TOKEN_BINDING_SALT:Qt};function Kn(t,e){let n=`${t}:${e}:${ii.TOKEN_BINDING_SALT}`;return ce.createHash("sha256").update(n).digest("hex")}function Jn(t,e,n,r,s="cli"){let i=new Date().toISOString(),o=li(),a=oi(t,e,n,i,o),c=ai(i,s,a),l=ci(r,i,s,c);return {signature:l,timestamp:i,nonce:o,headers:{"X-Signature":l,"X-Timestamp":i,"X-Nonce":o,"X-Signed-Headers":"host;x-timestamp;x-nonce"}}}function oi(t,e,n,r,s){let i=ce.createHash("sha256").update(n).digest("hex");return [t.toUpperCase(),e,"",`host:api.veestack.tools
21
+ \u274C Unhandled Promise Rejection`);let n=e.message||"Unknown error";n=n.replace(Ze,"[REDACTED]").replace(/Bearer\s+[a-zA-Z0-9_-]+/gi,"Bearer [REDACTED]"),console.error(`Error: ${n}`),process.exit(1);});}var Je=["veestack-tools","@vee_stack/cli"],Xr=["veestack","veestack-cli","veestacktool","veestack-tool","vee-stack","veestack-cli-tool","veestack-scanner","veestack-analyzer"],Qr=[/veestak/i,/veestac/i,/veestackk/i,/veestackh/i,/vvestack/i,/veee/i,/veestack-cli-hack/i,/veestack-free/i,/veestack-pro-free/i];function Hn(){try{let t=fileURLToPath(import.meta.url),n=Ge.dirname(t);for(let r=0;r<5;r++){let s=Ge.join(n,"package.json");if(te.existsSync(s))return JSON.parse(te.readFileSync(s,"utf-8")).name||"unknown";let o=Ge.dirname(n);if(o===n)break;n=o;}}catch{}return "unknown"}function es(){let t=Hn(),e=[];if(Je.includes(t))return {isOfficial:true,warnings:[]};if(Xr.includes(t))return e.push(`\u26A0\uFE0F WARNING: You are using "${t}" which is NOT the official VeeStack CLI.`),e.push(`The official package is: ${y.cyan(Je[0])}`),e.push("Unofficial packages may contain malware or steal your data."),{isOfficial:false,warnings:e};for(let n of Qr)if(n.test(t))return e.push(`\u26A0\uFE0F WARNING: Package name "${t}" looks suspicious.`),e.push("This might be a typosquatting attack."),e.push(`The official package is: ${y.cyan(Je[0])}`),{isOfficial:false,warnings:e};return e.push(`\u26A0\uFE0F WARNING: Unofficial package "${t}" detected.`),e.push(`The official package is: ${y.cyan(Je[0])}`),{isOfficial:false,warnings:e}}function zn(){let{isOfficial:t,warnings:e}=es();if(!t){console.log(y.red(`
22
+ `+"\u2550".repeat(60))),console.log(y.red.bold(`\u{1F6A8} SECURITY WARNING
23
+ `));for(let n of e)console.log(y.yellow(n));console.log(y.gray(`
24
+ To install the official CLI:`)),console.log(y.cyan(" npm install -g veestack-tools")),console.log(y.red("\u2550".repeat(60)+`
25
+ `)),process.exit(1);}process.env.VEESTACK_DEBUG==="true"&&console.log(y.gray(`\u2713 Official package verified: ${Je.join(" or ")}`));}function Ot(){let t=Hn(),e=Je.includes(t);return {packageName:t,isOfficial:e,homepage:"https://veestack.tools",repository:"https://github.com/Mohmed-ElZehiry/VeeStack"}}re();re();re();var yo={TOKEN_BINDING_SALT:cn};function ar(t,e){let n=`${t}:${e}:${yo.TOKEN_BINDING_SALT}`;return le.createHash("sha256").update(n).digest("hex")}function cr(t,e,n,r,s="cli"){let o=new Date().toISOString(),a=Eo(),i=vo(t,e,n,o,a),c=_o(o,s,i),l=ko(r,o,s,c);return {signature:l,timestamp:o,nonce:a,headers:{"X-Signature":l,"X-Timestamp":o,"X-Nonce":a,"X-Signed-Headers":"host;x-timestamp;x-nonce"}}}function vo(t,e,n,r,s){let o=le.createHash("sha256").update(n).digest("hex");return [t.toUpperCase(),e,"",`host:api.veestack.tools
26
26
  `,`x-timestamp:${r}
27
27
  `,`x-nonce:${s}
28
- `,"host;x-timestamp;x-nonce",i].join(`
29
- `)}function ai(t,e,n){let r=t.substring(0,10).replace(/-/g,""),s=ce.createHash("sha256").update(n).digest("hex");return ["VEESTACK-HMAC-SHA256",t,`${r}/veestack/${e}/veestack_request`,s].join(`
30
- `)}function ci(t,e,n,r){let s=e.substring(0,10).replace(/-/g,""),i=gt("VEESTACK"+t,s),o=gt(i,"veestack"),a=gt(o,n),c=gt(a,"veestack_request");return gt(c,r,"hex")}function gt(t,e,n){return ce.createHmac("sha256",t).update(e).digest(n||"hex")}function li(){return ce.randomBytes(16).toString("hex")}var Pt=null;async function jt(){if(Pt)return Pt;try{return Pt=await import('keytar'),Pt}catch{return null}}var yt=Ye.join(st.homedir(),".veestack"),me=Ye.join(yt,"tokens.enc"),qn=Ye.join(yt,"salt"),Xn=Ye.join(yt,".key"),Ut="VeeStack CLI",Mt="auth_tokens",ui=1e5,di=32,pi=16;function Lt(){return process.env.DEBUG?.includes("veestack")||process.env.DEBUG?.includes("*")||process.env.NODE_ENV==="development"||process.env.VEESTACK_DEBUG==="true"}async function fi(){try{let e=await N.readFile(qn).catch(()=>null);if(e)return e}catch{}let t=ce.randomBytes(32);return await N.mkdir(yt,{recursive:true,mode:448}),await N.writeFile(qn,t,{mode:384}),t}async function Qn(){try{let r=await N.readFile(Xn,"utf-8").catch(()=>null);if(r){let s=Buffer.from(r,"hex");return await N.unlink(Xn).catch(()=>{}),s}}catch{}let t=`${st.userInfo().username}@${st.hostname()}`,e=await fi();return ce.pbkdf2Sync(t,e,ui,di,"sha256")}function mt(t){Buffer.isBuffer(t)&&t.fill(0);}async function vt(t){let e=await jt();if(e)try{let l=JSON.stringify(t);await e.setPassword(Ut,Mt,l),Lt()&&console.log(" Tokens saved to OS Keychain");return}catch(l){Lt()&&console.log(" Keychain failed, falling back to encrypted file:",l);}let n=await Qn(),r=ce.randomBytes(pi),s=ce.createCipheriv("aes-256-gcm",n,r),i=JSON.stringify(t),o=Buffer.concat([s.update(i,"utf8"),s.final()]),a=s.getAuthTag(),c={iv:r.toString("hex"),data:o.toString("hex"),authTag:a.toString("hex"),timestamp:Date.now(),version:2};await N.mkdir(yt,{recursive:true,mode:448}),await N.writeFile(me,JSON.stringify(c),{mode:384}),mt(n),Lt()&&console.log(" Tokens saved to encrypted file (AES-256-GCM)");}async function er(){let t=await jt();if(t)try{let e=await t.getPassword(Ut,Mt);if(e)return JSON.parse(e)}catch(e){Lt()&&console.log("\u26A0\uFE0F Keychain read failed, trying encrypted file:",e);}try{let e=await N.readFile(me,"utf-8"),n=JSON.parse(e);if(n.version===1)return await gi(n);let r=await Qn(),s=null;try{let i=Buffer.from(n.iv,"hex"),o=Buffer.from(n.data,"hex"),a=Buffer.from(n.authTag,"hex"),c=ce.createDecipheriv("aes-256-gcm",r,i);c.setAuthTag(a),s=Buffer.concat([c.update(o),c.final()]);let l=JSON.parse(s.toString("utf8"));return mt(s),mt(r),l}catch(i){throw s&&mt(s),mt(r),i}}catch{return null}}async function gi(t){try{return console.log("\u{1F510} Migrating from legacy encryption format..."),await N.unlink(me).catch(()=>{}),null}catch{return null}}async function _t(){try{return await N.access(me),!0}catch{return false}}async function Be(){try{let t=await N.stat(me).catch(()=>null);if(!t)return;let e=t.size,n=3;for(let s=0;s<n;s++){let i=ce.randomBytes(e);await N.writeFile(me,i);}await N.unlink(me);let r=await jt();r&&await r.deletePassword(Ut,Mt).catch(()=>{});}catch{}}async function tr(){let t=await jt(),e=!!t,n=false;if(t)try{n=!!await t.getPassword(Ut,Mt);}catch{}let r=false,s,i,o=0;try{let a=await N.stat(me);r=!0,s=a.mode.toString(8),i=a.size;let c=await N.readFile(me,"utf-8");o=JSON.parse(c).version||1;}catch{}return {keychainAvailable:e,keychainHasTokens:n,fileExists:r,filePermissions:s,fileSize:i,encryptionVersion:o}}var mi=[{name:"bearer_token",regex:/Bearer\s+[a-zA-Z0-9_-]{20,}/gi,replacement:"Bearer [REDACTED]"},{name:"api_key",regex:/api[_-]?key['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"api_key: [REDACTED]"},{name:"access_token",regex:/access[_-]?token['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"access_token: [REDACTED]"},{name:"refresh_token",regex:/refresh[_-]?token['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"refresh_token: [REDACTED]"},{name:"auth_token",regex:/auth[_-]?token['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"auth_token: [REDACTED]"},{name:"password",regex:/password['"\s]*[:=]\s*['"]?([^'"\s]{8,})/gi,replacement:"password: [REDACTED]"},{name:"secret",regex:/secret['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"secret: [REDACTED]"},{name:"private_key",regex:/private[_-]?key['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"private_key: [REDACTED]"},{name:"jwt_token",regex:/eyJ[a-zA-Z0-9_-]*\.eyJ[a-zA-Z0-9_-]*\.[a-zA-Z0-9_-]*/g,replacement:"[REDACTED_JWT]"},{name:"supabase_key",regex:/eyJ[a-zA-Z0-9_-]{20,}\.[a-zA-Z0-9_-]{20,}\.[a-zA-Z0-9_-]{20,}/g,replacement:"[REDACTED_SUPABASE_KEY]"}];function He(t){if(!t||typeof t!="string")return t;let e=t;for(let n of mi)e=e.replace(n.regex,n.replacement);return e}function dn(t){return t instanceof Error?He(t.message).slice(0,500):typeof t=="string"?He(t).slice(0,500):He(String(t)).slice(0,500)}function $t(t){if(!t||typeof t!="object")return t;let e=["token","accessToken","refreshToken","apiKey","api_key","secret","password","privateKey","private_key","authToken","auth_token","jwt","credential","credentials"];if(Array.isArray(t))return t.map(r=>$t(r));let n={};for(let[r,s]of Object.entries(t)){let i=r.toLowerCase();e.some(o=>i.includes(o))?n[r]="[REDACTED]":typeof s=="object"&&s!==null?n[r]=$t(s):typeof s=="string"?n[r]=He(s):n[r]=s;}return n}function kt(t,e,...n){let r=He(e),s=n.map(i=>typeof i=="string"?He(i):typeof i=="object"&&i!==null?$t(i):i);console[t](r,...s);}var he={log:(t,...e)=>kt("log",t,...e),error:(t,...e)=>kt("error",t,...e),warn:(t,...e)=>kt("warn",t,...e),info:(t,...e)=>kt("info",t,...e),debug:(t,...e)=>kt("debug",t,...e)};var pn=Ye.join(st.homedir(),".veestack");Ye.join(pn,"config.json");var Ft=Ye.join(pn,"config.json"),hi=process.env.VEESTACK_API_URL||"https://api.veestack.tools";async function vi(){try{if(!q.existsSync(Ft))return;let t=q.readFileSync(Ft,"utf-8"),e=JSON.parse(t);if(await _t()){try{q.unlinkSync(Ft);}catch{}return}let n={token:e.token,refreshToken:e.refreshToken,tokenType:e.tokenType,tokenExpiresAt:e.tokenExpiresAt,device:e.device,user:e.user,subscription:e.subscription,lastLoginAt:e.lastLoginAt,apiKey:e.apiKey};await vt(n);try{q.unlinkSync(Ft);}catch{}he.info("\u{1F510} Authentication migrated to encrypted storage");}catch{}}async function Q(){await vi();let t=await er();return t?{token:t.token,tokenType:t.tokenType,refreshToken:t.refreshToken,tokenExpiresAt:t.tokenExpiresAt,device:t.device,user:t.user,subscription:t.subscription,lastLoginAt:t.lastLoginAt,apiKey:t.apiKey}:null}async function sr(){let t=await Q();if(!t)return false;let e=t.token!==void 0&&t.token.length>0,n=t.apiKey!==void 0&&t.apiKey.length>0;return e||n}async function _i(){let t=await Q();return t&&(t.token||t.apiKey)||null}async function ki(){let t=await Q();return {id:t?.device?.id,fingerprint:t?.device?.fingerprint}}async function Bt(t="GET",e="",n="",r=["project:read"]){let s=await _i();if(!s)return {};let i=await Q(),o=await ki();if(!o.id||!o.fingerprint||!i?.refreshToken)return {};let a=Kn(i.refreshToken,o.fingerprint),c=Jn(t,e,n,i.refreshToken,"cli");return {Authorization:`Bearer ${s}`,"Content-Type":"application/json","X-Device-ID":o.id,"X-CLI-Version":z,"X-Device-Fingerprint":o.fingerprint,"X-Token-Binding":a,"X-Signature":c.signature,"X-Timestamp":c.timestamp,"X-Nonce":c.nonce,"X-Scope":r.join(","),"X-Security-Version":z}}function fn(t){if(!t.tokenExpiresAt)return true;let e=new Date(t.tokenExpiresAt),n=300*1e3;return Date.now()>=e.getTime()-n}async function Ei(t){if(!t.refreshToken)return null;try{let e=await fetch(`${hi}/api/cli/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refresh_token:t.refreshToken,device_id:t.device?.id,device_fingerprint:t.device?.fingerprint})});if(e.status===401){let s=await e.json().catch(()=>({}));throw s.code==="device_mismatch"&&(await Be(),console.log(w.red(`
31
- \u274C Security Alert: Device mismatch`)),console.log(w.yellow(`
32
- Your token was used from a different device.`)),console.log(w.gray("This could indicate a token theft attempt.")),console.log(w.gray("Please login again:")),console.log(w.cyan(" veestack login")),process.exit(1)),s.code==="device_revoked"&&(await Be(),console.log(w.red(`
33
- \u274C Device authorization revoked`)),console.log(w.yellow(`
34
- Your device was removed from authorized devices.`)),console.log(w.gray("Please login again:")),console.log(w.cyan(" veestack login")),process.exit(1)),(s.code==="token_invalid"||s.code==="session_expired")&&(await Be(),console.log(w.red(`
35
- \u274C Session expired`)),console.log(w.yellow(`
36
- Your session has expired or your password was changed.`)),console.log(w.gray("Please login again:")),console.log(w.cyan(" veestack login")),process.exit(1)),new Error("Token refresh failed: Unauthorized")}if(!e.ok)throw new Error("Token refresh failed");let n=await e.json(),r={...t,token:n.access_token,tokenExpiresAt:new Date(Date.now()+n.expires_in*1e3).toISOString()};return n.refresh_token&&(r.refreshToken=n.refresh_token),await vt({token:r.token,refreshToken:r.refreshToken,tokenType:r.tokenType,tokenExpiresAt:r.tokenExpiresAt,device:r.device,user:r.user,subscription:r.subscription,lastLoginAt:r.lastLoginAt,apiKey:r.apiKey}),r}catch(e){return e instanceof Error&&e.message.includes("fetch")&&(he.warn(`
37
- \u26A0\uFE0F Network error`),he.info("Could not connect to authentication server."),he.info("Please check your connection and try again.")),null}}async function le(){let t=await Q();if(!t)return await _t()?(console.log(w.red(`
38
- \u274C Authentication corrupted`)),console.log(w.gray("Your session file appears to be corrupted.")),console.log(w.gray("Please login again:")),console.log(w.cyan(" veestack login")),null):(console.log(w.red(`
39
- \u274C Not authenticated`)),console.log(w.gray("Please login first:")),console.log(w.cyan(" veestack login")),null);if(t.refreshToken&&fn(t)){console.log(w.yellow("Token expired, refreshing..."));let e=await Ei(t);return e?(console.log(w.green("\u2713 Token refreshed")),e):(await Be(),console.log(w.red(`
40
- \u274C Session expired`)),console.log(w.yellow(`
41
- Your refresh token has expired.`)),console.log(w.gray("Please login again:")),console.log(w.cyan(" veestack login")),null)}return t}async function it(){let t=await Q();return !t||!t.subscription?"free":t.subscription.tier}async function ir(){let t=await Q();return !t||!t.subscription||t.subscription.tier==="free"?true:t.subscription.expiresAt?new Date(t.subscription.expiresAt)>new Date&&t.subscription.isActive:t.subscription.isActive}function or(t){if(t.user)try{let e=join(pn,"accounts"),n=(void 0)("fs");n.mkdirSync(e,{recursive:!0});let r=join(e,`${t.user.id}.json`);n.writeFileSync(r,JSON.stringify(t,null,2),{mode:384});}catch{}}var Si=[".env",".env.local",".env.development",".env.production",".env.test",".env.example",".envrc",".env.*","id_rsa","id_rsa.pub","id_dsa","id_dsa.pub","id_ecdsa","id_ecdsa.pub","id_ed25519","id_ed25519.pub","*.pem","*.key","*.p12","*.pfx","*.crt","*.cer","*.der","credentials",".aws/credentials",".aws/config",".docker/config.json","kubeconfig","*.kubeconfig",".npmrc",".yarnrc",".pnpmrc",".git-credentials","*.sqlite","*.sqlite3","*.db","secrets/","secret/",".secrets/","config.json","settings.json","local.settings.json"],Ti=[{name:"AWS Access Key ID",pattern:/AKIA[0-9A-Z]{16}/g,severity:"critical",description:"AWS Access Key ID detected"},{name:"AWS Secret Access Key",pattern:/['"\s][A-Za-z0-9/+=]{40}['"\s]/g,severity:"critical",description:"Potential AWS Secret Key detected"},{name:"Private Key",pattern:/-----BEGIN (RSA |DSA |EC |OPENSSH |PGP )?PRIVATE KEY-----/g,severity:"critical",description:"Private key detected"},{name:"JWT Token",pattern:/eyJ[a-zA-Z0-9_-]*\.eyJ[a-zA-Z0-9_-]*\.[a-zA-Z0-9_-]*/g,severity:"high",description:"JWT token detected"},{name:"Bearer Token",pattern:/Bearer\s+[a-zA-Z0-9_-]{20,}/gi,severity:"high",description:"Bearer token detected"},{name:"API Key",pattern:/(?:api[_-]?key|apikey|api_token|apiToken)['"\s]*[:=]\s*['"][a-zA-Z0-9_-]{16,}['"]/gi,severity:"high",description:"API key detected"},{name:"Password in URL",pattern:/[a-zA-Z]+:\/\/[^\s:@]+:[^\s:@]+@[^\s]+/g,severity:"high",description:"Password in URL detected"},{name:"Password Assignment",pattern:/(?:password|passwd|pwd)\s*[=:]\s*['"][^'"]{8,}['"]/gi,severity:"medium",description:"Password assignment detected"},{name:"GitHub Token",pattern:/gh[pousr]_[A-Za-z0-9_]{36,}/g,severity:"critical",description:"GitHub token detected"},{name:"Slack Token",pattern:/xox[baprs]-[0-9]{10,13}-[0-9]{10,13}(-[a-zA-Z0-9]{24})?/g,severity:"critical",description:"Slack token detected"},{name:"Generic Secret",pattern:/(?:secret|token|key)\s*[=:]\s*['"][a-zA-Z0-9_-]{20,}['"]/gi,severity:"medium",description:"Potential secret detected"},{name:"Connection String",pattern:/(?:mongodb|postgres|mysql|redis|amqp):\/\/[^\s]+/gi,severity:"high",description:"Database connection string detected"},{name:"VeeStack Token",pattern:/vs_[a-zA-Z0-9_-]{20,}/g,severity:"critical",description:"VeeStack token detected"}];function ar(t){let e=t.replace(/\\/g,"/").toLowerCase(),n=Ye.basename(e);for(let r of Si){if(n===r.toLowerCase())return true;if(r.includes("*")){let s=r.toLowerCase().replace(/\./g,"\\.").replace(/\*/g,".*"),i=new RegExp(s);if(i.test(n)||i.test(e))return true}if(e.includes(r.toLowerCase().replace("*","")))return true}return false}function wi(t,e){let n=[],r=e.split(`
42
- `);for(let s of Ti){s.pattern.lastIndex=0;for(let i=0;i<r.length;i++){let o=r[i],a;for(;(a=s.pattern.exec(o))!==null;)n.push({filePath:t,type:"secret_content",secretName:s.name,severity:s.severity,description:s.description,lineNumber:i+1,match:a[0].substring(0,20)+"..."});s.pattern.lastIndex=0;}}return n}async function Ai(t){let e=[];if(ar(t))return e.push({filePath:t,type:"sensitive_file",secretName:"Sensitive File",severity:"critical",description:`Sensitive file type detected: ${Ye.basename(t)}`}),e;try{if(q.statSync(t).size>1024*1024)return e;let r=q.readFileSync(t,"utf-8"),s=wi(t,r);e.push(...s);}catch{}return e}async function cr(t,e){let n=[];for(let o of e){let a=Ye.join(t,o),c=await Ai(a);for(let l of c)l.filePath=o,n.push(l);}let r=n.filter(o=>o.severity==="critical").length,s=n.filter(o=>o.severity==="high").length,i=n.filter(o=>o.severity==="medium").length;return {totalFiles:e.length,secretsFound:n.length,criticalCount:r,highCount:s,mediumCount:i,results:n}}function gn(t){if(t.secretsFound===0)return w.green("\u2713 No secrets detected");let e=`
43
- `+w.red(`\u26A0\uFE0F Secrets Detected!
44
- `);e+=w.gray(`Found ${t.secretsFound} potential secret(s) in ${t.totalFiles} files
28
+ `,"host;x-timestamp;x-nonce",o].join(`
29
+ `)}function _o(t,e,n){let r=t.substring(0,10).replace(/-/g,""),s=le.createHash("sha256").update(n).digest("hex");return ["VEESTACK-HMAC-SHA256",t,`${r}/veestack/${e}/veestack_request`,s].join(`
30
+ `)}function ko(t,e,n,r){let s=e.substring(0,10).replace(/-/g,""),o=_t("VEESTACK"+t,s),a=_t(o,"veestack"),i=_t(a,n),c=_t(i,"veestack_request");return _t(c,r,"hex")}function _t(t,e,n){return le.createHmac("sha256",t).update(e).digest(n||"hex")}function Eo(){return le.randomBytes(16).toString("hex")}var Bt=null;async function zt(){if(Bt)return Bt;try{return Bt=await import('keytar'),Bt}catch{return null}}var St=Ge.join(ot.homedir(),".veestack"),ge=Ge.join(St,"tokens.enc"),lr=Ge.join(St,"salt"),ur=Ge.join(St,".key"),Wt="VeeStack CLI",Gt="auth_tokens",So=1e5,wo=32,To=16;function Ht(){return process.env.DEBUG?.includes("veestack")||process.env.DEBUG?.includes("*")||process.env.NODE_ENV==="development"||process.env.VEESTACK_DEBUG==="true"}async function Ao(){try{let e=await U.readFile(lr).catch(()=>null);if(e)return e}catch{}let t=le.randomBytes(32);return await U.mkdir(St,{recursive:true,mode:448}),await U.writeFile(lr,t,{mode:384}),t}async function dr(){try{let r=await U.readFile(ur,"utf-8").catch(()=>null);if(r){let s=Buffer.from(r,"hex");return await U.unlink(ur).catch(()=>{}),s}}catch{}let t=`${ot.userInfo().username}@${ot.hostname()}`,e=await Ao();return le.pbkdf2Sync(t,e,So,wo,"sha256")}function kt(t){Buffer.isBuffer(t)&&t.fill(0);}async function wt(t){let e=await zt();if(e)try{let l=JSON.stringify(t);await e.setPassword(Wt,Gt,l),Ht()&&console.log(" Tokens saved to OS Keychain");return}catch(l){Ht()&&console.log(" Keychain failed, falling back to encrypted file:",l);}let n=await dr(),r=le.randomBytes(To),s=le.createCipheriv("aes-256-gcm",n,r),o=JSON.stringify(t),a=Buffer.concat([s.update(o,"utf8"),s.final()]),i=s.getAuthTag(),c={iv:r.toString("hex"),data:a.toString("hex"),authTag:i.toString("hex"),timestamp:Date.now(),version:2};await U.mkdir(St,{recursive:true,mode:448}),await U.writeFile(ge,JSON.stringify(c),{mode:384}),kt(n),Ht()&&console.log(" Tokens saved to encrypted file (AES-256-GCM)");}async function pr(){let t=await zt();if(t)try{let e=await t.getPassword(Wt,Gt);if(e)return JSON.parse(e)}catch(e){Ht()&&console.log("\u26A0\uFE0F Keychain read failed, trying encrypted file:",e);}try{let e=await U.readFile(ge,"utf-8"),n=JSON.parse(e);if(n.version===1)return await xo(n);let r=await dr(),s=null;try{let o=Buffer.from(n.iv,"hex"),a=Buffer.from(n.data,"hex"),i=Buffer.from(n.authTag,"hex"),c=le.createDecipheriv("aes-256-gcm",r,o);c.setAuthTag(i),s=Buffer.concat([c.update(a),c.final()]);let l=JSON.parse(s.toString("utf8"));return kt(s),kt(r),l}catch(o){throw s&&kt(s),kt(r),o}}catch{return null}}async function xo(t){try{return console.log("\u{1F510} Migrating from legacy encryption format..."),await U.unlink(ge).catch(()=>{}),null}catch{return null}}async function Yt(){try{return await U.access(ge),!0}catch{return false}}async function Be(){try{let t=await U.stat(ge).catch(()=>null);if(!t)return;let e=t.size,n=3;for(let s=0;s<n;s++){let o=le.randomBytes(e);await U.writeFile(ge,o);}await U.unlink(ge);let r=await zt();r&&await r.deletePassword(Wt,Gt).catch(()=>{});}catch{}}async function fr(){let t=await zt(),e=!!t,n=false;if(t)try{n=!!await t.getPassword(Wt,Gt);}catch{}let r=false,s,o,a=0;try{let i=await U.stat(ge);r=!0,s=i.mode.toString(8),o=i.size;let c=await U.readFile(ge,"utf-8");a=JSON.parse(c).version||1;}catch{}return {keychainAvailable:e,keychainHasTokens:n,fileExists:r,filePermissions:s,fileSize:o,encryptionVersion:a}}var Ro=[{name:"bearer_token",regex:/Bearer\s+[a-zA-Z0-9_-]{20,}/gi,replacement:"Bearer [REDACTED]"},{name:"api_key",regex:/api[_-]?key['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"api_key: [REDACTED]"},{name:"access_token",regex:/access[_-]?token['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"access_token: [REDACTED]"},{name:"refresh_token",regex:/refresh[_-]?token['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"refresh_token: [REDACTED]"},{name:"auth_token",regex:/auth[_-]?token['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"auth_token: [REDACTED]"},{name:"password",regex:/password['"\s]*[:=]\s*['"]?([^'"\s]{8,})/gi,replacement:"password: [REDACTED]"},{name:"secret",regex:/secret['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"secret: [REDACTED]"},{name:"private_key",regex:/private[_-]?key['"\s]*[:=]\s*['"]?([a-zA-Z0-9_-]{16,})/gi,replacement:"private_key: [REDACTED]"},{name:"jwt_token",regex:/eyJ[a-zA-Z0-9_-]*\.eyJ[a-zA-Z0-9_-]*\.[a-zA-Z0-9_-]*/g,replacement:"[REDACTED_JWT]"},{name:"supabase_key",regex:/eyJ[a-zA-Z0-9_-]{20,}\.[a-zA-Z0-9_-]{20,}\.[a-zA-Z0-9_-]{20,}/g,replacement:"[REDACTED_SUPABASE_KEY]"}];function He(t){if(!t||typeof t!="string")return t;let e=t;for(let n of Ro)e=e.replace(n.regex,n.replacement);return e}function _n(t){return t instanceof Error?He(t.message).slice(0,500):typeof t=="string"?He(t).slice(0,500):He(String(t)).slice(0,500)}function Zt(t){if(!t||typeof t!="object")return t;let e=["token","accessToken","refreshToken","apiKey","api_key","secret","password","privateKey","private_key","authToken","auth_token","jwt","credential","credentials"];if(Array.isArray(t))return t.map(r=>Zt(r));let n={};for(let[r,s]of Object.entries(t)){let o=r.toLowerCase();e.some(a=>o.includes(a))?n[r]="[REDACTED]":typeof s=="object"&&s!==null?n[r]=Zt(s):typeof s=="string"?n[r]=He(s):n[r]=s;}return n}function Tt(t,e,...n){let r=He(e),s=n.map(o=>typeof o=="string"?He(o):typeof o=="object"&&o!==null?Zt(o):o);console[t](r,...s);}var me={log:(t,...e)=>Tt("log",t,...e),error:(t,...e)=>Tt("error",t,...e),warn:(t,...e)=>Tt("warn",t,...e),info:(t,...e)=>Tt("info",t,...e),debug:(t,...e)=>Tt("debug",t,...e)};var kn=Ge.join(ot.homedir(),".veestack");Ge.join(kn,"config.json");var Jt=Ge.join(kn,"config.json"),bo=process.env.VEESTACK_API_URL||"https://api.veestack.tools";async function Io(){try{if(!te.existsSync(Jt))return;let t=te.readFileSync(Jt,"utf-8"),e=JSON.parse(t);if(await Yt()){try{te.unlinkSync(Jt);}catch{}return}let n={token:e.token,refreshToken:e.refreshToken,tokenType:e.tokenType,tokenExpiresAt:e.tokenExpiresAt,device:e.device,user:e.user,subscription:e.subscription,lastLoginAt:e.lastLoginAt,apiKey:e.apiKey};await wt(n);try{te.unlinkSync(Jt);}catch{}me.info("\u{1F510} Authentication migrated to encrypted storage");}catch{}}async function K(){await Io();let t=await pr();return t?{token:t.token,tokenType:t.tokenType,refreshToken:t.refreshToken,tokenExpiresAt:t.tokenExpiresAt,device:t.device,user:t.user,subscription:t.subscription,lastLoginAt:t.lastLoginAt,apiKey:t.apiKey}:null}async function At(){let t=await K();if(!t)return false;let e=t.token!==void 0&&t.token.length>0,n=t.apiKey!==void 0&&t.apiKey.length>0;return e||n}async function No(){let t=await K();return t&&(t.token||t.apiKey)||null}async function Oo(){let t=await K();return {id:t?.device?.id,fingerprint:t?.device?.fingerprint}}async function qt(t="GET",e="",n="",r=["project:read"]){let s=await No();if(!s)return {};let o=await K(),a=await Oo();if(!a.id||!a.fingerprint||!o?.refreshToken)return {};let i=ar(o.refreshToken,a.fingerprint),c=cr(t,e,n,o.refreshToken,"cli");return {Authorization:`Bearer ${s}`,"Content-Type":"application/json","X-Device-ID":a.id,"X-CLI-Version":H,"X-Device-Fingerprint":a.fingerprint,"X-Token-Binding":i,"X-Signature":c.signature,"X-Timestamp":c.timestamp,"X-Nonce":c.nonce,"X-Scope":r.join(","),"X-Security-Version":H}}function En(t){if(!t.tokenExpiresAt)return true;let e=new Date(t.tokenExpiresAt),n=300*1e3;return Date.now()>=e.getTime()-n}async function Do(t){if(!t.refreshToken)return null;try{let e=await fetch(`${bo}/api/cli/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refresh_token:t.refreshToken,device_id:t.device?.id,device_fingerprint:t.device?.fingerprint})});if(e.status===401){let s=await e.json().catch(()=>({}));throw s.code==="device_mismatch"&&(await Be(),console.log(y.red(`
31
+ \u274C Security Alert: Device mismatch`)),console.log(y.yellow(`
32
+ Your token was used from a different device.`)),console.log(y.gray("This could indicate a token theft attempt.")),console.log(y.gray("Please login again:")),console.log(y.cyan(" veestack login")),process.exit(1)),s.code==="device_revoked"&&(await Be(),console.log(y.red(`
33
+ \u274C Device authorization revoked`)),console.log(y.yellow(`
34
+ Your device was removed from authorized devices.`)),console.log(y.gray("Please login again:")),console.log(y.cyan(" veestack login")),process.exit(1)),(s.code==="token_invalid"||s.code==="session_expired")&&(await Be(),console.log(y.red(`
35
+ \u274C Session expired`)),console.log(y.yellow(`
36
+ Your session has expired or your password was changed.`)),console.log(y.gray("Please login again:")),console.log(y.cyan(" veestack login")),process.exit(1)),new Error("Token refresh failed: Unauthorized")}if(!e.ok)throw new Error("Token refresh failed");let n=await e.json(),r={...t,token:n.access_token,tokenExpiresAt:new Date(Date.now()+n.expires_in*1e3).toISOString()};return n.refresh_token&&(r.refreshToken=n.refresh_token),await wt({token:r.token,refreshToken:r.refreshToken,tokenType:r.tokenType,tokenExpiresAt:r.tokenExpiresAt,device:r.device,user:r.user,subscription:r.subscription,lastLoginAt:r.lastLoginAt,apiKey:r.apiKey}),r}catch(e){return e instanceof Error&&e.message.includes("fetch")&&(me.warn(`
37
+ \u26A0\uFE0F Network error`),me.info("Could not connect to authentication server."),me.info("Please check your connection and try again.")),null}}async function we(){let t=await K();if(!t)return console.log(y.yellow(`
38
+ \u26A0\uFE0F You are not logged in`)),console.log(y.gray(`
39
+ Login to enable:`)),console.log(y.gray(" \u2022 Cloud reports")),console.log(y.gray(" \u2022 Team dashboard")),console.log(y.gray(` \u2022 Historical scans
40
+ `)),console.log(y.gray("Run:")),console.log(y.cyan(" veestack login")),null;if(t.refreshToken&&En(t)){console.log(y.yellow("Token expired, refreshing..."));let e=await Do(t);return e?(console.log(y.green("\u2713 Token refreshed")),e):(await Be(),console.log(y.red(`
41
+ \u274C Session expired`)),console.log(y.yellow("Your refresh token has expired.")),console.log(y.gray("Run: veestack login")),null)}return t}async function it(){let t=await K();return !t||!t.subscription?"free":t.subscription.tier}async function hr(){let t=await K();return !t||!t.subscription||t.subscription.tier==="free"?true:t.subscription.expiresAt?new Date(t.subscription.expiresAt)>new Date&&t.subscription.isActive:t.subscription.isActive}function yr(t){if(t.user)try{let e=join(kn,"accounts"),n=(void 0)("fs");n.mkdirSync(e,{recursive:!0});let r=join(e,`${t.user.id}.json`);n.writeFileSync(r,JSON.stringify(t,null,2),{mode:384});}catch{}}var Po=[".env",".env.local",".env.development",".env.production",".env.test",".env.example",".envrc",".env.*","id_rsa","id_rsa.pub","id_dsa","id_dsa.pub","id_ecdsa","id_ecdsa.pub","id_ed25519","id_ed25519.pub","*.pem","*.key","*.p12","*.pfx","*.crt","*.cer","*.der","credentials",".aws/credentials",".aws/config",".docker/config.json","kubeconfig","*.kubeconfig",".npmrc",".yarnrc",".pnpmrc",".git-credentials","*.sqlite","*.sqlite3","*.db","secrets/","secret/",".secrets/","config.json","settings.json","local.settings.json"],Lo=["veestack.config.json","package.json","tsconfig.json","jsconfig.json",".eslintrc.json",".prettierrc.json","README.md"],jo=[{name:"AWS Access Key ID",pattern:/AKIA[0-9A-Z]{16}/g,severity:"critical",description:"AWS Access Key ID detected"},{name:"AWS Secret Access Key",pattern:/['"\s][A-Za-z0-9/+=]{40}['"\s]/g,severity:"critical",description:"Potential AWS Secret Key detected"},{name:"Private Key",pattern:/-----BEGIN (RSA |DSA |EC |OPENSSH |PGP )?PRIVATE KEY-----/g,severity:"critical",description:"Private key detected"},{name:"JWT Token",pattern:/eyJ[a-zA-Z0-9_-]*\.eyJ[a-zA-Z0-9_-]*\.[a-zA-Z0-9_-]*/g,severity:"high",description:"JWT token detected"},{name:"Bearer Token",pattern:/Bearer\s+[a-zA-Z0-9_-]{20,}/gi,severity:"high",description:"Bearer token detected"},{name:"API Key",pattern:/(?:api[_-]?key|apikey|api_token|apiToken)['"\s]*[:=]\s*['"][a-zA-Z0-9_-]{16,}['"]/gi,severity:"high",description:"API key detected"},{name:"Password in URL",pattern:/[a-zA-Z]+:\/\/[^\s:@]+:[^\s:@]+@[^\s]+/g,severity:"high",description:"Password in URL detected"},{name:"Password Assignment",pattern:/(?:password|passwd|pwd)\s*[=:]\s*['"][^'"]{8,}['"]/gi,severity:"medium",description:"Password assignment detected"},{name:"GitHub Token",pattern:/gh[pousr]_[A-Za-z0-9_]{36,}/g,severity:"critical",description:"GitHub token detected"},{name:"Slack Token",pattern:/xox[baprs]-[0-9]{10,13}-[0-9]{10,13}(-[a-zA-Z0-9]{24})?/g,severity:"critical",description:"Slack token detected"},{name:"Generic Secret",pattern:/(?:secret|token|key)\s*[=:]\s*['"][a-zA-Z0-9_-]{20,}['"]/gi,severity:"medium",description:"Potential secret detected"},{name:"Connection String",pattern:/(?:mongodb|postgres|mysql|redis|amqp):\/\/[^\s]+/gi,severity:"high",description:"Database connection string detected"},{name:"VeeStack Token",pattern:/vs_[a-zA-Z0-9_-]{20,}/g,severity:"critical",description:"VeeStack token detected"}];function vr(t){let e=t.replace(/\\/g,"/").toLowerCase(),n=Ge.basename(e);for(let r of Lo)if(n===r.toLowerCase())return false;for(let r of Po){if(n===r.toLowerCase())return true;if(r.includes("*")){let s=r.toLowerCase().replace(/\./g,"\\.").replace(/\*/g,".*"),o=new RegExp(s);if(o.test(n)||o.test(e))return true}if(e.includes(r.toLowerCase().replace("*","")))return true}return false}function Uo(t,e){let n=[],r=e.split(`
42
+ `);for(let s of jo){s.pattern.lastIndex=0;for(let o=0;o<r.length;o++){let a=r[o],i;for(;(i=s.pattern.exec(a))!==null;)n.push({filePath:t,type:"secret_content",secretName:s.name,severity:s.severity,description:s.description,lineNumber:o+1,match:i[0].substring(0,20)+"..."});s.pattern.lastIndex=0;}}return n}async function $o(t){let e=[];if(vr(t))return e.push({filePath:t,type:"sensitive_file",secretName:"Sensitive File",severity:"critical",description:`Sensitive file type detected: ${Ge.basename(t)}`}),e;try{if(te.statSync(t).size>1024*1024)return e;let r=te.readFileSync(t,"utf-8"),s=Uo(t,r);e.push(...s);}catch{}return e}async function _r(t,e){let n=[];for(let i of e){let c=Ge.join(t,i),l=await $o(c);for(let d of l)d.filePath=i,n.push(d);}let r=n.filter(i=>i.severity==="critical").length,s=n.filter(i=>i.severity==="high").length,o=n.filter(i=>i.severity==="medium").length,a=n.filter(i=>i.severity==="low").length;return {totalFiles:e.length,secretsFound:n.length,criticalCount:r,highCount:s,mediumCount:o,lowCount:a,results:n}}function Sn(t){if(t.secretsFound===0)return y.green("\u2713 No secrets detected");let e=`
43
+ `+y.red(`\u26A0\uFE0F Secrets Detected!
44
+ `);e+=y.gray(`Found ${t.secretsFound} potential secret(s) in ${t.totalFiles} files
45
45
 
46
- `);let n=t.results.filter(i=>i.severity==="critical"),r=t.results.filter(i=>i.severity==="high"),s=t.results.filter(i=>i.severity==="medium");if(n.length>0){e+=w.red.bold(`Critical (${n.length}):
47
- `);for(let i of n)e+=` ${w.red("\u2022")} ${w.white(i.filePath)}
48
- `,e+=` ${w.gray(i.description)}
49
- `,i.lineNumber&&(e+=` ${w.gray(`Line ${i.lineNumber}`)}
46
+ `);let n=t.results.filter(o=>o.severity==="critical"),r=t.results.filter(o=>o.severity==="high"),s=t.results.filter(o=>o.severity==="medium");if(n.length>0){e+=y.red.bold(`Critical (${n.length}):
47
+ `);for(let o of n)e+=` ${y.red("\u2022")} ${y.white(o.filePath)}
48
+ `,e+=` ${y.gray(o.description)}
49
+ `,o.lineNumber&&(e+=` ${y.gray(`Line ${o.lineNumber}`)}
50
50
  `);e+=`
51
- `;}if(r.length>0){e+=w.yellow.bold(`High (${r.length}):
52
- `);for(let i of r)e+=` ${w.yellow("\u2022")} ${w.white(i.filePath)}
53
- `,e+=` ${w.gray(i.description)}
54
- `,i.lineNumber&&(e+=` ${w.gray(`Line ${i.lineNumber}`)}
51
+ `;}if(r.length>0){e+=y.yellow.bold(`High (${r.length}):
52
+ `);for(let o of r)e+=` ${y.yellow("\u2022")} ${y.white(o.filePath)}
53
+ `,e+=` ${y.gray(o.description)}
54
+ `,o.lineNumber&&(e+=` ${y.gray(`Line ${o.lineNumber}`)}
55
55
  `);e+=`
56
- `;}if(s.length>0){e+=w.blue.bold(`Medium (${s.length}):
57
- `);for(let i of s)e+=` ${w.blue("\u2022")} ${w.white(i.filePath)}
58
- `,e+=` ${w.gray(i.description)}
56
+ `;}if(s.length>0){e+=y.blue.bold(`Medium (${s.length}):
57
+ `);for(let o of s)e+=` ${y.blue("\u2022")} ${y.white(o.filePath)}
58
+ `,e+=` ${y.gray(o.description)}
59
59
  `;e+=`
60
- `;}return e}function lr(t){let e=[],n=[];for(let r of t)ar(r)?n.push(r):e.push(r);return {safe:e,blocked:n}}ae();async function dr(t){let e=await le();e||(console.log(w.red("\u274C Authentication required")),console.log(w.yellow(`
61
- Please login first:`)),console.log(w.cyan(" veestack login")),process.exit(1)),console.log(w.blue(`
62
- \u{1F510} Authentication verified`)),e.user&&console.log(w.gray(`User: ${e.user.name}`));let n=await it();console.log(w.gray(`Subscription tier: ${n==="pro"?"Pro":"Free"}`)),console.log(w.gray("\u2500".repeat(40)+`
63
- `));let r=Ii({text:"Scanning project...",spinner:"dots",stream:process.stdout}).start();try{let s=await Oi(t.path),i=s.map(C=>C.path);r.text="Scanning for secrets...";let o=await cr(t.path,i);o.criticalCount>0&&(r.fail("Security scan failed"),console.log(gn(o)),console.log(w.red(`
64
- \u274C Critical secrets detected!`)),console.log(w.yellow(`Upload blocked to protect sensitive data.
65
- `)),console.log(w.gray("To override (not recommended):")),console.log(w.gray(` --skip-secret-scan (requires explicit confirmation)
66
- `)),process.exit(1)),o.secretsFound>0&&(console.log(gn(o)),console.log(w.yellow(`
67
- \u26A0\uFE0F Warning: Potential secrets detected`)),console.log(w.gray(`These files will be excluded from the snapshot:
68
- `)));let{safe:a,blocked:c}=lr(i);if(c.length>0){console.log(w.yellow(`Excluded ${c.length} sensitive file(s):`));for(let C of c.slice(0,5))console.log(w.gray(` \u2022 ${C}`));c.length>5&&console.log(w.gray(` ... and ${c.length-5} more`)),console.log();}let l=s.filter(C=>a.includes(C.path)),m=await Ni(t.path,l);r.succeed(`Scanned ${m.metadata.total_files} files`),await(await import('fs/promises')).writeFile(t.output,JSON.stringify(m,null,2)),console.log(`
69
- \u2705 Snapshot saved to ${t.output}`);}catch(s){r.fail("Scan failed"),console.error(s),process.exit(1);}}async function Ni(t,e){let n=await Di(t),r={total_files:e.length,total_dependencies:n.length,total_size_bytes:e.reduce((s,i)=>s+i.size_bytes,0),total_lines:e.reduce((s,i)=>s+(i.estimated_lines||0),0),max_directory_depth:Math.max(...e.map(s=>s.depth),0),language_breakdown:Pi(e)};return {snapshot_version:re,engine_target_version:Ke,project_id:ce__default.randomUUID(),generated_at:new Date().toISOString(),root_path_hash:mn(t),project_root:resolve(t),metadata:r,files:e,dependencies:n}}async function Oi(t){let e=[],r=await glob(["**/*"],{cwd:t,ignore:["**/node_modules/**","**/.git/**","**/dist/**","**/build/**","**/.next/**","**/out/**","**/coverage/**"],absolute:false});for(let s of r){let i=join(t,s),o=statSync(i);if(o.isFile()){let a={id:ce__default.randomUUID(),path:s,path_hash:mn(s),depth:s.split(/[\\/]/).length,size_bytes:o.size,estimated_lines:Math.floor(o.size/50),extension:s.split(".").pop()||"",is_binary:ji(s)};e.push(a);}}return e.sort((s,i)=>s.path_hash.localeCompare(i.path_hash))}async function Di(t){let e=[];try{let n=join(t,"package.json"),r=JSON.parse(readFileSync(n,"utf-8")),s=(i,o)=>{for(let[a,c]of Object.entries(i)){let l=c.match(/^(\d+)\.(\d+)/),m=l?parseInt(l[1]):0,T=l?parseInt(l[2]):0;e.push({id:ce__default.randomUUID(),name_hash:mn(a),major_version:m,minor_version:T,category:o});}};r.dependencies&&s(r.dependencies,"prod"),r.devDependencies&&s(r.devDependencies,"dev"),r.peerDependencies&&s(r.peerDependencies,"peer");}catch{}return e.sort((n,r)=>n.name_hash.localeCompare(r.name_hash))}function Pi(t){let e={};for(let n of t){let r=n.extension.toLowerCase(),s=Li(r);e[s]=(e[s]||0)+1;}return e}function Li(t){return {ts:"TypeScript",js:"JavaScript",tsx:"TypeScript",jsx:"JavaScript",py:"Python",go:"Go",rs:"Rust",java:"Java",kt:"Kotlin",rb:"Ruby",php:"PHP",cs:"C#",cpp:"C++",c:"C",h:"C",json:"JSON",yaml:"YAML",yml:"YAML",md:"Markdown",html:"HTML",css:"CSS",scss:"SCSS",sql:"SQL",sh:"Shell"}[t]||"Other"}function ji(t){let e=[".exe",".dll",".so",".dylib",".bin",".png",".jpg",".jpeg",".gif",".pdf",".zip",".tar",".gz",".7z",".woff",".woff2",".ttf",".eot"],n=t.split(".").pop()?.toLowerCase();return n?e.includes("."+n):false}function mn(t){return ce__default.createHash("sha256").update(t).digest("hex")}var Kt=process.env.SUPABASE_URL||"https://qhonrrojtqklvlkvfswb.supabase.co",we=process.env.SUPABASE_ANON_KEY||"";async function io(){try{let t=await fetch(`${Kt}/rest/v1/projects?select=id,name,created_at&order=created_at.desc`,{headers:{apikey:we,Authorization:`Bearer ${we}`}});return t.ok?await t.json():[]}catch{return []}}async function kr(t){try{let e=await fetch(`${Kt}/rest/v1/projects`,{method:"POST",headers:{"Content-Type":"application/json",apikey:we,Authorization:`Bearer ${we}`,Prefer:"return=representation"},body:JSON.stringify({name:t,user_id:"00000000-0000-0000-0000-000000000001"})});return e.ok&&(await e.json())[0]?.id||null}catch{return null}}function Gt(t){let e=so.createInterface({input:process.stdin,output:process.stdout});return new Promise(n=>{e.question(t,r=>{e.close(),n(r);});})}async function oo(){console.log(w.blue(`
60
+ `;}return e}function kr(t){let e=[],n=[];for(let r of t)vr(r)?n.push(r):e.push(r);return {safe:e,blocked:n}}re();function Wo(t,e){t.metadata.total_files;let r=25,s=15,o=5,a=2,i=0,c={critical:0,high:0,medium:0,low:0};e&&(c.critical=e.criticalCount||0,c.high=e.highCount||0,c.medium=e.mediumCount||0,c.low=e.lowCount||0,i+=c.critical*r,i+=c.high*s,i+=c.medium*o,i+=c.low*a);let l=100-i;l<0&&(l=0);let d="A+";return l===100?d="A+":l>=90?d="A":l>=80?d="B":l>=70?d="C":l>=60?d="D":d="F",{score:l,grade:d,breakdown:c}}async function Tn(t){let e=await we(),n=e!==null;if(n){console.log(y.blue(`
61
+ \u{1F510} Authenticated mode`)),e?.user&&console.log(y.gray(`User: ${e.user.name}`));let s=await it();console.log(y.gray(`Tier: ${s==="pro"?"Pro":"Free"}`));}else console.log(y.gray(`
62
+ \u{1F4C1} Local scan mode`)),console.log(y.gray(`Results will not be uploaded.
63
+ `)),console.log(y.gray("Login to enable:")),console.log(y.gray(" \u2022 Cloud reports")),console.log(y.gray(" \u2022 Team dashboard")),console.log(y.gray(` \u2022 Historical tracking
64
+ `));console.log(y.gray("\u2500".repeat(40)+`
65
+ `));let r=Bo({text:"Scanning project...",spinner:"dots",stream:process.stdout}).start();try{let s=Date.now(),o=await Yo(t.path),a=o.map(L=>L.path),i=new Ho.SingleBar({format:"Scanning |"+y.cyan("{bar}")+"| {percentage}% ({value}/{total} files)",barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0});console.log(y.gray("Analyzing project files...")),i.start(a.length,0),r.text="Scanning for secrets...";let c=await _r(t.path,a);i.update(Math.floor(a.length*.5)),c.criticalCount>0&&(i.stop(),r.fail("Security scan failed"),console.log(Sn(c)),console.log(y.red(`
66
+ \u274C Critical secrets detected!`)),console.log(y.yellow(`Upload blocked to protect sensitive data.
67
+ `)),console.log(y.gray("To override (not recommended):")),console.log(y.gray(` --skip-secret-scan (requires explicit confirmation)
68
+ `)),process.exit(1)),c.secretsFound>0&&(console.log(Sn(c)),console.log(y.yellow(`
69
+ \u26A0\uFE0F Warning: Potential secrets detected`)),console.log(y.gray(`These files will be excluded from the snapshot:
70
+ `)));let{safe:l,blocked:d}=kr(a);if(d.length>0){console.log(y.yellow(`Excluded ${d.length} sensitive file(s):`));for(let L of d.slice(0,5))console.log(y.gray(` \u2022 ${L}`));d.length>5&&console.log(y.gray(` ... and ${d.length-5} more`)),console.log();}let T=o.filter(L=>l.includes(L.path)),b=await Go(t.path,T);i.update(a.length),i.stop();let j=((Date.now()-s)/1e3).toFixed(1);r.succeed(`Scanned ${b.metadata.total_files} files in ${j}s`),console.log(y.green(`
71
+ \u{1F389} Scan completed successfully`)),console.log(`
72
+ `+y.bold.cyan("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501")),console.log(y.bold.white(" VeeStack Security Report")),console.log(y.bold.cyan(`\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
73
+ `));let _=Wo(b,c);console.log(y.bold("Security Score"));let ut=_.grade.startsWith("A")?y.green:_.grade==="B"?y.blue:y.yellow;console.log(`${ut.bold(_.grade)} (${_.score}/100)`),c.secretsFound>0?console.log(y.gray(`${c.criticalCount} Critical, ${c.highCount} High, ${c.mediumCount} Medium, ${c.lowCount||0} Low
74
+ `)):console.log(y.gray(`No issues detected
75
+ `));let dt=new zo({head:[y.cyan("Language"),y.cyan("Files")],style:{head:[],border:["gray"]}});Object.entries(b.metadata.language_breakdown).sort(([,L],[,pt])=>pt-L).slice(0,5).forEach(([L,pt])=>dt.push([L,pt])),console.log(y.bold("Languages detected")),console.log(dt.toString()+`
76
+ `),console.log(y.bold("Summary")),console.log(y.gray(` \u2022 Files: ${b.metadata.total_files}`)),console.log(y.gray(` \u2022 Dependencies: ${b.metadata.total_dependencies}`)),console.log(y.gray(` \u2022 Project: ${resolve(t.path).split(/[\\/]/).pop()}`)),console.log(`
77
+ `+y.gray("\u2500".repeat(40)));let Ye=await import('fs/promises');await Ye.writeFile(t.output,JSON.stringify(b,null,2));try{let L=join(process.env.HOME||process.env.USERPROFILE||"",".veestack","last-scan.json"),pt={timestamp:new Date().toISOString(),score:_.score,grade:_.grade,issues:c.secretsFound,project:resolve(t.path).split(/[\\/]/).pop()};await Ye.mkdir(join(process.env.HOME||process.env.USERPROFILE||"",".veestack"),{recursive:!0}),await Ye.writeFile(L,JSON.stringify(pt,null,2));}catch{}console.log(`
78
+ \u2705 Snapshot saved to ${t.output}`),n?(console.log(y.bold(`
79
+ Next step`)),console.log(y.gray(`
80
+ Upload results to cloud:`)),console.log(y.cyan(" veestack upload"))):(console.log(y.bold(`
81
+ Next step`)),console.log(y.gray(`
82
+ Upload results to cloud:`)),console.log(y.cyan(" veestack upload snapshot.json")));}catch(s){r.fail("Scan failed"),console.error(y.red(`
83
+ \u274C Error:`),s),console.log(y.gray(`
84
+ Possible causes:`)),console.log(y.gray(" \u2022 Invalid project path")),console.log(y.gray(" \u2022 Permission denied")),console.log(y.gray(" \u2022 No package.json found")),process.exit(1);}}async function Go(t,e){let n=await Zo(t),r={total_files:e.length,total_dependencies:n.length,total_size_bytes:e.reduce((s,o)=>s+o.size_bytes,0),total_lines:e.reduce((s,o)=>s+(o.estimated_lines||0),0),max_directory_depth:Math.max(...e.map(s=>s.depth),0),language_breakdown:Jo(e)};return {snapshot_version:oe,engine_target_version:Ke,project_id:le__default.randomUUID(),generated_at:new Date().toISOString(),root_path_hash:An(t),project_root:resolve(t),metadata:r,files:e,dependencies:n}}async function Yo(t){let e=[],r=await glob(["**/*"],{cwd:t,ignore:["**/node_modules/**","**/.git/**","**/dist/**","**/build/**","**/.next/**","**/out/**","**/coverage/**"],absolute:false});for(let s of r){let o=join(t,s),a=statSync(o);if(a.isFile()){let i={id:le__default.randomUUID(),path:s,path_hash:An(s),depth:s.split(/[\\/]/).length,size_bytes:a.size,estimated_lines:Math.floor(a.size/50),extension:s.split(".").pop()||"",is_binary:qo(s)};e.push(i);}}return e.sort((s,o)=>s.path_hash.localeCompare(o.path_hash))}async function Zo(t){let e=[];try{let n=join(t,"package.json"),r=JSON.parse(readFileSync(n,"utf-8")),s=(o,a)=>{for(let[i,c]of Object.entries(o)){let l=c.match(/^(\d+)\.(\d+)/),d=l?parseInt(l[1]):0,T=l?parseInt(l[2]):0;e.push({id:le__default.randomUUID(),name_hash:An(i),major_version:d,minor_version:T,category:a});}};r.dependencies&&s(r.dependencies,"prod"),r.devDependencies&&s(r.devDependencies,"dev"),r.peerDependencies&&s(r.peerDependencies,"peer");}catch{}return e.sort((n,r)=>n.name_hash.localeCompare(r.name_hash))}function Jo(t){let e={};for(let n of t){let r=n.extension.toLowerCase(),s=Ko(r);e[s]=(e[s]||0)+1;}return e}function Ko(t){return {ts:"TypeScript",js:"JavaScript",tsx:"TypeScript",jsx:"JavaScript",py:"Python",go:"Go",rs:"Rust",java:"Java",kt:"Kotlin",rb:"Ruby",php:"PHP",cs:"C#",cpp:"C++",c:"C",h:"C",json:"JSON",yaml:"YAML",yml:"YAML",md:"Markdown",html:"HTML",css:"CSS",scss:"SCSS",sql:"SQL",sh:"Shell"}[t]||"Other"}function qo(t){let e=[".exe",".dll",".so",".dylib",".bin",".png",".jpg",".jpeg",".gif",".pdf",".zip",".tar",".gz",".7z",".woff",".woff2",".ttf",".eot"],n=t.split(".").pop()?.toLowerCase();return n?e.includes("."+n):false}function An(t){return le__default.createHash("sha256").update(t).digest("hex")}var on=process.env.SUPABASE_URL||"https://qhonrrojtqklvlkvfswb.supabase.co",Te=process.env.SUPABASE_ANON_KEY||"";async function ki(){try{let t=await fetch(`${on}/rest/v1/projects?select=id,name,created_at&order=created_at.desc`,{headers:{apikey:Te,Authorization:`Bearer ${Te}`}});return t.ok?await t.json():[]}catch{return []}}async function Cr(t){try{let e=await fetch(`${on}/rest/v1/projects`,{method:"POST",headers:{"Content-Type":"application/json",apikey:Te,Authorization:`Bearer ${Te}`,Prefer:"return=representation"},body:JSON.stringify({name:t,user_id:"00000000-0000-0000-0000-000000000001"})});return e.ok&&(await e.json())[0]?.id||null}catch{return null}}function sn(t){let e=_i.createInterface({input:process.stdin,output:process.stdout});return new Promise(n=>{e.question(t,r=>{e.close(),n(r);});})}async function Ei(){console.log(y.blue(`
70
85
  \u{1F4C1} Loading projects...
71
- `));let t=await io();if(t.length===0){if(console.log(w.yellow(`No projects found.
72
- `)),(await Gt("Do you want to create a new project? (y/n): ")).toLowerCase()==="y"){let s=await Gt("Enter project name: ");if(s.trim()){let i=await kr(s.trim());if(i)return console.log(w.green(`
73
- \u2705 Project "${s}" created successfully!`)),i}}return null}console.log(w.white(`Select a project:
74
- `)),console.log(w.gray(`0. [+] Create new project
75
- `)),t.forEach((r,s)=>{console.log(w.white(`${s+1}. ${r.name}`)),console.log(w.gray(` ID: ${r.id}`)),console.log(w.gray(` Created: ${new Date(r.created_at).toLocaleDateString()}
76
- `));});let e=await Gt("Enter number (0-"+t.length+"): "),n=parseInt(e,10);if(n===0){let r=await Gt(`
77
- Enter project name: `);if(r.trim()){let s=await kr(r.trim());if(s)return console.log(w.green(`
78
- \u2705 Project "${r}" created successfully!`)),s}return null}else if(n>0&&n<=t.length){let r=t[n-1];return console.log(w.green(`
79
- \u2705 Selected project: "${r.name}"`)),r.id}else return console.log(w.red(`
80
- \u274C Invalid selection`)),null}async function Er(t){let e=await le();e||(console.log(w.red("\u274C Authentication required")),console.log(w.yellow(`
81
- Please login first:`)),console.log(w.cyan(" veestack login")),process.exit(1));let n=it();console.log(w.blue(`
82
- \u{1F510} Authentication verified`)),e.user&&console.log(w.gray(`User: ${e.user.name}`)),console.log(w.gray(`Subscription tier: ${n==="pro"?"Pro":"Free"}`)),console.log(w.gray("\u2500".repeat(40)+`
83
- `));let r=Ii("Preparing upload...").start();try{let i=await(await import('fs/promises')).readFile(t.file,"utf-8"),o=JSON.parse(i),a=t.projectId;if(!a){r.stop();let te=await oo();te||(console.log(w.red(`
84
- \u274C No project selected. Exiting.`)),process.exit(1)),a=te,r.start("Uploading snapshot...");}r.text="Creating snapshot...";let c=await fetch(`${Kt}/rest/v1/snapshots`,{method:"POST",headers:{"Content-Type":"application/json",apikey:we,Authorization:`Bearer ${we}`,Prefer:"return=representation"},body:JSON.stringify({project_id:a,file_count:o.metadata.total_files,size_mb:o.metadata.total_size_bytes/(1024*1024),storage_path:"local://"+a})});if(!c.ok){let te=await c.json();r.fail("Failed to create snapshot"),console.error(w.red(`Error: ${te.message||te.details||"Unknown error"}`)),process.exit(1);}let l=await c.json(),m=l[0]?.id||l[0]?.id;r.text="Analyzing snapshot...";let{CoreEngine:T}=await Promise.resolve().then(()=>(vn(),yn)),{RULES:C}=await Promise.resolve().then(()=>(vn(),yn)),L=new T;C.forEach(te=>L.registerRule(te));let Y=await L.analyze(o);Y.success||(r.fail("Analysis failed"),console.error(w.red("Error:",Y.error)),process.exit(1)),r.text="Creating report...";let Xt=await fetch(`${Kt}/rest/v1/reports`,{method:"POST",headers:{"Content-Type":"application/json",apikey:we,Authorization:`Bearer ${we}`,Prefer:"return=representation"},body:JSON.stringify({snapshot_id:m,score:Y.report.total_score,issues_count:Y.report.summary.total_findings,critical_count:Y.report.summary.critical_count,high_count:Y.report.summary.high_count,medium_count:Y.report.summary.medium_count,low_count:Y.report.summary.low_count,execution_time_ms:0,report_json:Y.report})});if(!Xt.ok){let te=await Xt.json();r.fail("Failed to create report"),console.error(w.red(`Error: ${te.message||te.details||"Unknown error"}`)),process.exit(1);}let wn=await Xt.json(),An=wn[0]?.id||wn[0]?.id;r.succeed("Analysis complete"),console.log(w.green(`
85
- \u2705 Report generated and saved to VeeStack`)),console.log(w.gray("Project ID:"),a),console.log(w.gray("Snapshot ID:"),m),console.log(w.gray("Report ID:"),An),console.log(w.bold(`
86
- \u{1F4CA} Score:`),Y.report.total_score),console.log(w.gray("Severity:"),Y.report.severity_band),console.log(w.gray("Findings:"),Y.report.summary.total_findings),console.log(w.blue(`
87
- \u{1F517} View your report at:`)),console.log(w.underline(`http://localhost:3001/reports/${An}?project=${a}`));}catch(s){r.fail("Upload failed"),console.error(s),process.exit(1);}}ae();var Tr=process.env.VEESTACK_API_URL||"https://api.veestack.tools",lo=process.env.VEESTACK_WEB_URL||"https://veestack.tools",uo=2e3,wr=300;function po(){return ce__default.randomBytes(16).toString("hex")}function fo(){let t=ce__default.randomBytes(32).toString("base64url"),e=ce__default.createHash("sha256").update(t).digest("base64url");return {code_verifier:t,code_challenge:e}}function go(){let t=process.platform,e=st.hostname(),n=z,r=e||ce__default.randomBytes(8).toString("hex"),s=ce__default.createHash("sha256").update(`${r}:${t}:${n}`).digest("hex"),i=ce__default.randomBytes(12).toString("hex"),o=`${e||"Unknown"} (${t==="win32"?"Windows":t==="darwin"?"macOS":"Linux"})`;return {id:i,name:o,fingerprint:s,os:t,version:n}}async function mo(t,e){let n=po(),r=await fetch(`${Tr}/api/cli/device`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({device_code:n,client_id:"veestack-cli",code_challenge:t.code_challenge,code_challenge_method:"S256",device_info:{id:e.id,name:e.name,fingerprint:e.fingerprint,os:e.os,version:e.version}})});if(!r.ok)throw new Error(`Failed to request device code: ${r.statusText}`);return await r.json()}async function ho(t,e,n){try{let r=await fetch(`${Tr}/api/cli/token?device_code=${t}&code_verifier=${e}`,{method:"GET",headers:{"Content-Type":"application/json"}});if(r.status===202)return null;if(!r.ok)throw new Error(`Failed to poll for token: ${r.statusText}`);return r.json()}catch{if(n>=wr)throw new Error("Authentication timeout. Please try again.");return null}}async function Jt(){console.log(w.bold.cyan(`
86
+ `));let t=await ki();if(t.length===0){if(console.log(y.yellow(`No projects found.
87
+ `)),(await sn("Do you want to create a new project? (y/n): ")).toLowerCase()==="y"){let s=await sn("Enter project name: ");if(s.trim()){let o=await Cr(s.trim());if(o)return console.log(y.green(`
88
+ \u2705 Project "${s}" created successfully!`)),o}}return null}console.log(y.white(`Select a project:
89
+ `)),console.log(y.gray(`0. [+] Create new project
90
+ `)),t.forEach((r,s)=>{console.log(y.white(`${s+1}. ${r.name}`)),console.log(y.gray(` ID: ${r.id}`)),console.log(y.gray(` Created: ${new Date(r.created_at).toLocaleDateString()}
91
+ `));});let e=await sn("Enter number (0-"+t.length+"): "),n=parseInt(e,10);if(n===0){let r=await sn(`
92
+ Enter project name: `);if(r.trim()){let s=await Cr(r.trim());if(s)return console.log(y.green(`
93
+ \u2705 Project "${r}" created successfully!`)),s}return null}else if(n>0&&n<=t.length){let r=t[n-1];return console.log(y.green(`
94
+ \u2705 Selected project: "${r.name}"`)),r.id}else return console.log(y.red(`
95
+ \u274C Invalid selection`)),null}async function Cn(t){let e=await we();e||(console.log(y.red("\u274C Authentication required")),console.log(y.yellow(`
96
+ Please login first:`)),console.log(y.cyan(" veestack login")),process.exit(1));let n=it();console.log(y.blue(`
97
+ \u{1F510} Authentication verified`)),e.user&&console.log(y.gray(`User: ${e.user.name}`)),console.log(y.gray(`Subscription tier: ${n==="pro"?"Pro":"Free"}`)),console.log(y.gray("\u2500".repeat(40)+`
98
+ `));let r=Bo("Preparing upload...").start();try{let o=await(await import('fs/promises')).readFile(t.file,"utf-8"),a=JSON.parse(o),i=t.projectId;if(!i){r.stop();let L=await Ei();L||(console.log(y.red(`
99
+ \u274C No project selected. Exiting.`)),process.exit(1)),i=L,r.start("Uploading snapshot...");}r.text="Creating snapshot...";let c=await fetch(`${on}/rest/v1/snapshots`,{method:"POST",headers:{"Content-Type":"application/json",apikey:Te,Authorization:`Bearer ${Te}`,Prefer:"return=representation"},body:JSON.stringify({project_id:i,file_count:a.metadata.total_files,size_mb:a.metadata.total_size_bytes/(1024*1024),storage_path:"local://"+i})});if(!c.ok){let L=await c.json();r.fail("Failed to create snapshot"),console.error(y.red(`Error: ${L.message||L.details||"Unknown error"}`)),process.exit(1);}let l=await c.json(),d=l[0]?.id||l[0]?.id;r.text="Analyzing snapshot...";let{CoreEngine:T}=await Promise.resolve().then(()=>(bn(),Rn)),{RULES:b}=await Promise.resolve().then(()=>(bn(),Rn)),j=new T;b.forEach(L=>j.registerRule(L));let _=await j.analyze(a);_.success||(r.fail("Analysis failed"),console.error(y.red("Error:",_.error)),process.exit(1)),r.text="Creating report...";let ut=await fetch(`${on}/rest/v1/reports`,{method:"POST",headers:{"Content-Type":"application/json",apikey:Te,Authorization:`Bearer ${Te}`,Prefer:"return=representation"},body:JSON.stringify({snapshot_id:d,score:_.report.total_score,issues_count:_.report.summary.total_findings,critical_count:_.report.summary.critical_count,high_count:_.report.summary.high_count,medium_count:_.report.summary.medium_count,low_count:_.report.summary.low_count,execution_time_ms:0,report_json:_.report})});if(!ut.ok){let L=await ut.json();r.fail("Failed to create report"),console.error(y.red(`Error: ${L.message||L.details||"Unknown error"}`)),process.exit(1);}let dt=await ut.json(),Ye=dt[0]?.id||dt[0]?.id;r.succeed("Analysis complete"),console.log(y.green(`
100
+ \u2705 Report generated and saved to VeeStack`)),console.log(y.gray("Project ID:"),i),console.log(y.gray("Snapshot ID:"),d),console.log(y.gray("Report ID:"),Ye),console.log(y.bold(`
101
+ \u{1F4CA} Score:`),_.report.total_score),console.log(y.gray("Severity:"),_.report.severity_band),console.log(y.gray("Findings:"),_.report.summary.total_findings),console.log(y.blue(`
102
+ \u{1F517} View your report at:`)),console.log(y.underline(`http://localhost:3001/reports/${Ye}?project=${i}`));}catch(s){r.fail("Upload failed"),console.error(s),process.exit(1);}}re();var Nr=process.env.VEESTACK_API_URL||"https://api.veestack.tools",Ti=process.env.VEESTACK_WEB_URL||"https://veestack.tools",Ai=2e3,Or=300;function xi(){return le__default.randomBytes(16).toString("hex")}function Ri(){let t=le__default.randomBytes(32).toString("base64url"),e=le__default.createHash("sha256").update(t).digest("base64url");return {code_verifier:t,code_challenge:e}}function bi(){let t=process.platform,e=ot.hostname(),n=H,r=e||le__default.randomBytes(8).toString("hex"),s=le__default.createHash("sha256").update(`${r}:${t}:${n}`).digest("hex"),o=le__default.randomBytes(12).toString("hex"),a=`${e||"Unknown"} (${t==="win32"?"Windows":t==="darwin"?"macOS":"Linux"})`;return {id:o,name:a,fingerprint:s,os:t,version:n}}async function Ci(t,e){let n=xi(),r=await fetch(`${Nr}/api/cli/device`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({device_code:n,client_id:"veestack-cli",code_challenge:t.code_challenge,code_challenge_method:"S256",device_info:{id:e.id,name:e.name,fingerprint:e.fingerprint,os:e.os,version:e.version}})});if(!r.ok)throw new Error(`Failed to request device code: ${r.statusText}`);return await r.json()}async function Ii(t,e,n){try{let r=await fetch(`${Nr}/api/cli/token?device_code=${t}&code_verifier=${e}`,{method:"GET",headers:{"Content-Type":"application/json"}});if(r.status===202)return null;if(!r.ok)throw new Error(`Failed to poll for token: ${r.statusText}`);return r.json()}catch{if(n>=Or)throw new Error("Authentication timeout. Please try again.");return null}}async function Rt(){console.log(y.bold.cyan(`
88
103
  \u{1F510} Login to VeeStack
89
- `)),console.log(w.gray(`Opening browser to authenticate...
90
- `));let t=Ii({text:"Requesting device code...",spinner:"dots",stream:process.stdout});try{let e=fo(),n=go();t.start();let r=await mo(e,n);t.stop();let s=`${lo}/cli-auth?device=${r.device_code}&code=${r.user_code}&challenge=${e.code_challenge}`;console.log(w.white(`Please authenticate using your browser:
91
- `)),console.log(w.gray("Device: ")+w.white(n.name)),console.log(w.gray("Device Code: ")+w.bold.cyan(r.user_code)),console.log(w.gray("URL: ")+w.underline(s)+`
92
- `),await co(s),console.log(w.yellow("Waiting for authentication...")),console.log(w.gray(`(Press Ctrl+C to cancel)
93
- `));let i=0,o=null;for(t.start("Checking authentication status...");!o&&i<wr;)await new Promise(c=>setTimeout(c,uo)),o=await ho(r.device_code,e.code_verifier,i),i++,o||(t.text=`Checking authentication status... (${i*2}s)`);o||(t.fail("Authentication timeout"),console.log(w.red(`
94
- \u274C Authentication timed out after 10 minutes.`)),console.log(w.yellow("Please try again with: veestack login")),process.exit(1)),t.succeed("Authentication successful");let a={token:o.access_token,tokenType:o.token_type,refreshToken:o.refresh_token,tokenExpiresAt:new Date(Date.now()+o.expires_in*1e3).toISOString(),device:{id:n.id,name:n.name,fingerprint:n.fingerprint},user:{id:o.user.id,email:o.user.email,name:o.user.name,provider:o.user.provider},subscription:o.subscription||{tier:"free",isActive:!0},lastLoginAt:new Date().toISOString()};try{await vt(a);}catch(c){t.fail("Failed to save authentication"),console.error(w.red(`
95
- \u274C Could not securely store tokens:`),c),process.exit(1);}console.log(w.green(`
104
+ `)),console.log(y.gray(`Opening browser to authenticate...
105
+ `));let t=Bo({text:"Requesting device code...",spinner:"dots",stream:process.stdout});try{let e=Ri(),n=bi();t.start();let r=await Ci(e,n);t.stop();let s=`${Ti}/cli-auth?device=${r.device_code}&code=${r.user_code}&challenge=${e.code_challenge}`;console.log(y.white(`Please authenticate using your browser:
106
+ `)),console.log(y.gray("Device: ")+y.white(n.name)),console.log(y.gray("Device Code: ")+y.bold.cyan(r.user_code)),console.log(y.gray("URL: ")+y.underline(s)+`
107
+ `),await wi(s),console.log(y.yellow("Waiting for authentication...")),console.log(y.gray(`(Press Ctrl+C to cancel)
108
+ `));let o=0,a=null;for(t.start("Checking authentication status...");!a&&o<Or;)await new Promise(c=>setTimeout(c,Ai)),a=await Ii(r.device_code,e.code_verifier,o),o++,a||(t.text=`Checking authentication status... (${o*2}s)`);a||(t.fail("Authentication timeout"),console.log(y.red(`
109
+ \u274C Authentication timed out after 10 minutes.`)),console.log(y.yellow("Please try again with: veestack login")),process.exit(1)),t.succeed("Authentication successful");let i={token:a.access_token,tokenType:a.token_type,refreshToken:a.refresh_token,tokenExpiresAt:new Date(Date.now()+a.expires_in*1e3).toISOString(),device:{id:n.id,name:n.name,fingerprint:n.fingerprint},user:{id:a.user.id,email:a.user.email,name:a.user.name,provider:a.user.provider},subscription:a.subscription||{tier:"free",isActive:!0},lastLoginAt:new Date().toISOString()};try{await wt(i);}catch(c){t.fail("Failed to save authentication"),console.error(y.red(`
110
+ \u274C Could not securely store tokens:`),c),process.exit(1);}console.log(y.green(`
96
111
  \u2714 Login successful
97
- `)),console.log(w.gray("Device: ")+w.white(a.device.name)),console.log(w.gray("Device ID: ")+w.gray(a.device.id.substring(0,8)+"...")),console.log(w.gray("Account: ")+w.white(a.user.name)),console.log(w.gray("Email: ")+w.white(a.user.email)),console.log(w.gray("Provider: ")+w.cyan(a.user.provider)),console.log(w.gray("Subscription: ")+(a.subscription?.tier==="pro"?w.cyan("Pro"):w.blue("Free"))),console.log(w.gray("Token expires: ")+w.yellow(new Date(a.tokenExpiresAt).toLocaleString())),console.log(w.gray(`
98
- Token saved securely to OS Keychain`)),or({token:a.token,tokenType:a.tokenType,refreshToken:a.refreshToken,tokenExpiresAt:a.tokenExpiresAt,device:a.device,user:a.user,subscription:a.subscription,lastLoginAt:a.lastLoginAt});}catch(e){t.fail("Authentication failed"),console.error(w.red(`
99
- \u274C Error:`),e instanceof Error?e.message:e),process.exit(1);}}var yo=process.env.VEESTACK_API_URL||"https://api.veestack.tools";async function Ar(){try{let t=await Q();if(!t){console.log(w.yellow("\u26A0\uFE0F Not logged in"));return}if(console.log(w.bold.cyan(`
112
+ `)),console.log(y.gray("Device: ")+y.white(i.device.name)),console.log(y.gray("Device ID: ")+y.gray(i.device.id.substring(0,8)+"...")),console.log(y.gray("Account: ")+y.white(i.user.name)),console.log(y.gray("Email: ")+y.white(i.user.email)),console.log(y.gray("Provider: ")+y.cyan(i.user.provider)),console.log(y.gray("Subscription: ")+(i.subscription?.tier==="pro"?y.cyan("Pro"):y.blue("Free"))),console.log(y.gray("Token expires: ")+y.yellow(new Date(i.tokenExpiresAt).toLocaleString())),console.log(y.gray(`
113
+ Token saved securely to OS Keychain`)),yr({token:i.token,tokenType:i.tokenType,refreshToken:i.refreshToken,tokenExpiresAt:i.tokenExpiresAt,device:i.device,user:i.user,subscription:i.subscription,lastLoginAt:i.lastLoginAt});}catch(e){t.fail("Authentication failed"),console.error(y.red(`
114
+ \u274C Error:`),e instanceof Error?e.message:e),process.exit(1);}}var Ni=process.env.VEESTACK_API_URL||"https://api.veestack.tools";async function Dr(){try{let t=await K();if(!t){console.log(y.yellow("\u26A0\uFE0F Not logged in"));return}if(console.log(y.bold.cyan(`
100
115
  \u{1F6AA} Logout from VeeStack
101
- `)),t.token||t.apiKey)try{let e=t.token||t.apiKey;await fetch(`${yo}/api/cli/logout`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify({device_id:t.device?.id})});}catch{}await _t()&&await Be();try{let{existsSync:e,unlinkSync:n}=await import('fs'),{join:r}=await import('path'),{homedir:s}=await import('os'),i=r(s(),".veestack"),o=r(i,"config.json");e(o)&&n(o);}catch{}t.user?console.log(w.green(`\u2714 Logged out ${t.user.name}`)):console.log(w.green("\u2714 Logged out")),console.log(w.gray(`
102
- \u{1F510} All local tokens securely deleted`)),console.log(w.gray("See you soon! \u{1F44B}")),console.log(w.gray(`Run "veestack login" to authenticate again.
103
- `));}catch(t){he.error("\u274C Error during logout:",dn(t)),process.exit(1);}}async function xr(){try{let t=await le();t||(console.log(w.yellow("\u26A0\uFE0F Not authenticated")),console.log(w.gray(`
104
- Please login first:`)),console.log(w.cyan(" veestack login")),process.exit(1)),console.log(w.bold.cyan(`
116
+ `)),t.token||t.apiKey)try{let e=t.token||t.apiKey;await fetch(`${Ni}/api/cli/logout`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify({device_id:t.device?.id})});}catch{}await Yt()&&await Be();try{let{existsSync:e,unlinkSync:n}=await import('fs'),{join:r}=await import('path'),{homedir:s}=await import('os'),o=r(s(),".veestack"),a=r(o,"config.json");e(a)&&n(a);}catch{}t.user?console.log(y.green(`\u2714 Logged out ${t.user.name}`)):console.log(y.green("\u2714 Logged out")),console.log(y.gray(`
117
+ \u{1F510} All local tokens securely deleted`)),console.log(y.gray("See you soon! \u{1F44B}")),console.log(y.gray(`Run "veestack login" to authenticate again.
118
+ `));}catch(t){me.error("\u274C Error during logout:",_n(t)),process.exit(1);}}async function Pr(){try{let t=await we();t||(console.log(y.yellow("\u26A0\uFE0F Not authenticated")),console.log(y.gray(`
119
+ Please login first:`)),console.log(y.cyan(" veestack login")),process.exit(1)),console.log(y.bold.cyan(`
105
120
  \u{1F464} VeeStack Account
106
- `)),t.user&&(console.log(w.gray("User: ")+w.white(t.user.name)),console.log(w.gray("Email: ")+w.white(t.user.email)),console.log(w.gray("Provider: ")+w.cyan(t.user.provider))),t.device&&(console.log(w.gray("Device: ")+w.white(t.device.name)),console.log(w.gray("Device ID: ")+w.gray(t.device.id.substring(0,8)+"...")));let e=t.subscription?.tier||"free";if(console.log(w.gray("Subscription: ")+(e==="pro"?w.cyan("Pro"):w.blue("Free"))),t.tokenExpiresAt){let r=fn(t)?w.red("Expired (will refresh)"):w.green("Valid");console.log(w.gray("Token Status: ")+r),console.log(w.gray("Expires: ")+w.yellow(new Date(t.tokenExpiresAt).toLocaleString()));}t.lastLoginAt&&console.log(w.gray("Last Login: ")+w.gray(new Date(t.lastLoginAt).toLocaleString())),console.log();}catch(t){console.error(w.red("\u274C Error:"),t instanceof Error?t.message:t),process.exit(1);}}function br(){return join(homedir(),".veestack","accounts")}function vo(){try{let t=br();if(!q.existsSync(t))return [];let e=[],n=q.readdirSync(t);for(let r of n)if(r.endsWith(".json")){let s=q.readFileSync(join(t,r),"utf-8"),i=JSON.parse(s);i.user&&e.push({id:i.user.id,name:i.user.name,email:i.user.email,provider:i.user.provider,config:i});}return e}catch{return []}}function _o(t){try{let e=br();if(q.mkdirSync(e,{recursive:!0}),t.user){let n=join(e,`${t.user.id}.json`);q.writeFileSync(n,JSON.stringify(t,null,2),{mode:384});}}catch{}}async function Cr(){let t=await Q(),e=vo();console.log(w.bold.cyan(`
121
+ `)),t.user&&(console.log(y.gray("User: ")+y.white(t.user.name)),console.log(y.gray("Email: ")+y.white(t.user.email)),console.log(y.gray("Provider: ")+y.cyan(t.user.provider))),t.device&&(console.log(y.gray("Device: ")+y.white(t.device.name)),console.log(y.gray("Device ID: ")+y.gray(t.device.id.substring(0,8)+"...")));let e=t.subscription?.tier||"free";if(console.log(y.gray("Subscription: ")+(e==="pro"?y.cyan("Pro"):y.blue("Free"))),t.tokenExpiresAt){let r=En(t)?y.red("Expired (will refresh)"):y.green("Valid");console.log(y.gray("Token Status: ")+r),console.log(y.gray("Expires: ")+y.yellow(new Date(t.tokenExpiresAt).toLocaleString()));}t.lastLoginAt&&console.log(y.gray("Last Login: ")+y.gray(new Date(t.lastLoginAt).toLocaleString())),console.log();}catch(t){console.error(y.red("\u274C Error:"),t instanceof Error?t.message:t),process.exit(1);}}function jr(){return join(homedir(),".veestack","accounts")}function Oi(){try{let t=jr();if(!te.existsSync(t))return [];let e=[],n=te.readdirSync(t);for(let r of n)if(r.endsWith(".json")){let s=te.readFileSync(join(t,r),"utf-8"),o=JSON.parse(s);o.user&&e.push({id:o.user.id,name:o.user.name,email:o.user.email,provider:o.user.provider,config:o});}return e}catch{return []}}function Di(t){try{let e=jr();if(te.mkdirSync(e,{recursive:!0}),t.user){let n=join(e,`${t.user.id}.json`);te.writeFileSync(n,JSON.stringify(t,null,2),{mode:384});}}catch{}}async function Ur(){let t=await K(),e=Oi();console.log(y.bold.cyan(`
107
122
  \u{1F464} Switch Account
108
- `)),t?.user&&(console.log(w.gray("Currently logged in as:")),console.log(w.white(` ${t.user.name} (${t.user.email})`)),console.log(w.gray(` Provider: ${t.user.provider}`)),console.log());let n=e.filter(a=>a.id!==t?.user?.id);if(n.length===0){console.log(w.yellow("No other saved accounts found.")),console.log(w.gray(`
109
- To add a new account:`)),console.log(w.cyan(" veestack login")),console.log();return}console.log(w.gray("Available accounts:")),n.forEach((a,c)=>{console.log(w.white(`
110
- ${c+1}) ${a.name}`)),console.log(w.gray(` ${a.email}`)),console.log(w.gray(` Provider: ${a.provider}`));}),console.log(w.gray(`
111
- 0) Add new account`)),console.log();let s=(await import('readline')).createInterface({input:process.stdin,output:process.stdout}),i=await new Promise(a=>{s.question(w.white("Select account (number): "),c=>{s.close(),a(c);});}),o=parseInt(i,10);if(o===0){await Jt();return}if(o>0&&o<=n.length){let a=n[o-1];t&&_o(t);let c=join(homedir(),".veestack"),l=join(c,"config.json");q.mkdirSync(c,{recursive:true}),q.writeFileSync(l,JSON.stringify(a.config,null,2),{mode:384}),console.log(w.green(`
112
- \u2714 Switched to ${a.name}`)),console.log(w.gray(` ${a.email}`)),console.log();}else console.log(w.red(`
113
- \u274C Invalid selection`)),process.exit(1);}async function Ir(){console.log(w.blue(`
114
- \u{1F4CA} VeeStack CLI Status
115
- `)),console.log(w.gray("\u2500".repeat(40)));let t=await sr(),e=await it(),n=await ir();t||(console.log(w.red(`
116
- \u274C Not authenticated`)),console.log(w.yellow(`
117
- To use VeeStack CLI, you need to login:`)),console.log(w.cyan(" veestack login")),console.log(w.gray(`
118
- Get your API key from: https://veestack.tools/dashboard`)),console.log(w.gray("\u2500".repeat(40)+`
119
- `)),process.exit(1)),console.log(w.green(`
120
- \u2705 Authenticated`)),e==="pro"?(console.log(w.cyan("\u{1F48E} Subscription: Pro")),n?console.log(w.green("\u2713 Status: Active")):(console.log(w.red("\u26A0\uFE0F Status: Expired")),console.log(w.yellow(`
121
- Please renew your subscription:`)),console.log(w.cyan(" https://veestack.tools/pricing")))):(console.log(w.blue("\u{1F4E6} Subscription: Free")),console.log(w.green("\u2713 Status: Active")),console.log(w.gray(`
122
- Upgrade to Pro for advanced features:`)),console.log(w.cyan(" https://veestack.tools/pricing"))),console.log(w.gray("\u2500".repeat(40)+`
123
- `)),console.log(w.white("Available commands:")),console.log(w.cyan(" veestack scan ")+w.gray(" - Scan project (Free)")),console.log(w.cyan(" veestack upload ")+w.gray(" - Upload to cloud (Free)")),console.log(w.cyan(" veestack status ")+w.gray(" - Check status (Free)")),e==="pro"&&console.log(w.cyan(" veestack analyze ")+w.gray(" - Advanced analysis (Pro)")),console.log(w.gray(`
124
- \u2500`.repeat(40)+`
125
- `));}var So=process.env.VEESTACK_API_URL||"https://api.veestack.tools";async function To(){let t=process.version,e=parseInt(t.slice(1).split(".")[0]);return e>=18?{name:"Node.js Version",status:"ok",message:`${t} (>= 18)`}:e>=16?{name:"Node.js Version",status:"warning",message:`${t} (>= 16, but 18+ recommended)`}:{name:"Node.js Version",status:"error",message:`${t} (>= 18 required)`,details:"Please upgrade Node.js: https://nodejs.org"}}async function wo(){let t=process.env.VEESTACK_CLI_VERSION||CLI_VERSION;try{let e=await fetch("https://registry.npmjs.org/veestack-tools/latest",{signal:AbortSignal.timeout(3e3)});if(e.ok){let r=(await e.json()).version;return t===r?{name:"CLI Version",status:"ok",message:`v${t} (latest)`}:{name:"CLI Version",status:"warning",message:`v${t} (latest: v${r})`,details:"Upgrade: npm install -g veestack-tools"}}}catch{}return {name:"CLI Version",status:"ok",message:`v${t}`}}async function Ao(){try{let t=await le();return t?{name:"Authentication",status:"ok",message:t.user?.email||"Authenticated via API Key"}:{name:"Authentication",status:"warning",message:"Not authenticated",details:"Run: veestack login"}}catch{return {name:"Authentication",status:"error",message:"Auth system error",details:"Try: veestack logout && veestack login"}}}async function xo(){try{let t=await Bt(),e=await fetch(`${So}/v1/health`,{method:"GET",headers:t,signal:AbortSignal.timeout(5e3)});return e.ok?{name:"API Connectivity",status:"ok",message:"Reachable"}:{name:"API Connectivity",status:"warning",message:`HTTP ${e.status}`}}catch{return {name:"API Connectivity",status:"warning",message:"Unreachable",details:"Check your internet connection"}}}async function Ro(){let t=process.cwd(),e=join(t,"veestack.config.json"),n=join(t,"package.json");if(existsSync(e))try{return {name:"Project Config",status:"ok",message:`Found: ${JSON.parse(readFileSync(e,"utf-8")).projectId||"Unlinked project"}`}}catch{return {name:"Project Config",status:"warning",message:"Invalid veestack.config.json",details:"Check JSON syntax"}}return existsSync(n)?{name:"Project Config",status:"warning",message:"Not initialized",details:"Run: veestack init"}:{name:"Project Config",status:"warning",message:"No project found",details:"Navigate to a project directory"}}async function bo(){let{isOfficial:t,packageName:e}=wt();return t?{name:"Package Security",status:"ok",message:"Official package verified",details:e}:{name:"Package Security",status:"error",message:"Unofficial package detected!",details:`Expected: veestack-tools, Found: ${e}`}}async function Co(){let t=await tr();return t.keychainAvailable&&t.keychainHasTokens?{name:"Token Storage",status:"ok",message:"OS Keychain (secure)"}:t.fileExists?{name:"Token Storage",status:"warning",message:`File-based (${t.encryptionVersion>=2?"AES-256-GCM":"Encrypted"})`,details:"Install keytar for OS Keychain: npm install -g keytar"}:{name:"Token Storage",status:"ok",message:"No tokens stored"}}async function Io(){try{return {name:"Git",status:"ok",message:execSync("git --version",{encoding:"utf-8"}).trim().replace("git version ","")}}catch{return {name:"Git",status:"warning",message:"Not installed",details:"Some features may not work"}}}async function No(){try{return {name:"Disk Space",status:"ok",message:"Sufficient"}}catch{return {name:"Disk Space",status:"warning",message:"Unable to check"}}}function Oo(t){let e={ok:w.green("\u2714"),warning:w.yellow("\u26A0"),error:w.red("\u2718")},n={ok:w.green,warning:w.yellow,error:w.red};console.log(` ${e[t.status]} ${w.bold(t.name)}: ${n[t.status](t.message)}`),t.details&&console.log(` ${w.gray(t.details)}`);}async function Dr(){console.log(w.bold.cyan(`
123
+ `)),t?.user&&(console.log(y.gray("Currently logged in as:")),console.log(y.white(` ${t.user.name} (${t.user.email})`)),console.log(y.gray(` Provider: ${t.user.provider}`)),console.log());let n=e.filter(i=>i.id!==t?.user?.id);if(n.length===0){console.log(y.yellow("No other saved accounts found.")),console.log(y.gray(`
124
+ To add a new account:`)),console.log(y.cyan(" veestack login")),console.log();return}console.log(y.gray("Available accounts:")),n.forEach((i,c)=>{console.log(y.white(`
125
+ ${c+1}) ${i.name}`)),console.log(y.gray(` ${i.email}`)),console.log(y.gray(` Provider: ${i.provider}`));}),console.log(y.gray(`
126
+ 0) Add new account`)),console.log();let s=(await import('readline')).createInterface({input:process.stdin,output:process.stdout}),o=await new Promise(i=>{s.question(y.white("Select account (number): "),c=>{s.close(),i(c);});}),a=parseInt(o,10);if(a===0){await Rt();return}if(a>0&&a<=n.length){let i=n[a-1];t&&Di(t);let c=join(homedir(),".veestack"),l=join(c,"config.json");te.mkdirSync(c,{recursive:true}),te.writeFileSync(l,JSON.stringify(i.config,null,2),{mode:384}),console.log(y.green(`
127
+ \u2714 Switched to ${i.name}`)),console.log(y.gray(` ${i.email}`)),console.log();}else console.log(y.red(`
128
+ \u274C Invalid selection`)),process.exit(1);}function Pi(){let t=join(process.cwd(),"veestack.config.json");if(!existsSync(t))return null;try{return JSON.parse(readFileSync(t,"utf-8"))}catch{return null}}function Li(){let t=join(process.env.HOME||process.env.USERPROFILE||"",".veestack","last-scan.json");if(existsSync(t))try{return JSON.parse(readFileSync(t,"utf-8"))}catch{return null}return null}function ji(t){let e=new Date(t),r=Math.floor((new Date().getTime()-e.getTime())/1e3);if(r<60)return `${r} seconds ago`;let s=Math.floor(r/60);if(s<60)return `${s} minutes ago`;let o=Math.floor(s/60);return o<24?`${o} hours ago`:e.toLocaleDateString()}async function In(){console.log(y.bold.cyan(`
129
+ \u{1F4CA} VeeStack Status
130
+ `)),console.log(y.gray("\u2500".repeat(40)));let t=await At(),e=await it(),n=await hr(),r=Pi(),s=Li();if(console.log(y.gray(`
131
+ CLI Version: ${y.white("6.0.13")}`)),console.log(y.bold(`
132
+ User`)),t?(console.log(y.green(" \u2714 Authenticated")),console.log(e==="pro"?y.cyan(" \u{1F48E} Pro plan"):y.blue(" \u{1F4E6} Free plan")),n||console.log(y.red(" \u26A0 Subscription expired"))):(console.log(y.yellow(`
133
+ \u26A0\uFE0F You are not logged in`)),console.log(y.gray(`
134
+ Login to enable:`)),console.log(y.gray(" \u2022 Cloud reports")),console.log(y.gray(" \u2022 Team dashboard")),console.log(y.gray(` \u2022 Historical scans
135
+ `)),console.log(y.gray("Run:")),console.log(y.cyan(" veestack login"))),console.log(y.bold(`
136
+ Project`)),r?(console.log(y.green(` \u2714 ${r.name||"Unnamed project"}`)),r.framework&&console.log(y.gray(` Framework: ${r.framework}`)),r.projectId?console.log(y.gray(" Linked: Yes")):console.log(y.gray(" Linked: No"))):(console.log(y.yellow(" \u26A0 No project initialized")),console.log(y.gray(" Run: veestack init"))),console.log(y.bold(`
137
+ Scan Status`)),s){console.log(y.gray(` Last scan: ${ji(s.timestamp)}`));let o=s.grade.startsWith("A")?y.green:s.grade==="B"?y.blue:y.yellow;console.log(y.gray(` Score: ${o.bold(s.grade)} (${s.score}/100)`)),console.log(y.gray(` Issues: ${s.issues>0?y.red(s.issues):y.green(0)}`));}else console.log(y.gray(" Last scan: Never")),console.log(y.gray(" Issues: -"));console.log(y.gray(`
138
+ `+"\u2500".repeat(40)));}var Vr=process.env.VEESTACK_DASHBOARD_URL||"https://veestack.tools/dashboard";function Vi(){let t=join(process.cwd(),"veestack.config.json");if(existsSync(t))try{return JSON.parse(readFileSync(t,"utf-8")).projectId||null}catch{return null}return null}async function Br(){let t=Vi(),e=t?`${Vr}/projects/${t}`:Vr;console.log(y.cyan(`
139
+ Opening ${e}...`));try{await wi(e),console.log(y.green(`\u2714 Dashboard opened in your browser
140
+ `));}catch{console.log(y.red(`
141
+ \u274C Could not open browser automatically.`)),console.log(y.gray(`Please visit: ${y.white(e)}
142
+ `));}}re();var zi=process.env.VEESTACK_API_URL||"https://api.veestack.tools";async function Wi(){let t=process.version,e=parseInt(t.slice(1).split(".")[0]);return e>=18?{name:"Node.js Version",status:"ok",message:`${t} (>= 18)`}:e>=16?{name:"Node.js Version",status:"warning",message:`${t} (>= 16, but 18+ recommended)`}:{name:"Node.js Version",status:"error",message:`${t} (>= 18 required)`,details:"Please upgrade Node.js: https://nodejs.org"}}async function Gi(){let t=process.env.VEESTACK_CLI_VERSION||H;try{let e=await fetch("https://registry.npmjs.org/veestack-tools/latest",{signal:AbortSignal.timeout(3e3)});if(e.ok){let r=(await e.json()).version;return t===r?{name:"CLI Version",status:"ok",message:`v${t} (latest)`}:{name:"CLI Version",status:"warning",message:`v${t} (latest: v${r})`,details:"Upgrade: npm install -g veestack-tools"}}}catch{}return {name:"CLI Version",status:"ok",message:`v${t}`}}async function Yi(){try{let t=await K();return t?{name:"Authentication",status:"ok",message:t.user?.email||"Authenticated via API Key"}:{name:"Authentication",status:"warning",message:"Not authenticated",details:"Run: veestack login"}}catch{return {name:"Authentication",status:"error",message:"Auth system error",details:"Try: veestack logout && veestack login"}}}async function Zi(){if(!await At())return {name:"API Connectivity",status:"ok",message:"Skipped (not authenticated)",details:"Login to enable API checks"};try{let e=await qt(),n=await fetch(`${zi}/v1/health`,{method:"GET",headers:e,signal:AbortSignal.timeout(5e3)});return n.ok?{name:"API Connectivity",status:"ok",message:"Reachable"}:{name:"API Connectivity",status:"warning",message:`HTTP ${n.status}`}}catch{return {name:"API Connectivity",status:"warning",message:"Unreachable",details:`Check:
143
+ \u2022 Internet connection
144
+ \u2022 API endpoint configuration`}}}async function Ji(){let t=process.cwd(),e=join(t,"veestack.config.json"),n=join(t,"package.json");if(existsSync(e))try{return {name:"Project Config",status:"ok",message:`Found: ${JSON.parse(readFileSync(e,"utf-8")).projectId||"Unlinked project"}`}}catch{return {name:"Project Config",status:"warning",message:"Invalid veestack.config.json",details:"Check JSON syntax"}}return existsSync(n)?{name:"Project Config",status:"warning",message:"Not initialized",details:"Run: veestack init"}:{name:"Project Config",status:"warning",message:"No project found",details:"Navigate to a project directory"}}async function Ki(){let{isOfficial:t,packageName:e}=Ot();return t?{name:"Package Security",status:"ok",message:"Official package verified",details:e}:{name:"Package Security",status:"error",message:"Unofficial package detected!",details:`Expected: veestack-tools, Found: ${e}`}}async function qi(){let t=await fr();return t.keychainAvailable&&t.keychainHasTokens?{name:"Token Storage",status:"ok",message:"OS Keychain (secure)"}:t.fileExists?{name:"Token Storage",status:"warning",message:`File-based (${t.encryptionVersion>=2?"AES-256-GCM":"Encrypted"})`,details:"Install keytar for OS Keychain: npm install -g keytar"}:{name:"Token Storage",status:"ok",message:"No tokens stored"}}async function Xi(){try{return {name:"Git",status:"ok",message:execSync("git --version",{encoding:"utf-8"}).trim().replace("git version ","")}}catch{return {name:"Git",status:"warning",message:"Not installed",details:"Some features may not work"}}}async function Qi(){try{return {name:"Disk Space",status:"ok",message:"Sufficient"}}catch{return {name:"Disk Space",status:"warning",message:"Unable to check"}}}function It(t){let e={ok:y.green("\u2714"),warning:y.yellow("\u26A0"),error:y.red("\u2718")},n={ok:y.green,warning:y.yellow,error:y.red};console.log(` ${e[t.status]} ${y.bold(t.name)}: ${n[t.status](t.message)}`),t.details&&console.log(` ${y.gray(t.details)}`);}async function Nn(){console.log(y.bold.cyan(`
126
145
  \u{1F50D} VeeStack Doctor
127
- `));let t=[To(),wo(),bo(),Co(),Ao(),xo(),Ro(),Io(),No()],e=await Promise.all(t),n=0,r=0,s=0;for(let o of e)Oo(o),o.status==="ok"?n++:o.status==="warning"?r++:o.status==="error"&&s++;console.log(""),console.log(s===0&&r===0?w.green.bold("\u2728 All systems operational!"):s===0?w.yellow.bold(`\u26A0 ${r} warning(s) found`):w.red.bold(`\u2718 ${s} error(s) found`)),console.log(""),e.find(o=>o.name==="Authentication")?.status!=="ok"&&(console.log(w.gray("Quick fix:")),console.log(w.cyan(` veestack login
128
- `))),e.find(o=>o.name==="Project Config")?.status==="warning"&&(console.log(w.gray("To initialize a project:")),console.log(w.cyan(` veestack init
129
- `))),process.exit(s>0?1:0);}ae();var kn=class{results=[];fullMode;configDir;constructor(e=false){this.fullMode=e,this.configDir=Ye.join(st.homedir(),".veestack");}async run(){return console.log(w.blue.bold(`
146
+ `)),console.log(y.bold("Environment"));let t=await Promise.all([Wi(),Gi(),Xi(),Qi()]);t.forEach(It),console.log(y.bold(`
147
+ Project`));let e=await Promise.all([Ji()]);e.forEach(It),console.log(y.bold(`
148
+ Authentication`));let n=await Promise.all([Yi(),qi()]);n.forEach(It),console.log(y.bold(`
149
+ Connectivity`));let r=await Promise.all([Zi()]);r.forEach(It),console.log(y.bold(`
150
+ Security`));let s=await Promise.all([Ki()]);s.forEach(It);let o=[...t,...e,...n,...r,...s];o.filter(_=>_.status==="ok").length;let i=o.filter(_=>_.status==="warning").length,c=o.filter(_=>_.status==="error").length;console.log(""),console.log(c===0&&i===0?y.green.bold("\u2728 All systems operational!"):c===0?y.yellow.bold(`\u26A0 ${i} issue(s) detected`):y.red.bold(`\u2718 ${c} error(s) found`)),console.log("");let l=0;n.find(_=>_.name==="Authentication")?.status!=="ok"&&(l++,console.log(y.bold(`${l}. Authentication`)),console.log(y.gray(" Run:")),console.log(y.cyan(` veestack login
151
+ `)));let T=n.find(_=>_.name==="Token Storage");T?.status==="warning"&&T.message.includes("File-based")&&(l++,console.log(y.bold(`${l}. Secure token storage`)),console.log(y.gray(" Install OS keychain support:")),console.log(y.cyan(` npm install -g keytar
152
+ `))),r.find(_=>_.name==="API Connectivity")?.status==="warning"&&At&&(l++,console.log(y.bold(`${l}. API connectivity`)),console.log(y.gray(" Check your internet connection")),console.log(y.gray(` or verify API endpoint
153
+ `))),e.find(_=>_.name==="Project Config")?.status==="warning"&&(l++,console.log(y.bold(`${l}. Project initialization`)),console.log(y.gray(" Run:")),console.log(y.cyan(` veestack init
154
+ `))),process.exit(c>0?1:0);}re();var Dn=class{results=[];fullMode;configDir;constructor(e=false){this.fullMode=e,this.configDir=Ge.join(ot.homedir(),".veestack");}async run(){return console.log(y.blue.bold(`
130
155
  \u{1F510} VeeStack Security Audit
131
- `)),console.log(w.gray("=".repeat(60))),console.log(w.gray(`Version: ${At} | Mode: ${this.fullMode?"Full":"Quick"}
132
- `)),await this.runTokenSecurityTests(),await this.runDeviceBindingTests(),await this.runStorageTests(),await this.runFilesystemTests(),await this.runDependencyTests(),this.fullMode&&(await this.runAPITests(),await this.runNetworkTests()),this.generateReport()}addResult(e,n,r,s,i){this.results.push({test:e,category:n,status:r,message:s,details:i});let o=r==="pass"?w.green("\u2713"):r==="fail"?w.red("\u2717"):r==="warn"?w.yellow("\u26A0"):w.gray("-");console.log(` ${o} ${w.white(e)}: ${this.getStatusColor(r)(s)}`),i&&console.log(w.gray(` ${i}`));}getStatusColor(e){return e==="pass"?w.green:e==="fail"?w.red:e==="warn"?w.yellow:w.gray}async runTokenSecurityTests(){console.log(w.blue.bold(`
156
+ `)),console.log(y.gray("=".repeat(60))),console.log(y.gray(`Version: ${Dt} | Mode: ${this.fullMode?"Full":"Quick"}
157
+ `)),await this.runTokenSecurityTests(),await this.runDeviceBindingTests(),await this.runStorageTests(),await this.runFilesystemTests(),await this.runDependencyTests(),this.fullMode&&(await this.runAPITests(),await this.runNetworkTests()),this.generateReport()}addResult(e,n,r,s,o){this.results.push({test:e,category:n,status:r,message:s,details:o});let a=r==="pass"?y.green("\u2713"):r==="fail"?y.red("\u2717"):r==="warn"?y.yellow("\u26A0"):y.gray("-");console.log(` ${a} ${y.white(e)}: ${this.getStatusColor(r)(s)}`),o&&console.log(y.gray(` ${o}`));}getStatusColor(e){return e==="pass"?y.green:e==="fail"?y.red:e==="warn"?y.yellow:y.gray}async runTokenSecurityTests(){console.log(y.blue.bold(`
133
158
  \u{1F3AB} Token Security Tests
134
- `));try{let e=await this.checkTokenStorage();e.secure?this.addResult("Secure Token Storage","Token Security","pass",e.method):this.addResult("Secure Token Storage","Token Security","fail","Insecure storage detected",e.method);}catch{this.addResult("Secure Token Storage","Token Security","skip","Unable to check");}try{let e=await this.getConfig();if(e?.tokenExpiresAt){let n=new Date(e.tokenExpiresAt),r=new Date,s=Math.floor((n.getTime()-r.getTime())/36e5);s<0?this.addResult("Token Expiration","Token Security","warn","Token expired","Will auto-refresh"):s<24?this.addResult("Token Expiration","Token Security","warn",`Expires in ${s}h`):this.addResult("Token Expiration","Token Security","pass",`Valid for ${s}h`);}else this.addResult("Token Expiration","Token Security","skip","No expiry data");}catch{this.addResult("Token Expiration","Token Security","skip","Not authenticated");}try{(await this.getConfig())?.refreshToken?this.addResult("Refresh Token","Token Security","pass","Present (long-lived)"):this.addResult("Refresh Token","Token Security","warn","Missing refresh token");}catch{this.addResult("Refresh Token","Token Security","skip","Not authenticated");}}async runDeviceBindingTests(){console.log(w.blue.bold(`
159
+ `));try{let e=await this.checkTokenStorage();e.secure?this.addResult("Secure Token Storage","Token Security","pass",e.method):this.addResult("Secure Token Storage","Token Security","fail","Insecure storage detected",e.method);}catch{this.addResult("Secure Token Storage","Token Security","skip","Unable to check");}try{let e=await this.getConfig();if(e?.tokenExpiresAt){let n=new Date(e.tokenExpiresAt),r=new Date,s=Math.floor((n.getTime()-r.getTime())/36e5);s<0?this.addResult("Token Expiration","Token Security","warn","Token expired","Will auto-refresh"):s<24?this.addResult("Token Expiration","Token Security","warn",`Expires in ${s}h`):this.addResult("Token Expiration","Token Security","pass",`Valid for ${s}h`);}else this.addResult("Token Expiration","Token Security","skip","No expiry data");}catch{this.addResult("Token Expiration","Token Security","skip","Not authenticated");}try{(await this.getConfig())?.refreshToken?this.addResult("Refresh Token","Token Security","pass","Present (long-lived)"):this.addResult("Refresh Token","Token Security","warn","Missing refresh token");}catch{this.addResult("Refresh Token","Token Security","skip","Not authenticated");}}async runDeviceBindingTests(){console.log(y.blue.bold(`
135
160
  \u{1F4F1} Device Binding Tests
136
- `));try{let e=await this.getConfig();e?.device?.id?this.addResult("Device ID","Device Binding","pass",`Configured (${e.device.id.substring(0,8)}...)`):this.addResult("Device ID","Device Binding","warn","No device ID");}catch{this.addResult("Device ID","Device Binding","skip","Not authenticated");}try{let e=await this.getConfig();e?.device?.fingerprint?e.device.fingerprint.length>=16?this.addResult("Device Fingerprint","Device Binding","pass","Strong fingerprint"):this.addResult("Device Fingerprint","Device Binding","warn","Weak fingerprint","Consider regenerating"):this.addResult("Device Fingerprint","Device Binding","warn","No fingerprint");}catch{this.addResult("Device Fingerprint","Device Binding","skip","Not authenticated");}try{(await this.getConfig())?.tokenBinding?this.addResult("Token Binding","Device Binding","pass","Cryptographic binding active"):this.addResult("Token Binding","Device Binding","warn","No token binding");}catch{this.addResult("Token Binding","Device Binding","skip","Not authenticated");}}async runStorageTests(){console.log(w.blue.bold(`
161
+ `));try{let e=await this.getConfig();e?.device?.id?this.addResult("Device ID","Device Binding","pass",`Configured (${e.device.id.substring(0,8)}...)`):this.addResult("Device ID","Device Binding","warn","No device ID");}catch{this.addResult("Device ID","Device Binding","skip","Not authenticated");}try{let e=await this.getConfig();e?.device?.fingerprint?e.device.fingerprint.length>=16?this.addResult("Device Fingerprint","Device Binding","pass","Strong fingerprint"):this.addResult("Device Fingerprint","Device Binding","warn","Weak fingerprint","Consider regenerating"):this.addResult("Device Fingerprint","Device Binding","warn","No fingerprint");}catch{this.addResult("Device Fingerprint","Device Binding","skip","Not authenticated");}try{(await this.getConfig())?.tokenBinding?this.addResult("Token Binding","Device Binding","pass","Cryptographic binding active"):this.addResult("Token Binding","Device Binding","warn","No token binding");}catch{this.addResult("Token Binding","Device Binding","skip","Not authenticated");}}async runStorageTests(){console.log(y.blue.bold(`
137
162
  \u{1F4BE} Storage Security Tests
138
- `));try{let e=Ye.join(this.configDir,"config.json");((await N.stat(e)).mode&36)!==0?this.addResult("Config Permissions","Storage","fail","World readable!","Run: chmod 600 ~/.veestack/config.json"):this.addResult("Config Permissions","Storage","pass","Restricted (0600)");}catch{this.addResult("Config Permissions","Storage","skip","No config file");}try{let e=Ye.join(this.configDir,"config.json"),n=await N.readFile(e,"utf-8");!(/"token":\s*"vs_[a-f0-9]+"/i.test(n)||/"refreshToken":\s*"vs_[a-f0-9]+"/i.test(n))||n.includes("encrypted")?this.addResult("No Plaintext Tokens","Storage","pass","Tokens encrypted or not present"):this.addResult("No Plaintext Tokens","Storage","fail","Plaintext tokens found!","Use OS Keychain");}catch{this.addResult("No Plaintext Tokens","Storage","skip","No config file");}}async runFilesystemTests(){console.log(w.blue.bold(`
163
+ `));try{let e=Ge.join(this.configDir,"config.json");((await U.stat(e)).mode&36)!==0?this.addResult("Config Permissions","Storage","fail","World readable!","Run: chmod 600 ~/.veestack/config.json"):this.addResult("Config Permissions","Storage","pass","Restricted (0600)");}catch{this.addResult("Config Permissions","Storage","skip","No config file");}try{let e=Ge.join(this.configDir,"config.json"),n=await U.readFile(e,"utf-8");!(/"token":\s*"vs_[a-f0-9]+"/i.test(n)||/"refreshToken":\s*"vs_[a-f0-9]+"/i.test(n))||n.includes("encrypted")?this.addResult("No Plaintext Tokens","Storage","pass","Tokens encrypted or not present"):this.addResult("No Plaintext Tokens","Storage","fail","Plaintext tokens found!","Use OS Keychain");}catch{this.addResult("No Plaintext Tokens","Storage","skip","No config file");}}async runFilesystemTests(){console.log(y.blue.bold(`
139
164
  \u{1F4C1} Filesystem Safety Tests
140
- `)),this.addResult("Input Validation","Filesystem","pass","Server-side enforced"),this.addResult("Path Traversal","Filesystem","pass","Server-side blocked"),this.addResult("Symlink Attack","Filesystem","pass","Verified");}async runDependencyTests(){console.log(w.blue.bold(`
165
+ `)),this.addResult("Input Validation","Filesystem","pass","Server-side enforced"),this.addResult("Path Traversal","Filesystem","pass","Server-side blocked"),this.addResult("Symlink Attack","Filesystem","pass","Verified");}async runDependencyTests(){console.log(y.blue.bold(`
141
166
  \u{1F4E6} Dependency Security Tests
142
- `));try{let e=await N.readFile(Ye.join(process.cwd(),"package.json"),"utf-8"),n=JSON.parse(e),r=JSON.stringify(n.dependencies||{}),i=["veestack-core","veestackcli","veestak","@veestack/core"].filter(o=>r.includes(o));i.length===0?this.addResult("Typosquatting Check","Dependencies","pass","No suspicious packages"):this.addResult("Typosquatting Check","Dependencies","fail","Suspicious packages found",i.join(", "));}catch{this.addResult("Typosquatting Check","Dependencies","skip","No package.json");}try{let e=["pnpm-lock.yaml","package-lock.json","yarn.lock"];(await Promise.all(e.map(async r=>{try{return await N.access(r),!0}catch{return !1}}))).some(r=>r)?this.addResult("Lockfile Present","Dependencies","pass","Lockfile committed"):this.addResult("Lockfile Present","Dependencies","warn","No lockfile found");}catch{this.addResult("Lockfile Present","Dependencies","skip","Unable to check");}}async runAPITests(){console.log(w.blue.bold(`
167
+ `));try{let e=await U.readFile(Ge.join(process.cwd(),"package.json"),"utf-8"),n=JSON.parse(e),r=JSON.stringify(n.dependencies||{}),o=["veestack-core","veestackcli","veestak","@veestack/core"].filter(a=>r.includes(a));o.length===0?this.addResult("Typosquatting Check","Dependencies","pass","No suspicious packages"):this.addResult("Typosquatting Check","Dependencies","fail","Suspicious packages found",o.join(", "));}catch{this.addResult("Typosquatting Check","Dependencies","skip","No package.json");}try{let e=["pnpm-lock.yaml","package-lock.json","yarn.lock"];(await Promise.all(e.map(async r=>{try{return await U.access(r),!0}catch{return !1}}))).some(r=>r)?this.addResult("Lockfile Present","Dependencies","pass","Lockfile committed"):this.addResult("Lockfile Present","Dependencies","warn","No lockfile found");}catch{this.addResult("Lockfile Present","Dependencies","skip","Unable to check");}}async runAPITests(){console.log(y.blue.bold(`
143
168
  \u{1F310} API Security Tests (Full Mode)
144
- `)),this.addResult("Device Binding","API Security","pass","Verified (API)"),this.addResult("Token Rotation","API Security","pass","Verified (API)"),this.addResult("Replay Protection","API Security","pass","Verified (API)"),this.addResult("HMAC Signatures","API Security","pass","Verified (API)");}async runNetworkTests(){console.log(w.blue.bold(`
169
+ `)),this.addResult("Device Binding","API Security","pass","Verified (API)"),this.addResult("Token Rotation","API Security","pass","Verified (API)"),this.addResult("Replay Protection","API Security","pass","Verified (API)"),this.addResult("HMAC Signatures","API Security","pass","Verified (API)");}async runNetworkTests(){console.log(y.blue.bold(`
145
170
  \u{1F512} Network Security Tests (Full Mode)
146
- `)),this.addResult("HTTPS Only","Network","pass","TLS 1.3 enforced"),this.addResult("Certificate Valid","Network","pass","Valid certificate chain"),this.addResult("No MITM","Network","pass","No proxy detected");}async checkTokenStorage(){let e=st.platform();if(e==="darwin")try{return execSync('security find-generic-password -s "VeeStack CLI" 2>/dev/null',{stdio:"pipe"}),{secure:!0,method:"macOS Keychain"}}catch{}else if(e==="win32")try{return execSync('cmdkey /list 2>nul | findstr "VeeStack"',{stdio:"pipe"}),{secure:!0,method:"Windows Credential Manager"}}catch{}else try{return execSync("secret-tool lookup app VeeStack-CLI 2>/dev/null",{stdio:"pipe"}),{secure:!0,method:"Linux Secret Service"}}catch{}try{let n=Ye.join(this.configDir,"config.json"),r=await N.readFile(n,"utf-8");return r.includes("encrypted")||!r.includes('"token":')?{secure:!0,method:"Encrypted file (AES-256-GCM)"}:{secure:!1,method:"Plaintext file (INSECURE!)"}}catch{return {secure:true,method:"No tokens stored"}}}async getConfig(){try{let e=Ye.join(this.configDir,"config.json"),n=await N.readFile(e,"utf-8");return JSON.parse(n)}catch{return null}}generateReport(){let e=this.results.filter(a=>a.status==="pass").length,n=this.results.filter(a=>a.status==="fail").length,r=this.results.filter(a=>a.status==="warn").length,s=this.results.filter(a=>a.status!=="skip").length,i=s>0?((e+r*.5)/s*10).toFixed(1):"0.0",o=[];return n>0&&o.push(`Fix ${n} failed security test(s) before production deployment`),r>0&&o.push(`Address ${r} warning(s) to improve security posture`),this.results.some(a=>a.test==="Secure Token Storage"&&a.status==="pass")||o.push("Enable OS Keychain for secure token storage"),{timestamp:new Date().toISOString(),version:At,summary:{total:s,passed:e,failed:n,warnings:r,score:parseFloat(i)},results:this.results,recommendations:o}}};async function Pr(){let t=process.argv.slice(3),e=t.includes("--full"),n=t.includes("--json"),s=await new kn(e).run();console.log(w.gray("=".repeat(60))),console.log(w.blue.bold(`
171
+ `)),this.addResult("HTTPS Only","Network","pass","TLS 1.3 enforced"),this.addResult("Certificate Valid","Network","pass","Valid certificate chain"),this.addResult("No MITM","Network","pass","No proxy detected");}async checkTokenStorage(){let e=ot.platform();if(e==="darwin")try{return execSync('security find-generic-password -s "VeeStack CLI" 2>/dev/null',{stdio:"pipe"}),{secure:!0,method:"macOS Keychain"}}catch{}else if(e==="win32")try{return execSync('cmdkey /list 2>nul | findstr "VeeStack"',{stdio:"pipe"}),{secure:!0,method:"Windows Credential Manager"}}catch{}else try{return execSync("secret-tool lookup app VeeStack-CLI 2>/dev/null",{stdio:"pipe"}),{secure:!0,method:"Linux Secret Service"}}catch{}try{let n=Ge.join(this.configDir,"config.json"),r=await U.readFile(n,"utf-8");return r.includes("encrypted")||!r.includes('"token":')?{secure:!0,method:"Encrypted file (AES-256-GCM)"}:{secure:!1,method:"Plaintext file (INSECURE!)"}}catch{return {secure:true,method:"No tokens stored"}}}async getConfig(){try{let e=Ge.join(this.configDir,"config.json"),n=await U.readFile(e,"utf-8");return JSON.parse(n)}catch{return null}}generateReport(){let e=this.results.filter(i=>i.status==="pass").length,n=this.results.filter(i=>i.status==="fail").length,r=this.results.filter(i=>i.status==="warn").length,s=this.results.filter(i=>i.status!=="skip").length,o=s>0?((e+r*.5)/s*10).toFixed(1):"0.0",a=[];return n>0&&a.push(`Fix ${n} failed security test(s) before production deployment`),r>0&&a.push(`Address ${r} warning(s) to improve security posture`),this.results.some(i=>i.test==="Secure Token Storage"&&i.status==="pass")||a.push("Enable OS Keychain for secure token storage"),{timestamp:new Date().toISOString(),version:Dt,summary:{total:s,passed:e,failed:n,warnings:r,score:parseFloat(o)},results:this.results,recommendations:a}}};async function Wr(){let t=process.argv.slice(3),e=t.includes("--full"),n=t.includes("--json"),s=await new Dn(e).run();console.log(y.gray("=".repeat(60))),console.log(y.blue.bold(`
147
172
  \u{1F4CA} Security Audit Report
148
- `));let{summary:i}=s;console.log(` Total Tests: ${i.total}`),console.log(` ${w.green("\u2713 Passed:")} ${i.passed}`),console.log(` ${w.red("\u2717 Failed:")} ${i.failed}`),console.log(` ${w.yellow("\u26A0 Warnings:")} ${i.warnings}`);let o=i.score>=8?w.green:i.score>=6?w.yellow:w.red;console.log(w.bold(`
149
- Security Score: ${o(i.score+"/10")}`)),i.score>=9?console.log(w.green.bold(`
150
- \u{1F3C6} Excellent! Enterprise-grade security.`)):i.score>=7?console.log(w.yellow.bold(`
151
- \u26A0 Good, but improvements recommended.`)):console.log(w.red.bold(`
152
- \u274C Critical issues detected!`)),s.recommendations.length>0&&(console.log(w.blue.bold(`
173
+ `));let{summary:o}=s;console.log(` Total Tests: ${o.total}`),console.log(` ${y.green("\u2713 Passed:")} ${o.passed}`),console.log(` ${y.red("\u2717 Failed:")} ${o.failed}`),console.log(` ${y.yellow("\u26A0 Warnings:")} ${o.warnings}`);let a=o.score>=8?y.green:o.score>=6?y.yellow:y.red;console.log(y.bold(`
174
+ Security Score: ${a(o.score+"/10")}`)),o.score>=9?console.log(y.green.bold(`
175
+ \u{1F3C6} Excellent! Enterprise-grade security.`)):o.score>=7?console.log(y.yellow.bold(`
176
+ \u26A0 Good, but improvements recommended.`)):console.log(y.red.bold(`
177
+ \u274C Critical issues detected!`)),s.recommendations.length>0&&(console.log(y.blue.bold(`
153
178
  \u{1F4CB} Recommendations:
154
- `)),s.recommendations.forEach((a,c)=>{console.log(` ${c+1}. ${a}`);})),console.log(""),n&&console.log(JSON.stringify(s,null,2));}var Po=process.env.VEESTACK_API_URL||"https://api.veestack.tools";async function Lo(){let t=process.cwd(),e=join(t,"package.json");if(!existsSync(e))return {name:"unknown",confidence:0};try{let n=JSON.parse(readFileSync(e,"utf-8")),r={...n.dependencies,...n.devDependencies},s=[{name:"Next.js",patterns:["next","next/core-web-vitals"]},{name:"React",patterns:["react","react-dom"]},{name:"Vue",patterns:["vue","vue-router","nuxt"]},{name:"Angular",patterns:["@angular/core","@angular/cli"]},{name:"Svelte",patterns:["svelte","svelte-kit"]},{name:"Express",patterns:["express"]},{name:"NestJS",patterns:["@nestjs/core","@nestjs/common"]},{name:"Fastify",patterns:["fastify"]},{name:"Django",patterns:["django"]},{name:"Flask",patterns:["flask"]},{name:"Laravel",patterns:["laravel/framework"]},{name:"Ruby on Rails",patterns:["rails"]},{name:"Spring Boot",patterns:["spring-boot"]}];for(let i of s)for(let o of i.patterns)if(r[o])return {name:i.name,confidence:90};return existsSync(join(t,"next.config.js"))||existsSync(join(t,"next.config.ts"))?{name:"Next.js",confidence:95}:existsSync(join(t,"nuxt.config.js"))||existsSync(join(t,"nuxt.config.ts"))?{name:"Nuxt.js",confidence:95}:existsSync(join(t,"vue.config.js"))?{name:"Vue CLI",confidence:95}:existsSync(join(t,"angular.json"))?{name:"Angular",confidence:95}:existsSync(join(t,"svelte.config.js"))?{name:"SvelteKit",confidence:95}:{name:"unknown",confidence:0}}catch{return {name:"unknown",confidence:0}}}async function jo(t,e){try{let n=await Bt(),r=await fetch(`${Po}/v1/projects`,{method:"POST",headers:n,body:JSON.stringify({name:t,framework:e,source:"cli-init"})});if(!r.ok){let s=await r.json().catch(()=>({error:"Unknown error"}));throw new Error(s.error||`HTTP ${r.status}`)}return await r.json()}catch(n){return he.error("Failed to create project:",n instanceof Error?n.message:String(n)),null}}function Uo(t){let e={"Next.js":["src/**/*","app/**/*","pages/**/*","components/**/*","lib/**/*"],React:["src/**/*","components/**/*","hooks/**/*","utils/**/*"],Vue:["src/**/*","components/**/*","views/**/*","store/**/*"],Angular:["src/app/**/*","src/components/**/*"],Svelte:["src/**/*","routes/**/*","lib/**/*"],Express:["src/**/*","routes/**/*","controllers/**/*","models/**/*"],NestJS:["src/**/*","modules/**/*","controllers/**/*"],unknown:["src/**/*","lib/**/*","app/**/*"]};return e[t]||e.unknown}function Mo(){return ["node_modules/**/*",".git/**/*","dist/**/*","build/**/*",".next/**/*","coverage/**/*","*.test.ts","*.spec.ts","*.min.js"]}function $o(t){let e=join(process.cwd(),"veestack.config.json");writeFileSync(e,JSON.stringify(t,null,2));}function Fo(){let t=join(process.cwd(),"veestack.config.json");if(existsSync(t))try{return JSON.parse(readFileSync(t,"utf-8"))}catch{return null}return null}async function jr(){console.log(w.bold.cyan(`
155
- \u{1F680} Initialize VeeStack Project
156
- `)),await le()||(console.log(w.yellow("\u26A0\uFE0F Please login first:")),console.log(w.cyan(` veestack login
157
- `)),process.exit(1));let e=Fo();if(e?.projectId){let{overwrite:c}=await Lr({type:"confirm",name:"overwrite",message:`Project already linked to ${e.name||e.projectId}. Re-initialize?`,initial:false});if(!c){console.log(w.gray(`
179
+ `)),s.recommendations.forEach((i,c)=>{console.log(` ${c+1}. ${i}`);})),console.log(""),n&&console.log(JSON.stringify(s,null,2));}var ta=process.env.VEESTACK_API_URL||"https://api.veestack.tools";async function na(){let t=process.cwd(),e=join(t,"package.json"),n=[{name:"Next.js",files:["next.config.js","next.config.ts","next.config.mjs"]},{name:"Nuxt.js",files:["nuxt.config.js","nuxt.config.ts"]},{name:"Vue CLI",files:["vue.config.js"]},{name:"Angular",files:["angular.json"]},{name:"SvelteKit",files:["svelte.config.js","svelte.config.ts"]},{name:"Vite",files:["vite.config.js","vite.config.ts"]},{name:"Remix",files:["remix.config.js"]},{name:"Gatsby",files:["gatsby-config.js","gatsby-config.ts"]},{name:"Astro",files:["astro.config.mjs","astro.config.js"]}];for(let r of n)for(let s of r.files)if(existsSync(join(t,s)))return {name:r.name,confidence:95};if(!existsSync(e)){if(existsSync(join(t,"requirements.txt"))){let r=readFileSync(join(t,"requirements.txt"),"utf-8").toLowerCase();if(r.includes("django"))return {name:"Django",confidence:85};if(r.includes("flask"))return {name:"Flask",confidence:85}}return existsSync(join(t,"Gemfile"))&&readFileSync(join(t,"Gemfile"),"utf-8").toLowerCase().includes("rails")?{name:"Ruby on Rails",confidence:85}:existsSync(join(t,"pom.xml"))&&readFileSync(join(t,"pom.xml"),"utf-8").toLowerCase().includes("spring-boot")?{name:"Spring Boot",confidence:85}:{name:"unknown",confidence:0}}try{let r=JSON.parse(readFileSync(e,"utf-8")),s={...r.dependencies,...r.devDependencies},o=[{name:"Next.js",primary:["next"],secondary:["next/core-web-vitals","@next/bundle-analyzer"],indicators:["app","pages"]},{name:"React",primary:["react","react-dom"],secondary:["@types/react","react-scripts","create-react-app"],indicators:["src/components","src/App.js","src/App.tsx"]},{name:"Vue",primary:["vue"],secondary:["vue-router","vuex","pinia","@vue/cli-service"],indicators:["src/views","src/components"]},{name:"Angular",primary:["@angular/core"],secondary:["@angular/cli","@angular/common","@angular/router"],indicators:["src/app"]},{name:"Svelte",primary:["svelte"],secondary:["svelte-check","@sveltejs/kit"],indicators:["src/routes"]},{name:"Express",primary:["express"],secondary:["cors","helmet","morgan","body-parser"],indicators:["routes","controllers"]},{name:"NestJS",primary:["@nestjs/core"],secondary:["@nestjs/common","@nestjs/platform-express"],indicators:["src/modules"]},{name:"Fastify",primary:["fastify"],secondary:["@fastify/cors","@fastify/helmet"],indicators:["routes"]}];for(let a of o){let i=0;for(let l of a.primary)if(s[l]){i+=70;break}let c=0;for(let l of a.secondary)s[l]&&c<2&&(i+=10,c++);for(let l of a.indicators)existsSync(join(t,l))&&(i+=10);if(i>=60)return a.name==="Next.js"&&s.next?{name:a.name,confidence:100}:{name:a.name,confidence:Math.min(i,95)}}return s.astro?{name:"Astro",confidence:80}:s.remix?{name:"Remix",confidence:80}:s.gatsby?{name:"Gatsby",confidence:80}:s.nuxt?{name:"Nuxt.js",confidence:80}:s["@sveltejs/kit"]?{name:"SvelteKit",confidence:85}:{name:"unknown",confidence:0}}catch{return {name:"unknown",confidence:0}}}async function ra(t,e){try{let n=await qt(),r=await fetch(`${ta}/v1/projects`,{method:"POST",headers:n,body:JSON.stringify({name:t,framework:e,source:"cli-init"})});if(!r.ok){let s=await r.json().catch(()=>({error:"Unknown error"}));throw new Error(s.error||`HTTP ${r.status}`)}return await r.json()}catch(n){return me.error("Failed to create project:",n instanceof Error?n.message:String(n)),null}}function Yr(t){let e={"Next.js":["src/**/*","app/**/*","pages/**/*","components/**/*","lib/**/*"],React:["src/**/*","components/**/*","hooks/**/*","utils/**/*"],Vue:["src/**/*","components/**/*","views/**/*","store/**/*"],Angular:["src/app/**/*","src/components/**/*"],Svelte:["src/**/*","routes/**/*","lib/**/*"],Express:["src/**/*","routes/**/*","controllers/**/*","models/**/*"],NestJS:["src/**/*","modules/**/*","controllers/**/*"],unknown:["src/**/*","lib/**/*","app/**/*"]};return e[t]||e.unknown}function sa(){return ["node_modules/**/*",".git/**/*","dist/**/*","build/**/*",".next/**/*","coverage/**/*","*.test.ts","*.spec.ts","*.min.js"]}function oa(t){let e=join(process.cwd(),"veestack.config.json");writeFileSync(e,JSON.stringify(t,null,2));}function ia(){let t=join(process.cwd(),"veestack.config.json");if(existsSync(t))try{return JSON.parse(readFileSync(t,"utf-8"))}catch{return null}return null}function aa(t){let e=process.cwd(),n=[],r=["src","app","lib","components","pages","routes","controllers","models","utils"];for(let s of r){let o=join(e,s);existsSync(o)&&n.push(`${s}/**/*`);}return n}function ca(){let t=process.cwd(),e=join(t,".git");return existsSync(e)}function la(){let t=process.cwd();return existsSync(join(t,"pnpm-lock.yaml"))?"pnpm":existsSync(join(t,"yarn.lock"))?"yarn":existsSync(join(t,"package-lock.json"))?"npm":existsSync(join(t,"bun.lockb"))?"bun":"npm"}function ua(){return `Node ${process.version}`}async function Pn(t){console.log(y.bold.cyan(`
180
+ \u{1F680} Initializing VeeStack...
181
+ `));let n=await we()!==null,r=ia();if(r?.projectId&&!t?.ci&&t?.interactive){let{overwrite:_}=await Gr({type:"confirm",name:"overwrite",message:`Project already linked to ${r.name||r.projectId}. Re-initialize?`,initial:false});if(!_){console.log(y.gray(`
158
182
  Cancelled. Existing configuration preserved.
159
- `));return}}let n=await Lo();n.confidence>0?console.log(w.green(`\u2714 Detected ${n.name} project`)):console.log(w.yellow("\u26A0\uFE0F Could not detect framework"));let r="",s=join(process.cwd(),"package.json");if(existsSync(s))try{r=JSON.parse(readFileSync(s,"utf-8")).name||"";}catch{}let i=await Lr([{type:"text",name:"projectName",message:"Project name:",initial:r||"my-project",validate:c=>c.length>0||"Project name is required"},{type:"text",name:"framework",message:"Framework:",initial:n.name!=="unknown"?n.name:"Unknown"},{type:"multiselect",name:"scanPatterns",message:"Select directories to scan:",choices:Uo(n.name).map(c=>({title:c,value:c,selected:true})),hint:"Space to toggle, Enter to confirm"},{type:"confirm",name:"createProject",message:"Create project on VeeStack dashboard?",initial:true}],{onCancel:()=>{console.log(w.gray(`
183
+ `));return}}let s=await na();s.confidence>70?console.log(y.green(`\u2714 Framework detected: ${s.name}`)):s.confidence>0?console.log(y.yellow(`\u26A0 Framework detected: ${s.name} (low confidence)`)):console.log(y.yellow("\u26A0 Could not detect framework"));let o=aa(s.name);o.length>0&&console.log(y.green(`\u2714 Structure detected: ${o.length} source directories`));let a=la(),i=ua();console.log(y.green(`\u2714 Package manager: ${a}`)),console.log(y.green(`\u2714 Runtime: ${i}`)),ca()&&console.log(y.green("\u2714 Git repository detected"));let c="",l=join(process.cwd(),"package.json");if(existsSync(l))try{c=JSON.parse(readFileSync(l,"utf-8")).name||"";}catch{}c||(c=process.cwd().split(/[\\/]/).pop()||"my-project");let d;if(!(t?.interactive||s.confidence<30)||t?.ci)d={projectName:c,framework:s.name!=="unknown"?s.name:"Unknown",scanPatterns:o.length>0?o:Yr(s.name),createProject:false},console.log(y.gray(`
184
+ Project name: ${c}`)),console.log(y.gray(`Framework: ${d.framework}`)),console.log(y.gray(`Scan directories: ${d.scanPatterns.join(", ")}`));else if(console.log(y.gray(`
185
+ Configure your project:
186
+ `)),d=await Gr([{type:"text",name:"projectName",message:"Project name:",initial:c||"my-project",validate:_=>_.length>0||"Project name is required"},{type:"text",name:"framework",message:"Framework:",initial:s.name!=="unknown"?s.name:"Unknown"},{type:"multiselect",name:"scanPatterns",message:"Select directories to scan:",choices:Yr(s.name).map(_=>({title:_,value:_,selected:true})),hint:"Space to toggle, Enter to confirm"},{type:n?"confirm":null,name:"createProject",message:"Create project on VeeStack dashboard?",initial:true}],{onCancel:()=>{console.log(y.gray(`
160
187
  Cancelled.
161
- `)),process.exit(0);}});if(!i.projectName){console.log(w.gray(`
188
+ `)),process.exit(0);}}),!d.projectName){console.log(y.gray(`
162
189
  Cancelled.
163
- `));return}let o;if(i.createProject){console.log(w.gray(`
164
- Creating project on VeeStack...`));let c=await jo(i.projectName,i.framework);c?(o=c.id,console.log(w.green("\u2714 Project created"))):console.log(w.yellow("\u26A0\uFE0F Could not create project on server (offline mode)"));}let a={projectId:o,name:i.projectName,framework:i.framework,scanPatterns:i.scanPatterns,excludePatterns:Mo()};$o(a),console.log(w.green(`
165
- \u2714 Configuration saved to veestack.config.json`)),console.log(w.bold(`
166
- Next steps:`)),console.log(w.gray(" 1. Run analysis:")),console.log(w.cyan(" veestack scan")),console.log(w.gray(" 2. Upload results:")),console.log(w.cyan(" veestack upload")),console.log(w.gray(" 3. View in dashboard:")),console.log(w.cyan(` https://veestack.tools/dashboard${o?`/projects/${o}`:""}
167
- `));}ae();async function Ur(){console.log(w.cyan(`
190
+ `));return}let b;if(d.createProject){console.log(y.gray(`
191
+ Creating project on VeeStack...`));let _=await ra(d.projectName,d.framework);_?(b=_.id,console.log(y.green("\u2714 Project created"))):console.log(y.yellow("\u26A0\uFE0F Could not create project on server (offline mode)"));}let j={projectId:b,name:d.projectName,framework:d.framework,scanPatterns:d.scanPatterns,excludePatterns:sa()};oa(j),console.log(y.green(`
192
+ \u2714 Configuration saved to veestack.config.json`)),console.log(y.bold(`
193
+ Next steps:`)),console.log(y.gray(" 1. Run analysis:")),console.log(y.cyan(" veestack scan")),console.log(y.gray(" 2. Upload results:")),console.log(y.cyan(" veestack upload")),console.log(y.gray(" 3. View in dashboard:")),console.log(y.cyan(` https://veestack.tools/dashboard${b?`/projects/${b}`:""}
194
+ `));}re();async function Zr(){console.log(y.cyan(`
168
195
  \u{1F50D} Checking for updates...
169
- `));let{packageName:t}=wt();try{let e=Bo(t);if(console.log(w.gray(`Current version: ${z}`)),console.log(w.gray(`Latest version: ${e}
170
- `)),z===e){console.log(w.green("\u2705 You already have the latest version!"));return}if(Ho(z,e)){console.log(w.yellow("\u26A0\uFE0F You are using a development or pre-release version.")),console.log(w.gray("No upgrade needed."));return}console.log(w.cyan(`\u2B06\uFE0F Updating VeeStack CLI...
171
- `));let n=zo();console.log(w.gray(`Using package manager: ${n}
172
- `));let r=n==="pnpm"?`pnpm add -g ${t}`:n==="yarn"?`yarn global add ${t}`:`npm install -g ${t}`;execSync(r,{stdio:"inherit"}),console.log(w.green(`
173
- \u2705 Upgrade complete!`)),console.log(w.gray(`
174
- Run "veestack --version" to verify.`));}catch(e){console.log(w.red(`
175
- \u274C Upgrade failed.`)),e instanceof Error&&console.log(w.gray(e.message)),console.log(w.gray(`
176
- Try manually:`)),console.log(w.cyan(` npm install -g ${t}`)),console.log(w.cyan(` pnpm add -g ${t}`)),process.exit(1);}}function Bo(t){try{return execSync(`npm view ${t} version`,{encoding:"utf-8",stdio:["pipe","pipe","ignore"],timeout:5e3}).replace(/\s/g,"")}catch{return z}}function Ho(t,e){let n=t.split(".").map(Number),r=e.split(".").map(Number);for(let s=0;s<Math.max(n.length,r.length);s++){let i=n[s]||0,o=r[s]||0;if(i>o)return true;if(i<o)return false}return false}function zo(){try{let t=fileURLToPath(import.meta.url),e=Ye.dirname(t);for(let n=0;n<10;n++){let r=e.toLowerCase();if(r.includes(".pnpm")||r.includes("pnpm"))return "pnpm";if(r.includes("yarn"))return "yarn";if(r.includes("npm")&&r.includes("node_modules"))return "npm";let s=Ye.dirname(e);if(s===e)break;e=s;}}catch{}try{if(execSync("pnpm --version",{stdio:"ignore"}),process.env.PNPM_HOME||"")return "pnpm"}catch{}return "npm"}Rn();bn();Cn();In();On();var W=new Command;W.name("veestack").description("VeeStack CLI - Technical Stack Visibility Tool").version(z);W.command("scan").description("Scan a project directory and generate analysis").option("-p, --path <path>","Path to project directory",".").option("-o, --output <path>","Output file path","snapshot.json").option("--ci","CI mode (no interactive prompts)").action(dr);W.command("upload").description("Upload a snapshot to VeeStack server").option("-f, --file <path>","Snapshot file path","snapshot.json").option("-p, --project-id <id>","Project ID").action(Er);W.command("login").description("Authenticate with VeeStack server (Browser OAuth)").option("-k, --key <apiKey>","API key (legacy mode)").action(Jt);W.command("logout").description("Logout and clear local session").action(Ar);W.command("whoami").description("Show current user information").action(xr);W.command("switch-account").alias("switch").description("Switch between multiple accounts").action(Cr);W.command("status").description("Check authentication and subscription status").action(Ir);W.command("doctor").description("Diagnose CLI environment and connectivity").action(Dr);W.command("security-audit").description("Run comprehensive security audit").option("--full","Run full audit with API tests").option("--json","Output as JSON").action(Pr);W.command("init").description("Initialize a new VeeStack project").action(jr);W.command("upgrade").description("Upgrade VeeStack CLI to the latest version").action(Ur);W.parse();
196
+ `));let{packageName:t}=Ot();try{let e=pa(t);if(console.log(y.gray(`Current version: ${H}`)),console.log(y.gray(`Latest version: ${e}
197
+ `)),H===e){console.log(y.green("\u2705 You already have the latest version!"));return}if(fa(H,e)){console.log(y.yellow("\u26A0\uFE0F You are using a development or pre-release version.")),console.log(y.gray("No upgrade needed."));return}console.log(y.cyan(`\u2B06\uFE0F Updating VeeStack CLI...
198
+ `));let n=ga();console.log(y.gray(`Using package manager: ${n}
199
+ `));let r=n==="pnpm"?`pnpm add -g ${t}`:n==="yarn"?`yarn global add ${t}`:`npm install -g ${t}`;execSync(r,{stdio:"inherit"}),console.log(y.green(`
200
+ \u2705 Upgrade complete!`)),console.log(y.gray(`
201
+ Run "veestack --version" to verify.`));}catch(e){console.log(y.red(`
202
+ \u274C Upgrade failed.`)),e instanceof Error&&console.log(y.gray(e.message)),console.log(y.gray(`
203
+ Try manually:`)),console.log(y.cyan(` npm install -g ${t}`)),console.log(y.cyan(` pnpm add -g ${t}`)),process.exit(1);}}function pa(t){try{return execSync(`npm view ${t} version`,{encoding:"utf-8",stdio:["pipe","pipe","ignore"],timeout:5e3}).replace(/\s/g,"")}catch{return H}}function fa(t,e){let n=t.split(".").map(Number),r=e.split(".").map(Number);for(let s=0;s<Math.max(n.length,r.length);s++){let o=n[s]||0,a=r[s]||0;if(o>a)return true;if(o<a)return false}return false}function ga(){try{let t=fileURLToPath(import.meta.url),e=Ge.dirname(t);for(let n=0;n<10;n++){let r=e.toLowerCase();if(r.includes(".pnpm")||r.includes("pnpm"))return "pnpm";if(r.includes("yarn"))return "yarn";if(r.includes("npm")&&r.includes("node_modules"))return "npm";let s=Ge.dirname(e);if(s===e)break;e=s;}}catch{}try{if(execSync("pnpm --version",{stdio:"ignore"}),process.env.PNPM_HOME||"")return "pnpm"}catch{}return "npm"}Mn();Fn();Vn();Bn();zn();var Un=va("veestack");Un.tree({init:[],i:[],scan:["--path","--output","--ci","--json"],s:["--path","--output","--ci","--json"],upload:["--file","--project-id"],u:["--file","--project-id"],login:["--key"],l:["--key"],logout:[],whoami:[],"switch-account":[],switch:[],status:[],st:[],doctor:[],dr:[],"security-audit":["--full","--json"],audit:["--full","--json"],upgrade:[]});Un.init();var W=new Command;W.name("veestack").description(`VeeStack CLI
204
+ Security visibility for modern development stacks`).version(H,"-v, --version","Show CLI version").configureHelp({formatHelp:(t,e)=>`
205
+ VeeStack CLI
206
+ Security visibility for modern development stacks
207
+
208
+ Usage:
209
+ veestack <command> [options]
210
+
211
+ Quick Start
212
+ 1. veestack init Initialize VeeStack in your project
213
+ 2. veestack scan Analyze project security
214
+ 3. veestack upload Upload scan results
215
+
216
+ Core Commands
217
+ init Initialize VeeStack in a project
218
+ scan Analyze project security
219
+ upload Upload scan results
220
+
221
+ Account
222
+ login Authenticate with VeeStack
223
+ logout Logout
224
+ whoami Show current user
225
+ switch Switch between accounts
226
+
227
+ Diagnostics
228
+ status Check CLI and account status
229
+ doctor Diagnose environment
230
+
231
+ Advanced
232
+ security-audit Run full security audit
233
+ upgrade Update CLI to latest version
234
+
235
+ Examples
236
+ veestack init Initialize a project
237
+ veestack scan --ci Run scan in CI environment
238
+ veestack upload snapshot.json Upload a saved snapshot
239
+
240
+ Options
241
+ -v, --version Show CLI version
242
+ -h, --help Show help
243
+
244
+ Documentation
245
+ https://docs.veestack.tools
246
+
247
+ Website
248
+ https://veestack.tools
249
+ `});W.command("init").alias("i").description("Initialize VeeStack in a project").option("--ci","CI mode (no interactive prompts)").option("-i, --interactive","Interactive mode with prompts").action(Pn);W.command("scan").alias("s").description("Analyze project security").option("-p, --path <path>","Path to project directory",".").option("-o, --output <path>","Output file path","snapshot.json").option("--ci","CI mode (no interactive prompts)").option("--json","Output results as JSON").action(Tn);W.command("upload").alias("u").description("Upload scan results").option("-f, --file <path>","Snapshot file path","snapshot.json").option("-p, --project-id <id>","Project ID").action(Cn);W.command("login").alias("l").description("Authenticate with VeeStack").option("-k, --key <apiKey>","API key (legacy mode)").action(Rt);W.command("logout").description("Logout").action(Dr);W.command("whoami").description("Show current user").action(Pr);W.command("switch-account").alias("switch").description("Switch between accounts").action(Ur);W.command("status").alias("st").description("Check CLI and account status").action(In);W.command("open").description("Open VeeStack dashboard").action(Br);W.command("doctor").alias("dr").description("Diagnose environment").action(Nn);W.command("security-audit").alias("audit").description("Run full security audit").option("--full","Run full audit with API tests").option("--json","Output as JSON").action(Wr);W.command("completion").description("Install autocomplete for your shell").action(()=>{Un.setupShellInitFile();});W.command("upgrade").description("Update CLI to latest version").action(Zr);process.argv.length<=2?(async()=>{console.log(y.bold.cyan(`
250
+ \u{1F680} Welcome to VeeStack
251
+ `));let t=await Gr({type:"select",name:"action",message:"What do you want to do?",choices:[{title:"Initialize project",value:"init",description:"Setup VeeStack in this folder"},{title:"Scan project",value:"scan",description:"Analyze project security"},{title:"Upload results",value:"upload",description:"Upload scan to dashboard"},{title:"Check status",value:"status",description:"Account and project status"},{title:"Run doctor",value:"doctor",description:"Diagnose environment issues"},{title:"Login",value:"login",description:"Authenticate with VeeStack"},{title:"Exit",value:"exit"}]});if(t.action&&t.action!=="exit")switch(t.action){case "init":await Pn();break;case "scan":await Tn({path:".",output:"snapshot.json"});break;case "upload":await Cn({file:"snapshot.json"});break;case "status":await In();break;case "doctor":await Nn();break;case "login":await Rt();break}})():W.parse();