@inkly-org/cli 0.6.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- var Io=Object.defineProperty;var Po=(t,e)=>{for(var n in e)Io(t,n,{get:e[n],enumerable:!0})};import ih from"mri";import{existsSync as Zr,statSync as oh}from"fs";import{isAbsolute as sh,join as po,resolve as lh}from"path";import{Buffer as wd}from"buffer";import{mkdir as Ja,writeFile as vd,access as Sd}from"fs/promises";import{dirname as _d,join as Cd,resolve as Td,sep as Za}from"path";var l={};Po(l,{BRAND:()=>ts,DIRTY:()=>We,EMPTY_PATH:()=>Do,INVALID:()=>S,NEVER:()=>Us,OK:()=>G,ParseStatus:()=>Z,Schema:()=>A,ZodAny:()=>De,ZodArray:()=>ve,ZodBigInt:()=>Je,ZodBoolean:()=>Ze,ZodBranded:()=>Vt,ZodCatch:()=>at,ZodDate:()=>Ge,ZodDefault:()=>rt,ZodDiscriminatedUnion:()=>cn,ZodEffects:()=>se,ZodEnum:()=>tt,ZodError:()=>Q,ZodFirstPartyTypeKind:()=>_,ZodFunction:()=>pn,ZodIntersection:()=>Xe,ZodIssueCode:()=>m,ZodLazy:()=>Qe,ZodLiteral:()=>et,ZodMap:()=>wt,ZodNaN:()=>St,ZodNativeEnum:()=>nt,ZodNever:()=>de,ZodNull:()=>Ke,ZodNullable:()=>me,ZodNumber:()=>Ve,ZodObject:()=>ee,ZodOptional:()=>ie,ZodParsedType:()=>b,ZodPipeline:()=>Jt,ZodPromise:()=>je,ZodReadonly:()=>it,ZodRecord:()=>un,ZodSchema:()=>A,ZodSet:()=>vt,ZodString:()=>$e,ZodSymbol:()=>xt,ZodTransformer:()=>se,ZodTuple:()=>he,ZodType:()=>A,ZodUndefined:()=>qe,ZodUnion:()=>Ye,ZodUnknown:()=>we,ZodVoid:()=>kt,addIssueToContext:()=>f,any:()=>cs,array:()=>ms,bigint:()=>is,boolean:()=>oa,coerce:()=>zs,custom:()=>ra,date:()=>os,datetimeRegex:()=>ta,defaultErrorMap:()=>xe,discriminatedUnion:()=>ys,effect:()=>Es,enum:()=>As,function:()=>_s,getErrorMap:()=>gt,getParsedType:()=>pe,instanceof:()=>rs,intersection:()=>xs,isAborted:()=>ln,isAsync:()=>bt,isDirty:()=>dn,isValid:()=>Re,late:()=>ns,lazy:()=>Cs,literal:()=>Ts,makeIssue:()=>Wt,map:()=>vs,nan:()=>as,nativeEnum:()=>Is,never:()=>ps,null:()=>ds,nullable:()=>$s,number:()=>ia,object:()=>fs,objectUtil:()=>Fn,oboolean:()=>Ls,onumber:()=>Ns,optional:()=>Rs,ostring:()=>Os,pipeline:()=>js,preprocess:()=>Ds,promise:()=>Ps,quotelessJson:()=>Eo,record:()=>ws,set:()=>Ss,setErrorMap:()=>$o,strictObject:()=>gs,string:()=>aa,symbol:()=>ss,transformer:()=>Es,tuple:()=>ks,undefined:()=>ls,union:()=>bs,unknown:()=>us,util:()=>P,void:()=>hs});var P;(function(t){t.assertEqual=a=>{};function e(a){}t.assertIs=e;function n(a){throw new Error}t.assertNever=n,t.arrayToEnum=a=>{let i={};for(let o of a)i[o]=o;return i},t.getValidEnumValues=a=>{let i=t.objectKeys(a).filter(s=>typeof a[a[s]]!="number"),o={};for(let s of i)o[s]=a[s];return t.objectValues(o)},t.objectValues=a=>t.objectKeys(a).map(function(i){return a[i]}),t.objectKeys=typeof Object.keys=="function"?a=>Object.keys(a):a=>{let i=[];for(let o in a)Object.prototype.hasOwnProperty.call(a,o)&&i.push(o);return i},t.find=(a,i)=>{for(let o of a)if(i(o))return o},t.isInteger=typeof Number.isInteger=="function"?a=>Number.isInteger(a):a=>typeof a=="number"&&Number.isFinite(a)&&Math.floor(a)===a;function r(a,i=" | "){return a.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}t.joinValues=r,t.jsonStringifyReplacer=(a,i)=>typeof i=="bigint"?i.toString():i})(P||(P={}));var Fn;(function(t){t.mergeShapes=(e,n)=>({...e,...n})})(Fn||(Fn={}));var b=P.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),pe=t=>{switch(typeof t){case"undefined":return b.undefined;case"string":return b.string;case"number":return Number.isNaN(t)?b.nan:b.number;case"boolean":return b.boolean;case"function":return b.function;case"bigint":return b.bigint;case"symbol":return b.symbol;case"object":return Array.isArray(t)?b.array:t===null?b.null:t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?b.promise:typeof Map<"u"&&t instanceof Map?b.map:typeof Set<"u"&&t instanceof Set?b.set:typeof Date<"u"&&t instanceof Date?b.date:b.object;default:return b.unknown}};var m=P.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),Eo=t=>JSON.stringify(t,null,2).replace(/"([^"]+)":/g,"$1:"),Q=class t extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};let n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=e}format(e){let n=e||function(i){return i.message},r={_errors:[]},a=i=>{for(let o of i.issues)if(o.code==="invalid_union")o.unionErrors.map(a);else if(o.code==="invalid_return_type")a(o.returnTypeError);else if(o.code==="invalid_arguments")a(o.argumentsError);else if(o.path.length===0)r._errors.push(n(o));else{let s=r,c=0;for(;c<o.path.length;){let d=o.path[c];c===o.path.length-1?(s[d]=s[d]||{_errors:[]},s[d]._errors.push(n(o))):s[d]=s[d]||{_errors:[]},s=s[d],c++}}};return a(this),r}static assert(e){if(!(e instanceof t))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,P.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=n=>n.message){let n={},r=[];for(let a of this.issues)if(a.path.length>0){let i=a.path[0];n[i]=n[i]||[],n[i].push(e(a))}else r.push(e(a));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}};Q.create=t=>new Q(t);var Ro=(t,e)=>{let n;switch(t.code){case m.invalid_type:t.received===b.undefined?n="Required":n=`Expected ${t.expected}, received ${t.received}`;break;case m.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(t.expected,P.jsonStringifyReplacer)}`;break;case m.unrecognized_keys:n=`Unrecognized key(s) in object: ${P.joinValues(t.keys,", ")}`;break;case m.invalid_union:n="Invalid input";break;case m.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${P.joinValues(t.options)}`;break;case m.invalid_enum_value:n=`Invalid enum value. Expected ${P.joinValues(t.options)}, received '${t.received}'`;break;case m.invalid_arguments:n="Invalid function arguments";break;case m.invalid_return_type:n="Invalid function return type";break;case m.invalid_date:n="Invalid date";break;case m.invalid_string:typeof t.validation=="object"?"includes"in t.validation?(n=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${t.validation.position}`)):"startsWith"in t.validation?n=`Invalid input: must start with "${t.validation.startsWith}"`:"endsWith"in t.validation?n=`Invalid input: must end with "${t.validation.endsWith}"`:P.assertNever(t.validation):t.validation!=="regex"?n=`Invalid ${t.validation}`:n="Invalid";break;case m.too_small:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="bigint"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`:n="Invalid input";break;case m.too_big:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="bigint"?n=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`:n="Invalid input";break;case m.custom:n="Invalid input";break;case m.invalid_intersection_types:n="Intersection results could not be merged";break;case m.not_multiple_of:n=`Number must be a multiple of ${t.multipleOf}`;break;case m.not_finite:n="Number must be finite";break;default:n=e.defaultError,P.assertNever(t)}return{message:n}},xe=Ro;var Kr=xe;function $o(t){Kr=t}function gt(){return Kr}var Wt=t=>{let{data:e,path:n,errorMaps:r,issueData:a}=t,i=[...n,...a.path||[]],o={...a,path:i};if(a.message!==void 0)return{...a,path:i,message:a.message};let s="",c=r.filter(d=>!!d).slice().reverse();for(let d of c)s=d(o,{data:e,defaultError:s}).message;return{...a,path:i,message:s}},Do=[];function f(t,e){let n=gt(),r=Wt({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,n,n===xe?void 0:xe].filter(a=>!!a)});t.common.issues.push(r)}var Z=class t{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,n){let r=[];for(let a of n){if(a.status==="aborted")return S;a.status==="dirty"&&e.dirty(),r.push(a.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,n){let r=[];for(let a of n){let i=await a.key,o=await a.value;r.push({key:i,value:o})}return t.mergeObjectSync(e,r)}static mergeObjectSync(e,n){let r={};for(let a of n){let{key:i,value:o}=a;if(i.status==="aborted"||o.status==="aborted")return S;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||a.alwaysSet)&&(r[i.value]=o.value)}return{status:e.value,value:r}}},S=Object.freeze({status:"aborted"}),We=t=>({status:"dirty",value:t}),G=t=>({status:"valid",value:t}),ln=t=>t.status==="aborted",dn=t=>t.status==="dirty",Re=t=>t.status==="valid",bt=t=>typeof Promise<"u"&&t instanceof Promise;var x;(function(t){t.errToObj=e=>typeof e=="string"?{message:e}:e||{},t.toString=e=>typeof e=="string"?e:e?.message})(x||(x={}));var oe=class{constructor(e,n,r,a){this._cachedPath=[],this.parent=e,this.data=n,this._path=r,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}},Yr=(t,e)=>{if(Re(e))return{success:!0,data:e.value};if(!t.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let n=new Q(t.common.issues);return this._error=n,this._error}}};function T(t){if(!t)return{};let{errorMap:e,invalid_type_error:n,required_error:r,description:a}=t;if(e&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:a}:{errorMap:(o,s)=>{let{message:c}=t;return o.code==="invalid_enum_value"?{message:c??s.defaultError}:typeof s.data>"u"?{message:c??r??s.defaultError}:o.code!=="invalid_type"?{message:s.defaultError}:{message:c??n??s.defaultError}},description:a}}var A=class{get description(){return this._def.description}_getType(e){return pe(e.data)}_getOrReturnCtx(e,n){return n||{common:e.parent.common,data:e.data,parsedType:pe(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new Z,ctx:{common:e.parent.common,data:e.data,parsedType:pe(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let n=this._parse(e);if(bt(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(e){let n=this._parse(e);return Promise.resolve(n)}parse(e,n){let r=this.safeParse(e,n);if(r.success)return r.data;throw r.error}safeParse(e,n){let r={common:{issues:[],async:n?.async??!1,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:pe(e)},a=this._parseSync({data:e,path:r.path,parent:r});return Yr(r,a)}"~validate"(e){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:pe(e)};if(!this["~standard"].async)try{let r=this._parseSync({data:e,path:[],parent:n});return Re(r)?{value:r.value}:{issues:n.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),n.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:n}).then(r=>Re(r)?{value:r.value}:{issues:n.common.issues})}async parseAsync(e,n){let r=await this.safeParseAsync(e,n);if(r.success)return r.data;throw r.error}async safeParseAsync(e,n){let r={common:{issues:[],contextualErrorMap:n?.errorMap,async:!0},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:pe(e)},a=this._parse({data:e,path:r.path,parent:r}),i=await(bt(a)?a:Promise.resolve(a));return Yr(r,i)}refine(e,n){let r=a=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(a):n;return this._refinement((a,i)=>{let o=e(a),s=()=>i.addIssue({code:m.custom,...r(a)});return typeof Promise<"u"&&o instanceof Promise?o.then(c=>c?!0:(s(),!1)):o?!0:(s(),!1)})}refinement(e,n){return this._refinement((r,a)=>e(r)?!0:(a.addIssue(typeof n=="function"?n(r,a):n),!1))}_refinement(e){return new se({schema:this,typeName:_.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:n=>this["~validate"](n)}}optional(){return ie.create(this,this._def)}nullable(){return me.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return ve.create(this)}promise(){return je.create(this,this._def)}or(e){return Ye.create([this,e],this._def)}and(e){return Xe.create(this,e,this._def)}transform(e){return new se({...T(this._def),schema:this,typeName:_.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let n=typeof e=="function"?e:()=>e;return new rt({...T(this._def),innerType:this,defaultValue:n,typeName:_.ZodDefault})}brand(){return new Vt({typeName:_.ZodBranded,type:this,...T(this._def)})}catch(e){let n=typeof e=="function"?e:()=>e;return new at({...T(this._def),innerType:this,catchValue:n,typeName:_.ZodCatch})}describe(e){let n=this.constructor;return new n({...this._def,description:e})}pipe(e){return Jt.create(this,e)}readonly(){return it.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},jo=/^c[^\s-]{8,}$/i,Oo=/^[0-9a-z]+$/,No=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Lo=/^[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,zo=/^[a-z0-9_-]{21}$/i,Uo=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Mo=/^[-+]?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)?)??$/,Fo=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Ho="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",Hn,Bo=/^(?:(?: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])$/,Wo=/^(?:(?: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])$/,Vo=/^(([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]))$/,Jo=/^(([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])$/,Zo=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Go=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Qr="((\\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])))",qo=new RegExp(`^${Qr}$`);function ea(t){let e="[0-5]\\d";t.precision?e=`${e}\\.\\d{${t.precision}}`:t.precision==null&&(e=`${e}(\\.\\d+)?`);let n=t.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${n}`}function Ko(t){return new RegExp(`^${ea(t)}$`)}function ta(t){let e=`${Qr}T${ea(t)}`,n=[];return n.push(t.local?"Z?":"Z"),t.offset&&n.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${n.join("|")})`,new RegExp(`^${e}$`)}function Yo(t,e){return!!((e==="v4"||!e)&&Bo.test(t)||(e==="v6"||!e)&&Vo.test(t))}function Xo(t,e){if(!Uo.test(t))return!1;try{let[n]=t.split(".");if(!n)return!1;let r=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),a=JSON.parse(atob(r));return!(typeof a!="object"||a===null||"typ"in a&&a?.typ!=="JWT"||!a.alg||e&&a.alg!==e)}catch{return!1}}function Qo(t,e){return!!((e==="v4"||!e)&&Wo.test(t)||(e==="v6"||!e)&&Jo.test(t))}var $e=class t extends A{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==b.string){let i=this._getOrReturnCtx(e);return f(i,{code:m.invalid_type,expected:b.string,received:i.parsedType}),S}let r=new Z,a;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(a=this._getOrReturnCtx(e,a),f(a,{code:m.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="max")e.data.length>i.value&&(a=this._getOrReturnCtx(e,a),f(a,{code:m.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="length"){let o=e.data.length>i.value,s=e.data.length<i.value;(o||s)&&(a=this._getOrReturnCtx(e,a),o?f(a,{code:m.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):s&&f(a,{code:m.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),r.dirty())}else if(i.kind==="email")Fo.test(e.data)||(a=this._getOrReturnCtx(e,a),f(a,{validation:"email",code:m.invalid_string,message:i.message}),r.dirty());else if(i.kind==="emoji")Hn||(Hn=new RegExp(Ho,"u")),Hn.test(e.data)||(a=this._getOrReturnCtx(e,a),f(a,{validation:"emoji",code:m.invalid_string,message:i.message}),r.dirty());else if(i.kind==="uuid")Lo.test(e.data)||(a=this._getOrReturnCtx(e,a),f(a,{validation:"uuid",code:m.invalid_string,message:i.message}),r.dirty());else if(i.kind==="nanoid")zo.test(e.data)||(a=this._getOrReturnCtx(e,a),f(a,{validation:"nanoid",code:m.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid")jo.test(e.data)||(a=this._getOrReturnCtx(e,a),f(a,{validation:"cuid",code:m.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid2")Oo.test(e.data)||(a=this._getOrReturnCtx(e,a),f(a,{validation:"cuid2",code:m.invalid_string,message:i.message}),r.dirty());else if(i.kind==="ulid")No.test(e.data)||(a=this._getOrReturnCtx(e,a),f(a,{validation:"ulid",code:m.invalid_string,message:i.message}),r.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{a=this._getOrReturnCtx(e,a),f(a,{validation:"url",code:m.invalid_string,message:i.message}),r.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(a=this._getOrReturnCtx(e,a),f(a,{validation:"regex",code:m.invalid_string,message:i.message}),r.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(a=this._getOrReturnCtx(e,a),f(a,{code:m.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),r.dirty()):i.kind==="toLowerCase"?e.data=e.data.toLowerCase():i.kind==="toUpperCase"?e.data=e.data.toUpperCase():i.kind==="startsWith"?e.data.startsWith(i.value)||(a=this._getOrReturnCtx(e,a),f(a,{code:m.invalid_string,validation:{startsWith:i.value},message:i.message}),r.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(a=this._getOrReturnCtx(e,a),f(a,{code:m.invalid_string,validation:{endsWith:i.value},message:i.message}),r.dirty()):i.kind==="datetime"?ta(i).test(e.data)||(a=this._getOrReturnCtx(e,a),f(a,{code:m.invalid_string,validation:"datetime",message:i.message}),r.dirty()):i.kind==="date"?qo.test(e.data)||(a=this._getOrReturnCtx(e,a),f(a,{code:m.invalid_string,validation:"date",message:i.message}),r.dirty()):i.kind==="time"?Ko(i).test(e.data)||(a=this._getOrReturnCtx(e,a),f(a,{code:m.invalid_string,validation:"time",message:i.message}),r.dirty()):i.kind==="duration"?Mo.test(e.data)||(a=this._getOrReturnCtx(e,a),f(a,{validation:"duration",code:m.invalid_string,message:i.message}),r.dirty()):i.kind==="ip"?Yo(e.data,i.version)||(a=this._getOrReturnCtx(e,a),f(a,{validation:"ip",code:m.invalid_string,message:i.message}),r.dirty()):i.kind==="jwt"?Xo(e.data,i.alg)||(a=this._getOrReturnCtx(e,a),f(a,{validation:"jwt",code:m.invalid_string,message:i.message}),r.dirty()):i.kind==="cidr"?Qo(e.data,i.version)||(a=this._getOrReturnCtx(e,a),f(a,{validation:"cidr",code:m.invalid_string,message:i.message}),r.dirty()):i.kind==="base64"?Zo.test(e.data)||(a=this._getOrReturnCtx(e,a),f(a,{validation:"base64",code:m.invalid_string,message:i.message}),r.dirty()):i.kind==="base64url"?Go.test(e.data)||(a=this._getOrReturnCtx(e,a),f(a,{validation:"base64url",code:m.invalid_string,message:i.message}),r.dirty()):P.assertNever(i);return{status:r.value,value:e.data}}_regex(e,n,r){return this.refinement(a=>e.test(a),{validation:n,code:m.invalid_string,...x.errToObj(r)})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...x.errToObj(e)})}url(e){return this._addCheck({kind:"url",...x.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...x.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...x.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...x.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...x.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...x.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...x.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...x.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...x.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...x.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...x.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...x.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,...x.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,...x.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...x.errToObj(e)})}regex(e,n){return this._addCheck({kind:"regex",regex:e,...x.errToObj(n)})}includes(e,n){return this._addCheck({kind:"includes",value:e,position:n?.position,...x.errToObj(n?.message)})}startsWith(e,n){return this._addCheck({kind:"startsWith",value:e,...x.errToObj(n)})}endsWith(e,n){return this._addCheck({kind:"endsWith",value:e,...x.errToObj(n)})}min(e,n){return this._addCheck({kind:"min",value:e,...x.errToObj(n)})}max(e,n){return this._addCheck({kind:"max",value:e,...x.errToObj(n)})}length(e,n){return this._addCheck({kind:"length",value:e,...x.errToObj(n)})}nonempty(e){return this.min(1,x.errToObj(e))}trim(){return new t({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxLength(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};$e.create=t=>new $e({checks:[],typeName:_.ZodString,coerce:t?.coerce??!1,...T(t)});function es(t,e){let n=(t.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,a=n>r?n:r,i=Number.parseInt(t.toFixed(a).replace(".","")),o=Number.parseInt(e.toFixed(a).replace(".",""));return i%o/10**a}var Ve=class t extends A{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)!==b.number){let i=this._getOrReturnCtx(e);return f(i,{code:m.invalid_type,expected:b.number,received:i.parsedType}),S}let r,a=new Z;for(let i of this._def.checks)i.kind==="int"?P.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),f(r,{code:m.invalid_type,expected:"integer",received:"float",message:i.message}),a.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),f(r,{code:m.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),a.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(r=this._getOrReturnCtx(e,r),f(r,{code:m.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),a.dirty()):i.kind==="multipleOf"?es(e.data,i.value)!==0&&(r=this._getOrReturnCtx(e,r),f(r,{code:m.not_multiple_of,multipleOf:i.value,message:i.message}),a.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),f(r,{code:m.not_finite,message:i.message}),a.dirty()):P.assertNever(i);return{status:a.value,value:e.data}}gte(e,n){return this.setLimit("min",e,!0,x.toString(n))}gt(e,n){return this.setLimit("min",e,!1,x.toString(n))}lte(e,n){return this.setLimit("max",e,!0,x.toString(n))}lt(e,n){return this.setLimit("max",e,!1,x.toString(n))}setLimit(e,n,r,a){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:x.toString(a)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:x.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:x.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:x.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:x.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:x.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:x.toString(n)})}finite(e){return this._addCheck({kind:"finite",message:x.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:x.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:x.toString(e)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&P.isInteger(e.value))}get isFinite(){let e=null,n=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value)}return Number.isFinite(n)&&Number.isFinite(e)}};Ve.create=t=>new Ve({checks:[],typeName:_.ZodNumber,coerce:t?.coerce||!1,...T(t)});var Je=class t extends A{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)!==b.bigint)return this._getInvalidInput(e);let r,a=new Z;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),f(r,{code:m.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),a.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(r=this._getOrReturnCtx(e,r),f(r,{code:m.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),a.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),f(r,{code:m.not_multiple_of,multipleOf:i.value,message:i.message}),a.dirty()):P.assertNever(i);return{status:a.value,value:e.data}}_getInvalidInput(e){let n=this._getOrReturnCtx(e);return f(n,{code:m.invalid_type,expected:b.bigint,received:n.parsedType}),S}gte(e,n){return this.setLimit("min",e,!0,x.toString(n))}gt(e,n){return this.setLimit("min",e,!1,x.toString(n))}lte(e,n){return this.setLimit("max",e,!0,x.toString(n))}lt(e,n){return this.setLimit("max",e,!1,x.toString(n))}setLimit(e,n,r,a){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:x.toString(a)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:x.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:x.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:x.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:x.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:x.toString(n)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};Je.create=t=>new Je({checks:[],typeName:_.ZodBigInt,coerce:t?.coerce??!1,...T(t)});var Ze=class extends A{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==b.boolean){let r=this._getOrReturnCtx(e);return f(r,{code:m.invalid_type,expected:b.boolean,received:r.parsedType}),S}return G(e.data)}};Ze.create=t=>new Ze({typeName:_.ZodBoolean,coerce:t?.coerce||!1,...T(t)});var Ge=class t extends A{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==b.date){let i=this._getOrReturnCtx(e);return f(i,{code:m.invalid_type,expected:b.date,received:i.parsedType}),S}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return f(i,{code:m.invalid_date}),S}let r=new Z,a;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(a=this._getOrReturnCtx(e,a),f(a,{code:m.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),r.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(a=this._getOrReturnCtx(e,a),f(a,{code:m.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),r.dirty()):P.assertNever(i);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}min(e,n){return this._addCheck({kind:"min",value:e.getTime(),message:x.toString(n)})}max(e,n){return this._addCheck({kind:"max",value:e.getTime(),message:x.toString(n)})}get minDate(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e!=null?new Date(e):null}};Ge.create=t=>new Ge({checks:[],coerce:t?.coerce||!1,typeName:_.ZodDate,...T(t)});var xt=class extends A{_parse(e){if(this._getType(e)!==b.symbol){let r=this._getOrReturnCtx(e);return f(r,{code:m.invalid_type,expected:b.symbol,received:r.parsedType}),S}return G(e.data)}};xt.create=t=>new xt({typeName:_.ZodSymbol,...T(t)});var qe=class extends A{_parse(e){if(this._getType(e)!==b.undefined){let r=this._getOrReturnCtx(e);return f(r,{code:m.invalid_type,expected:b.undefined,received:r.parsedType}),S}return G(e.data)}};qe.create=t=>new qe({typeName:_.ZodUndefined,...T(t)});var Ke=class extends A{_parse(e){if(this._getType(e)!==b.null){let r=this._getOrReturnCtx(e);return f(r,{code:m.invalid_type,expected:b.null,received:r.parsedType}),S}return G(e.data)}};Ke.create=t=>new Ke({typeName:_.ZodNull,...T(t)});var De=class extends A{constructor(){super(...arguments),this._any=!0}_parse(e){return G(e.data)}};De.create=t=>new De({typeName:_.ZodAny,...T(t)});var we=class extends A{constructor(){super(...arguments),this._unknown=!0}_parse(e){return G(e.data)}};we.create=t=>new we({typeName:_.ZodUnknown,...T(t)});var de=class extends A{_parse(e){let n=this._getOrReturnCtx(e);return f(n,{code:m.invalid_type,expected:b.never,received:n.parsedType}),S}};de.create=t=>new de({typeName:_.ZodNever,...T(t)});var kt=class extends A{_parse(e){if(this._getType(e)!==b.undefined){let r=this._getOrReturnCtx(e);return f(r,{code:m.invalid_type,expected:b.void,received:r.parsedType}),S}return G(e.data)}};kt.create=t=>new kt({typeName:_.ZodVoid,...T(t)});var ve=class t extends A{_parse(e){let{ctx:n,status:r}=this._processInputParams(e),a=this._def;if(n.parsedType!==b.array)return f(n,{code:m.invalid_type,expected:b.array,received:n.parsedType}),S;if(a.exactLength!==null){let o=n.data.length>a.exactLength.value,s=n.data.length<a.exactLength.value;(o||s)&&(f(n,{code:o?m.too_big:m.too_small,minimum:s?a.exactLength.value:void 0,maximum:o?a.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:a.exactLength.message}),r.dirty())}if(a.minLength!==null&&n.data.length<a.minLength.value&&(f(n,{code:m.too_small,minimum:a.minLength.value,type:"array",inclusive:!0,exact:!1,message:a.minLength.message}),r.dirty()),a.maxLength!==null&&n.data.length>a.maxLength.value&&(f(n,{code:m.too_big,maximum:a.maxLength.value,type:"array",inclusive:!0,exact:!1,message:a.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((o,s)=>a.type._parseAsync(new oe(n,o,n.path,s)))).then(o=>Z.mergeArray(r,o));let i=[...n.data].map((o,s)=>a.type._parseSync(new oe(n,o,n.path,s)));return Z.mergeArray(r,i)}get element(){return this._def.type}min(e,n){return new t({...this._def,minLength:{value:e,message:x.toString(n)}})}max(e,n){return new t({...this._def,maxLength:{value:e,message:x.toString(n)}})}length(e,n){return new t({...this._def,exactLength:{value:e,message:x.toString(n)}})}nonempty(e){return this.min(1,e)}};ve.create=(t,e)=>new ve({type:t,minLength:null,maxLength:null,exactLength:null,typeName:_.ZodArray,...T(e)});function yt(t){if(t instanceof ee){let e={};for(let n in t.shape){let r=t.shape[n];e[n]=ie.create(yt(r))}return new ee({...t._def,shape:()=>e})}else return t instanceof ve?new ve({...t._def,type:yt(t.element)}):t instanceof ie?ie.create(yt(t.unwrap())):t instanceof me?me.create(yt(t.unwrap())):t instanceof he?he.create(t.items.map(e=>yt(e))):t}var ee=class t extends A{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),n=P.objectKeys(e);return this._cached={shape:e,keys:n},this._cached}_parse(e){if(this._getType(e)!==b.object){let d=this._getOrReturnCtx(e);return f(d,{code:m.invalid_type,expected:b.object,received:d.parsedType}),S}let{status:r,ctx:a}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),s=[];if(!(this._def.catchall instanceof de&&this._def.unknownKeys==="strip"))for(let d in a.data)o.includes(d)||s.push(d);let c=[];for(let d of o){let u=i[d],p=a.data[d];c.push({key:{status:"valid",value:d},value:u._parse(new oe(a,p,a.path,d)),alwaysSet:d in a.data})}if(this._def.catchall instanceof de){let d=this._def.unknownKeys;if(d==="passthrough")for(let u of s)c.push({key:{status:"valid",value:u},value:{status:"valid",value:a.data[u]}});else if(d==="strict")s.length>0&&(f(a,{code:m.unrecognized_keys,keys:s}),r.dirty());else if(d!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let d=this._def.catchall;for(let u of s){let p=a.data[u];c.push({key:{status:"valid",value:u},value:d._parse(new oe(a,p,a.path,u)),alwaysSet:u in a.data})}}return a.common.async?Promise.resolve().then(async()=>{let d=[];for(let u of c){let p=await u.key,h=await u.value;d.push({key:p,value:h,alwaysSet:u.alwaysSet})}return d}).then(d=>Z.mergeObjectSync(r,d)):Z.mergeObjectSync(r,c)}get shape(){return this._def.shape()}strict(e){return x.errToObj,new t({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(n,r)=>{let a=this._def.errorMap?.(n,r).message??r.defaultError;return n.code==="unrecognized_keys"?{message:x.errToObj(e).message??a}:{message:a}}}:{}})}strip(){return new t({...this._def,unknownKeys:"strip"})}passthrough(){return new t({...this._def,unknownKeys:"passthrough"})}extend(e){return new t({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new t({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:_.ZodObject})}setKey(e,n){return this.augment({[e]:n})}catchall(e){return new t({...this._def,catchall:e})}pick(e){let n={};for(let r of P.objectKeys(e))e[r]&&this.shape[r]&&(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}omit(e){let n={};for(let r of P.objectKeys(this.shape))e[r]||(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}deepPartial(){return yt(this)}partial(e){let n={};for(let r of P.objectKeys(this.shape)){let a=this.shape[r];e&&!e[r]?n[r]=a:n[r]=a.optional()}return new t({...this._def,shape:()=>n})}required(e){let n={};for(let r of P.objectKeys(this.shape))if(e&&!e[r])n[r]=this.shape[r];else{let i=this.shape[r];for(;i instanceof ie;)i=i._def.innerType;n[r]=i}return new t({...this._def,shape:()=>n})}keyof(){return na(P.objectKeys(this.shape))}};ee.create=(t,e)=>new ee({shape:()=>t,unknownKeys:"strip",catchall:de.create(),typeName:_.ZodObject,...T(e)});ee.strictCreate=(t,e)=>new ee({shape:()=>t,unknownKeys:"strict",catchall:de.create(),typeName:_.ZodObject,...T(e)});ee.lazycreate=(t,e)=>new ee({shape:t,unknownKeys:"strip",catchall:de.create(),typeName:_.ZodObject,...T(e)});var Ye=class extends A{_parse(e){let{ctx:n}=this._processInputParams(e),r=this._def.options;function a(i){for(let s of i)if(s.result.status==="valid")return s.result;for(let s of i)if(s.result.status==="dirty")return n.common.issues.push(...s.ctx.common.issues),s.result;let o=i.map(s=>new Q(s.ctx.common.issues));return f(n,{code:m.invalid_union,unionErrors:o}),S}if(n.common.async)return Promise.all(r.map(async i=>{let o={...n,common:{...n.common,issues:[]},parent:null};return{result:await i._parseAsync({data:n.data,path:n.path,parent:o}),ctx:o}})).then(a);{let i,o=[];for(let c of r){let d={...n,common:{...n.common,issues:[]},parent:null},u=c._parseSync({data:n.data,path:n.path,parent:d});if(u.status==="valid")return u;u.status==="dirty"&&!i&&(i={result:u,ctx:d}),d.common.issues.length&&o.push(d.common.issues)}if(i)return n.common.issues.push(...i.ctx.common.issues),i.result;let s=o.map(c=>new Q(c));return f(n,{code:m.invalid_union,unionErrors:s}),S}}get options(){return this._def.options}};Ye.create=(t,e)=>new Ye({options:t,typeName:_.ZodUnion,...T(e)});var ke=t=>t instanceof Qe?ke(t.schema):t instanceof se?ke(t.innerType()):t instanceof et?[t.value]:t instanceof tt?t.options:t instanceof nt?P.objectValues(t.enum):t instanceof rt?ke(t._def.innerType):t instanceof qe?[void 0]:t instanceof Ke?[null]:t instanceof ie?[void 0,...ke(t.unwrap())]:t instanceof me?[null,...ke(t.unwrap())]:t instanceof Vt||t instanceof it?ke(t.unwrap()):t instanceof at?ke(t._def.innerType):[],cn=class t extends A{_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==b.object)return f(n,{code:m.invalid_type,expected:b.object,received:n.parsedType}),S;let r=this.discriminator,a=n.data[r],i=this.optionsMap.get(a);return i?n.common.async?i._parseAsync({data:n.data,path:n.path,parent:n}):i._parseSync({data:n.data,path:n.path,parent:n}):(f(n,{code:m.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),S)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,n,r){let a=new Map;for(let i of n){let o=ke(i.shape[e]);if(!o.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let s of o){if(a.has(s))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(s)}`);a.set(s,i)}}return new t({typeName:_.ZodDiscriminatedUnion,discriminator:e,options:n,optionsMap:a,...T(r)})}};function Bn(t,e){let n=pe(t),r=pe(e);if(t===e)return{valid:!0,data:t};if(n===b.object&&r===b.object){let a=P.objectKeys(e),i=P.objectKeys(t).filter(s=>a.indexOf(s)!==-1),o={...t,...e};for(let s of i){let c=Bn(t[s],e[s]);if(!c.valid)return{valid:!1};o[s]=c.data}return{valid:!0,data:o}}else if(n===b.array&&r===b.array){if(t.length!==e.length)return{valid:!1};let a=[];for(let i=0;i<t.length;i++){let o=t[i],s=e[i],c=Bn(o,s);if(!c.valid)return{valid:!1};a.push(c.data)}return{valid:!0,data:a}}else return n===b.date&&r===b.date&&+t==+e?{valid:!0,data:t}:{valid:!1}}var Xe=class extends A{_parse(e){let{status:n,ctx:r}=this._processInputParams(e),a=(i,o)=>{if(ln(i)||ln(o))return S;let s=Bn(i.value,o.value);return s.valid?((dn(i)||dn(o))&&n.dirty(),{status:n.value,value:s.data}):(f(r,{code:m.invalid_intersection_types}),S)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([i,o])=>a(i,o)):a(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};Xe.create=(t,e,n)=>new Xe({left:t,right:e,typeName:_.ZodIntersection,...T(n)});var he=class t extends A{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==b.array)return f(r,{code:m.invalid_type,expected:b.array,received:r.parsedType}),S;if(r.data.length<this._def.items.length)return f(r,{code:m.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),S;!this._def.rest&&r.data.length>this._def.items.length&&(f(r,{code:m.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());let i=[...r.data].map((o,s)=>{let c=this._def.items[s]||this._def.rest;return c?c._parse(new oe(r,o,r.path,s)):null}).filter(o=>!!o);return r.common.async?Promise.all(i).then(o=>Z.mergeArray(n,o)):Z.mergeArray(n,i)}get items(){return this._def.items}rest(e){return new t({...this._def,rest:e})}};he.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new he({items:t,typeName:_.ZodTuple,rest:null,...T(e)})};var un=class t extends A{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==b.object)return f(r,{code:m.invalid_type,expected:b.object,received:r.parsedType}),S;let a=[],i=this._def.keyType,o=this._def.valueType;for(let s in r.data)a.push({key:i._parse(new oe(r,s,r.path,s)),value:o._parse(new oe(r,r.data[s],r.path,s)),alwaysSet:s in r.data});return r.common.async?Z.mergeObjectAsync(n,a):Z.mergeObjectSync(n,a)}get element(){return this._def.valueType}static create(e,n,r){return n instanceof A?new t({keyType:e,valueType:n,typeName:_.ZodRecord,...T(r)}):new t({keyType:$e.create(),valueType:e,typeName:_.ZodRecord,...T(n)})}},wt=class extends A{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==b.map)return f(r,{code:m.invalid_type,expected:b.map,received:r.parsedType}),S;let a=this._def.keyType,i=this._def.valueType,o=[...r.data.entries()].map(([s,c],d)=>({key:a._parse(new oe(r,s,r.path,[d,"key"])),value:i._parse(new oe(r,c,r.path,[d,"value"]))}));if(r.common.async){let s=new Map;return Promise.resolve().then(async()=>{for(let c of o){let d=await c.key,u=await c.value;if(d.status==="aborted"||u.status==="aborted")return S;(d.status==="dirty"||u.status==="dirty")&&n.dirty(),s.set(d.value,u.value)}return{status:n.value,value:s}})}else{let s=new Map;for(let c of o){let d=c.key,u=c.value;if(d.status==="aborted"||u.status==="aborted")return S;(d.status==="dirty"||u.status==="dirty")&&n.dirty(),s.set(d.value,u.value)}return{status:n.value,value:s}}}};wt.create=(t,e,n)=>new wt({valueType:e,keyType:t,typeName:_.ZodMap,...T(n)});var vt=class t extends A{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==b.set)return f(r,{code:m.invalid_type,expected:b.set,received:r.parsedType}),S;let a=this._def;a.minSize!==null&&r.data.size<a.minSize.value&&(f(r,{code:m.too_small,minimum:a.minSize.value,type:"set",inclusive:!0,exact:!1,message:a.minSize.message}),n.dirty()),a.maxSize!==null&&r.data.size>a.maxSize.value&&(f(r,{code:m.too_big,maximum:a.maxSize.value,type:"set",inclusive:!0,exact:!1,message:a.maxSize.message}),n.dirty());let i=this._def.valueType;function o(c){let d=new Set;for(let u of c){if(u.status==="aborted")return S;u.status==="dirty"&&n.dirty(),d.add(u.value)}return{status:n.value,value:d}}let s=[...r.data.values()].map((c,d)=>i._parse(new oe(r,c,r.path,d)));return r.common.async?Promise.all(s).then(c=>o(c)):o(s)}min(e,n){return new t({...this._def,minSize:{value:e,message:x.toString(n)}})}max(e,n){return new t({...this._def,maxSize:{value:e,message:x.toString(n)}})}size(e,n){return this.min(e,n).max(e,n)}nonempty(e){return this.min(1,e)}};vt.create=(t,e)=>new vt({valueType:t,minSize:null,maxSize:null,typeName:_.ZodSet,...T(e)});var pn=class t extends A{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==b.function)return f(n,{code:m.invalid_type,expected:b.function,received:n.parsedType}),S;function r(s,c){return Wt({data:s,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,gt(),xe].filter(d=>!!d),issueData:{code:m.invalid_arguments,argumentsError:c}})}function a(s,c){return Wt({data:s,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,gt(),xe].filter(d=>!!d),issueData:{code:m.invalid_return_type,returnTypeError:c}})}let i={errorMap:n.common.contextualErrorMap},o=n.data;if(this._def.returns instanceof je){let s=this;return G(async function(...c){let d=new Q([]),u=await s._def.args.parseAsync(c,i).catch(y=>{throw d.addIssue(r(c,y)),d}),p=await Reflect.apply(o,this,u);return await s._def.returns._def.type.parseAsync(p,i).catch(y=>{throw d.addIssue(a(p,y)),d})})}else{let s=this;return G(function(...c){let d=s._def.args.safeParse(c,i);if(!d.success)throw new Q([r(c,d.error)]);let u=Reflect.apply(o,this,d.data),p=s._def.returns.safeParse(u,i);if(!p.success)throw new Q([a(u,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new t({...this._def,args:he.create(e).rest(we.create())})}returns(e){return new t({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,n,r){return new t({args:e||he.create([]).rest(we.create()),returns:n||we.create(),typeName:_.ZodFunction,...T(r)})}},Qe=class extends A{get schema(){return this._def.getter()}_parse(e){let{ctx:n}=this._processInputParams(e);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}};Qe.create=(t,e)=>new Qe({getter:t,typeName:_.ZodLazy,...T(e)});var et=class extends A{_parse(e){if(e.data!==this._def.value){let n=this._getOrReturnCtx(e);return f(n,{received:n.data,code:m.invalid_literal,expected:this._def.value}),S}return{status:"valid",value:e.data}}get value(){return this._def.value}};et.create=(t,e)=>new et({value:t,typeName:_.ZodLiteral,...T(e)});function na(t,e){return new tt({values:t,typeName:_.ZodEnum,...T(e)})}var tt=class t extends A{_parse(e){if(typeof e.data!="string"){let n=this._getOrReturnCtx(e),r=this._def.values;return f(n,{expected:P.joinValues(r),received:n.parsedType,code:m.invalid_type}),S}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let n=this._getOrReturnCtx(e),r=this._def.values;return f(n,{received:n.data,code:m.invalid_enum_value,options:r}),S}return G(e.data)}get options(){return this._def.values}get enum(){let e={};for(let n of this._def.values)e[n]=n;return e}get Values(){let e={};for(let n of this._def.values)e[n]=n;return e}get Enum(){let e={};for(let n of this._def.values)e[n]=n;return e}extract(e,n=this._def){return t.create(e,{...this._def,...n})}exclude(e,n=this._def){return t.create(this.options.filter(r=>!e.includes(r)),{...this._def,...n})}};tt.create=na;var nt=class extends A{_parse(e){let n=P.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==b.string&&r.parsedType!==b.number){let a=P.objectValues(n);return f(r,{expected:P.joinValues(a),received:r.parsedType,code:m.invalid_type}),S}if(this._cache||(this._cache=new Set(P.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let a=P.objectValues(n);return f(r,{received:r.data,code:m.invalid_enum_value,options:a}),S}return G(e.data)}get enum(){return this._def.values}};nt.create=(t,e)=>new nt({values:t,typeName:_.ZodNativeEnum,...T(e)});var je=class extends A{unwrap(){return this._def.type}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==b.promise&&n.common.async===!1)return f(n,{code:m.invalid_type,expected:b.promise,received:n.parsedType}),S;let r=n.parsedType===b.promise?n.data:Promise.resolve(n.data);return G(r.then(a=>this._def.type.parseAsync(a,{path:n.path,errorMap:n.common.contextualErrorMap})))}};je.create=(t,e)=>new je({type:t,typeName:_.ZodPromise,...T(e)});var se=class extends A{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===_.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:n,ctx:r}=this._processInputParams(e),a=this._def.effect||null,i={addIssue:o=>{f(r,o),o.fatal?n.abort():n.dirty()},get path(){return r.path}};if(i.addIssue=i.addIssue.bind(i),a.type==="preprocess"){let o=a.transform(r.data,i);if(r.common.async)return Promise.resolve(o).then(async s=>{if(n.value==="aborted")return S;let c=await this._def.schema._parseAsync({data:s,path:r.path,parent:r});return c.status==="aborted"?S:c.status==="dirty"?We(c.value):n.value==="dirty"?We(c.value):c});{if(n.value==="aborted")return S;let s=this._def.schema._parseSync({data:o,path:r.path,parent:r});return s.status==="aborted"?S:s.status==="dirty"?We(s.value):n.value==="dirty"?We(s.value):s}}if(a.type==="refinement"){let o=s=>{let c=a.refinement(s,i);if(r.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return s};if(r.common.async===!1){let s=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?S:(s.status==="dirty"&&n.dirty(),o(s.value),{status:n.value,value:s.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(s=>s.status==="aborted"?S:(s.status==="dirty"&&n.dirty(),o(s.value).then(()=>({status:n.value,value:s.value}))))}if(a.type==="transform")if(r.common.async===!1){let o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!Re(o))return S;let s=a.transform(o.value,i);if(s instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:s}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>Re(o)?Promise.resolve(a.transform(o.value,i)).then(s=>({status:n.value,value:s})):S);P.assertNever(a)}};se.create=(t,e,n)=>new se({schema:t,typeName:_.ZodEffects,effect:e,...T(n)});se.createWithPreprocess=(t,e,n)=>new se({schema:e,effect:{type:"preprocess",transform:t},typeName:_.ZodEffects,...T(n)});var ie=class extends A{_parse(e){return this._getType(e)===b.undefined?G(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};ie.create=(t,e)=>new ie({innerType:t,typeName:_.ZodOptional,...T(e)});var me=class extends A{_parse(e){return this._getType(e)===b.null?G(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};me.create=(t,e)=>new me({innerType:t,typeName:_.ZodNullable,...T(e)});var rt=class extends A{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return n.parsedType===b.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}};rt.create=(t,e)=>new rt({innerType:t,typeName:_.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...T(e)});var at=class extends A{_parse(e){let{ctx:n}=this._processInputParams(e),r={...n,common:{...n.common,issues:[]}},a=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return bt(a)?a.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new Q(r.common.issues)},input:r.data})})):{status:"valid",value:a.status==="valid"?a.value:this._def.catchValue({get error(){return new Q(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};at.create=(t,e)=>new at({innerType:t,typeName:_.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...T(e)});var St=class extends A{_parse(e){if(this._getType(e)!==b.nan){let r=this._getOrReturnCtx(e);return f(r,{code:m.invalid_type,expected:b.nan,received:r.parsedType}),S}return{status:"valid",value:e.data}}};St.create=t=>new St({typeName:_.ZodNaN,...T(t)});var ts=Symbol("zod_brand"),Vt=class extends A{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}},Jt=class t extends A{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?S:i.status==="dirty"?(n.dirty(),We(i.value)):this._def.out._parseAsync({data:i.value,path:r.path,parent:r})})();{let a=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?S:a.status==="dirty"?(n.dirty(),{status:"dirty",value:a.value}):this._def.out._parseSync({data:a.value,path:r.path,parent:r})}}static create(e,n){return new t({in:e,out:n,typeName:_.ZodPipeline})}},it=class extends A{_parse(e){let n=this._def.innerType._parse(e),r=a=>(Re(a)&&(a.value=Object.freeze(a.value)),a);return bt(n)?n.then(a=>r(a)):r(n)}unwrap(){return this._def.innerType}};it.create=(t,e)=>new it({innerType:t,typeName:_.ZodReadonly,...T(e)});function Xr(t,e){let n=typeof t=="function"?t(e):typeof t=="string"?{message:t}:t;return typeof n=="string"?{message:n}:n}function ra(t,e={},n){return t?De.create().superRefine((r,a)=>{let i=t(r);if(i instanceof Promise)return i.then(o=>{if(!o){let s=Xr(e,r),c=s.fatal??n??!0;a.addIssue({code:"custom",...s,fatal:c})}});if(!i){let o=Xr(e,r),s=o.fatal??n??!0;a.addIssue({code:"custom",...o,fatal:s})}}):De.create()}var ns={object:ee.lazycreate},_;(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly"})(_||(_={}));var rs=(t,e={message:`Input not instance of ${t.name}`})=>ra(n=>n instanceof t,e),aa=$e.create,ia=Ve.create,as=St.create,is=Je.create,oa=Ze.create,os=Ge.create,ss=xt.create,ls=qe.create,ds=Ke.create,cs=De.create,us=we.create,ps=de.create,hs=kt.create,ms=ve.create,fs=ee.create,gs=ee.strictCreate,bs=Ye.create,ys=cn.create,xs=Xe.create,ks=he.create,ws=un.create,vs=wt.create,Ss=vt.create,_s=pn.create,Cs=Qe.create,Ts=et.create,As=tt.create,Is=nt.create,Ps=je.create,Es=se.create,Rs=ie.create,$s=me.create,Ds=se.createWithPreprocess,js=Jt.create,Os=()=>aa().optional(),Ns=()=>ia().optional(),Ls=()=>oa().optional(),zs={string:(t=>$e.create({...t,coerce:!0})),number:(t=>Ve.create({...t,coerce:!0})),boolean:(t=>Ze.create({...t,coerce:!0})),bigint:(t=>Je.create({...t,coerce:!0})),date:(t=>Ge.create({...t,coerce:!0}))};var Us=S;var Wn=l.object({id:l.string()}),Ms=l.enum(["top","right","bottom","left","auto"]).default("auto"),Vn=l.enum(["left","middle","right"]),Fs=Vn.default("left"),sa=l.object({label:l.string().optional(),hidden:l.boolean().default(!1)}),Hs={background:l.string().optional(),textColor:l.string().optional(),borderRadius:l.string().optional(),textAlign:Fs,anchor:Ms,showNavigation:l.boolean().default(!0),prevButton:sa.optional(),nextButton:sa.optional()},Bs=l.enum(["pointer","callout","area"]),Ws=l.discriminatedUnion("type",[l.object({type:l.literal("html-element"),alphaId:l.string().min(1)})]),Vs=Wn.extend({type:l.literal("message"),variant:Bs.default("callout"),x:l.number().min(0).max(1),y:l.number().min(0).max(1),w:l.number().min(0).max(1).optional(),h:l.number().min(0).max(1).optional(),text:l.string().optional(),target:Ws.optional(),advancesStep:l.boolean().default(!0),...Hs}),Js=Wn.extend({type:l.literal("blur"),x:l.number().min(0).max(1),y:l.number().min(0).max(1),w:l.number().min(0).max(1),h:l.number().min(0).max(1),intensity:l.number().min(0).max(20).default(8)}),Zs=Wn.extend({type:l.literal("text"),x:l.number().min(0).max(1),y:l.number().min(0).max(1),text:l.string(),fontSize:l.number().positive().default(16),color:l.string().optional()}),la=l.discriminatedUnion("type",[Vs,Js,Zs]),da=new Set(["message","blur","text"]),ca=l.object({type:l.string()}).passthrough();function ua(t){return typeof t=="object"&&t!==null?t.type:void 0}var pa=l.any().superRefine((t,e)=>{let a=(da.has(ua(t))?la:ca).safeParse(t);if(!a.success)for(let i of a.error.issues)e.addIssue(i)}).transform(t=>(da.has(ua(t))?la:ca).parse(t));var ha=l.object({label:l.string().min(1),href:l.string().refine(t=>/^(https?:|mailto:)/i.test(t),"href must be an http(s) or mailto URL")}),Jn=l.object({logo:l.string().min(1).optional(),name:l.string().min(1).optional(),logoHref:l.string().refine(t=>/^(https?:|mailto:)/i.test(t),"logoHref must be an http(s) or mailto URL").optional(),favicon:l.string().min(1).optional(),cta:ha.optional(),secondaryCta:ha.optional(),watermark:l.boolean().optional()}),ma=Jn.omit({favicon:!0});var Gs=l.object({type:l.literal("next")}),qs=l.object({type:l.literal("prev")}),Ks=l.object({type:l.literal("step"),stepId:l.string().min(1)}),Ys=l.object({type:l.literal("chapter"),chapterId:l.string().min(1)}),Xs=l.object({type:l.literal("url"),href:l.string().min(1),target:l.enum(["_self","_blank"]).default("_blank")}),Qs=l.object({type:l.literal("restart")}),el=l.discriminatedUnion("type",[Gs,qs,Ks,Ys,Xs,Qs]),tl=l.enum(["shimmer"]),hn=l.object({label:l.string().min(1),action:el.default({type:"next"}),animation:tl.optional(),background:l.string().optional(),textColor:l.string().optional()});var nl="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",Zn=/^[A-Za-z0-9_-]{12}$/;function rl(t){let e=globalThis.crypto;if(!e||typeof e.getRandomValues!="function")throw new Error("generateDemoId requires globalThis.crypto.getRandomValues (Node 19+, browsers, or edge runtime).");e.getRandomValues(t)}function ne(){let t=new Uint8Array(12);rl(t);let e="";for(let n of t)e+=nl.charAt(n&63);return e}function fa(t){return typeof t=="string"&&Zn.test(t)}function ga(t){return String(t+1).padStart(4,"0")}function ba(t){return`snap-${t.toString().padStart(3,"0")}`}function mn(t){let e=((t??"").toLowerCase().split(";")[0]??"").trim();return e.startsWith("image/")?"image":e.startsWith("video/")?"video":e.startsWith("audio/")?"audio":e.startsWith("font/")||e.includes("font")||e.includes("woff")?"font":"other"}function Gn(t){if(!t)return"";let e=t.replace(/^(?:tree\s*item|menu\s*item|menuitem|list\s*item|tab(?:\s*panel)?|button|link|option|region|combobox|radio|checkbox|switch|dialog|row|cell|columnheader|rowheader|navigation|article|banner|main|complementary|contentinfo)\s*:?\s+/i,"").trim();return(e.split(/\r?\n/).map(r=>r.trim()).find(Boolean)??e).replace(/\s+/g," ").trim().slice(0,48)}function qn(t){let{stepId:e,assetId:n,posterAssetId:r,kind:a,isLast:i}=t,o=`asset:${n}`,s=a==="video"?{type:"video",src:o,posterSrc:r?`asset:${r}`:void 0,naturalWidth:t.naturalWidth,naturalHeight:t.naturalHeight,alt:t.title,sourceUrl:t.sourceUrl??"",title:t.title,autoplay:!0,muted:!0,objectFit:"cover"}:{type:"image",src:o,naturalWidth:t.naturalWidth,naturalHeight:t.naturalHeight,alt:t.title,sourceUrl:t.sourceUrl??"",title:t.title,objectFit:"cover"},c=t.click,d=[];if(c){let h=Gn(c.label);d.push({id:`${e}_pointer`,type:"message",variant:"pointer",x:c.x,y:c.y,text:h?`Click on "${h}"`:"Continue",anchor:"auto",textAlign:"left",advancesStep:!0,showNavigation:!0})}else d.push({id:`${e}_callout`,type:"message",variant:"callout",x:.5,y:.5,text:i?"End of walkthrough":"Continue",anchor:"auto",textAlign:"left",advancesStep:!0,showNavigation:!0});let u=!!c&&!(c.x===0&&c.y===0),p=a==="image"&&t.autoApplyZoom===!0&&u?{zoom:1.35,x:Number(Math.max(0,Math.min(1,c.x)).toFixed(4)),y:Number(Math.max(0,Math.min(1,c.y)).toFixed(4))}:void 0;return{id:e,kind:"content",background:s,...p?{transform:p}:{},annotations:d,advance:{trigger:"click"}}}function ya(t){let{stepId:e,htmlPath:n,click:r}=t,a=[];if(r?.alphaId)a.push({id:`${e}_area`,type:"message",variant:"area",x:Number((r.x??.5).toFixed(4)),y:Number((r.y??.5).toFixed(4)),w:0,h:0,text:Gn(r.label)||"Click here",target:{type:"html-element",alphaId:r.alphaId},anchor:"auto",textAlign:"left",advancesStep:!0,showNavigation:!0});else if(r){let i=Gn(r.label);a.push({id:`${e}_pointer`,type:"message",variant:"pointer",x:Number((r.x??.5).toFixed(4)),y:Number((r.y??.5).toFixed(4)),text:i?`Click on "${i}"`:"Continue",anchor:"auto",textAlign:"left",advancesStep:!0,showNavigation:!0})}return{id:e,kind:"content",background:{type:"html",path:n,naturalWidth:t.naturalWidth,naturalHeight:t.naturalHeight,zoom:1,scroll:t.scroll,sourceUrl:t.sourceUrl??"",title:t.sourceUrl??""},annotations:a,advance:{trigger:"click"}}}function al(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Kn(t,e){let n=t;for(let[r,a]of e){let i=al(r);n=n.replace(new RegExp(`(?:\\.\\./)*assets/${i}`,"g"),a),n=n.replace(new RegExp(`assets/${i}`,"g"),a)}return n}function il(t){return`<script data-inkly-replay-scroll>(()=>{const c=${JSON.stringify(t).replace(/<\/(script)/gi,"<\\/$1")};function r(){const d=document.documentElement,b=document.body;const vw=innerWidth||d.clientWidth||0;const vh=innerHeight||d.clientHeight||0;const mx=Math.max(0,Math.max(d.scrollWidth,b?b.scrollWidth:0)-vw);const my=Math.max(0,Math.max(d.scrollHeight,b?b.scrollHeight:0)-vh);const x=c.maxX>0&&mx>0?c.x/c.maxX*mx:c.x;const y=c.maxY>0&&my>0?c.y/c.maxY*my:c.y;scrollTo(Math.max(0,x),Math.max(0,y));}if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",r,{once:true});r();requestAnimationFrame(r);setTimeout(r,120);setTimeout(r,500);})();</script>`}function xa(t,e){let n=il(e);return/<\/body\s*>/i.test(t)?t.replace(/<\/body\s*>/i,`${n}</body>`):`${t}${n}`}function ka(t,e){if(!e||/data-inkly-document-css|document\.css/i.test(t))return t;let n='<link rel="stylesheet" href="./document.css?draft=1" data-inkly-document-css>';return/<\/head\s*>/i.test(t)?t.replace(/<\/head\s*>/i,`${n}</head>`):`${n}${t}`}var wa=l.object({id:l.string(),text:l.string(),start:l.number().nonnegative().optional(),end:l.number().nonnegative().optional()});var ol=l.enum(["screenshot","image","video","audio","font","other"]),sl=l.object({id:l.string().min(1),path:l.string().min(1).optional(),uri:l.string().min(1).optional(),sha256:l.string().regex(/^[0-9a-f]{64}$/),kind:ol,contentType:l.string().min(1).optional(),publicUrl:l.string().min(1).optional(),cdnPath:l.string().min(1).optional(),file:l.string().min(1).optional(),size:l.number().int().nonnegative().optional(),createdAt:l.string().min(1).optional(),updatedAt:l.string().min(1).optional(),viewport:l.object({w:l.number().int().positive(),h:l.number().int().positive()}).optional()}),_t=l.object({version:l.literal(1),assets:l.array(sl),screens:l.array(l.unknown()).optional()});var Yn=l.string().regex(/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,{message:"must be a hex color like #5b3df5"}),ll=l.enum(["color","image","glassmorphism"]),va=l.object({type:ll,color:Yn.optional(),from:Yn.optional(),to:Yn.optional(),src:l.string().min(1).optional(),alt:l.string().optional(),intensity:l.number().min(-5).max(48).optional()}).superRefine((t,e)=>{if(t.type==="color"){let n=!!t.color,r=!!t.from&&!!t.to;!n&&!r&&e.addIssue({code:l.ZodIssueCode.custom,path:["color"],message:"color backgrounds require color or from/to"}),!!t.from!=!!t.to&&e.addIssue({code:l.ZodIssueCode.custom,path:t.from?["to"]:["from"],message:"gradient backgrounds require both from and to"})}t.type==="image"&&!t.src&&e.addIssue({code:l.ZodIssueCode.custom,path:["src"],message:"image backgrounds require src"})}),Sa=l.object({src:l.string(),alt:l.string().optional()});var Xn=l.object({src:l.string().min(1),duration:l.number().positive().optional()});var dl=l.enum(["text","dropdown"]),cl=l.object({value:l.string().min(1),label:l.string().min(1)}),ul=l.object({id:l.string(),label:l.string(),type:dl.default("text"),placeholder:l.string().optional(),required:l.boolean().default(!1),options:l.array(cl).optional()}).superRefine((t,e)=>{t.type==="dropdown"&&(!t.options||t.options.length===0)&&e.addIssue({code:l.ZodIssueCode.custom,message:"Dropdown field requires at least one option.",path:["options"]})}),Ia=l.object({src:l.string().min(1),alt:l.string().optional(),height:l.number().int().positive().optional()}),pl=l.enum(["left","right","top"]),hl=l.enum(["standard","hero"]),Pa=l.object({src:l.string().min(1),alt:l.string().optional(),naturalWidth:l.number().positive().optional(),naturalHeight:l.number().positive().optional(),position:pl.default("right"),layout:hl.default("hero")}),ml=l.object({type:l.literal("headline"),id:l.string(),logo:Ia.optional(),image:Pa.optional(),title:l.string(),titleColor:l.string().optional(),description:l.string().optional(),descriptionColor:l.string().optional(),textAlign:Vn.optional(),cta:hn.optional(),secondaryCta:hn.optional()}),fl=l.object({type:l.literal("form"),id:l.string(),logo:Ia.optional(),image:Pa.optional(),title:l.string().optional(),description:l.string().optional(),fields:l.array(ul).min(1),submit:hn.default({label:"Submit",action:{type:"next"}})}),gl="allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox allow-presentation",bl="camera; microphone; fullscreen; payment; clipboard-write",yl=l.object({type:l.literal("embed"),id:l.string(),src:l.string(),iframeTitle:l.string().optional(),sandbox:l.string().default(gl),allow:l.string().default(bl)}),xl=l.object({type:l.literal("custom"),id:l.string(),name:l.string().min(1),data:l.record(l.unknown()).optional()}),_a=l.discriminatedUnion("type",[ml,fl,yl,xl]),Ca=new Set(["headline","form","embed","custom"]),Ta=l.object({type:l.string()}).passthrough();function Aa(t){return typeof t=="object"&&t!==null?t.type:void 0}var Ea=l.any().superRefine((t,e)=>{let a=(Ca.has(Aa(t))?_a:Ta).safeParse(t);if(!a.success)for(let i of a.error.issues)e.addIssue(i)}).transform(t=>(Ca.has(Aa(t))?_a:Ta).parse(t));var Ra=l.enum(["contain","cover","fill"]),$a=l.enum(["left top","center top","right top","left center","center center","right center","left bottom","center bottom","right bottom"]),kl=l.object({type:l.literal("image"),src:l.string().min(1),naturalWidth:l.number().positive(),naturalHeight:l.number().positive(),alt:l.string().optional(),sourceUrl:l.string().optional(),title:l.string().optional(),objectFit:Ra.optional(),objectPosition:$a.optional()}),wl=l.object({type:l.literal("video"),src:l.string().min(1),posterSrc:l.string().min(1).optional(),naturalWidth:l.number().positive(),naturalHeight:l.number().positive(),alt:l.string().optional(),sourceUrl:l.string().optional(),title:l.string().optional(),autoplay:l.boolean().default(!0),muted:l.boolean().default(!0),objectFit:Ra.optional(),objectPosition:$a.optional()}),vl=l.object({x:l.number().nonnegative().default(0),y:l.number().nonnegative().default(0),maxX:l.number().nonnegative().default(0),maxY:l.number().nonnegative().default(0)}),Sl=l.object({type:l.literal("html"),path:l.string().min(1),naturalWidth:l.number().positive(),naturalHeight:l.number().positive(),zoom:l.number().positive().default(1),scroll:vl.default({x:0,y:0,maxX:0,maxY:0}),sourceUrl:l.string().optional(),title:l.string().optional()}),_l=l.discriminatedUnion("type",[kl,wl,Sl]),Cl=l.object({zoom:l.number().min(1).default(1),x:l.number().min(0).max(1).default(.5),y:l.number().min(0).max(1).default(.5)}),Tl=l.object({trigger:l.enum(["auto","click"]).default("auto")}).default({trigger:"auto"}),Al=l.object({kind:l.literal("content").default("content"),id:l.string(),label:l.string().optional(),duration:l.number().positive().optional(),background:_l,script:l.string().optional(),voiceover:Xn.optional(),transform:Cl.optional(),advance:Tl,annotations:l.array(pa).default([]),captions:l.array(wa).optional()}).passthrough(),Il=l.object({kind:l.literal("cover"),id:l.string(),label:l.string().optional(),widgets:l.array(Ea).length(1),background:va.optional(),backgroundImage:Sa.optional(),backgroundDim:l.number().min(0).max(1).optional(),script:l.string().optional(),voiceover:Xn.optional(),duration:l.number().positive().optional(),advance:l.object({trigger:l.enum(["auto","click"]).default("click")}).default({trigger:"click"})}).passthrough(),Da=l.discriminatedUnion("kind",[Al,Il]);var Pl=/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,ja=l.string().regex(Pl,"must be a hex color like #5b3df5"),fn=l.object({primary:ja.optional(),secondary:ja.optional(),font:l.string().min(1).optional(),radius:l.string().min(1).optional()}).partial();var gn=l.string().regex(/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,{message:"must be a hex color like #5b3df5"}),El=l.object({id:l.string(),title:l.string(),stepIds:l.array(l.string()).min(1)}),Rl=l.object({hideHeader:l.boolean().default(!1),hideControls:l.boolean().default(!1),controls:l.enum(["full","minimal","hidden"]).optional(),showHubBreadcrumb:l.boolean().default(!1),mobileFooterMessage:l.boolean().default(!0),autoplay:l.boolean().default(!1)}),$l=l.object({width:l.number().positive(),height:l.number().positive()}),Dl=l.enum(["public","private"]),jl=l.enum(["none","color","image"]),Ol=l.object({type:jl,color:gn.optional(),from:gn.optional(),to:gn.optional(),src:l.string().min(1).optional(),alt:l.string().optional()}).superRefine((t,e)=>{if(t.type==="color"){let n=!!t.color,r=!!t.from&&!!t.to;!n&&!r&&e.addIssue({code:l.ZodIssueCode.custom,path:["color"],message:"color backgrounds require color or from/to"}),!!t.from!=!!t.to&&e.addIssue({code:l.ZodIssueCode.custom,path:t.from?["to"]:["from"],message:"gradient backgrounds require both from and to"})}t.type==="image"&&!t.src&&e.addIssue({code:l.ZodIssueCode.custom,path:["src"],message:"image backgrounds require src"})}),ot=l.object({id:l.string().regex(Zn,{message:"must be a 12-character URL-safe demo id (see generateDemoId)"}),version:l.number().int().min(1),title:l.string().optional(),subtitle:l.string().optional(),runtime:l.string().min(1).optional(),visibility:Dl.default("public"),backgroundColor:gn.optional(),background:Ol.optional(),theme:l.object({preset:l.string().min(1).optional(),tokens:fn.optional(),brand:ma.optional()}).optional(),chrome:Rl.default({}),aspectRatio:$l.optional(),chapters:l.array(El).default([]),steps:l.array(Da).min(1)}).passthrough().superRefine((t,e)=>{let n=new Set(t.steps.map(a=>a.id)),r=new Set(t.chapters.map(a=>a.id));t.chapters.forEach((a,i)=>{a.stepIds.forEach(o=>{n.has(o)||e.addIssue({code:l.ZodIssueCode.custom,path:["chapters",i,"stepIds"],message:`Chapter "${a.id}" references unknown step "${o}"`})})}),t.steps.forEach((a,i)=>{a.kind==="cover"&&a.widgets.forEach((o,s)=>{o.type==="headline"&&["cta","secondaryCta"].forEach(c=>{let d=o[c]?.action;d&&(d.type==="step"&&!n.has(d.stepId)&&e.addIssue({code:l.ZodIssueCode.custom,path:["steps",i,"widgets",s,c,"action","stepId"],message:`Widget "${o.id}" CTA targets unknown step "${d.stepId}"`}),d.type==="chapter"&&!r.has(d.chapterId)&&e.addIssue({code:l.ZodIssueCode.custom,path:["steps",i,"widgets",s,c,"action","chapterId"],message:`Widget "${o.id}" CTA targets unknown chapter "${d.chapterId}"`}))})})})});function bn(t){return ot.parse(t)}function Ct(t){let e=typeof t=="object"&&t!==null?t:{},n=fa(e.id),r=n?e:{...e,id:ne()};return{config:ot.parse(r),changed:!n}}function Oa(t){let e=new Map;t.forEach((r,a)=>{let i=e.get(r.id);i?i.push({entry:r,index:a}):e.set(r.id,[{entry:r,index:a}])});let n=[];for(let r of e.values()){if(r.length<2)continue;let a=[...r].sort((o,s)=>o.entry.updatedAt!==s.entry.updatedAt?o.entry.updatedAt-s.entry.updatedAt:o.index-s.index),[,...i]=a;for(let{entry:o}of i)n.push({entry:o,newId:ne()})}return n}var Qn=l.enum(["sidebar","tabs"]),Nl=l.object({name:l.string().min(1),description:l.string().min(1).optional(),icon:l.string().min(1).optional(),demos:l.array(l.string().min(1))}),fe=l.object({$schema:l.string().optional(),name:l.string().min(1),runtime:l.string().regex(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/,"runtime must be an exact semver version"),runtimeRange:l.string().min(1).optional(),layout:Qn.optional(),theme:l.string().min(1).optional(),tokens:fn.optional(),brand:Jn.optional(),title:l.string().min(1).optional(),subtitle:l.string().min(1).optional(),collections:l.array(Nl).optional()});function Na({slug:t,config:e,resolveAssetSrc:n}){let r=e.title??e.id??t;return{slug:t,title:r,description:Ll(e,r),thumbnail:Ml(e,r,n),visibility:e.visibility}}function yn(t,e){return t.length<=e?t:`${t.slice(0,e-1).trimEnd()}\u2026`}function Ll(t,e){if(t.subtitle?.trim())return yn(t.subtitle.trim(),120);for(let n of t.steps){if(n.kind!=="content")continue;let r=n.captions?.[0]?.text;if(r&&r.trim())return yn(r.trim(),120);break}for(let n of t.steps)if(n.kind==="cover"){for(let r of n.widgets)if(r.type==="headline"&&r.description&&r.description.trim())return yn(r.description.trim(),120)}return yn(`Explore the ${e} workflow.`,120)}function zl(t){return t.background?t.background.type==="image":t.backgroundImage?!0:t.widgets.some(e=>e.type==="headline"?!!e.title:e.type==="embed"?!!e.src:e.type==="form")}function er(t,e){return t?e?e(t):t:null}function Ul(t,e){if(!e)return t;let n=t.widgets.map(o=>{if((o.type==="headline"||o.type==="form")&&o.image?.src){let s=e(o.image.src);return s&&s!==o.image.src?{...o,image:{...o.image,src:s}}:o}return o}),r=t.backgroundImage,a=t.background;if(a?.type==="image"&&a.src){let o=e(a.src);o&&o!==a.src&&(a={...a,src:o})}if(r?.src){let o=e(r.src);o&&o!==r.src&&(r={...r,src:o})}return!n.some((o,s)=>o!==t.widgets[s])&&a===t.background&&r===t.backgroundImage?t:{...t,widgets:n,background:a,backgroundImage:r}}function Ml(t,e,n){let r=t.steps[0];if(r){if(r.kind==="cover"&&zl(r))return{kind:"cover",cover:Ul(r,n),themeTokens:t.theme?.tokens};if(r.kind==="content"){let a=r.background;if(a?.type==="image"){let i=er(a.src,n);if(i)return{kind:"image",src:i}}else if(a?.type==="video"){let i=er(a.posterSrc,n);if(i)return{kind:"image",src:i};let o=er(a.src,n);if(o)return{kind:"video",src:o}}else if(a?.type==="html")return{kind:"html",path:a.path,naturalWidth:a.naturalWidth,naturalHeight:a.naturalHeight,zoom:a.zoom,scroll:a.scroll}}}return{kind:"placeholder",title:e}}function Fl(t){return!t||t==="null"?"":t.replace(/\/+$/,"")}function Hl(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Bl(t){return String(t||"").replace(/\\/g,"/").replace(/^\/+/,"").replace(/^\.\//,"")}function tr(t){let e=Bl(t);return/\/index\.html$/i.test(e)||/^index\.html$/i.test(e)?e.replace(/index\.html$/i,"document.css"):/\.html?$/i.test(e)?e.replace(/\.html?$/i,".css"):null}function Wl(t){return t.replace(/<meta\b(?=[^>]*\bhttp-equiv\s*=\s*["']?content-security-policy\b)[^>]*>/gi,"")}var Vl=/\s+(?:href|xlink:href|target|rel|download|ping|referrerpolicy|data-inkly-href)(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s"'=<>`]+))?/gi;function Zt(t){return String(t||"").replace(/<(a|area)\b[^>]*>/gi,e=>e.replace(Vl,""))}function st(t,e={}){let n=Fl(e.resourceOrigin),r=String(t||"");return n?r.replace(new RegExp(`(^|["'\\(\\s,=])${Hl("/api/hubs/")}`,"g"),`$1${n}/api/hubs/`):r}function Jl(t){return Wl(t).replace(/<style\b(?=[^>]*\bdata-inkly-document-css\b)[\s\S]*?<\/style>/gi,"").replace(/<link\b(?=[^>]*\bdata-inkly-document-css\b)[^>]*>/gi,"").replace(/<link\b(?=[^>]*\brel\s*=\s*["']?stylesheet\b)(?=[^>]*\bhref\s*=\s*["']?[^"'\s>]*document\.css(?:\?draft=1)?)[^>]*>/gi,"")}function La({htmlPath:t,html:e,css:n,cssHref:r,resourceOrigin:a}){let i=Jl(Zt(e)),o=tr(t)!=null,s=n?.trim()??"";if(o&&s){let d=`<style data-inkly-document-css>
2
+ var Eo=Object.defineProperty;var Ro=(t,e)=>{for(var n in e)Eo(t,n,{get:e[n],enumerable:!0})};import dh from"mri";import{existsSync as Kr,statSync as ch}from"fs";import{isAbsolute as uh,join as mo,resolve as ph}from"path";import{Buffer as Rd}from"buffer";import{mkdir as Ka,writeFile as $d,access as Dd}from"fs/promises";import{dirname as jd,join as Od,resolve as Nd,sep as Ya}from"path";var l={};Ro(l,{BRAND:()=>rs,DIRTY:()=>We,EMPTY_PATH:()=>Oo,INVALID:()=>S,NEVER:()=>Fs,OK:()=>q,ParseStatus:()=>Z,Schema:()=>A,ZodAny:()=>De,ZodArray:()=>Se,ZodBigInt:()=>Je,ZodBoolean:()=>Ze,ZodBranded:()=>Vt,ZodCatch:()=>at,ZodDate:()=>Ge,ZodDefault:()=>rt,ZodDiscriminatedUnion:()=>cn,ZodEffects:()=>se,ZodEnum:()=>tt,ZodError:()=>Q,ZodFirstPartyTypeKind:()=>_,ZodFunction:()=>pn,ZodIntersection:()=>Xe,ZodIssueCode:()=>m,ZodLazy:()=>Qe,ZodLiteral:()=>et,ZodMap:()=>wt,ZodNaN:()=>St,ZodNativeEnum:()=>nt,ZodNever:()=>de,ZodNull:()=>Ke,ZodNullable:()=>fe,ZodNumber:()=>Ve,ZodObject:()=>ee,ZodOptional:()=>ie,ZodParsedType:()=>y,ZodPipeline:()=>Jt,ZodPromise:()=>je,ZodReadonly:()=>it,ZodRecord:()=>un,ZodSchema:()=>A,ZodSet:()=>vt,ZodString:()=>$e,ZodSymbol:()=>xt,ZodTransformer:()=>se,ZodTuple:()=>me,ZodType:()=>A,ZodUndefined:()=>qe,ZodUnion:()=>Ye,ZodUnknown:()=>ve,ZodVoid:()=>kt,addIssueToContext:()=>g,any:()=>ps,array:()=>gs,bigint:()=>ss,boolean:()=>da,coerce:()=>Us,custom:()=>oa,date:()=>ls,datetimeRegex:()=>aa,defaultErrorMap:()=>ke,discriminatedUnion:()=>ks,effect:()=>$s,enum:()=>Ps,function:()=>Ts,getErrorMap:()=>gt,getParsedType:()=>he,instanceof:()=>is,intersection:()=>ws,isAborted:()=>ln,isAsync:()=>bt,isDirty:()=>dn,isValid:()=>Re,late:()=>as,lazy:()=>As,literal:()=>Is,makeIssue:()=>Wt,map:()=>_s,nan:()=>os,nativeEnum:()=>Es,never:()=>ms,null:()=>us,nullable:()=>js,number:()=>la,object:()=>bs,objectUtil:()=>Bn,oboolean:()=>Ms,onumber:()=>zs,optional:()=>Ds,ostring:()=>Ls,pipeline:()=>Ns,preprocess:()=>Os,promise:()=>Rs,quotelessJson:()=>$o,record:()=>Ss,set:()=>Cs,setErrorMap:()=>jo,strictObject:()=>ys,string:()=>sa,symbol:()=>ds,transformer:()=>$s,tuple:()=>vs,undefined:()=>cs,union:()=>xs,unknown:()=>hs,util:()=>P,void:()=>fs});var P;(function(t){t.assertEqual=a=>{};function e(a){}t.assertIs=e;function n(a){throw new Error}t.assertNever=n,t.arrayToEnum=a=>{let i={};for(let o of a)i[o]=o;return i},t.getValidEnumValues=a=>{let i=t.objectKeys(a).filter(s=>typeof a[a[s]]!="number"),o={};for(let s of i)o[s]=a[s];return t.objectValues(o)},t.objectValues=a=>t.objectKeys(a).map(function(i){return a[i]}),t.objectKeys=typeof Object.keys=="function"?a=>Object.keys(a):a=>{let i=[];for(let o in a)Object.prototype.hasOwnProperty.call(a,o)&&i.push(o);return i},t.find=(a,i)=>{for(let o of a)if(i(o))return o},t.isInteger=typeof Number.isInteger=="function"?a=>Number.isInteger(a):a=>typeof a=="number"&&Number.isFinite(a)&&Math.floor(a)===a;function r(a,i=" | "){return a.map(o=>typeof o=="string"?`'${o}'`:o).join(i)}t.joinValues=r,t.jsonStringifyReplacer=(a,i)=>typeof i=="bigint"?i.toString():i})(P||(P={}));var Bn;(function(t){t.mergeShapes=(e,n)=>({...e,...n})})(Bn||(Bn={}));var y=P.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),he=t=>{switch(typeof t){case"undefined":return y.undefined;case"string":return y.string;case"number":return Number.isNaN(t)?y.nan:y.number;case"boolean":return y.boolean;case"function":return y.function;case"bigint":return y.bigint;case"symbol":return y.symbol;case"object":return Array.isArray(t)?y.array:t===null?y.null:t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?y.promise:typeof Map<"u"&&t instanceof Map?y.map:typeof Set<"u"&&t instanceof Set?y.set:typeof Date<"u"&&t instanceof Date?y.date:y.object;default:return y.unknown}};var m=P.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),$o=t=>JSON.stringify(t,null,2).replace(/"([^"]+)":/g,"$1:"),Q=class t extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};let n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=e}format(e){let n=e||function(i){return i.message},r={_errors:[]},a=i=>{for(let o of i.issues)if(o.code==="invalid_union")o.unionErrors.map(a);else if(o.code==="invalid_return_type")a(o.returnTypeError);else if(o.code==="invalid_arguments")a(o.argumentsError);else if(o.path.length===0)r._errors.push(n(o));else{let s=r,c=0;for(;c<o.path.length;){let d=o.path[c];c===o.path.length-1?(s[d]=s[d]||{_errors:[]},s[d]._errors.push(n(o))):s[d]=s[d]||{_errors:[]},s=s[d],c++}}};return a(this),r}static assert(e){if(!(e instanceof t))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,P.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=n=>n.message){let n={},r=[];for(let a of this.issues)if(a.path.length>0){let i=a.path[0];n[i]=n[i]||[],n[i].push(e(a))}else r.push(e(a));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}};Q.create=t=>new Q(t);var Do=(t,e)=>{let n;switch(t.code){case m.invalid_type:t.received===y.undefined?n="Required":n=`Expected ${t.expected}, received ${t.received}`;break;case m.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(t.expected,P.jsonStringifyReplacer)}`;break;case m.unrecognized_keys:n=`Unrecognized key(s) in object: ${P.joinValues(t.keys,", ")}`;break;case m.invalid_union:n="Invalid input";break;case m.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${P.joinValues(t.options)}`;break;case m.invalid_enum_value:n=`Invalid enum value. Expected ${P.joinValues(t.options)}, received '${t.received}'`;break;case m.invalid_arguments:n="Invalid function arguments";break;case m.invalid_return_type:n="Invalid function return type";break;case m.invalid_date:n="Invalid date";break;case m.invalid_string:typeof t.validation=="object"?"includes"in t.validation?(n=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${t.validation.position}`)):"startsWith"in t.validation?n=`Invalid input: must start with "${t.validation.startsWith}"`:"endsWith"in t.validation?n=`Invalid input: must end with "${t.validation.endsWith}"`:P.assertNever(t.validation):t.validation!=="regex"?n=`Invalid ${t.validation}`:n="Invalid";break;case m.too_small:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="bigint"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`:n="Invalid input";break;case m.too_big:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="bigint"?n=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`:n="Invalid input";break;case m.custom:n="Invalid input";break;case m.invalid_intersection_types:n="Intersection results could not be merged";break;case m.not_multiple_of:n=`Number must be a multiple of ${t.multipleOf}`;break;case m.not_finite:n="Number must be finite";break;default:n=e.defaultError,P.assertNever(t)}return{message:n}},ke=Do;var Qr=ke;function jo(t){Qr=t}function gt(){return Qr}var Wt=t=>{let{data:e,path:n,errorMaps:r,issueData:a}=t,i=[...n,...a.path||[]],o={...a,path:i};if(a.message!==void 0)return{...a,path:i,message:a.message};let s="",c=r.filter(d=>!!d).slice().reverse();for(let d of c)s=d(o,{data:e,defaultError:s}).message;return{...a,path:i,message:s}},Oo=[];function g(t,e){let n=gt(),r=Wt({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,n,n===ke?void 0:ke].filter(a=>!!a)});t.common.issues.push(r)}var Z=class t{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,n){let r=[];for(let a of n){if(a.status==="aborted")return S;a.status==="dirty"&&e.dirty(),r.push(a.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,n){let r=[];for(let a of n){let i=await a.key,o=await a.value;r.push({key:i,value:o})}return t.mergeObjectSync(e,r)}static mergeObjectSync(e,n){let r={};for(let a of n){let{key:i,value:o}=a;if(i.status==="aborted"||o.status==="aborted")return S;i.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof o.value<"u"||a.alwaysSet)&&(r[i.value]=o.value)}return{status:e.value,value:r}}},S=Object.freeze({status:"aborted"}),We=t=>({status:"dirty",value:t}),q=t=>({status:"valid",value:t}),ln=t=>t.status==="aborted",dn=t=>t.status==="dirty",Re=t=>t.status==="valid",bt=t=>typeof Promise<"u"&&t instanceof Promise;var x;(function(t){t.errToObj=e=>typeof e=="string"?{message:e}:e||{},t.toString=e=>typeof e=="string"?e:e?.message})(x||(x={}));var oe=class{constructor(e,n,r,a){this._cachedPath=[],this.parent=e,this.data=n,this._path=r,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}},ea=(t,e)=>{if(Re(e))return{success:!0,data:e.value};if(!t.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let n=new Q(t.common.issues);return this._error=n,this._error}}};function T(t){if(!t)return{};let{errorMap:e,invalid_type_error:n,required_error:r,description:a}=t;if(e&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:a}:{errorMap:(o,s)=>{let{message:c}=t;return o.code==="invalid_enum_value"?{message:c??s.defaultError}:typeof s.data>"u"?{message:c??r??s.defaultError}:o.code!=="invalid_type"?{message:s.defaultError}:{message:c??n??s.defaultError}},description:a}}var A=class{get description(){return this._def.description}_getType(e){return he(e.data)}_getOrReturnCtx(e,n){return n||{common:e.parent.common,data:e.data,parsedType:he(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new Z,ctx:{common:e.parent.common,data:e.data,parsedType:he(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let n=this._parse(e);if(bt(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(e){let n=this._parse(e);return Promise.resolve(n)}parse(e,n){let r=this.safeParse(e,n);if(r.success)return r.data;throw r.error}safeParse(e,n){let r={common:{issues:[],async:n?.async??!1,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:he(e)},a=this._parseSync({data:e,path:r.path,parent:r});return ea(r,a)}"~validate"(e){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:he(e)};if(!this["~standard"].async)try{let r=this._parseSync({data:e,path:[],parent:n});return Re(r)?{value:r.value}:{issues:n.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),n.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:n}).then(r=>Re(r)?{value:r.value}:{issues:n.common.issues})}async parseAsync(e,n){let r=await this.safeParseAsync(e,n);if(r.success)return r.data;throw r.error}async safeParseAsync(e,n){let r={common:{issues:[],contextualErrorMap:n?.errorMap,async:!0},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:he(e)},a=this._parse({data:e,path:r.path,parent:r}),i=await(bt(a)?a:Promise.resolve(a));return ea(r,i)}refine(e,n){let r=a=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(a):n;return this._refinement((a,i)=>{let o=e(a),s=()=>i.addIssue({code:m.custom,...r(a)});return typeof Promise<"u"&&o instanceof Promise?o.then(c=>c?!0:(s(),!1)):o?!0:(s(),!1)})}refinement(e,n){return this._refinement((r,a)=>e(r)?!0:(a.addIssue(typeof n=="function"?n(r,a):n),!1))}_refinement(e){return new se({schema:this,typeName:_.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:n=>this["~validate"](n)}}optional(){return ie.create(this,this._def)}nullable(){return fe.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Se.create(this)}promise(){return je.create(this,this._def)}or(e){return Ye.create([this,e],this._def)}and(e){return Xe.create(this,e,this._def)}transform(e){return new se({...T(this._def),schema:this,typeName:_.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let n=typeof e=="function"?e:()=>e;return new rt({...T(this._def),innerType:this,defaultValue:n,typeName:_.ZodDefault})}brand(){return new Vt({typeName:_.ZodBranded,type:this,...T(this._def)})}catch(e){let n=typeof e=="function"?e:()=>e;return new at({...T(this._def),innerType:this,catchValue:n,typeName:_.ZodCatch})}describe(e){let n=this.constructor;return new n({...this._def,description:e})}pipe(e){return Jt.create(this,e)}readonly(){return it.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},No=/^c[^\s-]{8,}$/i,Lo=/^[0-9a-z]+$/,zo=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Mo=/^[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,Uo=/^[a-z0-9_-]{21}$/i,Fo=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Ho=/^[-+]?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)?)??$/,Bo=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Wo="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",Wn,Vo=/^(?:(?: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])$/,Jo=/^(?:(?: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])$/,Zo=/^(([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]))$/,Go=/^(([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])$/,qo=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Ko=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,na="((\\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])))",Yo=new RegExp(`^${na}$`);function ra(t){let e="[0-5]\\d";t.precision?e=`${e}\\.\\d{${t.precision}}`:t.precision==null&&(e=`${e}(\\.\\d+)?`);let n=t.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${n}`}function Xo(t){return new RegExp(`^${ra(t)}$`)}function aa(t){let e=`${na}T${ra(t)}`,n=[];return n.push(t.local?"Z?":"Z"),t.offset&&n.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${n.join("|")})`,new RegExp(`^${e}$`)}function Qo(t,e){return!!((e==="v4"||!e)&&Vo.test(t)||(e==="v6"||!e)&&Zo.test(t))}function es(t,e){if(!Fo.test(t))return!1;try{let[n]=t.split(".");if(!n)return!1;let r=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),a=JSON.parse(atob(r));return!(typeof a!="object"||a===null||"typ"in a&&a?.typ!=="JWT"||!a.alg||e&&a.alg!==e)}catch{return!1}}function ts(t,e){return!!((e==="v4"||!e)&&Jo.test(t)||(e==="v6"||!e)&&Go.test(t))}var $e=class t extends A{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==y.string){let i=this._getOrReturnCtx(e);return g(i,{code:m.invalid_type,expected:y.string,received:i.parsedType}),S}let r=new Z,a;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(a=this._getOrReturnCtx(e,a),g(a,{code:m.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="max")e.data.length>i.value&&(a=this._getOrReturnCtx(e,a),g(a,{code:m.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),r.dirty());else if(i.kind==="length"){let o=e.data.length>i.value,s=e.data.length<i.value;(o||s)&&(a=this._getOrReturnCtx(e,a),o?g(a,{code:m.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):s&&g(a,{code:m.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),r.dirty())}else if(i.kind==="email")Bo.test(e.data)||(a=this._getOrReturnCtx(e,a),g(a,{validation:"email",code:m.invalid_string,message:i.message}),r.dirty());else if(i.kind==="emoji")Wn||(Wn=new RegExp(Wo,"u")),Wn.test(e.data)||(a=this._getOrReturnCtx(e,a),g(a,{validation:"emoji",code:m.invalid_string,message:i.message}),r.dirty());else if(i.kind==="uuid")Mo.test(e.data)||(a=this._getOrReturnCtx(e,a),g(a,{validation:"uuid",code:m.invalid_string,message:i.message}),r.dirty());else if(i.kind==="nanoid")Uo.test(e.data)||(a=this._getOrReturnCtx(e,a),g(a,{validation:"nanoid",code:m.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid")No.test(e.data)||(a=this._getOrReturnCtx(e,a),g(a,{validation:"cuid",code:m.invalid_string,message:i.message}),r.dirty());else if(i.kind==="cuid2")Lo.test(e.data)||(a=this._getOrReturnCtx(e,a),g(a,{validation:"cuid2",code:m.invalid_string,message:i.message}),r.dirty());else if(i.kind==="ulid")zo.test(e.data)||(a=this._getOrReturnCtx(e,a),g(a,{validation:"ulid",code:m.invalid_string,message:i.message}),r.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{a=this._getOrReturnCtx(e,a),g(a,{validation:"url",code:m.invalid_string,message:i.message}),r.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(a=this._getOrReturnCtx(e,a),g(a,{validation:"regex",code:m.invalid_string,message:i.message}),r.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(a=this._getOrReturnCtx(e,a),g(a,{code:m.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),r.dirty()):i.kind==="toLowerCase"?e.data=e.data.toLowerCase():i.kind==="toUpperCase"?e.data=e.data.toUpperCase():i.kind==="startsWith"?e.data.startsWith(i.value)||(a=this._getOrReturnCtx(e,a),g(a,{code:m.invalid_string,validation:{startsWith:i.value},message:i.message}),r.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(a=this._getOrReturnCtx(e,a),g(a,{code:m.invalid_string,validation:{endsWith:i.value},message:i.message}),r.dirty()):i.kind==="datetime"?aa(i).test(e.data)||(a=this._getOrReturnCtx(e,a),g(a,{code:m.invalid_string,validation:"datetime",message:i.message}),r.dirty()):i.kind==="date"?Yo.test(e.data)||(a=this._getOrReturnCtx(e,a),g(a,{code:m.invalid_string,validation:"date",message:i.message}),r.dirty()):i.kind==="time"?Xo(i).test(e.data)||(a=this._getOrReturnCtx(e,a),g(a,{code:m.invalid_string,validation:"time",message:i.message}),r.dirty()):i.kind==="duration"?Ho.test(e.data)||(a=this._getOrReturnCtx(e,a),g(a,{validation:"duration",code:m.invalid_string,message:i.message}),r.dirty()):i.kind==="ip"?Qo(e.data,i.version)||(a=this._getOrReturnCtx(e,a),g(a,{validation:"ip",code:m.invalid_string,message:i.message}),r.dirty()):i.kind==="jwt"?es(e.data,i.alg)||(a=this._getOrReturnCtx(e,a),g(a,{validation:"jwt",code:m.invalid_string,message:i.message}),r.dirty()):i.kind==="cidr"?ts(e.data,i.version)||(a=this._getOrReturnCtx(e,a),g(a,{validation:"cidr",code:m.invalid_string,message:i.message}),r.dirty()):i.kind==="base64"?qo.test(e.data)||(a=this._getOrReturnCtx(e,a),g(a,{validation:"base64",code:m.invalid_string,message:i.message}),r.dirty()):i.kind==="base64url"?Ko.test(e.data)||(a=this._getOrReturnCtx(e,a),g(a,{validation:"base64url",code:m.invalid_string,message:i.message}),r.dirty()):P.assertNever(i);return{status:r.value,value:e.data}}_regex(e,n,r){return this.refinement(a=>e.test(a),{validation:n,code:m.invalid_string,...x.errToObj(r)})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...x.errToObj(e)})}url(e){return this._addCheck({kind:"url",...x.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...x.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...x.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...x.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...x.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...x.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...x.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...x.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...x.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...x.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...x.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...x.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,...x.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,...x.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...x.errToObj(e)})}regex(e,n){return this._addCheck({kind:"regex",regex:e,...x.errToObj(n)})}includes(e,n){return this._addCheck({kind:"includes",value:e,position:n?.position,...x.errToObj(n?.message)})}startsWith(e,n){return this._addCheck({kind:"startsWith",value:e,...x.errToObj(n)})}endsWith(e,n){return this._addCheck({kind:"endsWith",value:e,...x.errToObj(n)})}min(e,n){return this._addCheck({kind:"min",value:e,...x.errToObj(n)})}max(e,n){return this._addCheck({kind:"max",value:e,...x.errToObj(n)})}length(e,n){return this._addCheck({kind:"length",value:e,...x.errToObj(n)})}nonempty(e){return this.min(1,x.errToObj(e))}trim(){return new t({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxLength(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};$e.create=t=>new $e({checks:[],typeName:_.ZodString,coerce:t?.coerce??!1,...T(t)});function ns(t,e){let n=(t.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,a=n>r?n:r,i=Number.parseInt(t.toFixed(a).replace(".","")),o=Number.parseInt(e.toFixed(a).replace(".",""));return i%o/10**a}var Ve=class t extends A{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)!==y.number){let i=this._getOrReturnCtx(e);return g(i,{code:m.invalid_type,expected:y.number,received:i.parsedType}),S}let r,a=new Z;for(let i of this._def.checks)i.kind==="int"?P.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),g(r,{code:m.invalid_type,expected:"integer",received:"float",message:i.message}),a.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),g(r,{code:m.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),a.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(r=this._getOrReturnCtx(e,r),g(r,{code:m.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),a.dirty()):i.kind==="multipleOf"?ns(e.data,i.value)!==0&&(r=this._getOrReturnCtx(e,r),g(r,{code:m.not_multiple_of,multipleOf:i.value,message:i.message}),a.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),g(r,{code:m.not_finite,message:i.message}),a.dirty()):P.assertNever(i);return{status:a.value,value:e.data}}gte(e,n){return this.setLimit("min",e,!0,x.toString(n))}gt(e,n){return this.setLimit("min",e,!1,x.toString(n))}lte(e,n){return this.setLimit("max",e,!0,x.toString(n))}lt(e,n){return this.setLimit("max",e,!1,x.toString(n))}setLimit(e,n,r,a){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:x.toString(a)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:x.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:x.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:x.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:x.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:x.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:x.toString(n)})}finite(e){return this._addCheck({kind:"finite",message:x.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:x.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:x.toString(e)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&P.isInteger(e.value))}get isFinite(){let e=null,n=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value)}return Number.isFinite(n)&&Number.isFinite(e)}};Ve.create=t=>new Ve({checks:[],typeName:_.ZodNumber,coerce:t?.coerce||!1,...T(t)});var Je=class t extends A{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)!==y.bigint)return this._getInvalidInput(e);let r,a=new Z;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(r=this._getOrReturnCtx(e,r),g(r,{code:m.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),a.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(r=this._getOrReturnCtx(e,r),g(r,{code:m.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),a.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),g(r,{code:m.not_multiple_of,multipleOf:i.value,message:i.message}),a.dirty()):P.assertNever(i);return{status:a.value,value:e.data}}_getInvalidInput(e){let n=this._getOrReturnCtx(e);return g(n,{code:m.invalid_type,expected:y.bigint,received:n.parsedType}),S}gte(e,n){return this.setLimit("min",e,!0,x.toString(n))}gt(e,n){return this.setLimit("min",e,!1,x.toString(n))}lte(e,n){return this.setLimit("max",e,!0,x.toString(n))}lt(e,n){return this.setLimit("max",e,!1,x.toString(n))}setLimit(e,n,r,a){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:r,message:x.toString(a)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:x.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:x.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:x.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:x.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:x.toString(n)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};Je.create=t=>new Je({checks:[],typeName:_.ZodBigInt,coerce:t?.coerce??!1,...T(t)});var Ze=class extends A{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==y.boolean){let r=this._getOrReturnCtx(e);return g(r,{code:m.invalid_type,expected:y.boolean,received:r.parsedType}),S}return q(e.data)}};Ze.create=t=>new Ze({typeName:_.ZodBoolean,coerce:t?.coerce||!1,...T(t)});var Ge=class t extends A{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==y.date){let i=this._getOrReturnCtx(e);return g(i,{code:m.invalid_type,expected:y.date,received:i.parsedType}),S}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return g(i,{code:m.invalid_date}),S}let r=new Z,a;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(a=this._getOrReturnCtx(e,a),g(a,{code:m.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),r.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(a=this._getOrReturnCtx(e,a),g(a,{code:m.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),r.dirty()):P.assertNever(i);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}min(e,n){return this._addCheck({kind:"min",value:e.getTime(),message:x.toString(n)})}max(e,n){return this._addCheck({kind:"max",value:e.getTime(),message:x.toString(n)})}get minDate(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e!=null?new Date(e):null}};Ge.create=t=>new Ge({checks:[],coerce:t?.coerce||!1,typeName:_.ZodDate,...T(t)});var xt=class extends A{_parse(e){if(this._getType(e)!==y.symbol){let r=this._getOrReturnCtx(e);return g(r,{code:m.invalid_type,expected:y.symbol,received:r.parsedType}),S}return q(e.data)}};xt.create=t=>new xt({typeName:_.ZodSymbol,...T(t)});var qe=class extends A{_parse(e){if(this._getType(e)!==y.undefined){let r=this._getOrReturnCtx(e);return g(r,{code:m.invalid_type,expected:y.undefined,received:r.parsedType}),S}return q(e.data)}};qe.create=t=>new qe({typeName:_.ZodUndefined,...T(t)});var Ke=class extends A{_parse(e){if(this._getType(e)!==y.null){let r=this._getOrReturnCtx(e);return g(r,{code:m.invalid_type,expected:y.null,received:r.parsedType}),S}return q(e.data)}};Ke.create=t=>new Ke({typeName:_.ZodNull,...T(t)});var De=class extends A{constructor(){super(...arguments),this._any=!0}_parse(e){return q(e.data)}};De.create=t=>new De({typeName:_.ZodAny,...T(t)});var ve=class extends A{constructor(){super(...arguments),this._unknown=!0}_parse(e){return q(e.data)}};ve.create=t=>new ve({typeName:_.ZodUnknown,...T(t)});var de=class extends A{_parse(e){let n=this._getOrReturnCtx(e);return g(n,{code:m.invalid_type,expected:y.never,received:n.parsedType}),S}};de.create=t=>new de({typeName:_.ZodNever,...T(t)});var kt=class extends A{_parse(e){if(this._getType(e)!==y.undefined){let r=this._getOrReturnCtx(e);return g(r,{code:m.invalid_type,expected:y.void,received:r.parsedType}),S}return q(e.data)}};kt.create=t=>new kt({typeName:_.ZodVoid,...T(t)});var Se=class t extends A{_parse(e){let{ctx:n,status:r}=this._processInputParams(e),a=this._def;if(n.parsedType!==y.array)return g(n,{code:m.invalid_type,expected:y.array,received:n.parsedType}),S;if(a.exactLength!==null){let o=n.data.length>a.exactLength.value,s=n.data.length<a.exactLength.value;(o||s)&&(g(n,{code:o?m.too_big:m.too_small,minimum:s?a.exactLength.value:void 0,maximum:o?a.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:a.exactLength.message}),r.dirty())}if(a.minLength!==null&&n.data.length<a.minLength.value&&(g(n,{code:m.too_small,minimum:a.minLength.value,type:"array",inclusive:!0,exact:!1,message:a.minLength.message}),r.dirty()),a.maxLength!==null&&n.data.length>a.maxLength.value&&(g(n,{code:m.too_big,maximum:a.maxLength.value,type:"array",inclusive:!0,exact:!1,message:a.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((o,s)=>a.type._parseAsync(new oe(n,o,n.path,s)))).then(o=>Z.mergeArray(r,o));let i=[...n.data].map((o,s)=>a.type._parseSync(new oe(n,o,n.path,s)));return Z.mergeArray(r,i)}get element(){return this._def.type}min(e,n){return new t({...this._def,minLength:{value:e,message:x.toString(n)}})}max(e,n){return new t({...this._def,maxLength:{value:e,message:x.toString(n)}})}length(e,n){return new t({...this._def,exactLength:{value:e,message:x.toString(n)}})}nonempty(e){return this.min(1,e)}};Se.create=(t,e)=>new Se({type:t,minLength:null,maxLength:null,exactLength:null,typeName:_.ZodArray,...T(e)});function yt(t){if(t instanceof ee){let e={};for(let n in t.shape){let r=t.shape[n];e[n]=ie.create(yt(r))}return new ee({...t._def,shape:()=>e})}else return t instanceof Se?new Se({...t._def,type:yt(t.element)}):t instanceof ie?ie.create(yt(t.unwrap())):t instanceof fe?fe.create(yt(t.unwrap())):t instanceof me?me.create(t.items.map(e=>yt(e))):t}var ee=class t extends A{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),n=P.objectKeys(e);return this._cached={shape:e,keys:n},this._cached}_parse(e){if(this._getType(e)!==y.object){let d=this._getOrReturnCtx(e);return g(d,{code:m.invalid_type,expected:y.object,received:d.parsedType}),S}let{status:r,ctx:a}=this._processInputParams(e),{shape:i,keys:o}=this._getCached(),s=[];if(!(this._def.catchall instanceof de&&this._def.unknownKeys==="strip"))for(let d in a.data)o.includes(d)||s.push(d);let c=[];for(let d of o){let u=i[d],p=a.data[d];c.push({key:{status:"valid",value:d},value:u._parse(new oe(a,p,a.path,d)),alwaysSet:d in a.data})}if(this._def.catchall instanceof de){let d=this._def.unknownKeys;if(d==="passthrough")for(let u of s)c.push({key:{status:"valid",value:u},value:{status:"valid",value:a.data[u]}});else if(d==="strict")s.length>0&&(g(a,{code:m.unrecognized_keys,keys:s}),r.dirty());else if(d!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let d=this._def.catchall;for(let u of s){let p=a.data[u];c.push({key:{status:"valid",value:u},value:d._parse(new oe(a,p,a.path,u)),alwaysSet:u in a.data})}}return a.common.async?Promise.resolve().then(async()=>{let d=[];for(let u of c){let p=await u.key,h=await u.value;d.push({key:p,value:h,alwaysSet:u.alwaysSet})}return d}).then(d=>Z.mergeObjectSync(r,d)):Z.mergeObjectSync(r,c)}get shape(){return this._def.shape()}strict(e){return x.errToObj,new t({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(n,r)=>{let a=this._def.errorMap?.(n,r).message??r.defaultError;return n.code==="unrecognized_keys"?{message:x.errToObj(e).message??a}:{message:a}}}:{}})}strip(){return new t({...this._def,unknownKeys:"strip"})}passthrough(){return new t({...this._def,unknownKeys:"passthrough"})}extend(e){return new t({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new t({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:_.ZodObject})}setKey(e,n){return this.augment({[e]:n})}catchall(e){return new t({...this._def,catchall:e})}pick(e){let n={};for(let r of P.objectKeys(e))e[r]&&this.shape[r]&&(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}omit(e){let n={};for(let r of P.objectKeys(this.shape))e[r]||(n[r]=this.shape[r]);return new t({...this._def,shape:()=>n})}deepPartial(){return yt(this)}partial(e){let n={};for(let r of P.objectKeys(this.shape)){let a=this.shape[r];e&&!e[r]?n[r]=a:n[r]=a.optional()}return new t({...this._def,shape:()=>n})}required(e){let n={};for(let r of P.objectKeys(this.shape))if(e&&!e[r])n[r]=this.shape[r];else{let i=this.shape[r];for(;i instanceof ie;)i=i._def.innerType;n[r]=i}return new t({...this._def,shape:()=>n})}keyof(){return ia(P.objectKeys(this.shape))}};ee.create=(t,e)=>new ee({shape:()=>t,unknownKeys:"strip",catchall:de.create(),typeName:_.ZodObject,...T(e)});ee.strictCreate=(t,e)=>new ee({shape:()=>t,unknownKeys:"strict",catchall:de.create(),typeName:_.ZodObject,...T(e)});ee.lazycreate=(t,e)=>new ee({shape:t,unknownKeys:"strip",catchall:de.create(),typeName:_.ZodObject,...T(e)});var Ye=class extends A{_parse(e){let{ctx:n}=this._processInputParams(e),r=this._def.options;function a(i){for(let s of i)if(s.result.status==="valid")return s.result;for(let s of i)if(s.result.status==="dirty")return n.common.issues.push(...s.ctx.common.issues),s.result;let o=i.map(s=>new Q(s.ctx.common.issues));return g(n,{code:m.invalid_union,unionErrors:o}),S}if(n.common.async)return Promise.all(r.map(async i=>{let o={...n,common:{...n.common,issues:[]},parent:null};return{result:await i._parseAsync({data:n.data,path:n.path,parent:o}),ctx:o}})).then(a);{let i,o=[];for(let c of r){let d={...n,common:{...n.common,issues:[]},parent:null},u=c._parseSync({data:n.data,path:n.path,parent:d});if(u.status==="valid")return u;u.status==="dirty"&&!i&&(i={result:u,ctx:d}),d.common.issues.length&&o.push(d.common.issues)}if(i)return n.common.issues.push(...i.ctx.common.issues),i.result;let s=o.map(c=>new Q(c));return g(n,{code:m.invalid_union,unionErrors:s}),S}}get options(){return this._def.options}};Ye.create=(t,e)=>new Ye({options:t,typeName:_.ZodUnion,...T(e)});var we=t=>t instanceof Qe?we(t.schema):t instanceof se?we(t.innerType()):t instanceof et?[t.value]:t instanceof tt?t.options:t instanceof nt?P.objectValues(t.enum):t instanceof rt?we(t._def.innerType):t instanceof qe?[void 0]:t instanceof Ke?[null]:t instanceof ie?[void 0,...we(t.unwrap())]:t instanceof fe?[null,...we(t.unwrap())]:t instanceof Vt||t instanceof it?we(t.unwrap()):t instanceof at?we(t._def.innerType):[],cn=class t extends A{_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==y.object)return g(n,{code:m.invalid_type,expected:y.object,received:n.parsedType}),S;let r=this.discriminator,a=n.data[r],i=this.optionsMap.get(a);return i?n.common.async?i._parseAsync({data:n.data,path:n.path,parent:n}):i._parseSync({data:n.data,path:n.path,parent:n}):(g(n,{code:m.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),S)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,n,r){let a=new Map;for(let i of n){let o=we(i.shape[e]);if(!o.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let s of o){if(a.has(s))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(s)}`);a.set(s,i)}}return new t({typeName:_.ZodDiscriminatedUnion,discriminator:e,options:n,optionsMap:a,...T(r)})}};function Vn(t,e){let n=he(t),r=he(e);if(t===e)return{valid:!0,data:t};if(n===y.object&&r===y.object){let a=P.objectKeys(e),i=P.objectKeys(t).filter(s=>a.indexOf(s)!==-1),o={...t,...e};for(let s of i){let c=Vn(t[s],e[s]);if(!c.valid)return{valid:!1};o[s]=c.data}return{valid:!0,data:o}}else if(n===y.array&&r===y.array){if(t.length!==e.length)return{valid:!1};let a=[];for(let i=0;i<t.length;i++){let o=t[i],s=e[i],c=Vn(o,s);if(!c.valid)return{valid:!1};a.push(c.data)}return{valid:!0,data:a}}else return n===y.date&&r===y.date&&+t==+e?{valid:!0,data:t}:{valid:!1}}var Xe=class extends A{_parse(e){let{status:n,ctx:r}=this._processInputParams(e),a=(i,o)=>{if(ln(i)||ln(o))return S;let s=Vn(i.value,o.value);return s.valid?((dn(i)||dn(o))&&n.dirty(),{status:n.value,value:s.data}):(g(r,{code:m.invalid_intersection_types}),S)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([i,o])=>a(i,o)):a(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};Xe.create=(t,e,n)=>new Xe({left:t,right:e,typeName:_.ZodIntersection,...T(n)});var me=class t extends A{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==y.array)return g(r,{code:m.invalid_type,expected:y.array,received:r.parsedType}),S;if(r.data.length<this._def.items.length)return g(r,{code:m.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),S;!this._def.rest&&r.data.length>this._def.items.length&&(g(r,{code:m.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());let i=[...r.data].map((o,s)=>{let c=this._def.items[s]||this._def.rest;return c?c._parse(new oe(r,o,r.path,s)):null}).filter(o=>!!o);return r.common.async?Promise.all(i).then(o=>Z.mergeArray(n,o)):Z.mergeArray(n,i)}get items(){return this._def.items}rest(e){return new t({...this._def,rest:e})}};me.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new me({items:t,typeName:_.ZodTuple,rest:null,...T(e)})};var un=class t extends A{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==y.object)return g(r,{code:m.invalid_type,expected:y.object,received:r.parsedType}),S;let a=[],i=this._def.keyType,o=this._def.valueType;for(let s in r.data)a.push({key:i._parse(new oe(r,s,r.path,s)),value:o._parse(new oe(r,r.data[s],r.path,s)),alwaysSet:s in r.data});return r.common.async?Z.mergeObjectAsync(n,a):Z.mergeObjectSync(n,a)}get element(){return this._def.valueType}static create(e,n,r){return n instanceof A?new t({keyType:e,valueType:n,typeName:_.ZodRecord,...T(r)}):new t({keyType:$e.create(),valueType:e,typeName:_.ZodRecord,...T(n)})}},wt=class extends A{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==y.map)return g(r,{code:m.invalid_type,expected:y.map,received:r.parsedType}),S;let a=this._def.keyType,i=this._def.valueType,o=[...r.data.entries()].map(([s,c],d)=>({key:a._parse(new oe(r,s,r.path,[d,"key"])),value:i._parse(new oe(r,c,r.path,[d,"value"]))}));if(r.common.async){let s=new Map;return Promise.resolve().then(async()=>{for(let c of o){let d=await c.key,u=await c.value;if(d.status==="aborted"||u.status==="aborted")return S;(d.status==="dirty"||u.status==="dirty")&&n.dirty(),s.set(d.value,u.value)}return{status:n.value,value:s}})}else{let s=new Map;for(let c of o){let d=c.key,u=c.value;if(d.status==="aborted"||u.status==="aborted")return S;(d.status==="dirty"||u.status==="dirty")&&n.dirty(),s.set(d.value,u.value)}return{status:n.value,value:s}}}};wt.create=(t,e,n)=>new wt({valueType:e,keyType:t,typeName:_.ZodMap,...T(n)});var vt=class t extends A{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.parsedType!==y.set)return g(r,{code:m.invalid_type,expected:y.set,received:r.parsedType}),S;let a=this._def;a.minSize!==null&&r.data.size<a.minSize.value&&(g(r,{code:m.too_small,minimum:a.minSize.value,type:"set",inclusive:!0,exact:!1,message:a.minSize.message}),n.dirty()),a.maxSize!==null&&r.data.size>a.maxSize.value&&(g(r,{code:m.too_big,maximum:a.maxSize.value,type:"set",inclusive:!0,exact:!1,message:a.maxSize.message}),n.dirty());let i=this._def.valueType;function o(c){let d=new Set;for(let u of c){if(u.status==="aborted")return S;u.status==="dirty"&&n.dirty(),d.add(u.value)}return{status:n.value,value:d}}let s=[...r.data.values()].map((c,d)=>i._parse(new oe(r,c,r.path,d)));return r.common.async?Promise.all(s).then(c=>o(c)):o(s)}min(e,n){return new t({...this._def,minSize:{value:e,message:x.toString(n)}})}max(e,n){return new t({...this._def,maxSize:{value:e,message:x.toString(n)}})}size(e,n){return this.min(e,n).max(e,n)}nonempty(e){return this.min(1,e)}};vt.create=(t,e)=>new vt({valueType:t,minSize:null,maxSize:null,typeName:_.ZodSet,...T(e)});var pn=class t extends A{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==y.function)return g(n,{code:m.invalid_type,expected:y.function,received:n.parsedType}),S;function r(s,c){return Wt({data:s,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,gt(),ke].filter(d=>!!d),issueData:{code:m.invalid_arguments,argumentsError:c}})}function a(s,c){return Wt({data:s,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,gt(),ke].filter(d=>!!d),issueData:{code:m.invalid_return_type,returnTypeError:c}})}let i={errorMap:n.common.contextualErrorMap},o=n.data;if(this._def.returns instanceof je){let s=this;return q(async function(...c){let d=new Q([]),u=await s._def.args.parseAsync(c,i).catch(f=>{throw d.addIssue(r(c,f)),d}),p=await Reflect.apply(o,this,u);return await s._def.returns._def.type.parseAsync(p,i).catch(f=>{throw d.addIssue(a(p,f)),d})})}else{let s=this;return q(function(...c){let d=s._def.args.safeParse(c,i);if(!d.success)throw new Q([r(c,d.error)]);let u=Reflect.apply(o,this,d.data),p=s._def.returns.safeParse(u,i);if(!p.success)throw new Q([a(u,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new t({...this._def,args:me.create(e).rest(ve.create())})}returns(e){return new t({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,n,r){return new t({args:e||me.create([]).rest(ve.create()),returns:n||ve.create(),typeName:_.ZodFunction,...T(r)})}},Qe=class extends A{get schema(){return this._def.getter()}_parse(e){let{ctx:n}=this._processInputParams(e);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}};Qe.create=(t,e)=>new Qe({getter:t,typeName:_.ZodLazy,...T(e)});var et=class extends A{_parse(e){if(e.data!==this._def.value){let n=this._getOrReturnCtx(e);return g(n,{received:n.data,code:m.invalid_literal,expected:this._def.value}),S}return{status:"valid",value:e.data}}get value(){return this._def.value}};et.create=(t,e)=>new et({value:t,typeName:_.ZodLiteral,...T(e)});function ia(t,e){return new tt({values:t,typeName:_.ZodEnum,...T(e)})}var tt=class t extends A{_parse(e){if(typeof e.data!="string"){let n=this._getOrReturnCtx(e),r=this._def.values;return g(n,{expected:P.joinValues(r),received:n.parsedType,code:m.invalid_type}),S}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let n=this._getOrReturnCtx(e),r=this._def.values;return g(n,{received:n.data,code:m.invalid_enum_value,options:r}),S}return q(e.data)}get options(){return this._def.values}get enum(){let e={};for(let n of this._def.values)e[n]=n;return e}get Values(){let e={};for(let n of this._def.values)e[n]=n;return e}get Enum(){let e={};for(let n of this._def.values)e[n]=n;return e}extract(e,n=this._def){return t.create(e,{...this._def,...n})}exclude(e,n=this._def){return t.create(this.options.filter(r=>!e.includes(r)),{...this._def,...n})}};tt.create=ia;var nt=class extends A{_parse(e){let n=P.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==y.string&&r.parsedType!==y.number){let a=P.objectValues(n);return g(r,{expected:P.joinValues(a),received:r.parsedType,code:m.invalid_type}),S}if(this._cache||(this._cache=new Set(P.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let a=P.objectValues(n);return g(r,{received:r.data,code:m.invalid_enum_value,options:a}),S}return q(e.data)}get enum(){return this._def.values}};nt.create=(t,e)=>new nt({values:t,typeName:_.ZodNativeEnum,...T(e)});var je=class extends A{unwrap(){return this._def.type}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==y.promise&&n.common.async===!1)return g(n,{code:m.invalid_type,expected:y.promise,received:n.parsedType}),S;let r=n.parsedType===y.promise?n.data:Promise.resolve(n.data);return q(r.then(a=>this._def.type.parseAsync(a,{path:n.path,errorMap:n.common.contextualErrorMap})))}};je.create=(t,e)=>new je({type:t,typeName:_.ZodPromise,...T(e)});var se=class extends A{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===_.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:n,ctx:r}=this._processInputParams(e),a=this._def.effect||null,i={addIssue:o=>{g(r,o),o.fatal?n.abort():n.dirty()},get path(){return r.path}};if(i.addIssue=i.addIssue.bind(i),a.type==="preprocess"){let o=a.transform(r.data,i);if(r.common.async)return Promise.resolve(o).then(async s=>{if(n.value==="aborted")return S;let c=await this._def.schema._parseAsync({data:s,path:r.path,parent:r});return c.status==="aborted"?S:c.status==="dirty"?We(c.value):n.value==="dirty"?We(c.value):c});{if(n.value==="aborted")return S;let s=this._def.schema._parseSync({data:o,path:r.path,parent:r});return s.status==="aborted"?S:s.status==="dirty"?We(s.value):n.value==="dirty"?We(s.value):s}}if(a.type==="refinement"){let o=s=>{let c=a.refinement(s,i);if(r.common.async)return Promise.resolve(c);if(c instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return s};if(r.common.async===!1){let s=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?S:(s.status==="dirty"&&n.dirty(),o(s.value),{status:n.value,value:s.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(s=>s.status==="aborted"?S:(s.status==="dirty"&&n.dirty(),o(s.value).then(()=>({status:n.value,value:s.value}))))}if(a.type==="transform")if(r.common.async===!1){let o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!Re(o))return S;let s=a.transform(o.value,i);if(s instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:s}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>Re(o)?Promise.resolve(a.transform(o.value,i)).then(s=>({status:n.value,value:s})):S);P.assertNever(a)}};se.create=(t,e,n)=>new se({schema:t,typeName:_.ZodEffects,effect:e,...T(n)});se.createWithPreprocess=(t,e,n)=>new se({schema:e,effect:{type:"preprocess",transform:t},typeName:_.ZodEffects,...T(n)});var ie=class extends A{_parse(e){return this._getType(e)===y.undefined?q(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};ie.create=(t,e)=>new ie({innerType:t,typeName:_.ZodOptional,...T(e)});var fe=class extends A{_parse(e){return this._getType(e)===y.null?q(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};fe.create=(t,e)=>new fe({innerType:t,typeName:_.ZodNullable,...T(e)});var rt=class extends A{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return n.parsedType===y.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}};rt.create=(t,e)=>new rt({innerType:t,typeName:_.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...T(e)});var at=class extends A{_parse(e){let{ctx:n}=this._processInputParams(e),r={...n,common:{...n.common,issues:[]}},a=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return bt(a)?a.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new Q(r.common.issues)},input:r.data})})):{status:"valid",value:a.status==="valid"?a.value:this._def.catchValue({get error(){return new Q(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};at.create=(t,e)=>new at({innerType:t,typeName:_.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...T(e)});var St=class extends A{_parse(e){if(this._getType(e)!==y.nan){let r=this._getOrReturnCtx(e);return g(r,{code:m.invalid_type,expected:y.nan,received:r.parsedType}),S}return{status:"valid",value:e.data}}};St.create=t=>new St({typeName:_.ZodNaN,...T(t)});var rs=Symbol("zod_brand"),Vt=class extends A{_parse(e){let{ctx:n}=this._processInputParams(e),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}},Jt=class t extends A{_parse(e){let{status:n,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?S:i.status==="dirty"?(n.dirty(),We(i.value)):this._def.out._parseAsync({data:i.value,path:r.path,parent:r})})();{let a=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?S:a.status==="dirty"?(n.dirty(),{status:"dirty",value:a.value}):this._def.out._parseSync({data:a.value,path:r.path,parent:r})}}static create(e,n){return new t({in:e,out:n,typeName:_.ZodPipeline})}},it=class extends A{_parse(e){let n=this._def.innerType._parse(e),r=a=>(Re(a)&&(a.value=Object.freeze(a.value)),a);return bt(n)?n.then(a=>r(a)):r(n)}unwrap(){return this._def.innerType}};it.create=(t,e)=>new it({innerType:t,typeName:_.ZodReadonly,...T(e)});function ta(t,e){let n=typeof t=="function"?t(e):typeof t=="string"?{message:t}:t;return typeof n=="string"?{message:n}:n}function oa(t,e={},n){return t?De.create().superRefine((r,a)=>{let i=t(r);if(i instanceof Promise)return i.then(o=>{if(!o){let s=ta(e,r),c=s.fatal??n??!0;a.addIssue({code:"custom",...s,fatal:c})}});if(!i){let o=ta(e,r),s=o.fatal??n??!0;a.addIssue({code:"custom",...o,fatal:s})}}):De.create()}var as={object:ee.lazycreate},_;(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly"})(_||(_={}));var is=(t,e={message:`Input not instance of ${t.name}`})=>oa(n=>n instanceof t,e),sa=$e.create,la=Ve.create,os=St.create,ss=Je.create,da=Ze.create,ls=Ge.create,ds=xt.create,cs=qe.create,us=Ke.create,ps=De.create,hs=ve.create,ms=de.create,fs=kt.create,gs=Se.create,bs=ee.create,ys=ee.strictCreate,xs=Ye.create,ks=cn.create,ws=Xe.create,vs=me.create,Ss=un.create,_s=wt.create,Cs=vt.create,Ts=pn.create,As=Qe.create,Is=et.create,Ps=tt.create,Es=nt.create,Rs=je.create,$s=se.create,Ds=ie.create,js=fe.create,Os=se.createWithPreprocess,Ns=Jt.create,Ls=()=>sa().optional(),zs=()=>la().optional(),Ms=()=>da().optional(),Us={string:(t=>$e.create({...t,coerce:!0})),number:(t=>Ve.create({...t,coerce:!0})),boolean:(t=>Ze.create({...t,coerce:!0})),bigint:(t=>Je.create({...t,coerce:!0})),date:(t=>Ge.create({...t,coerce:!0}))};var Fs=S;var Jn=l.object({id:l.string()}),Hs=l.enum(["top","right","bottom","left","auto"]).default("auto"),Zn=l.enum(["left","middle","right"]),Bs=Zn.default("left"),ca=l.object({label:l.string().optional(),hidden:l.boolean().default(!1)}),Ws={background:l.string().optional(),textColor:l.string().optional(),borderRadius:l.string().optional(),textAlign:Bs,anchor:Hs,showNavigation:l.boolean().default(!0),prevButton:ca.optional(),nextButton:ca.optional()},Vs=l.enum(["pointer","callout","area"]),Js=l.discriminatedUnion("type",[l.object({type:l.literal("html-element"),alphaId:l.string().min(1)})]),Zs=Jn.extend({type:l.literal("message"),variant:Vs.default("callout"),x:l.number().min(0).max(1),y:l.number().min(0).max(1),w:l.number().min(0).max(1).optional(),h:l.number().min(0).max(1).optional(),text:l.string().optional(),target:Js.optional(),advancesStep:l.boolean().default(!0),...Ws}),Gs=Jn.extend({type:l.literal("blur"),x:l.number().min(0).max(1),y:l.number().min(0).max(1),w:l.number().min(0).max(1),h:l.number().min(0).max(1),intensity:l.number().min(0).max(20).default(8)}),qs=Jn.extend({type:l.literal("text"),x:l.number().min(0).max(1),y:l.number().min(0).max(1),text:l.string(),fontSize:l.number().positive().default(16),color:l.string().optional()}),ua=l.discriminatedUnion("type",[Zs,Gs,qs]),pa=new Set(["message","blur","text"]),ha=l.object({type:l.string()}).passthrough();function ma(t){return typeof t=="object"&&t!==null?t.type:void 0}var fa=l.any().superRefine((t,e)=>{let a=(pa.has(ma(t))?ua:ha).safeParse(t);if(!a.success)for(let i of a.error.issues)e.addIssue(i)}).transform(t=>(pa.has(ma(t))?ua:ha).parse(t));var ga=l.object({label:l.string().min(1),href:l.string().refine(t=>/^(https?:|mailto:)/i.test(t),"href must be an http(s) or mailto URL")}),Gn=l.object({logo:l.string().min(1).optional(),name:l.string().min(1).optional(),logoHref:l.string().refine(t=>/^(https?:|mailto:)/i.test(t),"logoHref must be an http(s) or mailto URL").optional(),favicon:l.string().min(1).optional(),cta:ga.optional(),secondaryCta:ga.optional(),watermark:l.boolean().optional()}),ba=Gn.omit({favicon:!0});var Ks=l.object({type:l.literal("next")}),Ys=l.object({type:l.literal("prev")}),Xs=l.object({type:l.literal("step"),stepId:l.string().min(1)}),Qs=l.object({type:l.literal("chapter"),chapterId:l.string().min(1)}),el=l.object({type:l.literal("url"),href:l.string().min(1),target:l.enum(["_self","_blank"]).default("_blank")}),tl=l.object({type:l.literal("restart")}),nl=l.discriminatedUnion("type",[Ks,Ys,Xs,Qs,el,tl]),rl=l.enum(["shimmer"]),hn=l.object({label:l.string().min(1),action:nl.default({type:"next"}),animation:rl.optional(),background:l.string().optional(),textColor:l.string().optional()});var al="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",qn=/^[A-Za-z0-9_-]{12}$/;function il(t){let e=globalThis.crypto;if(!e||typeof e.getRandomValues!="function")throw new Error("generateDemoId requires globalThis.crypto.getRandomValues (Node 19+, browsers, or edge runtime).");e.getRandomValues(t)}function ne(){let t=new Uint8Array(12);il(t);let e="";for(let n of t)e+=al.charAt(n&63);return e}function ya(t){return typeof t=="string"&&qn.test(t)}function xa(t){return String(t+1).padStart(4,"0")}function ka(t){return`snap-${t.toString().padStart(3,"0")}`}function mn(t){let e=((t??"").toLowerCase().split(";")[0]??"").trim();return e.startsWith("image/")?"image":e.startsWith("video/")?"video":e.startsWith("audio/")?"audio":e.startsWith("font/")||e.includes("font")||e.includes("woff")?"font":"other"}function Kn(t){if(!t)return"";let e=t.replace(/^(?:tree\s*item|menu\s*item|menuitem|list\s*item|tab(?:\s*panel)?|button|link|option|region|combobox|radio|checkbox|switch|dialog|row|cell|columnheader|rowheader|navigation|article|banner|main|complementary|contentinfo)\s*:?\s+/i,"").trim();return(e.split(/\r?\n/).map(r=>r.trim()).find(Boolean)??e).replace(/\s+/g," ").trim().slice(0,48)}function Yn(t){let{stepId:e,assetId:n,posterAssetId:r,kind:a,isLast:i}=t,o=`asset:${n}`,s=a==="video"?{type:"video",src:o,posterSrc:r?`asset:${r}`:void 0,naturalWidth:t.naturalWidth,naturalHeight:t.naturalHeight,alt:t.title,sourceUrl:t.sourceUrl??"",title:t.title,autoplay:!0,muted:!0,objectFit:"cover"}:{type:"image",src:o,naturalWidth:t.naturalWidth,naturalHeight:t.naturalHeight,alt:t.title,sourceUrl:t.sourceUrl??"",title:t.title,objectFit:"cover"},c=t.click,d=[];if(c){let h=Kn(c.label);d.push({id:`${e}_pointer`,type:"message",variant:"pointer",x:c.x,y:c.y,text:h?`Click on "${h}"`:"Continue",anchor:"auto",textAlign:"left",advancesStep:!0,showNavigation:!0})}else d.push({id:`${e}_callout`,type:"message",variant:"callout",x:.5,y:.5,text:i?"End of walkthrough":"Continue",anchor:"auto",textAlign:"left",advancesStep:!0,showNavigation:!0});let u=!!c&&!(c.x===0&&c.y===0),p=a==="image"&&t.autoApplyZoom===!0&&u?{zoom:1.35,x:Number(Math.max(0,Math.min(1,c.x)).toFixed(4)),y:Number(Math.max(0,Math.min(1,c.y)).toFixed(4))}:void 0;return{id:e,kind:"content",background:s,...p?{transform:p}:{},annotations:d,advance:{trigger:"click"}}}function wa(t){let{stepId:e,htmlPath:n,click:r}=t,a=[];if(r?.alphaId)a.push({id:`${e}_area`,type:"message",variant:"area",x:Number((r.x??.5).toFixed(4)),y:Number((r.y??.5).toFixed(4)),w:0,h:0,text:Kn(r.label)||"Click here",target:{type:"html-element",alphaId:r.alphaId},anchor:"auto",textAlign:"left",advancesStep:!0,showNavigation:!0});else if(r){let i=Kn(r.label);a.push({id:`${e}_pointer`,type:"message",variant:"pointer",x:Number((r.x??.5).toFixed(4)),y:Number((r.y??.5).toFixed(4)),text:i?`Click on "${i}"`:"Continue",anchor:"auto",textAlign:"left",advancesStep:!0,showNavigation:!0})}return{id:e,kind:"content",background:{type:"html",path:n,naturalWidth:t.naturalWidth,naturalHeight:t.naturalHeight,zoom:1,scroll:t.scroll,sourceUrl:t.sourceUrl??"",title:t.sourceUrl??""},annotations:a,advance:{trigger:"click"}}}function ol(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Xn(t,e){let n=t;for(let[r,a]of e){let i=ol(r);n=n.replace(new RegExp(`(?:\\.\\./)*assets/${i}`,"g"),a),n=n.replace(new RegExp(`assets/${i}`,"g"),a)}return n}function sl(t){return`<script data-inkly-replay-scroll>(()=>{const c=${JSON.stringify(t).replace(/<\/(script)/gi,"<\\/$1")};function r(){const d=document.documentElement,b=document.body;const vw=innerWidth||d.clientWidth||0;const vh=innerHeight||d.clientHeight||0;const mx=Math.max(0,Math.max(d.scrollWidth,b?b.scrollWidth:0)-vw);const my=Math.max(0,Math.max(d.scrollHeight,b?b.scrollHeight:0)-vh);const x=c.maxX>0&&mx>0?c.x/c.maxX*mx:c.x;const y=c.maxY>0&&my>0?c.y/c.maxY*my:c.y;scrollTo(Math.max(0,x),Math.max(0,y));}if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",r,{once:true});r();requestAnimationFrame(r);setTimeout(r,120);setTimeout(r,500);})();</script>`}function va(t,e){let n=sl(e);return/<\/body\s*>/i.test(t)?t.replace(/<\/body\s*>/i,`${n}</body>`):`${t}${n}`}function Sa(t,e){if(!e||/data-inkly-document-css|document\.css/i.test(t))return t;let n='<link rel="stylesheet" href="./document.css?draft=1" data-inkly-document-css>';return/<\/head\s*>/i.test(t)?t.replace(/<\/head\s*>/i,`${n}</head>`):`${n}${t}`}var _a=l.object({id:l.string(),text:l.string(),start:l.number().nonnegative().optional(),end:l.number().nonnegative().optional()});var ll=l.enum(["screenshot","image","video","audio","font","other"]),dl=l.object({id:l.string().min(1),path:l.string().min(1).optional(),uri:l.string().min(1).optional(),sha256:l.string().regex(/^[0-9a-f]{64}$/),kind:ll,contentType:l.string().min(1).optional(),publicUrl:l.string().min(1).optional(),cdnPath:l.string().min(1).optional(),file:l.string().min(1).optional(),size:l.number().int().nonnegative().optional(),createdAt:l.string().min(1).optional(),updatedAt:l.string().min(1).optional(),viewport:l.object({w:l.number().int().positive(),h:l.number().int().positive()}).optional()}),_t=l.object({version:l.literal(1),assets:l.array(dl),screens:l.array(l.unknown()).optional()});var Qn=l.string().regex(/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,{message:"must be a hex color like #5b3df5"}),cl=l.enum(["color","image","glassmorphism"]),Ca=l.object({type:cl,color:Qn.optional(),from:Qn.optional(),to:Qn.optional(),src:l.string().min(1).optional(),alt:l.string().optional(),intensity:l.number().min(-5).max(48).optional()}).superRefine((t,e)=>{if(t.type==="color"){let n=!!t.color,r=!!t.from&&!!t.to;!n&&!r&&e.addIssue({code:l.ZodIssueCode.custom,path:["color"],message:"color backgrounds require color or from/to"}),!!t.from!=!!t.to&&e.addIssue({code:l.ZodIssueCode.custom,path:t.from?["to"]:["from"],message:"gradient backgrounds require both from and to"})}t.type==="image"&&!t.src&&e.addIssue({code:l.ZodIssueCode.custom,path:["src"],message:"image backgrounds require src"})}),Ta=l.object({src:l.string(),alt:l.string().optional()});var er=l.object({src:l.string().min(1),duration:l.number().positive().optional()});var ul=l.enum(["text","dropdown"]),pl=l.object({value:l.string().min(1),label:l.string().min(1)}),hl=l.object({id:l.string(),label:l.string(),type:ul.default("text"),placeholder:l.string().optional(),required:l.boolean().default(!1),options:l.array(pl).optional()}).superRefine((t,e)=>{t.type==="dropdown"&&(!t.options||t.options.length===0)&&e.addIssue({code:l.ZodIssueCode.custom,message:"Dropdown field requires at least one option.",path:["options"]})}),Ra=l.object({src:l.string().min(1),alt:l.string().optional(),height:l.number().int().positive().optional()}),ml=l.enum(["left","right","top"]),fl=l.enum(["standard","hero"]),$a=l.object({src:l.string().min(1),alt:l.string().optional(),naturalWidth:l.number().positive().optional(),naturalHeight:l.number().positive().optional(),position:ml.default("right"),layout:fl.default("hero")}),gl=l.object({type:l.literal("headline"),id:l.string(),logo:Ra.optional(),image:$a.optional(),title:l.string(),titleColor:l.string().optional(),description:l.string().optional(),descriptionColor:l.string().optional(),textAlign:Zn.optional(),cta:hn.optional(),secondaryCta:hn.optional()}),bl=l.object({type:l.literal("form"),id:l.string(),logo:Ra.optional(),image:$a.optional(),title:l.string().optional(),description:l.string().optional(),fields:l.array(hl).min(1),submit:hn.default({label:"Submit",action:{type:"next"}})}),yl="allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox allow-presentation",xl="camera; microphone; fullscreen; payment; clipboard-write",kl=l.object({type:l.literal("embed"),id:l.string(),src:l.string(),iframeTitle:l.string().optional(),sandbox:l.string().default(yl),allow:l.string().default(xl)}),wl=l.object({type:l.literal("custom"),id:l.string(),name:l.string().min(1),data:l.record(l.unknown()).optional()}),Aa=l.discriminatedUnion("type",[gl,bl,kl,wl]),Ia=new Set(["headline","form","embed","custom"]),Pa=l.object({type:l.string()}).passthrough();function Ea(t){return typeof t=="object"&&t!==null?t.type:void 0}var Da=l.any().superRefine((t,e)=>{let a=(Ia.has(Ea(t))?Aa:Pa).safeParse(t);if(!a.success)for(let i of a.error.issues)e.addIssue(i)}).transform(t=>(Ia.has(Ea(t))?Aa:Pa).parse(t));var ja=l.enum(["contain","cover","fill"]),Oa=l.enum(["left top","center top","right top","left center","center center","right center","left bottom","center bottom","right bottom"]),vl=l.object({type:l.literal("image"),src:l.string().min(1),naturalWidth:l.number().positive(),naturalHeight:l.number().positive(),alt:l.string().optional(),sourceUrl:l.string().optional(),title:l.string().optional(),objectFit:ja.optional(),objectPosition:Oa.optional()}),Sl=l.object({type:l.literal("video"),src:l.string().min(1),posterSrc:l.string().min(1).optional(),naturalWidth:l.number().positive(),naturalHeight:l.number().positive(),alt:l.string().optional(),sourceUrl:l.string().optional(),title:l.string().optional(),autoplay:l.boolean().default(!0),muted:l.boolean().default(!0),objectFit:ja.optional(),objectPosition:Oa.optional()}),_l=l.object({x:l.number().nonnegative().default(0),y:l.number().nonnegative().default(0),maxX:l.number().nonnegative().default(0),maxY:l.number().nonnegative().default(0)}),Cl=l.object({type:l.literal("html"),path:l.string().min(1),naturalWidth:l.number().positive(),naturalHeight:l.number().positive(),zoom:l.number().positive().default(1),scroll:_l.default({x:0,y:0,maxX:0,maxY:0}),sourceUrl:l.string().optional(),title:l.string().optional()}),Tl=l.discriminatedUnion("type",[vl,Sl,Cl]),Al=l.object({zoom:l.number().min(1).default(1),x:l.number().min(0).max(1).default(.5),y:l.number().min(0).max(1).default(.5)}),Il=l.object({trigger:l.enum(["auto","click"]).default("auto")}).default({trigger:"auto"}),Pl=l.object({kind:l.literal("content").default("content"),id:l.string(),label:l.string().optional(),duration:l.number().positive().optional(),background:Tl,script:l.string().optional(),voiceover:er.optional(),transform:Al.optional(),advance:Il,annotations:l.array(fa).default([]),captions:l.array(_a).optional()}).passthrough(),El=l.object({kind:l.literal("cover"),id:l.string(),label:l.string().optional(),widgets:l.array(Da).length(1),background:Ca.optional(),backgroundImage:Ta.optional(),backgroundDim:l.number().min(0).max(1).optional(),script:l.string().optional(),voiceover:er.optional(),duration:l.number().positive().optional(),advance:l.object({trigger:l.enum(["auto","click"]).default("click")}).default({trigger:"click"})}).passthrough(),Na=l.discriminatedUnion("kind",[Pl,El]);var Rl=/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,La=l.string().regex(Rl,"must be a hex color like #5b3df5"),fn=l.object({primary:La.optional(),secondary:La.optional(),font:l.string().min(1).optional(),radius:l.string().min(1).optional()}).partial();var gn=l.string().regex(/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,{message:"must be a hex color like #5b3df5"}),$l=l.object({id:l.string(),title:l.string(),stepIds:l.array(l.string()).min(1)}),Dl=l.object({hideHeader:l.boolean().default(!1),hideControls:l.boolean().default(!1),controls:l.enum(["full","minimal","hidden"]).optional(),showHubBreadcrumb:l.boolean().default(!1),mobileFooterMessage:l.boolean().default(!0),autoplay:l.boolean().default(!1)}),jl=l.object({width:l.number().positive(),height:l.number().positive()}),Ol=l.enum(["public","private"]),Nl=l.enum(["none","color","image"]),Ll=l.object({type:Nl,color:gn.optional(),from:gn.optional(),to:gn.optional(),src:l.string().min(1).optional(),alt:l.string().optional()}).superRefine((t,e)=>{if(t.type==="color"){let n=!!t.color,r=!!t.from&&!!t.to;!n&&!r&&e.addIssue({code:l.ZodIssueCode.custom,path:["color"],message:"color backgrounds require color or from/to"}),!!t.from!=!!t.to&&e.addIssue({code:l.ZodIssueCode.custom,path:t.from?["to"]:["from"],message:"gradient backgrounds require both from and to"})}t.type==="image"&&!t.src&&e.addIssue({code:l.ZodIssueCode.custom,path:["src"],message:"image backgrounds require src"})}),ot=l.object({id:l.string().regex(qn,{message:"must be a 12-character URL-safe demo id (see generateDemoId)"}),version:l.number().int().min(1),title:l.string().optional(),subtitle:l.string().optional(),runtime:l.string().min(1).optional(),visibility:Ol.default("public"),backgroundColor:gn.optional(),background:Ll.optional(),theme:l.object({preset:l.string().min(1).optional(),tokens:fn.optional(),brand:ba.optional()}).optional(),chrome:Dl.default({}),aspectRatio:jl.optional(),chapters:l.array($l).default([]),steps:l.array(Na).min(1)}).passthrough().superRefine((t,e)=>{let n=new Set(t.steps.map(a=>a.id)),r=new Set(t.chapters.map(a=>a.id));t.chapters.forEach((a,i)=>{a.stepIds.forEach(o=>{n.has(o)||e.addIssue({code:l.ZodIssueCode.custom,path:["chapters",i,"stepIds"],message:`Chapter "${a.id}" references unknown step "${o}"`})})}),t.steps.forEach((a,i)=>{a.kind==="cover"&&a.widgets.forEach((o,s)=>{o.type==="headline"&&["cta","secondaryCta"].forEach(c=>{let d=o[c]?.action;d&&(d.type==="step"&&!n.has(d.stepId)&&e.addIssue({code:l.ZodIssueCode.custom,path:["steps",i,"widgets",s,c,"action","stepId"],message:`Widget "${o.id}" CTA targets unknown step "${d.stepId}"`}),d.type==="chapter"&&!r.has(d.chapterId)&&e.addIssue({code:l.ZodIssueCode.custom,path:["steps",i,"widgets",s,c,"action","chapterId"],message:`Widget "${o.id}" CTA targets unknown chapter "${d.chapterId}"`}))})})})});function bn(t){return ot.parse(t)}function Ct(t){let e=typeof t=="object"&&t!==null?t:{},n=ya(e.id),r=n?e:{...e,id:ne()};return{config:ot.parse(r),changed:!n}}function za(t){let e=new Map;t.forEach((r,a)=>{let i=e.get(r.id);i?i.push({entry:r,index:a}):e.set(r.id,[{entry:r,index:a}])});let n=[];for(let r of e.values()){if(r.length<2)continue;let a=[...r].sort((o,s)=>o.entry.updatedAt!==s.entry.updatedAt?o.entry.updatedAt-s.entry.updatedAt:o.index-s.index),[,...i]=a;for(let{entry:o}of i)n.push({entry:o,newId:ne()})}return n}var tr=l.enum(["sidebar","tabs"]),zl=l.object({name:l.string().min(1),description:l.string().min(1).optional(),icon:l.string().min(1).optional(),demos:l.array(l.string().min(1))}),ge=l.object({$schema:l.string().optional(),name:l.string().min(1),runtime:l.string().regex(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/,"runtime must be an exact semver version"),runtimeRange:l.string().min(1).optional(),layout:tr.optional(),theme:l.string().min(1).optional(),tokens:fn.optional(),brand:Gn.optional(),title:l.string().min(1).optional(),subtitle:l.string().min(1).optional(),collections:l.array(zl).optional()});function Ma({slug:t,config:e,resolveAssetSrc:n}){let r=e.title??e.id??t;return{slug:t,title:r,description:Ml(e,r),thumbnail:Hl(e,r,n),visibility:e.visibility}}function yn(t,e){return t.length<=e?t:`${t.slice(0,e-1).trimEnd()}\u2026`}function Ml(t,e){if(t.subtitle?.trim())return yn(t.subtitle.trim(),120);for(let n of t.steps){if(n.kind!=="content")continue;let r=n.captions?.[0]?.text;if(r&&r.trim())return yn(r.trim(),120);break}for(let n of t.steps)if(n.kind==="cover"){for(let r of n.widgets)if(r.type==="headline"&&r.description&&r.description.trim())return yn(r.description.trim(),120)}return yn(`Explore the ${e} workflow.`,120)}function Ul(t){return t.background?t.background.type==="image":t.backgroundImage?!0:t.widgets.some(e=>e.type==="headline"?!!e.title:e.type==="embed"?!!e.src:e.type==="form")}function nr(t,e){return t?e?e(t):t:null}function Fl(t,e){if(!e)return t;let n=t.widgets.map(o=>{if((o.type==="headline"||o.type==="form")&&o.image?.src){let s=e(o.image.src);return s&&s!==o.image.src?{...o,image:{...o.image,src:s}}:o}return o}),r=t.backgroundImage,a=t.background;if(a?.type==="image"&&a.src){let o=e(a.src);o&&o!==a.src&&(a={...a,src:o})}if(r?.src){let o=e(r.src);o&&o!==r.src&&(r={...r,src:o})}return!n.some((o,s)=>o!==t.widgets[s])&&a===t.background&&r===t.backgroundImage?t:{...t,widgets:n,background:a,backgroundImage:r}}function Hl(t,e,n){let r=t.steps[0];if(r){if(r.kind==="cover"&&Ul(r))return{kind:"cover",cover:Fl(r,n),themeTokens:t.theme?.tokens};if(r.kind==="content"){let a=r.background;if(a?.type==="image"){let i=nr(a.src,n);if(i)return{kind:"image",src:i}}else if(a?.type==="video"){let i=nr(a.posterSrc,n);if(i)return{kind:"image",src:i};let o=nr(a.src,n);if(o)return{kind:"video",src:o}}else if(a?.type==="html")return{kind:"html",path:a.path,naturalWidth:a.naturalWidth,naturalHeight:a.naturalHeight,zoom:a.zoom,scroll:a.scroll}}}return{kind:"placeholder",title:e}}function Bl(t){return!t||t==="null"?"":t.replace(/\/+$/,"")}function Wl(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Vl(t){return String(t||"").replace(/\\/g,"/").replace(/^\/+/,"").replace(/^\.\//,"")}function rr(t){let e=Vl(t);return/\/index\.html$/i.test(e)||/^index\.html$/i.test(e)?e.replace(/index\.html$/i,"document.css"):/\.html?$/i.test(e)?e.replace(/\.html?$/i,".css"):null}function Jl(t){return t.replace(/<meta\b(?=[^>]*\bhttp-equiv\s*=\s*["']?content-security-policy\b)[^>]*>/gi,"")}var Zl=/\s+(?:href|xlink:href|target|rel|download|ping|referrerpolicy|data-inkly-href)(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s"'=<>`]+))?/gi;function Zt(t){return String(t||"").replace(/<(a|area)\b[^>]*>/gi,e=>e.replace(Zl,""))}function st(t,e={}){let n=Bl(e.resourceOrigin),r=String(t||"");return n?r.replace(new RegExp(`(^|["'\\(\\s,=])${Wl("/api/hubs/")}`,"g"),`$1${n}/api/hubs/`):r}function Gl(t){return Jl(t).replace(/<style\b(?=[^>]*\bdata-inkly-document-css\b)[\s\S]*?<\/style>/gi,"").replace(/<link\b(?=[^>]*\bdata-inkly-document-css\b)[^>]*>/gi,"").replace(/<link\b(?=[^>]*\brel\s*=\s*["']?stylesheet\b)(?=[^>]*\bhref\s*=\s*["']?[^"'\s>]*document\.css(?:\?draft=1)?)[^>]*>/gi,"")}function Ua({htmlPath:t,html:e,css:n,cssHref:r,resourceOrigin:a}){let i=Gl(Zt(e)),o=rr(t)!=null,s=n?.trim()??"";if(o&&s){let d=`<style data-inkly-document-css>
3
3
  ${st(n??"",{resourceOrigin:a}).replace(/<\/(style)/gi,"<\\/$1")}
4
- </style>`,u=/<\/head\s*>/i.test(i)?i.replace(/<\/head\s*>/i,`${d}</head>`):`${d}${i}`;return st(u,{resourceOrigin:a})}if(o&&r){let d=`<link rel="stylesheet" href="${st(r,{resourceOrigin:a})}" data-inkly-document-css>`,u=/<\/head\s*>/i.test(i)?i.replace(/<\/head\s*>/i,`${d}</head>`):`${d}${i}`;return st(u,{resourceOrigin:a})}return st(i,{resourceOrigin:a})}var Gt=l.string().regex(/^sha(?:256|384|512)-[A-Za-z0-9+/]+=*$/,{message:"must be an SRI string like sha384-<base64>"}),xn=l.string().regex(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/,{message:"must be an exact semver like 0.1.0"}),Zl=l.object({version:xn,url:l.string().url(),integrity:Gt}),kn=l.object({$schema:l.string().optional(),runtime:Zl});var za=l.string().regex(/^[0-9a-f]{64}$/,{message:"must be lowercase sha-256 hex (64 chars)"}),Tt=l.object({version:xn,externals:l.array(l.string().min(1)),jsHash:za,cssHash:za,jsBytes:l.number().int().nonnegative(),cssBytes:l.number().int().nonnegative(),integrity:Gt,cssIntegrity:Gt,minSchema:xn,codemodsIntegrity:Gt.optional(),codemodsBytes:l.number().int().nonnegative().optional()});var lt=["__inkly","assets","api","c"],Gl={__inkly:"'__inkly' is reserved for CLI internal endpoints",assets:"'assets' is reserved for hub static files",api:"'api' is reserved for future use",c:"'c' is reserved for future use"},ql=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;function Se(t){return typeof t!="string"?{ok:!1,reason:"Name is required."}:t.length===0?{ok:!1,reason:"Name cannot be empty."}:/\s/.test(t)?{ok:!1,reason:"Name cannot contain spaces."}:t.includes("/")||t.includes("\\")?{ok:!1,reason:"Name cannot contain slashes."}:t.includes(".")?{ok:!1,reason:"Name cannot contain dots."}:lt.includes(t)?{ok:!1,reason:Gl[t]}:t.startsWith("_")?{ok:!1,reason:"Name cannot start with '_' (reserved for internal use)."}:t!==t.toLowerCase()?{ok:!1,reason:'Name must be lowercase (e.g. "getting-started").'}:ql.test(t)?{ok:!0}:{ok:!1,reason:"Name must be kebab-case: lowercase letters, digits, and hyphens, starting and ending with a letter or digit."}}var Oe={inkly:{primary:"#5b6cff",secondary:"#ebebeb",radius:"10px",font:"Geist, ui-sans-serif, system-ui, sans-serif"},editorial:{primary:"#d97757",secondary:"#f4f0e7",radius:"12px",font:"Inter, ui-sans-serif, system-ui, sans-serif"},mono:{primary:"#5b6cff",secondary:"#f5f5f5",radius:"10px",font:"Inter, ui-sans-serif, system-ui, sans-serif"},substack:{primary:"#ff6719",secondary:"#fdf1eb",radius:"4px",font:"Inter, ui-sans-serif, system-ui, sans-serif"}};var Kl=`
4
+ </style>`,u=/<\/head\s*>/i.test(i)?i.replace(/<\/head\s*>/i,`${d}</head>`):`${d}${i}`;return st(u,{resourceOrigin:a})}if(o&&r){let d=`<link rel="stylesheet" href="${st(r,{resourceOrigin:a})}" data-inkly-document-css>`,u=/<\/head\s*>/i.test(i)?i.replace(/<\/head\s*>/i,`${d}</head>`):`${d}${i}`;return st(u,{resourceOrigin:a})}return st(i,{resourceOrigin:a})}var Gt=l.string().regex(/^sha(?:256|384|512)-[A-Za-z0-9+/]+=*$/,{message:"must be an SRI string like sha384-<base64>"}),xn=l.string().regex(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/,{message:"must be an exact semver like 0.1.0"}),ql=l.object({version:xn,url:l.string().url(),integrity:Gt}),kn=l.object({$schema:l.string().optional(),runtime:ql});var Fa=l.string().regex(/^[0-9a-f]{64}$/,{message:"must be lowercase sha-256 hex (64 chars)"}),Tt=l.object({version:xn,externals:l.array(l.string().min(1)),jsHash:Fa,cssHash:Fa,jsBytes:l.number().int().nonnegative(),cssBytes:l.number().int().nonnegative(),integrity:Gt,cssIntegrity:Gt,minSchema:xn,codemodsIntegrity:Gt.optional(),codemodsBytes:l.number().int().nonnegative().optional()});var lt=["__inkly","assets","api","c"],Kl={__inkly:"'__inkly' is reserved for CLI internal endpoints",assets:"'assets' is reserved for hub static files",api:"'api' is reserved for future use",c:"'c' is reserved for future use"},Yl=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;function _e(t){return typeof t!="string"?{ok:!1,reason:"Name is required."}:t.length===0?{ok:!1,reason:"Name cannot be empty."}:/\s/.test(t)?{ok:!1,reason:"Name cannot contain spaces."}:t.includes("/")||t.includes("\\")?{ok:!1,reason:"Name cannot contain slashes."}:t.includes(".")?{ok:!1,reason:"Name cannot contain dots."}:lt.includes(t)?{ok:!1,reason:Kl[t]}:t.startsWith("_")?{ok:!1,reason:"Name cannot start with '_' (reserved for internal use)."}:t!==t.toLowerCase()?{ok:!1,reason:'Name must be lowercase (e.g. "getting-started").'}:Yl.test(t)?{ok:!0}:{ok:!1,reason:"Name must be kebab-case: lowercase letters, digits, and hyphens, starting and ending with a letter or digit."}}var Oe={inkly:{primary:"#5b6cff",secondary:"#ebebeb",radius:"10px",font:"Geist, ui-sans-serif, system-ui, sans-serif"},editorial:{primary:"#d97757",secondary:"#f4f0e7",radius:"12px",font:"Inter, ui-sans-serif, system-ui, sans-serif"},mono:{primary:"#5b6cff",secondary:"#f5f5f5",radius:"10px",font:"Inter, ui-sans-serif, system-ui, sans-serif"},substack:{primary:"#ff6719",secondary:"#fdf1eb",radius:"4px",font:"Inter, ui-sans-serif, system-ui, sans-serif"}};var Xl=`
5
5
  /* \u2500\u2500 Editorial hub-index \u2014 designs 07 (sidebar) + 15 (top nav) \u2500\u2500\u2500\u2500\u2500\u2500
6
6
  Design 07 (ClaudeHub) is the source of truth for tokens: cream
7
7
  #FAF9F5 page, ink #1F1E1B, accent #D97757, sidebar #F4F0E7, hairline
@@ -1191,7 +1191,7 @@ ${st(n??"",{resourceOrigin:a}).replace(/<\/(style)/gi,"<\\/$1")}
1191
1191
  0 1px 2px rgba(91,55,21,0.07),
1192
1192
  0 20px 40px -22px rgba(91,55,21,0.30);
1193
1193
  }
1194
- `,Ua={id:"editorial",label:"Editorial",theme:Oe.editorial,css:Kl};var Yl=`
1194
+ `,Ha={id:"editorial",label:"Editorial",theme:Oe.editorial,css:Xl};var Ql=`
1195
1195
  /* \u2500\u2500 Mono hub-index \u2014 designs 08 (sidebar) + 16 (top-nav filled pills) \u2500\u2500
1196
1196
  White paper #FFFFFF, ink #0D0D0D, muted #5D5D5D, dim #8E8E8E,
1197
1197
  hairline #ECECEC, sidebar bg #F9F9F9. CTAs use the primary token;
@@ -2333,7 +2333,7 @@ ${st(n??"",{resourceOrigin:a}).replace(/<\/(style)/gi,"<\\/$1")}
2333
2333
  border-radius: 10px;
2334
2334
  box-shadow: none;
2335
2335
  }
2336
- `,Ma={id:"mono",label:"Mono",theme:Oe.mono,css:Yl};var Xl=`
2336
+ `,Ba={id:"mono",label:"Mono",theme:Oe.mono,css:Ql};var ed=`
2337
2337
  /* Newsreader 600 \u2014 the true semi-bold cut for the "Built with Inkly"
2338
2338
  wordmark. Self-hosted on the Inkly bundle CDN so the self-contained demo
2339
2339
  document loads it without a Google Fonts round-trip; Georgia is the
@@ -4029,7 +4029,7 @@ ${st(n??"",{resourceOrigin:a}).replace(/<\/(style)/gi,"<\\/$1")}
4029
4029
  line-height: 1.45;
4030
4030
  }
4031
4031
  }
4032
- `,Fa={id:"inkly",label:"Inkly",theme:Oe.inkly,css:Xl};var Ql=`
4032
+ `,Wa={id:"inkly",label:"Inkly",theme:Oe.inkly,css:ed};var td=`
4033
4033
  .hub-index[data-theme="substack"] {
4034
4034
  background: #ffffff;
4035
4035
  color: #1a1a1a;
@@ -4960,105 +4960,107 @@ ${st(n??"",{resourceOrigin:a}).replace(/<\/(style)/gi,"<\\/$1")}
4960
4960
  --demo-watermark-mark-radius: 3px;
4961
4961
  font-family: var(--demo-font);
4962
4962
  }
4963
- `,Ha={id:"substack",label:"Substack",theme:Oe.substack,css:Ql};var Ba=[Fa,Ua,Ma,Ha],le=Object.fromEntries(Ba.map(t=>[t.id,t]));import{createHash as ud}from"crypto";import{mkdir as pd,readFile as or,rm as af,stat as of}from"fs/promises";import{homedir as hd}from"os";import{join as Ne}from"path";import{fileURLToPath as md}from"url";import{access as ed,readFile as td,readdir as nd,stat as rd}from"fs/promises";import{dirname as ad,join as At,resolve as id,sep as od}from"path";async function V(t){return ed(t).then(()=>!0,()=>!1)}async function Ce(t){let e=id(t);for(;;){if(await V(At(e,"inkly.json")))return e;let n=ad(e);if(n===e)return null;e=n}}async function nr(t){let e=At(t,"demos");if(!await V(e))return[];let n=[];async function r(a){let i;try{i=await nd(a,{withFileTypes:!0})}catch{return}if(i.some(o=>o.isFile()&&o.name==="demo.config.json")){let o=a===e?"":a.slice(e.length+1).split(od).join("/");n.push({slug:o,dir:a,configPath:At(a,"demo.config.json")});return}for(let o of i)o.isDirectory()&&await r(At(a,o.name))}return await r(e),n.sort((a,i)=>a.slug.localeCompare(i.slug))}async function _e(t){let e=await td(t,"utf8");return JSON.parse(e)}async function It(t){let e=await Ce(t);if(!e)throw new Error(`No inkly.json found in ${t} or any parent directory.`);let n=At(e,"inkly.json"),r=fe.safeParse(await _e(n));if(!r.success)throw new Error(`inkly.json failed schema validation: ${r.error.message}`);let a=[];for(let i of await nr(e)){let o;try{o=Ct(await _e(i.configPath)).config}catch(d){throw new Error(`demos/${i.slug}/demo.config.json failed schema validation: ${d.message}`)}let s=At(i.dir,"assets.json"),c=null;if(await V(s)){let d=_t.safeParse(await _e(s));if(!d.success)throw new Error(`demos/${i.slug}/assets.json failed schema validation: ${d.error.message}`);c=d.data}a.push({slug:i.slug,dir:i.dir,configPath:i.configPath,config:o,assetsPath:s,assets:c})}return{root:e,inklyPath:n,inkly:r.data,demos:a}}function rr(t){let e=t.split("/")[0]??t,n=Se(e);return n.ok?lt.includes(t)?`Demo folder "${t}" uses a reserved slug.`:null:n.reason}async function wn(t){try{let e=await rd(t);return e.isFile()?e.size:null}catch{return null}}import{mkdir as sd,rename as ld,writeFile as dd}from"fs/promises";import{dirname as cd}from"path";async function K(t,e,n){await sd(cd(t),{recursive:!0});let r=`${t}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;await dd(r,e,n?.mode!=null?{mode:n.mode}:void 0),await ld(r,t)}var fd="https://www.runtime.inklyai.dev";function ct(){let t=process.env.BUNDLES_R2_PUBLIC_BASE_URL;return typeof t=="string"&&t.length>0?t.replace(/\/+$/,""):fd}function sr(t,e,n=ct()){return`${n}/runtime/${t}/${e}`}function gd(t){return Ne(hd(),".inkly","cache","runtime",t)}function bd(t){let e=/^(sha(?:256|384|512))-([A-Za-z0-9+/]+=*)$/.exec(t);return e?{algorithm:e[1],expected:e[2]}:null}function Pt(t,e){let n=bd(e);return n?ud(n.algorithm).update(t).digest("base64")===n.expected:!1}var Et=class extends Error{constructor(n,r,a){super(`integrity mismatch for ${n}: expected ${r}`+(a?` (from ${a})`:"")+". The bundle does not match inkly.lock. Re-run `inkly lock` to refresh, or the CDN may have been tampered with.");this.file=n;this.expected=r;this.url=a;this.name="IntegrityMismatchError"}},dt=class extends Error{constructor(e){super(e),this.name="LockReadError"}};async function yd(t){let e=Ne(t,"inkly.lock");if(!await V(e))throw new dt(`no inkly.lock found in ${t}. Run \`inkly lock\` to generate one.`);let n;try{n=await _e(e)}catch(a){throw new dt(`failed to read ${e}: ${a.message}`)}let r=kn.safeParse(n);if(!r.success)throw new dt(`${e} failed InklyLockSchema validation: ${r.error.message}`);return r.data}function xd(t,e){let n=t.lastIndexOf("/");return n===-1?t:`${t.slice(0,n+1)}${e}`}async function Wa(t){try{return await or(t)}catch{return null}}async function kd(t){let e=Ne(t,"manifest.json");if(!await V(e))return null;try{let n=JSON.parse(await or(e,"utf8")),r=Tt.safeParse(n);return r.success?r.data:null}catch{return null}}async function ar(t,e){await K(t,e)}async function ir(t,e){if(t.startsWith("file://"))try{return await or(md(t))}catch(a){throw new Error(`failed to read ${t}: ${a.message}`)}let n;try{n=await e(t)}catch(a){throw new Error(`failed to fetch ${t}: ${a.message}`)}if(!n.ok)throw new Error(`fetch ${t} returned HTTP ${n.status}`);let r=await n.arrayBuffer();return Buffer.from(r)}async function Va(t){let e=t.fetchImpl??fetch,n=await yd(t.hubRoot),{version:r,url:a,integrity:i}=n.runtime,o=gd(r),s=await Wa(Ne(o,"runtime.js")),c=await Wa(Ne(o,"runtime.css")),d=await kd(o);if(s&&c&&d){let O=Pt(s,i),E=d.version===r,g=Pt(c,d.cssIntegrity);if(O&&E&&g)return{version:r,cacheDir:o,manifest:d,fetched:!1,bytesFetched:0,lock:n}}let u=O=>{let E=t.urlOverrides?.[O];return E||(O==="runtime.js"?a:xd(a,O))};await pd(o,{recursive:!0});let p=u("manifest.json"),h=await ir(p,e),y;try{let O=JSON.parse(h.toString("utf8")),E=Tt.safeParse(O);if(!E.success)throw new Error(`manifest from ${p} failed schema validation: ${E.error.message}`);y=E.data}catch(O){throw new Error(`manifest from ${p} is not valid JSON: ${O.message}`)}if(y.version!==r)throw new Error(`CDN manifest for ${p} reports version ${y.version} but inkly.lock pins ${r}. Re-run \`inkly lock\` to refresh.`);let k=u("runtime.js"),v=await ir(k,e);if(!Pt(v,i))throw new Et("runtime.js",i,k);let C=u("runtime.css"),$=await ir(C,e);if(!Pt($,y.cssIntegrity))throw new Et("runtime.css",y.cssIntegrity,C);return await ar(Ne(o,"runtime.js"),v),await ar(Ne(o,"runtime.css"),$),await ar(Ne(o,"manifest.json"),h),{version:r,cacheDir:o,manifest:y,fetched:!0,bytesFetched:v.byteLength+$.byteLength+h.byteLength,lock:n}}function vn(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Ad(t=ct()){return`${t}/runtime/latest.json`}function Ga(t){return Za==="/"?t:t.split("/").join(Za)}function Id(t){let e=t??globalThis.fetch;if(typeof e!="function")throw new Error("This Node runtime does not provide fetch; Node 20+ is required.");return e}async function qa(t,e){let n=await e(t);if(!n.ok)throw new Error(`failed to fetch ${t}: HTTP ${n.status}${n.statusText?` ${n.statusText}`:""}`);let r=wd.from(await n.arrayBuffer()),a;try{a=JSON.parse(r.toString("utf8"))}catch(i){throw new Error(`failed to parse JSON from ${t}: ${i.message}`)}return{json:a,bytes:r}}function Pd(t,e){if(!vn(t))throw new Error(`${e} is not an object`);let n=t.version,r=t.hubSkeleton;if(typeof n!="string"||n.length===0)throw new Error(`${e} is missing version`);if(!vn(r))throw new Error(`${e} is missing hubSkeleton`);if(typeof r.url!="string"||r.url.length===0)throw new Error(`${e} is missing hubSkeleton.url`);if(typeof r.integrity!="string"||r.integrity.length===0)throw new Error(`${e} is missing hubSkeleton.integrity`);if(typeof r.version!="number")throw new Error(`${e} is missing hubSkeleton.version`);let a=typeof r.bytes=="number"?r.bytes:void 0;return{version:n,hubSkeleton:{version:r.version,url:r.url,integrity:r.integrity,bytes:a}}}function Ed(t,e){if(!vn(t))throw new Error(`${e} is not an object`);if(t.version!==1)throw new Error(`${e} has unsupported skeleton version`);if(typeof t.runtime!="string"||t.runtime.length===0)throw new Error(`${e} is missing runtime`);if(!Array.isArray(t.files))throw new Error(`${e} is missing files`);let n=t.files.map((r,a)=>{if(!vn(r))throw new Error(`${e} files[${a}] is not an object`);if(typeof r.path!="string"||r.path.length===0)throw new Error(`${e} files[${a}].path is missing`);if(typeof r.contents!="string")throw new Error(`${e} files[${a}].contents is missing`);return{path:r.path,contents:r.contents}});return{version:1,runtime:t.runtime,files:n}}function Rd(t,e,n){return t.split(e).join(n)}function $d(t){if(t.startsWith("/")||t.startsWith("\\")||/^[A-Za-z]:/.test(t)||t.includes("\\")||t.split("/").some(e=>e===".."||e.length===0))throw new Error(`Unsafe skeleton path from runtime manifest: ${t}`)}function Dd(t,e){let n=t.runtime,r=ne(),a=[["{{hubName}}",e.hubName],["{{hubNameJson}}",JSON.stringify(e.hubName)],["{{runtimeVersionJson}}",JSON.stringify(n)],["{{layoutEntry}}",e.layout===void 0?"":` "layout": ${JSON.stringify(e.layout)},
4964
- `],["{{themeJson}}",JSON.stringify(e.theme??"inkly")],["{{starterDemoIdJson}}",JSON.stringify(r)]],i=t.files.map(u=>{$d(u.path);let p=u.contents;for(let[h,y]of a)p=Rd(p,h,y);if(/\{\{[A-Za-z][A-Za-z0-9]*\}\}/.test(p))throw new Error(`Unresolved placeholder in runtime skeleton file: ${u.path}`);return{path:u.path,contents:p}}),o=i.find(u=>u.path==="inkly.json");if(!o)throw new Error("Runtime skeleton is missing inkly.json");let s=fe.safeParse(JSON.parse(o.contents));if(!s.success)throw new Error(`Runtime skeleton inkly.json is invalid: ${s.error.message}`);let c=i.find(u=>u.path==="demos/getting-started/demo.config.json");if(!c)throw new Error("Runtime skeleton is missing demos/getting-started/demo.config.json");let d=ot.safeParse(JSON.parse(c.contents));if(!d.success)throw new Error(`Runtime skeleton starter demo is invalid: ${d.error.message}`);return i}async function jd(t){let{latestUrl:e,fetchImpl:n}=t,r=await qa(e,n),a=Pd(r.json,e),i=new URL(a.hubSkeleton.url,e).toString(),o=await qa(i,n);if(!Pt(o.bytes,a.hubSkeleton.integrity))throw new Error(`integrity mismatch for hub-skeleton.json from ${i}`);if(typeof a.hubSkeleton.bytes=="number"&&o.bytes.byteLength!==a.hubSkeleton.bytes)throw new Error(`byte length mismatch for hub-skeleton.json from ${i}`);let s=Ed(o.json,i);if(s.runtime!==a.version)throw new Error(`runtime/latest.json points at ${a.version}, but hub-skeleton.json declares ${s.runtime}`);return s}async function Ka(t){let{name:e,cwd:n,layout:r,theme:a,silent:i}=t,o=Se(e);if(!o.ok)throw new Error(o.reason);let s=r===void 0?void 0:Qn.safeParse(r);if(s&&!s.success)throw new Error("Invalid layout. Expected one of: sidebar, tabs.");if(a!==void 0){if(a.length===0)throw new Error("Invalid theme. Expected a theme preset id.");if(!le[a]){let h=Object.keys(le).join(", ");throw new Error(`Invalid theme "${a}". Expected one of: ${h}.`)}}let c=Td(n,e);if(await Sd(c).then(()=>!0,()=>!1))throw new Error(`Directory already exists: ${c}. Refusing to overwrite \u2014 choose a different name or remove it first.`);let u=await jd({latestUrl:t.runtimeManifestUrl??Ad(),fetchImpl:Id(t.fetchImpl)}),p=Dd(u,{hubName:e,layout:s?.data,theme:a});return await Ja(c,{recursive:!0}),await Promise.all(p.map(async h=>{let y=Ga(h.path),k=Cd(c,y);await Ja(_d(k),{recursive:!0}),await vd(k,h.contents,"utf8")})),i||process.stdout.write(`Scaffolded hub ${e} at ${c}
4963
+ `,Va={id:"substack",label:"Substack",theme:Oe.substack,css:td};var Ja=[Wa,Ha,Ba,Va],le=Object.fromEntries(Ja.map(t=>[t.id,t]));import{createHash as hd}from"crypto";import{mkdir as md,readFile as lr,rm as cf,stat as uf}from"fs/promises";import{homedir as fd}from"os";import{join as Ne}from"path";import{fileURLToPath as gd}from"url";import{access as nd,readFile as rd,readdir as ad,stat as id}from"fs/promises";import{dirname as od,join as At,resolve as sd,sep as ld}from"path";async function V(t){return nd(t).then(()=>!0,()=>!1)}async function Te(t){let e=sd(t);for(;;){if(await V(At(e,"inkly.json")))return e;let n=od(e);if(n===e)return null;e=n}}async function ar(t){let e=At(t,"demos");if(!await V(e))return[];let n=[];async function r(a){let i;try{i=await ad(a,{withFileTypes:!0})}catch{return}if(i.some(o=>o.isFile()&&o.name==="demo.config.json")){let o=a===e?"":a.slice(e.length+1).split(ld).join("/");n.push({slug:o,dir:a,configPath:At(a,"demo.config.json")});return}for(let o of i)o.isDirectory()&&await r(At(a,o.name))}return await r(e),n.sort((a,i)=>a.slug.localeCompare(i.slug))}async function Ce(t){let e=await rd(t,"utf8");return JSON.parse(e)}async function It(t){let e=await Te(t);if(!e)throw new Error(`No inkly.json found in ${t} or any parent directory.`);let n=At(e,"inkly.json"),r=ge.safeParse(await Ce(n));if(!r.success)throw new Error(`inkly.json failed schema validation: ${r.error.message}`);let a=[];for(let i of await ar(e)){let o;try{o=Ct(await Ce(i.configPath)).config}catch(d){throw new Error(`demos/${i.slug}/demo.config.json failed schema validation: ${d.message}`)}let s=At(i.dir,"assets.json"),c=null;if(await V(s)){let d=_t.safeParse(await Ce(s));if(!d.success)throw new Error(`demos/${i.slug}/assets.json failed schema validation: ${d.error.message}`);c=d.data}a.push({slug:i.slug,dir:i.dir,configPath:i.configPath,config:o,assetsPath:s,assets:c})}return{root:e,inklyPath:n,inkly:r.data,demos:a}}function ir(t){let e=t.split("/")[0]??t,n=_e(e);return n.ok?lt.includes(t)?`Demo folder "${t}" uses a reserved slug.`:null:n.reason}async function wn(t){try{let e=await id(t);return e.isFile()?e.size:null}catch{return null}}import{mkdir as dd,rename as cd,writeFile as ud}from"fs/promises";import{dirname as pd}from"path";async function Y(t,e,n){await dd(pd(t),{recursive:!0});let r=`${t}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;await ud(r,e,n?.mode!=null?{mode:n.mode}:void 0),await cd(r,t)}var bd="https://www.runtime.inklyai.dev";function ct(){let t=process.env.BUNDLES_R2_PUBLIC_BASE_URL;return typeof t=="string"&&t.length>0?t.replace(/\/+$/,""):bd}function dr(t,e,n=ct()){return`${n}/runtime/${t}/${e}`}function yd(t){return Ne(fd(),".inkly","cache","runtime",t)}function xd(t){let e=/^(sha(?:256|384|512))-([A-Za-z0-9+/]+=*)$/.exec(t);return e?{algorithm:e[1],expected:e[2]}:null}function Pt(t,e){let n=xd(e);return n?hd(n.algorithm).update(t).digest("base64")===n.expected:!1}var Et=class extends Error{constructor(n,r,a){super(`integrity mismatch for ${n}: expected ${r}`+(a?` (from ${a})`:"")+". The bundle does not match inkly.lock. Re-run `inkly lock` to refresh, or the CDN may have been tampered with.");this.file=n;this.expected=r;this.url=a;this.name="IntegrityMismatchError"}},dt=class extends Error{constructor(e){super(e),this.name="LockReadError"}};async function kd(t){let e=Ne(t,"inkly.lock");if(!await V(e))throw new dt(`no inkly.lock found in ${t}. Run \`inkly lock\` to generate one.`);let n;try{n=await Ce(e)}catch(a){throw new dt(`failed to read ${e}: ${a.message}`)}let r=kn.safeParse(n);if(!r.success)throw new dt(`${e} failed InklyLockSchema validation: ${r.error.message}`);return r.data}function wd(t,e){let n=t.lastIndexOf("/");return n===-1?t:`${t.slice(0,n+1)}${e}`}async function Za(t){try{return await lr(t)}catch{return null}}async function vd(t){let e=Ne(t,"manifest.json");if(!await V(e))return null;try{let n=JSON.parse(await lr(e,"utf8")),r=Tt.safeParse(n);return r.success?r.data:null}catch{return null}}async function or(t,e){await Y(t,e)}async function sr(t,e){if(t.startsWith("file://"))try{return await lr(gd(t))}catch(a){throw new Error(`failed to read ${t}: ${a.message}`)}let n;try{n=await e(t)}catch(a){throw new Error(`failed to fetch ${t}: ${a.message}`)}if(!n.ok)throw new Error(`fetch ${t} returned HTTP ${n.status}`);let r=await n.arrayBuffer();return Buffer.from(r)}async function cr(t){let e=t.fetchImpl??fetch,n=t.lock??await kd(t.hubRoot),{version:r,url:a,integrity:i}=n.runtime,o=yd(r),s=await Za(Ne(o,"runtime.js")),c=await Za(Ne(o,"runtime.css")),d=await vd(o);if(s&&c&&d){let N=Pt(s,i),E=d.version===r,b=Pt(c,d.cssIntegrity);if(N&&E&&b)return{version:r,cacheDir:o,manifest:d,fetched:!1,bytesFetched:0,lock:n}}let u=N=>{let E=t.urlOverrides?.[N];return E||(N==="runtime.js"?a:wd(a,N))};await md(o,{recursive:!0});let p=u("manifest.json"),h=await sr(p,e),f;try{let N=JSON.parse(h.toString("utf8")),E=Tt.safeParse(N);if(!E.success)throw new Error(`manifest from ${p} failed schema validation: ${E.error.message}`);f=E.data}catch(N){throw new Error(`manifest from ${p} is not valid JSON: ${N.message}`)}if(f.version!==r)throw new Error(`CDN manifest for ${p} reports version ${f.version} but inkly.lock pins ${r}. Re-run \`inkly lock\` to refresh.`);let w=u("runtime.js"),k=await sr(w,e);if(!Pt(k,i))throw new Et("runtime.js",i,w);let C=u("runtime.css"),$=await sr(C,e);if(!Pt($,f.cssIntegrity))throw new Et("runtime.css",f.cssIntegrity,C);return await or(Ne(o,"runtime.js"),k),await or(Ne(o,"runtime.css"),$),await or(Ne(o,"manifest.json"),h),{version:r,cacheDir:o,manifest:f,fetched:!0,bytesFetched:k.byteLength+$.byteLength+h.byteLength,lock:n}}import{readFile as qa,writeFile as Sd}from"fs/promises";import{dirname as ur,isAbsolute as _d,join as Rt,resolve as Cd}from"path";import{fileURLToPath as Td,pathToFileURL as Ad}from"url";function Le(t,e,n){t.push({level:e,message:n})}async function Id(){let t=ur(Td(import.meta.url));for(let e=0;e<10;e+=1){let n=Rt(t,"node_modules","@inkly","runtime","dist","manifest.json");if(await V(n))return n;let r=Rt(t,"packages","inkly-runtime","dist","manifest.json");if(await V(r))return r;let a=ur(t);if(a===t)break;t=a}return null}async function Ga(t){let e=JSON.parse(await qa(t,"utf8")),n=Tt.safeParse(e);if(!n.success)throw new Error(`${t} failed RuntimeManifestSchema validation: ${n.error.message}`);return n.data}async function Pd(t,e){let n=ct(),r=dr(t,"manifest.json",n);try{let a=await e(r);if(!a.ok)return null;let i=JSON.parse(await a.text()),o=Tt.safeParse(i);return o.success?{manifest:o.data,url:r}:null}catch{return null}}async function Ed(t,e){if(e.manifestPath)return{manifest:await Ga(e.manifestPath),source:"local",manifestPath:e.manifestPath};if(!e.localOnly){let r=e.fetchImpl??fetch,a=await Pd(t,r);if(a){if(a.manifest.version!==t)throw new Error(`CDN manifest at ${a.url} reports version ${a.manifest.version} but inkly.json pins ${t}. Wait for the publish workflow to upload the matching artifact, or update inkly.json#runtime to match.`);return{manifest:a.manifest,source:"cdn"}}}let n=await Id();if(!n)throw new Error(`Could not fetch runtime manifest for ${t} from ${ct()} and no local @inkly/runtime/dist/manifest.json was found. Either publish the runtime to R2, run \`npm run build:runtime\` in @inkly/runtime, or pass \`inkly lock --local <path-to-inkly-runtime>\`.`);return{manifest:await Ga(n),source:"local",manifestPath:n}}async function vn(t,e={}){let n=Rt(t,"inkly.json"),r=await Ce(n),a=typeof r.runtime=="string"?r.runtime:null;if(!a)throw new Error('inkly.json is missing a string "runtime" pin.');if(!/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(a))throw new Error(`inkly.json#runtime must be an exact semver (got "${a}"). Set runtime to an exact version and put your compatibility range in runtimeRange.`);let{manifest:i,source:o,manifestPath:s}=await Ed(a,e);if(i.version!==a)throw new Error(`Runtime manifest reports version ${i.version} but inkly.json pins ${a}. Build the matching Inkly runtime version (or upgrade the pin) and retry.`);return{lock:{$schema:"https://inklyai.dev/inkly.lock",runtime:{version:i.version,url:o==="local"&&s?Ad(Rt(ur(s),"runtime.js")).toString():dr(i.version,"runtime.js"),integrity:i.integrity}},manifest:i,source:o}}async function Sn(t){let e=[],n=await Te(t.cwd);if(!n)return Le(e,"error",`No inkly.json found in ${t.cwd} or any parent directory.`),be({ok:!1,hubRoot:null,lockPath:null,lock:null,source:null,issues:e,drifted:!1,options:t});let r=Rt(n,"inkly.lock"),a=t.manifestPath?_d(t.manifestPath)?t.manifestPath:Cd(t.cwd,t.manifestPath):void 0;if(t.check){if(!await V(r))return Le(e,"error","inkly.lock is missing. Run `inkly lock` to create it."),be({ok:!1,hubRoot:n,lockPath:r,lock:null,source:null,issues:e,drifted:!0,options:t});let i=await Ce(r),o=kn.safeParse(i);if(!o.success)return Le(e,"error",`inkly.lock failed schema validation: ${o.error.message}`),be({ok:!1,hubRoot:n,lockPath:r,lock:null,source:null,issues:e,drifted:!0,options:t});let s=Rt(n,"inkly.json"),c=await Ce(s),d=typeof c.runtime=="string"?c.runtime:null;if(!d)return Le(e,"error",'inkly.json is missing a string "runtime" pin.'),be({ok:!1,hubRoot:n,lockPath:r,lock:null,source:null,issues:e,drifted:!0,options:t});if(o.data.runtime.version!==d)return Le(e,"error",`inkly.lock pins runtime ${o.data.runtime.version}, but inkly.json pins ${d}. Re-run \`inkly lock\` to refresh.`),be({ok:!1,hubRoot:n,lockPath:r,lock:o.data,source:null,issues:e,drifted:!0,options:t});try{let u=await vn(n,{manifestPath:a,localOnly:!!a||t.localOnly,fetchImpl:t.fetchImpl});return u.lock.runtime.integrity!==o.data.runtime.integrity?(Le(e,"error",`inkly.lock integrity does not match what ${u.source==="cdn"?ct():"the local build"} serves for runtime ${d}. Re-run \`inkly lock\` to refresh, or someone tampered with the source.`),be({ok:!1,hubRoot:n,lockPath:r,lock:o.data,source:u.source,issues:e,drifted:!0,options:t})):be({ok:!0,hubRoot:n,lockPath:r,lock:o.data,source:u.source,issues:e,drifted:!1,options:t})}catch(u){return Le(e,"error",u.message),be({ok:!1,hubRoot:n,lockPath:r,lock:o.data,source:null,issues:e,drifted:!0,options:t})}}try{let{lock:i,source:o}=await vn(n,{manifestPath:a,localOnly:!!a||t.localOnly,fetchImpl:t.fetchImpl}),s=JSON.stringify(i,null,2)+`
4964
+ `,d=(await V(r)?await qa(r,"utf8"):null)!==s;return d&&await Sd(r,s,"utf8"),be({ok:!0,hubRoot:n,lockPath:r,lock:i,source:o,issues:e,drifted:d,options:t})}catch(i){return Le(e,"error",i.message),be({ok:!1,hubRoot:n,lockPath:r,lock:null,source:null,issues:e,drifted:!1,options:t})}}function be(t){let{ok:e,hubRoot:n,lockPath:r,lock:a,source:i,issues:o,drifted:s,options:c}=t,d={ok:e,hubRoot:n,lockPath:r,lock:a,source:i,issues:o,drifted:s};if(!c.silent)if(c.json)process.stdout.write(JSON.stringify(d,null,2)+`
4965
+ `);else if(e)c.check?process.stdout.write(`inkly lock --check: inkly.lock matches inkly.json (runtime ${a?.runtime.version}, source: ${i??"unknown"}).
4966
+ `):s?process.stdout.write(`inkly lock: wrote ${r} (runtime ${a?.runtime.version}, source: ${i??"unknown"}).
4967
+ `):process.stdout.write(`inkly lock: ${r} already up to date (runtime ${a?.runtime.version}, source: ${i??"unknown"}).
4968
+ `);else{for(let u of o)process.stdout.write(`${u.level.toUpperCase()} ${u.message}
4969
+ `);process.stdout.write(`inkly lock failed
4970
+ `)}return d}function _n(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Ld(t=ct()){return`${t}/runtime/latest.json`}function Xa(t){return Ya==="/"?t:t.split("/").join(Ya)}function zd(t){let e=t??globalThis.fetch;if(typeof e!="function")throw new Error("This Node runtime does not provide fetch; Node 20+ is required.");return e}async function Qa(t,e){let n=await e(t);if(!n.ok)throw new Error(`failed to fetch ${t}: HTTP ${n.status}${n.statusText?` ${n.statusText}`:""}`);let r=Rd.from(await n.arrayBuffer()),a;try{a=JSON.parse(r.toString("utf8"))}catch(i){throw new Error(`failed to parse JSON from ${t}: ${i.message}`)}return{json:a,bytes:r}}function Md(t,e){if(!_n(t))throw new Error(`${e} is not an object`);let n=t.version,r=t.hubSkeleton;if(typeof n!="string"||n.length===0)throw new Error(`${e} is missing version`);if(!_n(r))throw new Error(`${e} is missing hubSkeleton`);if(typeof r.url!="string"||r.url.length===0)throw new Error(`${e} is missing hubSkeleton.url`);if(typeof r.integrity!="string"||r.integrity.length===0)throw new Error(`${e} is missing hubSkeleton.integrity`);if(typeof r.version!="number")throw new Error(`${e} is missing hubSkeleton.version`);let a=typeof r.bytes=="number"?r.bytes:void 0;return{version:n,hubSkeleton:{version:r.version,url:r.url,integrity:r.integrity,bytes:a}}}function Ud(t,e){if(!_n(t))throw new Error(`${e} is not an object`);if(t.version!==1)throw new Error(`${e} has unsupported skeleton version`);if(typeof t.runtime!="string"||t.runtime.length===0)throw new Error(`${e} is missing runtime`);if(!Array.isArray(t.files))throw new Error(`${e} is missing files`);let n=t.files.map((r,a)=>{if(!_n(r))throw new Error(`${e} files[${a}] is not an object`);if(typeof r.path!="string"||r.path.length===0)throw new Error(`${e} files[${a}].path is missing`);if(typeof r.contents!="string")throw new Error(`${e} files[${a}].contents is missing`);return{path:r.path,contents:r.contents}});return{version:1,runtime:t.runtime,files:n}}function Fd(t,e,n){return t.split(e).join(n)}function Hd(t){if(t.startsWith("/")||t.startsWith("\\")||/^[A-Za-z]:/.test(t)||t.includes("\\")||t.split("/").some(e=>e===".."||e.length===0))throw new Error(`Unsafe skeleton path from runtime manifest: ${t}`)}function Bd(t,e){let n=t.runtime,r=ne(),a=[["{{hubName}}",e.hubName],["{{hubNameJson}}",JSON.stringify(e.hubName)],["{{runtimeVersionJson}}",JSON.stringify(n)],["{{layoutEntry}}",e.layout===void 0?"":` "layout": ${JSON.stringify(e.layout)},
4971
+ `],["{{themeJson}}",JSON.stringify(e.theme??"inkly")],["{{starterDemoIdJson}}",JSON.stringify(r)]],i=t.files.map(u=>{Hd(u.path);let p=u.contents;for(let[h,f]of a)p=Fd(p,h,f);if(/\{\{[A-Za-z][A-Za-z0-9]*\}\}/.test(p))throw new Error(`Unresolved placeholder in runtime skeleton file: ${u.path}`);return{path:u.path,contents:p}}),o=i.find(u=>u.path==="inkly.json");if(!o)throw new Error("Runtime skeleton is missing inkly.json");let s=ge.safeParse(JSON.parse(o.contents));if(!s.success)throw new Error(`Runtime skeleton inkly.json is invalid: ${s.error.message}`);let c=i.find(u=>u.path==="demos/getting-started/demo.config.json");if(!c)throw new Error("Runtime skeleton is missing demos/getting-started/demo.config.json");let d=ot.safeParse(JSON.parse(c.contents));if(!d.success)throw new Error(`Runtime skeleton starter demo is invalid: ${d.error.message}`);return i}async function Wd(t){let{latestUrl:e,fetchImpl:n}=t,r=await Qa(e,n),a=Md(r.json,e),i=new URL(a.hubSkeleton.url,e).toString(),o=await Qa(i,n);if(!Pt(o.bytes,a.hubSkeleton.integrity))throw new Error(`integrity mismatch for hub-skeleton.json from ${i}`);if(typeof a.hubSkeleton.bytes=="number"&&o.bytes.byteLength!==a.hubSkeleton.bytes)throw new Error(`byte length mismatch for hub-skeleton.json from ${i}`);let s=Ud(o.json,i);if(s.runtime!==a.version)throw new Error(`runtime/latest.json points at ${a.version}, but hub-skeleton.json declares ${s.runtime}`);return s}async function ei(t){let{name:e,cwd:n,layout:r,theme:a,silent:i}=t,o=_e(e);if(!o.ok)throw new Error(o.reason);let s=r===void 0?void 0:tr.safeParse(r);if(s&&!s.success)throw new Error("Invalid layout. Expected one of: sidebar, tabs.");if(a!==void 0){if(a.length===0)throw new Error("Invalid theme. Expected a theme preset id.");if(!le[a]){let f=Object.keys(le).join(", ");throw new Error(`Invalid theme "${a}". Expected one of: ${f}.`)}}let c=Nd(n,e);if(await Dd(c).then(()=>!0,()=>!1))throw new Error(`Directory already exists: ${c}. Refusing to overwrite \u2014 choose a different name or remove it first.`);let u=await Wd({latestUrl:t.runtimeManifestUrl??Ld(),fetchImpl:zd(t.fetchImpl)}),p=Bd(u,{hubName:e,layout:s?.data,theme:a});await Ka(c,{recursive:!0}),await Promise.all(p.map(async f=>{let w=Xa(f.path),k=Od(c,w);await Ka(jd(k),{recursive:!0}),await $d(k,f.contents,"utf8")}));let h=!1;try{let f=await Sn({cwd:c,silent:!0,fetchImpl:t.fetchImpl});h=f.ok&&f.lockPath!==null}catch{}return i||(process.stdout.write(`Scaffolded hub ${e} at ${c}
4965
4972
 
4966
4973
  Next steps:
4967
4974
  cd ${e}
4968
4975
  inkly dev
4969
4976
  open http://localhost:3000
4970
- `),{dir:c,files:p.map(h=>Ga(h.path))}}import{createServer as Ld}from"vite";import zd from"chokidar";import{readFile as ce,readdir as Ud,stat as Yt,mkdtemp as Md,mkdir as Fd,cp as Hd,writeFile as Bd,rm as Wd}from"fs/promises";import{existsSync as ut,createReadStream as Vd}from"fs";import{tmpdir as Jd}from"os";import{basename as Zd,dirname as pt,extname as Gd,join as j,relative as qd,resolve as Le,sep as Cn}from"path";import{fileURLToPath as ii}from"url";import{createRequire as Kd}from"module";import{createConnection as Yd,createServer as Xd}from"net";import{readFile as Ya,stat as Od}from"fs/promises";import{relative as Nd}from"path";async function Sn(t){let e=await Ce(t);if(!e)throw new Error(`No inkly.json found in ${t} or any parent directory. Run \`inkly init <name>\` first or cd into your hub.`);let n=[],r=[],a=[],i=[];for(let s of await nr(e)){let c;try{c=await Ya(s.configPath,"utf8")}catch(h){a.push({slug:s.slug,configPath:s.configPath,message:`failed to read demo.config.json (${h.message})`});continue}let d;try{d=JSON.parse(c)}catch(h){a.push({slug:s.slug,configPath:s.configPath,message:`demo.config.json is not valid JSON (${h.message})`});continue}let u;try{u=Ct(d)}catch(h){a.push({slug:s.slug,configPath:s.configPath,message:`demo.config.json failed schema validation: ${h.message}`});continue}u.changed&&(await Xa(s.configPath,u.config),n.push({slug:s.slug,configPath:s.configPath,reason:"heal"}));let p=(await Od(s.configPath)).mtimeMs;i.push({slug:s.slug,configPath:s.configPath,id:u.config.id,mtimeMs:p})}let o=Oa(i.map(s=>({...s,updatedAt:s.mtimeMs})));for(let{entry:s,newId:c}of o){let d=await Ya(s.configPath,"utf8"),u=JSON.parse(d);u.id=c,await Xa(s.configPath,u),r.push({slug:s.slug,configPath:s.configPath,reason:"remint"})}return{hubRoot:e,healed:n,reminted:r,skipped:a}}function qt(t,e){return Nd(t,e).split(/[\\/]/).join("/")}async function Xa(t,e){await K(t,JSON.stringify(e,null,2)+`
4971
- `)}var Qd=ii(import.meta.url),Rt=pt(Qd),dr="127.0.0.1";function Qa(t){let e=Le(Rt,"template",t);return ut(e)?e:Le(Rt,"..","..","template",t)}function ec(t){let e=[Le(Rt,"..","vendor",t),Le(Rt,"..","..","vendor",t),Le(Rt,"..","..","..","public","__inkly","vendor",t)];for(let n of e)if(ut(n))return n;return null}function tc(t){try{let r=Kd(j(t,"package.json")).resolve("@inkly/runtime/package.json");return Le(pt(r),"dist")}catch{}let e=Rt;for(let n=0;n<8;n++){let r=j(e,"packages","inkly-runtime","dist");if(ut(r))return r;let a=pt(e);if(a===e)break;e=a}return null}function ei(t,e){if(!e)return t;let{integrity:n}=e.lock.runtime,r=e.manifest.cssIntegrity,a=t;a=a.replace(/<link rel="stylesheet" href="\/__inkly\/runtime\.css" \/>/,`<link rel="stylesheet" href="/__inkly/runtime.css" integrity="${r}" crossorigin="anonymous" />`);let i=`<link rel="modulepreload" href="/__inkly/runtime.js" integrity="${n}" crossorigin="anonymous" />`;return/<link rel="prefetch" href="\/__inkly\/runtime\.js"[^>]*\/>/.test(a)?a=a.replace(/<link rel="prefetch" href="\/__inkly\/runtime\.js"[^>]*\/>/,i):a=a.replace(/<link rel="stylesheet" href="\/__inkly\/runtime\.css"[^>]*\/>/,o=>`${o}
4972
- ${i}`),a}function U(t,e,n,r){t.statusCode=e,t.setHeader("content-type",n),t.setHeader("cache-control","no-store"),t.end(r)}function Xt(t,e,n){t.statusCode=200,t.setHeader("content-type",n),t.setHeader("cache-control","no-store");let r=Vd(e);r.on("error",a=>{t.statusCode=500,t.end(`Failed to read ${e}: ${a.message}`)}),r.pipe(t)}var ti=`Inkly runtime artifact not found. Run:
4977
+ `),h||process.stdout.write("\nNote: could not pin the runtime yet (inkly.lock not written). `inkly dev` will resolve it on first run; run `inkly lock` to pin it.\n")),{dir:c,files:p.map(f=>Xa(f.path))}}import{createServer as Zd}from"vite";import Gd from"chokidar";import{readFile as ce,readdir as qd,stat as Yt,mkdtemp as Kd,mkdir as Yd,cp as Xd,writeFile as Qd,rm as ec}from"fs/promises";import{existsSync as ut,createReadStream as tc}from"fs";import{tmpdir as nc}from"os";import{basename as rc,dirname as pt,extname as ac,join as O,relative as ic,resolve as ze,sep as An}from"path";import{fileURLToPath as di}from"url";import{createRequire as oc}from"module";import{createConnection as sc,createServer as lc}from"net";import{readFile as ti,stat as Vd}from"fs/promises";import{relative as Jd}from"path";async function Cn(t){let e=await Te(t);if(!e)throw new Error(`No inkly.json found in ${t} or any parent directory. Run \`inkly init <name>\` first or cd into your hub.`);let n=[],r=[],a=[],i=[];for(let s of await ar(e)){let c;try{c=await ti(s.configPath,"utf8")}catch(h){a.push({slug:s.slug,configPath:s.configPath,message:`failed to read demo.config.json (${h.message})`});continue}let d;try{d=JSON.parse(c)}catch(h){a.push({slug:s.slug,configPath:s.configPath,message:`demo.config.json is not valid JSON (${h.message})`});continue}let u;try{u=Ct(d)}catch(h){a.push({slug:s.slug,configPath:s.configPath,message:`demo.config.json failed schema validation: ${h.message}`});continue}u.changed&&(await ni(s.configPath,u.config),n.push({slug:s.slug,configPath:s.configPath,reason:"heal"}));let p=(await Vd(s.configPath)).mtimeMs;i.push({slug:s.slug,configPath:s.configPath,id:u.config.id,mtimeMs:p})}let o=za(i.map(s=>({...s,updatedAt:s.mtimeMs})));for(let{entry:s,newId:c}of o){let d=await ti(s.configPath,"utf8"),u=JSON.parse(d);u.id=c,await ni(s.configPath,u),r.push({slug:s.slug,configPath:s.configPath,reason:"remint"})}return{hubRoot:e,healed:n,reminted:r,skipped:a}}function qt(t,e){return Jd(t,e).split(/[\\/]/).join("/")}async function ni(t,e){await Y(t,JSON.stringify(e,null,2)+`
4978
+ `)}var dc=di(import.meta.url),$t=pt(dc),hr="127.0.0.1";function ri(t){let e=ze($t,"template",t);return ut(e)?e:ze($t,"..","..","template",t)}function cc(t){let e=[ze($t,"..","vendor",t),ze($t,"..","..","vendor",t),ze($t,"..","..","..","public","__inkly","vendor",t)];for(let n of e)if(ut(n))return n;return null}function uc(t){try{let r=oc(O(t,"package.json")).resolve("@inkly/runtime/package.json");return ze(pt(r),"dist")}catch{}let e=$t;for(let n=0;n<8;n++){let r=O(e,"packages","inkly-runtime","dist");if(ut(r))return r;let a=pt(e);if(a===e)break;e=a}return null}function ai(t,e){if(!e)return t;let{integrity:n}=e.lock.runtime,r=e.manifest.cssIntegrity,a=t;a=a.replace(/<link rel="stylesheet" href="\/__inkly\/runtime\.css" \/>/,`<link rel="stylesheet" href="/__inkly/runtime.css" integrity="${r}" crossorigin="anonymous" />`);let i=`<link rel="modulepreload" href="/__inkly/runtime.js" integrity="${n}" crossorigin="anonymous" />`;return/<link rel="prefetch" href="\/__inkly\/runtime\.js"[^>]*\/>/.test(a)?a=a.replace(/<link rel="prefetch" href="\/__inkly\/runtime\.js"[^>]*\/>/,i):a=a.replace(/<link rel="stylesheet" href="\/__inkly\/runtime\.css"[^>]*\/>/,o=>`${o}
4979
+ ${i}`),a}function U(t,e,n,r){t.statusCode=e,t.setHeader("content-type",n),t.setHeader("cache-control","no-store"),t.end(r)}function Xt(t,e,n){t.statusCode=200,t.setHeader("content-type",n),t.setHeader("cache-control","no-store");let r=tc(e);r.on("error",a=>{t.statusCode=500,t.end(`Failed to read ${e}: ${a.message}`)}),r.pipe(t)}var ii=`Inkly runtime artifact not found. Run:
4973
4980
  npm run build:runtime -w @inkly/runtime
4974
4981
  then restart \`inkly dev\`.
4975
- `;function nc(t){let e=Le(t);for(;;){if(ut(j(e,"inkly.json")))return e;let n=pt(e);if(n===e)return null;e=n}}function ni(t){if(!t)return null;let e=t.trim();return e?/^(?:[a-z][a-z0-9+.-]*:|\/\/|#)/i.test(e)||e.startsWith("/")?e:e.startsWith("public/")?`/${e.slice(7)}`:`/${e.replace(/^\.\/+/,"")}`:null}function cr(t){return t.brand?{...t,brand:{...t.brand,...t.brand.logo?{logo:ni(t.brand.logo)??t.brand.logo}:{},...t.brand.favicon?{favicon:ni(t.brand.favicon)??t.brand.favicon}:{}}}:t}function oi(t,e){return t.publicUrl&&/^(https?:)?\/\//i.test(t.publicUrl)?t.publicUrl:t.file?`/${e}/${t.file}`:t.publicUrl??null}function rc(t){let e=new Map(t.assets.map(n=>[n.id,n]));return Na({slug:t.slug,config:t.config,resolveAssetSrc:n=>{if(!n.startsWith("asset:"))return n;let r=e.get(n.slice(6));return r?oi(r,t.slug):null}})}async function ac(t){let e=j(pt(t),"assets.json");try{let n=await ce(e,"utf8"),r=JSON.parse(n);return Array.isArray(r.assets)?r.assets.filter(a=>{if(!a||typeof a!="object")return!1;let i=a;return typeof i.id=="string"&&i.id.length>0}):[]}catch{return[]}}async function ic(t){let e=j(t,"demos");if(!ut(e))return[];let n=[];async function r(a){let i;try{i=await Ud(a,{withFileTypes:!0})}catch{return}if(i.some(s=>s.isFile()&&s.name==="demo.config.json")){let s=qd(e,a).split(Cn).join("/");n.push({slug:s,configPath:j(a,"demo.config.json")});return}for(let s of i)s.isDirectory()&&await r(j(a,s.name))}return await r(e),n}async function ri(t,e){let n=j(t,"inkly.json"),r;try{r=await ce(n,"utf8")}catch(p){throw new Error(`Failed to read inkly.json at ${n}: ${p.message}`)}let a;try{a=JSON.parse(r)}catch(p){throw new Error(`inkly.json is not valid JSON: ${p.message}`)}let i=fe.safeParse(a);if(!i.success)throw new Error(`inkly.json failed schema validation:
4976
- ${i.error.message}`);let o=i.data,s=await ic(t);for(let p of s){let h=Qt(p.slug);if(!h.ok)throw new Error(`Demo folder "${p.slug}" has an invalid slug: ${h.reason}`);if(lt.includes(p.slug))throw new Error(`Demo folder "${p.slug}" uses a reserved slug.`)}let c=[];for(let p of s){let h;try{h=await ce(p.configPath,"utf8")}catch(v){e(`Skipping ${p.slug}: failed to read demo.config.json (${v.message})`);continue}let y;try{y=JSON.parse(h)}catch(v){e(`Skipping ${p.slug}: demo.config.json is not valid JSON (${v.message})`);continue}let k;try{k=Ct(y).config}catch(v){e(`Skipping ${p.slug}: demo.config.json failed schema validation: ${v.message}`);continue}c.push({slug:p.slug,configPath:p.configPath,config:k,assets:await ac(p.configPath)})}let d=c.map(p=>rc(p)),u=new Map;for(let p of c)u.set(p.slug,p);return{hub:o,hubPath:n,demos:c,index:d,bySlug:u}}function _n(t,e,n){let r=JSON.stringify(n).replace(/<\/(script)/gi,"<\\/$1"),a=`<script id="${e}" type="application/json">${r}</script>`;return t.includes(`id="${e}"`)?t.replace(new RegExp(`<script id="${e}"[^>]*>[\\s\\S]*?</script>`),a):t.replace("</head>",`${a}
4977
- </head>`)}function oc(t){let e=t.hub.theme??"inkly",n=le[e];return{hub:cr(t.hub),demos:t.index,theme:{id:e,tokens:n?.theme??null,css:n?.css??""}}}var sc={".html":"text/html; charset=utf-8",".css":"text/css; charset=utf-8",".js":"text/javascript; charset=utf-8",".mjs":"text/javascript; charset=utf-8",".json":"application/json; charset=utf-8",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".webp":"image/webp",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".otf":"font/otf",".txt":"text/plain; charset=utf-8",".md":"text/markdown; charset=utf-8"};function Kt(t){return sc[Gd(t).toLowerCase()]??"application/octet-stream"}function Qt(t){let e=t.split("/").filter(Boolean);if(e.length===0)return{ok:!1,reason:"Name cannot be empty."};for(let n of e){let r=Se(n);if(!r.ok)return r}return lt.includes(t)?{ok:!1,reason:`Demo folder "${t}" uses a reserved slug.`}:{ok:!0}}function ai(t,e){let n;try{n=decodeURIComponent(t)}catch{return null}let r=n.replace(/^\/+/,"").replace(/\/+$/,"");if(!r)return null;let a=r.split("/").filter(Boolean);for(let i=a.length;i>=1;i-=1){let o=a.slice(0,i).join("/");if(!Qt(o).ok)continue;let s=e.bySlug.get(o);if(s)return{slug:o,demo:s,rel:a.slice(i).join("/")}}return null}async function lc(t){return new Promise(e=>{let n=Xd();n.once("error",()=>e(!1)),n.once("listening",()=>{n.close(()=>e(!0))}),n.listen(t,dr)})}async function dc(t,e){return new Promise(n=>{let r=!1,a=o=>{r||(r=!0,i.destroy(),n(o))},i=Yd({port:t,host:e});i.setTimeout(250),i.once("connect",()=>a(!0)),i.once("timeout",()=>a(!1)),i.once("error",()=>a(!1))})}async function cc(t){if(!await lc(t))return!1;for(let e of["localhost","127.0.0.1","::1"])if(await dc(t,e))return!1;return!0}async function uc(t){if(t===0)return 0;if(!Number.isInteger(t)||t<0||t>65535)throw new Error(`invalid port: ${t}`);for(let e=t;e<=65535;e+=1)if(await cc(e))return e;throw new Error(`No available port found at or above ${t}`)}function pc(t,e){let n=t.httpServer?.address();return n&&typeof n=="object"?n.port:t.config.server.port??e}async function hc(t){let e=Zd(t),n=/^[a-z0-9][a-z0-9-]*$/.test(e)&&!lt.includes(e)?e:"demo",r=await Md(j(Jd(),"inkly-dev-"));await Fd(j(r,"demos"),{recursive:!0}),await Hd(t,j(r,"demos",n),{recursive:!0});let a=n;try{let o=JSON.parse(await ce(j(t,"demo.config.json"),"utf8"));typeof o.title=="string"&&o.title.trim()&&(a=o.title.trim())}catch{}let i={$schema:"https://inklyai.dev/inkly.json",name:a,runtime:"0.6.0",theme:"inkly",collections:[{name:"Preview",demos:[n]}]};return await Bd(j(r,"inkly.json"),`${JSON.stringify(i,null,2)}
4978
- `),{hubRoot:r,slug:n}}async function si(t){let{cwd:e,port:n=3e3,silent:r,skipRuntimeResolve:a}=t,i=M=>{r||process.stderr.write(`[inkly dev] ${M}
4979
- `)},o=t.path?Le(e,t.path):e,s=nc(o),c=null;if(!s)if(ut(j(o,"demo.config.json"))){let M=await hc(o);s=M.hubRoot,c=M.hubRoot,r||process.stdout.write(`[inkly dev] serving standalone demo "${M.slug}" via a temporary hub (no inkly.json required)
4980
- `)}else throw new Error(`No inkly.json found in ${o} or any parent directory. Run \`inkly init <name>\` first, cd into your hub, or point \`inkly dev\` at an exported demo folder (a directory containing demo.config.json).`);let d=await Sn(s);if(!r){for(let M of d.healed)process.stdout.write(`[inkly dev] healed missing id: ${qt(d.hubRoot,M.configPath)}
4981
- `);for(let M of d.reminted)process.stdout.write(`[inkly dev] re-minted duplicate id: ${qt(d.hubRoot,M.configPath)}
4982
- `)}let u=await ri(s,i),p=j(s,"inkly.lock"),h=ut(p),y=null;if(h&&!a)try{if(y=await Va({hubRoot:s}),!r)if(y.fetched){let M=(y.bytesFetched/1048576).toFixed(2);process.stdout.write(`[inkly dev] fetched runtime ${y.version} from ${y.lock.runtime.url} (${M} MiB)
4983
- `)}else process.stdout.write(`[inkly dev] runtime ${y.version} loaded from cache (${y.cacheDir})
4984
- `)}catch(M){throw M instanceof dt||M instanceof Et?M:new Error(`Failed to resolve runtime via inkly.lock: ${M.message}`)}else a||r||process.stdout.write("[inkly dev] no inkly.lock \u2014 serving runtime from the in-workspace @inkly/runtime dist. Run `inkly lock` once a runtime is published to R2 to pin a version.\n");let k=y?.cacheDir??tc(s),v=ei(await ce(Qa("hub-index.html"),"utf8"),y),C=ei(await ce(Qa("demo.html"),"utf8"),y),$=await uc(n),O=$,E=async()=>{},g=await Ld({root:s,server:{port:$,strictPort:!0,host:dr,hmr:{host:dr},fs:{allow:[s,ii(new URL("../",import.meta.url))]}},appType:"custom",clearScreen:!1,logLevel:r?"silent":"info",configFile:!1,plugins:[{name:"inkly-dev-endpoints",configureServer(M){let X=(Ee,I,ae)=>{let w=(Ee.url??"").split("?")[0]??"";if(w==="/"||w==="/index.html"){let R=_n(v,"__inkly_hub_data",oc(u));U(I,200,"text/html; charset=utf-8",R);return}if(w.startsWith("/__inkly/cache/")){let R=decodeURIComponent(w.slice(15));if(!R||R.includes("..")||R.includes("/")){U(I,400,"text/plain; charset=utf-8","Invalid cache path");return}let F=j(s,".inkly","cache",R);Yt(F).then(z=>{if(!z.isFile()){U(I,404,"text/plain; charset=utf-8",`Capture not found: ${R}`);return}Xt(I,F,Kt(F))},()=>U(I,404,"text/plain; charset=utf-8",`Capture not found: ${R}`));return}if(w.startsWith("/__inkly/snapshot/")){let R=decodeURIComponent(w.slice(18)),z=R.indexOf("/snapshots/"),J=z>0?R.slice(0,z):"",q=z>0?R.slice(z+1):"";if(!Qt(J).ok||!u.bySlug.has(J)||!q||q.includes("..")||q.startsWith("/")){U(I,400,"text/plain; charset=utf-8","Invalid snapshot path");return}if(!q.startsWith("snapshots/")){U(I,400,"text/plain; charset=utf-8","Invalid snapshot path");return}let ye=j(s,"demos",...J.split("/")),ue=j(ye,q);if(!ue.startsWith(ye+Cn)&&ue!==ye){U(I,400,"text/plain; charset=utf-8","Invalid snapshot path");return}Yt(ue).then(async Ft=>{if(!Ft.isFile()){U(I,404,"text/plain; charset=utf-8",`Snapshot not found: ${q}`);return}if(!/\.html?$/i.test(q)){let Ao=await ce(ue,"utf8");U(I,200,Kt(ue),st(Ao));return}let te=tr(q),Ht=te?j(ye,te):null,[Mn,Bt]=await Promise.all([ce(ue,"utf8"),Ht?ce(Ht,"utf8").catch(()=>null):Promise.resolve(null)]),sn=La({htmlPath:q,html:Mn,css:Bt,cssHref:te?`/__inkly/snapshot/${encodeURIComponent(J)}/${te.split("/").map(encodeURIComponent).join("/")}`:null});U(I,200,Kt(ue),sn)},()=>U(I,404,"text/plain; charset=utf-8",`Snapshot not found: ${q}`));return}if(w==="/__inkly/hub"){U(I,200,"application/json; charset=utf-8",JSON.stringify(cr(u.hub)));return}if(w==="/__inkly/demos"){U(I,200,"application/json; charset=utf-8",JSON.stringify(u.index));return}if(w.startsWith("/__inkly/demo/")){let R=decodeURIComponent(w.slice(14)),F=Qt(R);if(!F.ok){U(I,400,"text/plain; charset=utf-8",F.reason);return}let z=u.bySlug.get(R);if(!z){U(I,404,"text/plain; charset=utf-8",`No such demo: ${R}`);return}let J=j(pt(z.configPath),"assets.json");ce(J,"utf8").then(q=>{let Mt=[];try{let ye=JSON.parse(q);Array.isArray(ye.assets)&&(Mt=ye.assets)}catch{}U(I,200,"application/json; charset=utf-8",JSON.stringify({demo:z.config,assets:Mt}))},()=>{U(I,200,"application/json; charset=utf-8",JSON.stringify({demo:z.config,assets:[]}))});return}if(w==="/__inkly/runtime.js"){lr(I,k,"runtime.js","text/javascript; charset=utf-8");return}if(w==="/__inkly/runtime.css"){lr(I,k,"runtime.css","text/css; charset=utf-8");return}if(w==="/__inkly/manifest.json"){lr(I,k,"manifest.json","application/json; charset=utf-8");return}if(w.startsWith("/__inkly/vendor/")){let R=decodeURIComponent(w.slice(16));if(!/^(react|react-dom|react-dom-client|react-jsx-runtime)\.mjs$/.test(R)){U(I,404,"text/plain; charset=utf-8",`No such vendor module: ${R}`);return}let F=ec(R);if(!F){U(I,503,"text/plain; charset=utf-8",`Runtime vendor module not found: ${R}`);return}Xt(I,F,"text/javascript; charset=utf-8");return}if(w.startsWith("/__inkly/theme/")&&w.endsWith(".css")){let R=decodeURIComponent(w.slice(15,-4)),F=le[R];if(!F){let z=Object.keys(le).join(", ");U(I,404,"text/plain; charset=utf-8",`No such theme: "${R}". Known themes: ${z}
4985
- `);return}U(I,200,"text/css; charset=utf-8",F.css??"");return}let ft=w.startsWith("/__inkly/")?null:ai(w,u);if(ft&&ft.rel){let{slug:R,rel:F}=ft;if(F.includes("..")||F.startsWith("/")){U(I,400,"text/plain; charset=utf-8","Invalid path");return}let z=j(s,"demos",...R.split("/"),"public"),J=j(z,F);if(!J.startsWith(z+Cn)&&J!==z){U(I,400,"text/plain; charset=utf-8","Invalid path");return}Yt(J).then(q=>{if(!q.isFile()){ae();return}Xt(I,J,Kt(J))},()=>ae());return}if(w.length>1&&!w.startsWith("/__inkly/")&&!w.endsWith("/")){let R=decodeURIComponent(w.slice(1)),F=j(s,"public"),z=j(F,R);if(!R.includes("..")&&(z.startsWith(F+Cn)||z===F)){Yt(z).then(J=>{if(J.isFile()){Xt(I,z,Kt(z));return}on()},()=>on());return}}on();function on(){if(w.length>1&&!w.startsWith("/__inkly/")){let R=w.replace(/^\/+/,"").replace(/\/+$/,""),F=ai(w,u);if(F&&F.rel===""){let{slug:z,demo:J}=F;if(!Qt(z).ok){ae();return}let Mt={hub:{name:u.hub.name,brand:cr(u.hub).brand??null,tokens:u.hub.tokens??null,theme:u.hub.theme??null,layout:u.hub.layout??null},demoSlug:z,demoTitle:J.config.title??J.config.id},ye=j(pt(J.configPath),"assets.json"),ue=Ft=>{let te=_n(C,"__inkly_hub_meta",Mt);te=_n(te,"__inkly_demo_config",J.config),te=_n(te,"__inkly_demo_assets",Ft),U(I,200,"text/html; charset=utf-8",te)};ce(ye,"utf8").then(Ft=>{let te=[];try{let Ht=JSON.parse(Ft);Array.isArray(Ht.assets)&&(te=Ht.assets.map(Mn=>{let Bt=Mn,sn=oi(Bt,z);return sn?{...Bt,publicUrl:sn}:Bt}))}catch{}ue(te)},()=>{ue([])});return}if(R&&!R.includes("/")){if(!Se(R).ok){ae();return}U(I,404,"text/plain; charset=utf-8",`No such demo: "${R}". Known demos: ${[...u.bySlug.keys()].join(", ")||"(none)"}
4986
- `);return}}ae()}};M.middlewares.use(X)}}]});await g.listen(),O=pc(g,$);let N=`http://127.0.0.1:${O}/`,L=`http://localhost:${O}/`,D=zd.watch([j(s,"inkly.json"),j(s,"demos/**/demo.config.json"),j(s,"demos/**/assets.json")],{ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:60,pollInterval:20}}),W=!1,Y=async()=>{if(!W){W=!0;try{u=await ri(s,i);try{g.ws.send({type:"custom",event:"inkly:hub-changed"}),g.ws.send({type:"full-reload"})}catch{}}catch(M){i(`Reload failed: ${M.message}`)}finally{W=!1}}};if(E=Y,D.on("add",Y),D.on("change",Y),D.on("unlink",Y),!r){let M=u.hub.collections?.length??0,X=[...u.bySlug.keys()],Ee=10,I=X.length>0?`
4982
+ `;function pc(t){let e=ze(t);for(;;){if(ut(O(e,"inkly.json")))return e;let n=pt(e);if(n===e)return null;e=n}}function oi(t){if(!t)return null;let e=t.trim();return e?/^(?:[a-z][a-z0-9+.-]*:|\/\/|#)/i.test(e)||e.startsWith("/")?e:e.startsWith("public/")?`/${e.slice(7)}`:`/${e.replace(/^\.\/+/,"")}`:null}function mr(t){return t.brand?{...t,brand:{...t.brand,...t.brand.logo?{logo:oi(t.brand.logo)??t.brand.logo}:{},...t.brand.favicon?{favicon:oi(t.brand.favicon)??t.brand.favicon}:{}}}:t}function ci(t,e){return t.publicUrl&&/^(https?:)?\/\//i.test(t.publicUrl)?t.publicUrl:t.file?`/${e}/${t.file}`:t.publicUrl??null}function hc(t){let e=new Map(t.assets.map(n=>[n.id,n]));return Ma({slug:t.slug,config:t.config,resolveAssetSrc:n=>{if(!n.startsWith("asset:"))return n;let r=e.get(n.slice(6));return r?ci(r,t.slug):null}})}async function mc(t){let e=O(pt(t),"assets.json");try{let n=await ce(e,"utf8"),r=JSON.parse(n);return Array.isArray(r.assets)?r.assets.filter(a=>{if(!a||typeof a!="object")return!1;let i=a;return typeof i.id=="string"&&i.id.length>0}):[]}catch{return[]}}async function fc(t){let e=O(t,"demos");if(!ut(e))return[];let n=[];async function r(a){let i;try{i=await qd(a,{withFileTypes:!0})}catch{return}if(i.some(s=>s.isFile()&&s.name==="demo.config.json")){let s=ic(e,a).split(An).join("/");n.push({slug:s,configPath:O(a,"demo.config.json")});return}for(let s of i)s.isDirectory()&&await r(O(a,s.name))}return await r(e),n}async function si(t,e){let n=O(t,"inkly.json"),r;try{r=await ce(n,"utf8")}catch(p){throw new Error(`Failed to read inkly.json at ${n}: ${p.message}`)}let a;try{a=JSON.parse(r)}catch(p){throw new Error(`inkly.json is not valid JSON: ${p.message}`)}let i=ge.safeParse(a);if(!i.success)throw new Error(`inkly.json failed schema validation:
4983
+ ${i.error.message}`);let o=i.data,s=await fc(t);for(let p of s){let h=Qt(p.slug);if(!h.ok)throw new Error(`Demo folder "${p.slug}" has an invalid slug: ${h.reason}`);if(lt.includes(p.slug))throw new Error(`Demo folder "${p.slug}" uses a reserved slug.`)}let c=[];for(let p of s){let h;try{h=await ce(p.configPath,"utf8")}catch(k){e(`Skipping ${p.slug}: failed to read demo.config.json (${k.message})`);continue}let f;try{f=JSON.parse(h)}catch(k){e(`Skipping ${p.slug}: demo.config.json is not valid JSON (${k.message})`);continue}let w;try{w=Ct(f).config}catch(k){e(`Skipping ${p.slug}: demo.config.json failed schema validation: ${k.message}`);continue}c.push({slug:p.slug,configPath:p.configPath,config:w,assets:await mc(p.configPath)})}let d=c.map(p=>hc(p)),u=new Map;for(let p of c)u.set(p.slug,p);return{hub:o,hubPath:n,demos:c,index:d,bySlug:u}}function Tn(t,e,n){let r=JSON.stringify(n).replace(/<\/(script)/gi,"<\\/$1"),a=`<script id="${e}" type="application/json">${r}</script>`;return t.includes(`id="${e}"`)?t.replace(new RegExp(`<script id="${e}"[^>]*>[\\s\\S]*?</script>`),a):t.replace("</head>",`${a}
4984
+ </head>`)}function gc(t){let e=t.hub.theme??"inkly",n=le[e];return{hub:mr(t.hub),demos:t.index,theme:{id:e,tokens:n?.theme??null,css:n?.css??""}}}var bc={".html":"text/html; charset=utf-8",".css":"text/css; charset=utf-8",".js":"text/javascript; charset=utf-8",".mjs":"text/javascript; charset=utf-8",".json":"application/json; charset=utf-8",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".webp":"image/webp",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".otf":"font/otf",".txt":"text/plain; charset=utf-8",".md":"text/markdown; charset=utf-8"};function Kt(t){return bc[ac(t).toLowerCase()]??"application/octet-stream"}function Qt(t){let e=t.split("/").filter(Boolean);if(e.length===0)return{ok:!1,reason:"Name cannot be empty."};for(let n of e){let r=_e(n);if(!r.ok)return r}return lt.includes(t)?{ok:!1,reason:`Demo folder "${t}" uses a reserved slug.`}:{ok:!0}}function li(t,e){let n;try{n=decodeURIComponent(t)}catch{return null}let r=n.replace(/^\/+/,"").replace(/\/+$/,"");if(!r)return null;let a=r.split("/").filter(Boolean);for(let i=a.length;i>=1;i-=1){let o=a.slice(0,i).join("/");if(!Qt(o).ok)continue;let s=e.bySlug.get(o);if(s)return{slug:o,demo:s,rel:a.slice(i).join("/")}}return null}async function yc(t){return new Promise(e=>{let n=lc();n.once("error",()=>e(!1)),n.once("listening",()=>{n.close(()=>e(!0))}),n.listen(t,hr)})}async function xc(t,e){return new Promise(n=>{let r=!1,a=o=>{r||(r=!0,i.destroy(),n(o))},i=sc({port:t,host:e});i.setTimeout(250),i.once("connect",()=>a(!0)),i.once("timeout",()=>a(!1)),i.once("error",()=>a(!1))})}async function kc(t){if(!await yc(t))return!1;for(let e of["localhost","127.0.0.1","::1"])if(await xc(t,e))return!1;return!0}async function wc(t){if(t===0)return 0;if(!Number.isInteger(t)||t<0||t>65535)throw new Error(`invalid port: ${t}`);for(let e=t;e<=65535;e+=1)if(await kc(e))return e;throw new Error(`No available port found at or above ${t}`)}function vc(t,e){let n=t.httpServer?.address();return n&&typeof n=="object"?n.port:t.config.server.port??e}async function Sc(t){let e=rc(t),n=/^[a-z0-9][a-z0-9-]*$/.test(e)&&!lt.includes(e)?e:"demo",r=await Kd(O(nc(),"inkly-dev-"));await Yd(O(r,"demos"),{recursive:!0}),await Xd(t,O(r,"demos",n),{recursive:!0});let a=n;try{let o=JSON.parse(await ce(O(t,"demo.config.json"),"utf8"));typeof o.title=="string"&&o.title.trim()&&(a=o.title.trim())}catch{}let i={$schema:"https://inklyai.dev/inkly.json",name:a,runtime:"0.6.0",theme:"inkly",collections:[{name:"Preview",demos:[n]}]};return await Qd(O(r,"inkly.json"),`${JSON.stringify(i,null,2)}
4985
+ `),{hubRoot:r,slug:n}}async function ui(t){let{cwd:e,port:n=3e3,silent:r,skipRuntimeResolve:a}=t,i=j=>{r||process.stderr.write(`[inkly dev] ${j}
4986
+ `)},o=t.path?ze(e,t.path):e,s=pc(o),c=null;if(!s)if(ut(O(o,"demo.config.json"))){let j=await Sc(o);s=j.hubRoot,c=j.hubRoot,r||process.stdout.write(`[inkly dev] serving standalone demo "${j.slug}" via a temporary hub (no inkly.json required)
4987
+ `)}else throw new Error(`No inkly.json found in ${o} or any parent directory. Run \`inkly init <name>\` first, cd into your hub, or point \`inkly dev\` at an exported demo folder (a directory containing demo.config.json).`);let d=await Cn(s);if(!r){for(let j of d.healed)process.stdout.write(`[inkly dev] healed missing id: ${qt(d.hubRoot,j.configPath)}
4988
+ `);for(let j of d.reminted)process.stdout.write(`[inkly dev] re-minted duplicate id: ${qt(d.hubRoot,j.configPath)}
4989
+ `)}let u=await si(s,i),p=O(s,"inkly.lock"),h=ut(p),f=null;if(h&&!a)try{if(f=await cr({hubRoot:s}),!r)if(f.fetched){let j=(f.bytesFetched/1048576).toFixed(2);process.stdout.write(`[inkly dev] fetched runtime ${f.version} from ${f.lock.runtime.url} (${j} MiB)
4990
+ `)}else process.stdout.write(`[inkly dev] runtime ${f.version} loaded from cache (${f.cacheDir})
4991
+ `)}catch(j){throw j instanceof dt||j instanceof Et?j:new Error(`Failed to resolve runtime via inkly.lock: ${j.message}`)}else if(!a)try{let{lock:j,source:G}=await vn(s);if(f=await cr({hubRoot:s,lock:j}),!r){let ue=f.fetched?`fetched ${(f.bytesFetched/1048576).toFixed(2)} MiB`:"from cache";process.stdout.write(`[inkly dev] no inkly.lock \u2014 resolved runtime ${f.version} from ${G==="cdn"?"the CDN":"a local build"} (${ue}). Run \`inkly lock\` to pin this version.
4992
+ `)}}catch(j){r||process.stdout.write(`[inkly dev] no inkly.lock and could not resolve a published runtime (${j.message}). Falling back to the in-workspace @inkly/runtime dist. Run \`inkly lock\` once a runtime is published to R2 to pin a version.
4993
+ `)}let w=f?.cacheDir??uc(s),k=ai(await ce(ri("hub-index.html"),"utf8"),f),C=ai(await ce(ri("demo.html"),"utf8"),f),$=await wc(n),N=$,E=async()=>{},b=await Zd({root:s,server:{port:$,strictPort:!0,host:hr,hmr:{host:hr},fs:{allow:[s,di(new URL("../",import.meta.url))]}},appType:"custom",clearScreen:!1,logLevel:r?"silent":"info",configFile:!1,plugins:[{name:"inkly-dev-endpoints",configureServer(j){let G=(ue,I,ae)=>{let v=(ue.url??"").split("?")[0]??"";if(v==="/"||v==="/index.html"){let R=Tn(k,"__inkly_hub_data",gc(u));U(I,200,"text/html; charset=utf-8",R);return}if(v.startsWith("/__inkly/cache/")){let R=decodeURIComponent(v.slice(15));if(!R||R.includes("..")||R.includes("/")){U(I,400,"text/plain; charset=utf-8","Invalid cache path");return}let F=O(s,".inkly","cache",R);Yt(F).then(M=>{if(!M.isFile()){U(I,404,"text/plain; charset=utf-8",`Capture not found: ${R}`);return}Xt(I,F,Kt(F))},()=>U(I,404,"text/plain; charset=utf-8",`Capture not found: ${R}`));return}if(v.startsWith("/__inkly/snapshot/")){let R=decodeURIComponent(v.slice(18)),M=R.indexOf("/snapshots/"),J=M>0?R.slice(0,M):"",K=M>0?R.slice(M+1):"";if(!Qt(J).ok||!u.bySlug.has(J)||!K||K.includes("..")||K.startsWith("/")){U(I,400,"text/plain; charset=utf-8","Invalid snapshot path");return}if(!K.startsWith("snapshots/")){U(I,400,"text/plain; charset=utf-8","Invalid snapshot path");return}let xe=O(s,"demos",...J.split("/")),pe=O(xe,K);if(!pe.startsWith(xe+An)&&pe!==xe){U(I,400,"text/plain; charset=utf-8","Invalid snapshot path");return}Yt(pe).then(async Ft=>{if(!Ft.isFile()){U(I,404,"text/plain; charset=utf-8",`Snapshot not found: ${K}`);return}if(!/\.html?$/i.test(K)){let Po=await ce(pe,"utf8");U(I,200,Kt(pe),st(Po));return}let te=rr(K),Ht=te?O(xe,te):null,[Hn,Bt]=await Promise.all([ce(pe,"utf8"),Ht?ce(Ht,"utf8").catch(()=>null):Promise.resolve(null)]),sn=Ua({htmlPath:K,html:Hn,css:Bt,cssHref:te?`/__inkly/snapshot/${encodeURIComponent(J)}/${te.split("/").map(encodeURIComponent).join("/")}`:null});U(I,200,Kt(pe),sn)},()=>U(I,404,"text/plain; charset=utf-8",`Snapshot not found: ${K}`));return}if(v==="/__inkly/hub"){U(I,200,"application/json; charset=utf-8",JSON.stringify(mr(u.hub)));return}if(v==="/__inkly/demos"){U(I,200,"application/json; charset=utf-8",JSON.stringify(u.index));return}if(v.startsWith("/__inkly/demo/")){let R=decodeURIComponent(v.slice(14)),F=Qt(R);if(!F.ok){U(I,400,"text/plain; charset=utf-8",F.reason);return}let M=u.bySlug.get(R);if(!M){U(I,404,"text/plain; charset=utf-8",`No such demo: ${R}`);return}let J=O(pt(M.configPath),"assets.json");ce(J,"utf8").then(K=>{let Ut=[];try{let xe=JSON.parse(K);Array.isArray(xe.assets)&&(Ut=xe.assets)}catch{}U(I,200,"application/json; charset=utf-8",JSON.stringify({demo:M.config,assets:Ut}))},()=>{U(I,200,"application/json; charset=utf-8",JSON.stringify({demo:M.config,assets:[]}))});return}if(v==="/__inkly/runtime.js"){pr(I,w,"runtime.js","text/javascript; charset=utf-8");return}if(v==="/__inkly/runtime.css"){pr(I,w,"runtime.css","text/css; charset=utf-8");return}if(v==="/__inkly/manifest.json"){pr(I,w,"manifest.json","application/json; charset=utf-8");return}if(v.startsWith("/__inkly/vendor/")){let R=decodeURIComponent(v.slice(16));if(!/^(react|react-dom|react-dom-client|react-jsx-runtime)\.mjs$/.test(R)){U(I,404,"text/plain; charset=utf-8",`No such vendor module: ${R}`);return}let F=cc(R);if(!F){U(I,503,"text/plain; charset=utf-8",`Runtime vendor module not found: ${R}`);return}Xt(I,F,"text/javascript; charset=utf-8");return}if(v.startsWith("/__inkly/theme/")&&v.endsWith(".css")){let R=decodeURIComponent(v.slice(15,-4)),F=le[R];if(!F){let M=Object.keys(le).join(", ");U(I,404,"text/plain; charset=utf-8",`No such theme: "${R}". Known themes: ${M}
4994
+ `);return}U(I,200,"text/css; charset=utf-8",F.css??"");return}let ft=v.startsWith("/__inkly/")?null:li(v,u);if(ft&&ft.rel){let{slug:R,rel:F}=ft;if(F.includes("..")||F.startsWith("/")){U(I,400,"text/plain; charset=utf-8","Invalid path");return}let M=O(s,"demos",...R.split("/"),"public"),J=O(M,F);if(!J.startsWith(M+An)&&J!==M){U(I,400,"text/plain; charset=utf-8","Invalid path");return}Yt(J).then(K=>{if(!K.isFile()){ae();return}Xt(I,J,Kt(J))},()=>ae());return}if(v.length>1&&!v.startsWith("/__inkly/")&&!v.endsWith("/")){let R=decodeURIComponent(v.slice(1)),F=O(s,"public"),M=O(F,R);if(!R.includes("..")&&(M.startsWith(F+An)||M===F)){Yt(M).then(J=>{if(J.isFile()){Xt(I,M,Kt(M));return}on()},()=>on());return}}on();function on(){if(v.length>1&&!v.startsWith("/__inkly/")){let R=v.replace(/^\/+/,"").replace(/\/+$/,""),F=li(v,u);if(F&&F.rel===""){let{slug:M,demo:J}=F;if(!Qt(M).ok){ae();return}let Ut={hub:{name:u.hub.name,brand:mr(u.hub).brand??null,tokens:u.hub.tokens??null,theme:u.hub.theme??null,layout:u.hub.layout??null},demoSlug:M,demoTitle:J.config.title??J.config.id},xe=O(pt(J.configPath),"assets.json"),pe=Ft=>{let te=Tn(C,"__inkly_hub_meta",Ut);te=Tn(te,"__inkly_demo_config",J.config),te=Tn(te,"__inkly_demo_assets",Ft),U(I,200,"text/html; charset=utf-8",te)};ce(xe,"utf8").then(Ft=>{let te=[];try{let Ht=JSON.parse(Ft);Array.isArray(Ht.assets)&&(te=Ht.assets.map(Hn=>{let Bt=Hn,sn=ci(Bt,M);return sn?{...Bt,publicUrl:sn}:Bt}))}catch{}pe(te)},()=>{pe([])});return}if(R&&!R.includes("/")){if(!_e(R).ok){ae();return}U(I,404,"text/plain; charset=utf-8",`No such demo: "${R}". Known demos: ${[...u.bySlug.keys()].join(", ")||"(none)"}
4995
+ `);return}}ae()}};j.middlewares.use(G)}}]});await b.listen(),N=vc(b,$);let L=`http://127.0.0.1:${N}/`,z=`http://localhost:${N}/`,D=Gd.watch([O(s,"inkly.json"),O(s,"demos/**/demo.config.json"),O(s,"demos/**/assets.json")],{ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:60,pollInterval:20}}),W=!1,X=async()=>{if(!W){W=!0;try{u=await si(s,i);try{b.ws.send({type:"custom",event:"inkly:hub-changed"}),b.ws.send({type:"full-reload"})}catch{}}catch(j){i(`Reload failed: ${j.message}`)}finally{W=!1}}};if(E=X,D.on("add",X),D.on("change",X),D.on("unlink",X),!r){let j=u.hub.collections?.length??0,G=[...u.bySlug.keys()],ue=10,I=G.length>0?`
4987
4996
  demos:
4988
- `+X.slice(0,Ee).map(ae=>` ${L}${ae}`).join(`
4989
- `)+(X.length>Ee?`
4990
- \u2026and ${X.length-Ee} more`:""):"";process.stdout.write(`
4991
- inkly dev running at ${L}
4997
+ `+G.slice(0,ue).map(ae=>` ${z}${ae}`).join(`
4998
+ `)+(G.length>ue?`
4999
+ \u2026and ${G.length-ue} more`:""):"";process.stdout.write(`
5000
+ inkly dev running at ${z}
4992
5001
  hub: ${u.hub.name}
4993
- demos: ${u.demos.length} in ${M} collection(s)${I}
5002
+ demos: ${u.demos.length} in ${j} collection(s)${I}
4994
5003
  watching ${s}
4995
5004
 
4996
- `)}let be=!1;return{url:N,port:O,server:g,hubRoot:s,close:async()=>{be||(be=!0,await D.close(),await g.close(),c&&await Wd(c,{recursive:!0,force:!0}).catch(()=>{}))}}}function lr(t,e,n,r){if(!e){U(t,503,"text/plain; charset=utf-8",ti);return}let a=j(e,n);Yt(a).then(()=>Xt(t,a,r),()=>U(t,503,"text/plain; charset=utf-8",`${ti}(missing: ${n})`))}import{mkdir as mc,access as di,readFile as fc}from"fs/promises";import{dirname as gc,join as Tn,resolve as bc}from"path";function ur(t){return t.split("-").filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function li(t,e){return{id:ne(),version:1,title:e??ur(t),theme:{background:"#ffffff",foreground:"#0a0a0a",primary:"#5b6cff",primaryForeground:"#ffffff",secondary:"#f4f4f5",secondaryForeground:"#18181b",radius:"12px",font:"Inter, system-ui, sans-serif",fontSize:"14px"},chrome:{showHubBreadcrumb:!0},chapters:[{id:"create",title:"Create",stepIds:["s1"]},{id:"preview",title:"Preview",stepIds:["s2"]},{id:"ship",title:"Ship",stepIds:["s3"]}],steps:[{id:"intro",kind:"cover",widgets:[{type:"headline",id:"intro-headline",title:"Your demo in *60 seconds*.",description:"See how to spin up a sharable demo from a single prompt.",image:{src:"https://placehold.co/2800x1600/f8fafc/111827/png?text=Workspace&font=inter",alt:"Workspace preview",naturalWidth:2800,naturalHeight:1600,position:"right",layout:"hero"},cta:{label:"Get started",animation:"shimmer",action:{type:"next"}}}]},{id:"s1",kind:"content",background:{type:"image",src:"https://placehold.co/2800x1600/f8fafc/111827/png?text=Workspace&font=inter",naturalWidth:2800,naturalHeight:1600,alt:"Workspace overview"},annotations:[{id:"s1_pointer",type:"message",variant:"pointer",x:.28,y:.34,text:"Just **describe** the flow you want \u2014 the demo scaffolds the walkthrough in seconds.",anchor:"right",advancesStep:!0}]},{id:"s2",kind:"content",background:{type:"image",src:"https://placehold.co/2800x1600/ecfeff/111827/png?text=Live+Preview&font=inter",naturalWidth:2800,naturalHeight:1600,alt:"Live preview with editable files"},transform:{zoom:1.25,x:.62,y:.42},captions:[{id:"s2_caption",text:"See your changes come to life with our live preview."}],annotations:[{id:"s2_callout",type:"message",variant:"callout",x:.5,y:.5,text:"**Live preview that follows you.** Every edit lands in the preview *instantly* \u2014 tweak copy, swap assets, reorder steps, and watch the demo update **without a rebuild**.",advancesStep:!0}]},{id:"s3",kind:"content",background:{type:"image",src:"https://placehold.co/2800x1600/f0fdf4/111827/png?text=Export+and+Share&font=inter",naturalWidth:2800,naturalHeight:1600,alt:"Export and share demo"},captions:[{id:"s3_caption",text:"When you are ready, export your demo and share it with anyone."}],annotations:[{id:"s3_area",type:"message",variant:"area",x:.55,y:.45,w:.32,h:.22,text:"**Ready to share.** Export your demo as a **single sharable link** that runs anywhere \u2014 drop it in an email, embed it on your landing page, or paste it in Slack. Works in *any* browser, no install needed.",anchor:"top",advancesStep:!0}]}]}}async function yc(t){let e=bc(t);for(;;){let n=Tn(e,"inkly.json");if(await di(n).then(()=>!0,()=>!1))return e;let a=gc(e);if(a===e)return null;e=a}}async function ci(t){let{slug:e,cwd:n,collection:r,silent:a}=t,i=await yc(n);if(!i)throw new Error("Not inside a hub. Run `inkly init <name>` first.");let o=Se(e);if(!o.ok)throw new Error(o.reason);let s=Tn(i,"inkly.json"),c=await fc(s,"utf8"),d;try{d=JSON.parse(c)}catch(g){throw new Error(`Failed to parse inkly.json: ${g.message}`)}let u=fe.safeParse(d);if(!u.success)throw new Error(`Invalid inkly.json: ${u.error.issues.map(g=>`${g.path.join(".")||"<root>"}: ${g.message}`).join("; ")}`);let p=u.data,h=Tn(i,"demos",e);if(await di(h).then(()=>!0,()=>!1))throw new Error(`Demo already exists: demos/${e}. Choose a different slug or remove it first.`);let k,v=p,C=p.collections??[];if(r){let g={...p,collections:C.map(L=>({...L,demos:[...L.demos]}))},N=g.collections.find(L=>L.name===r);N?N.demos.push(e):g.collections.push({name:r,demos:[e]}),v=g,k=r}if(k){let g=fe.safeParse(v);if(!g.success)throw new Error(`Internal error: updated inkly.json failed schema validation. ${g.error.message}`)}let $=ne(),O={...li(e,ur(e)),id:$},E=ot.safeParse(O);if(!E.success)throw new Error(`Internal error: scaffolded demo failed schema validation. ${E.error.message}`);if(await mc(h,{recursive:!0}),await K(Tn(h,"demo.config.json"),JSON.stringify(O,null,2)+`
4997
- `),k&&await K(s,JSON.stringify(v,null,2)+`
4998
- `),!a){let g=`Added ${h}
4999
- `;g+=` id: ${$}
5000
- `,k&&(g+=`Added to collection "${k}" in inkly.json
5001
- `),g+=`Next: inkly dev
5002
- `,process.stdout.write(g)}return{hubRoot:i,demoDir:h,collectionModified:k,id:$}}import{readdir as xc}from"fs/promises";import{join as kc}from"path";function Te(t,e,n,r){t.push({level:e,file:n,message:r})}function pr(t,e){if(typeof t=="string"){t.startsWith("asset:")&&e.add(t.slice(6));return}if(!(!t||typeof t!="object")){if(Array.isArray(t)){for(let n of t)pr(n,e);return}for(let n of Object.values(t))pr(n,e)}}async function An(t){let e=[],n=null;try{let o=await It(t.cwd);n=o.root,o.inkly.theme&&!le[o.inkly.theme]&&Te(e,"error","inkly.json",`Unknown theme "${o.inkly.theme}". Known themes: ${Object.keys(le).join(", ")}.`);let s=new Set(o.demos.map(d=>d.slug)),c=new Map;for(let d of o.demos){let u=rr(d.slug);u&&Te(e,"error",`demos/${d.slug}`,u);let p=c.get(d.config.id);p?p.push(d.slug):c.set(d.config.id,[d.slug]),d.config.theme?.preset&&!le[d.config.theme.preset]&&Te(e,"error",`demos/${d.slug}/demo.config.json`,`Unknown demo theme preset "${d.config.theme.preset}".`);let h=new Set;pr(d.config,h);let y=new Set((d.assets?.assets??[]).map(k=>k.id));for(let k of h)y.has(k)||Te(e,"error",`demos/${d.slug}/demo.config.json`,`References asset:${k}, but demos/${d.slug}/assets.json has no matching asset id.`);for(let k of d.assets?.assets??[])(await wc(o.root,k.sha256)).length===0&&!vc(k)&&Te(e,"warning",`demos/${d.slug}/assets.json`,`Asset "${k.id}" has no local cache file and no CDN URL.`)}for(let[d,u]of c)if(!(u.length<2))for(let p of u)Te(e,"warning",`demos/${p}/demo.config.json`,`Duplicate demo id "${d}" shared with ${u.filter(h=>h!==p).map(h=>`demos/${h}`).join(", ")}. Run \`inkly doctor\` to re-mint.`);for(let d of o.inkly.collections??[])for(let u of d.demos){let p=rr(u);if(p){Te(e,"error","inkly.json",`Collection "${d.name}" references invalid slug "${u}": ${p}`);continue}s.has(u)||Te(e,"warning","inkly.json",`Collection "${d.name}" references missing demo "${u}".`)}}catch(o){Te(e,"error","hub",o.message)}let r=e.filter(o=>o.level==="error").length,a=e.filter(o=>o.level==="warning").length,i={ok:r===0&&(!t.strict||a===0),hubRoot:n,errors:r,warnings:a,issues:e};if(!t.silent)if(t.json)process.stdout.write(JSON.stringify(i,null,2)+`
5005
+ `)}let ye=!1;return{url:L,port:N,server:b,hubRoot:s,close:async()=>{ye||(ye=!0,await D.close(),await b.close(),c&&await ec(c,{recursive:!0,force:!0}).catch(()=>{}))}}}function pr(t,e,n,r){if(!e){U(t,503,"text/plain; charset=utf-8",ii);return}let a=O(e,n);Yt(a).then(()=>Xt(t,a,r),()=>U(t,503,"text/plain; charset=utf-8",`${ii}(missing: ${n})`))}import{mkdir as _c,access as hi,readFile as Cc}from"fs/promises";import{dirname as Tc,join as In,resolve as Ac}from"path";function fr(t){return t.split("-").filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function pi(t,e){return{id:ne(),version:1,title:e??fr(t),theme:{background:"#ffffff",foreground:"#0a0a0a",primary:"#5b6cff",primaryForeground:"#ffffff",secondary:"#f4f4f5",secondaryForeground:"#18181b",radius:"12px",font:"Inter, system-ui, sans-serif",fontSize:"14px"},chrome:{showHubBreadcrumb:!0},chapters:[{id:"create",title:"Create",stepIds:["s1"]},{id:"preview",title:"Preview",stepIds:["s2"]},{id:"ship",title:"Ship",stepIds:["s3"]}],steps:[{id:"intro",kind:"cover",widgets:[{type:"headline",id:"intro-headline",title:"Your demo in *60 seconds*.",description:"See how to spin up a sharable demo from a single prompt.",image:{src:"https://placehold.co/2800x1600/f8fafc/111827/png?text=Workspace&font=inter",alt:"Workspace preview",naturalWidth:2800,naturalHeight:1600,position:"right",layout:"hero"},cta:{label:"Get started",animation:"shimmer",action:{type:"next"}}}]},{id:"s1",kind:"content",background:{type:"image",src:"https://placehold.co/2800x1600/f8fafc/111827/png?text=Workspace&font=inter",naturalWidth:2800,naturalHeight:1600,alt:"Workspace overview"},annotations:[{id:"s1_pointer",type:"message",variant:"pointer",x:.28,y:.34,text:"Just **describe** the flow you want \u2014 the demo scaffolds the walkthrough in seconds.",anchor:"right",advancesStep:!0}]},{id:"s2",kind:"content",background:{type:"image",src:"https://placehold.co/2800x1600/ecfeff/111827/png?text=Live+Preview&font=inter",naturalWidth:2800,naturalHeight:1600,alt:"Live preview with editable files"},transform:{zoom:1.25,x:.62,y:.42},captions:[{id:"s2_caption",text:"See your changes come to life with our live preview."}],annotations:[{id:"s2_callout",type:"message",variant:"callout",x:.5,y:.5,text:"**Live preview that follows you.** Every edit lands in the preview *instantly* \u2014 tweak copy, swap assets, reorder steps, and watch the demo update **without a rebuild**.",advancesStep:!0}]},{id:"s3",kind:"content",background:{type:"image",src:"https://placehold.co/2800x1600/f0fdf4/111827/png?text=Export+and+Share&font=inter",naturalWidth:2800,naturalHeight:1600,alt:"Export and share demo"},captions:[{id:"s3_caption",text:"When you are ready, export your demo and share it with anyone."}],annotations:[{id:"s3_area",type:"message",variant:"area",x:.55,y:.45,w:.32,h:.22,text:"**Ready to share.** Export your demo as a **single sharable link** that runs anywhere \u2014 drop it in an email, embed it on your landing page, or paste it in Slack. Works in *any* browser, no install needed.",anchor:"top",advancesStep:!0}]}]}}async function Ic(t){let e=Ac(t);for(;;){let n=In(e,"inkly.json");if(await hi(n).then(()=>!0,()=>!1))return e;let a=Tc(e);if(a===e)return null;e=a}}async function mi(t){let{slug:e,cwd:n,collection:r,silent:a}=t,i=await Ic(n);if(!i)throw new Error("Not inside a hub. Run `inkly init <name>` first.");let o=_e(e);if(!o.ok)throw new Error(o.reason);let s=In(i,"inkly.json"),c=await Cc(s,"utf8"),d;try{d=JSON.parse(c)}catch(b){throw new Error(`Failed to parse inkly.json: ${b.message}`)}let u=ge.safeParse(d);if(!u.success)throw new Error(`Invalid inkly.json: ${u.error.issues.map(b=>`${b.path.join(".")||"<root>"}: ${b.message}`).join("; ")}`);let p=u.data,h=In(i,"demos",e);if(await hi(h).then(()=>!0,()=>!1))throw new Error(`Demo already exists: demos/${e}. Choose a different slug or remove it first.`);let w,k=p,C=p.collections??[];if(r){let b={...p,collections:C.map(z=>({...z,demos:[...z.demos]}))},L=b.collections.find(z=>z.name===r);L?L.demos.push(e):b.collections.push({name:r,demos:[e]}),k=b,w=r}if(w){let b=ge.safeParse(k);if(!b.success)throw new Error(`Internal error: updated inkly.json failed schema validation. ${b.error.message}`)}let $=ne(),N={...pi(e,fr(e)),id:$},E=ot.safeParse(N);if(!E.success)throw new Error(`Internal error: scaffolded demo failed schema validation. ${E.error.message}`);if(await _c(h,{recursive:!0}),await Y(In(h,"demo.config.json"),JSON.stringify(N,null,2)+`
5006
+ `),w&&await Y(s,JSON.stringify(k,null,2)+`
5007
+ `),!a){let b=`Added ${h}
5008
+ `;b+=` id: ${$}
5009
+ `,w&&(b+=`Added to collection "${w}" in inkly.json
5010
+ `),b+=`Next: inkly dev
5011
+ `,process.stdout.write(b)}return{hubRoot:i,demoDir:h,collectionModified:w,id:$}}import{readdir as Pc}from"fs/promises";import{join as Ec}from"path";function Ae(t,e,n,r){t.push({level:e,file:n,message:r})}function gr(t,e){if(typeof t=="string"){t.startsWith("asset:")&&e.add(t.slice(6));return}if(!(!t||typeof t!="object")){if(Array.isArray(t)){for(let n of t)gr(n,e);return}for(let n of Object.values(t))gr(n,e)}}async function Pn(t){let e=[],n=null;try{let o=await It(t.cwd);n=o.root,o.inkly.theme&&!le[o.inkly.theme]&&Ae(e,"error","inkly.json",`Unknown theme "${o.inkly.theme}". Known themes: ${Object.keys(le).join(", ")}.`);let s=new Set(o.demos.map(d=>d.slug)),c=new Map;for(let d of o.demos){let u=ir(d.slug);u&&Ae(e,"error",`demos/${d.slug}`,u);let p=c.get(d.config.id);p?p.push(d.slug):c.set(d.config.id,[d.slug]),d.config.theme?.preset&&!le[d.config.theme.preset]&&Ae(e,"error",`demos/${d.slug}/demo.config.json`,`Unknown demo theme preset "${d.config.theme.preset}".`);let h=new Set;gr(d.config,h);let f=new Set((d.assets?.assets??[]).map(w=>w.id));for(let w of h)f.has(w)||Ae(e,"error",`demos/${d.slug}/demo.config.json`,`References asset:${w}, but demos/${d.slug}/assets.json has no matching asset id.`);for(let w of d.assets?.assets??[])(await Rc(o.root,w.sha256)).length===0&&!$c(w)&&Ae(e,"warning",`demos/${d.slug}/assets.json`,`Asset "${w.id}" has no local cache file and no CDN URL.`)}for(let[d,u]of c)if(!(u.length<2))for(let p of u)Ae(e,"warning",`demos/${p}/demo.config.json`,`Duplicate demo id "${d}" shared with ${u.filter(h=>h!==p).map(h=>`demos/${h}`).join(", ")}. Run \`inkly doctor\` to re-mint.`);for(let d of o.inkly.collections??[])for(let u of d.demos){let p=ir(u);if(p){Ae(e,"error","inkly.json",`Collection "${d.name}" references invalid slug "${u}": ${p}`);continue}s.has(u)||Ae(e,"warning","inkly.json",`Collection "${d.name}" references missing demo "${u}".`)}}catch(o){Ae(e,"error","hub",o.message)}let r=e.filter(o=>o.level==="error").length,a=e.filter(o=>o.level==="warning").length,i={ok:r===0&&(!t.strict||a===0),hubRoot:n,errors:r,warnings:a,issues:e};if(!t.silent)if(t.json)process.stdout.write(JSON.stringify(i,null,2)+`
5003
5012
  `);else if(i.ok)process.stdout.write(`inkly validate passed (${r} errors, ${a} warnings)
5004
5013
  `);else{for(let o of e)process.stdout.write(`${o.level.toUpperCase()} ${o.file}: ${o.message}
5005
5014
  `);process.stdout.write(`inkly validate failed (${r} errors, ${a} warnings)
5006
- `)}return i}async function wc(t,e){let n=kc(t,".inkly","cache");if(!await V(n))return[];try{return(await xc(n)).filter(a=>a.startsWith(`${e}.`))}catch{return[]}}function vc(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.publicUrl=="string"||typeof e.cdnPath=="string"}import{readFile as Sc}from"fs/promises";import{existsSync as _c}from"fs";import{dirname as hr,join as ui}from"path";import{fileURLToPath as Cc}from"url";async function mr(){let t=hr(Cc(import.meta.url));for(let e=0;e<5;e+=1){let n=ui(t,"package.json");try{let a=JSON.parse(await Sc(n,"utf8"));if(typeof a.version=="string"){let i=_c(ui(hr(n),"src"));return{version:a.version,packagePath:n,isLocalBuild:i}}}catch{}let r=hr(t);if(r===t)break;t=r}return{version:"0.0.0-unknown",packagePath:null,isLocalBuild:!1}}async function fr(t={}){let e=await mr();if(!t.silent){let n=e.isLocalBuild?" (local build)":"";process.stdout.write(`${e.version}${n}
5007
- `)}return e}import{spawn as Tc}from"child_process";async function pi(t={}){let e=t.packageName??"@inkly-org/cli@latest",n=process.env.npm_execpath?[process.execPath,process.env.npm_execpath,"install","-g",e]:["npm","install","-g",e];if(t.dryRun){t.silent||process.stdout.write(`${n.join(" ")}
5008
- `);return}await new Promise((r,a)=>{let i=Tc(n[0],n.slice(1),{stdio:"inherit"});i.on("error",a),i.on("exit",o=>{o===0?r():a(new Error(`Update failed with exit code ${o??"unknown"}`))})})}import{join as fi}from"path";import{readFile as Ac,rm as Ic}from"fs/promises";import{join as Pc}from"path";import{homedir as Ec}from"os";var gr="https://app.inklyai.dev",hi="http://localhost:3000",Ae=Pc(Ec(),".inkly","config.json");async function ze(){try{let t=await Ac(Ae,"utf8"),e=JSON.parse(t);return{apiBase:typeof e.apiBase=="string"?e.apiBase:void 0,token:typeof e.token=="string"?e.token:void 0}}catch{return{}}}async function br(t){await K(Ae,JSON.stringify(t,null,2)+`
5009
- `,{mode:384})}async function mi(){await Ic(Ae,{force:!0})}function Ue(t){return(t||gr).replace(/\/+$/,"")}async function gi(t){let e=[],n=await mr();e.push({name:"cli-version",ok:n.version!=="0.0.0-unknown",message:n.version});let r=Number.parseInt(process.versions.node.split(".")[0]??"0",10);e.push({name:"node",ok:r>=20,message:process.version});let a=await Ce(t.cwd);e.push({name:"hub-root",ok:!!a,message:a??"No inkly.json found."});let i=await ze();e.push({name:"login",ok:!!i.token,message:i.token?`Configured for ${i.apiBase??"(default API)"}`:"Not logged in."});let o=[],s=null;if(a){let d=await Sn(a);s={healed:d.healed.length,reminted:d.reminted.length,paths:[...d.healed,...d.reminted].map(y=>qt(d.hubRoot,y.configPath))},e.push({name:"demo-ids",ok:!0,message:s.healed===0&&s.reminted===0?"all demos have a valid unique id":`healed ${s.healed}, re-minted ${s.reminted}`});let u=await An({cwd:a,silent:!0});o=u.issues,e.push({name:"schema",ok:u.ok,message:`${u.errors} errors, ${u.warnings} warnings`});let p=await V(fi(a,".inkly","cache"));e.push({name:"local-cache",ok:!0,message:p?".inkly/cache exists":".inkly/cache not present yet"});let h=await wn(fi(a,"node_modules","@inkly","runtime","dist","runtime.js"));h!==null&&e.push({name:"runtime-artifact",ok:!0,message:`${h} bytes`})}let c={ok:e.every(d=>d.ok||d.name==="login"),checks:e,validationIssues:o,demoIds:s};if(!t.silent)if(t.json)process.stdout.write(JSON.stringify(c,null,2)+`
5015
+ `)}return i}async function Rc(t,e){let n=Ec(t,".inkly","cache");if(!await V(n))return[];try{return(await Pc(n)).filter(a=>a.startsWith(`${e}.`))}catch{return[]}}function $c(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.publicUrl=="string"||typeof e.cdnPath=="string"}import{readFile as Dc}from"fs/promises";import{existsSync as jc}from"fs";import{dirname as br,join as fi}from"path";import{fileURLToPath as Oc}from"url";async function yr(){let t=br(Oc(import.meta.url));for(let e=0;e<5;e+=1){let n=fi(t,"package.json");try{let a=JSON.parse(await Dc(n,"utf8"));if(typeof a.version=="string"){let i=jc(fi(br(n),"src"));return{version:a.version,packagePath:n,isLocalBuild:i}}}catch{}let r=br(t);if(r===t)break;t=r}return{version:"0.0.0-unknown",packagePath:null,isLocalBuild:!1}}async function xr(t={}){let e=await yr();if(!t.silent){let n=e.isLocalBuild?" (local build)":"";process.stdout.write(`${e.version}${n}
5016
+ `)}return e}import{spawn as Nc}from"child_process";async function gi(t={}){let e=t.packageName??"@inkly-org/cli@latest",n=process.env.npm_execpath?[process.execPath,process.env.npm_execpath,"install","-g",e]:["npm","install","-g",e];if(t.dryRun){t.silent||process.stdout.write(`${n.join(" ")}
5017
+ `);return}await new Promise((r,a)=>{let i=Nc(n[0],n.slice(1),{stdio:"inherit"});i.on("error",a),i.on("exit",o=>{o===0?r():a(new Error(`Update failed with exit code ${o??"unknown"}`))})})}import{join as xi}from"path";import{readFile as Lc,rm as zc}from"fs/promises";import{join as Mc}from"path";import{homedir as Uc}from"os";var kr="https://app.inklyai.dev",bi="http://localhost:3000",Ie=Mc(Uc(),".inkly","config.json");async function Me(){try{let t=await Lc(Ie,"utf8"),e=JSON.parse(t);return{apiBase:typeof e.apiBase=="string"?e.apiBase:void 0,token:typeof e.token=="string"?e.token:void 0}}catch{return{}}}async function wr(t){await Y(Ie,JSON.stringify(t,null,2)+`
5018
+ `,{mode:384})}async function yi(){await zc(Ie,{force:!0})}function Ue(t){return(t||kr).replace(/\/+$/,"")}async function ki(t){let e=[],n=await yr();e.push({name:"cli-version",ok:n.version!=="0.0.0-unknown",message:n.version});let r=Number.parseInt(process.versions.node.split(".")[0]??"0",10);e.push({name:"node",ok:r>=20,message:process.version});let a=await Te(t.cwd);e.push({name:"hub-root",ok:!!a,message:a??"No inkly.json found."});let i=await Me();e.push({name:"login",ok:!!i.token,message:i.token?`Configured for ${i.apiBase??"(default API)"}`:"Not logged in."});let o=[],s=null;if(a){let d=await Cn(a);s={healed:d.healed.length,reminted:d.reminted.length,paths:[...d.healed,...d.reminted].map(f=>qt(d.hubRoot,f.configPath))},e.push({name:"demo-ids",ok:!0,message:s.healed===0&&s.reminted===0?"all demos have a valid unique id":`healed ${s.healed}, re-minted ${s.reminted}`});let u=await Pn({cwd:a,silent:!0});o=u.issues,e.push({name:"schema",ok:u.ok,message:`${u.errors} errors, ${u.warnings} warnings`});let p=await V(xi(a,".inkly","cache"));e.push({name:"local-cache",ok:!0,message:p?".inkly/cache exists":".inkly/cache not present yet"});let h=await wn(xi(a,"node_modules","@inkly","runtime","dist","runtime.js"));h!==null&&e.push({name:"runtime-artifact",ok:!0,message:`${h} bytes`})}let c={ok:e.every(d=>d.ok||d.name==="login"),checks:e,validationIssues:o,demoIds:s};if(!t.silent)if(t.json)process.stdout.write(JSON.stringify(c,null,2)+`
5010
5019
  `);else{for(let d of e)process.stdout.write(`${d.ok?"OK":"WARN"} ${d.name}: ${d.message}
5011
5020
  `);if(s&&s.paths.length>0)for(let d of s.paths)process.stdout.write(` fixed id in ${d}
5012
5021
  `);if(o.length>0)for(let d of o)process.stdout.write(`${d.level.toUpperCase()} ${d.file}: ${d.message}
5013
- `)}return c}import{randomBytes as Wc}from"crypto";import{createServer as Vc}from"http";import{spawn as Jc}from"child_process";import{randomUUID as Rc}from"crypto";import{mkdir as $c,readFile as Dc,writeFile as jc}from"fs/promises";import{dirname as Oc,join as Nc}from"path";import{homedir as Lc}from"os";import{PostHog as zc}from"posthog-node";var bi=process.env.NEXT_PUBLIC_POSTHOG_PROJECT_TOKEN??process.env.POSTHOG_PROJECT_TOKEN??"phc_Dmh4w8YFNosi3YHD4Sv7ShHX7ccS8kmtRcm8XSVmB5jT",Uc=process.env.NEXT_PUBLIC_POSTHOG_HOST??process.env.POSTHOG_HOST??"https://us.i.posthog.com",Mc="@inkly-org/cli@0.5.1",yr=Nc(Lc(),".inkly","analytics.json"),Pn=null,In=null,$t=null;function Fc(){return!!bi&&process.env.INKLY_TELEMETRY_DISABLED!=="1"}function yi(){return Fc()?(Pn??=new zc(bi,{host:Uc,flushAt:1,flushInterval:0}),Pn):null}async function xr(){try{let t=await Dc(yr,"utf8");return JSON.parse(t)}catch{return{}}}async function kr(t){await $c(Oc(yr),{recursive:!0}),await jc(yr,JSON.stringify(t,null,2)+`
5014
- `,{encoding:"utf8",mode:384})}async function xi(){return In||(In=(async()=>{let t=await xr();if(typeof t.platformUserId=="string"&&t.platformUserId&&($t=t.platformUserId),typeof t.distinctId=="string"&&t.distinctId)return t.distinctId;let e=`cli_${Rc()}`;return await kr({...t,distinctId:e}),e})(),In)}async function Hc(){let t=await xi();return $t??t}async function wr(t){if(!t||$t===t){t&&($t=t);return}let e=yi();try{let n=await xi(),r=await xr(),a=r.platformUserId!==t;$t=t,a&&(await kr({...r,platformUserId:t}),e?.alias({distinctId:t,alias:n}))}catch{}}async function ki(){$t=null;try{let t=await xr();if(t.platformUserId){let{platformUserId:e,...n}=t;await kr(n)}}catch{}}function Bc(){return{surface:"cli",release:process.env.POSTHOG_RELEASE??Mc,node_version:process.versions.node,platform:process.platform,arch:process.arch,ci:!!process.env.CI}}async function H(t,e={}){let n=yi();if(n)try{n.capture({distinctId:await Hc(),event:t,properties:{...Bc(),...e}})}catch{}}async function vr(){if(Pn)try{await Pn.shutdown(2e3)}catch{}}async function vi(t){let e=Ue(t.local?hi:gr),n=t.token??process.env.INKLY_API_TOKEN;if(n){let i=await _r(e,n).catch(()=>({valid:!1,userId:null}));return await br({apiBase:e,token:n}),await wi("token",i),t.silent||process.stdout.write(`Logged in to ${e}${i.valid?"":" (token saved without online verification)"}
5015
- `),{apiBase:e,configPath:Ae,verified:i.valid,method:"token"}}let r=await Zc({apiBase:e,shouldOpen:t.open!==!1,silent:t.silent});await br({apiBase:r.apiBase,token:r.apiToken});let a=await _r(r.apiBase,r.apiToken).catch(()=>({valid:!1,userId:null}));return await wi("browser",a),t.silent||process.stdout.write(`Logged in to ${r.apiBase}
5016
- `),{apiBase:r.apiBase,configPath:Ae,verified:a.valid,method:"browser"}}async function wi(t,e){e.valid&&e.userId&&await wr(e.userId),await H("inkly_cli_logged_in",{method:t,verified:e.valid})}async function Si(t={}){await H("inkly_cli_logged_out",{}),await ki(),await mi(),t.silent||process.stdout.write(`Removed ${Ae}
5017
- `)}async function _i(t){let e=await ze(),n=e.apiBase?Ue(e.apiBase):null,r=await Ce(t.cwd),a="skipped",i;if(n&&e.token)try{let s=await _r(n,e.token);a=s.valid?"ok":"failed",a==="failed"&&(i="Token was rejected by the platform."),s.valid&&s.userId&&await wr(s.userId)}catch(s){a="failed",i=s.message}let o={configPath:Ae,apiBase:n,loggedIn:!!e.token,hubRoot:r,online:a,message:i};return t.silent||(t.json?process.stdout.write(JSON.stringify(o,null,2)+`
5018
- `):(process.stdout.write(`Config: ${Ae}
5022
+ `)}return c}import{randomBytes as eu}from"crypto";import{createServer as tu}from"http";import{spawn as nu}from"child_process";import{randomUUID as Fc}from"crypto";import{mkdir as Hc,readFile as Bc,writeFile as Wc}from"fs/promises";import{dirname as Vc,join as Jc}from"path";import{homedir as Zc}from"os";import{PostHog as Gc}from"posthog-node";var wi=process.env.NEXT_PUBLIC_POSTHOG_PROJECT_TOKEN??process.env.POSTHOG_PROJECT_TOKEN??"phc_Dmh4w8YFNosi3YHD4Sv7ShHX7ccS8kmtRcm8XSVmB5jT",qc=process.env.NEXT_PUBLIC_POSTHOG_HOST??process.env.POSTHOG_HOST??"https://us.i.posthog.com",Kc="@inkly-org/cli@0.5.1",vr=Jc(Zc(),".inkly","analytics.json"),Rn=null,En=null,Dt=null;function Yc(){return!!wi&&process.env.INKLY_TELEMETRY_DISABLED!=="1"}function vi(){return Yc()?(Rn??=new Gc(wi,{host:qc,flushAt:1,flushInterval:0}),Rn):null}async function Sr(){try{let t=await Bc(vr,"utf8");return JSON.parse(t)}catch{return{}}}async function _r(t){await Hc(Vc(vr),{recursive:!0}),await Wc(vr,JSON.stringify(t,null,2)+`
5023
+ `,{encoding:"utf8",mode:384})}async function Si(){return En||(En=(async()=>{let t=await Sr();if(typeof t.platformUserId=="string"&&t.platformUserId&&(Dt=t.platformUserId),typeof t.distinctId=="string"&&t.distinctId)return t.distinctId;let e=`cli_${Fc()}`;return await _r({...t,distinctId:e}),e})(),En)}async function Xc(){let t=await Si();return Dt??t}async function Cr(t){if(!t||Dt===t){t&&(Dt=t);return}let e=vi();try{let n=await Si(),r=await Sr(),a=r.platformUserId!==t;Dt=t,a&&(await _r({...r,platformUserId:t}),e?.alias({distinctId:t,alias:n}))}catch{}}async function _i(){Dt=null;try{let t=await Sr();if(t.platformUserId){let{platformUserId:e,...n}=t;await _r(n)}}catch{}}function Qc(){return{surface:"cli",release:process.env.POSTHOG_RELEASE??Kc,node_version:process.versions.node,platform:process.platform,arch:process.arch,ci:!!process.env.CI}}async function H(t,e={}){let n=vi();if(n)try{n.capture({distinctId:await Xc(),event:t,properties:{...Qc(),...e}})}catch{}}async function Tr(){if(Rn)try{await Rn.shutdown(2e3)}catch{}}async function Ti(t){let e=Ue(t.local?bi:kr),n=t.token??process.env.INKLY_API_TOKEN;if(n){let i=await Ir(e,n).catch(()=>({valid:!1,userId:null}));return await wr({apiBase:e,token:n}),await Ci("token",i),t.silent||process.stdout.write(`Logged in to ${e}${i.valid?"":" (token saved without online verification)"}
5024
+ `),{apiBase:e,configPath:Ie,verified:i.valid,method:"token"}}let r=await ru({apiBase:e,shouldOpen:t.open!==!1,silent:t.silent});await wr({apiBase:r.apiBase,token:r.apiToken});let a=await Ir(r.apiBase,r.apiToken).catch(()=>({valid:!1,userId:null}));return await Ci("browser",a),t.silent||process.stdout.write(`Logged in to ${r.apiBase}
5025
+ `),{apiBase:r.apiBase,configPath:Ie,verified:a.valid,method:"browser"}}async function Ci(t,e){e.valid&&e.userId&&await Cr(e.userId),await H("inkly_cli_logged_in",{method:t,verified:e.valid})}async function Ai(t={}){await H("inkly_cli_logged_out",{}),await _i(),await yi(),t.silent||process.stdout.write(`Removed ${Ie}
5026
+ `)}async function Ii(t){let e=await Me(),n=e.apiBase?Ue(e.apiBase):null,r=await Te(t.cwd),a="skipped",i;if(n&&e.token)try{let s=await Ir(n,e.token);a=s.valid?"ok":"failed",a==="failed"&&(i="Token was rejected by the platform."),s.valid&&s.userId&&await Cr(s.userId)}catch(s){a="failed",i=s.message}let o={configPath:Ie,apiBase:n,loggedIn:!!e.token,hubRoot:r,online:a,message:i};return t.silent||(t.json?process.stdout.write(JSON.stringify(o,null,2)+`
5027
+ `):(process.stdout.write(`Config: ${Ie}
5019
5028
  `),process.stdout.write(`Hub: ${r??"(not inside a hub)"}
5020
5029
  `),process.stdout.write(`API: ${n??"(not configured)"}
5021
5030
  `),process.stdout.write(`Login: ${o.loggedIn?"configured":"not configured"}
5022
5031
  `),process.stdout.write(`Online: ${a}${i?` (${i})`:""}
5023
- `))),o}async function _r(t,e){let n=await fetch(`${t}/api/captures/verify`,{method:"GET",headers:{authorization:`Bearer ${e}`}});if(!n.ok)return{valid:!1,userId:null};let r=null;try{let a=await n.json();typeof a.userId=="string"&&a.userId&&(r=a.userId)}catch{}return{valid:!0,userId:r}}async function Zc(t){let e=Wc(16).toString("hex"),n=Vc(),r=await Gc(n),a=new URL("/cli/login",t.apiBase);a.searchParams.set("callback",r.url),a.searchParams.set("state",e);let i=qc({server:n,state:e,apiBase:t.apiBase,timeoutMs:120*1e3});return t.silent||process.stdout.write(`Opening browser for Inkly login:
5032
+ `))),o}async function Ir(t,e){let n=await fetch(`${t}/api/captures/verify`,{method:"GET",headers:{authorization:`Bearer ${e}`}});if(!n.ok)return{valid:!1,userId:null};let r=null;try{let a=await n.json();typeof a.userId=="string"&&a.userId&&(r=a.userId)}catch{}return{valid:!0,userId:r}}async function ru(t){let e=eu(16).toString("hex"),n=tu(),r=await au(n),a=new URL("/cli/login",t.apiBase);a.searchParams.set("callback",r.url),a.searchParams.set("state",e);let i=iu({server:n,state:e,apiBase:t.apiBase,timeoutMs:120*1e3});return t.silent||process.stdout.write(`Opening browser for Inkly login:
5024
5033
  ${a.toString()}
5025
- `),t.shouldOpen&&Yc(a.toString()),i}async function Gc(t){await new Promise((n,r)=>{t.once("error",r),t.listen(0,"127.0.0.1",()=>n())});let e=t.address();if(!e||typeof e=="string")throw new Error("Could not start local login callback server.");return{url:`http://127.0.0.1:${e.port}/callback`}}async function qc(t){return new Promise((e,n)=>{let r=setTimeout(()=>{Sr(t.server),n(new Error("Timed out waiting for browser login."))},t.timeoutMs);t.server.on("request",(a,i)=>{(async()=>{try{let o=new URL(a.url??"/","http://127.0.0.1");if(o.pathname!=="/callback"){En(i,404,"Not found.");return}let s=o.searchParams.get("state"),c=o.searchParams.get("pairingToken");if(!c||s!==t.state){En(i,400,"Invalid Inkly CLI login callback. You can close this tab.");return}let d=await Kc(t.apiBase,c);clearTimeout(r),En(i,200,"Inkly CLI is connected. You can close this tab."),Sr(t.server),e(d)}catch(o){clearTimeout(r),En(i,500,`Inkly CLI login failed: ${o.message}`),Sr(t.server),n(o)}})()})})}async function Kc(t,e){let n=await fetch(`${t}/api/cli/exchange`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({pairingToken:e})}),r=await n.json().catch(()=>null);if(!n.ok||!r?.apiToken)throw new Error(r?.error??`Login exchange failed: HTTP ${n.status}`);return{apiToken:r.apiToken,apiBase:Ue(r.apiBase??t)}}function Yc(t){let e=process.platform,a=Jc(e==="darwin"?"open":e==="win32"?"cmd":"xdg-open",e==="win32"?["/c","start","",t]:[t],{stdio:"ignore",detached:!0});a.on("error",()=>{}),a.unref()}function En(t,e,n){t.statusCode=e,t.setHeader("content-type","text/html; charset=utf-8"),t.end(`<!doctype html><meta charset="utf-8"><title>Inkly CLI</title><body style="font-family: system-ui, sans-serif; padding: 32px;">${Xc(n)}</body>`)}function Sr(t){try{t.close()}catch{}}function Xc(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}import{readFile as Ai,readdir as Ii,writeFile as Qc}from"fs/promises";import{join as en,extname as Pi}from"path";async function $n(t){let e=await ze(),n=await It(t.cwd),r=t.demo?n.demos.filter(p=>p.slug===t.demo):n.demos;if(t.demo&&r.length===0)throw new Error(`No such demo: ${t.demo}`);let a=[],i=[];for(let p of r)for(let h of p.assets?.assets??[]){let y=await nu(n.root,h.sha256),k=ru(h);if(!y&&!k){i.push({demo:p.slug,id:h.id,sha256:h.sha256});continue}if(!y||k)continue;let v=await wn(en(n.root,".inkly","cache",y));a.push({demo:p.slug,id:h.id,sha256:h.sha256,cacheFile:y,contentType:h.contentType??Rn(y,h.kind),size:h.size??v??0,alreadyRemote:k})}let o={hubRoot:n.root,dryRun:!!t.dryRun,assets:a,unresolved:i,uploaded:0,updatedManifests:[]};if(t.dryRun||a.length===0)return t.silent||Ci(o,t.json),o;if(!e.token)throw new Error("Not logged in. Run `inkly login --token <token>` first.");let s=Ue(e.apiBase??process.env.INKLY_API_BASE),c=await Cr({apiBase:s,token:e.token,hubRoot:n.root,assets:a}),d=c.uploads,u=new Map(d.map(p=>[p.sha256,p]));for(let p of r){if(!p.assets)continue;let h=!1,y=p.assets.assets.map(v=>{let C=u.get(v.sha256);return C?(h=!0,{...v,contentType:v.contentType??Rn(`${v.sha256}${C.ext}`,v.kind),publicUrl:C.publicUrl,cdnPath:C.cdnPath}):v});if(!h)continue;let k={...p.assets,assets:y};await K(p.assetsPath,JSON.stringify(k,null,2)+`
5026
- `),await au(p.dir,d),o.updatedManifests.push(`demos/${p.slug}/assets.json`)}return o.uploaded=c.uploaded,t.silent||Ci(o,t.json),o}async function Cr(t){let e=await tu(t.apiBase,t.token,t.assets),n=new Map(e.uploads.map(i=>[i.sha256,i])),r=0;for(let i of t.assets){let o=n.get(i.sha256);if(!o)throw new Error(`Platform did not return upload metadata for ${i.sha256}.`);if(o.uploadUrl){let s=await Ai(en(t.hubRoot,".inkly","cache",i.cacheFile)),c=await fetch(o.uploadUrl,{method:"PUT",headers:o.uploadHeaders??{"content-type":i.contentType},body:s});if(!c.ok)throw new Error(`Asset upload failed for ${i.id}: HTTP ${c.status}`);r+=1}}return{uploads:(await eu(t.apiBase,t.token,t.assets,e.uploads)).uploads,uploaded:r}}async function eu(t,e,n,r){let a=new Map(r.map(s=>[s.sha256,s])),i=await fetch(`${t}/api/cli/sync-assets/complete`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${e}`},body:JSON.stringify({assets:n.map(s=>{let c=a.get(s.sha256);if(!c)throw new Error(`Platform did not return upload metadata for ${s.sha256}.`);return{sha256:s.sha256,ext:c.ext,contentType:s.contentType,size:s.size,cdnPath:c.cdnPath}})})}),o=await i.json().catch(()=>null);if(!i.ok||!o||!Array.isArray(o.uploads))throw new Error(o?.error??`Sync completion failed: HTTP ${i.status}`);return{uploads:o.uploads}}async function tu(t,e,n){let r=await fetch(`${t}/api/cli/sync-assets`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${e}`},body:JSON.stringify({assets:n.map(i=>({sha256:i.sha256,ext:Pi(i.cacheFile)||Tr(i.contentType),contentType:i.contentType,size:i.size}))})}),a=await r.json().catch(()=>null);if(!r.ok||!a||!Array.isArray(a.uploads))throw new Error(a?.error??`Sync endpoint failed: HTTP ${r.status}`);return{uploads:a.uploads}}async function nu(t,e){let n=en(t,".inkly","cache");return await V(n)?(await Ii(n)).find(a=>a.startsWith(`${e}.`))??null:null}function ru(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.publicUrl=="string"&&typeof e.cdnPath=="string"}function Rn(t,e){let n=Pi(t).toLowerCase();return n===".png"?"image/png":n===".jpg"||n===".jpeg"?"image/jpeg":n===".webp"?"image/webp":n===".gif"?"image/gif":n===".svg"?"image/svg+xml":n===".webm"?"video/webm":n===".mp4"?"video/mp4":n===".mp3"?"audio/mpeg":n===".wav"?"audio/wav":e==="font"?"font/woff2":"application/octet-stream"}function Tr(t){let e=t.toLowerCase().split(";")[0]?.trim();return e==="image/png"?".png":e==="image/jpeg"?".jpg":e==="image/webp"?".webp":e==="image/gif"?".gif":e==="image/svg+xml"?".svg":e==="video/webm"?".webm":e==="video/mp4"?".mp4":e==="audio/mpeg"?".mp3":e==="audio/wav"?".wav":e==="font/woff2"?".woff2":".bin"}async function au(t,e){let n=en(t,"snapshots");if(!await V(n))return;let r=e.map(a=>({local:`/__inkly/cache/${`${a.sha256}${a.ext}`}`,remote:a.publicUrl}));await Ei(n,r)}async function Ei(t,e){for(let n of await Ii(t,{withFileTypes:!0})){let r=en(t,n.name);if(n.isDirectory())await Ei(r,e);else if(n.isFile()&&/\.(html|css)$/i.test(n.name)){let a=await Ai(r,"utf8"),i=a;for(let o of e)a=a.split(o.local).join(o.remote);a!==i&&await Qc(r,a,"utf8")}}}function Ci(t,e){if(e){process.stdout.write(JSON.stringify(t,null,2)+`
5034
+ `),t.shouldOpen&&su(a.toString()),i}async function au(t){await new Promise((n,r)=>{t.once("error",r),t.listen(0,"127.0.0.1",()=>n())});let e=t.address();if(!e||typeof e=="string")throw new Error("Could not start local login callback server.");return{url:`http://127.0.0.1:${e.port}/callback`}}async function iu(t){return new Promise((e,n)=>{let r=setTimeout(()=>{Ar(t.server),n(new Error("Timed out waiting for browser login."))},t.timeoutMs);t.server.on("request",(a,i)=>{(async()=>{try{let o=new URL(a.url??"/","http://127.0.0.1");if(o.pathname!=="/callback"){$n(i,404,"Not found.");return}let s=o.searchParams.get("state"),c=o.searchParams.get("pairingToken");if(!c||s!==t.state){$n(i,400,"Invalid Inkly CLI login callback. You can close this tab.");return}let d=await ou(t.apiBase,c);clearTimeout(r),$n(i,200,"Inkly CLI is connected. You can close this tab."),Ar(t.server),e(d)}catch(o){clearTimeout(r),$n(i,500,`Inkly CLI login failed: ${o.message}`),Ar(t.server),n(o)}})()})})}async function ou(t,e){let n=await fetch(`${t}/api/cli/exchange`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({pairingToken:e})}),r=await n.json().catch(()=>null);if(!n.ok||!r?.apiToken)throw new Error(r?.error??`Login exchange failed: HTTP ${n.status}`);return{apiToken:r.apiToken,apiBase:Ue(r.apiBase??t)}}function su(t){let e=process.platform,a=nu(e==="darwin"?"open":e==="win32"?"cmd":"xdg-open",e==="win32"?["/c","start","",t]:[t],{stdio:"ignore",detached:!0});a.on("error",()=>{}),a.unref()}function $n(t,e,n){t.statusCode=e,t.setHeader("content-type","text/html; charset=utf-8"),t.end(`<!doctype html><meta charset="utf-8"><title>Inkly CLI</title><body style="font-family: system-ui, sans-serif; padding: 32px;">${lu(n)}</body>`)}function Ar(t){try{t.close()}catch{}}function lu(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}import{readFile as Ri,readdir as $i,writeFile as du}from"fs/promises";import{join as en,extname as Di}from"path";async function jn(t){let e=await Me(),n=await It(t.cwd),r=t.demo?n.demos.filter(p=>p.slug===t.demo):n.demos;if(t.demo&&r.length===0)throw new Error(`No such demo: ${t.demo}`);let a=[],i=[];for(let p of r)for(let h of p.assets?.assets??[]){let f=await pu(n.root,h.sha256),w=hu(h);if(!f&&!w){i.push({demo:p.slug,id:h.id,sha256:h.sha256});continue}if(!f||w)continue;let k=await wn(en(n.root,".inkly","cache",f));a.push({demo:p.slug,id:h.id,sha256:h.sha256,cacheFile:f,contentType:h.contentType??Dn(f,h.kind),size:h.size??k??0,alreadyRemote:w})}let o={hubRoot:n.root,dryRun:!!t.dryRun,assets:a,unresolved:i,uploaded:0,updatedManifests:[]};if(t.dryRun||a.length===0)return t.silent||Pi(o,t.json),o;if(!e.token)throw new Error("Not logged in. Run `inkly login --token <token>` first.");let s=Ue(e.apiBase??process.env.INKLY_API_BASE),c=await Pr({apiBase:s,token:e.token,hubRoot:n.root,assets:a}),d=c.uploads,u=new Map(d.map(p=>[p.sha256,p]));for(let p of r){if(!p.assets)continue;let h=!1,f=p.assets.assets.map(k=>{let C=u.get(k.sha256);return C?(h=!0,{...k,contentType:k.contentType??Dn(`${k.sha256}${C.ext}`,k.kind),publicUrl:C.publicUrl,cdnPath:C.cdnPath}):k});if(!h)continue;let w={...p.assets,assets:f};await Y(p.assetsPath,JSON.stringify(w,null,2)+`
5035
+ `),await mu(p.dir,d),o.updatedManifests.push(`demos/${p.slug}/assets.json`)}return o.uploaded=c.uploaded,t.silent||Pi(o,t.json),o}async function Pr(t){let e=await uu(t.apiBase,t.token,t.assets),n=new Map(e.uploads.map(i=>[i.sha256,i])),r=0;for(let i of t.assets){let o=n.get(i.sha256);if(!o)throw new Error(`Platform did not return upload metadata for ${i.sha256}.`);if(o.uploadUrl){let s=await Ri(en(t.hubRoot,".inkly","cache",i.cacheFile)),c=await fetch(o.uploadUrl,{method:"PUT",headers:o.uploadHeaders??{"content-type":i.contentType},body:s});if(!c.ok)throw new Error(`Asset upload failed for ${i.id}: HTTP ${c.status}`);r+=1}}return{uploads:(await cu(t.apiBase,t.token,t.assets,e.uploads)).uploads,uploaded:r}}async function cu(t,e,n,r){let a=new Map(r.map(s=>[s.sha256,s])),i=await fetch(`${t}/api/cli/sync-assets/complete`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${e}`},body:JSON.stringify({assets:n.map(s=>{let c=a.get(s.sha256);if(!c)throw new Error(`Platform did not return upload metadata for ${s.sha256}.`);return{sha256:s.sha256,ext:c.ext,contentType:s.contentType,size:s.size,cdnPath:c.cdnPath}})})}),o=await i.json().catch(()=>null);if(!i.ok||!o||!Array.isArray(o.uploads))throw new Error(o?.error??`Sync completion failed: HTTP ${i.status}`);return{uploads:o.uploads}}async function uu(t,e,n){let r=await fetch(`${t}/api/cli/sync-assets`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${e}`},body:JSON.stringify({assets:n.map(i=>({sha256:i.sha256,ext:Di(i.cacheFile)||Er(i.contentType),contentType:i.contentType,size:i.size}))})}),a=await r.json().catch(()=>null);if(!r.ok||!a||!Array.isArray(a.uploads))throw new Error(a?.error??`Sync endpoint failed: HTTP ${r.status}`);return{uploads:a.uploads}}async function pu(t,e){let n=en(t,".inkly","cache");return await V(n)?(await $i(n)).find(a=>a.startsWith(`${e}.`))??null:null}function hu(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.publicUrl=="string"&&typeof e.cdnPath=="string"}function Dn(t,e){let n=Di(t).toLowerCase();return n===".png"?"image/png":n===".jpg"||n===".jpeg"?"image/jpeg":n===".webp"?"image/webp":n===".gif"?"image/gif":n===".svg"?"image/svg+xml":n===".webm"?"video/webm":n===".mp4"?"video/mp4":n===".mp3"?"audio/mpeg":n===".wav"?"audio/wav":e==="font"?"font/woff2":"application/octet-stream"}function Er(t){let e=t.toLowerCase().split(";")[0]?.trim();return e==="image/png"?".png":e==="image/jpeg"?".jpg":e==="image/webp"?".webp":e==="image/gif"?".gif":e==="image/svg+xml"?".svg":e==="video/webm"?".webm":e==="video/mp4"?".mp4":e==="audio/mpeg"?".mp3":e==="audio/wav"?".wav":e==="font/woff2"?".woff2":".bin"}async function mu(t,e){let n=en(t,"snapshots");if(!await V(n))return;let r=e.map(a=>({local:`/__inkly/cache/${`${a.sha256}${a.ext}`}`,remote:a.publicUrl}));await ji(n,r)}async function ji(t,e){for(let n of await $i(t,{withFileTypes:!0})){let r=en(t,n.name);if(n.isDirectory())await ji(r,e);else if(n.isFile()&&/\.(html|css)$/i.test(n.name)){let a=await Ri(r,"utf8"),i=a;for(let o of e)a=a.split(o.local).join(o.remote);a!==i&&await du(r,a,"utf8")}}}function Pi(t,e){if(e){process.stdout.write(JSON.stringify(t,null,2)+`
5027
5036
  `);return}if(t.dryRun){process.stdout.write(`inkly sync dry run: ${t.assets.length} asset(s) need upload
5028
- `),Ti(t);return}process.stdout.write(`inkly sync complete: ${t.uploaded} uploaded, ${t.updatedManifests.length} manifest(s) updated
5029
- `),Ti(t)}function Ti(t){if(t.unresolved.length!==0){process.stderr.write(`inkly sync warning: ${t.unresolved.length} asset(s) have no local cache file and are not on the CDN:
5037
+ `),Ei(t);return}process.stdout.write(`inkly sync complete: ${t.uploaded} uploaded, ${t.updatedManifests.length} manifest(s) updated
5038
+ `),Ei(t)}function Ei(t){if(t.unresolved.length!==0){process.stderr.write(`inkly sync warning: ${t.unresolved.length} asset(s) have no local cache file and are not on the CDN:
5030
5039
  `);for(let e of t.unresolved)process.stderr.write(` - demos/${e.demo} "${e.id}" (${e.sha256})
5031
- `)}}import{readdir as iu,readFile as ou}from"fs/promises";import{extname as Ir,join as Ri,resolve as $i}from"path";function Ar(t,e){t||process.stdout.write(e)}function su(t,e){if(e.demo){let n=t.demos.find(r=>r.slug===e.demo);if(!n)throw new Error(`No such demo: ${e.demo}`);return n}if(e.path){let n=$i(e.cwd,e.path),r=t.demos.find(i=>$i(i.dir)===n);if(r)return r;let a=t.demos.find(i=>i.slug===e.path||i.slug===e.path?.replace(/^demos\//,""));if(a)return a;throw new Error(`No demo found at "${e.path}". Available demos: ${t.demos.map(i=>i.slug).join(", ")||"(none)"}`)}if(t.demos.length===1)return t.demos[0];throw new Error(`This hub has ${t.demos.length} demos \u2014 pass a demo path or --demo <slug>. Available: ${t.demos.map(n=>n.slug).join(", ")}`)}async function lu(t,e=[]){let n=Ri(t,"snapshots");if(!await V(n))return{};let r={};async function a(i){for(let o of await iu(i,{withFileTypes:!0})){let s=Ri(i,o.name);if(o.isDirectory())await a(s);else if(o.isFile()&&/\.(html|css)$/i.test(o.name)){let c=s.slice(t.length+1).split(/[\\/]/).join("/");r[c]=du(await ou(s,"utf8"),e)}}}return await a(n),r}function du(t,e){let n=t;for(let r of e)n=n.split(r.local).join(r.remote);return n}function Di(t){if(!t)return null;try{let e=new URL(t);return Ir(e.pathname)||null}catch{return Ir(t)||null}}function cu(t,e,n){let r=new Map,a=(o,s)=>{if(!s)return;let c=s.startsWith(".")?s:`.${s}`;r.has(o)||r.set(o,new Set),r.get(o).add(c)};for(let o of e)a(o.sha256,Ir(o.cacheFile));for(let o of n)a(o.sha256,o.ext);for(let o of t.assets)a(o.sha256,Di(o.cdnPath)),a(o.sha256,Di(o.publicUrl)),o.contentType&&a(o.sha256,Tr(o.contentType));let i=[];for(let o of t.assets)if(o.publicUrl)for(let s of r.get(o.sha256)??[])i.push({local:`/__inkly/cache/${o.sha256}${s}`,remote:o.publicUrl});return i}function uu(t,e,n){let r=t??{version:1,assets:[]},a=new Map(n.map(o=>[o.sha256,o])),i=new Map(e.map(o=>[o.sha256,o]));return{...r,assets:r.assets.map(o=>{let s=a.get(o.sha256);if(!s)return o;let c=i.get(o.sha256);return{...o,contentType:o.contentType??c?.contentType??Rn(`${o.sha256}${s.ext}`,o.kind),publicUrl:s.publicUrl,cdnPath:s.cdnPath}})}}async function ji(t){let e=await ze();if(!e.token)throw new Error("Not logged in. Run `inkly login` first.");let n=Ue(e.apiBase??process.env.INKLY_API_BASE),r=await It(t.cwd),a=su(r,t),i=await $n({cwd:r.root,demo:a.slug,dryRun:!0,silent:!0});if(i.unresolved.length>0)throw new Error(`${i.unresolved.length} asset(s) have no local bytes and are not on the CDN, so a hosted preview cannot be published:
5032
- `+i.unresolved.map(y=>` - ${y.id} (${y.sha256})`).join(`
5033
- `));let o=[];i.assets.length>0&&(Ar(t.silent,`Uploading ${i.assets.length} asset(s) to the CDN for this snapshot...
5034
- `),o=(await Cr({apiBase:n,token:e.token,hubRoot:r.root,assets:i.assets})).uploads);let s=uu(a.assets,i.assets,o),c=await lu(a.dir,cu(s,i.assets,o)),d=await fetch(`${n}/api/previews`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${e.token}`},body:JSON.stringify({demoSlug:a.slug,title:a.config.title??null,config:a.config,assets:s,hub:r.inkly,snapshots:c})}),u=await d.json().catch(()=>null);if(!d.ok||!u?.id)throw new Error(u?.error??`Snapshot publish failed: HTTP ${d.status}`);let p=u.url??`${n}${u.path??`/p/${u.id}`}`,h={hubRoot:r.root,slug:a.slug,id:u.id,url:p};return t.json?Ar(t.silent,JSON.stringify(h,null,2)+`
5035
- `):Ar(t.silent,`Snapshot published:
5040
+ `)}}import{readdir as fu,readFile as gu}from"fs/promises";import{extname as $r,join as Oi,resolve as Ni}from"path";function Rr(t,e){t||process.stdout.write(e)}function bu(t,e){if(e.demo){let n=t.demos.find(r=>r.slug===e.demo);if(!n)throw new Error(`No such demo: ${e.demo}`);return n}if(e.path){let n=Ni(e.cwd,e.path),r=t.demos.find(i=>Ni(i.dir)===n);if(r)return r;let a=t.demos.find(i=>i.slug===e.path||i.slug===e.path?.replace(/^demos\//,""));if(a)return a;throw new Error(`No demo found at "${e.path}". Available demos: ${t.demos.map(i=>i.slug).join(", ")||"(none)"}`)}if(t.demos.length===1)return t.demos[0];throw new Error(`This hub has ${t.demos.length} demos \u2014 pass a demo path or --demo <slug>. Available: ${t.demos.map(n=>n.slug).join(", ")}`)}async function yu(t,e=[]){let n=Oi(t,"snapshots");if(!await V(n))return{};let r={};async function a(i){for(let o of await fu(i,{withFileTypes:!0})){let s=Oi(i,o.name);if(o.isDirectory())await a(s);else if(o.isFile()&&/\.(html|css)$/i.test(o.name)){let c=s.slice(t.length+1).split(/[\\/]/).join("/");r[c]=xu(await gu(s,"utf8"),e)}}}return await a(n),r}function xu(t,e){let n=t;for(let r of e)n=n.split(r.local).join(r.remote);return n}function Li(t){if(!t)return null;try{let e=new URL(t);return $r(e.pathname)||null}catch{return $r(t)||null}}function ku(t,e,n){let r=new Map,a=(o,s)=>{if(!s)return;let c=s.startsWith(".")?s:`.${s}`;r.has(o)||r.set(o,new Set),r.get(o).add(c)};for(let o of e)a(o.sha256,$r(o.cacheFile));for(let o of n)a(o.sha256,o.ext);for(let o of t.assets)a(o.sha256,Li(o.cdnPath)),a(o.sha256,Li(o.publicUrl)),o.contentType&&a(o.sha256,Er(o.contentType));let i=[];for(let o of t.assets)if(o.publicUrl)for(let s of r.get(o.sha256)??[])i.push({local:`/__inkly/cache/${o.sha256}${s}`,remote:o.publicUrl});return i}function wu(t,e,n){let r=t??{version:1,assets:[]},a=new Map(n.map(o=>[o.sha256,o])),i=new Map(e.map(o=>[o.sha256,o]));return{...r,assets:r.assets.map(o=>{let s=a.get(o.sha256);if(!s)return o;let c=i.get(o.sha256);return{...o,contentType:o.contentType??c?.contentType??Dn(`${o.sha256}${s.ext}`,o.kind),publicUrl:s.publicUrl,cdnPath:s.cdnPath}})}}async function zi(t){let e=await Me();if(!e.token)throw new Error("Not logged in. Run `inkly login` first.");let n=Ue(e.apiBase??process.env.INKLY_API_BASE),r=await It(t.cwd),a=bu(r,t),i=await jn({cwd:r.root,demo:a.slug,dryRun:!0,silent:!0});if(i.unresolved.length>0)throw new Error(`${i.unresolved.length} asset(s) have no local bytes and are not on the CDN, so a hosted preview cannot be published:
5041
+ `+i.unresolved.map(f=>` - ${f.id} (${f.sha256})`).join(`
5042
+ `));let o=[];i.assets.length>0&&(Rr(t.silent,`Uploading ${i.assets.length} asset(s) to the CDN for this snapshot...
5043
+ `),o=(await Pr({apiBase:n,token:e.token,hubRoot:r.root,assets:i.assets})).uploads);let s=wu(a.assets,i.assets,o),c=await yu(a.dir,ku(s,i.assets,o)),d=await fetch(`${n}/api/previews`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${e.token}`},body:JSON.stringify({demoSlug:a.slug,title:a.config.title??null,config:a.config,assets:s,hub:r.inkly,snapshots:c})}),u=await d.json().catch(()=>null);if(!d.ok||!u?.id)throw new Error(u?.error??`Snapshot publish failed: HTTP ${d.status}`);let p=u.url??`${n}${u.path??`/p/${u.id}`}`,h={hubRoot:r.root,slug:a.slug,id:u.id,url:p};return t.json?Rr(t.silent,JSON.stringify(h,null,2)+`
5044
+ `):Rr(t.silent,`Snapshot published:
5036
5045
  ${p}
5037
- `),h}import{readFile as Li,writeFile as pu}from"fs/promises";import{dirname as Pr,isAbsolute as hu,join as Dt,resolve as mu}from"path";import{fileURLToPath as fu,pathToFileURL as gu}from"url";function Me(t,e,n){t.push({level:e,message:n})}async function bu(){let t=Pr(fu(import.meta.url));for(let e=0;e<10;e+=1){let n=Dt(t,"node_modules","@inkly","runtime","dist","manifest.json");if(await V(n))return n;let r=Dt(t,"packages","inkly-runtime","dist","manifest.json");if(await V(r))return r;let a=Pr(t);if(a===t)break;t=a}return null}async function Oi(t){let e=JSON.parse(await Li(t,"utf8")),n=Tt.safeParse(e);if(!n.success)throw new Error(`${t} failed RuntimeManifestSchema validation: ${n.error.message}`);return n.data}async function yu(t,e){let n=ct(),r=sr(t,"manifest.json",n);try{let a=await e(r);if(!a.ok)return null;let i=JSON.parse(await a.text()),o=Tt.safeParse(i);return o.success?{manifest:o.data,url:r}:null}catch{return null}}async function xu(t,e){if(e.manifestPath)return{manifest:await Oi(e.manifestPath),source:"local",manifestPath:e.manifestPath};if(!e.localOnly){let r=e.fetchImpl??fetch,a=await yu(t,r);if(a){if(a.manifest.version!==t)throw new Error(`CDN manifest at ${a.url} reports version ${a.manifest.version} but inkly.json pins ${t}. Wait for the publish workflow to upload the matching artifact, or update inkly.json#runtime to match.`);return{manifest:a.manifest,source:"cdn"}}}let n=await bu();if(!n)throw new Error(`Could not fetch runtime manifest for ${t} from ${ct()} and no local @inkly/runtime/dist/manifest.json was found. Either publish the runtime to R2, run \`npm run build:runtime\` in @inkly/runtime, or pass \`inkly lock --local <path-to-inkly-runtime>\`.`);return{manifest:await Oi(n),source:"local",manifestPath:n}}async function Ni(t,e={}){let n=Dt(t,"inkly.json"),r=await _e(n),a=typeof r.runtime=="string"?r.runtime:null;if(!a)throw new Error('inkly.json is missing a string "runtime" pin.');if(!/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(a))throw new Error(`inkly.json#runtime must be an exact semver (got "${a}"). Set runtime to an exact version and put your compatibility range in runtimeRange.`);let{manifest:i,source:o,manifestPath:s}=await xu(a,e);if(i.version!==a)throw new Error(`Runtime manifest reports version ${i.version} but inkly.json pins ${a}. Build the matching Inkly runtime version (or upgrade the pin) and retry.`);return{lock:{$schema:"https://inklyai.dev/inkly.lock",runtime:{version:i.version,url:o==="local"&&s?gu(Dt(Pr(s),"runtime.js")).toString():sr(i.version,"runtime.js"),integrity:i.integrity}},manifest:i,source:o}}async function zi(t){let e=[],n=await Ce(t.cwd);if(!n)return Me(e,"error",`No inkly.json found in ${t.cwd} or any parent directory.`),ge({ok:!1,hubRoot:null,lockPath:null,lock:null,source:null,issues:e,drifted:!1,options:t});let r=Dt(n,"inkly.lock"),a=t.manifestPath?hu(t.manifestPath)?t.manifestPath:mu(t.cwd,t.manifestPath):void 0;if(t.check){if(!await V(r))return Me(e,"error","inkly.lock is missing. Run `inkly lock` to create it."),ge({ok:!1,hubRoot:n,lockPath:r,lock:null,source:null,issues:e,drifted:!0,options:t});let i=await _e(r),o=kn.safeParse(i);if(!o.success)return Me(e,"error",`inkly.lock failed schema validation: ${o.error.message}`),ge({ok:!1,hubRoot:n,lockPath:r,lock:null,source:null,issues:e,drifted:!0,options:t});let s=Dt(n,"inkly.json"),c=await _e(s),d=typeof c.runtime=="string"?c.runtime:null;if(!d)return Me(e,"error",'inkly.json is missing a string "runtime" pin.'),ge({ok:!1,hubRoot:n,lockPath:r,lock:null,source:null,issues:e,drifted:!0,options:t});if(o.data.runtime.version!==d)return Me(e,"error",`inkly.lock pins runtime ${o.data.runtime.version}, but inkly.json pins ${d}. Re-run \`inkly lock\` to refresh.`),ge({ok:!1,hubRoot:n,lockPath:r,lock:o.data,source:null,issues:e,drifted:!0,options:t});try{let u=await Ni(n,{manifestPath:a,localOnly:!!a||t.localOnly,fetchImpl:t.fetchImpl});return u.lock.runtime.integrity!==o.data.runtime.integrity?(Me(e,"error",`inkly.lock integrity does not match what ${u.source==="cdn"?ct():"the local build"} serves for runtime ${d}. Re-run \`inkly lock\` to refresh, or someone tampered with the source.`),ge({ok:!1,hubRoot:n,lockPath:r,lock:o.data,source:u.source,issues:e,drifted:!0,options:t})):ge({ok:!0,hubRoot:n,lockPath:r,lock:o.data,source:u.source,issues:e,drifted:!1,options:t})}catch(u){return Me(e,"error",u.message),ge({ok:!1,hubRoot:n,lockPath:r,lock:o.data,source:null,issues:e,drifted:!0,options:t})}}try{let{lock:i,source:o}=await Ni(n,{manifestPath:a,localOnly:!!a||t.localOnly,fetchImpl:t.fetchImpl}),s=JSON.stringify(i,null,2)+`
5038
- `,d=(await V(r)?await Li(r,"utf8"):null)!==s;return d&&await pu(r,s,"utf8"),ge({ok:!0,hubRoot:n,lockPath:r,lock:i,source:o,issues:e,drifted:d,options:t})}catch(i){return Me(e,"error",i.message),ge({ok:!1,hubRoot:n,lockPath:r,lock:null,source:null,issues:e,drifted:!1,options:t})}}function ge(t){let{ok:e,hubRoot:n,lockPath:r,lock:a,source:i,issues:o,drifted:s,options:c}=t,d={ok:e,hubRoot:n,lockPath:r,lock:a,source:i,issues:o,drifted:s};if(!c.silent)if(c.json)process.stdout.write(JSON.stringify(d,null,2)+`
5039
- `);else if(e)c.check?process.stdout.write(`inkly lock --check: inkly.lock matches inkly.json (runtime ${a?.runtime.version}, source: ${i??"unknown"}).
5040
- `):s?process.stdout.write(`inkly lock: wrote ${r} (runtime ${a?.runtime.version}, source: ${i??"unknown"}).
5041
- `):process.stdout.write(`inkly lock: ${r} already up to date (runtime ${a?.runtime.version}, source: ${i??"unknown"}).
5042
- `);else{for(let u of o)process.stdout.write(`${u.level.toUpperCase()} ${u.message}
5043
- `);process.stdout.write(`inkly lock failed
5044
- `)}return d}import*as ht from"@sentry/node";var ku="https://b3450c6a8fdcd02b8aee3b9f2c8425eb@o4511498910433280.ingest.us.sentry.io/4511498940252160",wu="@inkly-org/cli@0.5.1";function Ui(){ht.init({dsn:ku,release:process.env.SENTRY_RELEASE??wu,environment:process.env.SENTRY_ENVIRONMENT??"production",enabled:process.env.INKLY_SENTRY_DISABLED!=="1",sendDefaultPii:!1,tracesSampleRate:0,beforeSend(t){return t.server_name=void 0,t}})}async function re(t,e){ht.captureException(e,{tags:{command:t,surface:"cli"}}),await ht.flush(2e3)}async function Mi(){await ht.flush(2e3)}import{spawn as Qi}from"child_process";import{createHash as lp,randomUUID as dp}from"crypto";import{mkdir as Nt,mkdtemp as cp,open as eo,readFile as Pe,readdir as to,rm as Fe,writeFile as no}from"fs/promises";import{existsSync as Ie}from"fs";import{dirname as Ln,isAbsolute as ro,join as B,resolve as On,sep as up}from"path";import{tmpdir as pp,homedir as Mr}from"os";import{fileURLToPath as ao}from"url";import{unzipSync as hp,zipSync as mp}from"fflate";import fp from"ws";import gp from"sharp";import bp from"subset-font";var vu=new Set(["area","base","br","col","embed","hr","img","input","link","meta","source","track","wbr"]),Su=new Set(["a","button","input","select","textarea","label","p","h1","h2","h3","h4","h5","h6","img","li","nav","main","header","footer","section","article","aside","form","table","tr","td","th","ul","ol"]);function _u(t){let e="";for(let n=0;n<t.length;n+=1)e+=(t[n]??0).toString(16).padStart(2,"0");return e}async function Dn(t,e=16){let n=new Uint8Array(t.byteLength);n.set(t);let r=await crypto.subtle.digest("SHA-256",n);return _u(new Uint8Array(r)).slice(0,e)}function jr(t){switch((t.toLowerCase().split(";")[0]??"").trim()){case"image/png":return".png";case"image/jpeg":case"image/jpg":return".jpg";case"image/webp":return".webp";case"image/gif":return".gif";case"image/svg+xml":return".svg";case"image/avif":return".avif";case"image/x-icon":case"image/vnd.microsoft.icon":return".ico";case"font/woff2":return".woff2";case"font/woff":return".woff";case"text/css":return".css";case"text/javascript":case"application/javascript":return".js";default:return".bin"}}function Er(t,e){let n=t.trim();if(!n||n.startsWith("data:")||n.startsWith("blob:")||n.startsWith("assets/")||n.startsWith("#"))return null;try{let r=new URL(n,e);return r.protocol!=="http:"&&r.protocol!=="https:"?null:r.href}catch{return null}}function Vi(t,e,n){if(e){let a=atob(n.replace(/\s+/g,"")),i=new Uint8Array(a.length);for(let o=0;o<a.length;o+=1)i[o]=a.charCodeAt(o);return i}let r=decodeURIComponent(n.replace(/\+/g,"%20"));return new TextEncoder().encode(r)}function Cu(t){return/\s/.test(t)||t===")"||t==='"'||t==="<"||t===">"}function Ji(t){return t.replace(/\\(?:\r\n|[\n\r\f])/g,"").replace(/\\([0-9a-fA-F]{1,6}\s?|[\s\S])/g,(e,n)=>{let r=n.match(/^([0-9a-fA-F]{1,6})\s?$/);if(r?.[1])try{return String.fromCodePoint(Number.parseInt(r[1],16))}catch{return""}return n})}function Tu(t){let e=[],n=0;for(;n<t.length;){let r=t.toLowerCase().indexOf("data:",n);if(r<0)break;let a=r>0?t[r-1]:"",i=a==='"'||a==="'"?a:null,o=t.indexOf(",",r);if(o<0)break;let s=t.slice(r+5,o);if(!s||/[\s"'()<>]/.test(s)){n=r+5;continue}let c=o+1,d=!1;for(;c<t.length;){let v=t[c]??"";if(d){d=!1,c+=1;continue}if(v==="\\"){d=!0,c+=1;continue}if(i?v===i:Cu(v))break;c+=1}let u=t.slice(r,c),p=Ji(t.slice(o+1,c)),h=s.split(";"),y=h.shift()||"text/plain",k=h.some(v=>v.toLowerCase()==="base64");e.push({match:u,mime:y,isBase64:k,payload:p,index:r}),n=c}return e}function Au(t){let e=t.trim();if(!e.toLowerCase().startsWith("data:"))return null;let n=e.indexOf(",");if(n<0)return null;let r=e.slice(5,n);if(!r||/[\s"'()<>]/.test(r))return null;let a=r.split(";"),i=a.shift()||"text/plain",o=a.some(s=>s.toLowerCase()==="base64");return{mime:i,isBase64:o,payload:Ji(e.slice(n+1))}}async function Fi(t,e){let n=Au(t);if(!n)return null;let r;try{r=Vi(n.mime,n.isBase64,n.payload)}catch{return null}let a=`${await Dn(r)}${jr(n.mime)}`;return e.has(a)||e.set(a,{filename:a,bytes:r,contentType:n.mime||"application/octet-stream"}),`assets/${a}`}async function Rr(t,e,n){let r=n.get(t);if(r)return r;try{let a=await fetch(t,{cache:"force-cache",referrerPolicy:"strict-origin-when-cross-origin"});if(!a.ok)return null;let i=a.headers.get("content-type")?.split(";")[0]?.trim()||"application/octet-stream",o=new Uint8Array(await a.arrayBuffer());if(o.byteLength===0)return null;let s=`${await Dn(o)}${jr(i)}`;e.has(s)||e.set(s,{filename:s,bytes:o,contentType:i});let c=`assets/${s}`;return n.set(t,c),c}catch{return null}}function Iu(t){let e=[],n=0,r=!1;for(let a=0;a<t.length;a+=1){if(t[a]!==",")continue;if(t.slice(n,a).trimStart().toLowerCase().startsWith("data:")&&!r){r=!0;continue}e.push(t.slice(n,a).trim()),n=a+1,r=!1}return e.push(t.slice(n).trim()),e.filter(Boolean).map(a=>{let i=a.match(/\s+(\d+(?:\.\d+)?[wx])$/);return i?.index?{url:a.slice(0,i.index).trim(),descriptor:i[1]??""}:{url:a,descriptor:""}}).filter(a=>a.url.length>0)}async function Pu(t,e,n,r){let a=Array.from(t.querySelectorAll("img[src],source[src],video[poster]"));for(let o of a){let s=o.hasAttribute("poster")?"poster":"src",c=o.getAttribute(s);if(!c)continue;let d=await Fi(c,n);if(d){o.setAttribute(s,d);continue}let u=Er(c,e);if(!u)continue;let p=await Rr(u,n,r);p&&o.setAttribute(s,p)}let i=Array.from(t.querySelectorAll("img[srcset],source[srcset]"));for(let o of i){let s=o.getAttribute("srcset");if(!s)continue;let c=[];for(let d of Iu(s)){let u=await Fi(d.url,n);if(u){c.push(`${u}${d.descriptor?` ${d.descriptor}`:""}`);continue}let p=Er(d.url,e),h=p?await Rr(p,n,r):null;c.push(`${h??d.url}${d.descriptor?` ${d.descriptor}`:""}`)}o.setAttribute("srcset",c.join(", "))}}async function Eu(t,e,n,r){let a=[],i=/url\(\s*(["']?)([^"')]+)\1\s*\)/gi,o;for(;o=i.exec(t);){let c=o[2]??"",d=Er(c,e);d&&a.push({raw:c,url:d})}let s=t;for(let c of a){let d=await Rr(c.url,n,r);d&&(s=s.split(c.raw).join(d))}return s}async function Ru(t){let e=new Map,n=Tu(t),r=[];for(let o of n){let s;try{s=Vi(o.mime,o.isBase64,o.payload)}catch{continue}let c=`${await Dn(s)}${jr(o.mime)}`;e.has(c)||e.set(c,{filename:c,bytes:s,contentType:o.mime||"application/octet-stream"}),r.push({match:o.match,replacement:`assets/${c}`})}let a=t,i=new Map;for(let o of r)i.set(o.match,o.replacement);for(let[o,s]of i)a=a.split(o).join(s);return{html:a,assets:e}}function $u(t){return t.replace(/<script\b[\s\S]*?<\/script>/gi,"")}function Du(t){return t.replace(/<script\b(?=[^>]*\bid=["']alpha-capture-index["'])[\s\S]*?<\/script>/i,"")}function ju(t){return t.replace(/<link\b(?=[^>]*\brel=["'](?:preload|prefetch|preconnect|dns-prefetch|modulepreload|canonical|alternate)["'])[^>]*>/gi,"").replace(/<meta\b(?=[^>]*\b(?:property|name)=["'](?:og:[^"']+|twitter:[^"']+|description|keywords|robots|theme-color|generator)["'])[^>]*>/gi,"")}function Ou(t){let e=1,n=t.createTreeWalker(t.documentElement,NodeFilter.SHOW_ELEMENT,null),r=t.documentElement;do{if(r&&r.nodeType===1){let a=r.tagName.toLowerCase();Su.has(a)&&(r.setAttribute("data-inkly-id",String(e)),e+=1)}r=n.nextNode()}while(r)}function Nu(t){t.removeAttribute("href"),t.removeAttribute("xlink:href"),t.removeAttributeNS("http://www.w3.org/1999/xlink","href"),t.removeAttribute("target"),t.removeAttribute("rel"),t.removeAttribute("download"),t.removeAttribute("ping"),t.removeAttribute("referrerpolicy")}function Lu(t){for(let e of Array.from(t.querySelectorAll("*")))for(let n of Array.from(e.attributes))/^on/i.test(n.name)&&e.removeAttribute(n.name),/^formaction$/i.test(n.name)&&e.removeAttribute(n.name);for(let e of Array.from(t.querySelectorAll("base")))e.remove();for(let e of Array.from(t.querySelectorAll("link[href]")))(e.getAttribute("rel")??"").toLowerCase().split(/\s+/).filter(Boolean).includes("stylesheet")||e.remove();for(let e of Array.from(t.querySelectorAll("meta[http-equiv]")))(e.getAttribute("http-equiv")??"").toLowerCase()==="refresh"&&e.remove();for(let e of Array.from(t.querySelectorAll("a,area")))Nu(e),e.removeAttribute("data-inkly-href");for(let e of Array.from(t.querySelectorAll("form")))e.removeAttribute("action"),e.removeAttribute("method"),e.removeAttribute("target"),e.removeAttribute("data-inkly-action")}function zu(t){let e=Array.from(t.querySelectorAll("style"));if(e.length===0)return"";let n=[],r=!0;for(let a of e){let i=a.textContent?.trim()??"",o=a.getAttribute("media")?.trim();if(o&&o.toLowerCase()!=="all"?n.push(`@media ${o} {${i}}`):n.push(i),r){let s=t.createElement("link");s.setAttribute("rel","stylesheet"),s.setAttribute("href","assets/document.css"),a.replaceWith(s),r=!1}else a.remove()}return n.join(`
5046
+ `),h}import*as ht from"@sentry/node";var vu="https://b3450c6a8fdcd02b8aee3b9f2c8425eb@o4511498910433280.ingest.us.sentry.io/4511498940252160",Su="@inkly-org/cli@0.5.1";function Mi(){ht.init({dsn:vu,release:process.env.SENTRY_RELEASE??Su,environment:process.env.SENTRY_ENVIRONMENT??"production",enabled:process.env.INKLY_SENTRY_DISABLED!=="1",sendDefaultPii:!1,tracesSampleRate:0,beforeSend(t){return t.server_name=void 0,t}})}async function re(t,e){ht.captureException(e,{tags:{command:t,surface:"cli"}}),await ht.flush(2e3)}async function Ui(){await ht.flush(2e3)}import{spawn as eo,execFile as cp}from"child_process";import{createHash as up,randomUUID as pp}from"crypto";import{mkdir as Nt,mkdtemp as hp,open as to,readFile as Ee,readdir as no,rm as Fe,writeFile as ro}from"fs/promises";import{existsSync as Pe}from"fs";import{dirname as Mn,isAbsolute as ao,join as B,resolve as Ln,sep as mp}from"path";import{tmpdir as fp,homedir as Br}from"os";import{fileURLToPath as io}from"url";import{unzipSync as gp,zipSync as bp}from"fflate";import yp from"ws";import xp from"sharp";import kp from"subset-font";var _u=new Set(["area","base","br","col","embed","hr","img","input","link","meta","source","track","wbr"]),Cu=new Set(["a","button","input","select","textarea","label","p","h1","h2","h3","h4","h5","h6","img","li","nav","main","header","footer","section","article","aside","form","table","tr","td","th","ul","ol"]);function Tu(t){let e="";for(let n=0;n<t.length;n+=1)e+=(t[n]??0).toString(16).padStart(2,"0");return e}async function On(t,e=16){let n=new Uint8Array(t.byteLength);n.set(t);let r=await crypto.subtle.digest("SHA-256",n);return Tu(new Uint8Array(r)).slice(0,e)}function Lr(t){switch((t.toLowerCase().split(";")[0]??"").trim()){case"image/png":return".png";case"image/jpeg":case"image/jpg":return".jpg";case"image/webp":return".webp";case"image/gif":return".gif";case"image/svg+xml":return".svg";case"image/avif":return".avif";case"image/x-icon":case"image/vnd.microsoft.icon":return".ico";case"font/woff2":return".woff2";case"font/woff":return".woff";case"text/css":return".css";case"text/javascript":case"application/javascript":return".js";default:return".bin"}}function Dr(t,e){let n=t.trim();if(!n||n.startsWith("data:")||n.startsWith("blob:")||n.startsWith("assets/")||n.startsWith("#"))return null;try{let r=new URL(n,e);return r.protocol!=="http:"&&r.protocol!=="https:"?null:r.href}catch{return null}}function Vi(t,e,n){if(e){let a=atob(n.replace(/\s+/g,"")),i=new Uint8Array(a.length);for(let o=0;o<a.length;o+=1)i[o]=a.charCodeAt(o);return i}let r=decodeURIComponent(n.replace(/\+/g,"%20"));return new TextEncoder().encode(r)}function Au(t){return/\s/.test(t)||t===")"||t==='"'||t==="<"||t===">"}function Ji(t){return t.replace(/\\(?:\r\n|[\n\r\f])/g,"").replace(/\\([0-9a-fA-F]{1,6}\s?|[\s\S])/g,(e,n)=>{let r=n.match(/^([0-9a-fA-F]{1,6})\s?$/);if(r?.[1])try{return String.fromCodePoint(Number.parseInt(r[1],16))}catch{return""}return n})}function Iu(t){let e=[],n=0;for(;n<t.length;){let r=t.toLowerCase().indexOf("data:",n);if(r<0)break;let a=r>0?t[r-1]:"",i=a==='"'||a==="'"?a:null,o=t.indexOf(",",r);if(o<0)break;let s=t.slice(r+5,o);if(!s||/[\s"'()<>]/.test(s)){n=r+5;continue}let c=o+1,d=!1;for(;c<t.length;){let k=t[c]??"";if(d){d=!1,c+=1;continue}if(k==="\\"){d=!0,c+=1;continue}if(i?k===i:Au(k))break;c+=1}let u=t.slice(r,c),p=Ji(t.slice(o+1,c)),h=s.split(";"),f=h.shift()||"text/plain",w=h.some(k=>k.toLowerCase()==="base64");e.push({match:u,mime:f,isBase64:w,payload:p,index:r}),n=c}return e}function Pu(t){let e=t.trim();if(!e.toLowerCase().startsWith("data:"))return null;let n=e.indexOf(",");if(n<0)return null;let r=e.slice(5,n);if(!r||/[\s"'()<>]/.test(r))return null;let a=r.split(";"),i=a.shift()||"text/plain",o=a.some(s=>s.toLowerCase()==="base64");return{mime:i,isBase64:o,payload:Ji(e.slice(n+1))}}async function Fi(t,e){let n=Pu(t);if(!n)return null;let r;try{r=Vi(n.mime,n.isBase64,n.payload)}catch{return null}let a=`${await On(r)}${Lr(n.mime)}`;return e.has(a)||e.set(a,{filename:a,bytes:r,contentType:n.mime||"application/octet-stream"}),`assets/${a}`}async function jr(t,e,n){let r=n.get(t);if(r)return r;try{let a=await fetch(t,{cache:"force-cache",referrerPolicy:"strict-origin-when-cross-origin"});if(!a.ok)return null;let i=a.headers.get("content-type")?.split(";")[0]?.trim()||"application/octet-stream",o=new Uint8Array(await a.arrayBuffer());if(o.byteLength===0)return null;let s=`${await On(o)}${Lr(i)}`;e.has(s)||e.set(s,{filename:s,bytes:o,contentType:i});let c=`assets/${s}`;return n.set(t,c),c}catch{return null}}function Eu(t){let e=[],n=0,r=!1;for(let a=0;a<t.length;a+=1){if(t[a]!==",")continue;if(t.slice(n,a).trimStart().toLowerCase().startsWith("data:")&&!r){r=!0;continue}e.push(t.slice(n,a).trim()),n=a+1,r=!1}return e.push(t.slice(n).trim()),e.filter(Boolean).map(a=>{let i=a.match(/\s+(\d+(?:\.\d+)?[wx])$/);return i?.index?{url:a.slice(0,i.index).trim(),descriptor:i[1]??""}:{url:a,descriptor:""}}).filter(a=>a.url.length>0)}async function Ru(t,e,n,r){let a=Array.from(t.querySelectorAll("img[src],source[src],video[poster]"));for(let o of a){let s=o.hasAttribute("poster")?"poster":"src",c=o.getAttribute(s);if(!c)continue;let d=await Fi(c,n);if(d){o.setAttribute(s,d);continue}let u=Dr(c,e);if(!u)continue;let p=await jr(u,n,r);p&&o.setAttribute(s,p)}let i=Array.from(t.querySelectorAll("img[srcset],source[srcset]"));for(let o of i){let s=o.getAttribute("srcset");if(!s)continue;let c=[];for(let d of Eu(s)){let u=await Fi(d.url,n);if(u){c.push(`${u}${d.descriptor?` ${d.descriptor}`:""}`);continue}let p=Dr(d.url,e),h=p?await jr(p,n,r):null;c.push(`${h??d.url}${d.descriptor?` ${d.descriptor}`:""}`)}o.setAttribute("srcset",c.join(", "))}}async function $u(t,e,n,r){let a=[],i=/url\(\s*(["']?)([^"')]+)\1\s*\)/gi,o;for(;o=i.exec(t);){let c=o[2]??"",d=Dr(c,e);d&&a.push({raw:c,url:d})}let s=t;for(let c of a){let d=await jr(c.url,n,r);d&&(s=s.split(c.raw).join(d))}return s}async function Du(t){let e=new Map,n=Iu(t),r=[];for(let o of n){let s;try{s=Vi(o.mime,o.isBase64,o.payload)}catch{continue}let c=`${await On(s)}${Lr(o.mime)}`;e.has(c)||e.set(c,{filename:c,bytes:s,contentType:o.mime||"application/octet-stream"}),r.push({match:o.match,replacement:`assets/${c}`})}let a=t,i=new Map;for(let o of r)i.set(o.match,o.replacement);for(let[o,s]of i)a=a.split(o).join(s);return{html:a,assets:e}}function ju(t){return t.replace(/<script\b[\s\S]*?<\/script>/gi,"")}function Ou(t){return t.replace(/<script\b(?=[^>]*\bid=["']alpha-capture-index["'])[\s\S]*?<\/script>/i,"")}function Nu(t){return t.replace(/<link\b(?=[^>]*\brel=["'](?:preload|prefetch|preconnect|dns-prefetch|modulepreload|canonical|alternate)["'])[^>]*>/gi,"").replace(/<meta\b(?=[^>]*\b(?:property|name)=["'](?:og:[^"']+|twitter:[^"']+|description|keywords|robots|theme-color|generator)["'])[^>]*>/gi,"")}function Lu(t){let e=1,n=t.createTreeWalker(t.documentElement,NodeFilter.SHOW_ELEMENT,null),r=t.documentElement;do{if(r&&r.nodeType===1){let a=r.tagName.toLowerCase();Cu.has(a)&&(r.setAttribute("data-inkly-id",String(e)),e+=1)}r=n.nextNode()}while(r)}function zu(t){t.removeAttribute("href"),t.removeAttribute("xlink:href"),t.removeAttributeNS("http://www.w3.org/1999/xlink","href"),t.removeAttribute("target"),t.removeAttribute("rel"),t.removeAttribute("download"),t.removeAttribute("ping"),t.removeAttribute("referrerpolicy")}function Mu(t){for(let e of Array.from(t.querySelectorAll("*")))for(let n of Array.from(e.attributes))/^on/i.test(n.name)&&e.removeAttribute(n.name),/^formaction$/i.test(n.name)&&e.removeAttribute(n.name);for(let e of Array.from(t.querySelectorAll("base")))e.remove();for(let e of Array.from(t.querySelectorAll("link[href]")))(e.getAttribute("rel")??"").toLowerCase().split(/\s+/).filter(Boolean).includes("stylesheet")||e.remove();for(let e of Array.from(t.querySelectorAll("meta[http-equiv]")))(e.getAttribute("http-equiv")??"").toLowerCase()==="refresh"&&e.remove();for(let e of Array.from(t.querySelectorAll("a,area")))zu(e),e.removeAttribute("data-inkly-href");for(let e of Array.from(t.querySelectorAll("form")))e.removeAttribute("action"),e.removeAttribute("method"),e.removeAttribute("target"),e.removeAttribute("data-inkly-action")}function Uu(t){let e=Array.from(t.querySelectorAll("style"));if(e.length===0)return"";let n=[],r=!0;for(let a of e){let i=a.textContent?.trim()??"",o=a.getAttribute("media")?.trim();if(o&&o.toLowerCase()!=="all"?n.push(`@media ${o} {${i}}`):n.push(i),r){let s=t.createElement("link");s.setAttribute("rel","stylesheet"),s.setAttribute("href","assets/document.css"),a.replaceWith(s),r=!1}else a.remove()}return n.join(`
5045
5047
 
5046
- `)}function Uu(t){let e="",n=0,r="",a=!1,i=0,o=!0,s=()=>{o&&(e+=" ".repeat(n),o=!1)},c=()=>{e=e.replace(/[ \t]+$/,""),e+=`
5048
+ `)}function Fu(t){let e="",n=0,r="",a=!1,i=0,o=!0,s=()=>{o&&(e+=" ".repeat(n),o=!1)},c=()=>{e=e.replace(/[ \t]+$/,""),e+=`
5047
5049
  `,o=!0};for(let d of t){if(r){s(),e+=d,a?a=!1:d==="\\"?a=!0:d===r&&(r="");continue}if(a){s(),e+=d,a=!1;continue}if(d==="\\"){s(),e+=d,a=!0;continue}if(d==='"'||d==="'"){s(),r=d,e+=d;continue}if(d==="("&&(i+=1),d===")"&&(i=Math.max(0,i-1)),d==="{"){s(),e=e.replace(/[ \t]+$/,""),e+=` {
5048
5050
  `,n+=1,o=!0;continue}if(d==="}"){n=Math.max(0,n-1),c(),s(),e+="}",c();continue}if(d===";"&&i===0){s(),e+=";",c();continue}if(d===","&&i===0){s(),e+=",",c();continue}s(),e+=d}return`${e.trim()}
5049
- `}function Hi(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function $r(t){return t.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Bi(t){return t==="id"?0:t==="data-inkly-id"?1:t==="class"?2:t==="href"?3:t==="src"?4:t==="srcset"?5:t==="alt"?6:t==="aria-label"?7:t==="role"?8:t==="type"?9:t==="style"?10:20}function Mu(t){return Array.from(t.attributes).sort((n,r)=>Bi(n.name)-Bi(r.name)||n.name.localeCompare(r.name))}function Fu(t,e){let n=t.trim().split(/\s+/).filter(Boolean);if(n.length<=5&&t.length<=100)return`"${$r(t)}"`;let r=" ".repeat(e+2);return`"${n.map(a=>`
5050
- ${r}${$r(a)}`).join("")}
5051
- ${" ".repeat(e)}"`}function Wi(t,e){return t.name==="class"?`${t.name}=${Fu(t.value,e+t.name.length+2)}`:`${t.name}="${$r(t.value)}"`}function Hu(t,e){let n=Mu(t),r=t.tagName.toLowerCase();if(n.length===0)return`<${r}>`;let a=`<${r} ${n.map(o=>Wi(o,e)).join(" ")}>`;if(a.length<=110&&!n.some(o=>o.name==="class"&&o.value.length>100))return a;let i=[`<${r}`];for(let o of n)i.push(`${" ".repeat(e+2)}${Wi(o,e+2)}`);return i.push(`${" ".repeat(e)}>`),i.join(`
5052
- `)}function Bu(t){let e=t.tagName.toLowerCase();if(e==="pre"||e==="code"||e==="textarea"||e==="style")return!0;let n=t.getAttribute("class")??"";if(/(^|\s)whitespace-(?:pre|pre-wrap|pre-line|break-spaces)(\s|$)/.test(n))return!0;let r=t.getAttribute("style")??"";return/(?:^|;)\s*white-space\s*:\s*(?:pre|pre-wrap|pre-line|break-spaces)\b/i.test(r)}function Dr(t,e){let n=" ".repeat(e*2);if(t.nodeType===Node.TEXT_NODE){let d=(t.nodeValue??"").replace(/\s+/g," ").trim();return d?`${n}${Hi(d)}`:""}if(t.nodeType===Node.COMMENT_NODE||t.nodeType!==Node.ELEMENT_NODE)return"";let r=t,a=r.tagName.toLowerCase(),i=`${n}${Hu(r,n.length)}`;if(vu.has(a))return i;if(a==="template"&&"content"in r){let d=r,u=[];for(let p of Array.from(d.content.childNodes)){let h=Dr(p,e+1);h&&u.push(h)}return u.length===0?`${i}</${a}>`:`${i}
5051
+ `}function Hi(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Or(t){return t.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Bi(t){return t==="id"?0:t==="data-inkly-id"?1:t==="class"?2:t==="href"?3:t==="src"?4:t==="srcset"?5:t==="alt"?6:t==="aria-label"?7:t==="role"?8:t==="type"?9:t==="style"?10:20}function Hu(t){return Array.from(t.attributes).sort((n,r)=>Bi(n.name)-Bi(r.name)||n.name.localeCompare(r.name))}function Bu(t,e){let n=t.trim().split(/\s+/).filter(Boolean);if(n.length<=5&&t.length<=100)return`"${Or(t)}"`;let r=" ".repeat(e+2);return`"${n.map(a=>`
5052
+ ${r}${Or(a)}`).join("")}
5053
+ ${" ".repeat(e)}"`}function Wi(t,e){return t.name==="class"?`${t.name}=${Bu(t.value,e+t.name.length+2)}`:`${t.name}="${Or(t.value)}"`}function Wu(t,e){let n=Hu(t),r=t.tagName.toLowerCase();if(n.length===0)return`<${r}>`;let a=`<${r} ${n.map(o=>Wi(o,e)).join(" ")}>`;if(a.length<=110&&!n.some(o=>o.name==="class"&&o.value.length>100))return a;let i=[`<${r}`];for(let o of n)i.push(`${" ".repeat(e+2)}${Wi(o,e+2)}`);return i.push(`${" ".repeat(e)}>`),i.join(`
5054
+ `)}function Vu(t){let e=t.tagName.toLowerCase();if(e==="pre"||e==="code"||e==="textarea"||e==="style")return!0;let n=t.getAttribute("class")??"";if(/(^|\s)whitespace-(?:pre|pre-wrap|pre-line|break-spaces)(\s|$)/.test(n))return!0;let r=t.getAttribute("style")??"";return/(?:^|;)\s*white-space\s*:\s*(?:pre|pre-wrap|pre-line|break-spaces)\b/i.test(r)}function Nr(t,e){let n=" ".repeat(e*2);if(t.nodeType===Node.TEXT_NODE){let d=(t.nodeValue??"").replace(/\s+/g," ").trim();return d?`${n}${Hi(d)}`:""}if(t.nodeType===Node.COMMENT_NODE||t.nodeType!==Node.ELEMENT_NODE)return"";let r=t,a=r.tagName.toLowerCase(),i=`${n}${Wu(r,n.length)}`;if(_u.has(a))return i;if(a==="template"&&"content"in r){let d=r,u=[];for(let p of Array.from(d.content.childNodes)){let h=Nr(p,e+1);h&&u.push(h)}return u.length===0?`${i}</${a}>`:`${i}
5053
5055
  ${u.join(`
5054
5056
  `)}
5055
- ${n}</${a}>`}if(Bu(r))return`${n}${r.outerHTML}`;let o=Array.from(r.childNodes).filter(d=>d.nodeType!==Node.COMMENT_NODE&&!(d.nodeType===Node.TEXT_NODE&&(d.nodeValue??"").trim().length===0));if(o.length>0&&o.every(d=>d.nodeType===Node.TEXT_NODE)){let d=o.map(u=>u.nodeValue??"").join("").replace(/\s+/g," ").trim();return d?`${i}${Hi(d)}</${a}>`:`${i}</${a}>`}let s=[];for(let d of Array.from(r.childNodes)){let u=Dr(d,e+1);u&&s.push(u)}if(s.length===0)return`${i}</${a}>`;let c=s[0];return s.length===1&&c&&c.trim()&&!c.includes(`
5057
+ ${n}</${a}>`}if(Vu(r))return`${n}${r.outerHTML}`;let o=Array.from(r.childNodes).filter(d=>d.nodeType!==Node.COMMENT_NODE&&!(d.nodeType===Node.TEXT_NODE&&(d.nodeValue??"").trim().length===0));if(o.length>0&&o.every(d=>d.nodeType===Node.TEXT_NODE)){let d=o.map(u=>u.nodeValue??"").join("").replace(/\s+/g," ").trim();return d?`${i}${Hi(d)}</${a}>`:`${i}</${a}>`}let s=[];for(let d of Array.from(r.childNodes)){let u=Nr(d,e+1);u&&s.push(u)}if(s.length===0)return`${i}</${a}>`;let c=s[0];return s.length===1&&c&&c.trim()&&!c.includes(`
5056
5058
  `)&&i.length+c.trim().length<120?`${i}${c.trim()}</${a}>`:`${i}
5057
5059
  ${s.join(`
5058
5060
  `)}
5059
- ${n}</${a}>`}function Wu(t){let e=t.documentElement;return`<!doctype html>
5060
- ${Dr(e,0)}
5061
- `}var Vu=.8,Ju=1024;function Zu(t){let e=(t.toLowerCase().split(";")[0]??"").trim();return e==="image/png"||e==="image/jpeg"||e==="image/jpg"}async function Gu(t,e){if(typeof createImageBitmap!="function"||typeof OffscreenCanvas!="function")return null;try{let n=t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength),r=await createImageBitmap(new Blob([n],{type:e}));try{let a=new OffscreenCanvas(r.width,r.height),i=a.getContext("2d");if(!i)return null;i.drawImage(r,0,0);let o=await a.convertToBlob({type:"image/webp",quality:Vu});return o.type!=="image/webp"?null:new Uint8Array(await o.arrayBuffer())}finally{r.close()}}catch{return null}}async function qu(t,e,n){let r=new Map,a=new Map;for(let s of t.values()){if(!Zu(s.contentType)||s.bytes.byteLength<Ju){a.set(s.filename,s);continue}let c=await Gu(s.bytes,s.contentType);if(!c||c.byteLength>=s.bytes.byteLength){a.set(s.filename,s);continue}let d=`${await Dn(c)}.webp`;r.set(s.filename,d),a.has(d)||a.set(d,{filename:d,bytes:c,contentType:"image/webp"})}if(r.size===0)return{assets:[...t.values()],html:e,css:n};let i=e,o=n;for(let[s,c]of r)i=i.split(`assets/${s}`).join(`assets/${c}`),o=o.split(s).join(c);return{assets:[...a.values()],html:i,css:o}}async function Zi(t,e,n={}){let r=$u(t);r=Du(r),r=ju(r);let a=await Ru(r);r=a.html;let i=Ku(r);Ou(i),Lu(i);let o=new Map;await Pu(i,e,a.assets,o);let s=(await Eu(zu(i),e,a.assets,o)).replace(/url\((["']?)assets\//g,"url($1"),c=Zt(Wu(i)),d=Uu(s);if(n.compressImages){let u=await qu(a.assets,c,d);return{html:u.html,css:u.css,assets:u.assets}}return{html:c,css:d,assets:[...a.assets.values()]}}function Ku(t){let e=globalThis.DOMParser;if(!e)throw new Error("DOMParser is not available in this context. Run compactSnapshot in an offscreen document.");return new e().parseFromString(t,"text/html")}import{zipSync as Yu}from"fflate";var Xu=/^(?:https?:)?\/\//i,Qu=/^(?:#|data:|blob:|javascript:|mailto:|tel:|about:|chrome:|chrome-extension:)/i;function ep(t){return t.normalize("NFKD").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+/,"").slice(0,60).replace(/-+$/,"")||"demo"}function tp(t){let e="abcdefghijklmnopqrstuvwxyz0123456789",n=new Uint8Array(t);crypto.getRandomValues(n);let r="";for(let a=0;a<t;a+=1)r+=e[(n[a]??0)%e.length];return r}function np(t){return`${ep(t)}-${tp(6)}`}function rp(t,e){return`# ${e}
5061
+ ${n}</${a}>`}function Ju(t){let e=t.documentElement;return`<!doctype html>
5062
+ ${Nr(e,0)}
5063
+ `}var Zu=.8,Gu=1024;function qu(t){let e=(t.toLowerCase().split(";")[0]??"").trim();return e==="image/png"||e==="image/jpeg"||e==="image/jpg"}async function Ku(t,e){if(typeof createImageBitmap!="function"||typeof OffscreenCanvas!="function")return null;try{let n=t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength),r=await createImageBitmap(new Blob([n],{type:e}));try{let a=new OffscreenCanvas(r.width,r.height),i=a.getContext("2d");if(!i)return null;i.drawImage(r,0,0);let o=await a.convertToBlob({type:"image/webp",quality:Zu});return o.type!=="image/webp"?null:new Uint8Array(await o.arrayBuffer())}finally{r.close()}}catch{return null}}async function Yu(t,e,n){let r=new Map,a=new Map;for(let s of t.values()){if(!qu(s.contentType)||s.bytes.byteLength<Gu){a.set(s.filename,s);continue}let c=await Ku(s.bytes,s.contentType);if(!c||c.byteLength>=s.bytes.byteLength){a.set(s.filename,s);continue}let d=`${await On(c)}.webp`;r.set(s.filename,d),a.has(d)||a.set(d,{filename:d,bytes:c,contentType:"image/webp"})}if(r.size===0)return{assets:[...t.values()],html:e,css:n};let i=e,o=n;for(let[s,c]of r)i=i.split(`assets/${s}`).join(`assets/${c}`),o=o.split(s).join(c);return{assets:[...a.values()],html:i,css:o}}async function Zi(t,e,n={}){let r=ju(t);r=Ou(r),r=Nu(r);let a=await Du(r);r=a.html;let i=Xu(r);Lu(i),Mu(i);let o=new Map;await Ru(i,e,a.assets,o);let s=(await $u(Uu(i),e,a.assets,o)).replace(/url\((["']?)assets\//g,"url($1"),c=Zt(Ju(i)),d=Fu(s);if(n.compressImages){let u=await Yu(a.assets,c,d);return{html:u.html,css:u.css,assets:u.assets}}return{html:c,css:d,assets:[...a.assets.values()]}}function Xu(t){let e=globalThis.DOMParser;if(!e)throw new Error("DOMParser is not available in this context. Run compactSnapshot in an offscreen document.");return new e().parseFromString(t,"text/html")}import{zipSync as Qu}from"fflate";var ep=/^(?:https?:)?\/\//i,tp=/^(?:#|data:|blob:|javascript:|mailto:|tel:|about:|chrome:|chrome-extension:)/i;function np(t){return t.normalize("NFKD").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+/,"").slice(0,60).replace(/-+$/,"")||"demo"}function rp(t){let e="abcdefghijklmnopqrstuvwxyz0123456789",n=new Uint8Array(t);crypto.getRandomValues(n);let r="";for(let a=0;a<t;a+=1)r+=e[(n[a]??0)%e.length];return r}function ap(t){return`${np(t)}-${rp(6)}`}function ip(t,e){return`# ${e}
5062
5064
 
5063
5065
  This folder is a self-contained Inkly HTML capture. It works locally with
5064
5066
  \`inkly-cli\` with no upload needed.
@@ -5068,7 +5070,8 @@ This folder is a self-contained Inkly HTML capture. It works locally with
5068
5070
  1. If you don't have a hub yet, create one:
5069
5071
 
5070
5072
  \`\`\`bash
5071
- npx @inkly-org/cli init my-hub
5073
+ npm install -g @inkly-org/cli
5074
+ inkly init my-hub
5072
5075
  cd my-hub
5073
5076
  \`\`\`
5074
5077
 
@@ -5090,10 +5093,10 @@ This folder is a self-contained Inkly HTML capture. It works locally with
5090
5093
  - \`${t}/capture-metadata.json\` - HTML export diagnostics.
5091
5094
  - \`${t}/public/<file>\` - captured HTML asset bytes.
5092
5095
  - \`${t}/snapshots/snap-NNN/index.html\` and \`document.css\` - replayable snapshots.
5093
- `}function ap(t){return t.trim().replace(/^['"]|['"]$/g,"")}function jn(t,e){let n=ap(e.url);!n||Qu.test(n)||!Xu.test(n)||t.set(`${e.stepId}\0${e.file}\0${e.kind}\0${n}`,{...e,url:n})}function ip(t){return t.split(",").map(e=>e.trim().split(/\s+/)[0]??"").filter(Boolean)}function op(t,e){return t?.alphaId?e.includes(`data-inkly-id="${t.alphaId}"`)||e.includes(`data-inkly-id='${t.alphaId}'`)?t:{...t,alphaId:void 0}:t}function sp(t){let e=new Map,n=/\b(?:src|poster|data|action|formaction)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'<>`]+))/gi,r;for(;(r=n.exec(t.html))!==null;)jn(e,{stepId:t.stepId,file:t.htmlPath,kind:"html-attribute",url:r[1]??r[2]??r[3]??""});let a=/<link\b(?=[^>]*\b(?:rel|as)\s*=\s*(?:"(?:stylesheet|preload|modulepreload|icon|apple-touch-icon|image_src)"|'(?:stylesheet|preload|modulepreload|icon|apple-touch-icon|image_src)'|[^\s"'<>`]*(?:stylesheet|preload|modulepreload|icon|apple-touch-icon|image_src)[^\s"'<>`]*))[^>]*\bhref\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'<>`]+))[^>]*>/gi,i;for(;(i=a.exec(t.html))!==null;)jn(e,{stepId:t.stepId,file:t.htmlPath,kind:"html-attribute",url:i[1]??i[2]??i[3]??""});let o=/\b(?:srcset|imagesrcset)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'<>`]+))/gi,s;for(;(s=o.exec(t.html))!==null;){let u=s[1]??s[2]??s[3]??"";for(let p of ip(u))jn(e,{stepId:t.stepId,file:t.htmlPath,kind:"html-srcset",url:p})}let c=/url\(\s*(?:"([^"]*)"|'([^']*)'|([^)"'\s]+))\s*\)/gi,d;for(;(d=c.exec(t.css))!==null;)jn(e,{stepId:t.stepId,file:t.htmlPath.replace(/\/index\.html$/,"/document.css"),kind:"css-url",url:d[1]??d[2]??d[3]??""});return[...e.values()]}async function Gi(t){let{name:e,steps:n,assets:r}=t;if(n.length===0)throw new Error("No HTML steps captured.");let a=np(e),i=new Map;for(let C of r)i.set(C.filename,`/${a}/${C.filename}`);let o={},s=[],c=[],d=new TextEncoder;for(let C=0;C<n.length;C+=1){let $=n[C];if(!$)continue;let O=`s${C+1}`,E=ba(C+1),g=`snapshots/${E}/index.html`,N=Kn($.cssText??"",i),L=xa(ka(Zt(Kn($.htmlText,i)),N.length>0),$.scroll);o[E]={"index.html":d.encode(L),"document.css":d.encode(N)},c.push(...sp({stepId:O,htmlPath:g,html:L,css:N})),s.push(ya({stepId:O,htmlPath:g,naturalWidth:$.viewport.width,naturalHeight:$.viewport.height,scroll:$.scroll,sourceUrl:$.url||void 0,click:op($.click,L)}))}let u=r.map(C=>({id:C.filename,sha256:C.sha256,kind:mn(C.contentType),contentType:C.contentType,size:C.bytes.byteLength,publicUrl:`/${a}/${C.filename}`})),p=bn({id:ne(),version:1,title:e,steps:s}),h=_t.parse({version:1,assets:u,screens:[]}),y={version:1,kind:"html-capture",generatedAt:t.generatedAt??new Date().toISOString(),stepCount:n.length,assetCount:r.length,unresolvedExternalReferences:c},k={};for(let C of r)k[C.filename]=C.bytes;let v={"README.md":d.encode(rp(a,e)),[a]:{"demo.config.json":d.encode(`${JSON.stringify(p,null,2)}
5096
+ `}function op(t){return t.trim().replace(/^['"]|['"]$/g,"")}function Nn(t,e){let n=op(e.url);!n||tp.test(n)||!ep.test(n)||t.set(`${e.stepId}\0${e.file}\0${e.kind}\0${n}`,{...e,url:n})}function sp(t){return t.split(",").map(e=>e.trim().split(/\s+/)[0]??"").filter(Boolean)}function lp(t,e){return t?.alphaId?e.includes(`data-inkly-id="${t.alphaId}"`)||e.includes(`data-inkly-id='${t.alphaId}'`)?t:{...t,alphaId:void 0}:t}function dp(t){let e=new Map,n=/\b(?:src|poster|data|action|formaction)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'<>`]+))/gi,r;for(;(r=n.exec(t.html))!==null;)Nn(e,{stepId:t.stepId,file:t.htmlPath,kind:"html-attribute",url:r[1]??r[2]??r[3]??""});let a=/<link\b(?=[^>]*\b(?:rel|as)\s*=\s*(?:"(?:stylesheet|preload|modulepreload|icon|apple-touch-icon|image_src)"|'(?:stylesheet|preload|modulepreload|icon|apple-touch-icon|image_src)'|[^\s"'<>`]*(?:stylesheet|preload|modulepreload|icon|apple-touch-icon|image_src)[^\s"'<>`]*))[^>]*\bhref\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'<>`]+))[^>]*>/gi,i;for(;(i=a.exec(t.html))!==null;)Nn(e,{stepId:t.stepId,file:t.htmlPath,kind:"html-attribute",url:i[1]??i[2]??i[3]??""});let o=/\b(?:srcset|imagesrcset)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'<>`]+))/gi,s;for(;(s=o.exec(t.html))!==null;){let u=s[1]??s[2]??s[3]??"";for(let p of sp(u))Nn(e,{stepId:t.stepId,file:t.htmlPath,kind:"html-srcset",url:p})}let c=/url\(\s*(?:"([^"]*)"|'([^']*)'|([^)"'\s]+))\s*\)/gi,d;for(;(d=c.exec(t.css))!==null;)Nn(e,{stepId:t.stepId,file:t.htmlPath.replace(/\/index\.html$/,"/document.css"),kind:"css-url",url:d[1]??d[2]??d[3]??""});return[...e.values()]}async function Gi(t){let{name:e,steps:n,assets:r}=t;if(n.length===0)throw new Error("No HTML steps captured.");let a=ap(e),i=new Map;for(let C of r)i.set(C.filename,`/${a}/${C.filename}`);let o={},s=[],c=[],d=new TextEncoder;for(let C=0;C<n.length;C+=1){let $=n[C];if(!$)continue;let N=`s${C+1}`,E=ka(C+1),b=`snapshots/${E}/index.html`,L=Xn($.cssText??"",i),z=va(Sa(Zt(Xn($.htmlText,i)),L.length>0),$.scroll);o[E]={"index.html":d.encode(z),"document.css":d.encode(L)},c.push(...dp({stepId:N,htmlPath:b,html:z,css:L})),s.push(wa({stepId:N,htmlPath:b,naturalWidth:$.viewport.width,naturalHeight:$.viewport.height,scroll:$.scroll,sourceUrl:$.url||void 0,click:lp($.click,z)}))}let u=r.map(C=>({id:C.filename,sha256:C.sha256,kind:mn(C.contentType),contentType:C.contentType,size:C.bytes.byteLength,publicUrl:`/${a}/${C.filename}`})),p=bn({id:ne(),version:1,title:e,steps:s}),h=_t.parse({version:1,assets:u,screens:[]}),f={version:1,kind:"html-capture",generatedAt:t.generatedAt??new Date().toISOString(),stepCount:n.length,assetCount:r.length,unresolvedExternalReferences:c},w={};for(let C of r)w[C.filename]=C.bytes;let k={"README.md":d.encode(ip(a,e)),[a]:{"demo.config.json":d.encode(`${JSON.stringify(p,null,2)}
5094
5097
  `),"assets.json":d.encode(`${JSON.stringify(h,null,2)}
5095
- `),"capture-metadata.json":d.encode(`${JSON.stringify(y,null,2)}
5096
- `),snapshots:o,public:k}};return{bytes:Yu(v,{level:6}),filename:`${a}.zip`,slug:a}}import{JSDOM as yp}from"jsdom";var qi=!1;function xp(){if(qi)return;let{window:t}=new yp("<!doctype html><html></html>"),e=globalThis;e.DOMParser??=t.DOMParser,e.Node??=t.Node,e.NodeFilter??=t.NodeFilter,e.Element??=t.Element,e.HTMLImageElement??=t.HTMLImageElement,qi=!0}var io=`Options:
5098
+ `),"capture-metadata.json":d.encode(`${JSON.stringify(f,null,2)}
5099
+ `),snapshots:o,public:w}};return{bytes:Qu(k,{level:6}),filename:`${a}.zip`,slug:a}}import{JSDOM as wp}from"jsdom";var qi=!1;function vp(){if(qi)return;let{window:t}=new wp("<!doctype html><html></html>"),e=globalThis;e.DOMParser??=t.DOMParser,e.Node??=t.Node,e.NodeFilter??=t.NodeFilter,e.Element??=t.Element,e.HTMLImageElement??=t.HTMLImageElement,qi=!0}var oo=`Options:
5097
5100
  --url <url> URL to open and arm for recording.
5098
5101
  --name <name> Demo name written into the exported ZIP.
5099
5102
  --session <id> Session id printed by start.
@@ -5123,7 +5126,7 @@ Usage:
5123
5126
  inkly capture undo --session <id>
5124
5127
  inkly capture profiles
5125
5128
 
5126
- ${io}
5129
+ ${oo}
5127
5130
  --video, --record-video Record motion segments. Enabled by default; use --no-video to disable.
5128
5131
  --zoom Apply click zoom/pan to screenshot steps. Enabled by default; use --no-zoom to disable.
5129
5132
  --compress-images Re-encode captured PNG/JPEG screenshots to WebP (smaller, near-lossless).
@@ -5142,20 +5145,20 @@ Usage:
5142
5145
  inkly capture-html undo --session <id>
5143
5146
  inkly capture-html profiles
5144
5147
 
5145
- ${io}
5148
+ ${oo}
5146
5149
  --block-videos Replace <video> with its poster frame instead of inlining the video.
5147
5150
 
5148
5151
  Output:
5149
5152
  Every subcommand prints JSON. This command does not accept prompts and does not plan or drive the page.
5150
- `,kp=Ln(ao(import.meta.url)),wp=["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/opt/google/chrome/chrome"],vp=1440,Sp=900,_p=12e4;function Lt(t){return new Promise(e=>setTimeout(e,t))}function He(t){process.stdout.write(`${JSON.stringify(t,null,2)}
5151
- `)}function Ot(t,e){if(!Object.prototype.hasOwnProperty.call(t,e))return;let n=t[e];return typeof n=="string"?n:""}function Or(t,e,n){let r=t[e];return typeof r=="number"?r:typeof r=="string"&&r.trim()?Number(r):n}function jt(t,e,n){for(let r of e)if(Object.prototype.hasOwnProperty.call(t,r))return t[r]!==!1;return n}function Cp(t){if(!t)return null;let e=/^\s*(\d+)\s*[x,]\s*(\d+)\s*$/i.exec(t);if(!e)throw new Error("--window-size must look like 1440x900");return{width:Number(e[1]),height:Number(e[2])}}function mt(t,e,n){let r=Ot(t,e);if(!r)throw new Error(`missing --${e} <value>
5153
+ `,Sp=Mn(io(import.meta.url)),_p=["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/opt/google/chrome/chrome"],Cp=1440,Tp=900,Ap=12e4;function Lt(t){return new Promise(e=>setTimeout(e,t))}function He(t){process.stdout.write(`${JSON.stringify(t,null,2)}
5154
+ `)}function Ot(t,e){if(!Object.prototype.hasOwnProperty.call(t,e))return;let n=t[e];return typeof n=="string"?n:""}function zr(t,e,n){let r=t[e];return typeof r=="number"?r:typeof r=="string"&&r.trim()?Number(r):n}function jt(t,e,n){for(let r of e)if(Object.prototype.hasOwnProperty.call(t,r))return t[r]!==!1;return n}function Ip(t){if(!t)return null;let e=/^\s*(\d+)\s*[x,]\s*(\d+)\s*$/i.exec(t);if(!e)throw new Error("--window-size must look like 1440x900");return{width:Number(e[1]),height:Number(e[2])}}function mt(t,e,n){let r=Ot(t,e);if(!r)throw new Error(`missing --${e} <value>
5152
5155
 
5153
- ${n}`);return r}function Tp(t){return Ot(t,"connect-to-browser")??process.env.INKLY_CAPTURE_BROWSER_URL}function Ap(t){if(Object.prototype.hasOwnProperty.call(t,"prompt"))throw new Error("inkly capture does not accept --prompt. The external agent owns planning.")}function Fr(t,e){return ro(e)?e:On(t,e)}function oo(){return B(Mr(),".inkly","capture-agent","profiles")}function Ip(t,e){if(e.includes("/")||ro(e))return Fr(t,e);let n=e.toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64);return B(oo(),n||"default")}function Ki(t,e){let n=On(t);for(;;){let r=B(n,e);if(Ie(r))return r;let a=Ln(n);if(a===n)return null;n=a}}async function Yi(t){let e=[t];for(;e.length>0;){let n=e.pop();if(!n)continue;let r=await to(n,{withFileTypes:!0}).catch(()=>[]);for(let a of r){let i=B(n,a.name);if(a.isDirectory()){e.push(i);continue}if(a.name==="Google Chrome for Testing"&&i.includes("Google Chrome for Testing.app/Contents/MacOS"))return i}}return null}async function Pp(t,e){if(e){let s=Fr(t,e);if(Ie(s))return s;throw new Error(`Chrome binary does not exist: ${s}`)}let n=process.env.CHROME_PATH;if(n&&Ie(n))return n;let r=wp.find(s=>Ie(s));if(r)return r;let a=Ki(t,"chrome");if(a){let s=await Yi(a);if(s)return s}let i=Ki(kp,"chrome");if(i&&i!==a){let s=await Yi(i);if(s)return s}let o=["/Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing","/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary","/Applications/Chromium.app/Contents/MacOS/Chromium","/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"];for(let s of o)if(Ie(s))return s;throw new Error("No Chrome binary found. Pass --browser /path/to/chrome.")}var Nr=class{constructor(e){this.nextId=1;this.pending=new Map;this.listeners=new Map;this.ws=new fp(e,{perMessageDeflate:!1,maxPayload:512*1024*1024}),this.ready=new Promise((n,r)=>{this.ws.once("open",()=>n()),this.ws.once("error",a=>r(a))}),this.ws.on("message",n=>{let r=JSON.parse(n.toString());if(typeof r.id=="number"&&this.pending.has(r.id)){let i=this.pending.get(r.id);if(this.pending.delete(r.id),!i)return;r.error?i.reject(new Error(`${r.error.message??"CDP error"}: ${JSON.stringify(r.error.data??"")}`)):i.resolve(r.result??{});return}if(!r.method)return;let a=this.listeners.get(r.method);if(a)for(let i of a)i(r.params,r.sessionId)})}async send(e,n={},r){await this.ready;let a=this.nextId;this.nextId+=1;let i={id:a,method:e,params:n};return r&&(i.sessionId=r),new Promise((o,s)=>{this.pending.set(a,{resolve:o,reject:s}),this.ws.send(JSON.stringify(i),c=>{c&&(this.pending.delete(a),s(c))})})}on(e,n){let r=this.listeners.get(e)??new Set;return r.add(n),this.listeners.set(e,r),()=>r.delete(n)}close(){try{this.ws.close()}catch{}}};async function so(t,e,n,r=3e4){let a=await t.send("Runtime.evaluate",{expression:n,awaitPromise:!0,returnByValue:!0,timeout:r,userGesture:!0},e);if(a.exceptionDetails)throw new Error(`Runtime.evaluate failed: ${JSON.stringify(a.exceptionDetails)}`);return a.result?.value}async function Ep(t,e){let r=(await t.send("Target.attachToTarget",{targetId:e,flatten:!0})).sessionId;if(typeof r!="string")throw new Error("Target.attachToTarget returned no sessionId");return r}async function Rp(t){let e=t.userDataDir?(await Nt(t.userDataDir,{recursive:!0}),t.userDataDir):await cp(B(pp(),"inkly-capture-agent-")),n=B(e,"chrome.log"),r=await eo(n,"a"),a=["--remote-debugging-port=0",`--user-data-dir=${e}`,`--window-size=${t.width},${t.height}`,"--no-first-run","--no-default-browser-check","--disable-default-apps","--disable-background-networking","--disable-features=Translate,AutofillServerCommunication","--use-mock-keychain","--hide-scrollbars","--hide-crash-restore-bubble"];t.headless&&a.unshift("--headless=new");for(let d of["DevToolsActivePort","SingletonLock","SingletonCookie","SingletonSocket"])await Fe(B(e,d),{force:!0}).catch(()=>{});let i=Qi(t.browser,a,{detached:!0,stdio:["ignore",r.fd,r.fd]});i.unref(),await r.close();let o=B(e,"DevToolsActivePort"),s=Date.now(),c;for(i.once("exit",d=>{c=d});Date.now()-s<2e4;){if(c!==void 0)throw new Error(`Chrome exited before DevTools was ready. See ${n}`);let d=await Pe(o,"utf8").catch(()=>null);if(d){let u=d.trim().split(/\r?\n/),p=u[0],h=u[1];if(p&&h)return{pid:i.pid??null,profileDir:e,wsUrl:`ws://127.0.0.1:${p}${h}`,debuggingUrl:`http://127.0.0.1:${p}`,logPath:n}}await Lt(100)}throw new Error(`Timed out waiting for Chrome DevTools. See ${n}`)}async function $p(t){if(t.startsWith("ws://")||t.startsWith("wss://")){let a=new URL(t);return{wsUrl:t,debuggingUrl:`${a.protocol==="wss:"?"https":"http"}://${a.host}`}}let e=new URL(t),n=await fetch(new URL("/json/version",e));if(!n.ok)throw new Error(`could not read Chrome DevTools metadata from ${e.toString()}: ${n.status}`);let r=await n.json();if(typeof r.webSocketDebuggerUrl!="string")throw new Error("Chrome DevTools metadata did not include webSocketDebuggerUrl");return{wsUrl:r.webSocketDebuggerUrl,debuggingUrl:`${e.protocol}//${e.host}`}}async function Dp(t,e,n,r,a){let o=(await t.send("Target.createTarget",{url:"about:blank"})).targetId;if(typeof o!="string")throw new Error("Target.createTarget returned no targetId");let s=await Ep(t,o);await t.send("Page.enable",{},s),await t.send("Runtime.enable",{},s),await Op(t,s,o,n,r);let c=!1,d=t.on("Page.loadEventFired",(p,h)=>{h===s&&(c=!0)});await t.send("Page.navigate",{url:e},s);let u=Date.now();for(;!c&&Date.now()-u<a;)await Lt(100);return d(),await Lt(1e3),{targetId:o,sessionId:s}}async function jp(t,e){let n=await so(t,e,`JSON.stringify({
5156
+ ${n}`);return r}function Pp(t){return Ot(t,"connect-to-browser")??process.env.INKLY_CAPTURE_BROWSER_URL}function Ep(t){if(Object.prototype.hasOwnProperty.call(t,"prompt"))throw new Error("inkly capture does not accept --prompt. The external agent owns planning.")}function Wr(t,e){return ao(e)?e:Ln(t,e)}function so(){return B(Br(),".inkly","capture-agent","profiles")}function Rp(t,e){if(e.includes("/")||ao(e))return Wr(t,e);let n=e.toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64);return B(so(),n||"default")}function Ki(t,e){let n=Ln(t);for(;;){let r=B(n,e);if(Pe(r))return r;let a=Mn(n);if(a===n)return null;n=a}}async function Yi(t){let e=[t];for(;e.length>0;){let n=e.pop();if(!n)continue;let r=await no(n,{withFileTypes:!0}).catch(()=>[]);for(let a of r){let i=B(n,a.name);if(a.isDirectory()){e.push(i);continue}if(a.name==="Google Chrome for Testing"&&i.includes("Google Chrome for Testing.app/Contents/MacOS"))return i}}return null}async function $p(t,e){if(e){let s=Wr(t,e);if(Pe(s))return s;throw new Error(`Chrome binary does not exist: ${s}`)}let n=process.env.CHROME_PATH;if(n&&Pe(n))return n;let r=_p.find(s=>Pe(s));if(r)return r;let a=Ki(t,"chrome");if(a){let s=await Yi(a);if(s)return s}let i=Ki(Sp,"chrome");if(i&&i!==a){let s=await Yi(i);if(s)return s}let o=["/Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing","/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary","/Applications/Chromium.app/Contents/MacOS/Chromium","/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"];for(let s of o)if(Pe(s))return s;throw new Error("No Chrome binary found. Pass --browser /path/to/chrome.")}var Mr=class{constructor(e){this.nextId=1;this.pending=new Map;this.listeners=new Map;this.ws=new yp(e,{perMessageDeflate:!1,maxPayload:512*1024*1024}),this.ready=new Promise((n,r)=>{this.ws.once("open",()=>n()),this.ws.once("error",a=>r(a))}),this.ws.on("message",n=>{let r=JSON.parse(n.toString());if(typeof r.id=="number"&&this.pending.has(r.id)){let i=this.pending.get(r.id);if(this.pending.delete(r.id),!i)return;r.error?i.reject(new Error(`${r.error.message??"CDP error"}: ${JSON.stringify(r.error.data??"")}`)):i.resolve(r.result??{});return}if(!r.method)return;let a=this.listeners.get(r.method);if(a)for(let i of a)i(r.params,r.sessionId)})}async send(e,n={},r){await this.ready;let a=this.nextId;this.nextId+=1;let i={id:a,method:e,params:n};return r&&(i.sessionId=r),new Promise((o,s)=>{this.pending.set(a,{resolve:o,reject:s}),this.ws.send(JSON.stringify(i),c=>{c&&(this.pending.delete(a),s(c))})})}on(e,n){let r=this.listeners.get(e)??new Set;return r.add(n),this.listeners.set(e,r),()=>r.delete(n)}close(){try{this.ws.close()}catch{}}};async function lo(t,e,n,r=3e4){let a=await t.send("Runtime.evaluate",{expression:n,awaitPromise:!0,returnByValue:!0,timeout:r,userGesture:!0},e);if(a.exceptionDetails)throw new Error(`Runtime.evaluate failed: ${JSON.stringify(a.exceptionDetails)}`);return a.result?.value}async function Dp(t,e){let r=(await t.send("Target.attachToTarget",{targetId:e,flatten:!0})).sessionId;if(typeof r!="string")throw new Error("Target.attachToTarget returned no sessionId");return r}async function jp(t){let e=t.userDataDir?(await Nt(t.userDataDir,{recursive:!0}),t.userDataDir):await hp(B(fp(),"inkly-capture-agent-")),n=B(e,"chrome.log"),r=await to(n,"a"),a=["--remote-debugging-port=0",`--user-data-dir=${e}`,`--window-size=${t.width},${t.height}`,"--no-first-run","--no-default-browser-check","--disable-default-apps","--disable-background-networking","--disable-features=Translate,AutofillServerCommunication","--use-mock-keychain","--hide-scrollbars","--hide-crash-restore-bubble"];t.headless&&a.unshift("--headless=new");for(let d of["DevToolsActivePort","SingletonLock","SingletonCookie","SingletonSocket"])await Fe(B(e,d),{force:!0}).catch(()=>{});let i=eo(t.browser,a,{detached:!0,stdio:["ignore",r.fd,r.fd]});i.unref(),await r.close();let o=B(e,"DevToolsActivePort"),s=Date.now(),c;for(i.once("exit",d=>{c=d});Date.now()-s<2e4;){if(c!==void 0)throw new Error(`Chrome exited before DevTools was ready. See ${n}`);let d=await Ee(o,"utf8").catch(()=>null);if(d){let u=d.trim().split(/\r?\n/),p=u[0],h=u[1];if(p&&h)return{pid:i.pid??null,profileDir:e,wsUrl:`ws://127.0.0.1:${p}${h}`,debuggingUrl:`http://127.0.0.1:${p}`,logPath:n}}await Lt(100)}throw new Error(`Timed out waiting for Chrome DevTools. See ${n}`)}async function Op(t){if(t.startsWith("ws://")||t.startsWith("wss://")){let a=new URL(t);return{wsUrl:t,debuggingUrl:`${a.protocol==="wss:"?"https":"http"}://${a.host}`}}let e=new URL(t),n=await fetch(new URL("/json/version",e));if(!n.ok)throw new Error(`could not read Chrome DevTools metadata from ${e.toString()}: ${n.status}`);let r=await n.json();if(typeof r.webSocketDebuggerUrl!="string")throw new Error("Chrome DevTools metadata did not include webSocketDebuggerUrl");return{wsUrl:r.webSocketDebuggerUrl,debuggingUrl:`${e.protocol}//${e.host}`}}async function Np(t,e,n,r,a){let o=(await t.send("Target.createTarget",{url:"about:blank"})).targetId;if(typeof o!="string")throw new Error("Target.createTarget returned no targetId");let s=await Dp(t,o);await t.send("Page.enable",{},s),await t.send("Runtime.enable",{},s),await zp(t,s,o,n,r);let c=!1,d=t.on("Page.loadEventFired",(p,h)=>{h===s&&(c=!0)});await t.send("Page.navigate",{url:e},s);let u=Date.now();for(;!c&&Date.now()-u<a;)await Lt(100);return d(),await Lt(1e3),{targetId:o,sessionId:s}}async function Lp(t,e){let n=await lo(t,e,`JSON.stringify({
5154
5157
  innerWidth: window.innerWidth,
5155
5158
  innerHeight: window.innerHeight,
5156
5159
  outerWidth: window.outerWidth,
5157
5160
  outerHeight: window.outerHeight
5158
- })`,5e3),r=JSON.parse(String(n)),a={innerWidth:Number(r.innerWidth),innerHeight:Number(r.innerHeight),outerWidth:Number(r.outerWidth),outerHeight:Number(r.outerHeight)};if(!Number.isFinite(a.innerWidth)||!Number.isFinite(a.innerHeight)||!Number.isFinite(a.outerWidth)||!Number.isFinite(a.outerHeight))throw new Error(`could not measure Chrome viewport: ${JSON.stringify(r)}`);return a}async function Op(t,e,n,r,a){try{let o=(await t.send("Browser.getWindowForTarget",{targetId:n})).windowId;if(typeof o!="number")throw new Error("Browser.getWindowForTarget returned no windowId");for(let s=0;s<4;s+=1){let c=await jp(t,e),d=Math.max(0,c.outerWidth-c.innerWidth),u=Math.max(0,c.outerHeight-c.innerHeight),p=r+d,h=a+u;if(Math.abs(c.innerWidth-r)<=1&&Math.abs(c.innerHeight-a)<=1)return;await t.send("Browser.setWindowBounds",{windowId:o,bounds:{windowState:"normal",width:p,height:h}}),await Lt(250)}}catch{}await t.send("Emulation.setDeviceMetricsOverride",{width:r,height:a,deviceScaleFactor:1,mobile:!1},e).catch(()=>{}),await Lt(100)}function Np(t){return t.toLowerCase().replace(/['"]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)||"captured-demo"}function Lp(t){return`${Np(t)}-${Math.random().toString(36).slice(2,8)}`}function Hr(t){return lp("sha256").update(t).digest("hex")}function zp(t,e){return`# ${e}
5161
+ })`,5e3),r=JSON.parse(String(n)),a={innerWidth:Number(r.innerWidth),innerHeight:Number(r.innerHeight),outerWidth:Number(r.outerWidth),outerHeight:Number(r.outerHeight)};if(!Number.isFinite(a.innerWidth)||!Number.isFinite(a.innerHeight)||!Number.isFinite(a.outerWidth)||!Number.isFinite(a.outerHeight))throw new Error(`could not measure Chrome viewport: ${JSON.stringify(r)}`);return a}async function zp(t,e,n,r,a){try{let o=(await t.send("Browser.getWindowForTarget",{targetId:n})).windowId;if(typeof o!="number")throw new Error("Browser.getWindowForTarget returned no windowId");for(let s=0;s<4;s+=1){let c=await Lp(t,e),d=Math.max(0,c.outerWidth-c.innerWidth),u=Math.max(0,c.outerHeight-c.innerHeight),p=r+d,h=a+u;if(Math.abs(c.innerWidth-r)<=1&&Math.abs(c.innerHeight-a)<=1)return;await t.send("Browser.setWindowBounds",{windowId:o,bounds:{windowState:"normal",width:p,height:h}}),await Lt(250)}}catch{}await t.send("Emulation.setDeviceMetricsOverride",{width:r,height:a,deviceScaleFactor:1,mobile:!1},e).catch(()=>{}),await Lt(100)}function Mp(t){return t.toLowerCase().replace(/['"]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)||"captured-demo"}function Up(t){return`${Mp(t)}-${Math.random().toString(36).slice(2,8)}`}function Vr(t){return up("sha256").update(t).digest("hex")}function Fp(t,e){return`# ${e}
5159
5162
 
5160
5163
  This folder is a self-contained Inkly demo captured with the Inkly CLI
5161
5164
  agent runtime. It works locally with \`inkly-cli\` \u2014 no upload needed.
@@ -5177,9 +5180,9 @@ agent runtime. It works locally with \`inkly-cli\` \u2014 no upload needed.
5177
5180
  - \`${t}/assets.json\` \u2014 maps each \`asset:<id>\` to a file in \`public/\`.
5178
5181
  - \`${t}/public/<file>\` \u2014 captured image/video bytes.
5179
5182
  - \`${t}/snapshots/snap-NNN/index.html\` \u2014 captured HTML snapshots, when present.
5180
- `}function Up(t){switch(t.toLowerCase().split(";")[0]?.trim()){case"image/png":return"png";case"image/jpeg":case"image/jpg":return"jpg";case"image/webp":return"webp";case"image/gif":return"gif";case"image/svg+xml":return"svg";case"image/avif":return"avif";case"image/x-icon":case"image/vnd.microsoft.icon":return"ico";case"font/woff":return"woff";case"font/woff2":return"woff2";case"font/ttf":case"application/x-font-ttf":return"ttf";case"video/webm":return"webm";case"video/mp4":return"mp4";case"audio/mpeg":return"mp3";case"text/html":return"html";case"text/css":return"css";case"text/javascript":case"application/javascript":case"application/x-javascript":return"js";default:return"bin"}}async function Mp(t,e,n,r,a){let i=new TextDecoder,o=new TextEncoder,s=new Map,c=0,d=0,u=0,p=" ";if(a.subsetFonts){let h=new Set;for(let y of Object.values(r)){let k=y["index.html"];if(!k)continue;let v=i.decode(k).replace(/<style[\s\S]*?<\/style>/gi," ").replace(/<[^>]+>/g," ");for(let C of v)h.add(C)}for(let y of" 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,:;!?@#$%&*()-_=+[]{}/\\|<>'\"`~\u2019\u201C\u201D\u2014\u2013\u2026\u2022\u2192")h.add(y);p=Array.from(h).join("")}for(let h of e){let y=h.publicUrl;if(!y)continue;let k=y.split("/").pop();if(!k)continue;let v=n[k];if(!v)continue;let C=null,$="",O="",E=(h.contentType??"").toLowerCase();try{if(a.compressImages&&h.kind==="image"&&/^image\/(png|jpe?g)$/.test(E)){let W=await gp(Buffer.from(v)).webp({quality:80}).toBuffer();W.length<v.byteLength&&(C=W,$="webp",O="image/webp")}else if(a.subsetFonts&&h.kind==="font"){let W=await bp(Buffer.from(v),p,{targetFormat:"woff2"});W.length<v.byteLength&&(C=W,$="woff2",O="font/woff2")}}catch{C=null}if(!C)continue;let g=new Uint8Array(C),N=Hr(g),L=`${N.slice(0,16)}.${$}`,D=`/${t}/${L}`;u+=v.byteLength-g.byteLength,h.kind==="image"?c+=1:d+=1,delete n[k],n[L]=g,h.id===k&&(h.id=L),s.set(y,D),h.sha256=N,h.size=g.byteLength,h.contentType=O,h.publicUrl=D}if(s.size)for(let h of Object.values(r)){let y=h;for(let k of Object.keys(y)){let v=i.decode(y[k]);for(let[C,$]of s)v=v.split(C).join($);y[k]=o.encode(v)}}return{images:c,fonts:d,savedBytes:u}}async function Fp(t){let{name:e,screens:n,autoApplyZoom:r=!0,compressImages:a=!1,subsetFonts:i=!1}=t;if(n.length===0)throw new Error("No screens captured.");let o=Lp(e),s=[],c=[],d={},u={},p=[],h=[],y=new TextEncoder,k=0;async function v(E,g,N,L,D){let W=Hr(E),Y=D??`${W}.${Up(g)}`;d[Y]=E,k+=1;let be=N==="other"?Y:`cap-${String(k).padStart(3,"0")}`;return s.push({id:be,sha256:W,kind:N==="other"?mn(g):N,contentType:g,size:E.byteLength,viewport:L?{w:L.width,h:L.height}:void 0,file:Y}),be}for(let[E,g]of n.entries()){let N=`s${E+1}`,L=null;if(g.kind!=="html"){if(g.kind==="video"&&g.videoPath){let D=new Uint8Array(await Pe(g.videoPath));L=await v(D,"video/webm","video",g.viewport);let W;if(g.posterPngPath){let Y=new Uint8Array(await Pe(g.posterPngPath));W=await v(Y,"image/png","image",g.viewport)}p.push(qn({stepId:N,kind:"video",assetId:L,posterAssetId:W,naturalWidth:g.naturalSize.width,naturalHeight:g.naturalSize.height,sourceUrl:g.sourceUrl||void 0,title:g.title||void 0,click:g.click,autoApplyZoom:r,isLast:E===n.length-1})),h.push(g.click?.label||g.title||`Step ${E+1}`)}else{if(!g.pngPath)continue;let D=new Uint8Array(await Pe(g.pngPath));L=await v(D,"image/png","image",g.viewport),p.push(qn({stepId:N,kind:"image",assetId:L,naturalWidth:g.naturalSize.width,naturalHeight:g.naturalSize.height,sourceUrl:g.sourceUrl||void 0,title:g.title||void 0,click:g.click,autoApplyZoom:r,isLast:E===n.length-1})),h.push(g.click?.label||g.title||`Step ${E+1}`)}c.push({index:E,id:ga(E),assetId:L,sourceUrl:g.sourceUrl,capturedAt:g.capturedAt,naturalWidth:g.naturalSize.width,naturalHeight:g.naturalSize.height,precedingClick:g.click})}}if(p.length===0)throw new Error("No usable screens captured.");(a||i)&&await Mp(o,s,d,u,{compressImages:a,subsetFonts:i});let C=bn({id:ne(),version:1,title:e,steps:p}),$=_t.parse({version:1,assets:s,screens:c}),O={"README.md":y.encode(zp(o,e)),[o]:{"demo.config.json":y.encode(`${JSON.stringify(C,null,2)}
5181
- `),"assets.json":y.encode(`${JSON.stringify($,null,2)}
5182
- `),public:d,snapshots:u}};return{bytes:mp(O,{level:6}),filename:`${o}.zip`,slug:o,stepCount:n.length,labels:h}}function Hp(t){return t?{x:t.x,y:t.y,alphaId:t.alphaId??void 0,label:t.label}:null}async function Bp(t){let{name:e,screens:n}=t,r=n.filter(c=>c.kind==="html"&&c.htmlPath);if(r.length===0)throw new Error("No HTML screens captured.");let a=r.map((c,d)=>c.click?.label||c.title||`Step ${d+1}`);xp();let i=[],o=new Map;for(let c of r){let d=await Pe(c.htmlPath,"utf8"),u=await Zi(d,c.sourceUrl||"");for(let p of u.assets)o.has(p.filename)||o.set(p.filename,{filename:p.filename,sha256:Hr(p.bytes),contentType:p.contentType,bytes:p.bytes});i.push({htmlText:u.html,cssText:u.css,viewport:{width:c.naturalSize.width,height:c.naturalSize.height},scroll:c.scroll??{x:0,y:0,maxX:0,maxY:0},url:c.sourceUrl||"",click:Hp(c.click)})}return{...await Gi({name:e,steps:i,assets:[...o.values()]}),stepCount:r.length,labels:a}}var Xi=`(() => {
5183
+ `}function Hp(t){switch(t.toLowerCase().split(";")[0]?.trim()){case"image/png":return"png";case"image/jpeg":case"image/jpg":return"jpg";case"image/webp":return"webp";case"image/gif":return"gif";case"image/svg+xml":return"svg";case"image/avif":return"avif";case"image/x-icon":case"image/vnd.microsoft.icon":return"ico";case"font/woff":return"woff";case"font/woff2":return"woff2";case"font/ttf":case"application/x-font-ttf":return"ttf";case"video/webm":return"webm";case"video/mp4":return"mp4";case"audio/mpeg":return"mp3";case"text/html":return"html";case"text/css":return"css";case"text/javascript":case"application/javascript":case"application/x-javascript":return"js";default:return"bin"}}async function Bp(t,e,n,r,a){let i=new TextDecoder,o=new TextEncoder,s=new Map,c=0,d=0,u=0,p=" ";if(a.subsetFonts){let h=new Set;for(let f of Object.values(r)){let w=f["index.html"];if(!w)continue;let k=i.decode(w).replace(/<style[\s\S]*?<\/style>/gi," ").replace(/<[^>]+>/g," ");for(let C of k)h.add(C)}for(let f of" 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,:;!?@#$%&*()-_=+[]{}/\\|<>'\"`~\u2019\u201C\u201D\u2014\u2013\u2026\u2022\u2192")h.add(f);p=Array.from(h).join("")}for(let h of e){let f=h.publicUrl;if(!f)continue;let w=f.split("/").pop();if(!w)continue;let k=n[w];if(!k)continue;let C=null,$="",N="",E=(h.contentType??"").toLowerCase();try{if(a.compressImages&&h.kind==="image"&&/^image\/(png|jpe?g)$/.test(E)){let W=await xp(Buffer.from(k)).webp({quality:80}).toBuffer();W.length<k.byteLength&&(C=W,$="webp",N="image/webp")}else if(a.subsetFonts&&h.kind==="font"){let W=await kp(Buffer.from(k),p,{targetFormat:"woff2"});W.length<k.byteLength&&(C=W,$="woff2",N="font/woff2")}}catch{C=null}if(!C)continue;let b=new Uint8Array(C),L=Vr(b),z=`${L.slice(0,16)}.${$}`,D=`/${t}/${z}`;u+=k.byteLength-b.byteLength,h.kind==="image"?c+=1:d+=1,delete n[w],n[z]=b,h.id===w&&(h.id=z),s.set(f,D),h.sha256=L,h.size=b.byteLength,h.contentType=N,h.publicUrl=D}if(s.size)for(let h of Object.values(r)){let f=h;for(let w of Object.keys(f)){let k=i.decode(f[w]);for(let[C,$]of s)k=k.split(C).join($);f[w]=o.encode(k)}}return{images:c,fonts:d,savedBytes:u}}async function Wp(t){let{name:e,screens:n,autoApplyZoom:r=!0,compressImages:a=!1,subsetFonts:i=!1}=t;if(n.length===0)throw new Error("No screens captured.");let o=Up(e),s=[],c=[],d={},u={},p=[],h=[],f=new TextEncoder,w=0;async function k(E,b,L,z,D){let W=Vr(E),X=D??`${W}.${Hp(b)}`;d[X]=E,w+=1;let ye=L==="other"?X:`cap-${String(w).padStart(3,"0")}`;return s.push({id:ye,sha256:W,kind:L==="other"?mn(b):L,contentType:b,size:E.byteLength,viewport:z?{w:z.width,h:z.height}:void 0,file:X}),ye}for(let[E,b]of n.entries()){let L=`s${E+1}`,z=null;if(b.kind!=="html"){if(b.kind==="video"&&b.videoPath){let D=new Uint8Array(await Ee(b.videoPath));z=await k(D,"video/webm","video",b.viewport);let W;if(b.posterPngPath){let X=new Uint8Array(await Ee(b.posterPngPath));W=await k(X,"image/png","image",b.viewport)}p.push(Yn({stepId:L,kind:"video",assetId:z,posterAssetId:W,naturalWidth:b.naturalSize.width,naturalHeight:b.naturalSize.height,sourceUrl:b.sourceUrl||void 0,title:b.title||void 0,click:b.click,autoApplyZoom:r,isLast:E===n.length-1})),h.push(b.click?.label||b.title||`Step ${E+1}`)}else{if(!b.pngPath)continue;let D=new Uint8Array(await Ee(b.pngPath));z=await k(D,"image/png","image",b.viewport),p.push(Yn({stepId:L,kind:"image",assetId:z,naturalWidth:b.naturalSize.width,naturalHeight:b.naturalSize.height,sourceUrl:b.sourceUrl||void 0,title:b.title||void 0,click:b.click,autoApplyZoom:r,isLast:E===n.length-1})),h.push(b.click?.label||b.title||`Step ${E+1}`)}c.push({index:E,id:xa(E),assetId:z,sourceUrl:b.sourceUrl,capturedAt:b.capturedAt,naturalWidth:b.naturalSize.width,naturalHeight:b.naturalSize.height,precedingClick:b.click})}}if(p.length===0)throw new Error("No usable screens captured.");(a||i)&&await Bp(o,s,d,u,{compressImages:a,subsetFonts:i});let C=bn({id:ne(),version:1,title:e,steps:p}),$=_t.parse({version:1,assets:s,screens:c}),N={"README.md":f.encode(Fp(o,e)),[o]:{"demo.config.json":f.encode(`${JSON.stringify(C,null,2)}
5184
+ `),"assets.json":f.encode(`${JSON.stringify($,null,2)}
5185
+ `),public:d,snapshots:u}};return{bytes:bp(N,{level:6}),filename:`${o}.zip`,slug:o,stepCount:n.length,labels:h}}function Vp(t){return t?{x:t.x,y:t.y,alphaId:t.alphaId??void 0,label:t.label}:null}async function Jp(t){let{name:e,screens:n}=t,r=n.filter(c=>c.kind==="html"&&c.htmlPath);if(r.length===0)throw new Error("No HTML screens captured.");let a=r.map((c,d)=>c.click?.label||c.title||`Step ${d+1}`);vp();let i=[],o=new Map;for(let c of r){let d=await Ee(c.htmlPath,"utf8"),u=await Zi(d,c.sourceUrl||"");for(let p of u.assets)o.has(p.filename)||o.set(p.filename,{filename:p.filename,sha256:Vr(p.bytes),contentType:p.contentType,bytes:p.bytes});i.push({htmlText:u.html,cssText:u.css,viewport:{width:c.naturalSize.width,height:c.naturalSize.height},scroll:c.scroll??{x:0,y:0,maxX:0,maxY:0},url:c.sourceUrl||"",click:Vp(c.click)})}return{...await Gi({name:e,steps:i,assets:[...o.values()]}),stepCount:r.length,labels:a}}var Xi=`(() => {
5183
5186
  if (window.__inklyCliRecorderInstalled) return;
5184
5187
  window.__inklyCliRecorderInstalled = true;
5185
5188
  window.__inklyCliLastClick = null;
@@ -5363,7 +5366,7 @@ function selectorFor(el) {
5363
5366
  window.addEventListener("scroll", onMotionScroll, true);
5364
5367
  window.addEventListener("wheel", onMotionScroll, true);
5365
5368
  window.addEventListener("touchmove", onMotionScroll, true);
5366
- })();`;async function Wp(t,e,n=!1){n&&(await t.send("Runtime.addBinding",{name:"__inklyCliCaptureEvent"},e).catch(()=>{}),await t.send("Runtime.addBinding",{name:"__inklyCliCaptureClick"},e).catch(()=>{})),await t.send("Page.addScriptToEvaluateOnNewDocument",{source:Xi},e),await so(t,e,Xi,5e3).catch(()=>{})}var Vp="__inklySingleFileFetch",kb=`(() => {
5369
+ })();`;async function Zp(t,e,n=!1){n&&(await t.send("Runtime.addBinding",{name:"__inklyCliCaptureEvent"},e).catch(()=>{}),await t.send("Runtime.addBinding",{name:"__inklyCliCaptureClick"},e).catch(()=>{})),await t.send("Page.addScriptToEvaluateOnNewDocument",{source:Xi},e),await lo(t,e,Xi,5e3).catch(()=>{})}var Gp="__inklySingleFileFetch",Ab=`(() => {
5367
5370
  if (globalThis.__inklyFetchInstalled) return;
5368
5371
  globalThis.__inklyFetchInstalled = true;
5369
5372
  const pending = new Map();
@@ -5383,7 +5386,7 @@ function selectorFor(el) {
5383
5386
  const id = nextId++;
5384
5387
  pending.set(id, { resolve, reject });
5385
5388
  try {
5386
- globalThis.${Vp}(JSON.stringify({
5389
+ globalThis.${Gp}(JSON.stringify({
5387
5390
  id,
5388
5391
  url: String(url),
5389
5392
  options: {
@@ -5406,13 +5409,14 @@ function selectorFor(el) {
5406
5409
  return viaNode(url, options);
5407
5410
  }
5408
5411
  };
5409
- })();`;var wb=Math.max(6e4,Number(process.env.INKLY_CAPTURE_TIMEOUT_MS)||24e4);function Br(){return B(process.env.INKLY_CAPTURE_AGENT_HOME||B(Mr(),".inkly"),"capture-agent","sessions")}function Jp(t){return B(process.env.INKLY_CAPTURE_AGENT_HOME||B(Mr(),".inkly"),"capture-agent","captures",t)}async function Zp(t,e){await Nt(e,{recursive:!0});let n=B(e,"listener.log"),r=await eo(n,"a"),a=ao(import.meta.url),i=B(Ln(a),"capture-listener.js"),o=Qi(process.execPath,[i,"--session",t],{detached:!0,stdio:["ignore",r.fd,r.fd]});return o.unref(),await r.close(),{pid:o.pid??null,logPath:n}}async function Gp(t,e){let n=Date.now();for(;Date.now()-n<e;){let r=await zt(t).catch(()=>null);if(r?.cliListenerReadyAt)return r;await Lt(100)}return zt(t)}function zn(t){if(!/^[a-zA-Z0-9._:-]+$/.test(t))throw new Error(`invalid session id: ${t}`);return B(Br(),`${t}.json`)}function Wr(t){return B(Br(),`${t}.listener.json`)}async function qp(t,e){await K(Wr(t),`${JSON.stringify(e,null,2)}
5410
- `)}async function Kp(t){try{let e=await Pe(Wr(t),"utf8");return JSON.parse(e)}catch{return null}}async function Yp(t){await K(zn(t.id),`${JSON.stringify(t,null,2)}
5411
- `)}async function zt(t){let e=await Pe(zn(t),"utf8");return JSON.parse(e)}async function Lr(t){await Fe(zn(t),{force:!0}),await Fe(Wr(t),{force:!0})}async function tn(t){let e=t.cliListenerPid??null;if(!e&&t.id&&(e=(await Kp(t.id))?.cliListenerPid??null),e)try{process.kill(e,"SIGTERM")}catch{}if(!t.attached){if(t.chromePid)try{process.kill(t.chromePid,"SIGTERM")}catch{}t.keepProfile||t.profileDir&&await Fe(t.profileDir,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}).catch(()=>{})}}async function Xp(t,e,n,r){let a=mt(e,"url",r),i=mt(e,"name",r);new URL(a);let o=Cp(Ot(e,"window-size")),s=o?.width??Or(e,"width",vp),c=o?.height??Or(e,"height",Sp),d=Or(e,"timeout",_p),u=Tp(e),p=Ot(e,"runtime");if(p&&p!=="cli")throw new Error("--runtime must be cli");let h=n,y=jt(e,["zoom","auto-apply-zoom"],!0),v=jt(e,["record-video","video"],!0)&&h!=="html",C=jt(e,["block-videos","block-video"],!1),$=jt(e,["compress-images","compress-image"],!1),O=jt(e,["subset-fonts","subset-font"],!1),E=jt(e,["headless"],!0)&&e.headed!==!0,g=Ot(e,"profile"),N=!u&&g?Ip(t,g):null,L=N!=null&&Ie(B(N,"Default"));if(!Number.isInteger(s)||s<320)throw new Error("--width must be an integer >= 320");if(!Number.isInteger(c)||c<240)throw new Error("--height must be an integer >= 240");if(!Number.isInteger(d)||d<1e3)throw new Error("--timeout must be an integer >= 1000");let D=u?{pid:null,profileDir:null,...await $p(u),logPath:null}:await(async()=>{let X=await Pp(t,Ot(e,"browser"));return Rp({browser:X,width:s,height:c,headless:E,timeoutMs:d,userDataDir:N})})(),W=new Nr(D.wsUrl),Y=null,be=!1,Ut=()=>{tn({id:"",runtime:"cli",createdAt:"",url:a,name:i,chromePid:D.pid,profileDir:D.profileDir,keepProfile:N!=null||!!u,browserWsUrl:D.wsUrl,browserDebuggingUrl:D.debuggingUrl,chromeLogPath:D.logPath,attached:!!u,tabId:0,tabUrl:"",targetId:"",width:s,height:c,cliScreens:[],captureDir:null,cliListenerPid:Y,cliListenerLogPath:null,cliListenerReadyAt:null}).finally(()=>{process.exit(130)})};process.on("SIGINT",Ut),process.on("SIGTERM",Ut),be=!0;let M=()=>{be&&(process.removeListener("SIGINT",Ut),process.removeListener("SIGTERM",Ut),be=!1)};try{await W.send("Target.setDiscoverTargets",{discover:!0}).catch(()=>{});let X=await Dp(W,a,s,c,d);await W.send("Target.activateTarget",{targetId:X.targetId}).catch(()=>{});let Ee=dp();await Wp(W,X.sessionId);let I=Jp(Ee),ae={id:Ee,runtime:"cli",createdAt:new Date().toISOString(),url:a,name:i,chromePid:D.pid,profileDir:D.profileDir,keepProfile:u?!0:N!=null||e["keep-profile"]===!0,browserWsUrl:D.wsUrl,browserDebuggingUrl:D.debuggingUrl,chromeLogPath:D.logPath,attached:!!u,tabId:0,tabUrl:a,targetId:X.targetId,width:s,height:c,cliScreens:[],cliCaptureKind:h,cliRecordVideo:v,cliBlockVideos:h==="html"?C:!1,cliCompressImages:h==="image"?$:!1,cliSubsetFonts:h==="image"?O:!1,autoApplyZoom:y,captureDir:I,cliListenerPid:null,cliListenerLogPath:null,cliListenerReadyAt:null};await Nt(I,{recursive:!0}),await Yp(ae);let Be=await Zp(ae.id,I);Y=Be.pid,await qp(ae.id,{cliListenerPid:Be.pid,cliListenerLogPath:Be.logPath});let w=await Gp(ae.id,5e3);if(!w.cliListenerReadyAt){let ft="";try{ft=(await Pe(Be.logPath,"utf8")).split(`
5412
+ })();`;var Ib=Math.max(6e4,Number(process.env.INKLY_CAPTURE_TIMEOUT_MS)||24e4);function Jr(){return B(process.env.INKLY_CAPTURE_AGENT_HOME||B(Br(),".inkly"),"capture-agent","sessions")}function qp(t){return B(process.env.INKLY_CAPTURE_AGENT_HOME||B(Br(),".inkly"),"capture-agent","captures",t)}async function Kp(t,e){await Nt(e,{recursive:!0});let n=B(e,"listener.log"),r=await to(n,"a"),a=io(import.meta.url),i=B(Mn(a),"capture-listener.js"),o=eo(process.execPath,[i,"--session",t],{detached:!0,stdio:["ignore",r.fd,r.fd]});return o.unref(),await r.close(),{pid:o.pid??null,logPath:n}}async function Yp(t,e){let n=Date.now();for(;Date.now()-n<e;){let r=await zt(t).catch(()=>null);if(r?.cliListenerReadyAt)return r;await Lt(100)}return zt(t)}function Un(t){if(!/^[a-zA-Z0-9._:-]+$/.test(t))throw new Error(`invalid session id: ${t}`);return B(Jr(),`${t}.json`)}function Zr(t){return B(Jr(),`${t}.listener.json`)}async function Xp(t,e){await Y(Zr(t),`${JSON.stringify(e,null,2)}
5413
+ `)}async function Qp(t){try{let e=await Ee(Zr(t),"utf8");return JSON.parse(e)}catch{return null}}async function eh(t){await Y(Un(t.id),`${JSON.stringify(t,null,2)}
5414
+ `)}async function zt(t){let e=await Ee(Un(t),"utf8");return JSON.parse(e)}async function Ur(t){await Fe(Un(t),{force:!0}),await Fe(Zr(t),{force:!0})}function co(t){try{return process.kill(t,0),!0}catch{return!1}}async function Qi(t){let e=(n,r)=>{try{process.kill(n,r)}catch{}};e(-t,"SIGTERM"),e(t,"SIGTERM");for(let n=0;n<8&&co(t);n+=1)await new Promise(r=>setTimeout(r,100));e(-t,"SIGKILL"),e(t,"SIGKILL")}async function th(t){if(!t||!t.includes("inkly"))return;let e=await new Promise(n=>{cp("pgrep",["-f","--",t],{timeout:4e3},(r,a)=>{let i=String(a||"").split(`
5415
+ `).map(o=>Number(o.trim())).filter(o=>Number.isInteger(o)&&o>0&&o!==process.pid);n(i)})});for(let n of e)try{process.kill(n,"SIGKILL")}catch{}}async function tn(t){let e=t.cliListenerPid??null;!e&&t.id&&(e=(await Qp(t.id))?.cliListenerPid??null),e&&await Qi(e),!t.attached&&(t.chromePid&&await Qi(t.chromePid),await th(t.profileDir),t.keepProfile||t.profileDir&&await Fe(t.profileDir,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}).catch(()=>{}))}async function nh(t,e,n,r){let a=mt(e,"url",r),i=mt(e,"name",r);new URL(a);let o=Ip(Ot(e,"window-size")),s=o?.width??zr(e,"width",Cp),c=o?.height??zr(e,"height",Tp),d=zr(e,"timeout",Ap),u=Pp(e),p=Ot(e,"runtime");if(p&&p!=="cli")throw new Error("--runtime must be cli");let h=n,f=jt(e,["zoom","auto-apply-zoom"],!0),k=jt(e,["record-video","video"],!0)&&h!=="html",C=jt(e,["block-videos","block-video"],!1),$=jt(e,["compress-images","compress-image"],!1),N=jt(e,["subset-fonts","subset-font"],!1),E=jt(e,["headless"],!0)&&e.headed!==!0,b=Ot(e,"profile"),L=!u&&b?Rp(t,b):null,z=L!=null&&Pe(B(L,"Default"));if(!Number.isInteger(s)||s<320)throw new Error("--width must be an integer >= 320");if(!Number.isInteger(c)||c<240)throw new Error("--height must be an integer >= 240");if(!Number.isInteger(d)||d<1e3)throw new Error("--timeout must be an integer >= 1000");let D=u?{pid:null,profileDir:null,...await Op(u),logPath:null}:await(async()=>{let G=await $p(t,Ot(e,"browser"));return jp({browser:G,width:s,height:c,headless:E,timeoutMs:d,userDataDir:L})})(),W=new Mr(D.wsUrl),X=null,ye=!1,Mt=()=>{tn({id:"",runtime:"cli",createdAt:"",url:a,name:i,chromePid:D.pid,profileDir:D.profileDir,keepProfile:L!=null||!!u,browserWsUrl:D.wsUrl,browserDebuggingUrl:D.debuggingUrl,chromeLogPath:D.logPath,attached:!!u,tabId:0,tabUrl:"",targetId:"",width:s,height:c,cliScreens:[],captureDir:null,cliListenerPid:X,cliListenerLogPath:null,cliListenerReadyAt:null}).finally(()=>{process.exit(130)})};process.on("SIGINT",Mt),process.on("SIGTERM",Mt),ye=!0;let j=()=>{ye&&(process.removeListener("SIGINT",Mt),process.removeListener("SIGTERM",Mt),ye=!1)};try{await W.send("Target.setDiscoverTargets",{discover:!0}).catch(()=>{});let G=await Np(W,a,s,c,d);await W.send("Target.activateTarget",{targetId:G.targetId}).catch(()=>{});let ue=pp();await Zp(W,G.sessionId);let I=qp(ue),ae={id:ue,runtime:"cli",createdAt:new Date().toISOString(),url:a,name:i,chromePid:D.pid,profileDir:D.profileDir,keepProfile:u?!0:L!=null||e["keep-profile"]===!0,browserWsUrl:D.wsUrl,browserDebuggingUrl:D.debuggingUrl,chromeLogPath:D.logPath,attached:!!u,tabId:0,tabUrl:a,targetId:G.targetId,width:s,height:c,cliScreens:[],cliCaptureKind:h,cliRecordVideo:k,cliBlockVideos:h==="html"?C:!1,cliCompressImages:h==="image"?$:!1,cliSubsetFonts:h==="image"?N:!1,autoApplyZoom:f,captureDir:I,cliListenerPid:null,cliListenerLogPath:null,cliListenerReadyAt:null};await Nt(I,{recursive:!0}),await eh(ae);let Be=await Kp(ae.id,I);X=Be.pid,await Xp(ae.id,{cliListenerPid:Be.pid,cliListenerLogPath:Be.logPath});let v=await Yp(ae.id,5e3);if(!v.cliListenerReadyAt){let ft="";try{ft=(await Ee(Be.logPath,"utf8")).split(`
5412
5416
  `).filter(Boolean).slice(-12).join(`
5413
5417
  `)}catch{}throw new Error(`capture recorder failed to arm within 5s (listenerReadyAt is null). Every click would be silently dropped, so this session is unusable. Listener log (${Be.logPath}):
5414
- ${ft||"(empty)"}`)}return await H("inkly_cli_capture_session_started",{runtime:"cli",capture_kind:w.cliCaptureKind??h,record_video:w.cliRecordVideo===!0,auto_apply_zoom:w.autoApplyZoom!==!1,window_width:w.width,window_height:w.height,headless:u?null:E,attached:w.attached,persistent_profile:N!=null,profile_reused:L,connect_to_browser:!!u}),M(),He({ok:!0,mode:"cli",session:{id:w.id,stateFile:zn(w.id),createdAt:w.createdAt},browser:{pid:w.chromePid,debuggingUrl:w.browserDebuggingUrl,webSocketDebuggerUrl:w.browserWsUrl,headless:u?null:E,attached:w.attached,profile:N?{dir:N,persistent:!0,reused:L}:null},tab:{targetId:w.targetId,url:w.tabUrl},capture:{kind:w.cliCaptureKind??"image",video:w.cliRecordVideo===!0,recordVideo:w.cliRecordVideo===!0,autoApplyZoom:w.autoApplyZoom!==!1,window:{width:w.width,height:w.height},stepCount:0,automatic:!0,listenerPid:w.cliListenerPid??Be.pid,listenerReadyAt:w.cliListenerReadyAt}}),0}catch(X){throw await tn({id:"",runtime:"cli",createdAt:"",url:a,name:i,chromePid:D.pid,profileDir:D.profileDir,keepProfile:N!=null||!!u,browserWsUrl:D.wsUrl,browserDebuggingUrl:D.debuggingUrl,chromeLogPath:D.logPath,attached:!!u,tabId:0,tabUrl:"",targetId:"",width:s,height:c,cliScreens:[],captureDir:null,cliListenerPid:Y,cliListenerLogPath:null,cliListenerReadyAt:null}),X}finally{M(),W.close()}}async function Qp(t,e){let n=hp(new Uint8Array(t)),r=On(e);await Nt(r,{recursive:!0});for(let[a,i]of Object.entries(n)){let o=a.replace(/\\/g,"/");if(!o||o.endsWith("/"))continue;let s=On(r,o);if(s!==r&&!s.startsWith(r+up))throw new Error(`Unsafe zip entry: ${a}`);await Nt(Ln(s),{recursive:!0}),await no(s,Buffer.from(i))}}async function eh(t,e,n){let r=mt(e,"session",n),a=mt(e,"out",n),i=Fr(t,a),o=await zt(r),s=await Jr(r),c=Nn(o.cliScreens??[],s);if(c.length===0)return await tn(o),o.captureDir&&await Fe(o.captureDir,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}).catch(()=>{}),await Lr(o.id),await zr(o.id),await H("inkly_cli_capture_session_stopped",{runtime:"cli",capture_kind:o.cliCaptureKind??"image",step_count:0,output_bytes:0,unpacked:!1,record_video:o.cliRecordVideo===!0,auto_apply_zoom:o.autoApplyZoom!==!1}),He({ok:!1,mode:"cli",session:{id:o.id},error:"No steps captured \u2014 nothing to export. Each step comes from a click driven over CDP; the initial page load is not a step. The session has been cleaned up, so no `cancel` is needed.",output:{zipPath:null,demoDir:null,bytes:0,stepCount:0}}),1;let u=o.cliCaptureKind==="html"?await Bp({name:o.name,screens:c}):await Fp({name:o.name,screens:c,autoApplyZoom:o.autoApplyZoom!==!1,compressImages:o.cliCompressImages===!0,subsetFonts:o.cliSubsetFonts===!0});await Nt(i,{recursive:!0});let p=Buffer.from(u.bytes),h=B(i,u.filename);await no(h,p);let y=null;return e["no-unpack"]!==!0&&(await Qp(p,i),y=B(i,u.slug)),await tn(o),o.captureDir&&await Fe(o.captureDir,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}).catch(()=>{}),await Lr(o.id),await zr(o.id),await H("inkly_cli_capture_session_stopped",{runtime:"cli",capture_kind:o.cliCaptureKind??"image",step_count:u.stepCount,output_bytes:p.byteLength,unpacked:e["no-unpack"]!==!0,record_video:o.cliRecordVideo===!0,auto_apply_zoom:o.autoApplyZoom!==!1}),He({ok:!0,mode:"cli",session:{id:o.id},output:{zipPath:h,demoDir:y,bytes:p.byteLength,stepCount:u.stepCount,stepLabels:u.labels}}),0}async function th(t,e){let n=mt(t,"session",e),r=await zt(n);return await tn(r),r.captureDir&&await Fe(r.captureDir,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}).catch(()=>{}),await Lr(r.id),await zr(r.id),await H("inkly_cli_capture_session_cancelled",{runtime:"cli",capture_kind:r.cliCaptureKind??"image",step_count:r.cliScreens?.length??0,record_video:r.cliRecordVideo===!0,auto_apply_zoom:r.autoApplyZoom!==!1}),He({ok:!0,mode:"cli",session:{id:r.id}}),0}function lo(t){return t.pngPath||t.videoPath||t.htmlPath||t.posterPngPath||`t:${t.capturedAt??""}`}function Vr(t){return B(Br(),`${t}.undo.json`)}async function Jr(t){try{let e=JSON.parse(await Pe(Vr(t),"utf8"));return Array.isArray(e.droppedKeys)?e.droppedKeys.filter(n=>typeof n=="string"):[]}catch{return[]}}function Nn(t,e){if(e.length===0)return t;let n=new Set(e);return t.filter(r=>!n.has(lo(r)))}async function zr(t){await Fe(Vr(t),{force:!0}).catch(()=>{})}function Ur(t,e){return t.click?.label||t.title||`Step ${e+1}`}async function nh(t,e){let n=mt(t,"session",e),r=await zt(n),a=await Jr(n),i=Nn(r.cliScreens??[],a);if(i.length===0)return He({ok:!1,mode:"cli",session:{id:r.id},error:"No recorded step to undo.",capture:{stepCount:0}}),1;let o=i[i.length-1],s=Ur(o,i.length-1);a.push(lo(o)),await K(Vr(n),`${JSON.stringify({droppedKeys:a},null,2)}
5415
- `);let c=Nn(r.cliScreens??[],a);return He({ok:!0,mode:"cli",session:{id:r.id},capture:{undone:s,stepCount:c.length,stepLabels:c.map((d,u)=>Ur(d,u))}}),0}async function rh(t,e){let n=mt(t,"session",e),r=await zt(n),a=await Jr(n),i=Nn(r.cliScreens??[],a),o=i.map((c,d)=>Ur(c,d)),s=i.map((c,d)=>({index:d+1,label:o[d],url:c.sourceUrl||null,kind:c.kind??"image"}));return He({ok:!0,mode:"cli",session:{id:r.id},capture:{kind:r.cliCaptureKind??"image",ready:!!r.cliListenerReadyAt,listenerReadyAt:r.cliListenerReadyAt??null,stepCount:i.length,stepLabels:o,lastLabel:o[o.length-1]??null,steps:s}}),0}async function Un(t){let{cwd:e,subcommand:n,args:r,kind:a,usage:i}=t;switch(Ap(r),await H("inkly_cli_capture_command_invoked",{capture_kind:a,subcommand:n??"(none)"}),n){case"start":return Xp(e,r,a,i);case"stop":return eh(e,r,i);case"cancel":return th(r,i);case"status":return rh(r,i);case"undo":return nh(r,i);case"profiles":return ah();default:return process.stdout.write(i),1}}async function ah(){let t=oo(),e=await to(t,{withFileTypes:!0}).catch(()=>[]),n=[];for(let r of e){if(!r.isDirectory())continue;let a=B(t,r.name),i=Ie(B(a,"Default")),o=Ie(B(a,"Default","Network","Cookies"))||Ie(B(a,"Default","Cookies"));n.push({name:r.name,dir:a,initialized:i,hasCookies:o})}return await H("inkly_cli_capture_profiles_listed",{profile_count:n.length,initialized_count:n.filter(r=>r.initialized).length,cookie_count:n.filter(r=>r.hasCookies).length}),He({ok:!0,profilesDir:t,profiles:n}),0}async function co(t){let{cwd:e,subcommand:n,args:r}=t;if(r.html===!0)throw new Error("inkly capture is image/video only. For HTML snapshot capture use `inkly capture-html`.");for(let a of["block-videos","block-video","compress-images","compress-image","subset-fonts","subset-font"])if(Object.prototype.hasOwnProperty.call(r,a))throw new Error(`--${a} only applies to HTML capture. Use \`inkly capture-html --${a}\`.`);return Un({cwd:e,subcommand:n,args:r,kind:"image",usage:nn})}async function uo(t){let{cwd:e,subcommand:n,args:r}=t;return Un({cwd:e,subcommand:n,args:r,kind:"html",usage:rn})}var ho=`inkly \u2014 Inkly CLI
5418
+ ${ft||"(empty)"}`)}return await H("inkly_cli_capture_session_started",{runtime:"cli",capture_kind:v.cliCaptureKind??h,record_video:v.cliRecordVideo===!0,auto_apply_zoom:v.autoApplyZoom!==!1,window_width:v.width,window_height:v.height,headless:u?null:E,attached:v.attached,persistent_profile:L!=null,profile_reused:z,connect_to_browser:!!u}),j(),He({ok:!0,mode:"cli",session:{id:v.id,stateFile:Un(v.id),createdAt:v.createdAt},browser:{pid:v.chromePid,debuggingUrl:v.browserDebuggingUrl,webSocketDebuggerUrl:v.browserWsUrl,headless:u?null:E,attached:v.attached,profile:L?{dir:L,persistent:!0,reused:z}:null},tab:{targetId:v.targetId,url:v.tabUrl},capture:{kind:v.cliCaptureKind??"image",video:v.cliRecordVideo===!0,recordVideo:v.cliRecordVideo===!0,autoApplyZoom:v.autoApplyZoom!==!1,window:{width:v.width,height:v.height},stepCount:0,automatic:!0,listenerPid:v.cliListenerPid??Be.pid,listenerReadyAt:v.cliListenerReadyAt}}),0}catch(G){throw await tn({id:"",runtime:"cli",createdAt:"",url:a,name:i,chromePid:D.pid,profileDir:D.profileDir,keepProfile:L!=null||!!u,browserWsUrl:D.wsUrl,browserDebuggingUrl:D.debuggingUrl,chromeLogPath:D.logPath,attached:!!u,tabId:0,tabUrl:"",targetId:"",width:s,height:c,cliScreens:[],captureDir:null,cliListenerPid:X,cliListenerLogPath:null,cliListenerReadyAt:null}),G}finally{j(),W.close()}}async function rh(t,e){let n=gp(new Uint8Array(t)),r=Ln(e);await Nt(r,{recursive:!0});for(let[a,i]of Object.entries(n)){let o=a.replace(/\\/g,"/");if(!o||o.endsWith("/"))continue;let s=Ln(r,o);if(s!==r&&!s.startsWith(r+mp))throw new Error(`Unsafe zip entry: ${a}`);await Nt(Mn(s),{recursive:!0}),await ro(s,Buffer.from(i))}}async function ah(t,e,n){let r=mt(e,"session",n),a=mt(e,"out",n),i=Wr(t,a),o=await zt(r),s=await qr(r),c=zn(o.cliScreens??[],s);if(c.length===0)return await tn(o),o.captureDir&&await Fe(o.captureDir,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}).catch(()=>{}),await Ur(o.id),await Fr(o.id),await H("inkly_cli_capture_session_stopped",{runtime:"cli",capture_kind:o.cliCaptureKind??"image",step_count:0,output_bytes:0,unpacked:!1,record_video:o.cliRecordVideo===!0,auto_apply_zoom:o.autoApplyZoom!==!1}),He({ok:!1,mode:"cli",session:{id:o.id},error:"No steps captured \u2014 nothing to export. Each step comes from a click driven over CDP; the initial page load is not a step. The session has been cleaned up, so no `cancel` is needed.",output:{zipPath:null,demoDir:null,bytes:0,stepCount:0}}),1;let u=o.cliCaptureKind==="html"?await Jp({name:o.name,screens:c}):await Wp({name:o.name,screens:c,autoApplyZoom:o.autoApplyZoom!==!1,compressImages:o.cliCompressImages===!0,subsetFonts:o.cliSubsetFonts===!0});await Nt(i,{recursive:!0});let p=Buffer.from(u.bytes),h=B(i,u.filename);await ro(h,p);let f=null;return e["no-unpack"]!==!0&&(await rh(p,i),f=B(i,u.slug)),await tn(o),o.captureDir&&await Fe(o.captureDir,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}).catch(()=>{}),await Ur(o.id),await Fr(o.id),await H("inkly_cli_capture_session_stopped",{runtime:"cli",capture_kind:o.cliCaptureKind??"image",step_count:u.stepCount,output_bytes:p.byteLength,unpacked:e["no-unpack"]!==!0,record_video:o.cliRecordVideo===!0,auto_apply_zoom:o.autoApplyZoom!==!1}),He({ok:!0,mode:"cli",session:{id:o.id},output:{zipPath:h,demoDir:f,bytes:p.byteLength,stepCount:u.stepCount,stepLabels:u.labels}}),0}async function ih(t,e){let n=mt(t,"session",e),r=await zt(n);return await tn(r),r.captureDir&&await Fe(r.captureDir,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}).catch(()=>{}),await Ur(r.id),await Fr(r.id),await H("inkly_cli_capture_session_cancelled",{runtime:"cli",capture_kind:r.cliCaptureKind??"image",step_count:r.cliScreens?.length??0,record_video:r.cliRecordVideo===!0,auto_apply_zoom:r.autoApplyZoom!==!1}),He({ok:!0,mode:"cli",session:{id:r.id}}),0}function uo(t){return t.pngPath||t.videoPath||t.htmlPath||t.posterPngPath||`t:${t.capturedAt??""}`}function Gr(t){return B(Jr(),`${t}.undo.json`)}async function qr(t){try{let e=JSON.parse(await Ee(Gr(t),"utf8"));return Array.isArray(e.droppedKeys)?e.droppedKeys.filter(n=>typeof n=="string"):[]}catch{return[]}}function zn(t,e){if(e.length===0)return t;let n=new Set(e);return t.filter(r=>!n.has(uo(r)))}async function Fr(t){await Fe(Gr(t),{force:!0}).catch(()=>{})}function Hr(t,e){return t.click?.label||t.title||`Step ${e+1}`}async function oh(t,e){let n=mt(t,"session",e),r=await zt(n),a=await qr(n),i=zn(r.cliScreens??[],a);if(i.length===0)return He({ok:!1,mode:"cli",session:{id:r.id},error:"No recorded step to undo.",capture:{stepCount:0}}),1;let o=i[i.length-1],s=Hr(o,i.length-1);a.push(uo(o)),await Y(Gr(n),`${JSON.stringify({droppedKeys:a},null,2)}
5419
+ `);let c=zn(r.cliScreens??[],a);return He({ok:!0,mode:"cli",session:{id:r.id},capture:{undone:s,stepCount:c.length,stepLabels:c.map((d,u)=>Hr(d,u))}}),0}async function sh(t,e){let n=mt(t,"session",e),r=await zt(n),a=await qr(n),i=zn(r.cliScreens??[],a),o=i.map((c,d)=>Hr(c,d)),s=i.map((c,d)=>({index:d+1,label:o[d],url:c.sourceUrl||null,kind:c.kind??"image"}));return He({ok:!0,mode:"cli",session:{id:r.id},capture:{kind:r.cliCaptureKind??"image",ready:!!r.cliListenerReadyAt,browserAlive:r.attached?null:!!(r.chromePid&&co(r.chromePid)),listenerReadyAt:r.cliListenerReadyAt??null,stepCount:i.length,stepLabels:o,lastLabel:o[o.length-1]??null,steps:s}}),0}async function Fn(t){let{cwd:e,subcommand:n,args:r,kind:a,usage:i}=t;switch(Ep(r),await H("inkly_cli_capture_command_invoked",{capture_kind:a,subcommand:n??"(none)"}),n){case"start":return nh(e,r,a,i);case"stop":return ah(e,r,i);case"cancel":return ih(r,i);case"status":return sh(r,i);case"undo":return oh(r,i);case"profiles":return lh();default:return process.stdout.write(i),1}}async function lh(){let t=so(),e=await no(t,{withFileTypes:!0}).catch(()=>[]),n=[];for(let r of e){if(!r.isDirectory())continue;let a=B(t,r.name),i=Pe(B(a,"Default")),o=Pe(B(a,"Default","Network","Cookies"))||Pe(B(a,"Default","Cookies"));n.push({name:r.name,dir:a,initialized:i,hasCookies:o})}return await H("inkly_cli_capture_profiles_listed",{profile_count:n.length,initialized_count:n.filter(r=>r.initialized).length,cookie_count:n.filter(r=>r.hasCookies).length}),He({ok:!0,profilesDir:t,profiles:n}),0}async function po(t){let{cwd:e,subcommand:n,args:r}=t;if(r.html===!0)throw new Error("inkly capture is image/video only. For HTML snapshot capture use `inkly capture-html`.");for(let a of["block-videos","block-video","compress-images","compress-image","subset-fonts","subset-font"])if(Object.prototype.hasOwnProperty.call(r,a))throw new Error(`--${a} only applies to HTML capture. Use \`inkly capture-html --${a}\`.`);return Fn({cwd:e,subcommand:n,args:r,kind:"image",usage:nn})}async function ho(t){let{cwd:e,subcommand:n,args:r}=t;return Fn({cwd:e,subcommand:n,args:r,kind:"html",usage:rn})}var fo=`inkly \u2014 Inkly CLI
5416
5420
 
5417
5421
  Usage:
5418
5422
  inkly init <name> [--layout <layout>] Scaffold a new demo hub.
@@ -5434,7 +5438,7 @@ Usage:
5434
5438
  inkly help [command] Show CLI help.
5435
5439
 
5436
5440
  Run \`inkly <command> --help\` for more.
5437
- `,Gr=`inkly init \u2014 scaffold a new demo hub
5441
+ `,Yr=`inkly init \u2014 scaffold a new demo hub
5438
5442
 
5439
5443
  Usage:
5440
5444
  inkly init <name> [--layout <layout>]
@@ -5445,7 +5449,7 @@ Arguments:
5445
5449
  Options:
5446
5450
  --layout <layout> Hub index layout to write to inkly.json.
5447
5451
  One of: sidebar, tabs.
5448
- `,mo=`inkly add \u2014 scaffold a new demo in the current hub
5452
+ `,go=`inkly add \u2014 scaffold a new demo in the current hub
5449
5453
 
5450
5454
  Usage:
5451
5455
  inkly add <name> [--collection <name>]
@@ -5459,7 +5463,7 @@ Options:
5459
5463
  --collection <name> Add the demo to this collection in inkly.json.
5460
5464
  Creates the collection if it doesn't exist. When
5461
5465
  omitted, the demo is not added to any collection.
5462
- `,fo=`inkly demo \u2014 alias of \`inkly add\`
5466
+ `,bo=`inkly demo \u2014 alias of \`inkly add\`
5463
5467
 
5464
5468
  Usage:
5465
5469
  inkly demo <slug> [--collection <name>]
@@ -5471,7 +5475,7 @@ Options:
5471
5475
  --collection <name> Add the demo to this collection in inkly.json.
5472
5476
  Creates the collection if it doesn't exist. When
5473
5477
  omitted, the demo is not added to any collection.
5474
- `,go=`inkly validate \u2014 validate a demo hub
5478
+ `,yo=`inkly validate \u2014 validate a demo hub
5475
5479
 
5476
5480
  Usage:
5477
5481
  inkly validate [--json] [--strict]
@@ -5479,7 +5483,7 @@ Usage:
5479
5483
  Options:
5480
5484
  --json Print machine-readable JSON.
5481
5485
  --strict Treat warnings as failures.
5482
- `,bo=`inkly lock \u2014 pin the runtime via inkly.lock
5486
+ `,xo=`inkly lock \u2014 pin the runtime via inkly.lock
5483
5487
 
5484
5488
  Usage:
5485
5489
  inkly lock [--json] [--local <path>]
@@ -5500,7 +5504,7 @@ Environment:
5500
5504
  BUNDLES_R2_PUBLIC_BASE_URL
5501
5505
  Override the bundles bucket's public base URL
5502
5506
  (default https://www.runtime.inklyai.dev). Useful for staging.
5503
- `,yo=`inkly login \u2014 connect to the hosted app
5507
+ `,ko=`inkly login \u2014 connect to the hosted app
5504
5508
 
5505
5509
  Usage:
5506
5510
  inkly login [--no-open]
@@ -5512,11 +5516,11 @@ overridden on the command line.
5512
5516
  Options:
5513
5517
  --no-open Print the grant URL without opening a browser.
5514
5518
  --token <token> Automation fallback: save an existing API token.
5515
- `,xo=`inkly logout \u2014 remove saved platform API credentials
5519
+ `,wo=`inkly logout \u2014 remove saved platform API credentials
5516
5520
 
5517
5521
  Usage:
5518
5522
  inkly logout
5519
- `,ko=`inkly sync \u2014 upload local capture blobs to CDN
5523
+ `,vo=`inkly sync \u2014 upload local capture blobs to CDN
5520
5524
 
5521
5525
  Usage:
5522
5526
  inkly sync [--demo <slug>] [--dry-run] [--json]
@@ -5525,7 +5529,7 @@ Options:
5525
5529
  --demo <slug> Sync one demo instead of every demo.
5526
5530
  --dry-run Report pending uploads without changing files.
5527
5531
  --json Print machine-readable JSON.
5528
- `,wo=`inkly snapshot \u2014 publish a standalone snapshot of one demo
5532
+ `,So=`inkly snapshot \u2014 publish a standalone snapshot of one demo
5529
5533
 
5530
5534
  Usage:
5531
5535
  inkly snapshot <demo-path> [--json]
@@ -5542,7 +5546,7 @@ Arguments:
5542
5546
  Options:
5543
5547
  --demo <slug> Select the demo by slug instead of by path.
5544
5548
  --json Print machine-readable JSON.
5545
- `,vo=`inkly dev \u2014 start the local preview server
5549
+ `,_o=`inkly dev \u2014 start the local preview server
5546
5550
 
5547
5551
  Usage:
5548
5552
  inkly dev [<path>] [--port <n>]
@@ -5558,33 +5562,33 @@ Arguments:
5558
5562
  Options:
5559
5563
  --port <n> Preferred port. Defaults to 3000; if taken, the CLI
5560
5564
  tries the next available port. Must be 1-65535.
5561
- `,So=`inkly update \u2014 update the globally installed CLI
5565
+ `,Co=`inkly update \u2014 update the globally installed CLI
5562
5566
 
5563
5567
  Usage:
5564
5568
  inkly update [--dry-run]
5565
5569
 
5566
5570
  Options:
5567
5571
  --dry-run Print the update command without running it.
5568
- `,_o=`inkly doctor \u2014 run local diagnostics
5572
+ `,To=`inkly doctor \u2014 run local diagnostics
5569
5573
 
5570
5574
  Usage:
5571
5575
  inkly doctor [--json]
5572
5576
 
5573
5577
  Options:
5574
5578
  --json Print machine-readable JSON.
5575
- `,Co=`inkly status \u2014 show local CLI status
5579
+ `,Ao=`inkly status \u2014 show local CLI status
5576
5580
 
5577
5581
  Usage:
5578
5582
  inkly status [--json]
5579
5583
 
5580
5584
  Options:
5581
5585
  --json Print machine-readable JSON.
5582
- `,To=`inkly version \u2014 print the CLI version
5586
+ `,Io=`inkly version \u2014 print the CLI version
5583
5587
 
5584
5588
  Usage:
5585
5589
  inkly version
5586
5590
  inkly --version
5587
- `,qr=`inkly help \u2014 show command help
5591
+ `,Xr=`inkly help \u2014 show command help
5588
5592
 
5589
5593
  Usage:
5590
5594
  inkly help [command]
@@ -5608,25 +5612,25 @@ Commands:
5608
5612
  capture Capture an image/video walkthrough for an agent.
5609
5613
  capture-html
5610
5614
  Capture a self-contained HTML walkthrough for an agent.
5611
- `,dh={add:mo,demo:fo,dev:vo,doctor:_o,capture:nn,"capture-html":rn,help:qr,init:Gr,lock:bo,login:yo,logout:xo,snapshot:wo,status:Co,sync:ko,update:So,validate:go,version:To};function ch(t,e){let n=sh(t)?t:lh(e,t);if(Zr(n))try{if(oh(n).isFile())return n;let a=po(n,"manifest.json");if(Zr(a))return a;let i=po(n,"dist","manifest.json");if(Zr(i))return i}catch{}return n}function an(t,e){if(!Object.prototype.hasOwnProperty.call(t,e))return;let n=t[e];return typeof n=="string"?n:""}function uh(t){let e=new Set(["_","api-base","token","url","name","out","session"]);return Object.keys(t).filter(n=>!e.has(n)).filter(n=>t[n]!==!1&&t[n]!==void 0).sort()}async function ph(t){let e=ih(t,{alias:{h:"help",p:"port",v:"version"},boolean:["auto-apply-zoom","block-videos","check","compress-images","dry-run","headed","headless","html","help","json","keep-profile","no-open","no-unpack","record-video","strict","subset-fonts","version","video","zoom"],string:["browser","collection","connect-to-browser","demo","height","layout","local","name","out","port","profile","runtime","session","timeout","token","url","width","window-size"]}),[n,...r]=e._,a=n??(e.version?"version":e.help?"help":"(none)");if(await H("inkly_cli_invoked",{command:a,subcommand:typeof r[0]=="string"?r[0]:void 0,option_keys:uh(e),json:!!e.json,help:!!e.help}),e.version&&!n)return await fr(),0;if(!n||e.help&&!n)return process.stdout.write(ho),e.help?0:1;switch(n){case"help":{let i=r[0];if(!i)return process.stdout.write(qr),0;let o=dh[i];return o?(process.stdout.write(o),0):(process.stderr.write(`inkly help: unknown command "${i}"
5612
-
5613
- ${qr}`),1)}case"init":{if(e.help)return process.stdout.write(Gr),0;let i=r[0];if(!i)return process.stderr.write(`inkly init: missing <name> argument
5614
-
5615
- `+Gr),1;let o=an(e,"layout");try{return await Ka({name:i,cwd:process.cwd(),layout:o}),0}catch(s){return process.stderr.write(`inkly init failed: ${s.message}
5616
- `),await H("inkly_cli_failed",{command:"init"}),await re("init",s),1}}case"add":case"demo":{let i=n==="add"?mo:fo;if(e.help)return process.stdout.write(i),0;let o=r[0];if(!o)return process.stderr.write(`inkly ${n}: missing <name> argument
5617
-
5618
- `+i),1;let s=typeof e.collection=="string"&&e.collection.length>0?e.collection:void 0;try{return await ci({slug:o,cwd:process.cwd(),collection:s}),0}catch(c){return process.stderr.write(`inkly ${n} failed: ${c.message}
5619
- `),await H("inkly_cli_failed",{command:n}),await re(n,c),1}}case"validate":return e.help?(process.stdout.write(go),0):(await An({cwd:process.cwd(),json:!!e.json,strict:!!e.strict})).ok?0:1;case"lock":{if(e.help)return process.stdout.write(bo),0;try{let i=an(e,"local");return(await zi({cwd:process.cwd(),check:!!e.check,json:!!e.json,manifestPath:i?ch(i,process.cwd()):void 0})).ok?0:1}catch(i){return process.stderr.write(`inkly lock failed: ${i.message}
5620
- `),await H("inkly_cli_failed",{command:"lock"}),await re("lock",i),1}}case"version":return e.help?(process.stdout.write(To),0):(await fr(),0);case"update":{if(e.help)return process.stdout.write(So),0;try{return await pi({dryRun:!!e["dry-run"]}),0}catch(i){return process.stderr.write(`inkly update failed: ${i.message}
5621
- `),await H("inkly_cli_failed",{command:"update"}),await re("update",i),1}}case"doctor":return e.help?(process.stdout.write(_o),0):(await gi({cwd:process.cwd(),json:!!e.json})).ok?0:1;case"login":{if(e.help)return process.stdout.write(yo),0;try{return await vi({cwd:process.cwd(),local:process.env.INKLY_LOCAL==="1",token:an(e,"token"),open:!e["no-open"]}),0}catch(i){return process.stderr.write(`inkly login failed: ${i.message}
5622
- `),await H("inkly_cli_failed",{command:"login"}),await re("login",i),1}}case"logout":return e.help?(process.stdout.write(xo),0):(await Si(),0);case"status":return e.help?(process.stdout.write(Co),0):(await _i({cwd:process.cwd(),json:!!e.json})).loggedIn?0:1;case"sync":{if(e.help)return process.stdout.write(ko),0;try{return await $n({cwd:process.cwd(),demo:an(e,"demo"),dryRun:!!e["dry-run"],json:!!e.json}),0}catch(i){return process.stderr.write(`inkly sync failed: ${i.message}
5623
- `),await H("inkly_cli_failed",{command:"sync"}),await re("sync",i),1}}case"snapshot":{if(e.help)return process.stdout.write(wo),0;try{return await ji({cwd:process.cwd(),path:r[0],demo:an(e,"demo"),json:!!e.json}),0}catch(i){return process.stderr.write(`inkly snapshot failed: ${i.message}
5624
- `),await H("inkly_cli_failed",{command:"snapshot"}),await re("snapshot",i),1}}case"capture":{if(e.help)return process.stdout.write(nn),0;try{return await co({cwd:process.cwd(),subcommand:r[0],args:e})}catch(i){return process.stderr.write(`inkly capture failed: ${i.message}
5625
- `),await H("inkly_cli_failed",{command:"capture",subcommand:r[0]}),await re("capture",i),1}}case"capture-html":{if(e.help)return process.stdout.write(rn),0;try{return await uo({cwd:process.cwd(),subcommand:r[0],args:e})}catch(i){return process.stderr.write(`inkly capture-html failed: ${i.message}
5626
- `),await H("inkly_cli_failed",{command:"capture-html",subcommand:r[0]}),await re("capture-html",i),1}}case"dev":{if(e.help)return process.stdout.write(vo),0;let i=e.port,o=typeof i=="number"?i:typeof i=="string"?Number(i):3e3;if(!Number.isInteger(o)||o<1||o>65535)return process.stderr.write(`inkly dev: invalid --port value; expected an integer from 1 to 65535
5627
- `),1;try{let s=await si({cwd:process.cwd(),port:o,path:r[0]});return await new Promise(c=>{let d=()=>{s.close().catch(u=>{process.stderr.write(`inkly dev: error during shutdown: ${u.message}
5615
+ `,hh={add:go,demo:bo,dev:_o,doctor:To,capture:nn,"capture-html":rn,help:Xr,init:Yr,lock:xo,login:ko,logout:wo,snapshot:So,status:Ao,sync:vo,update:Co,validate:yo,version:Io};function mh(t,e){let n=uh(t)?t:ph(e,t);if(Kr(n))try{if(ch(n).isFile())return n;let a=mo(n,"manifest.json");if(Kr(a))return a;let i=mo(n,"dist","manifest.json");if(Kr(i))return i}catch{}return n}function an(t,e){if(!Object.prototype.hasOwnProperty.call(t,e))return;let n=t[e];return typeof n=="string"?n:""}function fh(t){let e=new Set(["_","api-base","token","url","name","out","session"]);return Object.keys(t).filter(n=>!e.has(n)).filter(n=>t[n]!==!1&&t[n]!==void 0).sort()}async function gh(t){let e=dh(t,{alias:{h:"help",p:"port",v:"version"},boolean:["auto-apply-zoom","block-videos","check","compress-images","dry-run","headed","headless","html","help","json","keep-profile","no-open","no-unpack","record-video","strict","subset-fonts","version","video","zoom"],string:["browser","collection","connect-to-browser","demo","height","layout","local","name","out","port","profile","runtime","session","timeout","token","url","width","window-size"]}),[n,...r]=e._,a=n??(e.version?"version":e.help?"help":"(none)");if(await H("inkly_cli_invoked",{command:a,subcommand:typeof r[0]=="string"?r[0]:void 0,option_keys:fh(e),json:!!e.json,help:!!e.help}),e.version&&!n)return await xr(),0;if(!n||e.help&&!n)return process.stdout.write(fo),e.help?0:1;switch(n){case"help":{let i=r[0];if(!i)return process.stdout.write(Xr),0;let o=hh[i];return o?(process.stdout.write(o),0):(process.stderr.write(`inkly help: unknown command "${i}"
5616
+
5617
+ ${Xr}`),1)}case"init":{if(e.help)return process.stdout.write(Yr),0;let i=r[0];if(!i)return process.stderr.write(`inkly init: missing <name> argument
5618
+
5619
+ `+Yr),1;let o=an(e,"layout");try{return await ei({name:i,cwd:process.cwd(),layout:o}),0}catch(s){return process.stderr.write(`inkly init failed: ${s.message}
5620
+ `),await H("inkly_cli_failed",{command:"init"}),await re("init",s),1}}case"add":case"demo":{let i=n==="add"?go:bo;if(e.help)return process.stdout.write(i),0;let o=r[0];if(!o)return process.stderr.write(`inkly ${n}: missing <name> argument
5621
+
5622
+ `+i),1;let s=typeof e.collection=="string"&&e.collection.length>0?e.collection:void 0;try{return await mi({slug:o,cwd:process.cwd(),collection:s}),0}catch(c){return process.stderr.write(`inkly ${n} failed: ${c.message}
5623
+ `),await H("inkly_cli_failed",{command:n}),await re(n,c),1}}case"validate":return e.help?(process.stdout.write(yo),0):(await Pn({cwd:process.cwd(),json:!!e.json,strict:!!e.strict})).ok?0:1;case"lock":{if(e.help)return process.stdout.write(xo),0;try{let i=an(e,"local");return(await Sn({cwd:process.cwd(),check:!!e.check,json:!!e.json,manifestPath:i?mh(i,process.cwd()):void 0})).ok?0:1}catch(i){return process.stderr.write(`inkly lock failed: ${i.message}
5624
+ `),await H("inkly_cli_failed",{command:"lock"}),await re("lock",i),1}}case"version":return e.help?(process.stdout.write(Io),0):(await xr(),0);case"update":{if(e.help)return process.stdout.write(Co),0;try{return await gi({dryRun:!!e["dry-run"]}),0}catch(i){return process.stderr.write(`inkly update failed: ${i.message}
5625
+ `),await H("inkly_cli_failed",{command:"update"}),await re("update",i),1}}case"doctor":return e.help?(process.stdout.write(To),0):(await ki({cwd:process.cwd(),json:!!e.json})).ok?0:1;case"login":{if(e.help)return process.stdout.write(ko),0;try{return await Ti({cwd:process.cwd(),local:process.env.INKLY_LOCAL==="1",token:an(e,"token"),open:!e["no-open"]}),0}catch(i){return process.stderr.write(`inkly login failed: ${i.message}
5626
+ `),await H("inkly_cli_failed",{command:"login"}),await re("login",i),1}}case"logout":return e.help?(process.stdout.write(wo),0):(await Ai(),0);case"status":return e.help?(process.stdout.write(Ao),0):(await Ii({cwd:process.cwd(),json:!!e.json})).loggedIn?0:1;case"sync":{if(e.help)return process.stdout.write(vo),0;try{return await jn({cwd:process.cwd(),demo:an(e,"demo"),dryRun:!!e["dry-run"],json:!!e.json}),0}catch(i){return process.stderr.write(`inkly sync failed: ${i.message}
5627
+ `),await H("inkly_cli_failed",{command:"sync"}),await re("sync",i),1}}case"snapshot":{if(e.help)return process.stdout.write(So),0;try{return await zi({cwd:process.cwd(),path:r[0],demo:an(e,"demo"),json:!!e.json}),0}catch(i){return process.stderr.write(`inkly snapshot failed: ${i.message}
5628
+ `),await H("inkly_cli_failed",{command:"snapshot"}),await re("snapshot",i),1}}case"capture":{if(e.help)return process.stdout.write(nn),0;try{return await po({cwd:process.cwd(),subcommand:r[0],args:e})}catch(i){return process.stderr.write(`inkly capture failed: ${i.message}
5629
+ `),await H("inkly_cli_failed",{command:"capture",subcommand:r[0]}),await re("capture",i),1}}case"capture-html":{if(e.help)return process.stdout.write(rn),0;try{return await ho({cwd:process.cwd(),subcommand:r[0],args:e})}catch(i){return process.stderr.write(`inkly capture-html failed: ${i.message}
5630
+ `),await H("inkly_cli_failed",{command:"capture-html",subcommand:r[0]}),await re("capture-html",i),1}}case"dev":{if(e.help)return process.stdout.write(_o),0;let i=e.port,o=typeof i=="number"?i:typeof i=="string"?Number(i):3e3;if(!Number.isInteger(o)||o<1||o>65535)return process.stderr.write(`inkly dev: invalid --port value; expected an integer from 1 to 65535
5631
+ `),1;try{let s=await ui({cwd:process.cwd(),port:o,path:r[0]});return await new Promise(c=>{let d=()=>{s.close().catch(u=>{process.stderr.write(`inkly dev: error during shutdown: ${u.message}
5628
5632
  `),H("inkly_cli_failed",{command:"dev.shutdown"}),re("dev.shutdown",u)}).finally(()=>c())};process.once("SIGINT",d),process.once("SIGTERM",d)}),0}catch(s){return process.stderr.write(`inkly dev failed: ${s.message}
5629
5633
  `),await H("inkly_cli_failed",{command:"dev"}),await re("dev",s),1}}default:return process.stderr.write(`inkly: unknown command "${n}"
5630
5634
 
5631
- ${ho}`),1}}Ui();ph(process.argv.slice(2)).then(async t=>{await H("inkly_cli_exited",{command:process.argv[2]??"(none)",exit_code:t}),await vr(),await Mi(),process.exit(t)},async t=>{process.stderr.write(`inkly: ${t.message}
5632
- `),await H("inkly_cli_failed",{command:"main"}),await re("main",t),await vr(),process.exit(1)});
5635
+ ${fo}`),1}}Mi();gh(process.argv.slice(2)).then(async t=>{await H("inkly_cli_exited",{command:process.argv[2]??"(none)",exit_code:t}),await Tr(),await Ui(),process.exit(t)},async t=>{process.stderr.write(`inkly: ${t.message}
5636
+ `),await H("inkly_cli_failed",{command:"main"}),await re("main",t),await Tr(),process.exit(1)});