@bylqwjc/media-editor-server 1.0.22 → 1.0.23

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/core/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@media-editor/core",
3
- "version": "1.0.22",
3
+ "version": "1.0.23",
4
4
  "description": "媒体编辑器框架无关内核:状态/时间轴/ffmpeg 参数/几何/标注渲染/VideoEditorEngine/图片编辑器纯配置工厂(零 React)",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1 +1 @@
1
- import{ZodError as R,ZodIssueCode as o}from"./ZodError.js";import{defaultErrorMap as _e,getErrorMap as ye}from"./errors.js";import{errorUtil as l}from"./helpers/errorUtil.js";import{DIRTY as W,INVALID as f,OK as x,ParseStatus as w,addIssueToContext as c,isAborted as ge,isAsync as ie,isDirty as ve,isValid as D,makeIssue as ke}from"./helpers/parseUtil.js";import{util as k,ZodParsedType as h,getParsedType as j}from"./helpers/util.js";class C{constructor(e,t,s,a){this._cachedPath=[],this.parent=e,this.data=t,this._path=s,this._key=a}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}}const xe=(r,e)=>{if(D(e))return{success:!0,data:e.value};if(!r.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const t=new R(r.common.issues);return this._error=t,this._error}}};function _(r){if(!r)return{};const{errorMap:e,invalid_type_error:t,required_error:s,description:a}=r;if(e&&(t||s))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:a}:{errorMap:(d,i)=>{const{message:n}=r;return d.code==="invalid_enum_value"?{message:n??i.defaultError}:typeof i.data>"u"?{message:n??s??i.defaultError}:d.code!=="invalid_type"?{message:i.defaultError}:{message:n??t??i.defaultError}},description:a}}class y{get description(){return this._def.description}_getType(e){return j(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:j(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new w,ctx:{common:e.parent.common,data:e.data,parsedType:j(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const t=this._parse(e);if(ie(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){const t=this._parse(e);return Promise.resolve(t)}parse(e,t){const s=this.safeParse(e,t);if(s.success)return s.data;throw s.error}safeParse(e,t){const s={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:j(e)},a=this._parseSync({data:e,path:s.path,parent:s});return xe(s,a)}"~validate"(e){const t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:j(e)};if(!this["~standard"].async)try{const s=this._parseSync({data:e,path:[],parent:t});return D(s)?{value:s.value}:{issues:t.common.issues}}catch(s){s?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(s=>D(s)?{value:s.value}:{issues:t.common.issues})}async parseAsync(e,t){const s=await this.safeParseAsync(e,t);if(s.success)return s.data;throw s.error}async safeParseAsync(e,t){const s={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:j(e)},a=this._parse({data:e,path:s.path,parent:s}),d=await(ie(a)?a:Promise.resolve(a));return xe(s,d)}refine(e,t){const s=a=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(a):t;return this._refinement((a,d)=>{const i=e(a),n=()=>d.addIssue({code:o.custom,...s(a)});return typeof Promise<"u"&&i instanceof Promise?i.then(u=>u?!0:(n(),!1)):i?!0:(n(),!1)})}refinement(e,t){return this._refinement((s,a)=>e(s)?!0:(a.addIssue(typeof t=="function"?t(s,a):t),!1))}_refinement(e){return new b({schema:this,typeName:p.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:t=>this["~validate"](t)}}optional(){return O.create(this,this._def)}nullable(){return I.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Z.create(this)}promise(){return K.create(this,this._def)}or(e){return J.create([this,e],this._def)}and(e){return G.create(this,e,this._def)}transform(e){return new b({..._(this._def),schema:this,typeName:p.ZodEffects,effect:{type:"transform",transform:e}})}default(e){const t=typeof e=="function"?e:()=>e;return new te({..._(this._def),innerType:this,defaultValue:t,typeName:p.ZodDefault})}brand(){return new fe({typeName:p.ZodBranded,type:this,..._(this._def)})}catch(e){const t=typeof e=="function"?e:()=>e;return new se({..._(this._def),innerType:this,catchValue:t,typeName:p.ZodCatch})}describe(e){const t=this.constructor;return new t({...this._def,description:e})}pipe(e){return re.create(this,e)}readonly(){return ae.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const je=/^c[^\s-]{8,}$/i,Pe=/^[0-9a-z]+$/,Ie=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Ee=/^[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,Fe=/^[a-z0-9_-]{21}$/i,Le=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Me=/^[-+]?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)?)??$/,$e=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,ze="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let pe;const De=/^(?:(?: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])$/,Ue=/^(?:(?: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])$/,Ve=/^(([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]))$/,Ke=/^(([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])$/,Be=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,We=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,we="((\\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])))",Ye=new RegExp(`^${we}$`);function be(r){let e="[0-5]\\d";r.precision?e=`${e}\\.\\d{${r.precision}}`:r.precision==null&&(e=`${e}(\\.\\d+)?`);const t=r.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${t}`}function qe(r){return new RegExp(`^${be(r)}$`)}function Ze(r){let e=`${we}T${be(r)}`;const t=[];return t.push(r.local?"Z?":"Z"),r.offset&&t.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${t.join("|")})`,new RegExp(`^${e}$`)}function He(r,e){return!!((e==="v4"||!e)&&De.test(r)||(e==="v6"||!e)&&Ve.test(r))}function Je(r,e){if(!Le.test(r))return!1;try{const[t]=r.split(".");if(!t)return!1;const s=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),a=JSON.parse(atob(s));return!(typeof a!="object"||a===null||"typ"in a&&a?.typ!=="JWT"||!a.alg||e&&a.alg!==e)}catch{return!1}}function Ge(r,e){return!!((e==="v4"||!e)&&Ue.test(r)||(e==="v6"||!e)&&Ke.test(r))}class T extends y{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==h.string){const a=this._getOrReturnCtx(e);return c(a,{code:o.invalid_type,expected:h.string,received:a.parsedType}),f}const t=new w;let s;for(const a of this._def.checks)if(a.kind==="min")e.data.length<a.value&&(s=this._getOrReturnCtx(e,s),c(s,{code:o.too_small,minimum:a.value,type:"string",inclusive:!0,exact:!1,message:a.message}),t.dirty());else if(a.kind==="max")e.data.length>a.value&&(s=this._getOrReturnCtx(e,s),c(s,{code:o.too_big,maximum:a.value,type:"string",inclusive:!0,exact:!1,message:a.message}),t.dirty());else if(a.kind==="length"){const d=e.data.length>a.value,i=e.data.length<a.value;(d||i)&&(s=this._getOrReturnCtx(e,s),d?c(s,{code:o.too_big,maximum:a.value,type:"string",inclusive:!0,exact:!0,message:a.message}):i&&c(s,{code:o.too_small,minimum:a.value,type:"string",inclusive:!0,exact:!0,message:a.message}),t.dirty())}else if(a.kind==="email")$e.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"email",code:o.invalid_string,message:a.message}),t.dirty());else if(a.kind==="emoji")pe||(pe=new RegExp(ze,"u")),pe.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"emoji",code:o.invalid_string,message:a.message}),t.dirty());else if(a.kind==="uuid")Ee.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"uuid",code:o.invalid_string,message:a.message}),t.dirty());else if(a.kind==="nanoid")Fe.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"nanoid",code:o.invalid_string,message:a.message}),t.dirty());else if(a.kind==="cuid")je.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"cuid",code:o.invalid_string,message:a.message}),t.dirty());else if(a.kind==="cuid2")Pe.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"cuid2",code:o.invalid_string,message:a.message}),t.dirty());else if(a.kind==="ulid")Ie.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"ulid",code:o.invalid_string,message:a.message}),t.dirty());else if(a.kind==="url")try{new URL(e.data)}catch{s=this._getOrReturnCtx(e,s),c(s,{validation:"url",code:o.invalid_string,message:a.message}),t.dirty()}else a.kind==="regex"?(a.regex.lastIndex=0,a.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"regex",code:o.invalid_string,message:a.message}),t.dirty())):a.kind==="trim"?e.data=e.data.trim():a.kind==="includes"?e.data.includes(a.value,a.position)||(s=this._getOrReturnCtx(e,s),c(s,{code:o.invalid_string,validation:{includes:a.value,position:a.position},message:a.message}),t.dirty()):a.kind==="toLowerCase"?e.data=e.data.toLowerCase():a.kind==="toUpperCase"?e.data=e.data.toUpperCase():a.kind==="startsWith"?e.data.startsWith(a.value)||(s=this._getOrReturnCtx(e,s),c(s,{code:o.invalid_string,validation:{startsWith:a.value},message:a.message}),t.dirty()):a.kind==="endsWith"?e.data.endsWith(a.value)||(s=this._getOrReturnCtx(e,s),c(s,{code:o.invalid_string,validation:{endsWith:a.value},message:a.message}),t.dirty()):a.kind==="datetime"?Ze(a).test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{code:o.invalid_string,validation:"datetime",message:a.message}),t.dirty()):a.kind==="date"?Ye.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{code:o.invalid_string,validation:"date",message:a.message}),t.dirty()):a.kind==="time"?qe(a).test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{code:o.invalid_string,validation:"time",message:a.message}),t.dirty()):a.kind==="duration"?Me.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"duration",code:o.invalid_string,message:a.message}),t.dirty()):a.kind==="ip"?He(e.data,a.version)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"ip",code:o.invalid_string,message:a.message}),t.dirty()):a.kind==="jwt"?Je(e.data,a.alg)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"jwt",code:o.invalid_string,message:a.message}),t.dirty()):a.kind==="cidr"?Ge(e.data,a.version)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"cidr",code:o.invalid_string,message:a.message}),t.dirty()):a.kind==="base64"?Be.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"base64",code:o.invalid_string,message:a.message}),t.dirty()):a.kind==="base64url"?We.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"base64url",code:o.invalid_string,message:a.message}),t.dirty()):k.assertNever(a);return{status:t.value,value:e.data}}_regex(e,t,s){return this.refinement(a=>e.test(a),{validation:t,code:o.invalid_string,...l.errToObj(s)})}_addCheck(e){return new T({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...l.errToObj(e)})}url(e){return this._addCheck({kind:"url",...l.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...l.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...l.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...l.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...l.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...l.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...l.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...l.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...l.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...l.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...l.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...l.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...l.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,...l.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...l.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...l.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...l.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...l.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...l.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...l.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...l.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...l.errToObj(t)})}nonempty(e){return this.min(1,l.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(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}}T.create=r=>new T({checks:[],typeName:p.ZodString,coerce:r?.coerce??!1,..._(r)});function Xe(r,e){const t=(r.toString().split(".")[1]||"").length,s=(e.toString().split(".")[1]||"").length,a=t>s?t:s,d=Number.parseInt(r.toFixed(a).replace(".","")),i=Number.parseInt(e.toFixed(a).replace(".",""));return d%i/10**a}class E extends y{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)!==h.number){const a=this._getOrReturnCtx(e);return c(a,{code:o.invalid_type,expected:h.number,received:a.parsedType}),f}let t;const s=new w;for(const a of this._def.checks)a.kind==="int"?k.isInteger(e.data)||(t=this._getOrReturnCtx(e,t),c(t,{code:o.invalid_type,expected:"integer",received:"float",message:a.message}),s.dirty()):a.kind==="min"?(a.inclusive?e.data<a.value:e.data<=a.value)&&(t=this._getOrReturnCtx(e,t),c(t,{code:o.too_small,minimum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),s.dirty()):a.kind==="max"?(a.inclusive?e.data>a.value:e.data>=a.value)&&(t=this._getOrReturnCtx(e,t),c(t,{code:o.too_big,maximum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),s.dirty()):a.kind==="multipleOf"?Xe(e.data,a.value)!==0&&(t=this._getOrReturnCtx(e,t),c(t,{code:o.not_multiple_of,multipleOf:a.value,message:a.message}),s.dirty()):a.kind==="finite"?Number.isFinite(e.data)||(t=this._getOrReturnCtx(e,t),c(t,{code:o.not_finite,message:a.message}),s.dirty()):k.assertNever(a);return{status:s.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,l.toString(t))}gt(e,t){return this.setLimit("min",e,!1,l.toString(t))}lte(e,t){return this.setLimit("max",e,!0,l.toString(t))}lt(e,t){return this.setLimit("max",e,!1,l.toString(t))}setLimit(e,t,s,a){return new E({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:s,message:l.toString(a)}]})}_addCheck(e){return new E({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:l.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:l.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:l.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:l.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:l.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:l.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:l.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:l.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:l.toString(e)})}get minValue(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&k.isInteger(e.value))}get isFinite(){let e=null,t=null;for(const s of this._def.checks){if(s.kind==="finite"||s.kind==="int"||s.kind==="multipleOf")return!0;s.kind==="min"?(t===null||s.value>t)&&(t=s.value):s.kind==="max"&&(e===null||s.value<e)&&(e=s.value)}return Number.isFinite(t)&&Number.isFinite(e)}}E.create=r=>new E({checks:[],typeName:p.ZodNumber,coerce:r?.coerce||!1,..._(r)});class F extends y{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)!==h.bigint)return this._getInvalidInput(e);let t;const s=new w;for(const a of this._def.checks)a.kind==="min"?(a.inclusive?e.data<a.value:e.data<=a.value)&&(t=this._getOrReturnCtx(e,t),c(t,{code:o.too_small,type:"bigint",minimum:a.value,inclusive:a.inclusive,message:a.message}),s.dirty()):a.kind==="max"?(a.inclusive?e.data>a.value:e.data>=a.value)&&(t=this._getOrReturnCtx(e,t),c(t,{code:o.too_big,type:"bigint",maximum:a.value,inclusive:a.inclusive,message:a.message}),s.dirty()):a.kind==="multipleOf"?e.data%a.value!==BigInt(0)&&(t=this._getOrReturnCtx(e,t),c(t,{code:o.not_multiple_of,multipleOf:a.value,message:a.message}),s.dirty()):k.assertNever(a);return{status:s.value,value:e.data}}_getInvalidInput(e){const t=this._getOrReturnCtx(e);return c(t,{code:o.invalid_type,expected:h.bigint,received:t.parsedType}),f}gte(e,t){return this.setLimit("min",e,!0,l.toString(t))}gt(e,t){return this.setLimit("min",e,!1,l.toString(t))}lte(e,t){return this.setLimit("max",e,!0,l.toString(t))}lt(e,t){return this.setLimit("max",e,!1,l.toString(t))}setLimit(e,t,s,a){return new F({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:s,message:l.toString(a)}]})}_addCheck(e){return new F({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:l.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:l.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:l.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:l.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:l.toString(t)})}get minValue(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}}F.create=r=>new F({checks:[],typeName:p.ZodBigInt,coerce:r?.coerce??!1,..._(r)});class Y extends y{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==h.boolean){const t=this._getOrReturnCtx(e);return c(t,{code:o.invalid_type,expected:h.boolean,received:t.parsedType}),f}return x(e.data)}}Y.create=r=>new Y({typeName:p.ZodBoolean,coerce:r?.coerce||!1,..._(r)});class $ extends y{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==h.date){const a=this._getOrReturnCtx(e);return c(a,{code:o.invalid_type,expected:h.date,received:a.parsedType}),f}if(Number.isNaN(e.data.getTime())){const a=this._getOrReturnCtx(e);return c(a,{code:o.invalid_date}),f}const t=new w;let s;for(const a of this._def.checks)a.kind==="min"?e.data.getTime()<a.value&&(s=this._getOrReturnCtx(e,s),c(s,{code:o.too_small,message:a.message,inclusive:!0,exact:!1,minimum:a.value,type:"date"}),t.dirty()):a.kind==="max"?e.data.getTime()>a.value&&(s=this._getOrReturnCtx(e,s),c(s,{code:o.too_big,message:a.message,inclusive:!0,exact:!1,maximum:a.value,type:"date"}),t.dirty()):k.assertNever(a);return{status:t.value,value:new Date(e.data.getTime())}}_addCheck(e){return new $({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:l.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:l.toString(t)})}get minDate(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e!=null?new Date(e):null}}$.create=r=>new $({checks:[],coerce:r?.coerce||!1,typeName:p.ZodDate,..._(r)});class de extends y{_parse(e){if(this._getType(e)!==h.symbol){const t=this._getOrReturnCtx(e);return c(t,{code:o.invalid_type,expected:h.symbol,received:t.parsedType}),f}return x(e.data)}}de.create=r=>new de({typeName:p.ZodSymbol,..._(r)});class q extends y{_parse(e){if(this._getType(e)!==h.undefined){const t=this._getOrReturnCtx(e);return c(t,{code:o.invalid_type,expected:h.undefined,received:t.parsedType}),f}return x(e.data)}}q.create=r=>new q({typeName:p.ZodUndefined,..._(r)});class H extends y{_parse(e){if(this._getType(e)!==h.null){const t=this._getOrReturnCtx(e);return c(t,{code:o.invalid_type,expected:h.null,received:t.parsedType}),f}return x(e.data)}}H.create=r=>new H({typeName:p.ZodNull,..._(r)});class U extends y{constructor(){super(...arguments),this._any=!0}_parse(e){return x(e.data)}}U.create=r=>new U({typeName:p.ZodAny,..._(r)});class M extends y{constructor(){super(...arguments),this._unknown=!0}_parse(e){return x(e.data)}}M.create=r=>new M({typeName:p.ZodUnknown,..._(r)});class N extends y{_parse(e){const t=this._getOrReturnCtx(e);return c(t,{code:o.invalid_type,expected:h.never,received:t.parsedType}),f}}N.create=r=>new N({typeName:p.ZodNever,..._(r)});class oe extends y{_parse(e){if(this._getType(e)!==h.undefined){const t=this._getOrReturnCtx(e);return c(t,{code:o.invalid_type,expected:h.void,received:t.parsedType}),f}return x(e.data)}}oe.create=r=>new oe({typeName:p.ZodVoid,..._(r)});class Z extends y{_parse(e){const{ctx:t,status:s}=this._processInputParams(e),a=this._def;if(t.parsedType!==h.array)return c(t,{code:o.invalid_type,expected:h.array,received:t.parsedType}),f;if(a.exactLength!==null){const i=t.data.length>a.exactLength.value,n=t.data.length<a.exactLength.value;(i||n)&&(c(t,{code:i?o.too_big:o.too_small,minimum:n?a.exactLength.value:void 0,maximum:i?a.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:a.exactLength.message}),s.dirty())}if(a.minLength!==null&&t.data.length<a.minLength.value&&(c(t,{code:o.too_small,minimum:a.minLength.value,type:"array",inclusive:!0,exact:!1,message:a.minLength.message}),s.dirty()),a.maxLength!==null&&t.data.length>a.maxLength.value&&(c(t,{code:o.too_big,maximum:a.maxLength.value,type:"array",inclusive:!0,exact:!1,message:a.maxLength.message}),s.dirty()),t.common.async)return Promise.all([...t.data].map((i,n)=>a.type._parseAsync(new C(t,i,t.path,n)))).then(i=>w.mergeArray(s,i));const d=[...t.data].map((i,n)=>a.type._parseSync(new C(t,i,t.path,n)));return w.mergeArray(s,d)}get element(){return this._def.type}min(e,t){return new Z({...this._def,minLength:{value:e,message:l.toString(t)}})}max(e,t){return new Z({...this._def,maxLength:{value:e,message:l.toString(t)}})}length(e,t){return new Z({...this._def,exactLength:{value:e,message:l.toString(t)}})}nonempty(e){return this.min(1,e)}}Z.create=(r,e)=>new Z({type:r,minLength:null,maxLength:null,exactLength:null,typeName:p.ZodArray,..._(e)});function V(r){if(r instanceof v){const e={};for(const t in r.shape){const s=r.shape[t];e[t]=O.create(V(s))}return new v({...r._def,shape:()=>e})}else return r instanceof Z?new Z({...r._def,type:V(r.element)}):r instanceof O?O.create(V(r.unwrap())):r instanceof I?I.create(V(r.unwrap())):r instanceof A?A.create(r.items.map(e=>V(e))):r}class v extends y{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const e=this._def.shape(),t=k.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==h.object){const u=this._getOrReturnCtx(e);return c(u,{code:o.invalid_type,expected:h.object,received:u.parsedType}),f}const{status:t,ctx:s}=this._processInputParams(e),{shape:a,keys:d}=this._getCached(),i=[];if(!(this._def.catchall instanceof N&&this._def.unknownKeys==="strip"))for(const u in s.data)d.includes(u)||i.push(u);const n=[];for(const u of d){const m=a[u],g=s.data[u];n.push({key:{status:"valid",value:u},value:m._parse(new C(s,g,s.path,u)),alwaysSet:u in s.data})}if(this._def.catchall instanceof N){const u=this._def.unknownKeys;if(u==="passthrough")for(const m of i)n.push({key:{status:"valid",value:m},value:{status:"valid",value:s.data[m]}});else if(u==="strict")i.length>0&&(c(s,{code:o.unrecognized_keys,keys:i}),t.dirty());else if(u!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const u=this._def.catchall;for(const m of i){const g=s.data[m];n.push({key:{status:"valid",value:m},value:u._parse(new C(s,g,s.path,m)),alwaysSet:m in s.data})}}return s.common.async?Promise.resolve().then(async()=>{const u=[];for(const m of n){const g=await m.key,S=await m.value;u.push({key:g,value:S,alwaysSet:m.alwaysSet})}return u}).then(u=>w.mergeObjectSync(t,u)):w.mergeObjectSync(t,n)}get shape(){return this._def.shape()}strict(e){return l.errToObj,new v({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,s)=>{const a=this._def.errorMap?.(t,s).message??s.defaultError;return t.code==="unrecognized_keys"?{message:l.errToObj(e).message??a}:{message:a}}}:{}})}strip(){return new v({...this._def,unknownKeys:"strip"})}passthrough(){return new v({...this._def,unknownKeys:"passthrough"})}extend(e){return new v({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new v({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:p.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new v({...this._def,catchall:e})}pick(e){const t={};for(const s of k.objectKeys(e))e[s]&&this.shape[s]&&(t[s]=this.shape[s]);return new v({...this._def,shape:()=>t})}omit(e){const t={};for(const s of k.objectKeys(this.shape))e[s]||(t[s]=this.shape[s]);return new v({...this._def,shape:()=>t})}deepPartial(){return V(this)}partial(e){const t={};for(const s of k.objectKeys(this.shape)){const a=this.shape[s];e&&!e[s]?t[s]=a:t[s]=a.optional()}return new v({...this._def,shape:()=>t})}required(e){const t={};for(const s of k.objectKeys(this.shape))if(e&&!e[s])t[s]=this.shape[s];else{let a=this.shape[s];for(;a instanceof O;)a=a._def.innerType;t[s]=a}return new v({...this._def,shape:()=>t})}keyof(){return Te(k.objectKeys(this.shape))}}v.create=(r,e)=>new v({shape:()=>r,unknownKeys:"strip",catchall:N.create(),typeName:p.ZodObject,..._(e)}),v.strictCreate=(r,e)=>new v({shape:()=>r,unknownKeys:"strict",catchall:N.create(),typeName:p.ZodObject,..._(e)}),v.lazycreate=(r,e)=>new v({shape:r,unknownKeys:"strip",catchall:N.create(),typeName:p.ZodObject,..._(e)});class J extends y{_parse(e){const{ctx:t}=this._processInputParams(e),s=this._def.options;function a(d){for(const n of d)if(n.result.status==="valid")return n.result;for(const n of d)if(n.result.status==="dirty")return t.common.issues.push(...n.ctx.common.issues),n.result;const i=d.map(n=>new R(n.ctx.common.issues));return c(t,{code:o.invalid_union,unionErrors:i}),f}if(t.common.async)return Promise.all(s.map(async d=>{const i={...t,common:{...t.common,issues:[]},parent:null};return{result:await d._parseAsync({data:t.data,path:t.path,parent:i}),ctx:i}})).then(a);{let d;const i=[];for(const u of s){const m={...t,common:{...t.common,issues:[]},parent:null},g=u._parseSync({data:t.data,path:t.path,parent:m});if(g.status==="valid")return g;g.status==="dirty"&&!d&&(d={result:g,ctx:m}),m.common.issues.length&&i.push(m.common.issues)}if(d)return t.common.issues.push(...d.ctx.common.issues),d.result;const n=i.map(u=>new R(u));return c(t,{code:o.invalid_union,unionErrors:n}),f}}get options(){return this._def.options}}J.create=(r,e)=>new J({options:r,typeName:p.ZodUnion,..._(e)});const P=r=>r instanceof X?P(r.schema):r instanceof b?P(r.innerType()):r instanceof Q?[r.value]:r instanceof L?r.options:r instanceof ee?k.objectValues(r.enum):r instanceof te?P(r._def.innerType):r instanceof q?[void 0]:r instanceof H?[null]:r instanceof O?[void 0,...P(r.unwrap())]:r instanceof I?[null,...P(r.unwrap())]:r instanceof fe||r instanceof ae?P(r.unwrap()):r instanceof se?P(r._def.innerType):[];class le extends y{_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==h.object)return c(t,{code:o.invalid_type,expected:h.object,received:t.parsedType}),f;const s=this.discriminator,a=t.data[s],d=this.optionsMap.get(a);return d?t.common.async?d._parseAsync({data:t.data,path:t.path,parent:t}):d._parseSync({data:t.data,path:t.path,parent:t}):(c(t,{code:o.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[s]}),f)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,s){const a=new Map;for(const d of t){const i=P(d.shape[e]);if(!i.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(const n of i){if(a.has(n))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(n)}`);a.set(n,d)}}return new le({typeName:p.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:a,..._(s)})}}function me(r,e){const t=j(r),s=j(e);if(r===e)return{valid:!0,data:r};if(t===h.object&&s===h.object){const a=k.objectKeys(e),d=k.objectKeys(r).filter(n=>a.indexOf(n)!==-1),i={...r,...e};for(const n of d){const u=me(r[n],e[n]);if(!u.valid)return{valid:!1};i[n]=u.data}return{valid:!0,data:i}}else if(t===h.array&&s===h.array){if(r.length!==e.length)return{valid:!1};const a=[];for(let d=0;d<r.length;d++){const i=r[d],n=e[d],u=me(i,n);if(!u.valid)return{valid:!1};a.push(u.data)}return{valid:!0,data:a}}else return t===h.date&&s===h.date&&+r==+e?{valid:!0,data:r}:{valid:!1}}class G extends y{_parse(e){const{status:t,ctx:s}=this._processInputParams(e),a=(d,i)=>{if(ge(d)||ge(i))return f;const n=me(d.value,i.value);return n.valid?((ve(d)||ve(i))&&t.dirty(),{status:t.value,value:n.data}):(c(s,{code:o.invalid_intersection_types}),f)};return s.common.async?Promise.all([this._def.left._parseAsync({data:s.data,path:s.path,parent:s}),this._def.right._parseAsync({data:s.data,path:s.path,parent:s})]).then(([d,i])=>a(d,i)):a(this._def.left._parseSync({data:s.data,path:s.path,parent:s}),this._def.right._parseSync({data:s.data,path:s.path,parent:s}))}}G.create=(r,e,t)=>new G({left:r,right:e,typeName:p.ZodIntersection,..._(t)});class A extends y{_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==h.array)return c(s,{code:o.invalid_type,expected:h.array,received:s.parsedType}),f;if(s.data.length<this._def.items.length)return c(s,{code:o.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),f;!this._def.rest&&s.data.length>this._def.items.length&&(c(s,{code:o.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());const a=[...s.data].map((d,i)=>{const n=this._def.items[i]||this._def.rest;return n?n._parse(new C(s,d,s.path,i)):null}).filter(d=>!!d);return s.common.async?Promise.all(a).then(d=>w.mergeArray(t,d)):w.mergeArray(t,a)}get items(){return this._def.items}rest(e){return new A({...this._def,rest:e})}}A.create=(r,e)=>{if(!Array.isArray(r))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new A({items:r,typeName:p.ZodTuple,rest:null,..._(e)})};class ne extends y{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==h.object)return c(s,{code:o.invalid_type,expected:h.object,received:s.parsedType}),f;const a=[],d=this._def.keyType,i=this._def.valueType;for(const n in s.data)a.push({key:d._parse(new C(s,n,s.path,n)),value:i._parse(new C(s,s.data[n],s.path,n)),alwaysSet:n in s.data});return s.common.async?w.mergeObjectAsync(t,a):w.mergeObjectSync(t,a)}get element(){return this._def.valueType}static create(e,t,s){return t instanceof y?new ne({keyType:e,valueType:t,typeName:p.ZodRecord,..._(s)}):new ne({keyType:T.create(),valueType:e,typeName:p.ZodRecord,..._(t)})}}class ce extends y{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==h.map)return c(s,{code:o.invalid_type,expected:h.map,received:s.parsedType}),f;const a=this._def.keyType,d=this._def.valueType,i=[...s.data.entries()].map(([n,u],m)=>({key:a._parse(new C(s,n,s.path,[m,"key"])),value:d._parse(new C(s,u,s.path,[m,"value"]))}));if(s.common.async){const n=new Map;return Promise.resolve().then(async()=>{for(const u of i){const m=await u.key,g=await u.value;if(m.status==="aborted"||g.status==="aborted")return f;(m.status==="dirty"||g.status==="dirty")&&t.dirty(),n.set(m.value,g.value)}return{status:t.value,value:n}})}else{const n=new Map;for(const u of i){const m=u.key,g=u.value;if(m.status==="aborted"||g.status==="aborted")return f;(m.status==="dirty"||g.status==="dirty")&&t.dirty(),n.set(m.value,g.value)}return{status:t.value,value:n}}}}ce.create=(r,e,t)=>new ce({valueType:e,keyType:r,typeName:p.ZodMap,..._(t)});class z extends y{_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==h.set)return c(s,{code:o.invalid_type,expected:h.set,received:s.parsedType}),f;const a=this._def;a.minSize!==null&&s.data.size<a.minSize.value&&(c(s,{code:o.too_small,minimum:a.minSize.value,type:"set",inclusive:!0,exact:!1,message:a.minSize.message}),t.dirty()),a.maxSize!==null&&s.data.size>a.maxSize.value&&(c(s,{code:o.too_big,maximum:a.maxSize.value,type:"set",inclusive:!0,exact:!1,message:a.maxSize.message}),t.dirty());const d=this._def.valueType;function i(u){const m=new Set;for(const g of u){if(g.status==="aborted")return f;g.status==="dirty"&&t.dirty(),m.add(g.value)}return{status:t.value,value:m}}const n=[...s.data.values()].map((u,m)=>d._parse(new C(s,u,s.path,m)));return s.common.async?Promise.all(n).then(u=>i(u)):i(n)}min(e,t){return new z({...this._def,minSize:{value:e,message:l.toString(t)}})}max(e,t){return new z({...this._def,maxSize:{value:e,message:l.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}z.create=(r,e)=>new z({valueType:r,minSize:null,maxSize:null,typeName:p.ZodSet,..._(e)});class B extends y{constructor(){super(...arguments),this.validate=this.implement}_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==h.function)return c(t,{code:o.invalid_type,expected:h.function,received:t.parsedType}),f;function s(n,u){return ke({data:n,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,ye(),_e].filter(m=>!!m),issueData:{code:o.invalid_arguments,argumentsError:u}})}function a(n,u){return ke({data:n,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,ye(),_e].filter(m=>!!m),issueData:{code:o.invalid_return_type,returnTypeError:u}})}const d={errorMap:t.common.contextualErrorMap},i=t.data;if(this._def.returns instanceof K){const n=this;return x(async function(...u){const m=new R([]),g=await n._def.args.parseAsync(u,d).catch(he=>{throw m.addIssue(s(u,he)),m}),S=await Reflect.apply(i,this,g);return await n._def.returns._def.type.parseAsync(S,d).catch(he=>{throw m.addIssue(a(S,he)),m})})}else{const n=this;return x(function(...u){const m=n._def.args.safeParse(u,d);if(!m.success)throw new R([s(u,m.error)]);const g=Reflect.apply(i,this,m.data),S=n._def.returns.safeParse(g,d);if(!S.success)throw new R([a(g,S.error)]);return S.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new B({...this._def,args:A.create(e).rest(M.create())})}returns(e){return new B({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,s){return new B({args:e||A.create([]).rest(M.create()),returns:t||M.create(),typeName:p.ZodFunction,..._(s)})}}class X extends y{get schema(){return this._def.getter()}_parse(e){const{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}}X.create=(r,e)=>new X({getter:r,typeName:p.ZodLazy,..._(e)});class Q extends y{_parse(e){if(e.data!==this._def.value){const t=this._getOrReturnCtx(e);return c(t,{received:t.data,code:o.invalid_literal,expected:this._def.value}),f}return{status:"valid",value:e.data}}get value(){return this._def.value}}Q.create=(r,e)=>new Q({value:r,typeName:p.ZodLiteral,..._(e)});function Te(r,e){return new L({values:r,typeName:p.ZodEnum,..._(e)})}class L extends y{_parse(e){if(typeof e.data!="string"){const t=this._getOrReturnCtx(e),s=this._def.values;return c(t,{expected:k.joinValues(s),received:t.parsedType,code:o.invalid_type}),f}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){const t=this._getOrReturnCtx(e),s=this._def.values;return c(t,{received:t.data,code:o.invalid_enum_value,options:s}),f}return x(e.data)}get options(){return this._def.values}get enum(){const e={};for(const t of this._def.values)e[t]=t;return e}get Values(){const e={};for(const t of this._def.values)e[t]=t;return e}get Enum(){const e={};for(const t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return L.create(e,{...this._def,...t})}exclude(e,t=this._def){return L.create(this.options.filter(s=>!e.includes(s)),{...this._def,...t})}}L.create=Te;class ee extends y{_parse(e){const t=k.getValidEnumValues(this._def.values),s=this._getOrReturnCtx(e);if(s.parsedType!==h.string&&s.parsedType!==h.number){const a=k.objectValues(t);return c(s,{expected:k.joinValues(a),received:s.parsedType,code:o.invalid_type}),f}if(this._cache||(this._cache=new Set(k.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){const a=k.objectValues(t);return c(s,{received:s.data,code:o.invalid_enum_value,options:a}),f}return x(e.data)}get enum(){return this._def.values}}ee.create=(r,e)=>new ee({values:r,typeName:p.ZodNativeEnum,..._(e)});class K extends y{unwrap(){return this._def.type}_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==h.promise&&t.common.async===!1)return c(t,{code:o.invalid_type,expected:h.promise,received:t.parsedType}),f;const s=t.parsedType===h.promise?t.data:Promise.resolve(t.data);return x(s.then(a=>this._def.type.parseAsync(a,{path:t.path,errorMap:t.common.contextualErrorMap})))}}K.create=(r,e)=>new K({type:r,typeName:p.ZodPromise,..._(e)});class b extends y{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===p.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){const{status:t,ctx:s}=this._processInputParams(e),a=this._def.effect||null,d={addIssue:i=>{c(s,i),i.fatal?t.abort():t.dirty()},get path(){return s.path}};if(d.addIssue=d.addIssue.bind(d),a.type==="preprocess"){const i=a.transform(s.data,d);if(s.common.async)return Promise.resolve(i).then(async n=>{if(t.value==="aborted")return f;const u=await this._def.schema._parseAsync({data:n,path:s.path,parent:s});return u.status==="aborted"?f:u.status==="dirty"?W(u.value):t.value==="dirty"?W(u.value):u});{if(t.value==="aborted")return f;const n=this._def.schema._parseSync({data:i,path:s.path,parent:s});return n.status==="aborted"?f:n.status==="dirty"?W(n.value):t.value==="dirty"?W(n.value):n}}if(a.type==="refinement"){const i=n=>{const u=a.refinement(n,d);if(s.common.async)return Promise.resolve(u);if(u instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return n};if(s.common.async===!1){const n=this._def.schema._parseSync({data:s.data,path:s.path,parent:s});return n.status==="aborted"?f:(n.status==="dirty"&&t.dirty(),i(n.value),{status:t.value,value:n.value})}else return this._def.schema._parseAsync({data:s.data,path:s.path,parent:s}).then(n=>n.status==="aborted"?f:(n.status==="dirty"&&t.dirty(),i(n.value).then(()=>({status:t.value,value:n.value}))))}if(a.type==="transform")if(s.common.async===!1){const i=this._def.schema._parseSync({data:s.data,path:s.path,parent:s});if(!D(i))return f;const n=a.transform(i.value,d);if(n instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:n}}else return this._def.schema._parseAsync({data:s.data,path:s.path,parent:s}).then(i=>D(i)?Promise.resolve(a.transform(i.value,d)).then(n=>({status:t.value,value:n})):f);k.assertNever(a)}}b.create=(r,e,t)=>new b({schema:r,typeName:p.ZodEffects,effect:e,..._(t)}),b.createWithPreprocess=(r,e,t)=>new b({schema:e,effect:{type:"preprocess",transform:r},typeName:p.ZodEffects,..._(t)});class O extends y{_parse(e){return this._getType(e)===h.undefined?x(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}O.create=(r,e)=>new O({innerType:r,typeName:p.ZodOptional,..._(e)});class I extends y{_parse(e){return this._getType(e)===h.null?x(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}I.create=(r,e)=>new I({innerType:r,typeName:p.ZodNullable,..._(e)});class te extends y{_parse(e){const{ctx:t}=this._processInputParams(e);let s=t.data;return t.parsedType===h.undefined&&(s=this._def.defaultValue()),this._def.innerType._parse({data:s,path:t.path,parent:t})}removeDefault(){return this._def.innerType}}te.create=(r,e)=>new te({innerType:r,typeName:p.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,..._(e)});class se extends y{_parse(e){const{ctx:t}=this._processInputParams(e),s={...t,common:{...t.common,issues:[]}},a=this._def.innerType._parse({data:s.data,path:s.path,parent:{...s}});return ie(a)?a.then(d=>({status:"valid",value:d.status==="valid"?d.value:this._def.catchValue({get error(){return new R(s.common.issues)},input:s.data})})):{status:"valid",value:a.status==="valid"?a.value:this._def.catchValue({get error(){return new R(s.common.issues)},input:s.data})}}removeCatch(){return this._def.innerType}}se.create=(r,e)=>new se({innerType:r,typeName:p.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,..._(e)});class ue extends y{_parse(e){if(this._getType(e)!==h.nan){const t=this._getOrReturnCtx(e);return c(t,{code:o.invalid_type,expected:h.nan,received:t.parsedType}),f}return{status:"valid",value:e.data}}}ue.create=r=>new ue({typeName:p.ZodNaN,..._(r)});const Qe=Symbol("zod_brand");class fe extends y{_parse(e){const{ctx:t}=this._processInputParams(e),s=t.data;return this._def.type._parse({data:s,path:t.path,parent:t})}unwrap(){return this._def.type}}class re extends y{_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.common.async)return(async()=>{const a=await this._def.in._parseAsync({data:s.data,path:s.path,parent:s});return a.status==="aborted"?f:a.status==="dirty"?(t.dirty(),W(a.value)):this._def.out._parseAsync({data:a.value,path:s.path,parent:s})})();{const a=this._def.in._parseSync({data:s.data,path:s.path,parent:s});return a.status==="aborted"?f:a.status==="dirty"?(t.dirty(),{status:"dirty",value:a.value}):this._def.out._parseSync({data:a.value,path:s.path,parent:s})}}static create(e,t){return new re({in:e,out:t,typeName:p.ZodPipeline})}}class ae extends y{_parse(e){const t=this._def.innerType._parse(e),s=a=>(D(a)&&(a.value=Object.freeze(a.value)),a);return ie(t)?t.then(a=>s(a)):s(t)}unwrap(){return this._def.innerType}}ae.create=(r,e)=>new ae({innerType:r,typeName:p.ZodReadonly,..._(e)});function Ce(r,e){const t=typeof r=="function"?r(e):typeof r=="string"?{message:r}:r;return typeof t=="string"?{message:t}:t}function Oe(r,e={},t){return r?U.create().superRefine((s,a)=>{const d=r(s);if(d instanceof Promise)return d.then(i=>{if(!i){const n=Ce(e,s),u=n.fatal??t??!0;a.addIssue({code:"custom",...n,fatal:u})}});if(!d){const i=Ce(e,s),n=i.fatal??t??!0;a.addIssue({code:"custom",...i,fatal:n})}}):U.create()}const et={object:v.lazycreate};var p;(function(r){r.ZodString="ZodString",r.ZodNumber="ZodNumber",r.ZodNaN="ZodNaN",r.ZodBigInt="ZodBigInt",r.ZodBoolean="ZodBoolean",r.ZodDate="ZodDate",r.ZodSymbol="ZodSymbol",r.ZodUndefined="ZodUndefined",r.ZodNull="ZodNull",r.ZodAny="ZodAny",r.ZodUnknown="ZodUnknown",r.ZodNever="ZodNever",r.ZodVoid="ZodVoid",r.ZodArray="ZodArray",r.ZodObject="ZodObject",r.ZodUnion="ZodUnion",r.ZodDiscriminatedUnion="ZodDiscriminatedUnion",r.ZodIntersection="ZodIntersection",r.ZodTuple="ZodTuple",r.ZodRecord="ZodRecord",r.ZodMap="ZodMap",r.ZodSet="ZodSet",r.ZodFunction="ZodFunction",r.ZodLazy="ZodLazy",r.ZodLiteral="ZodLiteral",r.ZodEnum="ZodEnum",r.ZodEffects="ZodEffects",r.ZodNativeEnum="ZodNativeEnum",r.ZodOptional="ZodOptional",r.ZodNullable="ZodNullable",r.ZodDefault="ZodDefault",r.ZodCatch="ZodCatch",r.ZodPromise="ZodPromise",r.ZodBranded="ZodBranded",r.ZodPipeline="ZodPipeline",r.ZodReadonly="ZodReadonly"})(p||(p={}));class Ut{constructor(...e){}}const tt=(r,e={message:`Input not instance of ${r.name}`})=>Oe(t=>t instanceof r,e),Ae=T.create,Ne=E.create,st=ue.create,at=F.create,Se=Y.create,rt=$.create,nt=de.create,it=q.create,dt=H.create,ot=U.create,ct=M.create,ut=N.create,lt=oe.create,ht=Z.create,pt=v.create,mt=v.strictCreate,ft=J.create,_t=le.create,yt=G.create,gt=A.create,vt=ne.create,kt=ce.create,xt=z.create,wt=B.create,bt=X.create,Zt=Q.create,Tt=L.create,Ct=ee.create,Ot=K.create,Re=b.create,At=O.create,Nt=I.create,St=b.createWithPreprocess,Rt=re.create,jt=()=>Ae().optional(),Pt=()=>Ne().optional(),It=()=>Se().optional(),Et={string:r=>T.create({...r,coerce:!0}),number:r=>E.create({...r,coerce:!0}),boolean:r=>Y.create({...r,coerce:!0}),bigint:r=>F.create({...r,coerce:!0}),date:r=>$.create({...r,coerce:!0})},Ft=f;export{Qe as BRAND,Ft as NEVER,y as Schema,U as ZodAny,Z as ZodArray,F as ZodBigInt,Y as ZodBoolean,fe as ZodBranded,se as ZodCatch,$ as ZodDate,te as ZodDefault,le as ZodDiscriminatedUnion,b as ZodEffects,L as ZodEnum,p as ZodFirstPartyTypeKind,B as ZodFunction,G as ZodIntersection,X as ZodLazy,Q as ZodLiteral,ce as ZodMap,ue as ZodNaN,ee as ZodNativeEnum,N as ZodNever,H as ZodNull,I as ZodNullable,E as ZodNumber,v as ZodObject,O as ZodOptional,re as ZodPipeline,K as ZodPromise,ae as ZodReadonly,ne as ZodRecord,y as ZodSchema,z as ZodSet,T as ZodString,de as ZodSymbol,b as ZodTransformer,A as ZodTuple,y as ZodType,q as ZodUndefined,J as ZodUnion,M as ZodUnknown,oe as ZodVoid,ot as any,ht as array,at as bigint,Se as boolean,Et as coerce,Oe as custom,rt as date,Ze as datetimeRegex,_t as discriminatedUnion,Re as effect,Tt as enum,wt as function,tt as instanceof,yt as intersection,et as late,bt as lazy,Zt as literal,kt as map,st as nan,Ct as nativeEnum,ut as never,dt as null,Nt as nullable,Ne as number,pt as object,It as oboolean,Pt as onumber,At as optional,jt as ostring,Rt as pipeline,St as preprocess,Ot as promise,vt as record,xt as set,mt as strictObject,Ae as string,nt as symbol,Re as transformer,gt as tuple,it as undefined,ft as union,ct as unknown,lt as void};
1
+ import{ZodError as R,ZodIssueCode as o}from"./ZodError.js";import{defaultErrorMap as _e,getErrorMap as ye}from"./errors.js";import{errorUtil as l}from"./helpers/errorUtil.js";import{DIRTY as W,INVALID as f,OK as x,ParseStatus as w,addIssueToContext as c,isAborted as ge,isAsync as ie,isDirty as ve,isValid as D,makeIssue as ke}from"./helpers/parseUtil.js";import{util as k,ZodParsedType as h,getParsedType as j}from"./helpers/util.js";class C{constructor(e,t,s,a){this._cachedPath=[],this.parent=e,this.data=t,this._path=s,this._key=a}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}}const xe=(n,e)=>{if(D(e))return{success:!0,data:e.value};if(!n.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const t=new R(n.common.issues);return this._error=t,this._error}}};function _(n){if(!n)return{};const{errorMap:e,invalid_type_error:t,required_error:s,description:a}=n;if(e&&(t||s))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:a}:{errorMap:(d,i)=>{const{message:r}=n;return d.code==="invalid_enum_value"?{message:r??i.defaultError}:typeof i.data>"u"?{message:r??s??i.defaultError}:d.code!=="invalid_type"?{message:i.defaultError}:{message:r??t??i.defaultError}},description:a}}class y{get description(){return this._def.description}_getType(e){return j(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:j(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new w,ctx:{common:e.parent.common,data:e.data,parsedType:j(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const t=this._parse(e);if(ie(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){const t=this._parse(e);return Promise.resolve(t)}parse(e,t){const s=this.safeParse(e,t);if(s.success)return s.data;throw s.error}safeParse(e,t){const s={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:j(e)},a=this._parseSync({data:e,path:s.path,parent:s});return xe(s,a)}"~validate"(e){const t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:j(e)};if(!this["~standard"].async)try{const s=this._parseSync({data:e,path:[],parent:t});return D(s)?{value:s.value}:{issues:t.common.issues}}catch(s){s?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(s=>D(s)?{value:s.value}:{issues:t.common.issues})}async parseAsync(e,t){const s=await this.safeParseAsync(e,t);if(s.success)return s.data;throw s.error}async safeParseAsync(e,t){const s={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:j(e)},a=this._parse({data:e,path:s.path,parent:s}),d=await(ie(a)?a:Promise.resolve(a));return xe(s,d)}refine(e,t){const s=a=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(a):t;return this._refinement((a,d)=>{const i=e(a),r=()=>d.addIssue({code:o.custom,...s(a)});return typeof Promise<"u"&&i instanceof Promise?i.then(u=>u?!0:(r(),!1)):i?!0:(r(),!1)})}refinement(e,t){return this._refinement((s,a)=>e(s)?!0:(a.addIssue(typeof t=="function"?t(s,a):t),!1))}_refinement(e){return new b({schema:this,typeName:p.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:t=>this["~validate"](t)}}optional(){return O.create(this,this._def)}nullable(){return I.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Z.create(this)}promise(){return K.create(this,this._def)}or(e){return J.create([this,e],this._def)}and(e){return G.create(this,e,this._def)}transform(e){return new b({..._(this._def),schema:this,typeName:p.ZodEffects,effect:{type:"transform",transform:e}})}default(e){const t=typeof e=="function"?e:()=>e;return new te({..._(this._def),innerType:this,defaultValue:t,typeName:p.ZodDefault})}brand(){return new fe({typeName:p.ZodBranded,type:this,..._(this._def)})}catch(e){const t=typeof e=="function"?e:()=>e;return new se({..._(this._def),innerType:this,catchValue:t,typeName:p.ZodCatch})}describe(e){const t=this.constructor;return new t({...this._def,description:e})}pipe(e){return ne.create(this,e)}readonly(){return ae.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const je=/^c[^\s-]{8,}$/i,Pe=/^[0-9a-z]+$/,Ie=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Ee=/^[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,Fe=/^[a-z0-9_-]{21}$/i,Me=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Le=/^[-+]?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)?)??$/,$e=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,ze="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let pe;const De=/^(?:(?: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])$/,Ue=/^(?:(?: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])$/,Ve=/^(([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]))$/,Ke=/^(([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])$/,Be=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,We=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,we="((\\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])))",Ye=new RegExp(`^${we}$`);function be(n){let e="[0-5]\\d";n.precision?e=`${e}\\.\\d{${n.precision}}`:n.precision==null&&(e=`${e}(\\.\\d+)?`);const t=n.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${t}`}function qe(n){return new RegExp(`^${be(n)}$`)}function Ze(n){let e=`${we}T${be(n)}`;const t=[];return t.push(n.local?"Z?":"Z"),n.offset&&t.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${t.join("|")})`,new RegExp(`^${e}$`)}function He(n,e){return!!((e==="v4"||!e)&&De.test(n)||(e==="v6"||!e)&&Ve.test(n))}function Je(n,e){if(!Me.test(n))return!1;try{const[t]=n.split(".");if(!t)return!1;const s=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),a=JSON.parse(atob(s));return!(typeof a!="object"||a===null||"typ"in a&&a?.typ!=="JWT"||!a.alg||e&&a.alg!==e)}catch{return!1}}function Ge(n,e){return!!((e==="v4"||!e)&&Ue.test(n)||(e==="v6"||!e)&&Ke.test(n))}class T extends y{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==h.string){const a=this._getOrReturnCtx(e);return c(a,{code:o.invalid_type,expected:h.string,received:a.parsedType}),f}const t=new w;let s;for(const a of this._def.checks)if(a.kind==="min")e.data.length<a.value&&(s=this._getOrReturnCtx(e,s),c(s,{code:o.too_small,minimum:a.value,type:"string",inclusive:!0,exact:!1,message:a.message}),t.dirty());else if(a.kind==="max")e.data.length>a.value&&(s=this._getOrReturnCtx(e,s),c(s,{code:o.too_big,maximum:a.value,type:"string",inclusive:!0,exact:!1,message:a.message}),t.dirty());else if(a.kind==="length"){const d=e.data.length>a.value,i=e.data.length<a.value;(d||i)&&(s=this._getOrReturnCtx(e,s),d?c(s,{code:o.too_big,maximum:a.value,type:"string",inclusive:!0,exact:!0,message:a.message}):i&&c(s,{code:o.too_small,minimum:a.value,type:"string",inclusive:!0,exact:!0,message:a.message}),t.dirty())}else if(a.kind==="email")$e.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"email",code:o.invalid_string,message:a.message}),t.dirty());else if(a.kind==="emoji")pe||(pe=new RegExp(ze,"u")),pe.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"emoji",code:o.invalid_string,message:a.message}),t.dirty());else if(a.kind==="uuid")Ee.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"uuid",code:o.invalid_string,message:a.message}),t.dirty());else if(a.kind==="nanoid")Fe.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"nanoid",code:o.invalid_string,message:a.message}),t.dirty());else if(a.kind==="cuid")je.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"cuid",code:o.invalid_string,message:a.message}),t.dirty());else if(a.kind==="cuid2")Pe.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"cuid2",code:o.invalid_string,message:a.message}),t.dirty());else if(a.kind==="ulid")Ie.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"ulid",code:o.invalid_string,message:a.message}),t.dirty());else if(a.kind==="url")try{new URL(e.data)}catch{s=this._getOrReturnCtx(e,s),c(s,{validation:"url",code:o.invalid_string,message:a.message}),t.dirty()}else a.kind==="regex"?(a.regex.lastIndex=0,a.regex.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"regex",code:o.invalid_string,message:a.message}),t.dirty())):a.kind==="trim"?e.data=e.data.trim():a.kind==="includes"?e.data.includes(a.value,a.position)||(s=this._getOrReturnCtx(e,s),c(s,{code:o.invalid_string,validation:{includes:a.value,position:a.position},message:a.message}),t.dirty()):a.kind==="toLowerCase"?e.data=e.data.toLowerCase():a.kind==="toUpperCase"?e.data=e.data.toUpperCase():a.kind==="startsWith"?e.data.startsWith(a.value)||(s=this._getOrReturnCtx(e,s),c(s,{code:o.invalid_string,validation:{startsWith:a.value},message:a.message}),t.dirty()):a.kind==="endsWith"?e.data.endsWith(a.value)||(s=this._getOrReturnCtx(e,s),c(s,{code:o.invalid_string,validation:{endsWith:a.value},message:a.message}),t.dirty()):a.kind==="datetime"?Ze(a).test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{code:o.invalid_string,validation:"datetime",message:a.message}),t.dirty()):a.kind==="date"?Ye.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{code:o.invalid_string,validation:"date",message:a.message}),t.dirty()):a.kind==="time"?qe(a).test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{code:o.invalid_string,validation:"time",message:a.message}),t.dirty()):a.kind==="duration"?Le.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"duration",code:o.invalid_string,message:a.message}),t.dirty()):a.kind==="ip"?He(e.data,a.version)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"ip",code:o.invalid_string,message:a.message}),t.dirty()):a.kind==="jwt"?Je(e.data,a.alg)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"jwt",code:o.invalid_string,message:a.message}),t.dirty()):a.kind==="cidr"?Ge(e.data,a.version)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"cidr",code:o.invalid_string,message:a.message}),t.dirty()):a.kind==="base64"?Be.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"base64",code:o.invalid_string,message:a.message}),t.dirty()):a.kind==="base64url"?We.test(e.data)||(s=this._getOrReturnCtx(e,s),c(s,{validation:"base64url",code:o.invalid_string,message:a.message}),t.dirty()):k.assertNever(a);return{status:t.value,value:e.data}}_regex(e,t,s){return this.refinement(a=>e.test(a),{validation:t,code:o.invalid_string,...l.errToObj(s)})}_addCheck(e){return new T({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...l.errToObj(e)})}url(e){return this._addCheck({kind:"url",...l.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...l.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...l.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...l.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...l.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...l.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...l.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...l.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...l.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...l.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...l.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...l.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...l.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,...l.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...l.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...l.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t?.position,...l.errToObj(t?.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...l.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...l.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...l.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...l.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...l.errToObj(t)})}nonempty(e){return this.min(1,l.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(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}}T.create=n=>new T({checks:[],typeName:p.ZodString,coerce:n?.coerce??!1,..._(n)});function Xe(n,e){const t=(n.toString().split(".")[1]||"").length,s=(e.toString().split(".")[1]||"").length,a=t>s?t:s,d=Number.parseInt(n.toFixed(a).replace(".","")),i=Number.parseInt(e.toFixed(a).replace(".",""));return d%i/10**a}class E extends y{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)!==h.number){const a=this._getOrReturnCtx(e);return c(a,{code:o.invalid_type,expected:h.number,received:a.parsedType}),f}let t;const s=new w;for(const a of this._def.checks)a.kind==="int"?k.isInteger(e.data)||(t=this._getOrReturnCtx(e,t),c(t,{code:o.invalid_type,expected:"integer",received:"float",message:a.message}),s.dirty()):a.kind==="min"?(a.inclusive?e.data<a.value:e.data<=a.value)&&(t=this._getOrReturnCtx(e,t),c(t,{code:o.too_small,minimum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),s.dirty()):a.kind==="max"?(a.inclusive?e.data>a.value:e.data>=a.value)&&(t=this._getOrReturnCtx(e,t),c(t,{code:o.too_big,maximum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),s.dirty()):a.kind==="multipleOf"?Xe(e.data,a.value)!==0&&(t=this._getOrReturnCtx(e,t),c(t,{code:o.not_multiple_of,multipleOf:a.value,message:a.message}),s.dirty()):a.kind==="finite"?Number.isFinite(e.data)||(t=this._getOrReturnCtx(e,t),c(t,{code:o.not_finite,message:a.message}),s.dirty()):k.assertNever(a);return{status:s.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,l.toString(t))}gt(e,t){return this.setLimit("min",e,!1,l.toString(t))}lte(e,t){return this.setLimit("max",e,!0,l.toString(t))}lt(e,t){return this.setLimit("max",e,!1,l.toString(t))}setLimit(e,t,s,a){return new E({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:s,message:l.toString(a)}]})}_addCheck(e){return new E({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:l.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:l.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:l.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:l.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:l.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:l.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:l.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:l.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:l.toString(e)})}get minValue(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&k.isInteger(e.value))}get isFinite(){let e=null,t=null;for(const s of this._def.checks){if(s.kind==="finite"||s.kind==="int"||s.kind==="multipleOf")return!0;s.kind==="min"?(t===null||s.value>t)&&(t=s.value):s.kind==="max"&&(e===null||s.value<e)&&(e=s.value)}return Number.isFinite(t)&&Number.isFinite(e)}}E.create=n=>new E({checks:[],typeName:p.ZodNumber,coerce:n?.coerce||!1,..._(n)});class F extends y{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)!==h.bigint)return this._getInvalidInput(e);let t;const s=new w;for(const a of this._def.checks)a.kind==="min"?(a.inclusive?e.data<a.value:e.data<=a.value)&&(t=this._getOrReturnCtx(e,t),c(t,{code:o.too_small,type:"bigint",minimum:a.value,inclusive:a.inclusive,message:a.message}),s.dirty()):a.kind==="max"?(a.inclusive?e.data>a.value:e.data>=a.value)&&(t=this._getOrReturnCtx(e,t),c(t,{code:o.too_big,type:"bigint",maximum:a.value,inclusive:a.inclusive,message:a.message}),s.dirty()):a.kind==="multipleOf"?e.data%a.value!==BigInt(0)&&(t=this._getOrReturnCtx(e,t),c(t,{code:o.not_multiple_of,multipleOf:a.value,message:a.message}),s.dirty()):k.assertNever(a);return{status:s.value,value:e.data}}_getInvalidInput(e){const t=this._getOrReturnCtx(e);return c(t,{code:o.invalid_type,expected:h.bigint,received:t.parsedType}),f}gte(e,t){return this.setLimit("min",e,!0,l.toString(t))}gt(e,t){return this.setLimit("min",e,!1,l.toString(t))}lte(e,t){return this.setLimit("max",e,!0,l.toString(t))}lt(e,t){return this.setLimit("max",e,!1,l.toString(t))}setLimit(e,t,s,a){return new F({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:s,message:l.toString(a)}]})}_addCheck(e){return new F({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:l.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:l.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:l.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:l.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:l.toString(t)})}get minValue(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}}F.create=n=>new F({checks:[],typeName:p.ZodBigInt,coerce:n?.coerce??!1,..._(n)});class Y extends y{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==h.boolean){const t=this._getOrReturnCtx(e);return c(t,{code:o.invalid_type,expected:h.boolean,received:t.parsedType}),f}return x(e.data)}}Y.create=n=>new Y({typeName:p.ZodBoolean,coerce:n?.coerce||!1,..._(n)});class $ extends y{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==h.date){const a=this._getOrReturnCtx(e);return c(a,{code:o.invalid_type,expected:h.date,received:a.parsedType}),f}if(Number.isNaN(e.data.getTime())){const a=this._getOrReturnCtx(e);return c(a,{code:o.invalid_date}),f}const t=new w;let s;for(const a of this._def.checks)a.kind==="min"?e.data.getTime()<a.value&&(s=this._getOrReturnCtx(e,s),c(s,{code:o.too_small,message:a.message,inclusive:!0,exact:!1,minimum:a.value,type:"date"}),t.dirty()):a.kind==="max"?e.data.getTime()>a.value&&(s=this._getOrReturnCtx(e,s),c(s,{code:o.too_big,message:a.message,inclusive:!0,exact:!1,maximum:a.value,type:"date"}),t.dirty()):k.assertNever(a);return{status:t.value,value:new Date(e.data.getTime())}}_addCheck(e){return new $({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:l.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:l.toString(t)})}get minDate(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e!=null?new Date(e):null}}$.create=n=>new $({checks:[],coerce:n?.coerce||!1,typeName:p.ZodDate,..._(n)});class de extends y{_parse(e){if(this._getType(e)!==h.symbol){const t=this._getOrReturnCtx(e);return c(t,{code:o.invalid_type,expected:h.symbol,received:t.parsedType}),f}return x(e.data)}}de.create=n=>new de({typeName:p.ZodSymbol,..._(n)});class q extends y{_parse(e){if(this._getType(e)!==h.undefined){const t=this._getOrReturnCtx(e);return c(t,{code:o.invalid_type,expected:h.undefined,received:t.parsedType}),f}return x(e.data)}}q.create=n=>new q({typeName:p.ZodUndefined,..._(n)});class H extends y{_parse(e){if(this._getType(e)!==h.null){const t=this._getOrReturnCtx(e);return c(t,{code:o.invalid_type,expected:h.null,received:t.parsedType}),f}return x(e.data)}}H.create=n=>new H({typeName:p.ZodNull,..._(n)});class U extends y{constructor(){super(...arguments),this._any=!0}_parse(e){return x(e.data)}}U.create=n=>new U({typeName:p.ZodAny,..._(n)});class L extends y{constructor(){super(...arguments),this._unknown=!0}_parse(e){return x(e.data)}}L.create=n=>new L({typeName:p.ZodUnknown,..._(n)});class N extends y{_parse(e){const t=this._getOrReturnCtx(e);return c(t,{code:o.invalid_type,expected:h.never,received:t.parsedType}),f}}N.create=n=>new N({typeName:p.ZodNever,..._(n)});class oe extends y{_parse(e){if(this._getType(e)!==h.undefined){const t=this._getOrReturnCtx(e);return c(t,{code:o.invalid_type,expected:h.void,received:t.parsedType}),f}return x(e.data)}}oe.create=n=>new oe({typeName:p.ZodVoid,..._(n)});class Z extends y{_parse(e){const{ctx:t,status:s}=this._processInputParams(e),a=this._def;if(t.parsedType!==h.array)return c(t,{code:o.invalid_type,expected:h.array,received:t.parsedType}),f;if(a.exactLength!==null){const i=t.data.length>a.exactLength.value,r=t.data.length<a.exactLength.value;(i||r)&&(c(t,{code:i?o.too_big:o.too_small,minimum:r?a.exactLength.value:void 0,maximum:i?a.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:a.exactLength.message}),s.dirty())}if(a.minLength!==null&&t.data.length<a.minLength.value&&(c(t,{code:o.too_small,minimum:a.minLength.value,type:"array",inclusive:!0,exact:!1,message:a.minLength.message}),s.dirty()),a.maxLength!==null&&t.data.length>a.maxLength.value&&(c(t,{code:o.too_big,maximum:a.maxLength.value,type:"array",inclusive:!0,exact:!1,message:a.maxLength.message}),s.dirty()),t.common.async)return Promise.all([...t.data].map((i,r)=>a.type._parseAsync(new C(t,i,t.path,r)))).then(i=>w.mergeArray(s,i));const d=[...t.data].map((i,r)=>a.type._parseSync(new C(t,i,t.path,r)));return w.mergeArray(s,d)}get element(){return this._def.type}min(e,t){return new Z({...this._def,minLength:{value:e,message:l.toString(t)}})}max(e,t){return new Z({...this._def,maxLength:{value:e,message:l.toString(t)}})}length(e,t){return new Z({...this._def,exactLength:{value:e,message:l.toString(t)}})}nonempty(e){return this.min(1,e)}}Z.create=(n,e)=>new Z({type:n,minLength:null,maxLength:null,exactLength:null,typeName:p.ZodArray,..._(e)});function V(n){if(n instanceof v){const e={};for(const t in n.shape){const s=n.shape[t];e[t]=O.create(V(s))}return new v({...n._def,shape:()=>e})}else return n instanceof Z?new Z({...n._def,type:V(n.element)}):n instanceof O?O.create(V(n.unwrap())):n instanceof I?I.create(V(n.unwrap())):n instanceof A?A.create(n.items.map(e=>V(e))):n}class v extends y{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const e=this._def.shape(),t=k.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==h.object){const u=this._getOrReturnCtx(e);return c(u,{code:o.invalid_type,expected:h.object,received:u.parsedType}),f}const{status:t,ctx:s}=this._processInputParams(e),{shape:a,keys:d}=this._getCached(),i=[];if(!(this._def.catchall instanceof N&&this._def.unknownKeys==="strip"))for(const u in s.data)d.includes(u)||i.push(u);const r=[];for(const u of d){const m=a[u],g=s.data[u];r.push({key:{status:"valid",value:u},value:m._parse(new C(s,g,s.path,u)),alwaysSet:u in s.data})}if(this._def.catchall instanceof N){const u=this._def.unknownKeys;if(u==="passthrough")for(const m of i)r.push({key:{status:"valid",value:m},value:{status:"valid",value:s.data[m]}});else if(u==="strict")i.length>0&&(c(s,{code:o.unrecognized_keys,keys:i}),t.dirty());else if(u!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const u=this._def.catchall;for(const m of i){const g=s.data[m];r.push({key:{status:"valid",value:m},value:u._parse(new C(s,g,s.path,m)),alwaysSet:m in s.data})}}return s.common.async?Promise.resolve().then(async()=>{const u=[];for(const m of r){const g=await m.key,S=await m.value;u.push({key:g,value:S,alwaysSet:m.alwaysSet})}return u}).then(u=>w.mergeObjectSync(t,u)):w.mergeObjectSync(t,r)}get shape(){return this._def.shape()}strict(e){return l.errToObj,new v({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,s)=>{const a=this._def.errorMap?.(t,s).message??s.defaultError;return t.code==="unrecognized_keys"?{message:l.errToObj(e).message??a}:{message:a}}}:{}})}strip(){return new v({...this._def,unknownKeys:"strip"})}passthrough(){return new v({...this._def,unknownKeys:"passthrough"})}extend(e){return new v({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new v({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:p.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new v({...this._def,catchall:e})}pick(e){const t={};for(const s of k.objectKeys(e))e[s]&&this.shape[s]&&(t[s]=this.shape[s]);return new v({...this._def,shape:()=>t})}omit(e){const t={};for(const s of k.objectKeys(this.shape))e[s]||(t[s]=this.shape[s]);return new v({...this._def,shape:()=>t})}deepPartial(){return V(this)}partial(e){const t={};for(const s of k.objectKeys(this.shape)){const a=this.shape[s];e&&!e[s]?t[s]=a:t[s]=a.optional()}return new v({...this._def,shape:()=>t})}required(e){const t={};for(const s of k.objectKeys(this.shape))if(e&&!e[s])t[s]=this.shape[s];else{let a=this.shape[s];for(;a instanceof O;)a=a._def.innerType;t[s]=a}return new v({...this._def,shape:()=>t})}keyof(){return Te(k.objectKeys(this.shape))}}v.create=(n,e)=>new v({shape:()=>n,unknownKeys:"strip",catchall:N.create(),typeName:p.ZodObject,..._(e)}),v.strictCreate=(n,e)=>new v({shape:()=>n,unknownKeys:"strict",catchall:N.create(),typeName:p.ZodObject,..._(e)}),v.lazycreate=(n,e)=>new v({shape:n,unknownKeys:"strip",catchall:N.create(),typeName:p.ZodObject,..._(e)});class J extends y{_parse(e){const{ctx:t}=this._processInputParams(e),s=this._def.options;function a(d){for(const r of d)if(r.result.status==="valid")return r.result;for(const r of d)if(r.result.status==="dirty")return t.common.issues.push(...r.ctx.common.issues),r.result;const i=d.map(r=>new R(r.ctx.common.issues));return c(t,{code:o.invalid_union,unionErrors:i}),f}if(t.common.async)return Promise.all(s.map(async d=>{const i={...t,common:{...t.common,issues:[]},parent:null};return{result:await d._parseAsync({data:t.data,path:t.path,parent:i}),ctx:i}})).then(a);{let d;const i=[];for(const u of s){const m={...t,common:{...t.common,issues:[]},parent:null},g=u._parseSync({data:t.data,path:t.path,parent:m});if(g.status==="valid")return g;g.status==="dirty"&&!d&&(d={result:g,ctx:m}),m.common.issues.length&&i.push(m.common.issues)}if(d)return t.common.issues.push(...d.ctx.common.issues),d.result;const r=i.map(u=>new R(u));return c(t,{code:o.invalid_union,unionErrors:r}),f}}get options(){return this._def.options}}J.create=(n,e)=>new J({options:n,typeName:p.ZodUnion,..._(e)});const P=n=>n instanceof X?P(n.schema):n instanceof b?P(n.innerType()):n instanceof Q?[n.value]:n instanceof M?n.options:n instanceof ee?k.objectValues(n.enum):n instanceof te?P(n._def.innerType):n instanceof q?[void 0]:n instanceof H?[null]:n instanceof O?[void 0,...P(n.unwrap())]:n instanceof I?[null,...P(n.unwrap())]:n instanceof fe||n instanceof ae?P(n.unwrap()):n instanceof se?P(n._def.innerType):[];class le extends y{_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==h.object)return c(t,{code:o.invalid_type,expected:h.object,received:t.parsedType}),f;const s=this.discriminator,a=t.data[s],d=this.optionsMap.get(a);return d?t.common.async?d._parseAsync({data:t.data,path:t.path,parent:t}):d._parseSync({data:t.data,path:t.path,parent:t}):(c(t,{code:o.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[s]}),f)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,t,s){const a=new Map;for(const d of t){const i=P(d.shape[e]);if(!i.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(const r of i){if(a.has(r))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(r)}`);a.set(r,d)}}return new le({typeName:p.ZodDiscriminatedUnion,discriminator:e,options:t,optionsMap:a,..._(s)})}}function me(n,e){const t=j(n),s=j(e);if(n===e)return{valid:!0,data:n};if(t===h.object&&s===h.object){const a=k.objectKeys(e),d=k.objectKeys(n).filter(r=>a.indexOf(r)!==-1),i={...n,...e};for(const r of d){const u=me(n[r],e[r]);if(!u.valid)return{valid:!1};i[r]=u.data}return{valid:!0,data:i}}else if(t===h.array&&s===h.array){if(n.length!==e.length)return{valid:!1};const a=[];for(let d=0;d<n.length;d++){const i=n[d],r=e[d],u=me(i,r);if(!u.valid)return{valid:!1};a.push(u.data)}return{valid:!0,data:a}}else return t===h.date&&s===h.date&&+n==+e?{valid:!0,data:n}:{valid:!1}}class G extends y{_parse(e){const{status:t,ctx:s}=this._processInputParams(e),a=(d,i)=>{if(ge(d)||ge(i))return f;const r=me(d.value,i.value);return r.valid?((ve(d)||ve(i))&&t.dirty(),{status:t.value,value:r.data}):(c(s,{code:o.invalid_intersection_types}),f)};return s.common.async?Promise.all([this._def.left._parseAsync({data:s.data,path:s.path,parent:s}),this._def.right._parseAsync({data:s.data,path:s.path,parent:s})]).then(([d,i])=>a(d,i)):a(this._def.left._parseSync({data:s.data,path:s.path,parent:s}),this._def.right._parseSync({data:s.data,path:s.path,parent:s}))}}G.create=(n,e,t)=>new G({left:n,right:e,typeName:p.ZodIntersection,..._(t)});class A extends y{_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==h.array)return c(s,{code:o.invalid_type,expected:h.array,received:s.parsedType}),f;if(s.data.length<this._def.items.length)return c(s,{code:o.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),f;!this._def.rest&&s.data.length>this._def.items.length&&(c(s,{code:o.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());const a=[...s.data].map((d,i)=>{const r=this._def.items[i]||this._def.rest;return r?r._parse(new C(s,d,s.path,i)):null}).filter(d=>!!d);return s.common.async?Promise.all(a).then(d=>w.mergeArray(t,d)):w.mergeArray(t,a)}get items(){return this._def.items}rest(e){return new A({...this._def,rest:e})}}A.create=(n,e)=>{if(!Array.isArray(n))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new A({items:n,typeName:p.ZodTuple,rest:null,..._(e)})};class re extends y{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==h.object)return c(s,{code:o.invalid_type,expected:h.object,received:s.parsedType}),f;const a=[],d=this._def.keyType,i=this._def.valueType;for(const r in s.data)a.push({key:d._parse(new C(s,r,s.path,r)),value:i._parse(new C(s,s.data[r],s.path,r)),alwaysSet:r in s.data});return s.common.async?w.mergeObjectAsync(t,a):w.mergeObjectSync(t,a)}get element(){return this._def.valueType}static create(e,t,s){return t instanceof y?new re({keyType:e,valueType:t,typeName:p.ZodRecord,..._(s)}):new re({keyType:T.create(),valueType:e,typeName:p.ZodRecord,..._(t)})}}class ce extends y{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==h.map)return c(s,{code:o.invalid_type,expected:h.map,received:s.parsedType}),f;const a=this._def.keyType,d=this._def.valueType,i=[...s.data.entries()].map(([r,u],m)=>({key:a._parse(new C(s,r,s.path,[m,"key"])),value:d._parse(new C(s,u,s.path,[m,"value"]))}));if(s.common.async){const r=new Map;return Promise.resolve().then(async()=>{for(const u of i){const m=await u.key,g=await u.value;if(m.status==="aborted"||g.status==="aborted")return f;(m.status==="dirty"||g.status==="dirty")&&t.dirty(),r.set(m.value,g.value)}return{status:t.value,value:r}})}else{const r=new Map;for(const u of i){const m=u.key,g=u.value;if(m.status==="aborted"||g.status==="aborted")return f;(m.status==="dirty"||g.status==="dirty")&&t.dirty(),r.set(m.value,g.value)}return{status:t.value,value:r}}}}ce.create=(n,e,t)=>new ce({valueType:e,keyType:n,typeName:p.ZodMap,..._(t)});class z extends y{_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.parsedType!==h.set)return c(s,{code:o.invalid_type,expected:h.set,received:s.parsedType}),f;const a=this._def;a.minSize!==null&&s.data.size<a.minSize.value&&(c(s,{code:o.too_small,minimum:a.minSize.value,type:"set",inclusive:!0,exact:!1,message:a.minSize.message}),t.dirty()),a.maxSize!==null&&s.data.size>a.maxSize.value&&(c(s,{code:o.too_big,maximum:a.maxSize.value,type:"set",inclusive:!0,exact:!1,message:a.maxSize.message}),t.dirty());const d=this._def.valueType;function i(u){const m=new Set;for(const g of u){if(g.status==="aborted")return f;g.status==="dirty"&&t.dirty(),m.add(g.value)}return{status:t.value,value:m}}const r=[...s.data.values()].map((u,m)=>d._parse(new C(s,u,s.path,m)));return s.common.async?Promise.all(r).then(u=>i(u)):i(r)}min(e,t){return new z({...this._def,minSize:{value:e,message:l.toString(t)}})}max(e,t){return new z({...this._def,maxSize:{value:e,message:l.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}z.create=(n,e)=>new z({valueType:n,minSize:null,maxSize:null,typeName:p.ZodSet,..._(e)});class B extends y{constructor(){super(...arguments),this.validate=this.implement}_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==h.function)return c(t,{code:o.invalid_type,expected:h.function,received:t.parsedType}),f;function s(r,u){return ke({data:r,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,ye(),_e].filter(m=>!!m),issueData:{code:o.invalid_arguments,argumentsError:u}})}function a(r,u){return ke({data:r,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,ye(),_e].filter(m=>!!m),issueData:{code:o.invalid_return_type,returnTypeError:u}})}const d={errorMap:t.common.contextualErrorMap},i=t.data;if(this._def.returns instanceof K){const r=this;return x(async function(...u){const m=new R([]),g=await r._def.args.parseAsync(u,d).catch(he=>{throw m.addIssue(s(u,he)),m}),S=await Reflect.apply(i,this,g);return await r._def.returns._def.type.parseAsync(S,d).catch(he=>{throw m.addIssue(a(S,he)),m})})}else{const r=this;return x(function(...u){const m=r._def.args.safeParse(u,d);if(!m.success)throw new R([s(u,m.error)]);const g=Reflect.apply(i,this,m.data),S=r._def.returns.safeParse(g,d);if(!S.success)throw new R([a(g,S.error)]);return S.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new B({...this._def,args:A.create(e).rest(L.create())})}returns(e){return new B({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,t,s){return new B({args:e||A.create([]).rest(L.create()),returns:t||L.create(),typeName:p.ZodFunction,..._(s)})}}class X extends y{get schema(){return this._def.getter()}_parse(e){const{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}}X.create=(n,e)=>new X({getter:n,typeName:p.ZodLazy,..._(e)});class Q extends y{_parse(e){if(e.data!==this._def.value){const t=this._getOrReturnCtx(e);return c(t,{received:t.data,code:o.invalid_literal,expected:this._def.value}),f}return{status:"valid",value:e.data}}get value(){return this._def.value}}Q.create=(n,e)=>new Q({value:n,typeName:p.ZodLiteral,..._(e)});function Te(n,e){return new M({values:n,typeName:p.ZodEnum,..._(e)})}class M extends y{_parse(e){if(typeof e.data!="string"){const t=this._getOrReturnCtx(e),s=this._def.values;return c(t,{expected:k.joinValues(s),received:t.parsedType,code:o.invalid_type}),f}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){const t=this._getOrReturnCtx(e),s=this._def.values;return c(t,{received:t.data,code:o.invalid_enum_value,options:s}),f}return x(e.data)}get options(){return this._def.values}get enum(){const e={};for(const t of this._def.values)e[t]=t;return e}get Values(){const e={};for(const t of this._def.values)e[t]=t;return e}get Enum(){const e={};for(const t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return M.create(e,{...this._def,...t})}exclude(e,t=this._def){return M.create(this.options.filter(s=>!e.includes(s)),{...this._def,...t})}}M.create=Te;class ee extends y{_parse(e){const t=k.getValidEnumValues(this._def.values),s=this._getOrReturnCtx(e);if(s.parsedType!==h.string&&s.parsedType!==h.number){const a=k.objectValues(t);return c(s,{expected:k.joinValues(a),received:s.parsedType,code:o.invalid_type}),f}if(this._cache||(this._cache=new Set(k.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){const a=k.objectValues(t);return c(s,{received:s.data,code:o.invalid_enum_value,options:a}),f}return x(e.data)}get enum(){return this._def.values}}ee.create=(n,e)=>new ee({values:n,typeName:p.ZodNativeEnum,..._(e)});class K extends y{unwrap(){return this._def.type}_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==h.promise&&t.common.async===!1)return c(t,{code:o.invalid_type,expected:h.promise,received:t.parsedType}),f;const s=t.parsedType===h.promise?t.data:Promise.resolve(t.data);return x(s.then(a=>this._def.type.parseAsync(a,{path:t.path,errorMap:t.common.contextualErrorMap})))}}K.create=(n,e)=>new K({type:n,typeName:p.ZodPromise,..._(e)});class b extends y{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===p.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){const{status:t,ctx:s}=this._processInputParams(e),a=this._def.effect||null,d={addIssue:i=>{c(s,i),i.fatal?t.abort():t.dirty()},get path(){return s.path}};if(d.addIssue=d.addIssue.bind(d),a.type==="preprocess"){const i=a.transform(s.data,d);if(s.common.async)return Promise.resolve(i).then(async r=>{if(t.value==="aborted")return f;const u=await this._def.schema._parseAsync({data:r,path:s.path,parent:s});return u.status==="aborted"?f:u.status==="dirty"?W(u.value):t.value==="dirty"?W(u.value):u});{if(t.value==="aborted")return f;const r=this._def.schema._parseSync({data:i,path:s.path,parent:s});return r.status==="aborted"?f:r.status==="dirty"?W(r.value):t.value==="dirty"?W(r.value):r}}if(a.type==="refinement"){const i=r=>{const u=a.refinement(r,d);if(s.common.async)return Promise.resolve(u);if(u instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return r};if(s.common.async===!1){const r=this._def.schema._parseSync({data:s.data,path:s.path,parent:s});return r.status==="aborted"?f:(r.status==="dirty"&&t.dirty(),i(r.value),{status:t.value,value:r.value})}else return this._def.schema._parseAsync({data:s.data,path:s.path,parent:s}).then(r=>r.status==="aborted"?f:(r.status==="dirty"&&t.dirty(),i(r.value).then(()=>({status:t.value,value:r.value}))))}if(a.type==="transform")if(s.common.async===!1){const i=this._def.schema._parseSync({data:s.data,path:s.path,parent:s});if(!D(i))return f;const r=a.transform(i.value,d);if(r instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:r}}else return this._def.schema._parseAsync({data:s.data,path:s.path,parent:s}).then(i=>D(i)?Promise.resolve(a.transform(i.value,d)).then(r=>({status:t.value,value:r})):f);k.assertNever(a)}}b.create=(n,e,t)=>new b({schema:n,typeName:p.ZodEffects,effect:e,..._(t)}),b.createWithPreprocess=(n,e,t)=>new b({schema:e,effect:{type:"preprocess",transform:n},typeName:p.ZodEffects,..._(t)});class O extends y{_parse(e){return this._getType(e)===h.undefined?x(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}O.create=(n,e)=>new O({innerType:n,typeName:p.ZodOptional,..._(e)});class I extends y{_parse(e){return this._getType(e)===h.null?x(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}I.create=(n,e)=>new I({innerType:n,typeName:p.ZodNullable,..._(e)});class te extends y{_parse(e){const{ctx:t}=this._processInputParams(e);let s=t.data;return t.parsedType===h.undefined&&(s=this._def.defaultValue()),this._def.innerType._parse({data:s,path:t.path,parent:t})}removeDefault(){return this._def.innerType}}te.create=(n,e)=>new te({innerType:n,typeName:p.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,..._(e)});class se extends y{_parse(e){const{ctx:t}=this._processInputParams(e),s={...t,common:{...t.common,issues:[]}},a=this._def.innerType._parse({data:s.data,path:s.path,parent:{...s}});return ie(a)?a.then(d=>({status:"valid",value:d.status==="valid"?d.value:this._def.catchValue({get error(){return new R(s.common.issues)},input:s.data})})):{status:"valid",value:a.status==="valid"?a.value:this._def.catchValue({get error(){return new R(s.common.issues)},input:s.data})}}removeCatch(){return this._def.innerType}}se.create=(n,e)=>new se({innerType:n,typeName:p.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,..._(e)});class ue extends y{_parse(e){if(this._getType(e)!==h.nan){const t=this._getOrReturnCtx(e);return c(t,{code:o.invalid_type,expected:h.nan,received:t.parsedType}),f}return{status:"valid",value:e.data}}}ue.create=n=>new ue({typeName:p.ZodNaN,..._(n)});const Qe=Symbol("zod_brand");class fe extends y{_parse(e){const{ctx:t}=this._processInputParams(e),s=t.data;return this._def.type._parse({data:s,path:t.path,parent:t})}unwrap(){return this._def.type}}class ne extends y{_parse(e){const{status:t,ctx:s}=this._processInputParams(e);if(s.common.async)return(async()=>{const a=await this._def.in._parseAsync({data:s.data,path:s.path,parent:s});return a.status==="aborted"?f:a.status==="dirty"?(t.dirty(),W(a.value)):this._def.out._parseAsync({data:a.value,path:s.path,parent:s})})();{const a=this._def.in._parseSync({data:s.data,path:s.path,parent:s});return a.status==="aborted"?f:a.status==="dirty"?(t.dirty(),{status:"dirty",value:a.value}):this._def.out._parseSync({data:a.value,path:s.path,parent:s})}}static create(e,t){return new ne({in:e,out:t,typeName:p.ZodPipeline})}}class ae extends y{_parse(e){const t=this._def.innerType._parse(e),s=a=>(D(a)&&(a.value=Object.freeze(a.value)),a);return ie(t)?t.then(a=>s(a)):s(t)}unwrap(){return this._def.innerType}}ae.create=(n,e)=>new ae({innerType:n,typeName:p.ZodReadonly,..._(e)});function Ce(n,e){const t=typeof n=="function"?n(e):typeof n=="string"?{message:n}:n;return typeof t=="string"?{message:t}:t}function Oe(n,e={},t){return n?U.create().superRefine((s,a)=>{const d=n(s);if(d instanceof Promise)return d.then(i=>{if(!i){const r=Ce(e,s),u=r.fatal??t??!0;a.addIssue({code:"custom",...r,fatal:u})}});if(!d){const i=Ce(e,s),r=i.fatal??t??!0;a.addIssue({code:"custom",...i,fatal:r})}}):U.create()}const et={object:v.lazycreate};var p;(function(n){n.ZodString="ZodString",n.ZodNumber="ZodNumber",n.ZodNaN="ZodNaN",n.ZodBigInt="ZodBigInt",n.ZodBoolean="ZodBoolean",n.ZodDate="ZodDate",n.ZodSymbol="ZodSymbol",n.ZodUndefined="ZodUndefined",n.ZodNull="ZodNull",n.ZodAny="ZodAny",n.ZodUnknown="ZodUnknown",n.ZodNever="ZodNever",n.ZodVoid="ZodVoid",n.ZodArray="ZodArray",n.ZodObject="ZodObject",n.ZodUnion="ZodUnion",n.ZodDiscriminatedUnion="ZodDiscriminatedUnion",n.ZodIntersection="ZodIntersection",n.ZodTuple="ZodTuple",n.ZodRecord="ZodRecord",n.ZodMap="ZodMap",n.ZodSet="ZodSet",n.ZodFunction="ZodFunction",n.ZodLazy="ZodLazy",n.ZodLiteral="ZodLiteral",n.ZodEnum="ZodEnum",n.ZodEffects="ZodEffects",n.ZodNativeEnum="ZodNativeEnum",n.ZodOptional="ZodOptional",n.ZodNullable="ZodNullable",n.ZodDefault="ZodDefault",n.ZodCatch="ZodCatch",n.ZodPromise="ZodPromise",n.ZodBranded="ZodBranded",n.ZodPipeline="ZodPipeline",n.ZodReadonly="ZodReadonly"})(p||(p={}));class Ut{constructor(...e){}}const tt=(n,e={message:`Input not instance of ${n.name}`})=>Oe(t=>t instanceof n,e),Ae=T.create,Ne=E.create,st=ue.create,at=F.create,Se=Y.create,nt=$.create,rt=de.create,it=q.create,dt=H.create,ot=U.create,ct=L.create,ut=N.create,lt=oe.create,ht=Z.create,pt=v.create,mt=v.strictCreate,ft=J.create,_t=le.create,yt=G.create,gt=A.create,vt=re.create,kt=ce.create,xt=z.create,wt=B.create,bt=X.create,Zt=Q.create,Tt=M.create,Ct=ee.create,Ot=K.create,Re=b.create,At=O.create,Nt=I.create,St=b.createWithPreprocess,Rt=ne.create,jt=()=>Ae().optional(),Pt=()=>Ne().optional(),It=()=>Se().optional(),Et={string:n=>T.create({...n,coerce:!0}),number:n=>E.create({...n,coerce:!0}),boolean:n=>Y.create({...n,coerce:!0}),bigint:n=>F.create({...n,coerce:!0}),date:n=>$.create({...n,coerce:!0})},Ft=f;export{Qe as BRAND,Ft as NEVER,y as Schema,U as ZodAny,Z as ZodArray,F as ZodBigInt,Y as ZodBoolean,fe as ZodBranded,se as ZodCatch,$ as ZodDate,te as ZodDefault,le as ZodDiscriminatedUnion,b as ZodEffects,M as ZodEnum,p as ZodFirstPartyTypeKind,B as ZodFunction,G as ZodIntersection,X as ZodLazy,Q as ZodLiteral,ce as ZodMap,ue as ZodNaN,ee as ZodNativeEnum,N as ZodNever,H as ZodNull,I as ZodNullable,E as ZodNumber,v as ZodObject,O as ZodOptional,ne as ZodPipeline,K as ZodPromise,ae as ZodReadonly,re as ZodRecord,y as ZodSchema,z as ZodSet,T as ZodString,de as ZodSymbol,b as ZodTransformer,A as ZodTuple,y as ZodType,q as ZodUndefined,J as ZodUnion,L as ZodUnknown,oe as ZodVoid,ot as any,ht as array,at as bigint,Se as boolean,Et as coerce,Oe as custom,nt as date,Ze as datetimeRegex,_t as discriminatedUnion,Re as effect,Tt as enum,wt as function,tt as instanceof,yt as intersection,et as late,bt as lazy,Zt as literal,kt as map,st as nan,Ct as nativeEnum,ut as never,dt as null,Nt as nullable,Ne as number,pt as object,It as oboolean,Pt as onumber,At as optional,jt as ostring,Rt as pipeline,St as preprocess,Ot as promise,vt as record,xt as set,mt as strictObject,Ae as string,rt as symbol,Re as transformer,gt as tuple,it as undefined,ft as union,ct as unknown,lt as void};
@@ -1 +1 @@
1
- "use strict";var a=Object.defineProperty,c=Object.getOwnPropertyDescriptor,p=Object.getOwnPropertyNames,d=Object.prototype.hasOwnProperty,m=(e,t)=>{for(var r in t)a(e,r,{get:t[r],enumerable:!0})},b=(e,t,r,o)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of p(t))!d.call(e,n)&&n!==r&&a(e,n,{get:()=>t[n],enumerable:!(o=c(t,n))||o.enumerable});return e},g=e=>b(a({},"__esModule",{value:!0}),e),f={};function u(e){return Array.isArray(e.files)?e.files:e.files&&"object"==typeof e.files?Object.values(e.files).flat():[]}function y(e,t){const r=[];for(let o=0;;o++){const n=e.find(e=>e.fieldname===`${t}_${o}`);if(!n)break;r.push({type:n.mimetype,bytes:n.buffer})}return r}function i(e,t){if(t.ok)return e.setHeader("Content-Type",t.contentType),e.setHeader("Content-Disposition",`attachment; filename="${t.filename}"`),e.setHeader("Cache-Control","no-store"),void e.send(t.bytes);e.status(t.status).json({error:t.error,message:t.message})}function v(e){return async(t,r)=>{const o=u(t),n=o.find(e=>"overlay"===e.fieldname);if(n&&"image/png"!==n.mimetype)return void i(r,{ok:!1,status:415,error:"BAD_OVERLAY",message:"overlay 必须是 PNG"});const s={videos:y(o,"video"),audios:y(o,"audio"),overlay:n?.buffer,editStateRaw:"string"==typeof t.body?.editState?t.body.editState:""};i(r,await e.handle(s))}}function O(e){return async(t,r)=>{const o=u(t).find(e=>"file"===e.fieldname),n=t.body?.time;i(r,o&&"string"==typeof n?await e.handle({type:o.mimetype,bytes:o.buffer},Number(n)):{ok:!1,status:400,error:"BAD_REQUEST",message:"缺少 file 或 time"})}}m(f,{expressPoster:()=>O,expressVideoExport:()=>v}),module.exports=g(f);
1
+ "use strict";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(e,t)=>{for(var r in t)__defProp(e,r,{get:t[r],enumerable:!0})},__copyProps=(e,t,r,o)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of __getOwnPropNames(t))__hasOwnProp.call(e,s)||s===r||__defProp(e,s,{get:()=>t[s],enumerable:!(o=__getOwnPropDesc(t,s))||o.enumerable});return e},__toCommonJS=e=>__copyProps(__defProp({},"__esModule",{value:!0}),e),express_exports={};function filesArray(e){return Array.isArray(e.files)?e.files:e.files&&"object"==typeof e.files?Object.values(e.files).flat():[]}function collect(e,t){const r=[];for(let o=0;;o++){const s=e.find(e=>e.fieldname===`${t}_${o}`);if(!s)break;r.push({type:s.mimetype,bytes:s.buffer})}return r}function reply(e,t){if(t.ok)return e.setHeader("Content-Type",t.contentType),e.setHeader("Content-Disposition",`attachment; filename="${t.filename}"`),e.setHeader("Cache-Control","no-store"),void e.send(t.bytes);e.status(t.status).json({error:t.error,message:t.message})}function expressVideoExport(e){return async(t,r)=>{const o=filesArray(t),s=o.find(e=>"overlay"===e.fieldname);if(s&&"image/png"!==s.mimetype)return void reply(r,{ok:!1,status:415,error:"BAD_OVERLAY",message:"overlay 必须是 PNG"});const n=collect(o,"textOverlay");if(n.some(e=>"image/png"!==e.type))return void reply(r,{ok:!1,status:415,error:"BAD_OVERLAY",message:"textOverlay must be PNG"});const i=o.find(e=>"videoCover"===e.fieldname);if(i&&!/^image\/(?:png|jpe?g)$/.test(i.mimetype))return void reply(r,{ok:!1,status:415,error:"BAD_COVER",message:"videoCover must be PNG or JPEG"});const a={videos:collect(o,"video"),audios:collect(o,"audio"),overlay:s?.buffer,videoCover:i?.buffer,textOverlays:n.map(e=>e.bytes),editStateRaw:"string"==typeof t.body?.editState?t.body.editState:""};reply(r,await e.handle(a))}}function expressPoster(e){return async(t,r)=>{const o=filesArray(t).find(e=>"file"===e.fieldname),s=t.body?.time;reply(r,o&&"string"==typeof s?await e.handle({type:o.mimetype,bytes:o.buffer},Number(s)):{ok:!1,status:400,error:"BAD_REQUEST",message:"缺少 file 或 time"})}}__export(express_exports,{expressPoster:()=>expressPoster,expressVideoExport:()=>expressVideoExport}),module.exports=__toCommonJS(express_exports);
@@ -1,4 +1,4 @@
1
- import { P as PosterHandler, V as VideoExportHandler } from '../handler-DL4Inp7o.js';
1
+ import { P as PosterHandler, V as VideoExportHandler } from '../handler-BEalyBz9.js';
2
2
 
3
3
  /**
4
4
  * Express 适配器。用法:
@@ -1 +1 @@
1
- function e(e){return Array.isArray(e.files)?e.files:e.files&&"object"==typeof e.files?Object.values(e.files).flat():[]}function t(e,t){const r=[];for(let s=0;;s++){const o=e.find(e=>e.fieldname===`${t}_${s}`);if(!o)break;r.push({type:o.mimetype,bytes:o.buffer})}return r}function r(e,t){if(t.ok)return e.setHeader("Content-Type",t.contentType),e.setHeader("Content-Disposition",`attachment; filename="${t.filename}"`),e.setHeader("Cache-Control","no-store"),void e.send(t.bytes);e.status(t.status).json({error:t.error,message:t.message})}function s(s){return async(o,i)=>{const a=e(o),n=a.find(e=>"overlay"===e.fieldname),f=a.find(e=>"videoCover"===e.fieldname),d=t(a,"textOverlay");if(n&&"image/png"!==n.mimetype)return void r(i,{ok:!1,status:415,error:"BAD_OVERLAY",message:"overlay 必须是 PNG"});if(d.some(e=>"image/png"!==e.type))return void r(i,{ok:!1,status:415,error:"BAD_OVERLAY",message:"textOverlay 必须是 PNG"});if(f&&!/^image\/(?:png|jpe?g)$/.test(f.mimetype))return void r(i,{ok:!1,status:415,error:"BAD_COVER",message:"videoCover must be PNG or JPG"});const m={videos:t(a,"video"),audios:t(a,"audio"),overlay:n?.buffer,videoCover:f?.buffer,textOverlays:d.map(e=>e.bytes),editStateRaw:"string"==typeof o.body?.editState?o.body.editState:""};r(i,await s.handle(m))}}function o(t){return async(s,o)=>{const i=e(s).find(e=>"file"===e.fieldname),a=s.body?.time;r(o,i&&"string"==typeof a?await t.handle({type:i.mimetype,bytes:i.buffer},Number(a)):{ok:!1,status:400,error:"BAD_REQUEST",message:"缺少 file 或 time"})}}export{o as expressPoster,s as expressVideoExport};
1
+ function e(e){return Array.isArray(e.files)?e.files:e.files&&"object"==typeof e.files?Object.values(e.files).flat():[]}function t(e,t){const r=[];for(let s=0;;s++){const o=e.find(e=>e.fieldname===`${t}_${s}`);if(!o)break;r.push({type:o.mimetype,bytes:o.buffer})}return r}function r(e,t){if(t.ok)return e.setHeader("Content-Type",t.contentType),e.setHeader("Content-Disposition",`attachment; filename="${t.filename}"`),e.setHeader("Cache-Control","no-store"),void e.send(t.bytes);e.status(t.status).json({error:t.error,message:t.message})}function s(s){return async(o,i)=>{const n=e(o),a=n.find(e=>"overlay"===e.fieldname);if(a&&"image/png"!==a.mimetype)return void r(i,{ok:!1,status:415,error:"BAD_OVERLAY",message:"overlay 必须是 PNG"});const f=t(n,"textOverlay");if(f.some(e=>"image/png"!==e.type))return void r(i,{ok:!1,status:415,error:"BAD_OVERLAY",message:"textOverlay must be PNG"});const d=n.find(e=>"videoCover"===e.fieldname);if(d&&!/^image\/(?:png|jpe?g)$/.test(d.mimetype))return void r(i,{ok:!1,status:415,error:"BAD_COVER",message:"videoCover must be PNG or JPEG"});const m={videos:t(n,"video"),audios:t(n,"audio"),overlay:a?.buffer,videoCover:d?.buffer,textOverlays:f.map(e=>e.bytes),editStateRaw:"string"==typeof o.body?.editState?o.body.editState:""};r(i,await s.handle(m))}}function o(t){return async(s,o)=>{const i=e(s).find(e=>"file"===e.fieldname),n=s.body?.time;r(o,i&&"string"==typeof n?await t.handle({type:i.mimetype,bytes:i.buffer},Number(n)):{ok:!1,status:400,error:"BAD_REQUEST",message:"缺少 file 或 time"})}}export{o as expressPoster,s as expressVideoExport};
@@ -1 +1 @@
1
- "use strict";var c=Object.defineProperty,w=Object.getOwnPropertyDescriptor,B=Object.getOwnPropertyNames,h=Object.prototype.hasOwnProperty,v=(e,t)=>{for(var r in t)c(e,r,{get:t[r],enumerable:!0})},D=(e,t,r,a)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of B(t))!h.call(e,o)&&o!==r&&c(e,o,{get:()=>t[o],enumerable:!(a=w(t,o))||a.enumerable});return e},C=e=>D(c({},"__esModule",{value:!0}),e),g={};v(g,{toWebPosterHandler:()=>O,toWebVideoHandler:()=>E}),module.exports=C(g);var m=16;function f(e){return"object"==typeof e&&null!==e&&"string"==typeof e.type&&"function"==typeof e.arrayBuffer}async function y(e){return{type:e.type,bytes:Buffer.from(await e.arrayBuffer())}}function s(e){return e.ok?new Response(new Uint8Array(e.bytes),{status:200,headers:{"Content-Type":e.contentType,"Content-Disposition":`attachment; filename="${e.filename}"`,"Cache-Control":"no-store"}}):new Response(JSON.stringify({error:e.error,message:e.message}),{status:e.status,headers:{"Content-Type":"application/json"}})}function E(e){return async t=>{let r;try{r=await t.formData()}catch{return s({ok:!1,status:400,error:"BAD_REQUEST",message:"请求体解析失败"})}const a=[];for(let e=0;e<m;e++){const t=r.get(`video_${e}`);if(!f(t))break;a.push(await y(t))}const o=[];for(let e=0;e<m;e++){const t=r.get(`audio_${e}`);if(!f(t))break;o.push(await y(t))}const n=r.get("editState"),i=r.get("overlay"),u=f(i)?i:void 0,c=u?Buffer.from(await u.arrayBuffer()):void 0;if(u&&"image/png"!==u.type)return s({ok:!1,status:415,error:"BAD_OVERLAY",message:"overlay 必须是 PNG"});const p={videos:a,audios:o,overlay:c,editStateRaw:"string"==typeof n?n:""};return s(await e.handle(p))}}function O(e){return async t=>{let r;try{r=await t.formData()}catch{return s({ok:!1,status:400,error:"BAD_REQUEST",message:"请求体解析失败"})}const a=r.get("file"),o=r.get("time");return f(a)&&"string"==typeof o?s(await e.handle(await y(a),Number(o))):s({ok:!1,status:400,error:"BAD_REQUEST",message:"缺少 file 或 time"})}}
1
+ "use strict";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(e,t)=>{for(var o in t)__defProp(e,o,{get:t[o],enumerable:!0})},__copyProps=(e,t,o,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of __getOwnPropNames(t))__hasOwnProp.call(e,a)||a===o||__defProp(e,a,{get:()=>t[a],enumerable:!(r=__getOwnPropDesc(t,a))||r.enumerable});return e},__toCommonJS=e=>__copyProps(__defProp({},"__esModule",{value:!0}),e),web_exports={};__export(web_exports,{toWebPosterHandler:()=>toWebPosterHandler,toWebVideoHandler:()=>toWebVideoHandler}),module.exports=__toCommonJS(web_exports);var MAX_SLOTS=16;function isUploadFormFile(e){return"object"==typeof e&&null!==e&&"string"==typeof e.type&&"function"==typeof e.arrayBuffer}async function fileToUpload(e){return{type:e.type,bytes:Buffer.from(await e.arrayBuffer())}}function toResponse(e){return e.ok?new Response(new Uint8Array(e.bytes),{status:200,headers:{"Content-Type":e.contentType,"Content-Disposition":`attachment; filename="${e.filename}"`,"Cache-Control":"no-store"}}):new Response(JSON.stringify({error:e.error,message:e.message}),{status:e.status,headers:{"Content-Type":"application/json"}})}function toWebVideoHandler(e){return async t=>{let o;try{o=await t.formData()}catch{return toResponse({ok:!1,status:400,error:"BAD_REQUEST",message:"请求体解析失败"})}const r=[];for(let e=0;e<MAX_SLOTS;e++){const t=o.get(`video_${e}`);if(!isUploadFormFile(t))break;r.push(await fileToUpload(t))}const a=[];for(let e=0;e<MAX_SLOTS;e++){const t=o.get(`audio_${e}`);if(!isUploadFormFile(t))break;a.push(await fileToUpload(t))}const s=o.get("editState"),n=o.get("overlay"),i=isUploadFormFile(n)?n:void 0,p=i?Buffer.from(await i.arrayBuffer()):void 0;if(i&&"image/png"!==i.type)return toResponse({ok:!1,status:415,error:"BAD_OVERLAY",message:"overlay 必须是 PNG"});const f=o.get("videoCover"),l=isUploadFormFile(f)?f:void 0,u=l?Buffer.from(await l.arrayBuffer()):void 0;if(l&&!/^image\/(?:png|jpe?g)$/.test(l.type))return toResponse({ok:!1,status:415,error:"BAD_COVER",message:"videoCover must be PNG or JPEG"});const _=[];for(let e=0;e<MAX_SLOTS;e++){const t=o.get(`textOverlay_${e}`);if(!isUploadFormFile(t))break;if("image/png"!==t.type)return toResponse({ok:!1,status:415,error:"BAD_OVERLAY",message:"textOverlay 必须是 PNG"});_.push(Buffer.from(await t.arrayBuffer()))}const d={videos:r,audios:a,overlay:p,videoCover:u,textOverlays:_,editStateRaw:"string"==typeof s?s:""};return toResponse(await e.handle(d))}}function toWebPosterHandler(e){return async t=>{let o;try{o=await t.formData()}catch{return toResponse({ok:!1,status:400,error:"BAD_REQUEST",message:"请求体解析失败"})}const r=o.get("file"),a=o.get("time");return isUploadFormFile(r)&&"string"==typeof a?toResponse(await e.handle(await fileToUpload(r),Number(a))):toResponse({ok:!1,status:400,error:"BAD_REQUEST",message:"缺少 file 或 time"})}}
@@ -1,4 +1,4 @@
1
- import { P as PosterHandler, V as VideoExportHandler } from '../handler-DL4Inp7o.js';
1
+ import { P as PosterHandler, V as VideoExportHandler } from '../handler-BEalyBz9.js';
2
2
 
3
3
  /**
4
4
  * Web 标准适配器(Next.js App Router 路由 / 任何接收 Request 返回 Response 的运行时)。
@@ -1 +1 @@
1
- function e(e){return"object"==typeof e&&null!==e&&"string"==typeof e.type&&"function"==typeof e.arrayBuffer}async function t(e){return{type:e.type,bytes:Buffer.from(await e.arrayBuffer())}}function r(e){return e.ok?new Response(new Uint8Array(e.bytes),{status:200,headers:{"Content-Type":e.contentType,"Content-Disposition":`attachment; filename="${e.filename}"`,"Cache-Control":"no-store"}}):new Response(JSON.stringify({error:e.error,message:e.message}),{status:e.status,headers:{"Content-Type":"application/json"}})}function a(a){return async o=>{let s;try{s=await o.formData()}catch{return r({ok:!1,status:400,error:"BAD_REQUEST",message:"请求体解析失败"})}const n=[];for(let r=0;r<16;r++){const a=s.get(`video_${r}`);if(!e(a))break;n.push(await t(a))}const i=[];for(let r=0;r<16;r++){const a=s.get(`audio_${r}`);if(!e(a))break;i.push(await t(a))}const f=s.get("editState"),u=s.get("overlay"),y=s.get("videoCover"),g=e(u)?u:void 0,p=e(y)?y:void 0,c=g?Buffer.from(await g.arrayBuffer()):void 0,l=p?Buffer.from(await p.arrayBuffer()):void 0,m=[];for(let t=0;t<16;t++){const a=s.get(`textOverlay_${t}`);if(!e(a))break;if("image/png"!==a.type)return r({ok:!1,status:415,error:"BAD_OVERLAY",message:"textOverlay 必须是 PNG"});m.push(Buffer.from(await a.arrayBuffer()))}if(g&&"image/png"!==g.type)return r({ok:!1,status:415,error:"BAD_OVERLAY",message:"overlay 必须是 PNG"});if(p&&!/^image\/(?:png|jpe?g)$/.test(p.type))return r({ok:!1,status:415,error:"BAD_COVER",message:"videoCover 必须是 PNG 或 JPG"});const d={videos:n,audios:i,overlay:c,videoCover:l,textOverlays:m,editStateRaw:"string"==typeof f?f:""};return r(await a.handle(d))}}function o(a){return async o=>{let s;try{s=await o.formData()}catch{return r({ok:!1,status:400,error:"BAD_REQUEST",message:"请求体解析失败"})}const n=s.get("file"),i=s.get("time");return e(n)&&"string"==typeof i?r(await a.handle(await t(n),Number(i))):r({ok:!1,status:400,error:"BAD_REQUEST",message:"缺少 file 或 time"})}}export{o as toWebPosterHandler,a as toWebVideoHandler};
1
+ function e(e){return"object"==typeof e&&null!==e&&"string"==typeof e.type&&"function"==typeof e.arrayBuffer}async function t(e){return{type:e.type,bytes:Buffer.from(await e.arrayBuffer())}}function r(e){return e.ok?new Response(new Uint8Array(e.bytes),{status:200,headers:{"Content-Type":e.contentType,"Content-Disposition":`attachment; filename="${e.filename}"`,"Cache-Control":"no-store"}}):new Response(JSON.stringify({error:e.error,message:e.message}),{status:e.status,headers:{"Content-Type":"application/json"}})}function a(a){return async o=>{let s;try{s=await o.formData()}catch{return r({ok:!1,status:400,error:"BAD_REQUEST",message:"请求体解析失败"})}const n=[];for(let r=0;r<16;r++){const a=s.get(`video_${r}`);if(!e(a))break;n.push(await t(a))}const i=[];for(let r=0;r<16;r++){const a=s.get(`audio_${r}`);if(!e(a))break;i.push(await t(a))}const f=s.get("editState"),u=s.get("overlay"),y=e(u)?u:void 0,c=y?Buffer.from(await y.arrayBuffer()):void 0;if(y&&"image/png"!==y.type)return r({ok:!1,status:415,error:"BAD_OVERLAY",message:"overlay 必须是 PNG"});const g=s.get("videoCover"),p=e(g)?g:void 0,m=p?Buffer.from(await p.arrayBuffer()):void 0;if(p&&!/^image\/(?:png|jpe?g)$/.test(p.type))return r({ok:!1,status:415,error:"BAD_COVER",message:"videoCover must be PNG or JPEG"});const l=[];for(let t=0;t<16;t++){const a=s.get(`textOverlay_${t}`);if(!e(a))break;if("image/png"!==a.type)return r({ok:!1,status:415,error:"BAD_OVERLAY",message:"textOverlay 必须是 PNG"});l.push(Buffer.from(await a.arrayBuffer()))}const v={videos:n,audios:i,overlay:c,videoCover:m,textOverlays:l,editStateRaw:"string"==typeof f?f:""};return r(await a.handle(v))}}function o(a){return async o=>{let s;try{s=await o.formData()}catch{return r({ok:!1,status:400,error:"BAD_REQUEST",message:"请求体解析失败"})}const n=s.get("file"),i=s.get("time");return e(n)&&"string"==typeof i?r(await a.handle(await t(n),Number(i))):r({ok:!1,status:400,error:"BAD_REQUEST",message:"缺少 file 或 time"})}}export{o as toWebPosterHandler,a as toWebVideoHandler};
@@ -16,6 +16,8 @@ interface ParsedVideoExport {
16
16
  videos: UploadFile[];
17
17
  audios: UploadFile[];
18
18
  overlay?: Buffer;
19
+ videoCover?: Buffer;
20
+ textOverlays?: Buffer[];
19
21
  editStateRaw: string;
20
22
  }
21
23
  type ExportOk = {
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var z=Object.create,V=Object.defineProperty,K=Object.getOwnPropertyDescriptor,U=Object.getOwnPropertyNames,J=Object.getPrototypeOf,Q=Object.prototype.hasOwnProperty,W=(e,t,r,o)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of U(t))!Q.call(e,n)&&n!==r&&V(e,n,{get:()=>t[n],enumerable:!(o=K(t,n))||o.enumerable});return e},X=(e,t,r)=>(r=null!=e?z(J(e)):{},W(!t&&e&&e.__esModule?r:V(r,"default",{value:e,enumerable:!0}),e)),Z=Object.create,M=Object.defineProperty,ee=Object.getOwnPropertyDescriptor,te=Object.getOwnPropertyNames,ue=Object.getPrototypeOf,re=Object.prototype.hasOwnProperty,oe=(e,t,r,o)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of te(t))!re.call(e,n)&&n!==r&&M(e,n,{get:()=>t[n],enumerable:!(o=ee(t,n))||o.enumerable});return e},ke=(e,t,r)=>(r=null!=e?Z(ue(e)):{},oe(!t&&e&&e.__esModule?r:M(r,"default",{value:e,enumerable:!0}),e)),ne=Object.create,R=Object.defineProperty,ie=Object.getOwnPropertyDescriptor,ae=Object.getOwnPropertyNames,se=Object.getPrototypeOf,ce=Object.prototype.hasOwnProperty,le=(e,t,r,o)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of ae(t))!ce.call(e,n)&&n!==r&&R(e,n,{get:()=>t[n],enumerable:!(o=ie(t,n))||o.enumerable});return e},Ne=(e,t,r)=>(r=null!=e?ne(se(e)):{},le(!t&&e&&e.__esModule?r:R(r,"default",{value:e,enumerable:!0}),e)),pe=Object.create,I=Object.defineProperty,me=Object.getOwnPropertyDescriptor,fe=Object.getOwnPropertyNames,de=Object.getPrototypeOf,ge=Object.prototype.hasOwnProperty,ye=(e,t,r,o)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of fe(t))!ge.call(e,n)&&n!==r&&I(e,n,{get:()=>t[n],enumerable:!(o=me(t,n))||o.enumerable});return e},qe=(e,t,r)=>(r=null!=e?pe(de(e)):{},ye(!t&&e&&e.__esModule?r:I(r,"default",{value:e,enumerable:!0}),e)),Fe=Object.create,D=Object.defineProperty,we=Object.getOwnPropertyDescriptor,ve=Object.getOwnPropertyNames,Ae=Object.getPrototypeOf,he=Object.prototype.hasOwnProperty,Ee=(e,t)=>{for(var r in t)D(e,r,{get:t[r],enumerable:!0})},L=(e,t,r,o)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let n of ve(t))!he.call(e,n)&&n!==r&&D(e,n,{get:()=>t[n],enumerable:!(o=we(t,n))||o.enumerable});return e},be=(e,t,r)=>(r=null!=e?Fe(Ae(e)):{},L(!t&&e&&e.__esModule?r:D(r,"default",{value:e,enumerable:!0}),e)),Ce=e=>L(D({},"__esModule",{value:!0}),e),k={};Ee(k,{DEFAULT_LIMITS:()=>Y,composeVideo:()=>Pe,createPosterHandler:()=>Ie,createVideoExportHandler:()=>Re,extractAudio:()=>xe,probeHasAudio:()=>P,probeVideoDuration:()=>q,runVideoEdit:()=>$}),module.exports=Ce(k);var j,Oe=require("../core/dist/index.cjs"),N=require("../core/dist/index.cjs"),T=be(require("ffmpeg-static"),1),_=require("child_process"),d=require("fs/promises"),Be=require("fs"),De=require("os"),m=require("path"),_e={};async function je(){const e=[];T.default&&"string"==typeof T.default&&e.push(T.default);try{const{createRequire:t}=await import("module"),r=t(_e.url).resolve("ffmpeg-static/package.json"),o=r.substring(0,r.lastIndexOf("/"));e.push((0,m.join)(o,"ffmpeg"))}catch{}e.push((0,m.join)(process.cwd(),"node_modules","ffmpeg-static","ffmpeg"),(0,m.join)(process.cwd(),"node_modules",".pnpm","ffmpeg-static@5.3.0","node_modules","ffmpeg-static","ffmpeg"));for(const t of e)if(t&&!t.startsWith("/ROOT/"))try{return await(0,d.access)(t,Be.constants.X_OK),t}catch{}return null}async function x(){return void 0!==j||(j=await je())||console.warn("[ffmpeg-runner] ffmpeg-static 二进制未找到 (尝试了多个 fallback 路径)"),j}async function B({args:e,timeoutMs:t=18e4}){const r=await x();if(!r)throw new Error("ffmpeg-static 二进制缺失 — 请检查 node_modules/ffmpeg-static/ffmpeg 是否存在");return console.log("[ffmpeg-runner] args:",JSON.stringify(e)),new Promise((o,n)=>{const i=(0,_.spawn)(r,e,{stdio:["ignore","pipe","pipe"]});let s="",a=!1;const c=setTimeout(()=>{a=!0,i.kill("SIGKILL"),n(new Error(`ffmpeg 超时 (${t}ms)`))},t);i.stderr.on("data",e=>{s+=e.toString(),s.length>8192&&(s=s.slice(-8192))}),i.on("close",e=>{if(clearTimeout(c),a)return;const t=s.slice(-2500);console.log(`[ffmpeg-runner] exit=${e}, stderr tail:\n${t}\n---end---`),0===e?o():n(new Error(`ffmpeg 退出码 ${e}: ${t.slice(-800)}`))}),i.on("error",e=>{clearTimeout(c),n(e)})})}async function O(e){const t=await(0,d.mkdtemp)((0,m.join)((0,De.tmpdir)(),"vtrans-"));try{return await e(t)}finally{(0,d.rm)(t,{recursive:!0,force:!0}).catch(()=>{})}}async function P(e){const t=await x();return!!t&&O(async r=>{const o=(0,m.join)(r,"probe.mp4");return await(0,d.writeFile)(o,e),new Promise(e=>{const r=(0,_.spawn)(t,["-hide_banner","-i",o],{stdio:["ignore","ignore","pipe"]});let n="";const i=setTimeout(()=>{r.kill("SIGKILL"),e(!1)},15e3);r.stderr.on("data",e=>{n+=e.toString(),n.length>16384&&(n=n.slice(-16384))}),r.on("close",()=>{clearTimeout(i),e(/Stream #[^\n]*Audio:/.test(n))}),r.on("error",()=>{clearTimeout(i),e(!1)})})})}async function xe(e){return O(async t=>{const r=(0,m.join)(t,"in.mp4"),o=(0,m.join)(t,"audio.mp3");return await(0,d.writeFile)(r,e),await B({args:["-y","-i",r,"-vn","-acodec","libmp3lame","-ar","16000","-ac","1","-b:a","64k",o],timeoutMs:6e4}),(0,d.readFile)(o)})}var Te=["Fontsize=14","PrimaryColour=&H00FFFFFF","OutlineColour=&H00000000","BackColour=&H80000000","BorderStyle=1","Outline=2","Shadow=0","Alignment=2","MarginV=80","Bold=1"].join(",");async function Pe(e){const t=(await q(e.videoBytes)).durationSeconds;return O(async r=>{const o=(0,m.join)(r,"in.mp4"),n=(0,m.join)(r,"out.mp4");await(0,d.writeFile)(o,e.videoBytes);const i=["-i",o];let s=-1,a=-1;if(e.newAudioBytes){const t=(0,m.join)(r,"new.mp3");await(0,d.writeFile)(t,e.newAudioBytes),s=(i.length-0)/2,i.push("-i",t)}if(e.bgmAudioBytes){const t=(0,m.join)(r,"bgm.mp3");await(0,d.writeFile)(t,e.bgmAudioBytes),a=i.length/2,i.push("-i",t)}const c=e.srtContent&&e.srtContent.trim().length>0;let l=null;c&&(l=(0,m.join)(r,"subs.srt"),await(0,d.writeFile)(l,e.srtContent));const u=e.bgmVolume??.18;console.log(`[ffmpeg-runner] composeVideo: video=${e.videoBytes.length}B (${t.toFixed(2)}s), newAudio=${e.newAudioBytes?.length??0}B, bgm=${e.bgmAudioBytes?.length??0}B@${u}, srt=${e.srtContent?.length??0}chars`);const p=Te.replace(/,/g,"\\,"),f=[];let g,y=!1;c&&l?(f.push(`[0:v]subtitles=${l}:force_style=${p}[v]`),g="[v]",y=!0):g="0:v:0";const w=[];s>=0&&w.push({idx:s,isBgm:!1}),a>=0&&w.push({idx:a,isBgm:!0});let b=null;if(1===w.length)b=`${w[0].idx}:a:0`;else if(w.length>=2){const e=[];for(const t of w)t.isBgm?(f.push(`[${t.idx}:a]volume=${u}[bgm]`),e.push("[bgm]")):e.push(`[${t.idx}:a]`);f.push(`${e.join("")}amix=inputs=${e.length}:duration=first:dropout_transition=0[a]`),b="[a]"}const O=["-y",...i];f.length>0&&O.push("-filter_complex",f.join(";")),O.push("-map",g),b&&O.push("-map",b),y?O.push("-c:v","libx264","-preset","fast","-crf","22","-pix_fmt","yuv420p"):O.push("-c:v","copy"),O.push("-c:a","aac","-b:a","128k","-ar","44100","-ac","2","-movflags","+faststart","-t",t.toFixed(3)),O.push(n),await B({args:O,timeoutMs:18e4});const v=b?await x():null;if(v)try{const e=await new Promise(e=>{const t=(0,_.spawn)(v,["-i",n],{stdio:["ignore","pipe","pipe"]});let r="";t.stderr.on("data",e=>r+=e.toString()),t.on("close",()=>e(r))});if(!/Audio:/.test(e))throw console.error("[ffmpeg-runner] 产物缺少音轨,ffmpeg 流概览:\n",e.slice(-2e3)),new Error("合成失败: 输出 mp4 缺少音轨 (检查 filter_complex 语法)");console.log("[ffmpeg-runner] composeVideo 完成,已含音视频双流")}catch(e){if(e instanceof Error&&e.message.includes("合成失败"))throw e}return(0,d.readFile)(n)})}async function q(e){return O(async t=>{const r=(0,m.join)(t,"in.mp4");await(0,d.writeFile)(r,e);const o=await x();if(!o)throw new Error("ffmpeg-static 二进制缺失");return new Promise((e,t)=>{const n=(0,_.spawn)(o,["-i",r],{stdio:["ignore","pipe","pipe"]});let i="";n.stderr.on("data",e=>i+=e.toString()),n.on("close",()=>{const r=i.match(/Duration:\s*(\d+):(\d+):(\d+(?:\.\d+)?)/);if(!r)return t(new Error("无法解析视频时长"));const o=parseInt(r[1]),n=parseInt(r[2]),s=parseFloat(r[3]);e({durationSeconds:3600*o+60*n+s})}),n.on("error",t)})})}async function $(e,t,r="mp4",o=[],n=24e4){return O(async i=>{const s=(0,m.join)(i,"input.mp4"),a=(0,m.join)(i,`output.${r}`);await(0,d.writeFile)(s,e);const c={};for(const e of o){const t=e.name.replace(/[^a-zA-Z0-9._-]/g,"_"),r=(0,m.join)(i,t);await(0,d.writeFile)(r,e.bytes),c[e.name]=r}return await B({args:t(s,a,c),timeoutMs:n}),(0,d.readFile)(a)})}function $e(e){const t=String(e??"").toLowerCase();return"mp4"===t||"mov"===t}function Se(e,t,r){return["-y","-loop","1","-t","0.04","-i",t,"-i",e,"-filter_complex","[0:v][1:v]scale2ref=w=main_w:h=main_h[vcover][vmainref];[vcover]setsar=1,fps=30,format=yuv420p[vcoverf];[vmainref]setpts=PTS-STARTPTS,fps=30,format=yuv420p[vmain];[vcoverf][vmain]concat=n=2:v=1:a=0[v]","-map","[v]","-map","1:a?","-c:v","libx264","-preset","fast","-crf","18","-pix_fmt","yuv420p","-c:a","copy","-movflags","+faststart",r]}async function Ve(e,t,r="mp4",o=[],n,i=24e4){return O(async s=>{const a=(0,m.join)(s,"input.mp4"),c=(0,m.join)(s,`output.${r}`),l=(0,m.join)(s,"video-cover.png"),u=(0,m.join)(s,`output-with-cover.${r}`);await(0,d.writeFile)(a,e);const p={};for(const e of o){const t=e.name.replace(/[^a-zA-Z0-9._-]/g,"_"),r=(0,m.join)(s,t);await(0,d.writeFile)(r,e.bytes),p[e.name]=r}return await B({args:t(a,c,p),timeoutMs:i}),$e(r)&&n?.length?(await(0,d.writeFile)(l,n),await B({args:Se(c,l,u),timeoutMs:i}),(0,d.readFile)(u)):(0,d.readFile)(c)})}var Y={maxVideos:6,maxAudios:3,maxVideoBytes:104857600,maxTotalVideoBytes:314572800,maxAudioBytes:31457280,maxOverlayBytes:20971520},l=(e,t,r)=>({ok:!1,status:e,error:t,message:r});function G(e){return e.startsWith("video/")?"mp4":e.includes("mpeg")||e.includes("mp3")?"mp3":e.includes("wav")?"wav":e.includes("aac")?"aac":e.includes("ogg")?"ogg":e.includes("mp4")||e.includes("m4a")?"m4a":e.includes("flac")?"flac":"bin"}function Me(e){if(!e?.poster?.useAsVideoCover)return;const t=("string"==typeof e.poster.preview?e.poster.preview:"").match(/^data:image\/(?:png|jpe?g);base64,([a-z0-9+/=]+)$/i);return t?Buffer.from(t[1],"base64"):void 0}function Re(e){const t={...Y,...e?.limits};return{async handle(e){const{videos:r,audios:o,overlay:n,videoCover:i,editStateRaw:s}=e;if(r.length>t.maxVideos)return l(413,"TOO_MANY",`视频数超过 ${t.maxVideos}`);for(let e=0;e<r.length;e++){if(!/^video\//.test(r[e].type))return l(415,"BAD_TYPE",`video_${e} 不是视频文件`);if(r[e].bytes.length>t.maxVideoBytes)return l(413,"TOO_LARGE",`视频 ${e+1} 超过 100MB`)}if(!r.length)return l(400,"BAD_REQUEST","缺少视频文件(video_0)");if(r.reduce((e,t)=>e+t.bytes.length,0)>t.maxTotalVideoBytes)return l(413,"TOO_LARGE","视频总大小超过 300MB,请减少素材或压缩");if(o.length>t.maxAudios)return l(413,"TOO_MANY",`音频数超过 ${t.maxAudios}`);for(let e=0;e<o.length;e++){const r=/^audio\//.test(o[e].type),n=/^video\//.test(o[e].type);if(!r&&!n)return l(415,"BAD_TYPE",`audio_${e} 不是音频或视频文件`);if(o[e].bytes.length>(n?t.maxVideoBytes:t.maxAudioBytes))return l(413,"TOO_LARGE",`音频 ${e+1} 超过 ${n?"100MB":"30MB"}`)}if("string"!=typeof s)return l(400,"BAD_REQUEST","缺少 editState");if(n&&n.length>t.maxOverlayBytes)return l(413,"OVERLAY_TOO_LARGE","overlay 过大");if(i&&i.length>t.maxOverlayBytes)return l(413,"COVER_TOO_LARGE","videoCover 过大");let a;try{a=Oe.VideoEditState.parse(JSON.parse(s))}catch{return l(400,"BAD_STATE","编辑参数不合法")}if(a.clips.some(e=>e.srcIdx>=r.length))return l(400,"BAD_STATE","clips.srcIdx 超出上传视频数");if((a.audioClips??[]).some(e=>e.srcIdx>=o.length))return l(400,"BAD_STATE","audioClips.srcIdx 超出上传音频数");try{const e=r.map(e=>e.bytes),t=o.map(e=>e.bytes),s=[...new Set((a.audioClips??[]).map(e=>e.srcIdx))];for(const e of s)if(/^video\//.test(o[e].type)&&!await P(t[e]))return l(400,"BAD_TYPE",`音频 ${e+1} 是视频文件但没有音轨,无法提取声音`);const c=r.map(()=>!1);if(a.keepAudio){const t=[...new Set(a.clips.map(e=>e.srcIdx))];await Promise.all(t.map(async t=>{c[t]=await P(e[t])})),!c.some(Boolean)&&!(a.audioClips??[]).length&&(a={...a,keepAudio:!1})}const u=[];for(let t=1;t<e.length;t++)u.push({name:`video_${t}.mp4`,bytes:e[t]});t.forEach((e,t)=>u.push({name:`audio_${t}.${G(o[t].type)}`,bytes:e})),n&&u.push({name:"overlay.png",bytes:n});const p=i?.length?i:Me(a),m=(r,i,s)=>{const l={videoPaths:[r,...e.slice(1).map((e,t)=>s[`video_${t+1}.mp4`])],videoHasAudio:c,audioPaths:t.map((e,t)=>s[`audio_${t}.${G(o[t].type)}`]),overlayPath:n?s["overlay.png"]:void 0};return(0,N.buildFfmpegArgs)(a,l,i)};return{ok:!0,bytes:null==p?await $(e[0],m,"mp4",u,28e4):await Ve(e[0],m,"mp4",u,p,28e4),contentType:"video/mp4",filename:"edited.mp4"}}catch(e){return(e.message??"").includes("二进制缺失")?l(503,"SERVER_NOT_READY","服务端编码组件未就绪(ffmpeg 缺失),请联系管理员"):l(502,"ENCODE_FAILED","视频处理失败,请重试或换更短的视频")}}}}function Ie(e){const t=e?.maxBytes??104857600;return{async handle(e,r){if(!/^video\//.test(e.type))return l(415,"BAD_TYPE","只支持视频文件");if(e.bytes.length>t)return l(413,"TOO_LARGE","文件超过 100MB");if(!isFinite(r)||r<0)return l(400,"BAD_TIME","time 参数不合法");try{return{ok:!0,bytes:await $(e.bytes,(e,t)=>(0,N.buildPosterArgs)(e,r,t),"jpg"),contentType:"image/jpeg",filename:"poster.jpg"}}catch(e){return(e.message??"").includes("二进制缺失")?l(503,"SERVER_NOT_READY","服务端编码组件未就绪(ffmpeg 缺失),请联系管理员"):l(502,"EXTRACT_FAILED","封面抽取失败,请重试")}}}}
1
+ "use strict";var __create=Object.create,__defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(e,t)=>{for(var r in t)__defProp(e,r,{get:t[r],enumerable:!0})},__copyProps=(e,t,r,o)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let i of __getOwnPropNames(t))__hasOwnProp.call(e,i)||i===r||__defProp(e,i,{get:()=>t[i],enumerable:!(o=__getOwnPropDesc(t,i))||o.enumerable});return e},__toESM=(e,t,r)=>(r=null!=e?__create(__getProtoOf(e)):{},__copyProps(!t&&e&&e.__esModule?r:__defProp(r,"default",{value:e,enumerable:!0}),e)),__toCommonJS=e=>__copyProps(__defProp({},"__esModule",{value:!0}),e),src_exports={};__export(src_exports,{DEFAULT_LIMITS:()=>DEFAULT_LIMITS,composeVideo:()=>composeVideo,createPosterHandler:()=>createPosterHandler,createVideoExportHandler:()=>createVideoExportHandler,extractAudio:()=>extractAudio,probeHasAudio:()=>probeHasAudio,probeVideoDuration:()=>probeVideoDuration,runVideoEdit:()=>runVideoEdit,runVideoEditWithCover:()=>runVideoEditWithCover}),module.exports=__toCommonJS(src_exports);var _resolvedPath,import_core=require("../core/dist/index.cjs"),import_core2=require("../core/dist/index.cjs"),import_node_child_process=require("child_process"),import_promises=require("fs/promises"),import_node_fs=require("fs"),import_node_os=require("os"),import_node_path=require("path"),import_meta={};async function resolveFfmpegPath(){const e=[],t=t=>{e.push(t),t.toLowerCase().endsWith(".exe")||e.push(`${t}.exe`)};try{const e=(await import("ffmpeg-static")).default;"string"==typeof e&&t(e)}catch{}try{const{createRequire:e}=await import("module"),r=e(import_meta.url).resolve("ffmpeg-static/package.json"),o=Math.max(r.lastIndexOf("/"),r.lastIndexOf("\\")),i=o>=0?r.substring(0,o):r;t((0,import_node_path.join)(i,"ffmpeg"))}catch{}(()=>{let e=process.cwd();for(;;){t((0,import_node_path.join)(e,"node_modules","ffmpeg-static","ffmpeg")),t((0,import_node_path.join)(e,"node_modules",".pnpm","ffmpeg-static@5.3.0","node_modules","ffmpeg-static","ffmpeg"));const r=(0,import_node_path.dirname)(e);if(r===e)break;e=r}})();for(const t of e)if(t&&!t.startsWith("/ROOT/"))try{return await(0,import_promises.access)(t,import_node_fs.constants.X_OK),t}catch{}return null}async function getFfmpegPath(){return void 0!==_resolvedPath||(_resolvedPath=await resolveFfmpegPath())||console.warn("[ffmpeg-runner] ffmpeg-static 二进制未找到 (尝试了多个 fallback 路径)"),_resolvedPath}async function runFfmpeg({args:e,timeoutMs:t=18e4}){const r=await getFfmpegPath();if(!r)throw new Error("ffmpeg-static 二进制缺失 — 请检查 node_modules/ffmpeg-static/ffmpeg 是否存在");return console.log("[ffmpeg-runner] args:",JSON.stringify(e)),new Promise((o,i)=>{const n=(0,import_node_child_process.spawn)(r,e,{stdio:["ignore","pipe","pipe"]});let s="",a=!1;const p=setTimeout(()=>{a=!0,n.kill("SIGKILL"),i(new Error(`ffmpeg 超时 (${t}ms)`))},t);n.stderr.on("data",e=>{s+=e.toString(),s.length>8192&&(s=s.slice(-8192))}),n.on("close",e=>{if(clearTimeout(p),a)return;const t=s.slice(-2500);console.log(`[ffmpeg-runner] exit=${e}, stderr tail:\n${t}\n---end---`),0===e?o():i(new Error(`ffmpeg 退出码 ${e}: ${t.slice(-800)}`))}),n.on("error",e=>{clearTimeout(p),i(e)})})}async function withTempDir(e){const t=await(0,import_promises.mkdtemp)((0,import_node_path.join)((0,import_node_os.tmpdir)(),"vtrans-"));try{return await e(t)}finally{(0,import_promises.rm)(t,{recursive:!0,force:!0}).catch(()=>{})}}async function probeHasAudio(e){const t=await getFfmpegPath();return!!t&&withTempDir(async r=>{const o=(0,import_node_path.join)(r,"probe.mp4");return await(0,import_promises.writeFile)(o,e),new Promise(e=>{const r=(0,import_node_child_process.spawn)(t,["-hide_banner","-i",o],{stdio:["ignore","ignore","pipe"]});let i="";const n=setTimeout(()=>{r.kill("SIGKILL"),e(!1)},15e3);r.stderr.on("data",e=>{i+=e.toString(),i.length>16384&&(i=i.slice(-16384))}),r.on("close",()=>{clearTimeout(n),e(/Stream #[^\n]*Audio:/.test(i))}),r.on("error",()=>{clearTimeout(n),e(!1)})})})}async function extractAudio(e){return withTempDir(async t=>{const r=(0,import_node_path.join)(t,"in.mp4"),o=(0,import_node_path.join)(t,"audio.mp3");return await(0,import_promises.writeFile)(r,e),await runFfmpeg({args:["-y","-i",r,"-vn","-acodec","libmp3lame","-ar","16000","-ac","1","-b:a","64k",o],timeoutMs:6e4}),(0,import_promises.readFile)(o)})}var SUBTITLE_STYLE=["Fontsize=14","PrimaryColour=&H00FFFFFF","OutlineColour=&H00000000","BackColour=&H80000000","BorderStyle=1","Outline=2","Shadow=0","Alignment=2","MarginV=80","Bold=1"].join(",");async function composeVideo(e){const t=(await probeVideoDuration(e.videoBytes)).durationSeconds;return withTempDir(async r=>{const o=(0,import_node_path.join)(r,"in.mp4"),i=(0,import_node_path.join)(r,"out.mp4");await(0,import_promises.writeFile)(o,e.videoBytes);const n=["-i",o];let s=-1,a=-1;if(e.newAudioBytes){const t=(0,import_node_path.join)(r,"new.mp3");await(0,import_promises.writeFile)(t,e.newAudioBytes),s=(n.length-0)/2,n.push("-i",t)}if(e.bgmAudioBytes){const t=(0,import_node_path.join)(r,"bgm.mp3");await(0,import_promises.writeFile)(t,e.bgmAudioBytes),a=n.length/2,n.push("-i",t)}const p=e.srtContent&&e.srtContent.trim().length>0;let m=null;p&&(m=(0,import_node_path.join)(r,"subs.srt"),await(0,import_promises.writeFile)(m,e.srtContent));const c=e.bgmVolume??.18;console.log(`[ffmpeg-runner] composeVideo: video=${e.videoBytes.length}B (${t.toFixed(2)}s), newAudio=${e.newAudioBytes?.length??0}B, bgm=${e.bgmAudioBytes?.length??0}B@${c}, srt=${e.srtContent?.length??0}chars`);const d=SUBTITLE_STYLE.replace(/,/g,"\\,"),u=[];let l,_=!1;p&&m?(u.push(`[0:v]subtitles=${m}:force_style=${d}[v]`),l="[v]",_=!0):l="0:v:0";const f=[];s>=0&&f.push({idx:s,isBgm:!1}),a>=0&&f.push({idx:a,isBgm:!0});let g=null;if(1===f.length)g=`${f[0].idx}:a:0`;else if(f.length>=2){const e=[];for(const t of f)t.isBgm?(u.push(`[${t.idx}:a]volume=${c}[bgm]`),e.push("[bgm]")):e.push(`[${t.idx}:a]`);u.push(`${e.join("")}amix=inputs=${e.length}:duration=first:dropout_transition=0[a]`),g="[a]"}const h=["-y",...n];u.length>0&&h.push("-filter_complex",u.join(";")),h.push("-map",l),g&&h.push("-map",g),_?h.push("-c:v","libx264","-preset","fast","-crf","22","-pix_fmt","yuv420p"):h.push("-c:v","copy"),h.push("-c:a","aac","-b:a","128k","-ar","44100","-ac","2","-movflags","+faststart","-t",t.toFixed(3)),h.push(i),await runFfmpeg({args:h,timeoutMs:18e4});const y=g?await getFfmpegPath():null;if(y)try{const e=await new Promise(e=>{const t=(0,import_node_child_process.spawn)(y,["-i",i],{stdio:["ignore","pipe","pipe"]});let r="";t.stderr.on("data",e=>r+=e.toString()),t.on("close",()=>e(r))});if(!/Audio:/.test(e))throw console.error("[ffmpeg-runner] 产物缺少音轨,ffmpeg 流概览:\n",e.slice(-2e3)),new Error("合成失败: 输出 mp4 缺少音轨 (检查 filter_complex 语法)");console.log("[ffmpeg-runner] composeVideo 完成,已含音视频双流")}catch(e){if(e instanceof Error&&e.message.includes("合成失败"))throw e}return(0,import_promises.readFile)(i)})}async function probeVideoDuration(e){return withTempDir(async t=>{const r=(0,import_node_path.join)(t,"in.mp4");await(0,import_promises.writeFile)(r,e);const o=await getFfmpegPath();if(!o)throw new Error("ffmpeg-static 二进制缺失");return new Promise((e,t)=>{const i=(0,import_node_child_process.spawn)(o,["-i",r],{stdio:["ignore","pipe","pipe"]});let n="";i.stderr.on("data",e=>n+=e.toString()),i.on("close",()=>{const r=n.match(/Duration:\s*(\d+):(\d+):(\d+(?:\.\d+)?)/);if(!r)return t(new Error("无法解析视频时长"));const o=parseInt(r[1]),i=parseInt(r[2]),s=parseFloat(r[3]);e({durationSeconds:3600*o+60*i+s})}),i.on("error",t)})})}async function runVideoEdit(e,t,r="mp4",o=[],i=24e4){return withTempDir(async n=>{const s=(0,import_node_path.join)(n,"input.mp4"),a=(0,import_node_path.join)(n,`output.${r}`);await(0,import_promises.writeFile)(s,e);const p={};for(const e of o){const t=e.name.replace(/[^a-zA-Z0-9._-]/g,"_"),r=(0,import_node_path.join)(n,t);await(0,import_promises.writeFile)(r,e.bytes),p[e.name]=r}return await runFfmpeg({args:t(s,a,p),timeoutMs:i}),(0,import_promises.readFile)(a)})}function canMuxVideoCover(e){const t=String(e||"").toLowerCase();return"mp4"===t||"mov"===t}function coverFileExtFromBytes(e){return e.length>=8&&137===e[0]&&80===e[1]&&78===e[2]&&71===e[3]&&13===e[4]&&10===e[5]&&26===e[6]&&10===e[7]?"png":"jpg"}function coverConcatArgs(e,t,r){return["-y","-fflags","+genpts","-loop","1","-t","0.04","-i",t,"-i",e,"-filter_complex","[0:v][1:v]scale2ref=w=main_w:h=main_h[vcover][vmainref];[vcover]setsar=1,setpts=PTS-STARTPTS,fps=30,format=yuv420p[vcoverf];[vmainref]setsar=1,setpts=PTS-STARTPTS,fps=30,format=yuv420p[vmain];[vcoverf][vmain]concat=n=2:v=1:a=0[v]","-map","[v]","-map","1:a?","-c:v","libx264","-preset","fast","-crf","18","-pix_fmt","yuv420p","-c:a","aac","-b:a","192k","-ar","44100","-ac","2","-movflags","+faststart",r]}async function runVideoEditWithCover(e,t,r="mp4",o=[],i,n=24e4){return withTempDir(async s=>{const a=(0,import_node_path.join)(s,"input.mp4"),p=(0,import_node_path.join)(s,`output.${r}`),m=(0,import_node_path.join)(s,`output-with-cover.${r}`);await(0,import_promises.writeFile)(a,e);const c={};for(const e of o){const t=e.name.replace(/[^a-zA-Z0-9._-]/g,"_"),r=(0,import_node_path.join)(s,t);await(0,import_promises.writeFile)(r,e.bytes),c[e.name]=r}if(await runFfmpeg({args:t(a,p,c),timeoutMs:n}),!i?.length||!canMuxVideoCover(r))return(0,import_promises.readFile)(p);const d=(0,import_node_path.join)(s,`video-cover.${coverFileExtFromBytes(i)}`);return await(0,import_promises.writeFile)(d,i),await runFfmpeg({args:coverConcatArgs(p,d,m),timeoutMs:n}),(0,import_promises.readFile)(m)})}var DEFAULT_LIMITS={maxVideos:6,maxAudios:3,maxVideoBytes:104857600,maxTotalVideoBytes:314572800,maxAudioBytes:31457280,maxOverlayBytes:20971520},err=(e,t,r)=>({ok:!1,status:e,error:t,message:r});function audioExt(e){return e.startsWith("video/")?"mp4":e.includes("mpeg")||e.includes("mp3")?"mp3":e.includes("wav")?"wav":e.includes("aac")?"aac":e.includes("ogg")?"ogg":e.includes("mp4")||e.includes("m4a")?"m4a":e.includes("flac")?"flac":"bin"}function exportFormat(e){const t=String(e.exportSettings?.format??"mp4").toLowerCase();return"mov"===t||"mxf"===t?t:"mp4"}function videoContentType(e){return"mov"===e?"video/quicktime":"mxf"===e?"application/mxf":"video/mp4"}function posterPreviewBytes(e){const t=e.poster;if(!t?.useAsVideoCover)return;const r=("string"==typeof t.preview?t.preview:"string"==typeof t.src?t.src:"").match(/^data:image\/(?:png|jpe?g);base64,([a-z0-9+/=]+)$/i);return r?Buffer.from(r[1],"base64"):void 0}function createVideoExportHandler(e){const t={...DEFAULT_LIMITS,...e?.limits};return{async handle(e){const{videos:r,audios:o,overlay:i,videoCover:n,textOverlays:s=[],editStateRaw:a}=e;if(r.length>t.maxVideos)return err(413,"TOO_MANY",`视频数超过 ${t.maxVideos}`);for(let e=0;e<r.length;e++){if(!/^video\//.test(r[e].type))return err(415,"BAD_TYPE",`video_${e} 不是视频文件`);if(r[e].bytes.length>t.maxVideoBytes)return err(413,"TOO_LARGE",`视频 ${e+1} 超过 100MB`)}if(!r.length)return err(400,"BAD_REQUEST","缺少视频文件(video_0)");if(r.reduce((e,t)=>e+t.bytes.length,0)>t.maxTotalVideoBytes)return err(413,"TOO_LARGE","视频总大小超过 300MB,请减少素材或压缩");if(o.length>t.maxAudios)return err(413,"TOO_MANY",`音频数超过 ${t.maxAudios}`);for(let e=0;e<o.length;e++){const r=/^audio\//.test(o[e].type),i=/^video\//.test(o[e].type);if(!r&&!i)return err(415,"BAD_TYPE",`audio_${e} 不是音频或视频文件`);if(o[e].bytes.length>(i?t.maxVideoBytes:t.maxAudioBytes))return err(413,"TOO_LARGE",`音频 ${e+1} 超过 ${i?"100MB":"30MB"}`)}if("string"!=typeof a)return err(400,"BAD_REQUEST","缺少 editState");if(i&&i.length>t.maxOverlayBytes)return err(413,"OVERLAY_TOO_LARGE","overlay 过大");if(s.some(e=>e.length>t.maxOverlayBytes))return err(413,"OVERLAY_TOO_LARGE","textOverlay 过大");if(n&&n.length>t.maxOverlayBytes)return err(413,"COVER_TOO_LARGE","videoCover too large");let p;try{p=import_core.VideoEditState.parse(JSON.parse(a))}catch{return err(400,"BAD_STATE","编辑参数不合法")}if(p.clips.some(e=>e.srcIdx>=r.length))return err(400,"BAD_STATE","clips.srcIdx 超出上传视频数");if((p.audioClips??[]).some(e=>e.srcIdx>=o.length))return err(400,"BAD_STATE","audioClips.srcIdx 超出上传音频数");try{const e=r.map(e=>e.bytes),t=o.map(e=>e.bytes),a=[...new Set((p.audioClips??[]).map(e=>e.srcIdx))];for(const e of a)if(/^video\//.test(o[e].type)&&!await probeHasAudio(t[e]))return err(400,"BAD_TYPE",`音频 ${e+1} 是视频文件但没有音轨,无法提取声音`);const m=r.map(()=>!1);if(p.keepAudio){const t=[...new Set(p.clips.map(e=>e.srcIdx))];await Promise.all(t.map(async t=>{m[t]=await probeHasAudio(e[t])})),m.some(Boolean)||(p.audioClips??[]).length||(p={...p,keepAudio:!1})}const c=[];for(let t=1;t<e.length;t++)c.push({name:`video_${t}.mp4`,bytes:e[t]});t.forEach((e,t)=>c.push({name:`audio_${t}.${audioExt(o[t].type)}`,bytes:e})),i&&c.push({name:"overlay.png",bytes:i}),s.forEach((e,t)=>c.push({name:`textOverlay_${t}.png`,bytes:e}));const d=exportFormat(p),u=n?.length?n:posterPreviewBytes(p),l=(r,n,a)=>{const c={videoPaths:[r,...e.slice(1).map((e,t)=>a[`video_${t+1}.mp4`])],videoHasAudio:m,audioPaths:t.map((e,t)=>a[`audio_${t}.${audioExt(o[t].type)}`]),overlayPath:i?a["overlay.png"]:void 0,textOverlayPaths:s.map((e,t)=>a[`textOverlay_${t}.png`]).filter(Boolean),overlayLayerPaths:s.map((e,t)=>a[`textOverlay_${t}.png`]).filter(Boolean)};return(0,import_core2.buildFfmpegArgs)(p,c,n)};return{ok:!0,bytes:u?.length?await runVideoEditWithCover(e[0],l,d,c,u,28e4):await runVideoEdit(e[0],l,d,c,28e4),contentType:videoContentType(d),filename:`edited.${d}`}}catch(e){return(e.message??"").includes("二进制缺失")?err(503,"SERVER_NOT_READY","服务端编码组件未就绪(ffmpeg 缺失),请联系管理员"):err(502,"ENCODE_FAILED","视频处理失败,请重试或换更短的视频")}}}}function createPosterHandler(e){const t=e?.maxBytes??104857600;return{async handle(e,r){if(!/^video\//.test(e.type))return err(415,"BAD_TYPE","只支持视频文件");if(e.bytes.length>t)return err(413,"TOO_LARGE","文件超过 100MB");if(!isFinite(r)||r<0)return err(400,"BAD_TIME","time 参数不合法");try{return{ok:!0,bytes:await runVideoEdit(e.bytes,(e,t)=>(0,import_core2.buildPosterArgs)(e,r,t),"jpg"),contentType:"image/jpeg",filename:"poster.jpg"}}catch(e){return(e.message??"").includes("二进制缺失")?err(503,"SERVER_NOT_READY","服务端编码组件未就绪(ffmpeg 缺失),请联系管理员"):err(502,"EXTRACT_FAILED","封面抽取失败,请重试")}}}}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { D as DEFAULT_LIMITS, E as ExportErr, a as ExportLimits, b as ExportOk, c as ExportResult, d as ParsedVideoExport, P as PosterHandler, U as UploadFile, V as VideoExportHandler, e as createPosterHandler, f as createVideoExportHandler } from './handler-DL4Inp7o.js';
1
+ export { D as DEFAULT_LIMITS, E as ExportErr, a as ExportLimits, b as ExportOk, c as ExportResult, d as ParsedVideoExport, P as PosterHandler, U as UploadFile, V as VideoExportHandler, e as createPosterHandler, f as createVideoExportHandler } from './handler-BEalyBz9.js';
2
2
 
3
3
  /**
4
4
  * ffmpeg-runner: 视频/音频处理工具
@@ -55,5 +55,9 @@ extraFiles?: Array<{
55
55
  }>,
56
56
  /** 多源 concat 可能更慢,调用方可放宽(默认 240s 不变) */
57
57
  timeoutMs?: number): Promise<Buffer>;
58
+ declare function runVideoEditWithCover(inputBytes: Buffer, argsFor: (inputPath: string, outputPath: string, extraPaths: Record<string, string>) => string[], outExt?: string, extraFiles?: Array<{
59
+ name: string;
60
+ bytes: Buffer;
61
+ }>, coverBytes?: Buffer, timeoutMs?: number): Promise<Buffer>;
58
62
 
59
- export { type ComposeOptions, type VideoProbe, composeVideo, extractAudio, probeHasAudio, probeVideoDuration, runVideoEdit };
63
+ export { type ComposeOptions, type VideoProbe, composeVideo, extractAudio, probeHasAudio, probeVideoDuration, runVideoEdit, runVideoEditWithCover };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{VideoEditState as e}from"../core/dist/index.js";import{buildFfmpegArgs as t,buildPosterArgs as o}from"../core/dist/index.js";import s from"ffmpeg-static";import{spawn as n}from"child_process";import{writeFile as r,readFile as i,mkdtemp as a,rm as c,access as u}from"fs/promises";import{constants as m}from"fs";import{tmpdir as p}from"os";import{join as l}from"path";var f;async function d(){return void 0!==f||(f=await async function(){const e=[];s&&"string"==typeof s&&e.push(s);try{const{createRequire:t}=await import("module"),o=t(import.meta.url).resolve("ffmpeg-static/package.json"),s=o.substring(0,o.lastIndexOf("/"));e.push(l(s,"ffmpeg"))}catch{}e.push(l(process.cwd(),"node_modules","ffmpeg-static","ffmpeg"),l(process.cwd(),"node_modules",".pnpm","ffmpeg-static@5.3.0","node_modules","ffmpeg-static","ffmpeg"));for(const t of e)if(t&&!t.startsWith("/ROOT/"))try{return await u(t,m.X_OK),t}catch{}return null}())||console.warn("[ffmpeg-runner] ffmpeg-static 二进制未找到 (尝试了多个 fallback 路径)"),f}async function g({args:e,timeoutMs:t=18e4}){const o=await d();if(!o)throw new Error("ffmpeg-static 二进制缺失 — 请检查 node_modules/ffmpeg-static/ffmpeg 是否存在");return console.log("[ffmpeg-runner] args:",JSON.stringify(e)),new Promise((s,r)=>{const i=n(o,e,{stdio:["ignore","pipe","pipe"]});let a="",c=!1;const u=setTimeout(()=>{c=!0,i.kill("SIGKILL"),r(new Error(`ffmpeg 超时 (${t}ms)`))},t);i.stderr.on("data",e=>{a+=e.toString(),a.length>8192&&(a=a.slice(-8192))}),i.on("close",e=>{if(clearTimeout(u),c)return;const t=a.slice(-2500);console.log(`[ffmpeg-runner] exit=${e}, stderr tail:\n${t}\n---end---`),0===e?s():r(new Error(`ffmpeg 退出码 ${e}: ${t.slice(-800)}`))}),i.on("error",e=>{clearTimeout(u),r(e)})})}async function y(e){const t=await a(l(p(),"vtrans-"));try{return await e(t)}finally{c(t,{recursive:!0,force:!0}).catch(()=>{})}}async function v(e){const t=await d();return!!t&&y(async o=>{const s=l(o,"probe.mp4");return await r(s,e),new Promise(e=>{const o=n(t,["-hide_banner","-i",s],{stdio:["ignore","ignore","pipe"]});let r="";const i=setTimeout(()=>{o.kill("SIGKILL"),e(!1)},15e3);o.stderr.on("data",e=>{r+=e.toString(),r.length>16384&&(r=r.slice(-16384))}),o.on("close",()=>{clearTimeout(i),e(/Stream #[^\n]*Audio:/.test(r))}),o.on("error",()=>{clearTimeout(i),e(!1)})})})}async function h(e){return y(async t=>{const o=l(t,"in.mp4"),s=l(t,"audio.mp3");return await r(o,e),await g({args:["-y","-i",o,"-vn","-acodec","libmp3lame","-ar","16000","-ac","1","-b:a","64k",s],timeoutMs:6e4}),i(s)})}var w=["Fontsize=14","PrimaryColour=&H00FFFFFF","OutlineColour=&H00000000","BackColour=&H80000000","BorderStyle=1","Outline=2","Shadow=0","Alignment=2","MarginV=80","Bold=1"].join(",");async function _(e){const t=(await A(e.videoBytes)).durationSeconds;return y(async o=>{const s=l(o,"in.mp4"),a=l(o,"out.mp4");await r(s,e.videoBytes);const c=["-i",s];let u=-1,m=-1;if(e.newAudioBytes){const t=l(o,"new.mp3");await r(t,e.newAudioBytes),u=(c.length-0)/2,c.push("-i",t)}if(e.bgmAudioBytes){const t=l(o,"bgm.mp3");await r(t,e.bgmAudioBytes),m=c.length/2,c.push("-i",t)}const p=e.srtContent&&e.srtContent.trim().length>0;let f=null;p&&(f=l(o,"subs.srt"),await r(f,e.srtContent));const y=e.bgmVolume??.18;console.log(`[ffmpeg-runner] composeVideo: video=${e.videoBytes.length}B (${t.toFixed(2)}s), newAudio=${e.newAudioBytes?.length??0}B, bgm=${e.bgmAudioBytes?.length??0}B@${y}, srt=${e.srtContent?.length??0}chars`);const v=w.replace(/,/g,"\\,"),h=[];let _,A=!1;p&&f?(h.push(`[0:v]subtitles=${f}:force_style=${v}[v]`),_="[v]",A=!0):_="0:v:0";const x=[];u>=0&&x.push({idx:u,isBgm:!1}),m>=0&&x.push({idx:m,isBgm:!0});let B=null;if(1===x.length)B=`${x[0].idx}:a:0`;else if(x.length>=2){const e=[];for(const t of x)t.isBgm?(h.push(`[${t.idx}:a]volume=${y}[bgm]`),e.push("[bgm]")):e.push(`[${t.idx}:a]`);h.push(`${e.join("")}amix=inputs=${e.length}:duration=first:dropout_transition=0[a]`),B="[a]"}const E=["-y",...c];h.length>0&&E.push("-filter_complex",h.join(";")),E.push("-map",_),B&&E.push("-map",B),A?E.push("-c:v","libx264","-preset","fast","-crf","22","-pix_fmt","yuv420p"):E.push("-c:v","copy"),E.push("-c:a","aac","-b:a","128k","-ar","44100","-ac","2","-movflags","+faststart","-t",t.toFixed(3)),E.push(a),await g({args:E,timeoutMs:18e4});const T=B?await d():null;if(T)try{const e=await new Promise(e=>{const t=n(T,["-i",a],{stdio:["ignore","pipe","pipe"]});let o="";t.stderr.on("data",e=>o+=e.toString()),t.on("close",()=>e(o))});if(!/Audio:/.test(e))throw console.error("[ffmpeg-runner] 产物缺少音轨,ffmpeg 流概览:\n",e.slice(-2e3)),new Error("合成失败: 输出 mp4 缺少音轨 (检查 filter_complex 语法)");console.log("[ffmpeg-runner] composeVideo 完成,已含音视频双流")}catch(e){if(e instanceof Error&&e.message.includes("合成失败"))throw e}return i(a)})}async function A(e){return y(async t=>{const o=l(t,"in.mp4");await r(o,e);const s=await d();if(!s)throw new Error("ffmpeg-static 二进制缺失");return new Promise((e,t)=>{const r=n(s,["-i",o],{stdio:["ignore","pipe","pipe"]});let i="";r.stderr.on("data",e=>i+=e.toString()),r.on("close",()=>{const o=i.match(/Duration:\s*(\d+):(\d+):(\d+(?:\.\d+)?)/);if(!o)return t(new Error("无法解析视频时长"));const s=parseInt(o[1]),n=parseInt(o[2]),r=parseFloat(o[3]);e({durationSeconds:3600*s+60*n+r})}),r.on("error",t)})})}async function x(e,t,o="mp4",s=[],n=24e4){return y(async a=>{const c=l(a,"input.mp4"),u=l(a,`output.${o}`);await r(c,e);const m={};for(const e of s){const t=e.name.replace(/[^a-zA-Z0-9._-]/g,"_"),o=l(a,t);await r(o,e.bytes),m[e.name]=o}return await g({args:t(c,u,m),timeoutMs:n}),i(u)})}function B(e,t,o){return["-y","-loop","1","-t","0.04","-i",t,"-i",e,"-filter_complex","[0:v][1:v]scale2ref=w=main_w:h=main_h[vcover][vmainref];[vcover]setsar=1,fps=30,format=yuv420p[vcoverf];[vmainref]setpts=PTS-STARTPTS,fps=30,format=yuv420p[vmain];[vcoverf][vmain]concat=n=2:v=1:a=0[v]","-map","[v]","-map","1:a?","-c:v","libx264","-preset","fast","-crf","18","-pix_fmt","yuv420p","-c:a","copy","-movflags","+faststart",o]}async function E(e,t,o="mp4",s=[],n,a=24e4){return y(async c=>{const u=l(c,"input.mp4"),m=l(c,`output.${o}`),p=l(c,"video-cover.png"),f=l(c,`output-with-cover.${o}`);await r(u,e);const d={};for(const e of s){const t=e.name.replace(/[^a-zA-Z0-9._-]/g,"_"),o=l(c,t);await r(o,e.bytes),d[e.name]=o}return await g({args:t(u,m,d),timeoutMs:a}),function(e){const t=String(e??"").toLowerCase();return"mp4"===t||"mov"===t}(o)&&n?.length?(await r(p,n),await g({args:B(m,p,f),timeoutMs:a}),i(f)):i(m)})}var T={maxVideos:6,maxAudios:3,maxVideoBytes:104857600,maxTotalVideoBytes:314572800,maxAudioBytes:31457280,maxOverlayBytes:20971520},b=(e,t,o)=>({ok:!1,status:e,error:t,message:o});function O(e){return e.startsWith("video/")?"mp4":e.includes("mpeg")||e.includes("mp3")?"mp3":e.includes("wav")?"wav":e.includes("aac")?"aac":e.includes("ogg")?"ogg":e.includes("mp4")||e.includes("m4a")?"m4a":e.includes("flac")?"flac":"bin"}function $(e){return"mov"===e?"video/quicktime":"mxf"===e?"application/mxf":"video/mp4"}function S(o){const s={...T,...o?.limits};return{async handle(o){const{videos:n,audios:r,overlay:i,videoCover:a,textOverlays:c=[],editStateRaw:u}=o;if(n.length>s.maxVideos)return b(413,"TOO_MANY",`视频数超过 ${s.maxVideos}`);for(let e=0;e<n.length;e++){if(!/^video\//.test(n[e].type))return b(415,"BAD_TYPE",`video_${e} 不是视频文件`);if(n[e].bytes.length>s.maxVideoBytes)return b(413,"TOO_LARGE",`视频 ${e+1} 超过 100MB`)}if(!n.length)return b(400,"BAD_REQUEST","缺少视频文件(video_0)");if(n.reduce((e,t)=>e+t.bytes.length,0)>s.maxTotalVideoBytes)return b(413,"TOO_LARGE","视频总大小超过 300MB,请减少素材或压缩");if(r.length>s.maxAudios)return b(413,"TOO_MANY",`音频数超过 ${s.maxAudios}`);for(let e=0;e<r.length;e++){const t=/^audio\//.test(r[e].type),o=/^video\//.test(r[e].type);if(!t&&!o)return b(415,"BAD_TYPE",`audio_${e} 不是音频或视频文件`);if(r[e].bytes.length>(o?s.maxVideoBytes:s.maxAudioBytes))return b(413,"TOO_LARGE",`音频 ${e+1} 超过 ${o?"100MB":"30MB"}`)}if("string"!=typeof u)return b(400,"BAD_REQUEST","缺少 editState");if(i&&i.length>s.maxOverlayBytes)return b(413,"OVERLAY_TOO_LARGE","overlay 过大");if(a&&a.length>s.maxOverlayBytes)return b(413,"COVER_TOO_LARGE","videoCover 过大");if(c.some(e=>e.length>s.maxOverlayBytes))return b(413,"OVERLAY_TOO_LARGE","textOverlay 过大");let m;try{m=e.parse(JSON.parse(u))}catch{return b(400,"BAD_STATE","编辑参数不合法")}if(m.clips.some(e=>e.srcIdx>=n.length))return b(400,"BAD_STATE","clips.srcIdx 超出上传视频数");if((m.audioClips??[]).some(e=>e.srcIdx>=r.length))return b(400,"BAD_STATE","audioClips.srcIdx 超出上传音频数");try{const e=n.map(e=>e.bytes),o=r.map(e=>e.bytes),s=[...new Set((m.audioClips??[]).map(e=>e.srcIdx))];for(const e of s)if(/^video\//.test(r[e].type)&&!await v(o[e]))return b(400,"BAD_TYPE",`音频 ${e+1} 是视频文件但没有音轨,无法提取声音`);const u=n.map(()=>!1);if(m.keepAudio){const t=[...new Set(m.clips.map(e=>e.srcIdx))];await Promise.all(t.map(async t=>{u[t]=await v(e[t])})),!u.some(Boolean)&&!(m.audioClips??[]).length&&(m={...m,keepAudio:!1})}const p=[];for(let t=1;t<e.length;t++)p.push({name:`video_${t}.mp4`,bytes:e[t]});o.forEach((e,t)=>p.push({name:`audio_${t}.${O(r[t].type)}`,bytes:e})),i&&p.push({name:"overlay.png",bytes:i}),c.forEach((e,t)=>p.push({name:`textOverlay_${t}.png`,bytes:e}));const l=function(e){const t=String(e??"mp4").toLowerCase();return"mov"===t||"mxf"===t?t:"mp4"}(m.exportSettings?.format),f=a?.length?a:function(e){if(!e?.poster?.useAsVideoCover)return;const t=("string"==typeof e.poster.preview?e.poster.preview:"").match(/^data:image\/(?:png|jpe?g);base64,([a-z0-9+/=]+)$/i);return t?Buffer.from(t[1],"base64"):void 0}(m),d=(s,n,a)=>{const p={videoPaths:[s,...e.slice(1).map((e,t)=>a[`video_${t+1}.mp4`])],videoHasAudio:u,audioPaths:o.map((e,t)=>a[`audio_${t}.${O(r[t].type)}`]),overlayPath:i?a["overlay.png"]:void 0,textOverlayPaths:c.map((e,t)=>a[`textOverlay_${t}.png`]).filter(Boolean)};return t(m,p,n)};return{ok:!0,bytes:null==f?await x(e[0],d,l,p,28e4):await E(e[0],d,l,p,f,28e4),contentType:$(l),filename:`edited.${l}`}}catch(e){return(e.message??"").includes("二进制缺失")?b(503,"SERVER_NOT_READY","服务端编码组件未就绪(ffmpeg 缺失),请联系管理员"):b(502,"ENCODE_FAILED","视频处理失败,请重试或换更短的视频")}}}}function R(e){const t=e?.maxBytes??104857600;return{async handle(e,s){if(!/^video\//.test(e.type))return b(415,"BAD_TYPE","只支持视频文件");if(e.bytes.length>t)return b(413,"TOO_LARGE","文件超过 100MB");if(!isFinite(s)||s<0)return b(400,"BAD_TIME","time 参数不合法");try{return{ok:!0,bytes:await x(e.bytes,(e,t)=>o(e,s,t),"jpg"),contentType:"image/jpeg",filename:"poster.jpg"}}catch(e){return(e.message??"").includes("二进制缺失")?b(503,"SERVER_NOT_READY","服务端编码组件未就绪(ffmpeg 缺失),请联系管理员"):b(502,"EXTRACT_FAILED","封面抽取失败,请重试")}}}}export{T as DEFAULT_LIMITS,_ as composeVideo,R as createPosterHandler,S as createVideoExportHandler,h as extractAudio,v as probeHasAudio,A as probeVideoDuration,x as runVideoEdit};
1
+ import{VideoEditState as e}from"../core/dist/index.js";import{buildFfmpegArgs as t,buildPosterArgs as o}from"../core/dist/index.js";import{spawn as n}from"child_process";import{writeFile as r,readFile as s,mkdtemp as a,rm as i,access as c}from"fs/promises";import{constants as m}from"fs";import{tmpdir as u}from"os";import{dirname as p,join as l}from"path";var f;async function d(){return void 0!==f||(f=await async function(){const e=[],t=t=>{e.push(t),t.toLowerCase().endsWith(".exe")||e.push(`${t}.exe`)};try{const e=(await import("ffmpeg-static")).default;"string"==typeof e&&t(e)}catch{}try{const{createRequire:e}=await import("module"),o=e(import.meta.url).resolve("ffmpeg-static/package.json"),n=Math.max(o.lastIndexOf("/"),o.lastIndexOf("\\")),r=n>=0?o.substring(0,n):o;t(l(r,"ffmpeg"))}catch{}(()=>{let e=process.cwd();for(;;){t(l(e,"node_modules","ffmpeg-static","ffmpeg")),t(l(e,"node_modules",".pnpm","ffmpeg-static@5.3.0","node_modules","ffmpeg-static","ffmpeg"));const o=p(e);if(o===e)break;e=o}})();for(const t of e)if(t&&!t.startsWith("/ROOT/"))try{return await c(t,m.X_OK),t}catch{}return null}())||console.warn("[ffmpeg-runner] ffmpeg-static 二进制未找到 (尝试了多个 fallback 路径)"),f}async function g({args:e,timeoutMs:t=18e4}){const o=await d();if(!o)throw new Error("ffmpeg-static 二进制缺失 — 请检查 node_modules/ffmpeg-static/ffmpeg 是否存在");return console.log("[ffmpeg-runner] args:",JSON.stringify(e)),new Promise((r,s)=>{const a=n(o,e,{stdio:["ignore","pipe","pipe"]});let i="",c=!1;const m=setTimeout(()=>{c=!0,a.kill("SIGKILL"),s(new Error(`ffmpeg 超时 (${t}ms)`))},t);a.stderr.on("data",e=>{i+=e.toString(),i.length>8192&&(i=i.slice(-8192))}),a.on("close",e=>{if(clearTimeout(m),c)return;const t=i.slice(-2500);console.log(`[ffmpeg-runner] exit=${e}, stderr tail:\n${t}\n---end---`),0===e?r():s(new Error(`ffmpeg 退出码 ${e}: ${t.slice(-800)}`))}),a.on("error",e=>{clearTimeout(m),s(e)})})}async function y(e){const t=await a(l(u(),"vtrans-"));try{return await e(t)}finally{i(t,{recursive:!0,force:!0}).catch(()=>{})}}async function v(e){const t=await d();return!!t&&y(async o=>{const s=l(o,"probe.mp4");return await r(s,e),new Promise(e=>{const o=n(t,["-hide_banner","-i",s],{stdio:["ignore","ignore","pipe"]});let r="";const a=setTimeout(()=>{o.kill("SIGKILL"),e(!1)},15e3);o.stderr.on("data",e=>{r+=e.toString(),r.length>16384&&(r=r.slice(-16384))}),o.on("close",()=>{clearTimeout(a),e(/Stream #[^\n]*Audio:/.test(r))}),o.on("error",()=>{clearTimeout(a),e(!1)})})})}async function h(e){return y(async t=>{const o=l(t,"in.mp4"),n=l(t,"audio.mp3");return await r(o,e),await g({args:["-y","-i",o,"-vn","-acodec","libmp3lame","-ar","16000","-ac","1","-b:a","64k",n],timeoutMs:6e4}),s(n)})}var w=["Fontsize=14","PrimaryColour=&H00FFFFFF","OutlineColour=&H00000000","BackColour=&H80000000","BorderStyle=1","Outline=2","Shadow=0","Alignment=2","MarginV=80","Bold=1"].join(",");async function x(e){const t=(await _(e.videoBytes)).durationSeconds;return y(async o=>{const a=l(o,"in.mp4"),i=l(o,"out.mp4");await r(a,e.videoBytes);const c=["-i",a];let m=-1,u=-1;if(e.newAudioBytes){const t=l(o,"new.mp3");await r(t,e.newAudioBytes),m=(c.length-0)/2,c.push("-i",t)}if(e.bgmAudioBytes){const t=l(o,"bgm.mp3");await r(t,e.bgmAudioBytes),u=c.length/2,c.push("-i",t)}const p=e.srtContent&&e.srtContent.trim().length>0;let f=null;p&&(f=l(o,"subs.srt"),await r(f,e.srtContent));const y=e.bgmVolume??.18;console.log(`[ffmpeg-runner] composeVideo: video=${e.videoBytes.length}B (${t.toFixed(2)}s), newAudio=${e.newAudioBytes?.length??0}B, bgm=${e.bgmAudioBytes?.length??0}B@${y}, srt=${e.srtContent?.length??0}chars`);const v=w.replace(/,/g,"\\,"),h=[];let x,_=!1;p&&f?(h.push(`[0:v]subtitles=${f}:force_style=${v}[v]`),x="[v]",_=!0):x="0:v:0";const A=[];m>=0&&A.push({idx:m,isBgm:!1}),u>=0&&A.push({idx:u,isBgm:!0});let B=null;if(1===A.length)B=`${A[0].idx}:a:0`;else if(A.length>=2){const e=[];for(const t of A)t.isBgm?(h.push(`[${t.idx}:a]volume=${y}[bgm]`),e.push("[bgm]")):e.push(`[${t.idx}:a]`);h.push(`${e.join("")}amix=inputs=${e.length}:duration=first:dropout_transition=0[a]`),B="[a]"}const T=["-y",...c];h.length>0&&T.push("-filter_complex",h.join(";")),T.push("-map",x),B&&T.push("-map",B),_?T.push("-c:v","libx264","-preset","fast","-crf","22","-pix_fmt","yuv420p"):T.push("-c:v","copy"),T.push("-c:a","aac","-b:a","128k","-ar","44100","-ac","2","-movflags","+faststart","-t",t.toFixed(3)),T.push(i),await g({args:T,timeoutMs:18e4});const O=B?await d():null;if(O)try{const e=await new Promise(e=>{const t=n(O,["-i",i],{stdio:["ignore","pipe","pipe"]});let o="";t.stderr.on("data",e=>o+=e.toString()),t.on("close",()=>e(o))});if(!/Audio:/.test(e))throw console.error("[ffmpeg-runner] 产物缺少音轨,ffmpeg 流概览:\n",e.slice(-2e3)),new Error("合成失败: 输出 mp4 缺少音轨 (检查 filter_complex 语法)");console.log("[ffmpeg-runner] composeVideo 完成,已含音视频双流")}catch(e){if(e instanceof Error&&e.message.includes("合成失败"))throw e}return s(i)})}async function _(e){return y(async t=>{const o=l(t,"in.mp4");await r(o,e);const s=await d();if(!s)throw new Error("ffmpeg-static 二进制缺失");return new Promise((e,t)=>{const r=n(s,["-i",o],{stdio:["ignore","pipe","pipe"]});let a="";r.stderr.on("data",e=>a+=e.toString()),r.on("close",()=>{const o=a.match(/Duration:\s*(\d+):(\d+):(\d+(?:\.\d+)?)/);if(!o)return t(new Error("无法解析视频时长"));const n=parseInt(o[1]),r=parseInt(o[2]),s=parseFloat(o[3]);e({durationSeconds:3600*n+60*r+s})}),r.on("error",t)})})}async function A(e,t,o="mp4",n=[],a=24e4){return y(async i=>{const c=l(i,"input.mp4"),m=l(i,`output.${o}`);await r(c,e);const u={};for(const e of n){const t=e.name.replace(/[^a-zA-Z0-9._-]/g,"_"),o=l(i,t);await r(o,e.bytes),u[e.name]=o}return await g({args:t(c,m,u),timeoutMs:a}),s(m)})}function B(e,t,o){return["-y","-fflags","+genpts","-loop","1","-t","0.04","-i",t,"-i",e,"-filter_complex","[0:v][1:v]scale2ref=w=main_w:h=main_h[vcover][vmainref];[vcover]setsar=1,setpts=PTS-STARTPTS,fps=30,format=yuv420p[vcoverf];[vmainref]setsar=1,setpts=PTS-STARTPTS,fps=30,format=yuv420p[vmain];[vcoverf][vmain]concat=n=2:v=1:a=0[v]","-map","[v]","-map","1:a?","-c:v","libx264","-preset","fast","-crf","18","-pix_fmt","yuv420p","-c:a","aac","-b:a","192k","-ar","44100","-ac","2","-movflags","+faststart",o]}async function T(e,t,o="mp4",n=[],a,i=24e4){return y(async c=>{const m=l(c,"input.mp4"),u=l(c,`output.${o}`),p=l(c,`output-with-cover.${o}`);await r(m,e);const f={};for(const e of n){const t=e.name.replace(/[^a-zA-Z0-9._-]/g,"_"),o=l(c,t);await r(o,e.bytes),f[e.name]=o}if(await g({args:t(m,u,f),timeoutMs:i}),!a?.length||!function(e){const t=String(e||"").toLowerCase();return"mp4"===t||"mov"===t}(o))return s(u);const d=l(c,"video-cover."+((y=a).length>=8&&137===y[0]&&80===y[1]&&78===y[2]&&71===y[3]&&13===y[4]&&10===y[5]&&26===y[6]&&10===y[7]?"png":"jpg"));var y;return await r(d,a),await g({args:B(u,d,p),timeoutMs:i}),s(p)})}var O={maxVideos:6,maxAudios:3,maxVideoBytes:104857600,maxTotalVideoBytes:314572800,maxAudioBytes:31457280,maxOverlayBytes:20971520},E=(e,t,o)=>({ok:!1,status:e,error:t,message:o});function $(e){return e.startsWith("video/")?"mp4":e.includes("mpeg")||e.includes("mp3")?"mp3":e.includes("wav")?"wav":e.includes("aac")?"aac":e.includes("ogg")?"ogg":e.includes("mp4")||e.includes("m4a")?"m4a":e.includes("flac")?"flac":"bin"}function b(o){const n={...O,...o?.limits};return{async handle(o){const{videos:r,audios:s,overlay:a,videoCover:i,textOverlays:c=[],editStateRaw:m}=o;if(r.length>n.maxVideos)return E(413,"TOO_MANY",`视频数超过 ${n.maxVideos}`);for(let e=0;e<r.length;e++){if(!/^video\//.test(r[e].type))return E(415,"BAD_TYPE",`video_${e} 不是视频文件`);if(r[e].bytes.length>n.maxVideoBytes)return E(413,"TOO_LARGE",`视频 ${e+1} 超过 100MB`)}if(!r.length)return E(400,"BAD_REQUEST","缺少视频文件(video_0)");if(r.reduce((e,t)=>e+t.bytes.length,0)>n.maxTotalVideoBytes)return E(413,"TOO_LARGE","视频总大小超过 300MB,请减少素材或压缩");if(s.length>n.maxAudios)return E(413,"TOO_MANY",`音频数超过 ${n.maxAudios}`);for(let e=0;e<s.length;e++){const t=/^audio\//.test(s[e].type),o=/^video\//.test(s[e].type);if(!t&&!o)return E(415,"BAD_TYPE",`audio_${e} 不是音频或视频文件`);if(s[e].bytes.length>(o?n.maxVideoBytes:n.maxAudioBytes))return E(413,"TOO_LARGE",`音频 ${e+1} 超过 ${o?"100MB":"30MB"}`)}if("string"!=typeof m)return E(400,"BAD_REQUEST","缺少 editState");if(a&&a.length>n.maxOverlayBytes)return E(413,"OVERLAY_TOO_LARGE","overlay 过大");if(c.some(e=>e.length>n.maxOverlayBytes))return E(413,"OVERLAY_TOO_LARGE","textOverlay 过大");if(i&&i.length>n.maxOverlayBytes)return E(413,"COVER_TOO_LARGE","videoCover too large");let u;try{u=e.parse(JSON.parse(m))}catch{return E(400,"BAD_STATE","编辑参数不合法")}if(u.clips.some(e=>e.srcIdx>=r.length))return E(400,"BAD_STATE","clips.srcIdx 超出上传视频数");if((u.audioClips??[]).some(e=>e.srcIdx>=s.length))return E(400,"BAD_STATE","audioClips.srcIdx 超出上传音频数");try{const e=r.map(e=>e.bytes),o=s.map(e=>e.bytes),n=[...new Set((u.audioClips??[]).map(e=>e.srcIdx))];for(const e of n)if(/^video\//.test(s[e].type)&&!await v(o[e]))return E(400,"BAD_TYPE",`音频 ${e+1} 是视频文件但没有音轨,无法提取声音`);const m=r.map(()=>!1);if(u.keepAudio){const t=[...new Set(u.clips.map(e=>e.srcIdx))];await Promise.all(t.map(async t=>{m[t]=await v(e[t])})),m.some(Boolean)||(u.audioClips??[]).length||(u={...u,keepAudio:!1})}const l=[];for(let t=1;t<e.length;t++)l.push({name:`video_${t}.mp4`,bytes:e[t]});o.forEach((e,t)=>l.push({name:`audio_${t}.${$(s[t].type)}`,bytes:e})),a&&l.push({name:"overlay.png",bytes:a}),c.forEach((e,t)=>l.push({name:`textOverlay_${t}.png`,bytes:e}));const f=function(e){const t=String(e.exportSettings?.format??"mp4").toLowerCase();return"mov"===t||"mxf"===t?t:"mp4"}(u),d=i?.length?i:function(e){const t=e.poster;if(!t?.useAsVideoCover)return;const o=("string"==typeof t.preview?t.preview:"string"==typeof t.src?t.src:"").match(/^data:image\/(?:png|jpe?g);base64,([a-z0-9+/=]+)$/i);return o?Buffer.from(o[1],"base64"):void 0}(u),g=(n,r,i)=>{const p={videoPaths:[n,...e.slice(1).map((e,t)=>i[`video_${t+1}.mp4`])],videoHasAudio:m,audioPaths:o.map((e,t)=>i[`audio_${t}.${$(s[t].type)}`]),overlayPath:a?i["overlay.png"]:void 0,textOverlayPaths:c.map((e,t)=>i[`textOverlay_${t}.png`]).filter(Boolean),overlayLayerPaths:c.map((e,t)=>i[`textOverlay_${t}.png`]).filter(Boolean)};return t(u,p,r)};return{ok:!0,bytes:d?.length?await T(e[0],g,f,l,d,28e4):await A(e[0],g,f,l,28e4),contentType:(p=f,"mov"===p?"video/quicktime":"mxf"===p?"application/mxf":"video/mp4"),filename:`edited.${f}`}}catch(e){return(e.message??"").includes("二进制缺失")?E(503,"SERVER_NOT_READY","服务端编码组件未就绪(ffmpeg 缺失),请联系管理员"):E(502,"ENCODE_FAILED","视频处理失败,请重试或换更短的视频")}var p}}}function S(e){const t=e?.maxBytes??104857600;return{async handle(e,n){if(!/^video\//.test(e.type))return E(415,"BAD_TYPE","只支持视频文件");if(e.bytes.length>t)return E(413,"TOO_LARGE","文件超过 100MB");if(!isFinite(n)||n<0)return E(400,"BAD_TIME","time 参数不合法");try{return{ok:!0,bytes:await A(e.bytes,(e,t)=>o(e,n,t),"jpg"),contentType:"image/jpeg",filename:"poster.jpg"}}catch(e){return(e.message??"").includes("二进制缺失")?E(503,"SERVER_NOT_READY","服务端编码组件未就绪(ffmpeg 缺失),请联系管理员"):E(502,"EXTRACT_FAILED","封面抽取失败,请重试")}}}}export{O as DEFAULT_LIMITS,x as composeVideo,S as createPosterHandler,b as createVideoExportHandler,h as extractAudio,v as probeHasAudio,_ as probeVideoDuration,A as runVideoEdit,T as runVideoEditWithCover};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bylqwjc/media-editor-server",
3
- "version": "1.0.22",
3
+ "version": "1.0.23",
4
4
  "description": "媒体编辑器服务端:框架无关的视频导出/封面处理器 + Web(Next)/Express 适配器(Node + ffmpeg-static)",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1 +0,0 @@
1
- import{z as t}from"../zod/index.js";var e={color:t.string().max(32),width:t.number().positive().max(200)},n={rotation:t.number().min(-180).max(180).optional()},a={startAt:t.number().min(0).optional(),endAt:t.number().min(0).optional(),timelineTrack:t.number().int().min(0).max(99).optional()},i=t.discriminatedUnion("type",[t.object({type:t.literal("pen"),points:t.array(t.number()).min(4),...e,...a,...n}),t.object({type:t.literal("line"),x1:t.number(),y1:t.number(),x2:t.number(),y2:t.number(),...e,...a,...n}),t.object({type:t.literal("arrow"),x1:t.number(),y1:t.number(),x2:t.number(),y2:t.number(),...e,...a,...n}),t.object({type:t.literal("rect"),x:t.number(),y:t.number(),w:t.number(),h:t.number(),...e,...a,...n}),t.object({type:t.literal("ellipse"),x:t.number(),y:t.number(),w:t.number(),h:t.number(),...e,...a,...n}),t.object({type:t.literal("text"),x:t.number(),y:t.number(),text:t.string().max(500),color:t.string().max(32),fontSize:t.number().positive().max(512),startAt:t.number().min(0).optional(),endAt:t.number().min(0).optional(),timelineTrack:t.number().int().min(0).max(99).optional(),...n}),t.object({type:t.literal("sticker"),x:t.number().optional(),y:t.number().optional(),w:t.number().positive().optional(),h:t.number().positive().optional(),emoji:t.string().max(16).optional(),src:t.string().optional(),startAt:t.number().min(0).optional(),endAt:t.number().min(0).optional(),timelineTrack:t.number().int().min(0).max(99).optional(),...n}),t.object({type:t.literal("filter"),x:t.number().optional(),y:t.number().optional(),w:t.number().positive().optional(),h:t.number().positive().optional(),filterPreset:t.string().max(32).optional(),...a,...n}),t.object({type:t.literal("adjust"),x:t.number(),y:t.number(),w:t.number().positive(),h:t.number().positive(),brightness:t.number().min(-1).max(1).default(0),contrast:t.number().min(-1).max(1).default(0),saturation:t.number().min(-1).max(1).default(0),temperature:t.number().min(-1).max(1).default(0),tint:t.number().min(-1).max(1).default(0),vibrance:t.number().min(-1).max(1).default(0),gamma:t.number().min(-1).max(1).default(0),highlights:t.number().min(-1).max(1).default(0),shadows:t.number().min(-1).max(1).default(0),whites:t.number().min(-1).max(1).default(0),blacks:t.number().min(-1).max(1).default(0),lightSense:t.number().min(-1).max(1).default(0),sharpen:t.number().min(0).max(1).default(0),clarity:t.number().min(0).max(1).default(0),grain:t.number().min(0).max(1).default(0),fade:t.number().min(0).max(1).default(0),vignette:t.number().min(0).max(1).default(0),...a,...n})]),r=t.object({srcIdx:t.number().int().min(0).max(7),in:t.number().min(0),out:t.number().min(0)}),m=t.object({srcIdx:t.number().int().min(0).max(2),track:t.number().int().min(0).default(0),startAt:t.number().min(0),in:t.number().min(0),out:t.number().min(0),speed:t.number().min(.5).max(2).default(1),volume:t.number().min(0).max(2),fadeIn:t.number().min(0).default(0),fadeOut:t.number().min(0).default(0)}),u=t.object({type:t.enum(["none","fade","slide","wipe","flip","clockWipe","star","circle","rectangle"]).default("none"),duration:t.number().min(0).max(2).default(.4)}),o=t.object({fileName:t.string().max(120).optional(),format:t.enum(["mp4","mov","mxf"]).default("mp4"),width:t.number().int().min(2).max(8192).optional(),height:t.number().int().min(2).max(8192).optional(),frameRate:t.number().int().min(12).max(120).default(30),videoBitrateKbps:t.number().int().min(100).max(5e4).optional(),audioBitrateKbps:t.number().int().min(32).max(1024).optional(),audioCodec:t.enum(["aac","mp3"]).default("aac")}).optional(),s=t.object({clips:t.array(r).min(1).max(50),audioClips:t.array(m).max(8).default([]),canvas:t.object({w:t.number().int().min(2).max(4096),h:t.number().int().min(2).max(4096)}),crop:t.object({x:t.number().min(0),y:t.number().min(0),width:t.number().positive(),height:t.number().positive()}).optional(),scale:t.object({width:t.number().positive(),height:t.number().positive(),fit:t.enum(["contain","cover","force"])}).optional(),rotation:t.number().min(-180).max(180).default(0),flipX:t.boolean().default(!1),flipY:t.boolean().default(!1),filters:t.object({brightness:t.number().min(-1).max(1).default(0),contrast:t.number().min(-1).max(1).default(0),saturation:t.number().min(-1).max(1).default(0),temperature:t.number().min(-1).max(1).default(0),tint:t.number().min(-1).max(1).default(0),vibrance:t.number().min(-1).max(1).default(0),gamma:t.number().min(-1).max(1).default(0),highlights:t.number().min(-1).max(1).default(0),shadows:t.number().min(-1).max(1).default(0),whites:t.number().min(-1).max(1).default(0),blacks:t.number().min(-1).max(1).default(0),lightSense:t.number().min(-1).max(1).default(0),sharpen:t.number().min(0).max(1).default(0),clarity:t.number().min(0).max(1).default(0),grain:t.number().min(0).max(1).default(0),fade:t.number().min(0).max(1).default(0),vignette:t.number().min(0).max(1).default(0)}).default({brightness:0,contrast:0,saturation:0,temperature:0,tint:0,vibrance:0,gamma:0,highlights:0,shadows:0,whites:0,blacks:0,lightSense:0,sharpen:0,clarity:0,grain:0,fade:0,vignette:0}),filterPreset:t.string().max(32).optional(),overlays:t.array(i).max(200).optional(),transitions:t.array(u).max(49).default([]),keepAudio:t.boolean().default(!0),poster:t.object({time:t.number().min(0),useAsVideoCover:t.boolean().optional(),preview:t.string().optional()}).optional(),exportSettings:o}).superRefine((e,n)=>{e.clips.forEach((e,a)=>{e.out<=e.in&&n.addIssue({code:t.ZodIssueCode.custom,message:`clips[${a}].out 必须大于 in`,path:["clips",a,"out"]})}),e.audioClips?.forEach((e,a)=>{e.out<=e.in&&n.addIssue({code:t.ZodIssueCode.custom,message:`audioClips[${a}].out 必须大于 in`,path:["audioClips",a,"out"]})}),(e.canvas.w%2!=0||e.canvas.h%2!=0)&&n.addIssue({code:t.ZodIssueCode.custom,message:"canvas 宽高必须为偶数",path:["canvas"]}),null!=e.exportSettings?.width&&e.exportSettings.width%2!=0&&n.addIssue({code:t.ZodIssueCode.custom,message:"exportSettings.width 必须为偶数",path:["exportSettings","width"]}),null!=e.exportSettings?.height&&e.exportSettings.height%2!=0&&n.addIssue({code:t.ZodIssueCode.custom,message:"exportSettings.height 必须为偶数",path:["exportSettings","height"]})});function l(){return{clips:[],audioClips:[],canvas:{w:2,h:2},rotation:0,flipX:!1,flipY:!1,filters:{brightness:0,contrast:0,saturation:0,temperature:0,tint:0,vibrance:0,gamma:0,highlights:0,shadows:0,whites:0,blacks:0,lightSense:0,sharpen:0,clarity:0,grain:0,fade:0,vignette:0},transitions:[],keepAudio:!0}}var p=.1;function c(t){return t.out-t.in}function d(t){return t.reduce((t,e)=>t+c(e),0)}function b(t,e){let n=0;for(let a=0;a<e&&a<t.length;a++)n+=c(t[a]);return n}function f(t,e){if(!t.length||e<0)return null;let n=0;for(let a=0;a<t.length;a++){const i=c(t[a]);if(e<n+i)return{idx:a,srcTime:t[a].in+(e-n)};n+=i}if(Math.abs(e-n)<1e-9||e<=n){const e=t.length-1;return{idx:e,srcTime:t[e].out}}return null}function x(t,e){const n=f(t,e);if(!n)return t;const a=t[n.idx];return n.srcTime<a.in+p||n.srcTime>a.out-p?t:[...t.slice(0,n.idx),{...a,out:n.srcTime},{...a,in:n.srcTime},...t.slice(n.idx+1)]}function h(t,e){return t.length<=1||!t[e]?t:t.filter((t,n)=>n!==e)}function g(t,e){const n=t[e];return n?[...t.slice(0,e+1),{...n},...t.slice(e+1)]:t}function v(t,e,n){if(e===n||!t[e]||n<0||n>=t.length)return t;const a=[...t],[i]=a.splice(e,1);return a.splice(n,0,i),a}function y(t,e,n,a,i){if(!t[e])return t;const r=t.map(t=>({...t}));return"in"===n?r[e].in=Math.min(Math.max(a,0),r[e].out-p):r[e].out=Math.max(Math.min(a,i),r[e].in+p),r}function w(t,e,n){const a=Math.max(Math.min(t.out,e),p),i=Math.min(Math.max(t.in,0),a-p),r=Math.min(Math.max(t.startAt,0),Math.max(0,n-p)),m=Math.max(p,a-i),u=Math.min(Math.max(Number(t.speed)||1,.5),2),o=Number.isInteger(t.track)&&t.track>=0?t.track:0,s=Math.min(Math.max(Number(t.fadeIn)||0,0),m),l=Math.min(Math.max(Number(t.fadeOut)||0,0),Math.max(0,m-s));return{...t,track:o,in:i,out:a,startAt:r,speed:u,fadeIn:s,fadeOut:l}}function M(t,e=[],n=[]){const a=d(t),i=e.reduce((t,e)=>Math.max(t,e.startAt+(e.out-e.in)),0),r=function(t=[]){return(t??[]).reduce((t,e)=>{if("text"!==e?.type&&"sticker"!==e?.type)return t;const n=Number.isFinite(e?.startAt)?Math.max(0,Number(e.startAt)):0,a=Number.isFinite(e?.endAt)?Math.max(n,Number(e.endAt)):n;return Math.max(t,a)},0)}(n);return Math.max(a,i,r)}function I(t){return[...new Set(t.map(t=>t.srcIdx))].sort((t,e)=>t-e)}function j(t,e){const n=new Map(e.map((t,e)=>[t,e]));return t.map(t=>({...t,srcIdx:n.get(t.srcIdx)??0}))}function A(t){return{past:[],present:t,future:[]}}function C(t,e){if(e===t.present)return t;const n=[...t.past,t.present];return n.length>100&&n.shift(),{past:n,present:e,future:[]}}function S(t,e){return e===t.present?t:{...t,present:e}}function k(t){return t.past.length>0}function N(t){return t.future.length>0}function T(t){return k(t)?{past:t.past.slice(0,-1),present:t.past[t.past.length-1],future:[t.present,...t.future]}:t}function O(t){if(!N(t))return t;const[e,...n]=t.future;return{past:[...t.past,t.present],present:e,future:n}}export{m as AudioClip,r as Clip,p as MIN_CLIP,i as Overlay,s as VideoEditState,N as canRedo,k as canUndo,w as clampAudioClip,c as clipDuration,b as clipStartsAt,M as contentDuration,A as createHistory,l as defaultVideoEditState,g as duplicateClip,f as locateOutput,C as pushHistory,O as redo,j as remapSrcIndices,h as removeClip,v as reorderClips,S as replacePresent,x as splitAtOutput,d as totalDuration,y as trimClipEdge,T as undo,I as usedVideoSrcIndices};
@@ -1 +0,0 @@
1
- var t=Math.PI/180;function a(a,n,s){const r=h(s);if(0===r||180===r)return{w:a,h:n};if(90===r||270===r)return{w:n,h:a};const e=r*t;return{w:Math.round(Math.abs(a*Math.cos(e))+Math.abs(n*Math.sin(e))),h:Math.round(Math.abs(a*Math.sin(e))+Math.abs(n*Math.cos(e)))}}function h(t){return(t%360+360)%360}function n(t){const a=Math.round(t);return a-a%2}function s(t,a,h=40){const n=Math.min(Math.max(h,t.width),a.w),s=Math.min(Math.max(h,t.height),a.h),r=Math.min(Math.max(0,t.x),a.w-n),e=Math.min(Math.max(0,t.y),a.h-s);return{x:Math.round(r),y:Math.round(e),width:Math.round(n),height:Math.round(s)}}function r(t,a){let h=t.w,n=h/a;return n>t.h&&(n=t.h,h=n*a),{x:Math.round((t.w-h)/2),y:Math.round((t.h-n)/2),width:Math.round(h),height:Math.round(n)}}function e(t,a,h){const n={x:0,y:0,width:t.width,height:t.height},s={x:0,y:0,width:a.w,height:a.h};return"cover"===h?{src:r({w:t.width,h:t.height},a.w/a.h),dst:s}:"contain"===h?{src:n,dst:r({w:a.w,h:a.h},t.width/t.height)}:{src:n,dst:s}}function i(t,h){if(h.scale)return{w:n(h.scale.width),h:n(h.scale.height)};if(h.crop)return{w:n(h.crop.width),h:n(h.crop.height)};const s=a(t.w,t.h,h.rotation);return{w:n(s.w),h:n(s.h)}}var o=[{id:"bw",label:"黑白",vf:"hue=s=0",css:"grayscale(1)"},{id:"sepia",label:"复古",vf:"colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131",css:"sepia(0.85)"},{id:"warm",label:"暖阳",vf:"colorbalance=rs=.15:gs=.04:bs=-.15",css:"sepia(0.25) saturate(1.25) brightness(1.03)"},{id:"cool",label:"冷调",vf:"colorbalance=rs=-.14:bs=.16",css:"hue-rotate(12deg) saturate(0.95) brightness(1.02)"},{id:"vivid",label:"鲜艳",vf:"eq=saturation=1.45:contrast=1.08",css:"saturate(1.45) contrast(1.08)"}];function c(t){return t?o.find(a=>a.id===t):void 0}function u(t,a){const h=c(a)?.css??"";return[`brightness(${1+t.brightness})`,`contrast(${1+t.contrast})`,`saturate(${1+t.saturation})`,h].filter(Boolean).join(" ")}export{t as DEG2RAD,o as FILTER_PRESETS,u as buildFilterCss,r as centeredMaxRect,s as clampRect,n as evenize,c as findFilterPreset,e as fitRects,h as normalizeDeg,i as outputSize,a as rotatedSize};