@vee_stack/cli 6.1.3 → 6.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +59 -59
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {createRequire}from'module';import*as ne from'fs';import {existsSync,readFileSync,writeFileSync,statSync}from'fs';import*as Ye from'path';import {join,resolve,dirname}from'path';import {fileURLToPath}from'url';import {glob}from'glob';import*as
|
|
3
|
-
var Xr=Object.defineProperty;var G=(t,e)=>()=>(t&&(e=t(t=0)),e);var Vn=(t,e)=>{for(var n in e)Xr(t,n,{get:e[n],enumerable:true});};function ls(){let t=cs;for(;t!==dirname(t);){let e=join(t,"package.json");try{let n=JSON.parse(readFileSync(e,"utf-8"));if(n.name==="vee_stack")return n}catch{}t=dirname(t);}return null}var as,cs,un,ve,oe,H,dn,ie,qe,Pt,fn,gn=G(()=>{as=fileURLToPath(import.meta.url),cs=dirname(as);un=ls();if(!un)throw new Error("VeeStack Error: Root package.json not found. Ensure you are running from within the VeeStack monorepo.");ve=un.versions||{},oe=un.version,H=oe,dn=`vs_cli_v${oe}`,ie=ve.snapshot,qe=ve.engine_target,Pt=ve.audit,ve.session_payload,ve.rules,ve.analysis,fn=ve.api,ve.min_node;});var A,mn,g,ae,mt=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});})(mn||(mn={}));g=A.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),ae=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,gs,Y,Lt=G(()=>{mt();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"]),gs=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 ms,de,hn=G(()=>{Lt();mt();ms=(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}},de=ms;});function hs(t){Zn=t;}function Xe(){return Zn}var Zn,jt=G(()=>{hn();Zn=de;});function f(t,e){let n=Xe(),r=ht({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 ht,ys,M,h,xe,V,Ut,$t,_e,Qe,yn=G(()=>{jt();hn();ht=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}},ys=[];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"}),xe=t=>({status:"dirty",value:t}),V=t=>({status:"valid",value:t}),Ut=t=>t.status==="aborted",$t=t=>t.status==="dirty",_e=t=>t.status==="valid",Qe=t=>typeof Promise<"u"&&t instanceof Promise;});var Jn=G(()=>{});var m,Kn=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 er(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 Ps(t){return new RegExp(`^${er(t)}$`)}function tr(t){let e=`${Qn}T${er(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 Ls(t,e){return !!((e==="v4"||!e)&&Rs.test(t)||(e==="v6"||!e)&&Cs.test(t))}function js(t,e){if(!ws.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 Us(t,e){return !!((e==="v4"||!e)&&bs.test(t)||(e==="v6"||!e)&&Is.test(t))}function $s(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 et(t){if(t instanceof Z){let e={};for(let n in t.shape){let r=t.shape[n];e[n]=X.create(et(r));}return new Z({...t._def,shape:()=>e})}else return t instanceof ge?new ge({...t._def,type:et(t.element)}):t instanceof X?X.create(et(t.unwrap())):t instanceof le?le.create(et(t.unwrap())):t instanceof ce?ce.create(t.items.map(e=>et(e))):t}function _n(t,e){let n=ae(t),r=ae(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=_n(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=_n(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 nr(t,e){return new Ue({values:t,typeName:v.ZodEnum,...S(e)})}function Xn(t,e){let n=typeof t=="function"?t(e):typeof t=="string"?{message:t}:t;return typeof n=="string"?{message:n}:n}function rr(t,e={},n){return t?Ee.create().superRefine((r,s)=>{let o=t(r);if(o instanceof Promise)return o.then(a=>{if(!a){let i=Xn(e,r),c=i.fatal??n??true;s.addIssue({code:"custom",...i,fatal:c});}});if(!o){let a=Xn(e,r),i=a.fatal??n??true;s.addIssue({code:"custom",...a,fatal:i});}}):Ee.create()}var Q,qn,w,vs,_s,ks,Es,Ss,ws,Ts,As,xs,vn,Rs,bs,Cs,Is,Ns,Os,Qn,Ds,ke,Re,be,Ce,Ie,tt,Ne,Oe,Ee,fe,re,nt,ge,Z,De,pe,Mt,Pe,ce,Ft,rt,st,Vt,Le,je,Ue,$e,Se,ee,X,le,Me,Fe,ot,Ms,yt,vt,Ve,Fs,v,Vs,sr,or,Bs,Hs,ir,zs,Ws,Gs,Ys,Zs,Js,Ks,qs,Xs,Qs,eo,to,no,ro,so,oo,io,ao,co,lo,uo,po,fo,go,mo,ho,yo,vo,_o,ko,Eo,So,wo,To,ar=G(()=>{Lt();jt();Kn();yn();mt();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}},qn=(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 Y(t.common.issues);return this._error=n,this._error}}};w=class{get description(){return this._def.description}_getType(e){return ae(e.data)}_getOrReturnCtx(e,n){return n||{common:e.parent.common,data:e.data,parsedType:ae(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:ae(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:ae(e)},s=this._parseSync({data:e,path:r.path,parent:r});return qn(r,s)}"~validate"(e){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:ae(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:ae(e)},s=this._parse({data:e,path:r.path,parent:r}),o=await(Qe(s)?s:Promise.resolve(s));return qn(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 le.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return ge.create(this)}promise(){return Se.create(this,this._def)}or(e){return De.create([this,e],this._def)}and(e){return Pe.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 Me({...S(this._def),innerType:this,defaultValue:n,typeName:v.ZodDefault})}brand(){return new yt({typeName:v.ZodBranded,type:this,...S(this._def)})}catch(e){let n=typeof e=="function"?e:()=>e;return new Fe({...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 vt.create(this,e)}readonly(){return Ve.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},vs=/^c[^\s-]{8,}$/i,_s=/^[0-9a-z]+$/,ks=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Es=/^[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,Ss=/^[a-z0-9_-]{21}$/i,ws=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Ts=/^[-+]?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)?)??$/,As=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,xs="^(\\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])$/,bs=/^(?:(?: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])$/,Cs=/^(([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]))$/,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]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Ns=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Os=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Qn="((\\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])))",Ds=new RegExp(`^${Qn}$`);ke=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")As.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")vn||(vn=new RegExp(xs,"u")),vn.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")Es.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")Ss.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")vs.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")_s.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")ks.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"?tr(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"?Ds.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{code:u.invalid_string,validation:"date",message:o.message}),r.dirty()):o.kind==="time"?Ps(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"?Ts.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"duration",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="ip"?Ls(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"?js(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"?Us(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"?Ns.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"base64",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="base64url"?Os.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}};ke.create=t=>new ke({checks:[],typeName:v.ZodString,coerce:t?.coerce??false,...S(t)});Re=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"?$s(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)}};Re.create=t=>new Re({checks:[],typeName:v.ZodNumber,coerce:t?.coerce||false,...S(t)});be=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}};be.create=t=>new be({checks:[],typeName:v.ZodBigInt,coerce:t?.coerce??false,...S(t)});Ce=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)}};Ce.create=t=>new Ce({typeName:v.ZodBoolean,coerce:t?.coerce||false,...S(t)});Ie=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}};Ie.create=t=>new Ie({checks:[],coerce:t?.coerce||false,typeName:v.ZodDate,...S(t)});tt=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)}};tt.create=t=>new tt({typeName:v.ZodSymbol,...S(t)});Ne=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)}};Ne.create=t=>new Ne({typeName:v.ZodUndefined,...S(t)});Oe=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)}};Oe.create=t=>new Oe({typeName:v.ZodNull,...S(t)});Ee=class extends w{constructor(){super(...arguments),this._any=true;}_parse(e){return V(e.data)}};Ee.create=t=>new Ee({typeName:v.ZodAny,...S(t)});fe=class extends w{constructor(){super(...arguments),this._unknown=true;}_parse(e){return V(e.data)}};fe.create=t=>new fe({typeName:v.ZodUnknown,...S(t)});re=class extends w{_parse(e){let n=this._getOrReturnCtx(e);return f(n,{code:u.invalid_type,expected:g.never,received:n.parsedType}),h}};re.create=t=>new re({typeName:v.ZodNever,...S(t)});nt=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)}};nt.create=t=>new nt({typeName:v.ZodVoid,...S(t)});ge=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)}};ge.create=(t,e)=>new ge({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 re&&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 re){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 et(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 nr(A.objectKeys(this.shape))}};Z.create=(t,e)=>new Z({shape:()=>t,unknownKeys:"strip",catchall:re.create(),typeName:v.ZodObject,...S(e)});Z.strictCreate=(t,e)=>new Z({shape:()=>t,unknownKeys:"strict",catchall:re.create(),typeName:v.ZodObject,...S(e)});Z.lazycreate=(t,e)=>new Z({shape:t,unknownKeys:"strip",catchall:re.create(),typeName:v.ZodObject,...S(e)});De=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}};De.create=(t,e)=>new De({options:t,typeName:v.ZodUnion,...S(e)});pe=t=>t instanceof Le?pe(t.schema):t instanceof ee?pe(t.innerType()):t instanceof je?[t.value]:t instanceof Ue?t.options:t instanceof $e?A.objectValues(t.enum):t instanceof Me?pe(t._def.innerType):t instanceof Ne?[void 0]:t instanceof Oe?[null]:t instanceof X?[void 0,...pe(t.unwrap())]:t instanceof le?[null,...pe(t.unwrap())]:t instanceof yt||t instanceof Ve?pe(t.unwrap()):t instanceof Fe?pe(t._def.innerType):[],Mt=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=pe(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)})}};Pe=class extends w{_parse(e){let{status:n,ctx:r}=this._processInputParams(e),s=(o,a)=>{if(Ut(o)||Ut(a))return h;let i=_n(o.value,a.value);return i.valid?(($t(o)||$t(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}))}};Pe.create=(t,e,n)=>new Pe({left:t,right:e,typeName:v.ZodIntersection,...S(n)});ce=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})}};ce.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new ce({items:t,typeName:v.ZodTuple,rest:null,...S(e)})};Ft=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:ke.create(),valueType:e,typeName:v.ZodRecord,...S(n)})}},rt=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}}}};rt.create=(t,e,n)=>new rt({valueType:e,keyType:t,typeName:v.ZodMap,...S(n)});st=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)}};st.create=(t,e)=>new st({valueType:t,minSize:null,maxSize:null,typeName:v.ZodSet,...S(e)});Vt=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 ht({data:i,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,Xe(),de].filter(l=>!!l),issueData:{code:u.invalid_arguments,argumentsError:c}})}function s(i,c){return ht({data:i,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,Xe(),de].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 Se){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:ce.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||ce.create([]).rest(fe.create()),returns:n||fe.create(),typeName:v.ZodFunction,...S(r)})}},Le=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})}};Le.create=(t,e)=>new Le({getter:t,typeName:v.ZodLazy,...S(e)});je=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}};je.create=(t,e)=>new je({value:t,typeName:v.ZodLiteral,...S(e)});Ue=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})}};Ue.create=nr;$e=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}};$e.create=(t,e)=>new $e({values:t,typeName:v.ZodNativeEnum,...S(e)});Se=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})))}};Se.create=(t,e)=>new Se({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"?xe(c.value):n.value==="dirty"?xe(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"?xe(i.value):n.value==="dirty"?xe(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(!_e(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=>_e(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)});le=class extends w{_parse(e){return this._getType(e)===g.null?V(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};le.create=(t,e)=>new le({innerType:t,typeName:v.ZodNullable,...S(e)});Me=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}};Me.create=(t,e)=>new Me({innerType:t,typeName:v.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...S(e)});Fe=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 Qe(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}};Fe.create=(t,e)=>new Fe({innerType:t,typeName:v.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...S(e)});ot=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}}};ot.create=t=>new ot({typeName:v.ZodNaN,...S(t)});Ms=Symbol("zod_brand"),yt=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}},vt=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(),xe(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})}},Ve=class extends w{_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}};Ve.create=(t,e)=>new Ve({innerType:t,typeName:v.ZodReadonly,...S(e)});Fs={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={}));Vs=(t,e={message:`Input not instance of ${t.name}`})=>rr(n=>n instanceof t,e),sr=ke.create,or=Re.create,Bs=ot.create,Hs=be.create,ir=Ce.create,zs=Ie.create,Ws=tt.create,Gs=Ne.create,Ys=Oe.create,Zs=Ee.create,Js=fe.create,Ks=re.create,qs=nt.create,Xs=ge.create,Qs=Z.create,eo=Z.strictCreate,to=De.create,no=Mt.create,ro=Pe.create,so=ce.create,oo=Ft.create,io=rt.create,ao=st.create,co=Vt.create,lo=Le.create,uo=je.create,po=Ue.create,fo=$e.create,go=Se.create,mo=ee.create,ho=X.create,yo=le.create,vo=ee.createWithPreprocess,_o=vt.create,ko=()=>sr().optional(),Eo=()=>or().optional(),So=()=>ir().optional(),wo={string:(t=>ke.create({...t,coerce:true})),number:(t=>Re.create({...t,coerce:true})),boolean:(t=>Ce.create({...t,coerce:true})),bigint:(t=>be.create({...t,coerce:true})),date:(t=>Ie.create({...t,coerce:true}))},To=h;});var p={};Vn(p,{BRAND:()=>Ms,DIRTY:()=>xe,EMPTY_PATH:()=>ys,INVALID:()=>h,NEVER:()=>To,OK:()=>V,ParseStatus:()=>M,Schema:()=>w,ZodAny:()=>Ee,ZodArray:()=>ge,ZodBigInt:()=>be,ZodBoolean:()=>Ce,ZodBranded:()=>yt,ZodCatch:()=>Fe,ZodDate:()=>Ie,ZodDefault:()=>Me,ZodDiscriminatedUnion:()=>Mt,ZodEffects:()=>ee,ZodEnum:()=>Ue,ZodError:()=>Y,ZodFirstPartyTypeKind:()=>v,ZodFunction:()=>Vt,ZodIntersection:()=>Pe,ZodIssueCode:()=>u,ZodLazy:()=>Le,ZodLiteral:()=>je,ZodMap:()=>rt,ZodNaN:()=>ot,ZodNativeEnum:()=>$e,ZodNever:()=>re,ZodNull:()=>Oe,ZodNullable:()=>le,ZodNumber:()=>Re,ZodObject:()=>Z,ZodOptional:()=>X,ZodParsedType:()=>g,ZodPipeline:()=>vt,ZodPromise:()=>Se,ZodReadonly:()=>Ve,ZodRecord:()=>Ft,ZodSchema:()=>w,ZodSet:()=>st,ZodString:()=>ke,ZodSymbol:()=>tt,ZodTransformer:()=>ee,ZodTuple:()=>ce,ZodType:()=>w,ZodUndefined:()=>Ne,ZodUnion:()=>De,ZodUnknown:()=>fe,ZodVoid:()=>nt,addIssueToContext:()=>f,any:()=>Zs,array:()=>Xs,bigint:()=>Hs,boolean:()=>ir,coerce:()=>wo,custom:()=>rr,date:()=>zs,datetimeRegex:()=>tr,defaultErrorMap:()=>de,discriminatedUnion:()=>no,effect:()=>mo,enum:()=>po,function:()=>co,getErrorMap:()=>Xe,getParsedType:()=>ae,instanceof:()=>Vs,intersection:()=>ro,isAborted:()=>Ut,isAsync:()=>Qe,isDirty:()=>$t,isValid:()=>_e,late:()=>Fs,lazy:()=>lo,literal:()=>uo,makeIssue:()=>ht,map:()=>io,nan:()=>Bs,nativeEnum:()=>fo,never:()=>Ks,null:()=>Ys,nullable:()=>yo,number:()=>or,object:()=>Qs,objectUtil:()=>mn,oboolean:()=>So,onumber:()=>Eo,optional:()=>ho,ostring:()=>ko,pipeline:()=>_o,preprocess:()=>vo,promise:()=>go,quotelessJson:()=>gs,record:()=>oo,set:()=>ao,setErrorMap:()=>hs,strictObject:()=>eo,string:()=>sr,symbol:()=>Ws,transformer:()=>mo,tuple:()=>so,undefined:()=>Gs,union:()=>to,unknown:()=>Js,util:()=>A,void:()=>qs});var kn=G(()=>{jt();yn();Jn();mt();ar();Lt();});var cr=G(()=>{kn();kn();});function Ro(){try{return xo.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:
|
|
2
|
+
import {createRequire}from'module';import*as ne from'fs';import {existsSync,readFileSync,writeFileSync,statSync}from'fs';import*as Ye from'path';import {join,resolve,dirname}from'path';import {fileURLToPath}from'url';import {glob}from'glob';import*as de from'crypto';import de__default from'crypto';import y from'chalk';import {Command}from'commander';import ri from'ora';import si from'cli-progress';import oi from'cli-table3';import*as it from'os';import {homedir}from'os';import*as U from'fs/promises';import Pi from'readline';import $i from'open';import {execSync}from'child_process';import Kr from'prompts';import Da from'omelette';createRequire(import.meta.url);
|
|
3
|
+
var Qr=Object.defineProperty;var G=(t,e)=>()=>(t&&(e=t(t=0)),e);var Vn=(t,e)=>{for(var n in e)Qr(t,n,{get:e[n],enumerable:true});};function ds(){let t=us,e=0;for(;t!==dirname(t)&&e<10;){let n=join(t,"package.json");try{if(existsSync(n)){let r=JSON.parse(readFileSync(n,"utf-8"));if(r.name==="vee_stack")return r}}catch{}t=dirname(t),e++;}return null}var ls,us,Zn,oe,ln,ie,H,dn,ae,qe,Pt,fn,gn=G(()=>{ls=fileURLToPath(import.meta.url),us=dirname(ls),Zn="6.1.4",oe={snapshot:"2.0.0",engine_target:"2.0.0",audit:"3.0",session_payload:"2.0.0",rules:"2.0.0",analysis:"2.0.0",api:"v2",min_node:20};ln=ds();ln&&(Zn=ln.version,oe=ln.versions||oe);ie=Zn,H=ie,dn=`vs_cli_v${ie}`,ae=oe.snapshot,qe=oe.engine_target,Pt=oe.audit,oe.session_payload,oe.rules,oe.analysis,fn=oe.api,oe.min_node;});var A,mn,g,ce,mt=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});})(mn||(mn={}));g=A.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),ce=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,hs,Y,Lt=G(()=>{mt();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"]),hs=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 ys,pe,hn=G(()=>{Lt();mt();ys=(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}},pe=ys;});function vs(t){Jn=t;}function Xe(){return Jn}var Jn,jt=G(()=>{hn();Jn=pe;});function f(t,e){let n=Xe(),r=ht({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,n,n===pe?void 0:pe].filter(s=>!!s)});t.common.issues.push(r);}var ht,_s,M,h,xe,V,Ut,$t,_e,Qe,yn=G(()=>{jt();hn();ht=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}},_s=[];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"}),xe=t=>({status:"dirty",value:t}),V=t=>({status:"valid",value:t}),Ut=t=>t.status==="aborted",$t=t=>t.status==="dirty",_e=t=>t.status==="valid",Qe=t=>typeof Promise<"u"&&t instanceof Promise;});var Kn=G(()=>{});var m,qn=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 tr(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 js(t){return new RegExp(`^${tr(t)}$`)}function nr(t){let e=`${er}T${tr(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 Us(t,e){return !!((e==="v4"||!e)&&Cs.test(t)||(e==="v6"||!e)&&Ns.test(t))}function $s(t,e){if(!As.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 Ms(t,e){return !!((e==="v4"||!e)&&Is.test(t)||(e==="v6"||!e)&&Os.test(t))}function Fs(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 et(t){if(t instanceof Z){let e={};for(let n in t.shape){let r=t.shape[n];e[n]=X.create(et(r));}return new Z({...t._def,shape:()=>e})}else return t instanceof me?new me({...t._def,type:et(t.element)}):t instanceof X?X.create(et(t.unwrap())):t instanceof ue?ue.create(et(t.unwrap())):t instanceof le?le.create(t.items.map(e=>et(e))):t}function _n(t,e){let n=ce(t),r=ce(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=_n(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=_n(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 rr(t,e){return new Ue({values:t,typeName:v.ZodEnum,...S(e)})}function Qn(t,e){let n=typeof t=="function"?t(e):typeof t=="string"?{message:t}:t;return typeof n=="string"?{message:n}:n}function sr(t,e={},n){return t?Ee.create().superRefine((r,s)=>{let o=t(r);if(o instanceof Promise)return o.then(a=>{if(!a){let i=Qn(e,r),c=i.fatal??n??true;s.addIssue({code:"custom",...i,fatal:c});}});if(!o){let a=Qn(e,r),i=a.fatal??n??true;s.addIssue({code:"custom",...a,fatal:i});}}):Ee.create()}var Q,Xn,w,ks,Es,Ss,ws,Ts,As,xs,Rs,bs,vn,Cs,Is,Ns,Os,Ds,Ps,er,Ls,ke,Re,be,Ce,Ie,tt,Ne,Oe,Ee,ge,re,nt,me,Z,De,fe,Mt,Pe,le,Ft,rt,st,Vt,Le,je,Ue,$e,Se,ee,X,ue,Me,Fe,ot,Vs,yt,vt,Ve,Bs,v,Hs,or,ir,zs,Ws,ar,Gs,Ys,Zs,Js,Ks,qs,Xs,Qs,eo,to,no,ro,so,oo,io,ao,co,lo,uo,po,fo,go,mo,ho,yo,vo,_o,ko,Eo,So,wo,To,Ao,xo,cr=G(()=>{Lt();jt();qn();yn();mt();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}},Xn=(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 Y(t.common.issues);return this._error=n,this._error}}};w=class{get description(){return this._def.description}_getType(e){return ce(e.data)}_getOrReturnCtx(e,n){return n||{common:e.parent.common,data:e.data,parsedType:ce(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:ce(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:ce(e)},s=this._parseSync({data:e,path:r.path,parent:r});return Xn(r,s)}"~validate"(e){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:ce(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:ce(e)},s=this._parse({data:e,path:r.path,parent:r}),o=await(Qe(s)?s:Promise.resolve(s));return Xn(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 ue.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return me.create(this)}promise(){return Se.create(this,this._def)}or(e){return De.create([this,e],this._def)}and(e){return Pe.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 Me({...S(this._def),innerType:this,defaultValue:n,typeName:v.ZodDefault})}brand(){return new yt({typeName:v.ZodBranded,type:this,...S(this._def)})}catch(e){let n=typeof e=="function"?e:()=>e;return new Fe({...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 vt.create(this,e)}readonly(){return Ve.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},ks=/^c[^\s-]{8,}$/i,Es=/^[0-9a-z]+$/,Ss=/^[0-9A-HJKMNP-TV-Z]{26}$/i,ws=/^[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,Ts=/^[a-z0-9_-]{21}$/i,As=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,xs=/^[-+]?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)?)??$/,Rs=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,bs="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",Cs=/^(?:(?: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])$/,Is=/^(?:(?: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])$/,Ns=/^(([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])$/,Ds=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Ps=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,er="((\\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(`^${er}$`);ke=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")Rs.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")vn||(vn=new RegExp(bs,"u")),vn.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")ws.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")Ts.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")ks.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")Es.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")Ss.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"?nr(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"?Ls.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{code:u.invalid_string,validation:"date",message:o.message}),r.dirty()):o.kind==="time"?js(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"?xs.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"duration",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="ip"?Us(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"?$s(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"?Ms(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"?Ds.test(e.data)||(s=this._getOrReturnCtx(e,s),f(s,{validation:"base64",code:u.invalid_string,message:o.message}),r.dirty()):o.kind==="base64url"?Ps.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}};ke.create=t=>new ke({checks:[],typeName:v.ZodString,coerce:t?.coerce??false,...S(t)});Re=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"?Fs(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)}};Re.create=t=>new Re({checks:[],typeName:v.ZodNumber,coerce:t?.coerce||false,...S(t)});be=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}};be.create=t=>new be({checks:[],typeName:v.ZodBigInt,coerce:t?.coerce??false,...S(t)});Ce=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)}};Ce.create=t=>new Ce({typeName:v.ZodBoolean,coerce:t?.coerce||false,...S(t)});Ie=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}};Ie.create=t=>new Ie({checks:[],coerce:t?.coerce||false,typeName:v.ZodDate,...S(t)});tt=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)}};tt.create=t=>new tt({typeName:v.ZodSymbol,...S(t)});Ne=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)}};Ne.create=t=>new Ne({typeName:v.ZodUndefined,...S(t)});Oe=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)}};Oe.create=t=>new Oe({typeName:v.ZodNull,...S(t)});Ee=class extends w{constructor(){super(...arguments),this._any=true;}_parse(e){return V(e.data)}};Ee.create=t=>new Ee({typeName:v.ZodAny,...S(t)});ge=class extends w{constructor(){super(...arguments),this._unknown=true;}_parse(e){return V(e.data)}};ge.create=t=>new ge({typeName:v.ZodUnknown,...S(t)});re=class extends w{_parse(e){let n=this._getOrReturnCtx(e);return f(n,{code:u.invalid_type,expected:g.never,received:n.parsedType}),h}};re.create=t=>new re({typeName:v.ZodNever,...S(t)});nt=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)}};nt.create=t=>new nt({typeName:v.ZodVoid,...S(t)});me=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)}};me.create=(t,e)=>new me({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 re&&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 re){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 et(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 rr(A.objectKeys(this.shape))}};Z.create=(t,e)=>new Z({shape:()=>t,unknownKeys:"strip",catchall:re.create(),typeName:v.ZodObject,...S(e)});Z.strictCreate=(t,e)=>new Z({shape:()=>t,unknownKeys:"strict",catchall:re.create(),typeName:v.ZodObject,...S(e)});Z.lazycreate=(t,e)=>new Z({shape:t,unknownKeys:"strip",catchall:re.create(),typeName:v.ZodObject,...S(e)});De=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}};De.create=(t,e)=>new De({options:t,typeName:v.ZodUnion,...S(e)});fe=t=>t instanceof Le?fe(t.schema):t instanceof ee?fe(t.innerType()):t instanceof je?[t.value]:t instanceof Ue?t.options:t instanceof $e?A.objectValues(t.enum):t instanceof Me?fe(t._def.innerType):t instanceof Ne?[void 0]:t instanceof Oe?[null]:t instanceof X?[void 0,...fe(t.unwrap())]:t instanceof ue?[null,...fe(t.unwrap())]:t instanceof yt||t instanceof Ve?fe(t.unwrap()):t instanceof Fe?fe(t._def.innerType):[],Mt=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=fe(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)})}};Pe=class extends w{_parse(e){let{status:n,ctx:r}=this._processInputParams(e),s=(o,a)=>{if(Ut(o)||Ut(a))return h;let i=_n(o.value,a.value);return i.valid?(($t(o)||$t(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}))}};Pe.create=(t,e,n)=>new Pe({left:t,right:e,typeName:v.ZodIntersection,...S(n)});le=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})}};le.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new le({items:t,typeName:v.ZodTuple,rest:null,...S(e)})};Ft=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:ke.create(),valueType:e,typeName:v.ZodRecord,...S(n)})}},rt=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}}}};rt.create=(t,e,n)=>new rt({valueType:e,keyType:t,typeName:v.ZodMap,...S(n)});st=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)}};st.create=(t,e)=>new st({valueType:t,minSize:null,maxSize:null,typeName:v.ZodSet,...S(e)});Vt=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 ht({data:i,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,Xe(),pe].filter(l=>!!l),issueData:{code:u.invalid_arguments,argumentsError:c}})}function s(i,c){return ht({data:i,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,Xe(),pe].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 Se){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:le.create(e).rest(ge.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||le.create([]).rest(ge.create()),returns:n||ge.create(),typeName:v.ZodFunction,...S(r)})}},Le=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})}};Le.create=(t,e)=>new Le({getter:t,typeName:v.ZodLazy,...S(e)});je=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}};je.create=(t,e)=>new je({value:t,typeName:v.ZodLiteral,...S(e)});Ue=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})}};Ue.create=rr;$e=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}};$e.create=(t,e)=>new $e({values:t,typeName:v.ZodNativeEnum,...S(e)});Se=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})))}};Se.create=(t,e)=>new Se({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"?xe(c.value):n.value==="dirty"?xe(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"?xe(i.value):n.value==="dirty"?xe(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(!_e(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=>_e(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)});ue=class extends w{_parse(e){return this._getType(e)===g.null?V(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};ue.create=(t,e)=>new ue({innerType:t,typeName:v.ZodNullable,...S(e)});Me=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}};Me.create=(t,e)=>new Me({innerType:t,typeName:v.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...S(e)});Fe=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 Qe(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}};Fe.create=(t,e)=>new Fe({innerType:t,typeName:v.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...S(e)});ot=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}}};ot.create=t=>new ot({typeName:v.ZodNaN,...S(t)});Vs=Symbol("zod_brand"),yt=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}},vt=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(),xe(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})}},Ve=class extends w{_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}};Ve.create=(t,e)=>new Ve({innerType:t,typeName:v.ZodReadonly,...S(e)});Bs={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={}));Hs=(t,e={message:`Input not instance of ${t.name}`})=>sr(n=>n instanceof t,e),or=ke.create,ir=Re.create,zs=ot.create,Ws=be.create,ar=Ce.create,Gs=Ie.create,Ys=tt.create,Zs=Ne.create,Js=Oe.create,Ks=Ee.create,qs=ge.create,Xs=re.create,Qs=nt.create,eo=me.create,to=Z.create,no=Z.strictCreate,ro=De.create,so=Mt.create,oo=Pe.create,io=le.create,ao=Ft.create,co=rt.create,lo=st.create,uo=Vt.create,po=Le.create,fo=je.create,go=Ue.create,mo=$e.create,ho=Se.create,yo=ee.create,vo=X.create,_o=ue.create,ko=ee.createWithPreprocess,Eo=vt.create,So=()=>or().optional(),wo=()=>ir().optional(),To=()=>ar().optional(),Ao={string:(t=>ke.create({...t,coerce:true})),number:(t=>Re.create({...t,coerce:true})),boolean:(t=>Ce.create({...t,coerce:true})),bigint:(t=>be.create({...t,coerce:true})),date:(t=>Ie.create({...t,coerce:true}))},xo=h;});var p={};Vn(p,{BRAND:()=>Vs,DIRTY:()=>xe,EMPTY_PATH:()=>_s,INVALID:()=>h,NEVER:()=>xo,OK:()=>V,ParseStatus:()=>M,Schema:()=>w,ZodAny:()=>Ee,ZodArray:()=>me,ZodBigInt:()=>be,ZodBoolean:()=>Ce,ZodBranded:()=>yt,ZodCatch:()=>Fe,ZodDate:()=>Ie,ZodDefault:()=>Me,ZodDiscriminatedUnion:()=>Mt,ZodEffects:()=>ee,ZodEnum:()=>Ue,ZodError:()=>Y,ZodFirstPartyTypeKind:()=>v,ZodFunction:()=>Vt,ZodIntersection:()=>Pe,ZodIssueCode:()=>u,ZodLazy:()=>Le,ZodLiteral:()=>je,ZodMap:()=>rt,ZodNaN:()=>ot,ZodNativeEnum:()=>$e,ZodNever:()=>re,ZodNull:()=>Oe,ZodNullable:()=>ue,ZodNumber:()=>Re,ZodObject:()=>Z,ZodOptional:()=>X,ZodParsedType:()=>g,ZodPipeline:()=>vt,ZodPromise:()=>Se,ZodReadonly:()=>Ve,ZodRecord:()=>Ft,ZodSchema:()=>w,ZodSet:()=>st,ZodString:()=>ke,ZodSymbol:()=>tt,ZodTransformer:()=>ee,ZodTuple:()=>le,ZodType:()=>w,ZodUndefined:()=>Ne,ZodUnion:()=>De,ZodUnknown:()=>ge,ZodVoid:()=>nt,addIssueToContext:()=>f,any:()=>Ks,array:()=>eo,bigint:()=>Ws,boolean:()=>ar,coerce:()=>Ao,custom:()=>sr,date:()=>Gs,datetimeRegex:()=>nr,defaultErrorMap:()=>pe,discriminatedUnion:()=>so,effect:()=>yo,enum:()=>go,function:()=>uo,getErrorMap:()=>Xe,getParsedType:()=>ce,instanceof:()=>Hs,intersection:()=>oo,isAborted:()=>Ut,isAsync:()=>Qe,isDirty:()=>$t,isValid:()=>_e,late:()=>Bs,lazy:()=>po,literal:()=>fo,makeIssue:()=>ht,map:()=>co,nan:()=>zs,nativeEnum:()=>mo,never:()=>Xs,null:()=>Js,nullable:()=>_o,number:()=>ir,object:()=>to,objectUtil:()=>mn,oboolean:()=>To,onumber:()=>wo,optional:()=>vo,ostring:()=>So,pipeline:()=>Eo,preprocess:()=>ko,promise:()=>ho,quotelessJson:()=>hs,record:()=>ao,set:()=>lo,setErrorMap:()=>vs,strictObject:()=>no,string:()=>or,symbol:()=>Ys,transformer:()=>yo,tuple:()=>io,undefined:()=>Zs,union:()=>ro,unknown:()=>qs,util:()=>A,void:()=>Qs});var kn=G(()=>{jt();yn();Kn();mt();cr();Lt();});var lr=G(()=>{kn();kn();});function Co(){try{return bo.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 bo(){return En||(En=Ro()),En}function Co(t=Ao.api.rateLimit){let{windowMs:e,maxRequests:n,message:r}=t;return {check(s){let o=Date.now(),a=Be.get(s);a&&o>a.resetTime&&Be.delete(s);let i=Be.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++,Be.set(s,i),{success:true,remaining:n-i.count,resetTime:i.resetTime})},reset(s){Be.delete(s);},cleanup(){let s=Date.now();for(let[o,a]of Be.entries())s>a.resetTime&&Be.delete(o);}}}var Ao,xo,En,k,lr,Bt,E,Be,te=G(()=>{gn();gn();cr();Ao={versions:{cli:oe,engine:oe,frontend:oe,api:fn,snapshot:ie,engine_target:qe},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:ie,engineTargetVersion:qe},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()}),xo=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()});En=null;new Proxy({},{get(t,e){return bo()[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"}},lr={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},{[lr.FREE]:k.plans.FREE,[lr.PRO]:k.plans.PRO},Bt={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},{[Bt.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],[Bt.SUPPORT]:[E.READ_ALL,E.PROJECT_READ,E.SNAPSHOT_READ,E.REPORT_READ,E.USER_READ,E.SUPPORT_ACCESS,E.SUPPORT_VIEW_TICKETS],[Bt.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],[Bt.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}},Be=new Map;Co();});var nn,rn,Tr=G(()=>{nn={BASE_SCORE:100,MIN_SCORE:0,MAX_SCORE:100},rn={HEALTHY:{min:90,max:100},STABLE:{min:75,max:89},STRUCTURAL_CONCERN:{min:60,max:74},HIGH_RISK:{min:0,max:59}};});var In={};Vn(In,{CoreEngine:()=>di,ProjectScanner:()=>Nr,RULES:()=>Ri,ReportGenerator:()=>Ir,RuleRegistry:()=>br,ScoringEngine:()=>Cr,SnapshotValidator:()=>Rr,scanProject:()=>Ii});async function Ii(t,e,n){return new Nr({projectPath:t,...n}).scan(e)}var Ar,Rr,br,Cr,Ir,di,pi,fi,gi,mi,hi,yi,vi,_i,ki,Ei,Si,wi,Ti,Ai,xi,Ri,Nr,Nn=G(()=>{Tr();te();te();Ar=(t=>typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>e[n]}):t)(function(t){throw Error('Dynamic require of "'+t+'" is not supported')}),Rr=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}}},br=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}},Cr=class{calculateScore(t){let e=nn.BASE_SCORE;for(let n of t)e-=n.weight;return Math.max(nn.MIN_SCORE,Math.min(nn.MAX_SCORE,e))}getSeverityBand(t){return t>=rn.HEALTHY.min?"HEALTHY":t>=rn.STABLE.min?"STABLE":t>=rn.STRUCTURAL_CONCERN.min?"STRUCTURAL_CONCERN":"HIGH_RISK"}},Ir=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:ie,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"}},di=class{validator;ruleRegistry;scoringEngine;reportGenerator;constructor(){this.validator=new Rr,this.ruleRegistry=new br,this.scoringEngine=new Cr,this.reportGenerator=new Ir;}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)}}},pi={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}},fi={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}},gi={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},mi={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},hi={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"]}}},yi={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},vi={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"]}},_i={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"]}},ki={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}},Ei={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}},Si={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}},wi={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"]}},Ti={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}},Ai={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 o=s.extension.toLowerCase();if(e.includes(o))try{let a=Ar("fs"),i=Ar("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}},Ri=[pi,fi,gi,mi,hi,yi,vi,_i,ki,Ei,Si,wi,Ti,Ai,xi],Nr=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:ie,project_id:ue__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
|
|
5
|
+
Please check your .env file and ensure all required variables are set.`)}throw t}}function Io(){return En||(En=Co()),En}function No(t=Ro.api.rateLimit){let{windowMs:e,maxRequests:n,message:r}=t;return {check(s){let o=Date.now(),a=Be.get(s);a&&o>a.resetTime&&Be.delete(s);let i=Be.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++,Be.set(s,i),{success:true,remaining:n-i.count,resetTime:i.resetTime})},reset(s){Be.delete(s);},cleanup(){let s=Date.now();for(let[o,a]of Be.entries())s>a.resetTime&&Be.delete(o);}}}var Ro,bo,En,k,ur,Bt,E,Be,te=G(()=>{gn();gn();lr();Ro={versions:{cli:ie,engine:ie,frontend:ie,api:fn,snapshot:ae,engine_target:qe},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:ae,engineTargetVersion:qe},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()}),bo=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()});En=null;new Proxy({},{get(t,e){return Io()[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"}},ur={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},{[ur.FREE]:k.plans.FREE,[ur.PRO]:k.plans.PRO},Bt={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},{[Bt.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],[Bt.SUPPORT]:[E.READ_ALL,E.PROJECT_READ,E.SNAPSHOT_READ,E.REPORT_READ,E.USER_READ,E.SUPPORT_ACCESS,E.SUPPORT_VIEW_TICKETS],[Bt.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],[Bt.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}},Be=new Map;No();});var nn,rn,Ar=G(()=>{nn={BASE_SCORE:100,MIN_SCORE:0,MAX_SCORE:100},rn={HEALTHY:{min:90,max:100},STABLE:{min:75,max:89},STRUCTURAL_CONCERN:{min:60,max:74},HIGH_RISK:{min:0,max:59}};});var In={};Vn(In,{CoreEngine:()=>fi,ProjectScanner:()=>Or,RULES:()=>Ci,ReportGenerator:()=>Nr,RuleRegistry:()=>Cr,ScoringEngine:()=>Ir,SnapshotValidator:()=>br,scanProject:()=>Oi});async function Oi(t,e,n){return new Or({projectPath:t,...n}).scan(e)}var xr,br,Cr,Ir,Nr,fi,gi,mi,hi,yi,vi,_i,ki,Ei,Si,wi,Ti,Ai,xi,Ri,bi,Ci,Or,Nn=G(()=>{Ar();te();te();xr=(t=>typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>e[n]}):t)(function(t){throw Error('Dynamic require of "'+t+'" is not supported')}),br=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}}},Cr=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}},Ir=class{calculateScore(t){let e=nn.BASE_SCORE;for(let n of t)e-=n.weight;return Math.max(nn.MIN_SCORE,Math.min(nn.MAX_SCORE,e))}getSeverityBand(t){return t>=rn.HEALTHY.min?"HEALTHY":t>=rn.STABLE.min?"STABLE":t>=rn.STRUCTURAL_CONCERN.min?"STRUCTURAL_CONCERN":"HIGH_RISK"}},Nr=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:ae,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"}},fi=class{validator;ruleRegistry;scoringEngine;reportGenerator;constructor(){this.validator=new br,this.ruleRegistry=new Cr,this.scoringEngine=new Ir,this.reportGenerator=new Nr;}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)}}},gi={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}},mi={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}},hi={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},yi={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},vi={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"]}}},_i={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},ki={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"]}},Ei={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"]}},Si={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}},wi={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}},Ti={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}},Ai={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"]}},xi={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}},Ri={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}},bi={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=xr("fs"),i=xr("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}},Ci=[gi,mi,hi,yi,vi,_i,ki,Ei,Si,wi,Ti,Ai,xi,Ri,bi],Or=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:ae,project_id:de__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 de__default.createHash("sha256").update(t).digest("hex")}};});var es=[/^--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],Je=/vs_[a-zA-Z0-9_-]{20,}/i;function Bn(){let t=process.argv.slice(2);for(let e of t){for(let n of es)n.test(e)&&(console.error(y.red(`
|
|
7
7
|
\u274C Security Error: Token detected in command line arguments`)),console.error(y.yellow(`
|
|
8
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
9
|
Instead, use:`)),console.error(y.cyan(" veestack login")),console.error(y.gray(`
|
|
@@ -18,28 +18,28 @@ Use login instead:`)),console.error(y.cyan(" veestack login")),process.exit(1))
|
|
|
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(Je,"[REDACTED]").replace(/Bearer\s+[a-zA-Z0-9_-]+/gi,"Bearer [REDACTED]"),console.error(`Error: ${n}`),process.exit(1);});}var Ke=["veestack-tools","@vee_stack/cli"],
|
|
21
|
+
\u274C Unhandled Promise Rejection`);let n=e.message||"Unknown error";n=n.replace(Je,"[REDACTED]").replace(/Bearer\s+[a-zA-Z0-9_-]+/gi,"Bearer [REDACTED]"),console.error(`Error: ${n}`),process.exit(1);});}var Ke=["veestack-tools","@vee_stack/cli"],ns=["veestack","veestack-cli","veestacktool","veestack-tool","vee-stack","veestack-cli-tool","veestack-scanner","veestack-analyzer"],rs=[/veestak/i,/veestac/i,/veestackk/i,/veestackh/i,/vvestack/i,/veee/i,/veestack-cli-hack/i,/veestack-free/i,/veestack-pro-free/i];function Gn(){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(ne.existsSync(s))return JSON.parse(ne.readFileSync(s,"utf-8")).name||"unknown";let o=Ye.dirname(n);if(o===n)break;n=o;}}catch{}return "unknown"}function ss(){let t=Gn(),e=[];if(Ke.includes(t))return {isOfficial:true,warnings:[]};if(ns.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(Ke[0])}`),e.push("Unofficial packages may contain malware or steal your data."),{isOfficial:false,warnings:e};for(let n of rs)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(Ke[0])}`),{isOfficial:false,warnings:e};return e.push(`\u26A0\uFE0F WARNING: Unofficial package "${t}" detected.`),e.push(`The official package is: ${y.cyan(Ke[0])}`),{isOfficial:false,warnings:e}}function Yn(){let{isOfficial:t,warnings:e}=ss();if(!t){console.log(y.red(`
|
|
22
22
|
`+"\u2550".repeat(60))),console.log(y.red.bold(`\u{1F6A8} SECURITY WARNING
|
|
23
23
|
`));for(let n of e)console.log(y.yellow(n));console.log(y.gray(`
|
|
24
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: ${Ke.join(" or ")}`));}function Dt(){let t=Gn(),e=Ke.includes(t);return {packageName:t,isOfficial:e,homepage:"https://veestack.tools",repository:"https://github.com/Mohmed-ElZehiry/VeeStack"}}te();te();te();var
|
|
25
|
+
`)),process.exit(1);}process.env.VEESTACK_DEBUG==="true"&&console.log(y.gray(`\u2713 Official package verified: ${Ke.join(" or ")}`));}function Dt(){let t=Gn(),e=Ke.includes(t);return {packageName:t,isOfficial:e,homepage:"https://veestack.tools",repository:"https://github.com/Mohmed-ElZehiry/VeeStack"}}te();te();te();var Oo={TOKEN_BINDING_SALT:dn};function dr(t,e){let n=`${t}:${e}:${Oo.TOKEN_BINDING_SALT}`;return de.createHash("sha256").update(n).digest("hex")}function pr(t,e,n,r,s="cli"){let o=new Date().toISOString(),a=jo(),i=Do(t,e,n,o,a),c=Po(o,s,i),l=Lo(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 Do(t,e,n,r,s){let o=de.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
28
|
`,"host;x-timestamp;x-nonce",o].join(`
|
|
29
|
-
`)}function
|
|
30
|
-
`)}function
|
|
29
|
+
`)}function Po(t,e,n){let r=t.substring(0,10).replace(/-/g,""),s=de.createHash("sha256").update(n).digest("hex");return ["VEESTACK-HMAC-SHA256",t,`${r}/veestack/${e}/veestack_request`,s].join(`
|
|
30
|
+
`)}function Lo(t,e,n,r){let s=e.substring(0,10).replace(/-/g,""),o=kt("VEESTACK"+t,s),a=kt(o,"veestack"),i=kt(a,n),c=kt(i,"veestack_request");return kt(c,r,"hex")}function kt(t,e,n){return de.createHmac("sha256",t).update(e).digest(n||"hex")}function jo(){return de.randomBytes(16).toString("hex")}var Ht=null;async function Wt(){if(Ht)return Ht;try{return Ht=await import('keytar'),Ht}catch{return null}}var wt=Ye.join(it.homedir(),".veestack"),he=Ye.join(wt,"tokens.enc"),fr=Ye.join(wt,"salt"),gr=Ye.join(wt,".key"),Gt="VeeStack CLI",Yt="auth_tokens",Uo=1e5,$o=32,Mo=16;function zt(){return process.env.DEBUG?.includes("veestack")||process.env.DEBUG?.includes("*")||process.env.NODE_ENV==="development"||process.env.VEESTACK_DEBUG==="true"}async function Fo(){try{let e=await U.readFile(fr).catch(()=>null);if(e)return e}catch{}let t=de.randomBytes(32);return await U.mkdir(wt,{recursive:true,mode:448}),await U.writeFile(fr,t,{mode:384}),t}async function mr(){try{let r=await U.readFile(gr,"utf-8").catch(()=>null);if(r){let s=Buffer.from(r,"hex");return await U.unlink(gr).catch(()=>{}),s}}catch{}let t=`${it.userInfo().username}@${it.hostname()}`,e=await Fo();return de.pbkdf2Sync(t,e,Uo,$o,"sha256")}function Et(t){Buffer.isBuffer(t)&&t.fill(0);}async function Tt(t){let e=await Wt();if(e)try{let l=JSON.stringify(t);await e.setPassword(Gt,Yt,l),zt()&&console.log(" Tokens saved to OS Keychain");return}catch(l){zt()&&console.log(" Keychain failed, falling back to encrypted file:",l);}let n=await mr(),r=de.randomBytes(Mo),s=de.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(wt,{recursive:true,mode:448}),await U.writeFile(he,JSON.stringify(c),{mode:384}),Et(n),zt()&&console.log(" Tokens saved to encrypted file (AES-256-GCM)");}async function hr(){let t=await Wt();if(t)try{let e=await t.getPassword(Gt,Yt);if(e)return JSON.parse(e)}catch(e){zt()&&console.log("\u26A0\uFE0F Keychain read failed, trying encrypted file:",e);}try{let e=await U.readFile(he,"utf-8"),n=JSON.parse(e);if(n.version===1)return await Vo(n);let r=await mr(),s=null;try{let o=Buffer.from(n.iv,"hex"),a=Buffer.from(n.data,"hex"),i=Buffer.from(n.authTag,"hex"),c=de.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 Et(s),Et(r),l}catch(o){throw s&&Et(s),Et(r),o}}catch{return null}}async function Vo(t){try{return console.log("\u{1F510} Migrating from legacy encryption format..."),await U.unlink(he).catch(()=>{}),null}catch{return null}}async function Zt(){try{return await U.access(he),!0}catch{return false}}async function He(){try{let t=await U.stat(he).catch(()=>null);if(!t)return;let e=t.size,n=3;for(let s=0;s<n;s++){let o=de.randomBytes(e);await U.writeFile(he,o);}await U.unlink(he);let r=await Wt();r&&await r.deletePassword(Gt,Yt).catch(()=>{});}catch{}}async function yr(){let t=await Wt(),e=!!t,n=false;if(t)try{n=!!await t.getPassword(Gt,Yt);}catch{}let r=false,s,o,a=0;try{let i=await U.stat(he);r=!0,s=i.mode.toString(8),o=i.size;let c=await U.readFile(he,"utf-8");a=JSON.parse(c).version||1;}catch{}return {keychainAvailable:e,keychainHasTokens:n,fileExists:r,filePermissions:s,fileSize:o,encryptionVersion:a}}var Bo=[{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 ze(t){if(!t||typeof t!="string")return t;let e=t;for(let n of Bo)e=e.replace(n.regex,n.replacement);return e}function Sn(t){return t instanceof Error?ze(t.message).slice(0,500):typeof t=="string"?ze(t).slice(0,500):ze(String(t)).slice(0,500)}function Jt(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=>Jt(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]=Jt(s):typeof s=="string"?n[r]=ze(s):n[r]=s;}return n}function At(t,e,...n){let r=ze(e),s=n.map(o=>typeof o=="string"?ze(o):typeof o=="object"&&o!==null?Jt(o):o);console[t](r,...s);}var ye={log:(t,...e)=>At("log",t,...e),error:(t,...e)=>At("error",t,...e),warn:(t,...e)=>At("warn",t,...e),info:(t,...e)=>At("info",t,...e),debug:(t,...e)=>At("debug",t,...e)};var wn=Ye.join(it.homedir(),".veestack");Ye.join(wn,"config.json");var Kt=Ye.join(wn,"config.json"),Ho=process.env.VEESTACK_API_URL||"https://api.veestack.tools";async function Wo(){try{if(!ne.existsSync(Kt))return;let t=ne.readFileSync(Kt,"utf-8"),e=JSON.parse(t);if(await Zt()){try{ne.unlinkSync(Kt);}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 Tt(n);try{ne.unlinkSync(Kt);}catch{}ye.info("\u{1F510} Authentication migrated to encrypted storage");}catch{}}async function K(){await Wo();let t=await hr();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 xt(){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 Go(){let t=await K();return t&&(t.token||t.apiKey)||null}async function Yo(){let t=await K();return {id:t?.device?.id,fingerprint:t?.device?.fingerprint}}async function Xt(t="GET",e="",n="",r=["project:read"]){let s=await Go();if(!s)return {};let o=await K(),a=await Yo();if(!a.id||!a.fingerprint||!o?.refreshToken)return {};let i=dr(o.refreshToken,a.fingerprint),c=pr(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 Tn(t){if(!t.tokenExpiresAt)return true;let e=new Date(t.tokenExpiresAt),n=300*1e3;return Date.now()>=e.getTime()-n}async function Zo(t){if(!t.refreshToken)return null;try{let e=await fetch(`${Ho}/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 He(),console.log(y.red(`
|
|
31
31
|
\u274C Security Alert: Device mismatch`)),console.log(y.yellow(`
|
|
32
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 He(),console.log(y.red(`
|
|
33
33
|
\u274C Device authorization revoked`)),console.log(y.yellow(`
|
|
34
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 He(),console.log(y.red(`
|
|
35
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 Tt({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")&&(
|
|
37
|
-
\u26A0\uFE0F Network error`),
|
|
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 Tt({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")&&(ye.warn(`
|
|
37
|
+
\u26A0\uFE0F Network error`),ye.info("Could not connect to authentication server."),ye.info("Please check your connection and try again.")),null}}async function Te(){let t=await K();if(!t)return console.log(y.yellow(`
|
|
38
38
|
\u26A0\uFE0F You are not logged in`)),console.log(y.gray(`
|
|
39
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&&Tn(t)){console.log(y.yellow("Token expired, refreshing..."));let e=await
|
|
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 at(){let t=await K();return !t||!t.subscription?"free":t.subscription.tier}async function
|
|
42
|
-
`);for(let s of
|
|
40
|
+
`)),console.log(y.gray("Run:")),console.log(y.cyan(" veestack login")),null;if(t.refreshToken&&Tn(t)){console.log(y.yellow("Token expired, refreshing..."));let e=await Zo(t);return e?(console.log(y.green("\u2713 Token refreshed")),e):(await He(),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 at(){let t=await K();return !t||!t.subscription?"free":t.subscription.tier}async function kr(){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 Er(t){if(t.user)try{let e=join(wn,"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 Jo=[".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"],Ko=["veestack.config.json","package.json","tsconfig.json","jsconfig.json",".eslintrc.json",".prettierrc.json","README.md"],qo=[{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 Sr(t){let e=t.replace(/\\/g,"/").toLowerCase(),n=Ye.basename(e);for(let r of Ko)if(n===r.toLowerCase())return false;for(let r of Jo){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 Xo(t,e){let n=[],r=e.split(`
|
|
42
|
+
`);for(let s of qo){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 Qo(t){let e=[];if(Sr(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(ne.statSync(t).size>1024*1024)return e;let r=ne.readFileSync(t,"utf-8"),s=Xo(t,r);e.push(...s);}catch{}return e}async function wr(t,e){let n=[];for(let i of e){let c=Ye.join(t,i),l=await Qo(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 An(t){if(t.secretsFound===0)return y.green("\u2713 No secrets detected");let e=`
|
|
43
43
|
`+y.red(`\u26A0\uFE0F Secrets Detected!
|
|
44
44
|
`);e+=y.gray(`Found ${t.secretsFound} potential secret(s) in ${t.totalFiles} files
|
|
45
45
|
|
|
@@ -57,22 +57,22 @@ Login to enable:`)),console.log(y.gray(" \u2022 Cloud reports")),console.log(y.
|
|
|
57
57
|
`);for(let o of s)e+=` ${y.blue("\u2022")} ${y.white(o.filePath)}
|
|
58
58
|
`,e+=` ${y.gray(o.description)}
|
|
59
59
|
`;e+=`
|
|
60
|
-
`;}return e}function
|
|
60
|
+
`;}return e}function Tr(t){let e=[],n=[];for(let r of t)Sr(r)?n.push(r):e.push(r);return {safe:e,blocked:n}}te();function ii(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 Rn(t){let e=await Te(),n=e!==null;if(n){console.log(y.blue(`
|
|
61
61
|
\u{1F510} Authenticated mode`)),e?.user&&console.log(y.gray(`User: ${e.user.name}`));let s=await at();console.log(y.gray(`Tier: ${s==="pro"?"Pro":"Free"}`));}else console.log(y.gray(`
|
|
62
62
|
\u{1F4C1} Local scan mode`)),console.log(y.gray(`Results will not be uploaded.
|
|
63
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
64
|
`));console.log(y.gray("\u2500".repeat(40)+`
|
|
65
|
-
`));let r=
|
|
65
|
+
`));let r=ri({text:"Scanning project...",spinner:"dots",stream:process.stdout}).start();try{let s=Date.now(),o=await ci(t.path),a=o.map(L=>L.path),i=new si.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 wr(t.path,a);i.update(Math.floor(a.length*.5)),c.criticalCount>0&&(i.stop(),r.fail("Security scan failed"),console.log(An(c)),console.log(y.red(`
|
|
66
66
|
\u274C Critical secrets detected!`)),console.log(y.yellow(`Upload blocked to protect sensitive data.
|
|
67
67
|
`)),console.log(y.gray("To override (not recommended):")),console.log(y.gray(` --skip-secret-scan (requires explicit confirmation)
|
|
68
68
|
`)),process.exit(1)),c.secretsFound>0&&(console.log(An(c)),console.log(y.yellow(`
|
|
69
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}=
|
|
70
|
+
`)));let{safe:l,blocked:d}=Tr(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 ai(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
71
|
\u{1F389} Scan completed successfully`)),console.log(`
|
|
72
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 _=
|
|
73
|
+
`));let _=ii(b,c);console.log(y.bold("Security Score"));let dt=_.grade.startsWith("A")?y.green:_.grade==="B"?y.blue:y.yellow;console.log(`${dt.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
74
|
`)):console.log(y.gray(`No issues detected
|
|
75
|
-
`));let pt=new
|
|
75
|
+
`));let pt=new oi({head:[y.cyan("Language"),y.cyan("Files")],style:{head:[],border:["gray"]}});Object.entries(b.metadata.language_breakdown).sort(([,L],[,ft])=>ft-L).slice(0,5).forEach(([L,ft])=>pt.push([L,ft])),console.log(y.bold("Languages detected")),console.log(pt.toString()+`
|
|
76
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
77
|
`+y.gray("\u2500".repeat(40)));let Ze=await import('fs/promises');await Ze.writeFile(t.output,JSON.stringify(b,null,2));try{let L=join(process.env.HOME||process.env.USERPROFILE||"",".veestack","last-scan.json"),ft={timestamp:new Date().toISOString(),score:_.score,grade:_.grade,issues:c.secretsFound,project:resolve(t.path).split(/[\\/]/).pop()};await Ze.mkdir(join(process.env.HOME||process.env.USERPROFILE||"",".veestack"),{recursive:!0}),await Ze.writeFile(L,JSON.stringify(ft,null,2));}catch{}console.log(`
|
|
78
78
|
\u2705 Snapshot saved to ${t.output}`),n?(console.log(y.bold(`
|
|
@@ -81,73 +81,73 @@ Upload results to cloud:`)),console.log(y.cyan(" veestack upload"))):(console.l
|
|
|
81
81
|
Next step`)),console.log(y.gray(`
|
|
82
82
|
Upload results to cloud:`)),console.log(y.cyan(" veestack upload snapshot.json")));}catch(s){r.fail("Scan failed"),console.error(y.red(`
|
|
83
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
|
|
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 ai(t,e){let n=await li(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:ui(e)};return {snapshot_version:ae,engine_target_version:qe,project_id:de__default.randomUUID(),generated_at:new Date().toISOString(),root_path_hash:bn(t),project_root:resolve(t),metadata:r,files:e,dependencies:n}}async function ci(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:de__default.randomUUID(),path:s,path_hash:bn(s),depth:s.split(/[\\/]/).length,size_bytes:a.size,estimated_lines:Math.floor(a.size/50),extension:s.split(".").pop()||"",is_binary:pi(s)};e.push(i);}}return e.sort((s,o)=>s.path_hash.localeCompare(o.path_hash))}async function li(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:de__default.randomUUID(),name_hash:bn(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 ui(t){let e={};for(let n of t){let r=n.extension.toLowerCase(),s=di(r);e[s]=(e[s]||0)+1;}return e}function di(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 pi(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 bn(t){return de__default.createHash("sha256").update(t).digest("hex")}var an=process.env.SUPABASE_URL||"https://qhonrrojtqklvlkvfswb.supabase.co",Ae=process.env.SUPABASE_ANON_KEY||"";async function Li(){try{let t=await fetch(`${an}/rest/v1/projects?select=id,name,created_at&order=created_at.desc`,{headers:{apikey:Ae,Authorization:`Bearer ${Ae}`}});return t.ok?await t.json():[]}catch{return []}}async function Dr(t){try{let e=await fetch(`${an}/rest/v1/projects`,{method:"POST",headers:{"Content-Type":"application/json",apikey:Ae,Authorization:`Bearer ${Ae}`,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 on(t){let e=Pi.createInterface({input:process.stdin,output:process.stdout});return new Promise(n=>{e.question(t,r=>{e.close(),n(r);});})}async function ji(){console.log(y.blue(`
|
|
85
85
|
\u{1F4C1} Loading projects...
|
|
86
|
-
`));let t=await
|
|
87
|
-
`)),(await on("Do you want to create a new project? (y/n): ")).toLowerCase()==="y"){let s=await on("Enter project name: ");if(s.trim()){let o=await
|
|
86
|
+
`));let t=await Li();if(t.length===0){if(console.log(y.yellow(`No projects found.
|
|
87
|
+
`)),(await on("Do you want to create a new project? (y/n): ")).toLowerCase()==="y"){let s=await on("Enter project name: ");if(s.trim()){let o=await Dr(s.trim());if(o)return console.log(y.green(`
|
|
88
88
|
\u2705 Project "${s}" created successfully!`)),o}}return null}console.log(y.white(`Select a project:
|
|
89
89
|
`)),console.log(y.gray(`0. [+] Create new project
|
|
90
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
91
|
`));});let e=await on("Enter number (0-"+t.length+"): "),n=parseInt(e,10);if(n===0){let r=await on(`
|
|
92
|
-
Enter project name: `);if(r.trim()){let s=await
|
|
92
|
+
Enter project name: `);if(r.trim()){let s=await Dr(r.trim());if(s)return console.log(y.green(`
|
|
93
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
94
|
\u2705 Selected project: "${r.name}"`)),r.id}else return console.log(y.red(`
|
|
95
95
|
\u274C Invalid selection`)),null}async function On(t){let e=await Te();e||(console.log(y.red("\u274C Authentication required")),console.log(y.yellow(`
|
|
96
96
|
Please login first:`)),console.log(y.cyan(" veestack login")),process.exit(1));let n=at();console.log(y.blue(`
|
|
97
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=
|
|
98
|
+
`));let r=ri("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 ji();L||(console.log(y.red(`
|
|
99
99
|
\u274C No project selected. Exiting.`)),process.exit(1)),i=L,r.start("Uploading snapshot...");}r.text="Creating snapshot...";let c=await fetch(`${an}/rest/v1/snapshots`,{method:"POST",headers:{"Content-Type":"application/json",apikey:Ae,Authorization:`Bearer ${Ae}`,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(()=>(Nn(),In)),{RULES:b}=await Promise.resolve().then(()=>(Nn(),In)),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 dt=await fetch(`${an}/rest/v1/reports`,{method:"POST",headers:{"Content-Type":"application/json",apikey:Ae,Authorization:`Bearer ${Ae}`,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(!dt.ok){let L=await dt.json();r.fail("Failed to create report"),console.error(y.red(`Error: ${L.message||L.details||"Unknown error"}`)),process.exit(1);}let pt=await dt.json(),Ze=pt[0]?.id||pt[0]?.id;r.succeed("Analysis complete"),console.log(y.green(`
|
|
100
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:"),Ze),console.log(y.bold(`
|
|
101
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/${Ze}?project=${i}`));}catch(s){r.fail("Upload failed"),console.error(s),process.exit(1);}}te();var
|
|
102
|
+
\u{1F517} View your report at:`)),console.log(y.underline(`http://localhost:3001/reports/${Ze}?project=${i}`));}catch(s){r.fail("Upload failed"),console.error(s),process.exit(1);}}te();var Lr=process.env.VEESTACK_API_URL||"https://api.veestack.tools",Mi=process.env.VEESTACK_WEB_URL||"https://veestack.tools",Fi=2e3,jr=300;function Vi(){return de__default.randomBytes(16).toString("hex")}function Bi(){let t=de__default.randomBytes(32).toString("base64url"),e=de__default.createHash("sha256").update(t).digest("base64url");return {code_verifier:t,code_challenge:e}}function Hi(){let t=process.platform,e=it.hostname(),n=H,r=e||de__default.randomBytes(8).toString("hex"),s=de__default.createHash("sha256").update(`${r}:${t}:${n}`).digest("hex"),o=de__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 zi(t,e){let n=Vi(),r=await fetch(`${Lr}/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 Wi(t,e,n){try{let r=await fetch(`${Lr}/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>=jr)throw new Error("Authentication timeout. Please try again.");return null}}async function bt(){console.log(y.bold.cyan(`
|
|
103
103
|
\u{1F510} Login to VeeStack
|
|
104
104
|
`)),console.log(y.gray(`Opening browser to authenticate...
|
|
105
|
-
`));let t=
|
|
105
|
+
`));let t=ri({text:"Requesting device code...",spinner:"dots",stream:process.stdout});try{let e=Bi(),n=Hi();t.start();let r=await zi(e,n);t.stop();let s=`${Mi}/cli-auth?device=${r.device_code}&code=${r.user_code}&challenge=${e.code_challenge}`;console.log(y.white(`Please authenticate using your browser:
|
|
106
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
|
|
108
|
-
`));let o=0,a=null;for(t.start("Checking authentication status...");!a&&o<
|
|
107
|
+
`),await $i(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<jr;)await new Promise(c=>setTimeout(c,Fi)),a=await Wi(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
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 Tt(i);}catch(c){t.fail("Failed to save authentication"),console.error(y.red(`
|
|
110
110
|
\u274C Could not securely store tokens:`),c),process.exit(1);}console.log(y.green(`
|
|
111
111
|
\u2714 Login successful
|
|
112
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`)),
|
|
114
|
-
\u274C Error:`),e instanceof Error?e.message:e),process.exit(1);}}var
|
|
113
|
+
Token saved securely to OS Keychain`)),Er({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 Gi=process.env.VEESTACK_API_URL||"https://api.veestack.tools";async function Ur(){try{let t=await K();if(!t){console.log(y.yellow("\u26A0\uFE0F Not logged in"));return}if(console.log(y.bold.cyan(`
|
|
115
115
|
\u{1F6AA} Logout from VeeStack
|
|
116
|
-
`)),t.token||t.apiKey)try{let e=t.token||t.apiKey;await fetch(`${
|
|
116
|
+
`)),t.token||t.apiKey)try{let e=t.token||t.apiKey;await fetch(`${Gi}/api/cli/logout`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify({device_id:t.device?.id})});}catch{}await Zt()&&await He();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
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){
|
|
118
|
+
`));}catch(t){ye.error("\u274C Error during logout:",Sn(t)),process.exit(1);}}async function $r(){try{let t=await Te();t||(console.log(y.yellow("\u26A0\uFE0F Not authenticated")),console.log(y.gray(`
|
|
119
119
|
Please login first:`)),console.log(y.cyan(" veestack login")),process.exit(1)),console.log(y.bold.cyan(`
|
|
120
120
|
\u{1F464} VeeStack Account
|
|
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=Tn(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
|
|
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=Tn(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 Fr(){return join(homedir(),".veestack","accounts")}function Yi(){try{let t=Fr();if(!ne.existsSync(t))return [];let e=[],n=ne.readdirSync(t);for(let r of n)if(r.endsWith(".json")){let s=ne.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 Zi(t){try{let e=Fr();if(ne.mkdirSync(e,{recursive:!0}),t.user){let n=join(e,`${t.user.id}.json`);ne.writeFileSync(n,JSON.stringify(t,null,2),{mode:384});}}catch{}}async function Vr(){let t=await K(),e=Yi();console.log(y.bold.cyan(`
|
|
122
122
|
\u{1F464} Switch Account
|
|
123
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
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
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 bt();return}if(a>0&&a<=n.length){let i=n[a-1];t&&
|
|
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 bt();return}if(a>0&&a<=n.length){let i=n[a-1];t&&Zi(t);let c=join(homedir(),".veestack"),l=join(c,"config.json");ne.mkdirSync(c,{recursive:true}),ne.writeFileSync(l,JSON.stringify(i.config,null,2),{mode:384}),console.log(y.green(`
|
|
127
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);}te();function
|
|
128
|
+
\u274C Invalid selection`)),process.exit(1);}te();function Ji(){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 Ki(){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 qi(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 Dn(){console.log(y.bold.cyan(`
|
|
129
129
|
\u{1F4CA} VeeStack Status
|
|
130
|
-
`)),console.log(y.gray("\u2500".repeat(40)));let t=await xt(),e=await at(),n=await
|
|
131
|
-
CLI Version: ${y.white(
|
|
130
|
+
`)),console.log(y.gray("\u2500".repeat(40)));let t=await xt(),e=await at(),n=await kr(),r=Ji(),s=Ki();if(console.log(y.gray(`
|
|
131
|
+
CLI Version: ${y.white(ie)}`)),console.log(y.bold(`
|
|
132
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
133
|
\u26A0\uFE0F You are not logged in`)),console.log(y.gray(`
|
|
134
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
135
|
`)),console.log(y.gray("Run:")),console.log(y.cyan(" veestack login"))),console.log(y.bold(`
|
|
136
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: ${
|
|
138
|
-
`+"\u2500".repeat(40)));}var
|
|
139
|
-
Opening ${e}...`));try{await
|
|
137
|
+
Scan Status`)),s){console.log(y.gray(` Last scan: ${qi(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 Wr=process.env.VEESTACK_DASHBOARD_URL||"https://veestack.tools/dashboard";function na(){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 Gr(){let t=na(),e=t?`${Wr}/projects/${t}`:Wr;console.log(y.cyan(`
|
|
139
|
+
Opening ${e}...`));try{await $i(e),console.log(y.green(`\u2714 Dashboard opened in your browser
|
|
140
140
|
`));}catch{console.log(y.red(`
|
|
141
141
|
\u274C Could not open browser automatically.`)),console.log(y.gray(`Please visit: ${y.white(e)}
|
|
142
|
-
`));}}te();var
|
|
142
|
+
`));}}te();var oa=process.env.VEESTACK_API_URL||"https://api.veestack.tools";async function ia(){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 aa(){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 ca(){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 la(){if(!await xt())return {name:"API Connectivity",status:"ok",message:"Skipped (not authenticated)",details:"Login to enable API checks"};try{let e=await Xt(),n=await fetch(`${oa}/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
143
|
\u2022 Internet connection
|
|
144
|
-
\u2022 API endpoint configuration`}}}async function
|
|
144
|
+
\u2022 API endpoint configuration`}}}async function ua(){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 da(){let{isOfficial:t,packageName:e}=Dt();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 pa(){let t=await yr();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 fa(){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 ga(){try{return {name:"Disk Space",status:"ok",message:"Sufficient"}}catch{return {name:"Disk Space",status:"warning",message:"Unable to check"}}}function Nt(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 Pn(){console.log(y.bold.cyan(`
|
|
145
145
|
\u{1F50D} VeeStack Doctor
|
|
146
|
-
`)),console.log(y.bold("Environment"));let t=await Promise.all([
|
|
147
|
-
Project`));let e=await Promise.all([
|
|
148
|
-
Authentication`));let n=await Promise.all([
|
|
149
|
-
Connectivity`));let r=await Promise.all([
|
|
150
|
-
Security`));let s=await Promise.all([
|
|
146
|
+
`)),console.log(y.bold("Environment"));let t=await Promise.all([ia(),aa(),fa(),ga()]);t.forEach(Nt),console.log(y.bold(`
|
|
147
|
+
Project`));let e=await Promise.all([ua()]);e.forEach(Nt),console.log(y.bold(`
|
|
148
|
+
Authentication`));let n=await Promise.all([ca(),pa()]);n.forEach(Nt),console.log(y.bold(`
|
|
149
|
+
Connectivity`));let r=await Promise.all([la()]);r.forEach(Nt),console.log(y.bold(`
|
|
150
|
+
Security`));let s=await Promise.all([da()]);s.forEach(Nt);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
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
152
|
`))),r.find(_=>_.name==="API Connectivity")?.status==="warning"&&xt&&(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
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
|
|
@@ -168,7 +168,7 @@ Security`));let s=await Promise.all([la()]);s.forEach(Nt);let o=[...t,...e,...n,
|
|
|
168
168
|
\u{1F310} API Security Tests (Full Mode)
|
|
169
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(`
|
|
170
170
|
\u{1F512} Network Security Tests (Full Mode)
|
|
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=it.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 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=Ye.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:Pt,summary:{total:s,passed:e,failed:n,warnings:r,score:parseFloat(o)},results:this.results,recommendations:a}}};async function
|
|
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=it.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 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=Ye.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:Pt,summary:{total:s,passed:e,failed:n,warnings:r,score:parseFloat(o)},results:this.results,recommendations:a}}};async function Jr(){let t=process.argv.slice(3),e=t.includes("--full"),n=t.includes("--json"),s=await new jn(e).run();console.log(y.gray("=".repeat(60))),console.log(y.blue.bold(`
|
|
172
172
|
\u{1F4CA} Security Audit Report
|
|
173
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
174
|
Security Score: ${a(o.score+"/10")}`)),o.score>=9?console.log(y.green.bold(`
|
|
@@ -176,31 +176,31 @@ Security`));let s=await Promise.all([la()]);s.forEach(Nt);let o=[...t,...e,...n,
|
|
|
176
176
|
\u26A0 Good, but improvements recommended.`)):console.log(y.red.bold(`
|
|
177
177
|
\u274C Critical issues detected!`)),s.recommendations.length>0&&(console.log(y.blue.bold(`
|
|
178
178
|
\u{1F4CB} Recommendations:
|
|
179
|
-
`)),s.recommendations.forEach((i,c)=>{console.log(` ${c+1}. ${i}`);})),console.log(""),n&&console.log(JSON.stringify(s,null,2));}var
|
|
179
|
+
`)),s.recommendations.forEach((i,c)=>{console.log(` ${c+1}. ${i}`);})),console.log(""),n&&console.log(JSON.stringify(s,null,2));}var ha=process.env.VEESTACK_API_URL||"https://api.veestack.tools";async function ya(){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 va(t,e){try{let n=await Xt(),r=await fetch(`${ha}/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 ye.error("Failed to create project:",n instanceof Error?n.message:String(n)),null}}function qr(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 _a(){return ["node_modules/**/*",".git/**/*","dist/**/*","build/**/*",".next/**/*","coverage/**/*","*.test.ts","*.spec.ts","*.min.js"]}function ka(t){let e=join(process.cwd(),"veestack.config.json");writeFileSync(e,JSON.stringify(t,null,2));}function Ea(){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 Sa(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 wa(){let t=process.cwd(),e=join(t,".git");return existsSync(e)}function Ta(){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 Aa(){return `Node ${process.version}`}async function Un(t){console.log(y.bold.cyan(`
|
|
180
180
|
\u{1F680} Initializing VeeStack...
|
|
181
|
-
`));let n=await Te()!==null,r=
|
|
181
|
+
`));let n=await Te()!==null,r=Ea();if(r?.projectId&&!t?.ci&&t?.interactive){let{overwrite:_}=await Kr({type:"confirm",name:"overwrite",message:`Project already linked to ${r.name||r.projectId}. Re-initialize?`,initial:false});if(!_){console.log(y.gray(`
|
|
182
182
|
Cancelled. Existing configuration preserved.
|
|
183
|
-
`));return}}let s=await
|
|
183
|
+
`));return}}let s=await ya();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=Sa(s.name);o.length>0&&console.log(y.green(`\u2714 Structure detected: ${o.length} source directories`));let a=Ta(),i=Aa();console.log(y.green(`\u2714 Package manager: ${a}`)),console.log(y.green(`\u2714 Runtime: ${i}`)),wa()&&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:qr(s.name),createProject:false},console.log(y.gray(`
|
|
184
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
185
|
Configure your project:
|
|
186
|
-
`)),d=await
|
|
186
|
+
`)),d=await Kr([{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:qr(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(`
|
|
187
187
|
Cancelled.
|
|
188
188
|
`)),process.exit(0);}}),!d.projectName){console.log(y.gray(`
|
|
189
189
|
Cancelled.
|
|
190
190
|
`));return}let b;if(d.createProject){console.log(y.gray(`
|
|
191
|
-
Creating project on VeeStack...`));let _=await
|
|
191
|
+
Creating project on VeeStack...`));let _=await va(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:_a()};ka(j),console.log(y.green(`
|
|
192
192
|
\u2714 Configuration saved to veestack.config.json`)),console.log(y.bold(`
|
|
193
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
|
-
`));}te();async function
|
|
194
|
+
`));}te();async function Xr(){console.log(y.cyan(`
|
|
195
195
|
\u{1F50D} Checking for updates...
|
|
196
|
-
`));let{packageName:t}=Dt();try{let e=
|
|
197
|
-
`)),H===e){console.log(y.green("\u2705 You already have the latest version!"));return}if(
|
|
198
|
-
`));let n=
|
|
196
|
+
`));let{packageName:t}=Dt();try{let e=Ra(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(ba(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=Ca();console.log(y.gray(`Using package manager: ${n}
|
|
199
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
200
|
\u2705 Upgrade complete!`)),console.log(y.gray(`
|
|
201
201
|
Run "veestack --version" to verify.`));}catch(e){console.log(y.red(`
|
|
202
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
|
|
203
|
+
Try manually:`)),console.log(y.cyan(` npm install -g ${t}`)),console.log(y.cyan(` pnpm add -g ${t}`)),process.exit(1);}}function Ra(t){try{return execSync(`npm view ${t} version`,{encoding:"utf-8",stdio:["pipe","pipe","ignore"],timeout:5e3}).replace(/\s/g,"")}catch{return H}}function ba(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 Ca(){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"}Bn();Hn();zn();Wn();Yn();var Fn=Da("veestack");Fn.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:[]});Fn.init();var W=new Command;W.name("veestack").description(`VeeStack CLI
|
|
204
204
|
Security visibility for modern development stacks`).version(H,"-v, --version","Show CLI version").configureHelp({formatHelp:(t,e)=>`
|
|
205
205
|
VeeStack CLI
|
|
206
206
|
Security visibility for modern development stacks
|
|
@@ -246,6 +246,6 @@ Documentation
|
|
|
246
246
|
|
|
247
247
|
Website
|
|
248
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(Un);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(Rn);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(On);W.command("login").alias("l").description("Authenticate with VeeStack").option("-k, --key <apiKey>","API key (legacy mode)").action(bt);W.command("logout").description("Logout").action(
|
|
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(Un);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(Rn);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(On);W.command("login").alias("l").description("Authenticate with VeeStack").option("-k, --key <apiKey>","API key (legacy mode)").action(bt);W.command("logout").description("Logout").action(Ur);W.command("whoami").description("Show current user").action($r);W.command("switch-account").alias("switch").description("Switch between accounts").action(Vr);W.command("status").alias("st").description("Check CLI and account status").action(Dn);W.command("open").description("Open VeeStack dashboard").action(Gr);W.command("doctor").alias("dr").description("Diagnose environment").action(Pn);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(Jr);W.command("completion").description("Install autocomplete for your shell").action(()=>{Fn.setupShellInitFile();});W.command("upgrade").description("Update CLI to latest version").action(Xr);process.argv.length<=2?(async()=>{console.log(y.bold.cyan(`
|
|
250
250
|
\u{1F680} Welcome to VeeStack
|
|
251
|
-
`));let t=await
|
|
251
|
+
`));let t=await Kr({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 Un();break;case "scan":await Rn({path:".",output:"snapshot.json"});break;case "upload":await On({file:"snapshot.json"});break;case "status":await Dn();break;case "doctor":await Pn();break;case "login":await bt();break}})():W.parse();
|