@inkly-org/cli 0.7.2 → 0.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/capture-listener.js +31 -29
- package/dist/cli.js +221 -177
- package/dist/skills/inkly/SKILL.md +6 -6
- package/package.json +3 -1
- package/skills/inkly/SKILL.md +6 -6
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var Wo=Object.defineProperty;var Vo=(e,t)=>{for(var n in t)Wo(e,n,{get:t[n],enumerable:!0})};import qh from"mri";import{existsSync as li,statSync as Zh}from"fs";import{isAbsolute as Gh,join as Io,resolve as Kh}from"path";import{Buffer as Vc}from"buffer";import{mkdir as la,writeFile as Jc,access as qc}from"fs/promises";import{dirname as Zc,join as Gc,resolve as Kc,sep as ca}from"path";var l={};Vo(l,{BRAND:()=>bs,DIRTY:()=>Xe,EMPTY_PATH:()=>Go,INVALID:()=>v,NEVER:()=>tl,OK:()=>Y,ParseStatus:()=>Z,Schema:()=>T,ZodAny:()=>Fe,ZodArray:()=>Ee,ZodBigInt:()=>et,ZodBoolean:()=>tt,ZodBranded:()=>Kt,ZodCatch:()=>pt,ZodDate:()=>nt,ZodDefault:()=>ut,ZodDiscriminatedUnion:()=>bn,ZodEffects:()=>ue,ZodEnum:()=>ct,ZodError:()=>re,ZodFirstPartyTypeKind:()=>S,ZodFunction:()=>xn,ZodIntersection:()=>ot,ZodIssueCode:()=>m,ZodLazy:()=>st,ZodLiteral:()=>lt,ZodMap:()=>It,ZodNaN:()=>Et,ZodNativeEnum:()=>dt,ZodNever:()=>he,ZodNull:()=>it,ZodNullable:()=>ke,ZodNumber:()=>Qe,ZodObject:()=>ie,ZodOptional:()=>ce,ZodParsedType:()=>y,ZodPipeline:()=>Yt,ZodPromise:()=>He,ZodReadonly:()=>ht,ZodRecord:()=>yn,ZodSchema:()=>T,ZodSet:()=>Pt,ZodString:()=>ze,ZodSymbol:()=>Tt,ZodTransformer:()=>ue,ZodTuple:()=>xe,ZodType:()=>T,ZodUndefined:()=>rt,ZodUnion:()=>at,ZodUnknown:()=>Pe,ZodVoid:()=>At,addIssueToContext:()=>g,any:()=>Ts,array:()=>Es,bigint:()=>ws,boolean:()=>wi,coerce:()=>el,custom:()=>yi,date:()=>vs,datetimeRegex:()=>gi,defaultErrorMap:()=>Ae,discriminatedUnion:()=>Ns,effect:()=>Js,enum:()=>Bs,function:()=>zs,getErrorMap:()=>St,getParsedType:()=>ye,instanceof:()=>xs,intersection:()=>Ms,isAborted:()=>fn,isAsync:()=>_t,isDirty:()=>gn,isValid:()=>Ue,late:()=>ys,lazy:()=>Fs,literal:()=>Hs,makeIssue:()=>Gt,map:()=>js,nan:()=>ks,nativeEnum:()=>Ws,never:()=>Is,null:()=>Cs,nullable:()=>Zs,number:()=>ki,object:()=>Rs,objectUtil:()=>er,oboolean:()=>Qs,onumber:()=>Xs,optional:()=>qs,ostring:()=>Ys,pipeline:()=>Ks,preprocess:()=>Gs,promise:()=>Vs,quotelessJson:()=>Jo,record:()=>Os,set:()=>Us,setErrorMap:()=>Zo,strictObject:()=>$s,string:()=>xi,symbol:()=>Ss,transformer:()=>Js,tuple:()=>Ls,undefined:()=>_s,union:()=>Ds,unknown:()=>As,util:()=>I,void:()=>Ps});var I;(function(e){e.assertEqual=i=>{};function t(i){}e.assertIs=t;function n(i){throw new Error}e.assertNever=n,e.arrayToEnum=i=>{let a={};for(let o of i)a[o]=o;return a},e.getValidEnumValues=i=>{let a=e.objectKeys(i).filter(s=>typeof i[i[s]]!="number"),o={};for(let s of a)o[s]=i[s];return e.objectValues(o)},e.objectValues=i=>e.objectKeys(i).map(function(a){return i[a]}),e.objectKeys=typeof Object.keys=="function"?i=>Object.keys(i):i=>{let a=[];for(let o in i)Object.prototype.hasOwnProperty.call(i,o)&&a.push(o);return a},e.find=(i,a)=>{for(let o of i)if(a(o))return o},e.isInteger=typeof Number.isInteger=="function"?i=>Number.isInteger(i):i=>typeof i=="number"&&Number.isFinite(i)&&Math.floor(i)===i;function r(i,a=" | "){return i.map(o=>typeof o=="string"?`'${o}'`:o).join(a)}e.joinValues=r,e.jsonStringifyReplacer=(i,a)=>typeof a=="bigint"?a.toString():a})(I||(I={}));var er;(function(e){e.mergeShapes=(t,n)=>({...t,...n})})(er||(er={}));var y=I.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),ye=e=>{switch(typeof e){case"undefined":return y.undefined;case"string":return y.string;case"number":return Number.isNaN(e)?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(e)?y.array:e===null?y.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?y.promise:typeof Map<"u"&&e instanceof Map?y.map:typeof Set<"u"&&e instanceof Set?y.set:typeof Date<"u"&&e instanceof Date?y.date:y.object;default:return y.unknown}};var m=I.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"]),Jo=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:"),re=class e extends Error{get errors(){return this.issues}constructor(t){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=t}format(t){let n=t||function(a){return a.message},r={_errors:[]},i=a=>{for(let o of a.issues)if(o.code==="invalid_union")o.unionErrors.map(i);else if(o.code==="invalid_return_type")i(o.returnTypeError);else if(o.code==="invalid_arguments")i(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 i(this),r}static assert(t){if(!(t instanceof e))throw new Error(`Not a ZodError: ${t}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,I.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(t=n=>n.message){let n={},r=[];for(let i of this.issues)if(i.path.length>0){let a=i.path[0];n[a]=n[a]||[],n[a].push(t(i))}else r.push(t(i));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}};re.create=e=>new re(e);var qo=(e,t)=>{let n;switch(e.code){case m.invalid_type:e.received===y.undefined?n="Required":n=`Expected ${e.expected}, received ${e.received}`;break;case m.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,I.jsonStringifyReplacer)}`;break;case m.unrecognized_keys:n=`Unrecognized key(s) in object: ${I.joinValues(e.keys,", ")}`;break;case m.invalid_union:n="Invalid input";break;case m.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${I.joinValues(e.options)}`;break;case m.invalid_enum_value:n=`Invalid enum value. Expected ${I.joinValues(e.options)}, received '${e.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 e.validation=="object"?"includes"in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:I.assertNever(e.validation):e.validation!=="regex"?n=`Invalid ${e.validation}`:n="Invalid";break;case m.too_small:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="bigint"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:n="Invalid input";break;case m.too_big:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?n=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.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 ${e.multipleOf}`;break;case m.not_finite:n="Number must be finite";break;default:n=t.defaultError,I.assertNever(e)}return{message:n}},Ae=qo;var ui=Ae;function Zo(e){ui=e}function St(){return ui}var Gt=e=>{let{data:t,path:n,errorMaps:r,issueData:i}=e,a=[...n,...i.path||[]],o={...i,path:a};if(i.message!==void 0)return{...i,path:a,message:i.message};let s="",c=r.filter(d=>!!d).slice().reverse();for(let d of c)s=d(o,{data:t,defaultError:s}).message;return{...i,path:a,message:s}},Go=[];function g(e,t){let n=St(),r=Gt({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===Ae?void 0:Ae].filter(i=>!!i)});e.common.issues.push(r)}var Z=class e{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(t,n){let r=[];for(let i of n){if(i.status==="aborted")return v;i.status==="dirty"&&t.dirty(),r.push(i.value)}return{status:t.value,value:r}}static async mergeObjectAsync(t,n){let r=[];for(let i of n){let a=await i.key,o=await i.value;r.push({key:a,value:o})}return e.mergeObjectSync(t,r)}static mergeObjectSync(t,n){let r={};for(let i of n){let{key:a,value:o}=i;if(a.status==="aborted"||o.status==="aborted")return v;a.status==="dirty"&&t.dirty(),o.status==="dirty"&&t.dirty(),a.value!=="__proto__"&&(typeof o.value<"u"||i.alwaysSet)&&(r[a.value]=o.value)}return{status:t.value,value:r}}},v=Object.freeze({status:"aborted"}),Xe=e=>({status:"dirty",value:e}),Y=e=>({status:"valid",value:e}),fn=e=>e.status==="aborted",gn=e=>e.status==="dirty",Ue=e=>e.status==="valid",_t=e=>typeof Promise<"u"&&e instanceof Promise;var k;(function(e){e.errToObj=t=>typeof t=="string"?{message:t}:t||{},e.toString=t=>typeof t=="string"?t:t?.message})(k||(k={}));var de=class{constructor(t,n,r,i){this._cachedPath=[],this.parent=t,this.data=n,this._path=r,this._key=i}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}},pi=(e,t)=>{if(Ue(t))return{success:!0,data:t.value};if(!e.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 re(e.common.issues);return this._error=n,this._error}}};function C(e){if(!e)return{};let{errorMap:t,invalid_type_error:n,required_error:r,description:i}=e;if(t&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:i}:{errorMap:(o,s)=>{let{message:c}=e;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:i}}var T=class{get description(){return this._def.description}_getType(t){return ye(t.data)}_getOrReturnCtx(t,n){return n||{common:t.parent.common,data:t.data,parsedType:ye(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new Z,ctx:{common:t.parent.common,data:t.data,parsedType:ye(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){let n=this._parse(t);if(_t(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(t){let n=this._parse(t);return Promise.resolve(n)}parse(t,n){let r=this.safeParse(t,n);if(r.success)return r.data;throw r.error}safeParse(t,n){let r={common:{issues:[],async:n?.async??!1,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:ye(t)},i=this._parseSync({data:t,path:r.path,parent:r});return pi(r,i)}"~validate"(t){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:ye(t)};if(!this["~standard"].async)try{let r=this._parseSync({data:t,path:[],parent:n});return Ue(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:t,path:[],parent:n}).then(r=>Ue(r)?{value:r.value}:{issues:n.common.issues})}async parseAsync(t,n){let r=await this.safeParseAsync(t,n);if(r.success)return r.data;throw r.error}async safeParseAsync(t,n){let r={common:{issues:[],contextualErrorMap:n?.errorMap,async:!0},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:ye(t)},i=this._parse({data:t,path:r.path,parent:r}),a=await(_t(i)?i:Promise.resolve(i));return pi(r,a)}refine(t,n){let r=i=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(i):n;return this._refinement((i,a)=>{let o=t(i),s=()=>a.addIssue({code:m.custom,...r(i)});return typeof Promise<"u"&&o instanceof Promise?o.then(c=>c?!0:(s(),!1)):o?!0:(s(),!1)})}refinement(t,n){return this._refinement((r,i)=>t(r)?!0:(i.addIssue(typeof n=="function"?n(r,i):n),!1))}_refinement(t){return new ue({schema:this,typeName:S.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}constructor(t){this.spa=this.safeParseAsync,this._def=t,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 ce.create(this,this._def)}nullable(){return ke.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Ee.create(this)}promise(){return He.create(this,this._def)}or(t){return at.create([this,t],this._def)}and(t){return ot.create(this,t,this._def)}transform(t){return new ue({...C(this._def),schema:this,typeName:S.ZodEffects,effect:{type:"transform",transform:t}})}default(t){let n=typeof t=="function"?t:()=>t;return new ut({...C(this._def),innerType:this,defaultValue:n,typeName:S.ZodDefault})}brand(){return new Kt({typeName:S.ZodBranded,type:this,...C(this._def)})}catch(t){let n=typeof t=="function"?t:()=>t;return new pt({...C(this._def),innerType:this,catchValue:n,typeName:S.ZodCatch})}describe(t){let n=this.constructor;return new n({...this._def,description:t})}pipe(t){return Yt.create(this,t)}readonly(){return ht.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},Ko=/^c[^\s-]{8,}$/i,Yo=/^[0-9a-z]+$/,Xo=/^[0-9A-HJKMNP-TV-Z]{26}$/i,Qo=/^[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,es=/^[a-z0-9_-]{21}$/i,ts=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,ns=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,rs=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,is="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",tr,as=/^(?:(?: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])$/,os=/^(?:(?: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])$/,ss=/^(([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]))$/,ls=/^(([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])$/,cs=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,ds=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,mi="((\\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])))",us=new RegExp(`^${mi}$`);function fi(e){let t="[0-5]\\d";e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision==null&&(t=`${t}(\\.\\d+)?`);let n=e.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${n}`}function ps(e){return new RegExp(`^${fi(e)}$`)}function gi(e){let t=`${mi}T${fi(e)}`,n=[];return n.push(e.local?"Z?":"Z"),e.offset&&n.push("([+-]\\d{2}:?\\d{2})"),t=`${t}(${n.join("|")})`,new RegExp(`^${t}$`)}function hs(e,t){return!!((t==="v4"||!t)&&as.test(e)||(t==="v6"||!t)&&ss.test(e))}function ms(e,t){if(!ts.test(e))return!1;try{let[n]=e.split(".");if(!n)return!1;let r=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),i=JSON.parse(atob(r));return!(typeof i!="object"||i===null||"typ"in i&&i?.typ!=="JWT"||!i.alg||t&&i.alg!==t)}catch{return!1}}function fs(e,t){return!!((t==="v4"||!t)&&os.test(e)||(t==="v6"||!t)&&ls.test(e))}var ze=class e extends T{_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==y.string){let a=this._getOrReturnCtx(t);return g(a,{code:m.invalid_type,expected:y.string,received:a.parsedType}),v}let r=new Z,i;for(let a of this._def.checks)if(a.kind==="min")t.data.length<a.value&&(i=this._getOrReturnCtx(t,i),g(i,{code:m.too_small,minimum:a.value,type:"string",inclusive:!0,exact:!1,message:a.message}),r.dirty());else if(a.kind==="max")t.data.length>a.value&&(i=this._getOrReturnCtx(t,i),g(i,{code:m.too_big,maximum:a.value,type:"string",inclusive:!0,exact:!1,message:a.message}),r.dirty());else if(a.kind==="length"){let o=t.data.length>a.value,s=t.data.length<a.value;(o||s)&&(i=this._getOrReturnCtx(t,i),o?g(i,{code:m.too_big,maximum:a.value,type:"string",inclusive:!0,exact:!0,message:a.message}):s&&g(i,{code:m.too_small,minimum:a.value,type:"string",inclusive:!0,exact:!0,message:a.message}),r.dirty())}else if(a.kind==="email")rs.test(t.data)||(i=this._getOrReturnCtx(t,i),g(i,{validation:"email",code:m.invalid_string,message:a.message}),r.dirty());else if(a.kind==="emoji")tr||(tr=new RegExp(is,"u")),tr.test(t.data)||(i=this._getOrReturnCtx(t,i),g(i,{validation:"emoji",code:m.invalid_string,message:a.message}),r.dirty());else if(a.kind==="uuid")Qo.test(t.data)||(i=this._getOrReturnCtx(t,i),g(i,{validation:"uuid",code:m.invalid_string,message:a.message}),r.dirty());else if(a.kind==="nanoid")es.test(t.data)||(i=this._getOrReturnCtx(t,i),g(i,{validation:"nanoid",code:m.invalid_string,message:a.message}),r.dirty());else if(a.kind==="cuid")Ko.test(t.data)||(i=this._getOrReturnCtx(t,i),g(i,{validation:"cuid",code:m.invalid_string,message:a.message}),r.dirty());else if(a.kind==="cuid2")Yo.test(t.data)||(i=this._getOrReturnCtx(t,i),g(i,{validation:"cuid2",code:m.invalid_string,message:a.message}),r.dirty());else if(a.kind==="ulid")Xo.test(t.data)||(i=this._getOrReturnCtx(t,i),g(i,{validation:"ulid",code:m.invalid_string,message:a.message}),r.dirty());else if(a.kind==="url")try{new URL(t.data)}catch{i=this._getOrReturnCtx(t,i),g(i,{validation:"url",code:m.invalid_string,message:a.message}),r.dirty()}else a.kind==="regex"?(a.regex.lastIndex=0,a.regex.test(t.data)||(i=this._getOrReturnCtx(t,i),g(i,{validation:"regex",code:m.invalid_string,message:a.message}),r.dirty())):a.kind==="trim"?t.data=t.data.trim():a.kind==="includes"?t.data.includes(a.value,a.position)||(i=this._getOrReturnCtx(t,i),g(i,{code:m.invalid_string,validation:{includes:a.value,position:a.position},message:a.message}),r.dirty()):a.kind==="toLowerCase"?t.data=t.data.toLowerCase():a.kind==="toUpperCase"?t.data=t.data.toUpperCase():a.kind==="startsWith"?t.data.startsWith(a.value)||(i=this._getOrReturnCtx(t,i),g(i,{code:m.invalid_string,validation:{startsWith:a.value},message:a.message}),r.dirty()):a.kind==="endsWith"?t.data.endsWith(a.value)||(i=this._getOrReturnCtx(t,i),g(i,{code:m.invalid_string,validation:{endsWith:a.value},message:a.message}),r.dirty()):a.kind==="datetime"?gi(a).test(t.data)||(i=this._getOrReturnCtx(t,i),g(i,{code:m.invalid_string,validation:"datetime",message:a.message}),r.dirty()):a.kind==="date"?us.test(t.data)||(i=this._getOrReturnCtx(t,i),g(i,{code:m.invalid_string,validation:"date",message:a.message}),r.dirty()):a.kind==="time"?ps(a).test(t.data)||(i=this._getOrReturnCtx(t,i),g(i,{code:m.invalid_string,validation:"time",message:a.message}),r.dirty()):a.kind==="duration"?ns.test(t.data)||(i=this._getOrReturnCtx(t,i),g(i,{validation:"duration",code:m.invalid_string,message:a.message}),r.dirty()):a.kind==="ip"?hs(t.data,a.version)||(i=this._getOrReturnCtx(t,i),g(i,{validation:"ip",code:m.invalid_string,message:a.message}),r.dirty()):a.kind==="jwt"?ms(t.data,a.alg)||(i=this._getOrReturnCtx(t,i),g(i,{validation:"jwt",code:m.invalid_string,message:a.message}),r.dirty()):a.kind==="cidr"?fs(t.data,a.version)||(i=this._getOrReturnCtx(t,i),g(i,{validation:"cidr",code:m.invalid_string,message:a.message}),r.dirty()):a.kind==="base64"?cs.test(t.data)||(i=this._getOrReturnCtx(t,i),g(i,{validation:"base64",code:m.invalid_string,message:a.message}),r.dirty()):a.kind==="base64url"?ds.test(t.data)||(i=this._getOrReturnCtx(t,i),g(i,{validation:"base64url",code:m.invalid_string,message:a.message}),r.dirty()):I.assertNever(a);return{status:r.value,value:t.data}}_regex(t,n,r){return this.refinement(i=>t.test(i),{validation:n,code:m.invalid_string,...k.errToObj(r)})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:"email",...k.errToObj(t)})}url(t){return this._addCheck({kind:"url",...k.errToObj(t)})}emoji(t){return this._addCheck({kind:"emoji",...k.errToObj(t)})}uuid(t){return this._addCheck({kind:"uuid",...k.errToObj(t)})}nanoid(t){return this._addCheck({kind:"nanoid",...k.errToObj(t)})}cuid(t){return this._addCheck({kind:"cuid",...k.errToObj(t)})}cuid2(t){return this._addCheck({kind:"cuid2",...k.errToObj(t)})}ulid(t){return this._addCheck({kind:"ulid",...k.errToObj(t)})}base64(t){return this._addCheck({kind:"base64",...k.errToObj(t)})}base64url(t){return this._addCheck({kind:"base64url",...k.errToObj(t)})}jwt(t){return this._addCheck({kind:"jwt",...k.errToObj(t)})}ip(t){return this._addCheck({kind:"ip",...k.errToObj(t)})}cidr(t){return this._addCheck({kind:"cidr",...k.errToObj(t)})}datetime(t){return typeof t=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:t}):this._addCheck({kind:"datetime",precision:typeof t?.precision>"u"?null:t?.precision,offset:t?.offset??!1,local:t?.local??!1,...k.errToObj(t?.message)})}date(t){return this._addCheck({kind:"date",message:t})}time(t){return typeof t=="string"?this._addCheck({kind:"time",precision:null,message:t}):this._addCheck({kind:"time",precision:typeof t?.precision>"u"?null:t?.precision,...k.errToObj(t?.message)})}duration(t){return this._addCheck({kind:"duration",...k.errToObj(t)})}regex(t,n){return this._addCheck({kind:"regex",regex:t,...k.errToObj(n)})}includes(t,n){return this._addCheck({kind:"includes",value:t,position:n?.position,...k.errToObj(n?.message)})}startsWith(t,n){return this._addCheck({kind:"startsWith",value:t,...k.errToObj(n)})}endsWith(t,n){return this._addCheck({kind:"endsWith",value:t,...k.errToObj(n)})}min(t,n){return this._addCheck({kind:"min",value:t,...k.errToObj(n)})}max(t,n){return this._addCheck({kind:"max",value:t,...k.errToObj(n)})}length(t,n){return this._addCheck({kind:"length",value:t,...k.errToObj(n)})}nonempty(t){return this.min(1,k.errToObj(t))}trim(){return new e({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new e({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new e({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(t=>t.kind==="datetime")}get isDate(){return!!this._def.checks.find(t=>t.kind==="date")}get isTime(){return!!this._def.checks.find(t=>t.kind==="time")}get isDuration(){return!!this._def.checks.find(t=>t.kind==="duration")}get isEmail(){return!!this._def.checks.find(t=>t.kind==="email")}get isURL(){return!!this._def.checks.find(t=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find(t=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find(t=>t.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(t=>t.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(t=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(t=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find(t=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find(t=>t.kind==="ip")}get isCIDR(){return!!this._def.checks.find(t=>t.kind==="cidr")}get isBase64(){return!!this._def.checks.find(t=>t.kind==="base64")}get isBase64url(){return!!this._def.checks.find(t=>t.kind==="base64url")}get minLength(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxLength(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}};ze.create=e=>new ze({checks:[],typeName:S.ZodString,coerce:e?.coerce??!1,...C(e)});function gs(e,t){let n=(e.toString().split(".")[1]||"").length,r=(t.toString().split(".")[1]||"").length,i=n>r?n:r,a=Number.parseInt(e.toFixed(i).replace(".","")),o=Number.parseInt(t.toFixed(i).replace(".",""));return a%o/10**i}var Qe=class e extends T{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==y.number){let a=this._getOrReturnCtx(t);return g(a,{code:m.invalid_type,expected:y.number,received:a.parsedType}),v}let r,i=new Z;for(let a of this._def.checks)a.kind==="int"?I.isInteger(t.data)||(r=this._getOrReturnCtx(t,r),g(r,{code:m.invalid_type,expected:"integer",received:"float",message:a.message}),i.dirty()):a.kind==="min"?(a.inclusive?t.data<a.value:t.data<=a.value)&&(r=this._getOrReturnCtx(t,r),g(r,{code:m.too_small,minimum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),i.dirty()):a.kind==="max"?(a.inclusive?t.data>a.value:t.data>=a.value)&&(r=this._getOrReturnCtx(t,r),g(r,{code:m.too_big,maximum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),i.dirty()):a.kind==="multipleOf"?gs(t.data,a.value)!==0&&(r=this._getOrReturnCtx(t,r),g(r,{code:m.not_multiple_of,multipleOf:a.value,message:a.message}),i.dirty()):a.kind==="finite"?Number.isFinite(t.data)||(r=this._getOrReturnCtx(t,r),g(r,{code:m.not_finite,message:a.message}),i.dirty()):I.assertNever(a);return{status:i.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,k.toString(n))}gt(t,n){return this.setLimit("min",t,!1,k.toString(n))}lte(t,n){return this.setLimit("max",t,!0,k.toString(n))}lt(t,n){return this.setLimit("max",t,!1,k.toString(n))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:k.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:k.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:k.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:k.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:k.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:k.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:k.toString(n)})}finite(t){return this._addCheck({kind:"finite",message:k.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:k.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:k.toString(t)})}get minValue(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}get isInt(){return!!this._def.checks.find(t=>t.kind==="int"||t.kind==="multipleOf"&&I.isInteger(t.value))}get isFinite(){let t=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"&&(t===null||r.value<t)&&(t=r.value)}return Number.isFinite(n)&&Number.isFinite(t)}};Qe.create=e=>new Qe({checks:[],typeName:S.ZodNumber,coerce:e?.coerce||!1,...C(e)});var et=class e extends T{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce)try{t.data=BigInt(t.data)}catch{return this._getInvalidInput(t)}if(this._getType(t)!==y.bigint)return this._getInvalidInput(t);let r,i=new Z;for(let a of this._def.checks)a.kind==="min"?(a.inclusive?t.data<a.value:t.data<=a.value)&&(r=this._getOrReturnCtx(t,r),g(r,{code:m.too_small,type:"bigint",minimum:a.value,inclusive:a.inclusive,message:a.message}),i.dirty()):a.kind==="max"?(a.inclusive?t.data>a.value:t.data>=a.value)&&(r=this._getOrReturnCtx(t,r),g(r,{code:m.too_big,type:"bigint",maximum:a.value,inclusive:a.inclusive,message:a.message}),i.dirty()):a.kind==="multipleOf"?t.data%a.value!==BigInt(0)&&(r=this._getOrReturnCtx(t,r),g(r,{code:m.not_multiple_of,multipleOf:a.value,message:a.message}),i.dirty()):I.assertNever(a);return{status:i.value,value:t.data}}_getInvalidInput(t){let n=this._getOrReturnCtx(t);return g(n,{code:m.invalid_type,expected:y.bigint,received:n.parsedType}),v}gte(t,n){return this.setLimit("min",t,!0,k.toString(n))}gt(t,n){return this.setLimit("min",t,!1,k.toString(n))}lte(t,n){return this.setLimit("max",t,!0,k.toString(n))}lt(t,n){return this.setLimit("max",t,!1,k.toString(n))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:k.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:k.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:k.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:k.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:k.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:k.toString(n)})}get minValue(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}};et.create=e=>new et({checks:[],typeName:S.ZodBigInt,coerce:e?.coerce??!1,...C(e)});var tt=class extends T{_parse(t){if(this._def.coerce&&(t.data=!!t.data),this._getType(t)!==y.boolean){let r=this._getOrReturnCtx(t);return g(r,{code:m.invalid_type,expected:y.boolean,received:r.parsedType}),v}return Y(t.data)}};tt.create=e=>new tt({typeName:S.ZodBoolean,coerce:e?.coerce||!1,...C(e)});var nt=class e extends T{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==y.date){let a=this._getOrReturnCtx(t);return g(a,{code:m.invalid_type,expected:y.date,received:a.parsedType}),v}if(Number.isNaN(t.data.getTime())){let a=this._getOrReturnCtx(t);return g(a,{code:m.invalid_date}),v}let r=new Z,i;for(let a of this._def.checks)a.kind==="min"?t.data.getTime()<a.value&&(i=this._getOrReturnCtx(t,i),g(i,{code:m.too_small,message:a.message,inclusive:!0,exact:!1,minimum:a.value,type:"date"}),r.dirty()):a.kind==="max"?t.data.getTime()>a.value&&(i=this._getOrReturnCtx(t,i),g(i,{code:m.too_big,message:a.message,inclusive:!0,exact:!1,maximum:a.value,type:"date"}),r.dirty()):I.assertNever(a);return{status:r.value,value:new Date(t.data.getTime())}}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}min(t,n){return this._addCheck({kind:"min",value:t.getTime(),message:k.toString(n)})}max(t,n){return this._addCheck({kind:"max",value:t.getTime(),message:k.toString(n)})}get minDate(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t!=null?new Date(t):null}get maxDate(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t!=null?new Date(t):null}};nt.create=e=>new nt({checks:[],coerce:e?.coerce||!1,typeName:S.ZodDate,...C(e)});var Tt=class extends T{_parse(t){if(this._getType(t)!==y.symbol){let r=this._getOrReturnCtx(t);return g(r,{code:m.invalid_type,expected:y.symbol,received:r.parsedType}),v}return Y(t.data)}};Tt.create=e=>new Tt({typeName:S.ZodSymbol,...C(e)});var rt=class extends T{_parse(t){if(this._getType(t)!==y.undefined){let r=this._getOrReturnCtx(t);return g(r,{code:m.invalid_type,expected:y.undefined,received:r.parsedType}),v}return Y(t.data)}};rt.create=e=>new rt({typeName:S.ZodUndefined,...C(e)});var it=class extends T{_parse(t){if(this._getType(t)!==y.null){let r=this._getOrReturnCtx(t);return g(r,{code:m.invalid_type,expected:y.null,received:r.parsedType}),v}return Y(t.data)}};it.create=e=>new it({typeName:S.ZodNull,...C(e)});var Fe=class extends T{constructor(){super(...arguments),this._any=!0}_parse(t){return Y(t.data)}};Fe.create=e=>new Fe({typeName:S.ZodAny,...C(e)});var Pe=class extends T{constructor(){super(...arguments),this._unknown=!0}_parse(t){return Y(t.data)}};Pe.create=e=>new Pe({typeName:S.ZodUnknown,...C(e)});var he=class extends T{_parse(t){let n=this._getOrReturnCtx(t);return g(n,{code:m.invalid_type,expected:y.never,received:n.parsedType}),v}};he.create=e=>new he({typeName:S.ZodNever,...C(e)});var At=class extends T{_parse(t){if(this._getType(t)!==y.undefined){let r=this._getOrReturnCtx(t);return g(r,{code:m.invalid_type,expected:y.void,received:r.parsedType}),v}return Y(t.data)}};At.create=e=>new At({typeName:S.ZodVoid,...C(e)});var Ee=class e extends T{_parse(t){let{ctx:n,status:r}=this._processInputParams(t),i=this._def;if(n.parsedType!==y.array)return g(n,{code:m.invalid_type,expected:y.array,received:n.parsedType}),v;if(i.exactLength!==null){let o=n.data.length>i.exactLength.value,s=n.data.length<i.exactLength.value;(o||s)&&(g(n,{code:o?m.too_big:m.too_small,minimum:s?i.exactLength.value:void 0,maximum:o?i.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:i.exactLength.message}),r.dirty())}if(i.minLength!==null&&n.data.length<i.minLength.value&&(g(n,{code:m.too_small,minimum:i.minLength.value,type:"array",inclusive:!0,exact:!1,message:i.minLength.message}),r.dirty()),i.maxLength!==null&&n.data.length>i.maxLength.value&&(g(n,{code:m.too_big,maximum:i.maxLength.value,type:"array",inclusive:!0,exact:!1,message:i.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((o,s)=>i.type._parseAsync(new de(n,o,n.path,s)))).then(o=>Z.mergeArray(r,o));let a=[...n.data].map((o,s)=>i.type._parseSync(new de(n,o,n.path,s)));return Z.mergeArray(r,a)}get element(){return this._def.type}min(t,n){return new e({...this._def,minLength:{value:t,message:k.toString(n)}})}max(t,n){return new e({...this._def,maxLength:{value:t,message:k.toString(n)}})}length(t,n){return new e({...this._def,exactLength:{value:t,message:k.toString(n)}})}nonempty(t){return this.min(1,t)}};Ee.create=(e,t)=>new Ee({type:e,minLength:null,maxLength:null,exactLength:null,typeName:S.ZodArray,...C(t)});function Ct(e){if(e instanceof ie){let t={};for(let n in e.shape){let r=e.shape[n];t[n]=ce.create(Ct(r))}return new ie({...e._def,shape:()=>t})}else return e instanceof Ee?new Ee({...e._def,type:Ct(e.element)}):e instanceof ce?ce.create(Ct(e.unwrap())):e instanceof ke?ke.create(Ct(e.unwrap())):e instanceof xe?xe.create(e.items.map(t=>Ct(t))):e}var ie=class e extends T{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let t=this._def.shape(),n=I.objectKeys(t);return this._cached={shape:t,keys:n},this._cached}_parse(t){if(this._getType(t)!==y.object){let d=this._getOrReturnCtx(t);return g(d,{code:m.invalid_type,expected:y.object,received:d.parsedType}),v}let{status:r,ctx:i}=this._processInputParams(t),{shape:a,keys:o}=this._getCached(),s=[];if(!(this._def.catchall instanceof he&&this._def.unknownKeys==="strip"))for(let d in i.data)o.includes(d)||s.push(d);let c=[];for(let d of o){let u=a[d],p=i.data[d];c.push({key:{status:"valid",value:d},value:u._parse(new de(i,p,i.path,d)),alwaysSet:d in i.data})}if(this._def.catchall instanceof he){let d=this._def.unknownKeys;if(d==="passthrough")for(let u of s)c.push({key:{status:"valid",value:u},value:{status:"valid",value:i.data[u]}});else if(d==="strict")s.length>0&&(g(i,{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=i.data[u];c.push({key:{status:"valid",value:u},value:d._parse(new de(i,p,i.path,u)),alwaysSet:u in i.data})}}return i.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(t){return k.errToObj,new e({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(n,r)=>{let i=this._def.errorMap?.(n,r).message??r.defaultError;return n.code==="unrecognized_keys"?{message:k.errToObj(t).message??i}:{message:i}}}:{}})}strip(){return new e({...this._def,unknownKeys:"strip"})}passthrough(){return new e({...this._def,unknownKeys:"passthrough"})}extend(t){return new e({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new e({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:S.ZodObject})}setKey(t,n){return this.augment({[t]:n})}catchall(t){return new e({...this._def,catchall:t})}pick(t){let n={};for(let r of I.objectKeys(t))t[r]&&this.shape[r]&&(n[r]=this.shape[r]);return new e({...this._def,shape:()=>n})}omit(t){let n={};for(let r of I.objectKeys(this.shape))t[r]||(n[r]=this.shape[r]);return new e({...this._def,shape:()=>n})}deepPartial(){return Ct(this)}partial(t){let n={};for(let r of I.objectKeys(this.shape)){let i=this.shape[r];t&&!t[r]?n[r]=i:n[r]=i.optional()}return new e({...this._def,shape:()=>n})}required(t){let n={};for(let r of I.objectKeys(this.shape))if(t&&!t[r])n[r]=this.shape[r];else{let a=this.shape[r];for(;a instanceof ce;)a=a._def.innerType;n[r]=a}return new e({...this._def,shape:()=>n})}keyof(){return bi(I.objectKeys(this.shape))}};ie.create=(e,t)=>new ie({shape:()=>e,unknownKeys:"strip",catchall:he.create(),typeName:S.ZodObject,...C(t)});ie.strictCreate=(e,t)=>new ie({shape:()=>e,unknownKeys:"strict",catchall:he.create(),typeName:S.ZodObject,...C(t)});ie.lazycreate=(e,t)=>new ie({shape:e,unknownKeys:"strip",catchall:he.create(),typeName:S.ZodObject,...C(t)});var at=class extends T{_parse(t){let{ctx:n}=this._processInputParams(t),r=this._def.options;function i(a){for(let s of a)if(s.result.status==="valid")return s.result;for(let s of a)if(s.result.status==="dirty")return n.common.issues.push(...s.ctx.common.issues),s.result;let o=a.map(s=>new re(s.ctx.common.issues));return g(n,{code:m.invalid_union,unionErrors:o}),v}if(n.common.async)return Promise.all(r.map(async a=>{let o={...n,common:{...n.common,issues:[]},parent:null};return{result:await a._parseAsync({data:n.data,path:n.path,parent:o}),ctx:o}})).then(i);{let a,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"&&!a&&(a={result:u,ctx:d}),d.common.issues.length&&o.push(d.common.issues)}if(a)return n.common.issues.push(...a.ctx.common.issues),a.result;let s=o.map(c=>new re(c));return g(n,{code:m.invalid_union,unionErrors:s}),v}}get options(){return this._def.options}};at.create=(e,t)=>new at({options:e,typeName:S.ZodUnion,...C(t)});var Ie=e=>e instanceof st?Ie(e.schema):e instanceof ue?Ie(e.innerType()):e instanceof lt?[e.value]:e instanceof ct?e.options:e instanceof dt?I.objectValues(e.enum):e instanceof ut?Ie(e._def.innerType):e instanceof rt?[void 0]:e instanceof it?[null]:e instanceof ce?[void 0,...Ie(e.unwrap())]:e instanceof ke?[null,...Ie(e.unwrap())]:e instanceof Kt||e instanceof ht?Ie(e.unwrap()):e instanceof pt?Ie(e._def.innerType):[],bn=class e extends T{_parse(t){let{ctx:n}=this._processInputParams(t);if(n.parsedType!==y.object)return g(n,{code:m.invalid_type,expected:y.object,received:n.parsedType}),v;let r=this.discriminator,i=n.data[r],a=this.optionsMap.get(i);return a?n.common.async?a._parseAsync({data:n.data,path:n.path,parent:n}):a._parseSync({data:n.data,path:n.path,parent:n}):(g(n,{code:m.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),v)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){let i=new Map;for(let a of n){let o=Ie(a.shape[t]);if(!o.length)throw new Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let s of o){if(i.has(s))throw new Error(`Discriminator property ${String(t)} has duplicate value ${String(s)}`);i.set(s,a)}}return new e({typeName:S.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:i,...C(r)})}};function nr(e,t){let n=ye(e),r=ye(t);if(e===t)return{valid:!0,data:e};if(n===y.object&&r===y.object){let i=I.objectKeys(t),a=I.objectKeys(e).filter(s=>i.indexOf(s)!==-1),o={...e,...t};for(let s of a){let c=nr(e[s],t[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(e.length!==t.length)return{valid:!1};let i=[];for(let a=0;a<e.length;a++){let o=e[a],s=t[a],c=nr(o,s);if(!c.valid)return{valid:!1};i.push(c.data)}return{valid:!0,data:i}}else return n===y.date&&r===y.date&&+e==+t?{valid:!0,data:e}:{valid:!1}}var ot=class extends T{_parse(t){let{status:n,ctx:r}=this._processInputParams(t),i=(a,o)=>{if(fn(a)||fn(o))return v;let s=nr(a.value,o.value);return s.valid?((gn(a)||gn(o))&&n.dirty(),{status:n.value,value:s.data}):(g(r,{code:m.invalid_intersection_types}),v)};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(([a,o])=>i(a,o)):i(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};ot.create=(e,t,n)=>new ot({left:e,right:t,typeName:S.ZodIntersection,...C(n)});var xe=class e extends T{_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==y.array)return g(r,{code:m.invalid_type,expected:y.array,received:r.parsedType}),v;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"}),v;!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 a=[...r.data].map((o,s)=>{let c=this._def.items[s]||this._def.rest;return c?c._parse(new de(r,o,r.path,s)):null}).filter(o=>!!o);return r.common.async?Promise.all(a).then(o=>Z.mergeArray(n,o)):Z.mergeArray(n,a)}get items(){return this._def.items}rest(t){return new e({...this._def,rest:t})}};xe.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new xe({items:e,typeName:S.ZodTuple,rest:null,...C(t)})};var yn=class e extends T{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==y.object)return g(r,{code:m.invalid_type,expected:y.object,received:r.parsedType}),v;let i=[],a=this._def.keyType,o=this._def.valueType;for(let s in r.data)i.push({key:a._parse(new de(r,s,r.path,s)),value:o._parse(new de(r,r.data[s],r.path,s)),alwaysSet:s in r.data});return r.common.async?Z.mergeObjectAsync(n,i):Z.mergeObjectSync(n,i)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof T?new e({keyType:t,valueType:n,typeName:S.ZodRecord,...C(r)}):new e({keyType:ze.create(),valueType:t,typeName:S.ZodRecord,...C(n)})}},It=class extends T{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==y.map)return g(r,{code:m.invalid_type,expected:y.map,received:r.parsedType}),v;let i=this._def.keyType,a=this._def.valueType,o=[...r.data.entries()].map(([s,c],d)=>({key:i._parse(new de(r,s,r.path,[d,"key"])),value:a._parse(new de(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 v;(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 v;(d.status==="dirty"||u.status==="dirty")&&n.dirty(),s.set(d.value,u.value)}return{status:n.value,value:s}}}};It.create=(e,t,n)=>new It({valueType:t,keyType:e,typeName:S.ZodMap,...C(n)});var Pt=class e extends T{_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==y.set)return g(r,{code:m.invalid_type,expected:y.set,received:r.parsedType}),v;let i=this._def;i.minSize!==null&&r.data.size<i.minSize.value&&(g(r,{code:m.too_small,minimum:i.minSize.value,type:"set",inclusive:!0,exact:!1,message:i.minSize.message}),n.dirty()),i.maxSize!==null&&r.data.size>i.maxSize.value&&(g(r,{code:m.too_big,maximum:i.maxSize.value,type:"set",inclusive:!0,exact:!1,message:i.maxSize.message}),n.dirty());let a=this._def.valueType;function o(c){let d=new Set;for(let u of c){if(u.status==="aborted")return v;u.status==="dirty"&&n.dirty(),d.add(u.value)}return{status:n.value,value:d}}let s=[...r.data.values()].map((c,d)=>a._parse(new de(r,c,r.path,d)));return r.common.async?Promise.all(s).then(c=>o(c)):o(s)}min(t,n){return new e({...this._def,minSize:{value:t,message:k.toString(n)}})}max(t,n){return new e({...this._def,maxSize:{value:t,message:k.toString(n)}})}size(t,n){return this.min(t,n).max(t,n)}nonempty(t){return this.min(1,t)}};Pt.create=(e,t)=>new Pt({valueType:e,minSize:null,maxSize:null,typeName:S.ZodSet,...C(t)});var xn=class e extends T{constructor(){super(...arguments),this.validate=this.implement}_parse(t){let{ctx:n}=this._processInputParams(t);if(n.parsedType!==y.function)return g(n,{code:m.invalid_type,expected:y.function,received:n.parsedType}),v;function r(s,c){return Gt({data:s,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,St(),Ae].filter(d=>!!d),issueData:{code:m.invalid_arguments,argumentsError:c}})}function i(s,c){return Gt({data:s,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,St(),Ae].filter(d=>!!d),issueData:{code:m.invalid_return_type,returnTypeError:c}})}let a={errorMap:n.common.contextualErrorMap},o=n.data;if(this._def.returns instanceof He){let s=this;return Y(async function(...c){let d=new re([]),u=await s._def.args.parseAsync(c,a).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,a).catch(f=>{throw d.addIssue(i(p,f)),d})})}else{let s=this;return Y(function(...c){let d=s._def.args.safeParse(c,a);if(!d.success)throw new re([r(c,d.error)]);let u=Reflect.apply(o,this,d.data),p=s._def.returns.safeParse(u,a);if(!p.success)throw new re([i(u,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new e({...this._def,args:xe.create(t).rest(Pe.create())})}returns(t){return new e({...this._def,returns:t})}implement(t){return this.parse(t)}strictImplement(t){return this.parse(t)}static create(t,n,r){return new e({args:t||xe.create([]).rest(Pe.create()),returns:n||Pe.create(),typeName:S.ZodFunction,...C(r)})}},st=class extends T{get schema(){return this._def.getter()}_parse(t){let{ctx:n}=this._processInputParams(t);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}};st.create=(e,t)=>new st({getter:e,typeName:S.ZodLazy,...C(t)});var lt=class extends T{_parse(t){if(t.data!==this._def.value){let n=this._getOrReturnCtx(t);return g(n,{received:n.data,code:m.invalid_literal,expected:this._def.value}),v}return{status:"valid",value:t.data}}get value(){return this._def.value}};lt.create=(e,t)=>new lt({value:e,typeName:S.ZodLiteral,...C(t)});function bi(e,t){return new ct({values:e,typeName:S.ZodEnum,...C(t)})}var ct=class e extends T{_parse(t){if(typeof t.data!="string"){let n=this._getOrReturnCtx(t),r=this._def.values;return g(n,{expected:I.joinValues(r),received:n.parsedType,code:m.invalid_type}),v}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(t.data)){let n=this._getOrReturnCtx(t),r=this._def.values;return g(n,{received:n.data,code:m.invalid_enum_value,options:r}),v}return Y(t.data)}get options(){return this._def.values}get enum(){let t={};for(let n of this._def.values)t[n]=n;return t}get Values(){let t={};for(let n of this._def.values)t[n]=n;return t}get Enum(){let t={};for(let n of this._def.values)t[n]=n;return t}extract(t,n=this._def){return e.create(t,{...this._def,...n})}exclude(t,n=this._def){return e.create(this.options.filter(r=>!t.includes(r)),{...this._def,...n})}};ct.create=bi;var dt=class extends T{_parse(t){let n=I.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(t);if(r.parsedType!==y.string&&r.parsedType!==y.number){let i=I.objectValues(n);return g(r,{expected:I.joinValues(i),received:r.parsedType,code:m.invalid_type}),v}if(this._cache||(this._cache=new Set(I.getValidEnumValues(this._def.values))),!this._cache.has(t.data)){let i=I.objectValues(n);return g(r,{received:r.data,code:m.invalid_enum_value,options:i}),v}return Y(t.data)}get enum(){return this._def.values}};dt.create=(e,t)=>new dt({values:e,typeName:S.ZodNativeEnum,...C(t)});var He=class extends T{unwrap(){return this._def.type}_parse(t){let{ctx:n}=this._processInputParams(t);if(n.parsedType!==y.promise&&n.common.async===!1)return g(n,{code:m.invalid_type,expected:y.promise,received:n.parsedType}),v;let r=n.parsedType===y.promise?n.data:Promise.resolve(n.data);return Y(r.then(i=>this._def.type.parseAsync(i,{path:n.path,errorMap:n.common.contextualErrorMap})))}};He.create=(e,t)=>new He({type:e,typeName:S.ZodPromise,...C(t)});var ue=class extends T{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===S.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){let{status:n,ctx:r}=this._processInputParams(t),i=this._def.effect||null,a={addIssue:o=>{g(r,o),o.fatal?n.abort():n.dirty()},get path(){return r.path}};if(a.addIssue=a.addIssue.bind(a),i.type==="preprocess"){let o=i.transform(r.data,a);if(r.common.async)return Promise.resolve(o).then(async s=>{if(n.value==="aborted")return v;let c=await this._def.schema._parseAsync({data:s,path:r.path,parent:r});return c.status==="aborted"?v:c.status==="dirty"?Xe(c.value):n.value==="dirty"?Xe(c.value):c});{if(n.value==="aborted")return v;let s=this._def.schema._parseSync({data:o,path:r.path,parent:r});return s.status==="aborted"?v:s.status==="dirty"?Xe(s.value):n.value==="dirty"?Xe(s.value):s}}if(i.type==="refinement"){let o=s=>{let c=i.refinement(s,a);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"?v:(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"?v:(s.status==="dirty"&&n.dirty(),o(s.value).then(()=>({status:n.value,value:s.value}))))}if(i.type==="transform")if(r.common.async===!1){let o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!Ue(o))return v;let s=i.transform(o.value,a);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=>Ue(o)?Promise.resolve(i.transform(o.value,a)).then(s=>({status:n.value,value:s})):v);I.assertNever(i)}};ue.create=(e,t,n)=>new ue({schema:e,typeName:S.ZodEffects,effect:t,...C(n)});ue.createWithPreprocess=(e,t,n)=>new ue({schema:t,effect:{type:"preprocess",transform:e},typeName:S.ZodEffects,...C(n)});var ce=class extends T{_parse(t){return this._getType(t)===y.undefined?Y(void 0):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}};ce.create=(e,t)=>new ce({innerType:e,typeName:S.ZodOptional,...C(t)});var ke=class extends T{_parse(t){return this._getType(t)===y.null?Y(null):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}};ke.create=(e,t)=>new ke({innerType:e,typeName:S.ZodNullable,...C(t)});var ut=class extends T{_parse(t){let{ctx:n}=this._processInputParams(t),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}};ut.create=(e,t)=>new ut({innerType:e,typeName:S.ZodDefault,defaultValue:typeof t.default=="function"?t.default:()=>t.default,...C(t)});var pt=class extends T{_parse(t){let{ctx:n}=this._processInputParams(t),r={...n,common:{...n.common,issues:[]}},i=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return _t(i)?i.then(a=>({status:"valid",value:a.status==="valid"?a.value:this._def.catchValue({get error(){return new re(r.common.issues)},input:r.data})})):{status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new re(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};pt.create=(e,t)=>new pt({innerType:e,typeName:S.ZodCatch,catchValue:typeof t.catch=="function"?t.catch:()=>t.catch,...C(t)});var Et=class extends T{_parse(t){if(this._getType(t)!==y.nan){let r=this._getOrReturnCtx(t);return g(r,{code:m.invalid_type,expected:y.nan,received:r.parsedType}),v}return{status:"valid",value:t.data}}};Et.create=e=>new Et({typeName:S.ZodNaN,...C(e)});var bs=Symbol("zod_brand"),Kt=class extends T{_parse(t){let{ctx:n}=this._processInputParams(t),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}},Yt=class e extends T{_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.common.async)return(async()=>{let a=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?v:a.status==="dirty"?(n.dirty(),Xe(a.value)):this._def.out._parseAsync({data:a.value,path:r.path,parent:r})})();{let i=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?v:i.status==="dirty"?(n.dirty(),{status:"dirty",value:i.value}):this._def.out._parseSync({data:i.value,path:r.path,parent:r})}}static create(t,n){return new e({in:t,out:n,typeName:S.ZodPipeline})}},ht=class extends T{_parse(t){let n=this._def.innerType._parse(t),r=i=>(Ue(i)&&(i.value=Object.freeze(i.value)),i);return _t(n)?n.then(i=>r(i)):r(n)}unwrap(){return this._def.innerType}};ht.create=(e,t)=>new ht({innerType:e,typeName:S.ZodReadonly,...C(t)});function hi(e,t){let n=typeof e=="function"?e(t):typeof e=="string"?{message:e}:e;return typeof n=="string"?{message:n}:n}function yi(e,t={},n){return e?Fe.create().superRefine((r,i)=>{let a=e(r);if(a instanceof Promise)return a.then(o=>{if(!o){let s=hi(t,r),c=s.fatal??n??!0;i.addIssue({code:"custom",...s,fatal:c})}});if(!a){let o=hi(t,r),s=o.fatal??n??!0;i.addIssue({code:"custom",...o,fatal:s})}}):Fe.create()}var ys={object:ie.lazycreate},S;(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"})(S||(S={}));var xs=(e,t={message:`Input not instance of ${e.name}`})=>yi(n=>n instanceof e,t),xi=ze.create,ki=Qe.create,ks=Et.create,ws=et.create,wi=tt.create,vs=nt.create,Ss=Tt.create,_s=rt.create,Cs=it.create,Ts=Fe.create,As=Pe.create,Is=he.create,Ps=At.create,Es=Ee.create,Rs=ie.create,$s=ie.strictCreate,Ds=at.create,Ns=bn.create,Ms=ot.create,Ls=xe.create,Os=yn.create,js=It.create,Us=Pt.create,zs=xn.create,Fs=st.create,Hs=lt.create,Bs=ct.create,Ws=dt.create,Vs=He.create,Js=ue.create,qs=ce.create,Zs=ke.create,Gs=ue.createWithPreprocess,Ks=Yt.create,Ys=()=>xi().optional(),Xs=()=>ki().optional(),Qs=()=>wi().optional(),el={string:(e=>ze.create({...e,coerce:!0})),number:(e=>Qe.create({...e,coerce:!0})),boolean:(e=>tt.create({...e,coerce:!0})),bigint:(e=>et.create({...e,coerce:!0})),date:(e=>nt.create({...e,coerce:!0}))};var tl=v;var rr=l.object({id:l.string()}),nl=l.enum(["top","right","bottom","left","auto"]).default("auto"),ir=l.enum(["left","middle","right"]),rl=ir.default("left"),vi=l.object({label:l.string().optional(),hidden:l.boolean().default(!1)}),il={background:l.string().optional(),textColor:l.string().optional(),borderRadius:l.string().optional(),textAlign:rl,anchor:nl,showNavigation:l.boolean().default(!0),prevButton:vi.optional(),nextButton:vi.optional()},al=l.enum(["pointer","callout","area"]),ol=l.discriminatedUnion("type",[l.object({type:l.literal("html-element"),alphaId:l.string().min(1)})]),sl=rr.extend({type:l.literal("message"),variant:al.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:ol.optional(),advancesStep:l.boolean().default(!0),...il}),ll=rr.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)}),cl=rr.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()}),Si=l.discriminatedUnion("type",[sl,ll,cl]),_i=new Set(["message","blur","text"]),Ci=l.object({type:l.string()}).passthrough();function Ti(e){return typeof e=="object"&&e!==null?e.type:void 0}var Ai=l.any().superRefine((e,t)=>{let i=(_i.has(Ti(e))?Si:Ci).safeParse(e);if(!i.success)for(let a of i.error.issues)t.addIssue(a)}).transform(e=>(_i.has(Ti(e))?Si:Ci).parse(e));var Ii=l.object({label:l.string().min(1),href:l.string().refine(e=>/^(https?:|mailto:)/i.test(e),"href must be an http(s) or mailto URL")}),ar=l.object({logo:l.string().min(1).optional(),name:l.string().min(1).optional(),logoHref:l.string().refine(e=>/^(https?:|mailto:)/i.test(e),"logoHref must be an http(s) or mailto URL").optional(),favicon:l.string().min(1).optional(),cta:Ii.optional(),secondaryCta:Ii.optional(),watermark:l.boolean().optional()}),Pi=ar.omit({favicon:!0});var dl=l.object({type:l.literal("next")}),ul=l.object({type:l.literal("prev")}),pl=l.object({type:l.literal("step"),stepId:l.string().min(1)}),hl=l.object({type:l.literal("chapter"),chapterId:l.string().min(1)}),ml=l.object({type:l.literal("url"),href:l.string().min(1),target:l.enum(["_self","_blank"]).default("_blank")}),fl=l.object({type:l.literal("restart")}),gl=l.discriminatedUnion("type",[dl,ul,pl,hl,ml,fl]),bl=l.enum(["shimmer"]),kn=l.object({label:l.string().min(1),action:gl.default({type:"next"}),animation:bl.optional(),background:l.string().optional(),textColor:l.string().optional()});var yl="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",or=/^[A-Za-z0-9_-]{12}$/;function xl(e){let t=globalThis.crypto;if(!t||typeof t.getRandomValues!="function")throw new Error("generateDemoId requires globalThis.crypto.getRandomValues (Node 19+, browsers, or edge runtime).");t.getRandomValues(e)}function se(){let e=new Uint8Array(12);xl(e);let t="";for(let n of e)t+=yl.charAt(n&63);return t}function Ei(e){return typeof e=="string"&&or.test(e)}function Ri(e){return String(e+1).padStart(4,"0")}function $i(e){return`snap-${e.toString().padStart(3,"0")}`}function wn(e){let t=((e??"").toLowerCase().split(";")[0]??"").trim();return t.startsWith("image/")?"image":t.startsWith("video/")?"video":t.startsWith("audio/")?"audio":t.startsWith("font/")||t.includes("font")||t.includes("woff")?"font":"other"}function sr(e){if(!e)return"";let t=e.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(t.split(/\r?\n/).map(r=>r.trim()).find(Boolean)??t).replace(/\s+/g," ").trim().slice(0,48)}function lr(e){let{stepId:t,assetId:n,posterAssetId:r,kind:i,isLast:a}=e,o=`asset:${n}`,s=i==="video"?{type:"video",src:o,posterSrc:r?`asset:${r}`:void 0,naturalWidth:e.naturalWidth,naturalHeight:e.naturalHeight,alt:e.title,sourceUrl:e.sourceUrl??"",title:e.title,autoplay:!0,muted:!0,objectFit:"cover"}:{type:"image",src:o,naturalWidth:e.naturalWidth,naturalHeight:e.naturalHeight,alt:e.title,sourceUrl:e.sourceUrl??"",title:e.title,objectFit:"cover"},c=e.click,d=[];if(c){let h=sr(c.label);d.push({id:`${t}_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:`${t}_callout`,type:"message",variant:"callout",x:.5,y:.5,text:a?"End of walkthrough":"Continue",anchor:"auto",textAlign:"left",advancesStep:!0,showNavigation:!0});let u=!!c&&!(c.x===0&&c.y===0),p=i==="image"&&e.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:t,kind:"content",background:s,...p?{transform:p}:{},annotations:d,advance:{trigger:"click"}}}function Di(e){let{stepId:t,htmlPath:n,click:r}=e,i=[];if(r?.alphaId)i.push({id:`${t}_area`,type:"message",variant:"area",x:Number((r.x??.5).toFixed(4)),y:Number((r.y??.5).toFixed(4)),w:0,h:0,text:sr(r.label)||"Click here",target:{type:"html-element",alphaId:r.alphaId},anchor:"auto",textAlign:"left",advancesStep:!0,showNavigation:!0});else if(r){let a=sr(r.label);i.push({id:`${t}_pointer`,type:"message",variant:"pointer",x:Number((r.x??.5).toFixed(4)),y:Number((r.y??.5).toFixed(4)),text:a?`Click on "${a}"`:"Continue",anchor:"auto",textAlign:"left",advancesStep:!0,showNavigation:!0})}return{id:t,kind:"content",background:{type:"html",path:n,naturalWidth:e.naturalWidth,naturalHeight:e.naturalHeight,zoom:1,scroll:e.scroll,sourceUrl:e.sourceUrl??"",title:e.sourceUrl??""},annotations:i,advance:{trigger:"click"}}}function kl(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function cr(e,t){let n=e;for(let[r,i]of t){let a=kl(r);n=n.replace(new RegExp(`(?:\\.\\./)*assets/${a}`,"g"),i),n=n.replace(new RegExp(`assets/${a}`,"g"),i)}return n}function wl(e){return`<script data-inkly-replay-scroll>(()=>{const c=${JSON.stringify(e).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 Ni(e,t){let n=wl(t);return/<\/body\s*>/i.test(e)?e.replace(/<\/body\s*>/i,`${n}</body>`):`${e}${n}`}function Mi(e,t){if(!t||/data-inkly-document-css|document\.css/i.test(e))return e;let n='<link rel="stylesheet" href="./document.css?draft=1" data-inkly-document-css>';return/<\/head\s*>/i.test(e)?e.replace(/<\/head\s*>/i,`${n}</head>`):`${n}${e}`}var Li=l.object({id:l.string(),text:l.string(),start:l.number().nonnegative().optional(),end:l.number().nonnegative().optional()});var vl=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:vl,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()}),Rt=l.object({version:l.literal(1),assets:l.array(Sl),screens:l.array(l.unknown()).optional()});var dr=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.enum(["color","image","glassmorphism"]),Oi=l.object({type:_l,color:dr.optional(),from:dr.optional(),to:dr.optional(),src:l.string().min(1).optional(),alt:l.string().optional(),intensity:l.number().min(-5).max(48).optional()}).superRefine((e,t)=>{if(e.type==="color"){let n=!!e.color,r=!!e.from&&!!e.to;!n&&!r&&t.addIssue({code:l.ZodIssueCode.custom,path:["color"],message:"color backgrounds require color or from/to"}),!!e.from!=!!e.to&&t.addIssue({code:l.ZodIssueCode.custom,path:e.from?["to"]:["from"],message:"gradient backgrounds require both from and to"})}e.type==="image"&&!e.src&&t.addIssue({code:l.ZodIssueCode.custom,path:["src"],message:"image backgrounds require src"})}),ji=l.object({src:l.string(),alt:l.string().optional()});var ur=l.object({src:l.string().min(1),duration:l.number().positive().optional()});var Cl=l.enum(["text","dropdown"]),Tl=l.object({value:l.string().min(1),label:l.string().min(1)}),Al=l.object({id:l.string(),label:l.string(),type:Cl.default("text"),placeholder:l.string().optional(),required:l.boolean().default(!1),options:l.array(Tl).optional()}).superRefine((e,t)=>{e.type==="dropdown"&&(!e.options||e.options.length===0)&&t.addIssue({code:l.ZodIssueCode.custom,message:"Dropdown field requires at least one option.",path:["options"]})}),Bi=l.object({src:l.string().min(1),alt:l.string().optional(),height:l.number().int().positive().optional()}),Il=l.enum(["left","right","top"]),Pl=l.enum(["standard","hero"]),Wi=l.object({src:l.string().min(1),alt:l.string().optional(),naturalWidth:l.number().positive().optional(),naturalHeight:l.number().positive().optional(),position:Il.default("right"),layout:Pl.default("hero")}),El=l.object({type:l.literal("headline"),id:l.string(),logo:Bi.optional(),image:Wi.optional(),title:l.string(),titleColor:l.string().optional(),description:l.string().optional(),descriptionColor:l.string().optional(),textAlign:ir.optional(),cta:kn.optional(),secondaryCta:kn.optional()}),Rl=l.object({type:l.literal("form"),id:l.string(),logo:Bi.optional(),image:Wi.optional(),title:l.string().optional(),description:l.string().optional(),fields:l.array(Al).min(1),submit:kn.default({label:"Submit",action:{type:"next"}})}),$l="allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox allow-presentation",Dl="camera; microphone; fullscreen; payment; clipboard-write",Nl=l.object({type:l.literal("embed"),id:l.string(),src:l.string(),iframeTitle:l.string().optional(),sandbox:l.string().default($l),allow:l.string().default(Dl)}),Ml=l.object({type:l.literal("custom"),id:l.string(),name:l.string().min(1),data:l.record(l.unknown()).optional()}),Ui=l.discriminatedUnion("type",[El,Rl,Nl,Ml]),zi=new Set(["headline","form","embed","custom"]),Fi=l.object({type:l.string()}).passthrough();function Hi(e){return typeof e=="object"&&e!==null?e.type:void 0}var Vi=l.any().superRefine((e,t)=>{let i=(zi.has(Hi(e))?Ui:Fi).safeParse(e);if(!i.success)for(let a of i.error.issues)t.addIssue(a)}).transform(e=>(zi.has(Hi(e))?Ui:Fi).parse(e));var Ji=l.enum(["contain","cover","fill"]),qi=l.enum(["left top","center top","right top","left center","center center","right center","left bottom","center bottom","right bottom"]),Ll=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:Ji.optional(),objectPosition:qi.optional()}),Ol=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:Ji.optional(),objectPosition:qi.optional()}),jl=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)}),Ul=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:jl.default({x:0,y:0,maxX:0,maxY:0}),sourceUrl:l.string().optional(),title:l.string().optional()}),zl=l.discriminatedUnion("type",[Ll,Ol,Ul]),Fl=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)}),Hl=l.object({trigger:l.enum(["auto","click"]).default("auto")}).default({trigger:"auto"}),Bl=l.object({kind:l.literal("content").default("content"),id:l.string(),label:l.string().optional(),duration:l.number().positive().optional(),background:zl,script:l.string().optional(),voiceover:ur.optional(),transform:Fl.optional(),advance:Hl,annotations:l.array(Ai).default([]),captions:l.array(Li).optional()}).passthrough(),Wl=l.object({kind:l.literal("cover"),id:l.string(),label:l.string().optional(),widgets:l.array(Vi).length(1),background:Oi.optional(),backgroundImage:ji.optional(),backgroundDim:l.number().min(0).max(1).optional(),script:l.string().optional(),voiceover:ur.optional(),duration:l.number().positive().optional(),advance:l.object({trigger:l.enum(["auto","click"]).default("click")}).default({trigger:"click"})}).passthrough(),Zi=l.discriminatedUnion("kind",[Bl,Wl]);var Vl=/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,Gi=l.string().regex(Vl,"must be a hex color like #5b3df5"),vn=l.object({primary:Gi.optional(),secondary:Gi.optional(),font:l.string().min(1).optional(),radius:l.string().min(1).optional()}).partial();var Sn=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"}),Jl=l.object({id:l.string(),title:l.string(),stepIds:l.array(l.string()).min(1)}),ql=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)}),Zl=l.object({width:l.number().positive(),height:l.number().positive()}),Gl=l.enum(["public","private"]),Kl=l.enum(["none","color","image"]),Yl=l.object({type:Kl,color:Sn.optional(),from:Sn.optional(),to:Sn.optional(),src:l.string().min(1).optional(),alt:l.string().optional()}).superRefine((e,t)=>{if(e.type==="color"){let n=!!e.color,r=!!e.from&&!!e.to;!n&&!r&&t.addIssue({code:l.ZodIssueCode.custom,path:["color"],message:"color backgrounds require color or from/to"}),!!e.from!=!!e.to&&t.addIssue({code:l.ZodIssueCode.custom,path:e.from?["to"]:["from"],message:"gradient backgrounds require both from and to"})}e.type==="image"&&!e.src&&t.addIssue({code:l.ZodIssueCode.custom,path:["src"],message:"image backgrounds require src"})}),mt=l.object({id:l.string().regex(or,{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:Gl.default("public"),backgroundColor:Sn.optional(),background:Yl.optional(),theme:l.object({preset:l.string().min(1).optional(),tokens:vn.optional(),brand:Pi.optional()}).optional(),chrome:ql.default({}),aspectRatio:Zl.optional(),chapters:l.array(Jl).default([]),steps:l.array(Zi).min(1)}).passthrough().superRefine((e,t)=>{let n=new Set(e.steps.map(i=>i.id)),r=new Set(e.chapters.map(i=>i.id));e.chapters.forEach((i,a)=>{i.stepIds.forEach(o=>{n.has(o)||t.addIssue({code:l.ZodIssueCode.custom,path:["chapters",a,"stepIds"],message:`Chapter "${i.id}" references unknown step "${o}"`})})}),e.steps.forEach((i,a)=>{i.kind==="cover"&&i.widgets.forEach((o,s)=>{o.type==="headline"&&["cta","secondaryCta"].forEach(c=>{let d=o[c]?.action;d&&(d.type==="step"&&!n.has(d.stepId)&&t.addIssue({code:l.ZodIssueCode.custom,path:["steps",a,"widgets",s,c,"action","stepId"],message:`Widget "${o.id}" CTA targets unknown step "${d.stepId}"`}),d.type==="chapter"&&!r.has(d.chapterId)&&t.addIssue({code:l.ZodIssueCode.custom,path:["steps",a,"widgets",s,c,"action","chapterId"],message:`Widget "${o.id}" CTA targets unknown chapter "${d.chapterId}"`}))})})})});function _n(e){return mt.parse(e)}function $t(e){let t=typeof e=="object"&&e!==null?e:{},n=Ei(t.id),r=n?t:{...t,id:se()};return{config:mt.parse(r),changed:!n}}function Ki(e){let t=new Map;e.forEach((r,i)=>{let a=t.get(r.id);a?a.push({entry:r,index:i}):t.set(r.id,[{entry:r,index:i}])});let n=[];for(let r of t.values()){if(r.length<2)continue;let i=[...r].sort((o,s)=>o.entry.updatedAt!==s.entry.updatedAt?o.entry.updatedAt-s.entry.updatedAt:o.index-s.index),[,...a]=i;for(let{entry:o}of a)n.push({entry:o,newId:se()})}return n}var pr=l.enum(["sidebar","tabs"]),Xl=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))}),we=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:pr.optional(),theme:l.string().min(1).optional(),tokens:vn.optional(),brand:ar.optional(),title:l.string().min(1).optional(),subtitle:l.string().min(1).optional(),collections:l.array(Xl).optional()});function Yi({slug:e,config:t,resolveAssetSrc:n}){let r=t.title??t.id??e;return{slug:e,title:r,description:Ql(t,r),thumbnail:nc(t,r,n),visibility:t.visibility}}function Cn(e,t){return e.length<=t?e:`${e.slice(0,t-1).trimEnd()}\u2026`}function Ql(e,t){if(e.subtitle?.trim())return Cn(e.subtitle.trim(),120);for(let n of e.steps){if(n.kind!=="content")continue;let r=n.captions?.[0]?.text;if(r&&r.trim())return Cn(r.trim(),120);break}for(let n of e.steps)if(n.kind==="cover"){for(let r of n.widgets)if(r.type==="headline"&&r.description&&r.description.trim())return Cn(r.description.trim(),120)}return Cn(`Explore the ${t} workflow.`,120)}function ec(e){return e.background?e.background.type==="image":e.backgroundImage?!0:e.widgets.some(t=>t.type==="headline"?!!t.title:t.type==="embed"?!!t.src:t.type==="form")}function hr(e,t){return e?t?t(e):e:null}function tc(e,t){if(!t)return e;let n=e.widgets.map(o=>{if((o.type==="headline"||o.type==="form")&&o.image?.src){let s=t(o.image.src);return s&&s!==o.image.src?{...o,image:{...o.image,src:s}}:o}return o}),r=e.backgroundImage,i=e.background;if(i?.type==="image"&&i.src){let o=t(i.src);o&&o!==i.src&&(i={...i,src:o})}if(r?.src){let o=t(r.src);o&&o!==r.src&&(r={...r,src:o})}return!n.some((o,s)=>o!==e.widgets[s])&&i===e.background&&r===e.backgroundImage?e:{...e,widgets:n,background:i,backgroundImage:r}}function nc(e,t,n){let r=e.steps[0];if(r){if(r.kind==="cover"&&ec(r))return{kind:"cover",cover:tc(r,n),themeTokens:e.theme?.tokens};if(r.kind==="content"){let i=r.background;if(i?.type==="image"){let a=hr(i.src,n);if(a)return{kind:"image",src:a}}else if(i?.type==="video"){let a=hr(i.posterSrc,n);if(a)return{kind:"image",src:a};let o=hr(i.src,n);if(o)return{kind:"video",src:o}}else if(i?.type==="html")return{kind:"html",path:i.path,naturalWidth:i.naturalWidth,naturalHeight:i.naturalHeight,zoom:i.zoom,scroll:i.scroll}}}return{kind:"placeholder",title:t}}function rc(e){return!e||e==="null"?"":e.replace(/\/+$/,"")}function ic(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ac(e){return String(e||"").replace(/\\/g,"/").replace(/^\/+/,"").replace(/^\.\//,"")}function mr(e){let t=ac(e);return/\/index\.html$/i.test(t)||/^index\.html$/i.test(t)?t.replace(/index\.html$/i,"document.css"):/\.html?$/i.test(t)?t.replace(/\.html?$/i,".css"):null}function oc(e){return e.replace(/<meta\b(?=[^>]*\bhttp-equiv\s*=\s*["']?content-security-policy\b)[^>]*>/gi,"")}var sc=/\s+(?:href|xlink:href|target|rel|download|ping|referrerpolicy|data-inkly-href)(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s"'=<>`]+))?/gi;function Xt(e){return String(e||"").replace(/<(a|area)\b[^>]*>/gi,t=>t.replace(sc,""))}function ft(e,t={}){let n=rc(t.resourceOrigin),r=String(e||"");return n?r.replace(new RegExp(`(^|["'\\(\\s,=])${ic("/api/hubs/")}`,"g"),`$1${n}/api/hubs/`):r}function lc(e){return oc(e).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 Xi({htmlPath:e,html:t,css:n,cssHref:r,resourceOrigin:i}){let a=lc(Xt(t)),o=mr(e)!=null,s=n?.trim()??"";if(o&&s){let d=`<style data-inkly-document-css>
|
|
3
|
-
${
|
|
4
|
-
</style>`,
|
|
2
|
+
var rs=Object.defineProperty;var is=(e,t)=>{for(var n in t)rs(e,n,{get:t[n],enumerable:!0})};import Tm from"mri";import{existsSync as vi,statSync as Am}from"fs";import{basename as Pm,isAbsolute as Im,join as Fo,resolve as Em}from"path";import{Buffer as sd}from"buffer";import{mkdir as wa,writeFile as ld,access as cd}from"fs/promises";import{dirname as dd,join as ud,resolve as pd,sep as va}from"path";var d={};is(d,{BRAND:()=>Es,DIRTY:()=>tt,EMPTY_PATH:()=>ls,INVALID:()=>S,NEVER:()=>ml,OK:()=>Q,ParseStatus:()=>K,Schema:()=>E,ZodAny:()=>Be,ZodArray:()=>$e,ZodBigInt:()=>rt,ZodBoolean:()=>it,ZodBranded:()=>nn,ZodCatch:()=>ft,ZodDate:()=>at,ZodDefault:()=>mt,ZodDiscriminatedUnion:()=>vn,ZodEffects:()=>he,ZodEnum:()=>pt,ZodError:()=>re,ZodFirstPartyTypeKind:()=>_,ZodFunction:()=>_n,ZodIntersection:()=>ct,ZodIssueCode:()=>f,ZodLazy:()=>dt,ZodLiteral:()=>ut,ZodMap:()=>$t,ZodNaN:()=>Nt,ZodNativeEnum:()=>ht,ZodNever:()=>be,ZodNull:()=>st,ZodNullable:()=>_e,ZodNumber:()=>nt,ZodObject:()=>ie,ZodOptional:()=>ue,ZodParsedType:()=>y,ZodPipeline:()=>rn,ZodPromise:()=>We,ZodReadonly:()=>gt,ZodRecord:()=>Sn,ZodSchema:()=>E,ZodSet:()=>Dt,ZodString:()=>He,ZodSymbol:()=>Et,ZodTransformer:()=>he,ZodTuple:()=>Se,ZodType:()=>E,ZodUndefined:()=>ot,ZodUnion:()=>lt,ZodUnknown:()=>Re,ZodVoid:()=>Rt,addIssueToContext:()=>b,any:()=>Us,array:()=>Bs,bigint:()=>Ns,boolean:()=>Mi,coerce:()=>hl,custom:()=>$i,date:()=>Ms,datetimeRegex:()=>Ei,defaultErrorMap:()=>Ie,discriminatedUnion:()=>qs,effect:()=>al,enum:()=>nl,function:()=>Qs,getErrorMap:()=>At,getParsedType:()=>ve,instanceof:()=>$s,intersection:()=>Gs,isAborted:()=>kn,isAsync:()=>Pt,isDirty:()=>wn,isValid:()=>Fe,late:()=>Rs,lazy:()=>el,literal:()=>tl,makeIssue:()=>tn,map:()=>Ys,nan:()=>Ds,nativeEnum:()=>rl,never:()=>Fs,null:()=>js,nullable:()=>sl,number:()=>Ni,object:()=>Ws,objectUtil:()=>hr,oboolean:()=>pl,onumber:()=>ul,optional:()=>ol,ostring:()=>dl,pipeline:()=>cl,preprocess:()=>ll,promise:()=>il,quotelessJson:()=>as,record:()=>Ks,set:()=>Xs,setErrorMap:()=>ss,strictObject:()=>Vs,string:()=>Di,symbol:()=>Ls,transformer:()=>al,tuple:()=>Zs,undefined:()=>Os,union:()=>Js,unknown:()=>zs,util:()=>R,void:()=>Hs});var R;(function(e){e.assertEqual=i=>{};function t(i){}e.assertIs=t;function n(i){throw new Error}e.assertNever=n,e.arrayToEnum=i=>{let a={};for(let o of i)a[o]=o;return a},e.getValidEnumValues=i=>{let a=e.objectKeys(i).filter(s=>typeof i[i[s]]!="number"),o={};for(let s of a)o[s]=i[s];return e.objectValues(o)},e.objectValues=i=>e.objectKeys(i).map(function(a){return i[a]}),e.objectKeys=typeof Object.keys=="function"?i=>Object.keys(i):i=>{let a=[];for(let o in i)Object.prototype.hasOwnProperty.call(i,o)&&a.push(o);return a},e.find=(i,a)=>{for(let o of i)if(a(o))return o},e.isInteger=typeof Number.isInteger=="function"?i=>Number.isInteger(i):i=>typeof i=="number"&&Number.isFinite(i)&&Math.floor(i)===i;function r(i,a=" | "){return i.map(o=>typeof o=="string"?`'${o}'`:o).join(a)}e.joinValues=r,e.jsonStringifyReplacer=(i,a)=>typeof a=="bigint"?a.toString():a})(R||(R={}));var hr;(function(e){e.mergeShapes=(t,n)=>({...t,...n})})(hr||(hr={}));var y=R.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),ve=e=>{switch(typeof e){case"undefined":return y.undefined;case"string":return y.string;case"number":return Number.isNaN(e)?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(e)?y.array:e===null?y.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?y.promise:typeof Map<"u"&&e instanceof Map?y.map:typeof Set<"u"&&e instanceof Set?y.set:typeof Date<"u"&&e instanceof Date?y.date:y.object;default:return y.unknown}};var f=R.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"]),as=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:"),re=class e extends Error{get errors(){return this.issues}constructor(t){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=t}format(t){let n=t||function(a){return a.message},r={_errors:[]},i=a=>{for(let o of a.issues)if(o.code==="invalid_union")o.unionErrors.map(i);else if(o.code==="invalid_return_type")i(o.returnTypeError);else if(o.code==="invalid_arguments")i(o.argumentsError);else if(o.path.length===0)r._errors.push(n(o));else{let s=r,l=0;for(;l<o.path.length;){let c=o.path[l];l===o.path.length-1?(s[c]=s[c]||{_errors:[]},s[c]._errors.push(n(o))):s[c]=s[c]||{_errors:[]},s=s[c],l++}}};return i(this),r}static assert(t){if(!(t instanceof e))throw new Error(`Not a ZodError: ${t}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,R.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(t=n=>n.message){let n={},r=[];for(let i of this.issues)if(i.path.length>0){let a=i.path[0];n[a]=n[a]||[],n[a].push(t(i))}else r.push(t(i));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}};re.create=e=>new re(e);var os=(e,t)=>{let n;switch(e.code){case f.invalid_type:e.received===y.undefined?n="Required":n=`Expected ${e.expected}, received ${e.received}`;break;case f.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,R.jsonStringifyReplacer)}`;break;case f.unrecognized_keys:n=`Unrecognized key(s) in object: ${R.joinValues(e.keys,", ")}`;break;case f.invalid_union:n="Invalid input";break;case f.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${R.joinValues(e.options)}`;break;case f.invalid_enum_value:n=`Invalid enum value. Expected ${R.joinValues(e.options)}, received '${e.received}'`;break;case f.invalid_arguments:n="Invalid function arguments";break;case f.invalid_return_type:n="Invalid function return type";break;case f.invalid_date:n="Invalid date";break;case f.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:R.assertNever(e.validation):e.validation!=="regex"?n=`Invalid ${e.validation}`:n="Invalid";break;case f.too_small:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="bigint"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:n="Invalid input";break;case f.too_big:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?n=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:n="Invalid input";break;case f.custom:n="Invalid input";break;case f.invalid_intersection_types:n="Intersection results could not be merged";break;case f.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case f.not_finite:n="Number must be finite";break;default:n=t.defaultError,R.assertNever(e)}return{message:n}},Ie=os;var Ci=Ie;function ss(e){Ci=e}function At(){return Ci}var tn=e=>{let{data:t,path:n,errorMaps:r,issueData:i}=e,a=[...n,...i.path||[]],o={...i,path:a};if(i.message!==void 0)return{...i,path:a,message:i.message};let s="",l=r.filter(c=>!!c).slice().reverse();for(let c of l)s=c(o,{data:t,defaultError:s}).message;return{...i,path:a,message:s}},ls=[];function b(e,t){let n=At(),r=tn({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===Ie?void 0:Ie].filter(i=>!!i)});e.common.issues.push(r)}var K=class e{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(t,n){let r=[];for(let i of n){if(i.status==="aborted")return S;i.status==="dirty"&&t.dirty(),r.push(i.value)}return{status:t.value,value:r}}static async mergeObjectAsync(t,n){let r=[];for(let i of n){let a=await i.key,o=await i.value;r.push({key:a,value:o})}return e.mergeObjectSync(t,r)}static mergeObjectSync(t,n){let r={};for(let i of n){let{key:a,value:o}=i;if(a.status==="aborted"||o.status==="aborted")return S;a.status==="dirty"&&t.dirty(),o.status==="dirty"&&t.dirty(),a.value!=="__proto__"&&(typeof o.value<"u"||i.alwaysSet)&&(r[a.value]=o.value)}return{status:t.value,value:r}}},S=Object.freeze({status:"aborted"}),tt=e=>({status:"dirty",value:e}),Q=e=>({status:"valid",value:e}),kn=e=>e.status==="aborted",wn=e=>e.status==="dirty",Fe=e=>e.status==="valid",Pt=e=>typeof Promise<"u"&&e instanceof Promise;var v;(function(e){e.errToObj=t=>typeof t=="string"?{message:t}:t||{},e.toString=t=>typeof t=="string"?t:t?.message})(v||(v={}));var pe=class{constructor(t,n,r,i){this._cachedPath=[],this.parent=t,this.data=n,this._path=r,this._key=i}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}},Ti=(e,t)=>{if(Fe(t))return{success:!0,data:t.value};if(!e.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 re(e.common.issues);return this._error=n,this._error}}};function T(e){if(!e)return{};let{errorMap:t,invalid_type_error:n,required_error:r,description:i}=e;if(t&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:i}:{errorMap:(o,s)=>{let{message:l}=e;return o.code==="invalid_enum_value"?{message:l??s.defaultError}:typeof s.data>"u"?{message:l??r??s.defaultError}:o.code!=="invalid_type"?{message:s.defaultError}:{message:l??n??s.defaultError}},description:i}}var E=class{get description(){return this._def.description}_getType(t){return ve(t.data)}_getOrReturnCtx(t,n){return n||{common:t.parent.common,data:t.data,parsedType:ve(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new K,ctx:{common:t.parent.common,data:t.data,parsedType:ve(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){let n=this._parse(t);if(Pt(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(t){let n=this._parse(t);return Promise.resolve(n)}parse(t,n){let r=this.safeParse(t,n);if(r.success)return r.data;throw r.error}safeParse(t,n){let r={common:{issues:[],async:n?.async??!1,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:ve(t)},i=this._parseSync({data:t,path:r.path,parent:r});return Ti(r,i)}"~validate"(t){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:ve(t)};if(!this["~standard"].async)try{let r=this._parseSync({data:t,path:[],parent:n});return Fe(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:t,path:[],parent:n}).then(r=>Fe(r)?{value:r.value}:{issues:n.common.issues})}async parseAsync(t,n){let r=await this.safeParseAsync(t,n);if(r.success)return r.data;throw r.error}async safeParseAsync(t,n){let r={common:{issues:[],contextualErrorMap:n?.errorMap,async:!0},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:ve(t)},i=this._parse({data:t,path:r.path,parent:r}),a=await(Pt(i)?i:Promise.resolve(i));return Ti(r,a)}refine(t,n){let r=i=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(i):n;return this._refinement((i,a)=>{let o=t(i),s=()=>a.addIssue({code:f.custom,...r(i)});return typeof Promise<"u"&&o instanceof Promise?o.then(l=>l?!0:(s(),!1)):o?!0:(s(),!1)})}refinement(t,n){return this._refinement((r,i)=>t(r)?!0:(i.addIssue(typeof n=="function"?n(r,i):n),!1))}_refinement(t){return new he({schema:this,typeName:_.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}constructor(t){this.spa=this.safeParseAsync,this._def=t,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 ue.create(this,this._def)}nullable(){return _e.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return $e.create(this)}promise(){return We.create(this,this._def)}or(t){return lt.create([this,t],this._def)}and(t){return ct.create(this,t,this._def)}transform(t){return new he({...T(this._def),schema:this,typeName:_.ZodEffects,effect:{type:"transform",transform:t}})}default(t){let n=typeof t=="function"?t:()=>t;return new mt({...T(this._def),innerType:this,defaultValue:n,typeName:_.ZodDefault})}brand(){return new nn({typeName:_.ZodBranded,type:this,...T(this._def)})}catch(t){let n=typeof t=="function"?t:()=>t;return new ft({...T(this._def),innerType:this,catchValue:n,typeName:_.ZodCatch})}describe(t){let n=this.constructor;return new n({...this._def,description:t})}pipe(t){return rn.create(this,t)}readonly(){return gt.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},cs=/^c[^\s-]{8,}$/i,ds=/^[0-9a-z]+$/,us=/^[0-9A-HJKMNP-TV-Z]{26}$/i,ps=/^[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,hs=/^[a-z0-9_-]{21}$/i,ms=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,fs=/^[-+]?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)?)??$/,gs=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,bs="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",mr,ys=/^(?:(?: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])$/,xs=/^(?:(?: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])$/,ks=/^(([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]))$/,ws=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,vs=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,Ss=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Pi="((\\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])))",_s=new RegExp(`^${Pi}$`);function Ii(e){let t="[0-5]\\d";e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision==null&&(t=`${t}(\\.\\d+)?`);let n=e.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${n}`}function Cs(e){return new RegExp(`^${Ii(e)}$`)}function Ei(e){let t=`${Pi}T${Ii(e)}`,n=[];return n.push(e.local?"Z?":"Z"),e.offset&&n.push("([+-]\\d{2}:?\\d{2})"),t=`${t}(${n.join("|")})`,new RegExp(`^${t}$`)}function Ts(e,t){return!!((t==="v4"||!t)&&ys.test(e)||(t==="v6"||!t)&&ks.test(e))}function As(e,t){if(!ms.test(e))return!1;try{let[n]=e.split(".");if(!n)return!1;let r=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),i=JSON.parse(atob(r));return!(typeof i!="object"||i===null||"typ"in i&&i?.typ!=="JWT"||!i.alg||t&&i.alg!==t)}catch{return!1}}function Ps(e,t){return!!((t==="v4"||!t)&&xs.test(e)||(t==="v6"||!t)&&ws.test(e))}var He=class e extends E{_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==y.string){let a=this._getOrReturnCtx(t);return b(a,{code:f.invalid_type,expected:y.string,received:a.parsedType}),S}let r=new K,i;for(let a of this._def.checks)if(a.kind==="min")t.data.length<a.value&&(i=this._getOrReturnCtx(t,i),b(i,{code:f.too_small,minimum:a.value,type:"string",inclusive:!0,exact:!1,message:a.message}),r.dirty());else if(a.kind==="max")t.data.length>a.value&&(i=this._getOrReturnCtx(t,i),b(i,{code:f.too_big,maximum:a.value,type:"string",inclusive:!0,exact:!1,message:a.message}),r.dirty());else if(a.kind==="length"){let o=t.data.length>a.value,s=t.data.length<a.value;(o||s)&&(i=this._getOrReturnCtx(t,i),o?b(i,{code:f.too_big,maximum:a.value,type:"string",inclusive:!0,exact:!0,message:a.message}):s&&b(i,{code:f.too_small,minimum:a.value,type:"string",inclusive:!0,exact:!0,message:a.message}),r.dirty())}else if(a.kind==="email")gs.test(t.data)||(i=this._getOrReturnCtx(t,i),b(i,{validation:"email",code:f.invalid_string,message:a.message}),r.dirty());else if(a.kind==="emoji")mr||(mr=new RegExp(bs,"u")),mr.test(t.data)||(i=this._getOrReturnCtx(t,i),b(i,{validation:"emoji",code:f.invalid_string,message:a.message}),r.dirty());else if(a.kind==="uuid")ps.test(t.data)||(i=this._getOrReturnCtx(t,i),b(i,{validation:"uuid",code:f.invalid_string,message:a.message}),r.dirty());else if(a.kind==="nanoid")hs.test(t.data)||(i=this._getOrReturnCtx(t,i),b(i,{validation:"nanoid",code:f.invalid_string,message:a.message}),r.dirty());else if(a.kind==="cuid")cs.test(t.data)||(i=this._getOrReturnCtx(t,i),b(i,{validation:"cuid",code:f.invalid_string,message:a.message}),r.dirty());else if(a.kind==="cuid2")ds.test(t.data)||(i=this._getOrReturnCtx(t,i),b(i,{validation:"cuid2",code:f.invalid_string,message:a.message}),r.dirty());else if(a.kind==="ulid")us.test(t.data)||(i=this._getOrReturnCtx(t,i),b(i,{validation:"ulid",code:f.invalid_string,message:a.message}),r.dirty());else if(a.kind==="url")try{new URL(t.data)}catch{i=this._getOrReturnCtx(t,i),b(i,{validation:"url",code:f.invalid_string,message:a.message}),r.dirty()}else a.kind==="regex"?(a.regex.lastIndex=0,a.regex.test(t.data)||(i=this._getOrReturnCtx(t,i),b(i,{validation:"regex",code:f.invalid_string,message:a.message}),r.dirty())):a.kind==="trim"?t.data=t.data.trim():a.kind==="includes"?t.data.includes(a.value,a.position)||(i=this._getOrReturnCtx(t,i),b(i,{code:f.invalid_string,validation:{includes:a.value,position:a.position},message:a.message}),r.dirty()):a.kind==="toLowerCase"?t.data=t.data.toLowerCase():a.kind==="toUpperCase"?t.data=t.data.toUpperCase():a.kind==="startsWith"?t.data.startsWith(a.value)||(i=this._getOrReturnCtx(t,i),b(i,{code:f.invalid_string,validation:{startsWith:a.value},message:a.message}),r.dirty()):a.kind==="endsWith"?t.data.endsWith(a.value)||(i=this._getOrReturnCtx(t,i),b(i,{code:f.invalid_string,validation:{endsWith:a.value},message:a.message}),r.dirty()):a.kind==="datetime"?Ei(a).test(t.data)||(i=this._getOrReturnCtx(t,i),b(i,{code:f.invalid_string,validation:"datetime",message:a.message}),r.dirty()):a.kind==="date"?_s.test(t.data)||(i=this._getOrReturnCtx(t,i),b(i,{code:f.invalid_string,validation:"date",message:a.message}),r.dirty()):a.kind==="time"?Cs(a).test(t.data)||(i=this._getOrReturnCtx(t,i),b(i,{code:f.invalid_string,validation:"time",message:a.message}),r.dirty()):a.kind==="duration"?fs.test(t.data)||(i=this._getOrReturnCtx(t,i),b(i,{validation:"duration",code:f.invalid_string,message:a.message}),r.dirty()):a.kind==="ip"?Ts(t.data,a.version)||(i=this._getOrReturnCtx(t,i),b(i,{validation:"ip",code:f.invalid_string,message:a.message}),r.dirty()):a.kind==="jwt"?As(t.data,a.alg)||(i=this._getOrReturnCtx(t,i),b(i,{validation:"jwt",code:f.invalid_string,message:a.message}),r.dirty()):a.kind==="cidr"?Ps(t.data,a.version)||(i=this._getOrReturnCtx(t,i),b(i,{validation:"cidr",code:f.invalid_string,message:a.message}),r.dirty()):a.kind==="base64"?vs.test(t.data)||(i=this._getOrReturnCtx(t,i),b(i,{validation:"base64",code:f.invalid_string,message:a.message}),r.dirty()):a.kind==="base64url"?Ss.test(t.data)||(i=this._getOrReturnCtx(t,i),b(i,{validation:"base64url",code:f.invalid_string,message:a.message}),r.dirty()):R.assertNever(a);return{status:r.value,value:t.data}}_regex(t,n,r){return this.refinement(i=>t.test(i),{validation:n,code:f.invalid_string,...v.errToObj(r)})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:"email",...v.errToObj(t)})}url(t){return this._addCheck({kind:"url",...v.errToObj(t)})}emoji(t){return this._addCheck({kind:"emoji",...v.errToObj(t)})}uuid(t){return this._addCheck({kind:"uuid",...v.errToObj(t)})}nanoid(t){return this._addCheck({kind:"nanoid",...v.errToObj(t)})}cuid(t){return this._addCheck({kind:"cuid",...v.errToObj(t)})}cuid2(t){return this._addCheck({kind:"cuid2",...v.errToObj(t)})}ulid(t){return this._addCheck({kind:"ulid",...v.errToObj(t)})}base64(t){return this._addCheck({kind:"base64",...v.errToObj(t)})}base64url(t){return this._addCheck({kind:"base64url",...v.errToObj(t)})}jwt(t){return this._addCheck({kind:"jwt",...v.errToObj(t)})}ip(t){return this._addCheck({kind:"ip",...v.errToObj(t)})}cidr(t){return this._addCheck({kind:"cidr",...v.errToObj(t)})}datetime(t){return typeof t=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:t}):this._addCheck({kind:"datetime",precision:typeof t?.precision>"u"?null:t?.precision,offset:t?.offset??!1,local:t?.local??!1,...v.errToObj(t?.message)})}date(t){return this._addCheck({kind:"date",message:t})}time(t){return typeof t=="string"?this._addCheck({kind:"time",precision:null,message:t}):this._addCheck({kind:"time",precision:typeof t?.precision>"u"?null:t?.precision,...v.errToObj(t?.message)})}duration(t){return this._addCheck({kind:"duration",...v.errToObj(t)})}regex(t,n){return this._addCheck({kind:"regex",regex:t,...v.errToObj(n)})}includes(t,n){return this._addCheck({kind:"includes",value:t,position:n?.position,...v.errToObj(n?.message)})}startsWith(t,n){return this._addCheck({kind:"startsWith",value:t,...v.errToObj(n)})}endsWith(t,n){return this._addCheck({kind:"endsWith",value:t,...v.errToObj(n)})}min(t,n){return this._addCheck({kind:"min",value:t,...v.errToObj(n)})}max(t,n){return this._addCheck({kind:"max",value:t,...v.errToObj(n)})}length(t,n){return this._addCheck({kind:"length",value:t,...v.errToObj(n)})}nonempty(t){return this.min(1,v.errToObj(t))}trim(){return new e({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new e({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new e({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(t=>t.kind==="datetime")}get isDate(){return!!this._def.checks.find(t=>t.kind==="date")}get isTime(){return!!this._def.checks.find(t=>t.kind==="time")}get isDuration(){return!!this._def.checks.find(t=>t.kind==="duration")}get isEmail(){return!!this._def.checks.find(t=>t.kind==="email")}get isURL(){return!!this._def.checks.find(t=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find(t=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find(t=>t.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(t=>t.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(t=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(t=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find(t=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find(t=>t.kind==="ip")}get isCIDR(){return!!this._def.checks.find(t=>t.kind==="cidr")}get isBase64(){return!!this._def.checks.find(t=>t.kind==="base64")}get isBase64url(){return!!this._def.checks.find(t=>t.kind==="base64url")}get minLength(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxLength(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}};He.create=e=>new He({checks:[],typeName:_.ZodString,coerce:e?.coerce??!1,...T(e)});function Is(e,t){let n=(e.toString().split(".")[1]||"").length,r=(t.toString().split(".")[1]||"").length,i=n>r?n:r,a=Number.parseInt(e.toFixed(i).replace(".","")),o=Number.parseInt(t.toFixed(i).replace(".",""));return a%o/10**i}var nt=class e extends E{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==y.number){let a=this._getOrReturnCtx(t);return b(a,{code:f.invalid_type,expected:y.number,received:a.parsedType}),S}let r,i=new K;for(let a of this._def.checks)a.kind==="int"?R.isInteger(t.data)||(r=this._getOrReturnCtx(t,r),b(r,{code:f.invalid_type,expected:"integer",received:"float",message:a.message}),i.dirty()):a.kind==="min"?(a.inclusive?t.data<a.value:t.data<=a.value)&&(r=this._getOrReturnCtx(t,r),b(r,{code:f.too_small,minimum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),i.dirty()):a.kind==="max"?(a.inclusive?t.data>a.value:t.data>=a.value)&&(r=this._getOrReturnCtx(t,r),b(r,{code:f.too_big,maximum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),i.dirty()):a.kind==="multipleOf"?Is(t.data,a.value)!==0&&(r=this._getOrReturnCtx(t,r),b(r,{code:f.not_multiple_of,multipleOf:a.value,message:a.message}),i.dirty()):a.kind==="finite"?Number.isFinite(t.data)||(r=this._getOrReturnCtx(t,r),b(r,{code:f.not_finite,message:a.message}),i.dirty()):R.assertNever(a);return{status:i.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,v.toString(n))}gt(t,n){return this.setLimit("min",t,!1,v.toString(n))}lte(t,n){return this.setLimit("max",t,!0,v.toString(n))}lt(t,n){return this.setLimit("max",t,!1,v.toString(n))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:v.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:v.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:v.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:v.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:v.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:v.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:v.toString(n)})}finite(t){return this._addCheck({kind:"finite",message:v.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:v.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:v.toString(t)})}get minValue(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}get isInt(){return!!this._def.checks.find(t=>t.kind==="int"||t.kind==="multipleOf"&&R.isInteger(t.value))}get isFinite(){let t=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"&&(t===null||r.value<t)&&(t=r.value)}return Number.isFinite(n)&&Number.isFinite(t)}};nt.create=e=>new nt({checks:[],typeName:_.ZodNumber,coerce:e?.coerce||!1,...T(e)});var rt=class e extends E{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce)try{t.data=BigInt(t.data)}catch{return this._getInvalidInput(t)}if(this._getType(t)!==y.bigint)return this._getInvalidInput(t);let r,i=new K;for(let a of this._def.checks)a.kind==="min"?(a.inclusive?t.data<a.value:t.data<=a.value)&&(r=this._getOrReturnCtx(t,r),b(r,{code:f.too_small,type:"bigint",minimum:a.value,inclusive:a.inclusive,message:a.message}),i.dirty()):a.kind==="max"?(a.inclusive?t.data>a.value:t.data>=a.value)&&(r=this._getOrReturnCtx(t,r),b(r,{code:f.too_big,type:"bigint",maximum:a.value,inclusive:a.inclusive,message:a.message}),i.dirty()):a.kind==="multipleOf"?t.data%a.value!==BigInt(0)&&(r=this._getOrReturnCtx(t,r),b(r,{code:f.not_multiple_of,multipleOf:a.value,message:a.message}),i.dirty()):R.assertNever(a);return{status:i.value,value:t.data}}_getInvalidInput(t){let n=this._getOrReturnCtx(t);return b(n,{code:f.invalid_type,expected:y.bigint,received:n.parsedType}),S}gte(t,n){return this.setLimit("min",t,!0,v.toString(n))}gt(t,n){return this.setLimit("min",t,!1,v.toString(n))}lte(t,n){return this.setLimit("max",t,!0,v.toString(n))}lt(t,n){return this.setLimit("max",t,!1,v.toString(n))}setLimit(t,n,r,i){return new e({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:v.toString(i)}]})}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:v.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:v.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:v.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:v.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:v.toString(n)})}get minValue(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t}};rt.create=e=>new rt({checks:[],typeName:_.ZodBigInt,coerce:e?.coerce??!1,...T(e)});var it=class extends E{_parse(t){if(this._def.coerce&&(t.data=!!t.data),this._getType(t)!==y.boolean){let r=this._getOrReturnCtx(t);return b(r,{code:f.invalid_type,expected:y.boolean,received:r.parsedType}),S}return Q(t.data)}};it.create=e=>new it({typeName:_.ZodBoolean,coerce:e?.coerce||!1,...T(e)});var at=class e extends E{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==y.date){let a=this._getOrReturnCtx(t);return b(a,{code:f.invalid_type,expected:y.date,received:a.parsedType}),S}if(Number.isNaN(t.data.getTime())){let a=this._getOrReturnCtx(t);return b(a,{code:f.invalid_date}),S}let r=new K,i;for(let a of this._def.checks)a.kind==="min"?t.data.getTime()<a.value&&(i=this._getOrReturnCtx(t,i),b(i,{code:f.too_small,message:a.message,inclusive:!0,exact:!1,minimum:a.value,type:"date"}),r.dirty()):a.kind==="max"?t.data.getTime()>a.value&&(i=this._getOrReturnCtx(t,i),b(i,{code:f.too_big,message:a.message,inclusive:!0,exact:!1,maximum:a.value,type:"date"}),r.dirty()):R.assertNever(a);return{status:r.value,value:new Date(t.data.getTime())}}_addCheck(t){return new e({...this._def,checks:[...this._def.checks,t]})}min(t,n){return this._addCheck({kind:"min",value:t.getTime(),message:v.toString(n)})}max(t,n){return this._addCheck({kind:"max",value:t.getTime(),message:v.toString(n)})}get minDate(){let t=null;for(let n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t!=null?new Date(t):null}get maxDate(){let t=null;for(let n of this._def.checks)n.kind==="max"&&(t===null||n.value<t)&&(t=n.value);return t!=null?new Date(t):null}};at.create=e=>new at({checks:[],coerce:e?.coerce||!1,typeName:_.ZodDate,...T(e)});var Et=class extends E{_parse(t){if(this._getType(t)!==y.symbol){let r=this._getOrReturnCtx(t);return b(r,{code:f.invalid_type,expected:y.symbol,received:r.parsedType}),S}return Q(t.data)}};Et.create=e=>new Et({typeName:_.ZodSymbol,...T(e)});var ot=class extends E{_parse(t){if(this._getType(t)!==y.undefined){let r=this._getOrReturnCtx(t);return b(r,{code:f.invalid_type,expected:y.undefined,received:r.parsedType}),S}return Q(t.data)}};ot.create=e=>new ot({typeName:_.ZodUndefined,...T(e)});var st=class extends E{_parse(t){if(this._getType(t)!==y.null){let r=this._getOrReturnCtx(t);return b(r,{code:f.invalid_type,expected:y.null,received:r.parsedType}),S}return Q(t.data)}};st.create=e=>new st({typeName:_.ZodNull,...T(e)});var Be=class extends E{constructor(){super(...arguments),this._any=!0}_parse(t){return Q(t.data)}};Be.create=e=>new Be({typeName:_.ZodAny,...T(e)});var Re=class extends E{constructor(){super(...arguments),this._unknown=!0}_parse(t){return Q(t.data)}};Re.create=e=>new Re({typeName:_.ZodUnknown,...T(e)});var be=class extends E{_parse(t){let n=this._getOrReturnCtx(t);return b(n,{code:f.invalid_type,expected:y.never,received:n.parsedType}),S}};be.create=e=>new be({typeName:_.ZodNever,...T(e)});var Rt=class extends E{_parse(t){if(this._getType(t)!==y.undefined){let r=this._getOrReturnCtx(t);return b(r,{code:f.invalid_type,expected:y.void,received:r.parsedType}),S}return Q(t.data)}};Rt.create=e=>new Rt({typeName:_.ZodVoid,...T(e)});var $e=class e extends E{_parse(t){let{ctx:n,status:r}=this._processInputParams(t),i=this._def;if(n.parsedType!==y.array)return b(n,{code:f.invalid_type,expected:y.array,received:n.parsedType}),S;if(i.exactLength!==null){let o=n.data.length>i.exactLength.value,s=n.data.length<i.exactLength.value;(o||s)&&(b(n,{code:o?f.too_big:f.too_small,minimum:s?i.exactLength.value:void 0,maximum:o?i.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:i.exactLength.message}),r.dirty())}if(i.minLength!==null&&n.data.length<i.minLength.value&&(b(n,{code:f.too_small,minimum:i.minLength.value,type:"array",inclusive:!0,exact:!1,message:i.minLength.message}),r.dirty()),i.maxLength!==null&&n.data.length>i.maxLength.value&&(b(n,{code:f.too_big,maximum:i.maxLength.value,type:"array",inclusive:!0,exact:!1,message:i.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((o,s)=>i.type._parseAsync(new pe(n,o,n.path,s)))).then(o=>K.mergeArray(r,o));let a=[...n.data].map((o,s)=>i.type._parseSync(new pe(n,o,n.path,s)));return K.mergeArray(r,a)}get element(){return this._def.type}min(t,n){return new e({...this._def,minLength:{value:t,message:v.toString(n)}})}max(t,n){return new e({...this._def,maxLength:{value:t,message:v.toString(n)}})}length(t,n){return new e({...this._def,exactLength:{value:t,message:v.toString(n)}})}nonempty(t){return this.min(1,t)}};$e.create=(e,t)=>new $e({type:e,minLength:null,maxLength:null,exactLength:null,typeName:_.ZodArray,...T(t)});function It(e){if(e instanceof ie){let t={};for(let n in e.shape){let r=e.shape[n];t[n]=ue.create(It(r))}return new ie({...e._def,shape:()=>t})}else return e instanceof $e?new $e({...e._def,type:It(e.element)}):e instanceof ue?ue.create(It(e.unwrap())):e instanceof _e?_e.create(It(e.unwrap())):e instanceof Se?Se.create(e.items.map(t=>It(t))):e}var ie=class e extends E{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let t=this._def.shape(),n=R.objectKeys(t);return this._cached={shape:t,keys:n},this._cached}_parse(t){if(this._getType(t)!==y.object){let c=this._getOrReturnCtx(t);return b(c,{code:f.invalid_type,expected:y.object,received:c.parsedType}),S}let{status:r,ctx:i}=this._processInputParams(t),{shape:a,keys:o}=this._getCached(),s=[];if(!(this._def.catchall instanceof be&&this._def.unknownKeys==="strip"))for(let c in i.data)o.includes(c)||s.push(c);let l=[];for(let c of o){let u=a[c],p=i.data[c];l.push({key:{status:"valid",value:c},value:u._parse(new pe(i,p,i.path,c)),alwaysSet:c in i.data})}if(this._def.catchall instanceof be){let c=this._def.unknownKeys;if(c==="passthrough")for(let u of s)l.push({key:{status:"valid",value:u},value:{status:"valid",value:i.data[u]}});else if(c==="strict")s.length>0&&(b(i,{code:f.unrecognized_keys,keys:s}),r.dirty());else if(c!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let c=this._def.catchall;for(let u of s){let p=i.data[u];l.push({key:{status:"valid",value:u},value:c._parse(new pe(i,p,i.path,u)),alwaysSet:u in i.data})}}return i.common.async?Promise.resolve().then(async()=>{let c=[];for(let u of l){let p=await u.key,h=await u.value;c.push({key:p,value:h,alwaysSet:u.alwaysSet})}return c}).then(c=>K.mergeObjectSync(r,c)):K.mergeObjectSync(r,l)}get shape(){return this._def.shape()}strict(t){return v.errToObj,new e({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(n,r)=>{let i=this._def.errorMap?.(n,r).message??r.defaultError;return n.code==="unrecognized_keys"?{message:v.errToObj(t).message??i}:{message:i}}}:{}})}strip(){return new e({...this._def,unknownKeys:"strip"})}passthrough(){return new e({...this._def,unknownKeys:"passthrough"})}extend(t){return new e({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new e({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:_.ZodObject})}setKey(t,n){return this.augment({[t]:n})}catchall(t){return new e({...this._def,catchall:t})}pick(t){let n={};for(let r of R.objectKeys(t))t[r]&&this.shape[r]&&(n[r]=this.shape[r]);return new e({...this._def,shape:()=>n})}omit(t){let n={};for(let r of R.objectKeys(this.shape))t[r]||(n[r]=this.shape[r]);return new e({...this._def,shape:()=>n})}deepPartial(){return It(this)}partial(t){let n={};for(let r of R.objectKeys(this.shape)){let i=this.shape[r];t&&!t[r]?n[r]=i:n[r]=i.optional()}return new e({...this._def,shape:()=>n})}required(t){let n={};for(let r of R.objectKeys(this.shape))if(t&&!t[r])n[r]=this.shape[r];else{let a=this.shape[r];for(;a instanceof ue;)a=a._def.innerType;n[r]=a}return new e({...this._def,shape:()=>n})}keyof(){return Ri(R.objectKeys(this.shape))}};ie.create=(e,t)=>new ie({shape:()=>e,unknownKeys:"strip",catchall:be.create(),typeName:_.ZodObject,...T(t)});ie.strictCreate=(e,t)=>new ie({shape:()=>e,unknownKeys:"strict",catchall:be.create(),typeName:_.ZodObject,...T(t)});ie.lazycreate=(e,t)=>new ie({shape:e,unknownKeys:"strip",catchall:be.create(),typeName:_.ZodObject,...T(t)});var lt=class extends E{_parse(t){let{ctx:n}=this._processInputParams(t),r=this._def.options;function i(a){for(let s of a)if(s.result.status==="valid")return s.result;for(let s of a)if(s.result.status==="dirty")return n.common.issues.push(...s.ctx.common.issues),s.result;let o=a.map(s=>new re(s.ctx.common.issues));return b(n,{code:f.invalid_union,unionErrors:o}),S}if(n.common.async)return Promise.all(r.map(async a=>{let o={...n,common:{...n.common,issues:[]},parent:null};return{result:await a._parseAsync({data:n.data,path:n.path,parent:o}),ctx:o}})).then(i);{let a,o=[];for(let l of r){let c={...n,common:{...n.common,issues:[]},parent:null},u=l._parseSync({data:n.data,path:n.path,parent:c});if(u.status==="valid")return u;u.status==="dirty"&&!a&&(a={result:u,ctx:c}),c.common.issues.length&&o.push(c.common.issues)}if(a)return n.common.issues.push(...a.ctx.common.issues),a.result;let s=o.map(l=>new re(l));return b(n,{code:f.invalid_union,unionErrors:s}),S}}get options(){return this._def.options}};lt.create=(e,t)=>new lt({options:e,typeName:_.ZodUnion,...T(t)});var Ee=e=>e instanceof dt?Ee(e.schema):e instanceof he?Ee(e.innerType()):e instanceof ut?[e.value]:e instanceof pt?e.options:e instanceof ht?R.objectValues(e.enum):e instanceof mt?Ee(e._def.innerType):e instanceof ot?[void 0]:e instanceof st?[null]:e instanceof ue?[void 0,...Ee(e.unwrap())]:e instanceof _e?[null,...Ee(e.unwrap())]:e instanceof nn||e instanceof gt?Ee(e.unwrap()):e instanceof ft?Ee(e._def.innerType):[],vn=class e extends E{_parse(t){let{ctx:n}=this._processInputParams(t);if(n.parsedType!==y.object)return b(n,{code:f.invalid_type,expected:y.object,received:n.parsedType}),S;let r=this.discriminator,i=n.data[r],a=this.optionsMap.get(i);return a?n.common.async?a._parseAsync({data:n.data,path:n.path,parent:n}):a._parseSync({data:n.data,path:n.path,parent:n}):(b(n,{code:f.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(t,n,r){let i=new Map;for(let a of n){let o=Ee(a.shape[t]);if(!o.length)throw new Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let s of o){if(i.has(s))throw new Error(`Discriminator property ${String(t)} has duplicate value ${String(s)}`);i.set(s,a)}}return new e({typeName:_.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:i,...T(r)})}};function fr(e,t){let n=ve(e),r=ve(t);if(e===t)return{valid:!0,data:e};if(n===y.object&&r===y.object){let i=R.objectKeys(t),a=R.objectKeys(e).filter(s=>i.indexOf(s)!==-1),o={...e,...t};for(let s of a){let l=fr(e[s],t[s]);if(!l.valid)return{valid:!1};o[s]=l.data}return{valid:!0,data:o}}else if(n===y.array&&r===y.array){if(e.length!==t.length)return{valid:!1};let i=[];for(let a=0;a<e.length;a++){let o=e[a],s=t[a],l=fr(o,s);if(!l.valid)return{valid:!1};i.push(l.data)}return{valid:!0,data:i}}else return n===y.date&&r===y.date&&+e==+t?{valid:!0,data:e}:{valid:!1}}var ct=class extends E{_parse(t){let{status:n,ctx:r}=this._processInputParams(t),i=(a,o)=>{if(kn(a)||kn(o))return S;let s=fr(a.value,o.value);return s.valid?((wn(a)||wn(o))&&n.dirty(),{status:n.value,value:s.data}):(b(r,{code:f.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(([a,o])=>i(a,o)):i(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};ct.create=(e,t,n)=>new ct({left:e,right:t,typeName:_.ZodIntersection,...T(n)});var Se=class e extends E{_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==y.array)return b(r,{code:f.invalid_type,expected:y.array,received:r.parsedType}),S;if(r.data.length<this._def.items.length)return b(r,{code:f.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),S;!this._def.rest&&r.data.length>this._def.items.length&&(b(r,{code:f.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());let a=[...r.data].map((o,s)=>{let l=this._def.items[s]||this._def.rest;return l?l._parse(new pe(r,o,r.path,s)):null}).filter(o=>!!o);return r.common.async?Promise.all(a).then(o=>K.mergeArray(n,o)):K.mergeArray(n,a)}get items(){return this._def.items}rest(t){return new e({...this._def,rest:t})}};Se.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new Se({items:e,typeName:_.ZodTuple,rest:null,...T(t)})};var Sn=class e extends E{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==y.object)return b(r,{code:f.invalid_type,expected:y.object,received:r.parsedType}),S;let i=[],a=this._def.keyType,o=this._def.valueType;for(let s in r.data)i.push({key:a._parse(new pe(r,s,r.path,s)),value:o._parse(new pe(r,r.data[s],r.path,s)),alwaysSet:s in r.data});return r.common.async?K.mergeObjectAsync(n,i):K.mergeObjectSync(n,i)}get element(){return this._def.valueType}static create(t,n,r){return n instanceof E?new e({keyType:t,valueType:n,typeName:_.ZodRecord,...T(r)}):new e({keyType:He.create(),valueType:t,typeName:_.ZodRecord,...T(n)})}},$t=class extends E{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==y.map)return b(r,{code:f.invalid_type,expected:y.map,received:r.parsedType}),S;let i=this._def.keyType,a=this._def.valueType,o=[...r.data.entries()].map(([s,l],c)=>({key:i._parse(new pe(r,s,r.path,[c,"key"])),value:a._parse(new pe(r,l,r.path,[c,"value"]))}));if(r.common.async){let s=new Map;return Promise.resolve().then(async()=>{for(let l of o){let c=await l.key,u=await l.value;if(c.status==="aborted"||u.status==="aborted")return S;(c.status==="dirty"||u.status==="dirty")&&n.dirty(),s.set(c.value,u.value)}return{status:n.value,value:s}})}else{let s=new Map;for(let l of o){let c=l.key,u=l.value;if(c.status==="aborted"||u.status==="aborted")return S;(c.status==="dirty"||u.status==="dirty")&&n.dirty(),s.set(c.value,u.value)}return{status:n.value,value:s}}}};$t.create=(e,t,n)=>new $t({valueType:t,keyType:e,typeName:_.ZodMap,...T(n)});var Dt=class e extends E{_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==y.set)return b(r,{code:f.invalid_type,expected:y.set,received:r.parsedType}),S;let i=this._def;i.minSize!==null&&r.data.size<i.minSize.value&&(b(r,{code:f.too_small,minimum:i.minSize.value,type:"set",inclusive:!0,exact:!1,message:i.minSize.message}),n.dirty()),i.maxSize!==null&&r.data.size>i.maxSize.value&&(b(r,{code:f.too_big,maximum:i.maxSize.value,type:"set",inclusive:!0,exact:!1,message:i.maxSize.message}),n.dirty());let a=this._def.valueType;function o(l){let c=new Set;for(let u of l){if(u.status==="aborted")return S;u.status==="dirty"&&n.dirty(),c.add(u.value)}return{status:n.value,value:c}}let s=[...r.data.values()].map((l,c)=>a._parse(new pe(r,l,r.path,c)));return r.common.async?Promise.all(s).then(l=>o(l)):o(s)}min(t,n){return new e({...this._def,minSize:{value:t,message:v.toString(n)}})}max(t,n){return new e({...this._def,maxSize:{value:t,message:v.toString(n)}})}size(t,n){return this.min(t,n).max(t,n)}nonempty(t){return this.min(1,t)}};Dt.create=(e,t)=>new Dt({valueType:e,minSize:null,maxSize:null,typeName:_.ZodSet,...T(t)});var _n=class e extends E{constructor(){super(...arguments),this.validate=this.implement}_parse(t){let{ctx:n}=this._processInputParams(t);if(n.parsedType!==y.function)return b(n,{code:f.invalid_type,expected:y.function,received:n.parsedType}),S;function r(s,l){return tn({data:s,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,At(),Ie].filter(c=>!!c),issueData:{code:f.invalid_arguments,argumentsError:l}})}function i(s,l){return tn({data:s,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,At(),Ie].filter(c=>!!c),issueData:{code:f.invalid_return_type,returnTypeError:l}})}let a={errorMap:n.common.contextualErrorMap},o=n.data;if(this._def.returns instanceof We){let s=this;return Q(async function(...l){let c=new re([]),u=await s._def.args.parseAsync(l,a).catch(m=>{throw c.addIssue(r(l,m)),c}),p=await Reflect.apply(o,this,u);return await s._def.returns._def.type.parseAsync(p,a).catch(m=>{throw c.addIssue(i(p,m)),c})})}else{let s=this;return Q(function(...l){let c=s._def.args.safeParse(l,a);if(!c.success)throw new re([r(l,c.error)]);let u=Reflect.apply(o,this,c.data),p=s._def.returns.safeParse(u,a);if(!p.success)throw new re([i(u,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new e({...this._def,args:Se.create(t).rest(Re.create())})}returns(t){return new e({...this._def,returns:t})}implement(t){return this.parse(t)}strictImplement(t){return this.parse(t)}static create(t,n,r){return new e({args:t||Se.create([]).rest(Re.create()),returns:n||Re.create(),typeName:_.ZodFunction,...T(r)})}},dt=class extends E{get schema(){return this._def.getter()}_parse(t){let{ctx:n}=this._processInputParams(t);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}};dt.create=(e,t)=>new dt({getter:e,typeName:_.ZodLazy,...T(t)});var ut=class extends E{_parse(t){if(t.data!==this._def.value){let n=this._getOrReturnCtx(t);return b(n,{received:n.data,code:f.invalid_literal,expected:this._def.value}),S}return{status:"valid",value:t.data}}get value(){return this._def.value}};ut.create=(e,t)=>new ut({value:e,typeName:_.ZodLiteral,...T(t)});function Ri(e,t){return new pt({values:e,typeName:_.ZodEnum,...T(t)})}var pt=class e extends E{_parse(t){if(typeof t.data!="string"){let n=this._getOrReturnCtx(t),r=this._def.values;return b(n,{expected:R.joinValues(r),received:n.parsedType,code:f.invalid_type}),S}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(t.data)){let n=this._getOrReturnCtx(t),r=this._def.values;return b(n,{received:n.data,code:f.invalid_enum_value,options:r}),S}return Q(t.data)}get options(){return this._def.values}get enum(){let t={};for(let n of this._def.values)t[n]=n;return t}get Values(){let t={};for(let n of this._def.values)t[n]=n;return t}get Enum(){let t={};for(let n of this._def.values)t[n]=n;return t}extract(t,n=this._def){return e.create(t,{...this._def,...n})}exclude(t,n=this._def){return e.create(this.options.filter(r=>!t.includes(r)),{...this._def,...n})}};pt.create=Ri;var ht=class extends E{_parse(t){let n=R.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(t);if(r.parsedType!==y.string&&r.parsedType!==y.number){let i=R.objectValues(n);return b(r,{expected:R.joinValues(i),received:r.parsedType,code:f.invalid_type}),S}if(this._cache||(this._cache=new Set(R.getValidEnumValues(this._def.values))),!this._cache.has(t.data)){let i=R.objectValues(n);return b(r,{received:r.data,code:f.invalid_enum_value,options:i}),S}return Q(t.data)}get enum(){return this._def.values}};ht.create=(e,t)=>new ht({values:e,typeName:_.ZodNativeEnum,...T(t)});var We=class extends E{unwrap(){return this._def.type}_parse(t){let{ctx:n}=this._processInputParams(t);if(n.parsedType!==y.promise&&n.common.async===!1)return b(n,{code:f.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(i=>this._def.type.parseAsync(i,{path:n.path,errorMap:n.common.contextualErrorMap})))}};We.create=(e,t)=>new We({type:e,typeName:_.ZodPromise,...T(t)});var he=class extends E{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===_.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){let{status:n,ctx:r}=this._processInputParams(t),i=this._def.effect||null,a={addIssue:o=>{b(r,o),o.fatal?n.abort():n.dirty()},get path(){return r.path}};if(a.addIssue=a.addIssue.bind(a),i.type==="preprocess"){let o=i.transform(r.data,a);if(r.common.async)return Promise.resolve(o).then(async s=>{if(n.value==="aborted")return S;let l=await this._def.schema._parseAsync({data:s,path:r.path,parent:r});return l.status==="aborted"?S:l.status==="dirty"?tt(l.value):n.value==="dirty"?tt(l.value):l});{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"?tt(s.value):n.value==="dirty"?tt(s.value):s}}if(i.type==="refinement"){let o=s=>{let l=i.refinement(s,a);if(r.common.async)return Promise.resolve(l);if(l 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(i.type==="transform")if(r.common.async===!1){let o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!Fe(o))return S;let s=i.transform(o.value,a);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=>Fe(o)?Promise.resolve(i.transform(o.value,a)).then(s=>({status:n.value,value:s})):S);R.assertNever(i)}};he.create=(e,t,n)=>new he({schema:e,typeName:_.ZodEffects,effect:t,...T(n)});he.createWithPreprocess=(e,t,n)=>new he({schema:t,effect:{type:"preprocess",transform:e},typeName:_.ZodEffects,...T(n)});var ue=class extends E{_parse(t){return this._getType(t)===y.undefined?Q(void 0):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}};ue.create=(e,t)=>new ue({innerType:e,typeName:_.ZodOptional,...T(t)});var _e=class extends E{_parse(t){return this._getType(t)===y.null?Q(null):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}};_e.create=(e,t)=>new _e({innerType:e,typeName:_.ZodNullable,...T(t)});var mt=class extends E{_parse(t){let{ctx:n}=this._processInputParams(t),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}};mt.create=(e,t)=>new mt({innerType:e,typeName:_.ZodDefault,defaultValue:typeof t.default=="function"?t.default:()=>t.default,...T(t)});var ft=class extends E{_parse(t){let{ctx:n}=this._processInputParams(t),r={...n,common:{...n.common,issues:[]}},i=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return Pt(i)?i.then(a=>({status:"valid",value:a.status==="valid"?a.value:this._def.catchValue({get error(){return new re(r.common.issues)},input:r.data})})):{status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new re(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};ft.create=(e,t)=>new ft({innerType:e,typeName:_.ZodCatch,catchValue:typeof t.catch=="function"?t.catch:()=>t.catch,...T(t)});var Nt=class extends E{_parse(t){if(this._getType(t)!==y.nan){let r=this._getOrReturnCtx(t);return b(r,{code:f.invalid_type,expected:y.nan,received:r.parsedType}),S}return{status:"valid",value:t.data}}};Nt.create=e=>new Nt({typeName:_.ZodNaN,...T(e)});var Es=Symbol("zod_brand"),nn=class extends E{_parse(t){let{ctx:n}=this._processInputParams(t),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}},rn=class e extends E{_parse(t){let{status:n,ctx:r}=this._processInputParams(t);if(r.common.async)return(async()=>{let a=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?S:a.status==="dirty"?(n.dirty(),tt(a.value)):this._def.out._parseAsync({data:a.value,path:r.path,parent:r})})();{let i=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?S:i.status==="dirty"?(n.dirty(),{status:"dirty",value:i.value}):this._def.out._parseSync({data:i.value,path:r.path,parent:r})}}static create(t,n){return new e({in:t,out:n,typeName:_.ZodPipeline})}},gt=class extends E{_parse(t){let n=this._def.innerType._parse(t),r=i=>(Fe(i)&&(i.value=Object.freeze(i.value)),i);return Pt(n)?n.then(i=>r(i)):r(n)}unwrap(){return this._def.innerType}};gt.create=(e,t)=>new gt({innerType:e,typeName:_.ZodReadonly,...T(t)});function Ai(e,t){let n=typeof e=="function"?e(t):typeof e=="string"?{message:e}:e;return typeof n=="string"?{message:n}:n}function $i(e,t={},n){return e?Be.create().superRefine((r,i)=>{let a=e(r);if(a instanceof Promise)return a.then(o=>{if(!o){let s=Ai(t,r),l=s.fatal??n??!0;i.addIssue({code:"custom",...s,fatal:l})}});if(!a){let o=Ai(t,r),s=o.fatal??n??!0;i.addIssue({code:"custom",...o,fatal:s})}}):Be.create()}var Rs={object:ie.lazycreate},_;(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"})(_||(_={}));var $s=(e,t={message:`Input not instance of ${e.name}`})=>$i(n=>n instanceof e,t),Di=He.create,Ni=nt.create,Ds=Nt.create,Ns=rt.create,Mi=it.create,Ms=at.create,Ls=Et.create,Os=ot.create,js=st.create,Us=Be.create,zs=Re.create,Fs=be.create,Hs=Rt.create,Bs=$e.create,Ws=ie.create,Vs=ie.strictCreate,Js=lt.create,qs=vn.create,Gs=ct.create,Zs=Se.create,Ks=Sn.create,Ys=$t.create,Xs=Dt.create,Qs=_n.create,el=dt.create,tl=ut.create,nl=pt.create,rl=ht.create,il=We.create,al=he.create,ol=ue.create,sl=_e.create,ll=he.createWithPreprocess,cl=rn.create,dl=()=>Di().optional(),ul=()=>Ni().optional(),pl=()=>Mi().optional(),hl={string:(e=>He.create({...e,coerce:!0})),number:(e=>nt.create({...e,coerce:!0})),boolean:(e=>it.create({...e,coerce:!0})),bigint:(e=>rt.create({...e,coerce:!0})),date:(e=>at.create({...e,coerce:!0}))};var ml=S;var gr=d.object({id:d.string()}),fl=d.enum(["top","right","bottom","left","auto"]).default("auto"),br=d.enum(["left","middle","right"]),gl=br.default("left"),Li=d.object({label:d.string().optional(),hidden:d.boolean().default(!1)}),bl={background:d.string().optional(),textColor:d.string().optional(),borderRadius:d.string().optional(),textAlign:gl,anchor:fl,showNavigation:d.boolean().default(!0),prevButton:Li.optional(),nextButton:Li.optional()},yl=d.enum(["pointer","callout","area"]),xl=d.discriminatedUnion("type",[d.object({type:d.literal("html-element"),alphaId:d.string().min(1)})]),kl=gr.extend({type:d.literal("message"),variant:yl.default("callout"),x:d.number().min(0).max(1),y:d.number().min(0).max(1),w:d.number().min(0).max(1).optional(),h:d.number().min(0).max(1).optional(),text:d.string().optional(),target:xl.optional(),advancesStep:d.boolean().default(!0),...bl}),wl=gr.extend({type:d.literal("blur"),x:d.number().min(0).max(1),y:d.number().min(0).max(1),w:d.number().min(0).max(1),h:d.number().min(0).max(1),intensity:d.number().min(0).max(20).default(8)}),vl=gr.extend({type:d.literal("text"),x:d.number().min(0).max(1),y:d.number().min(0).max(1),text:d.string(),fontSize:d.number().positive().default(16),color:d.string().optional()}),Oi=d.discriminatedUnion("type",[kl,wl,vl]),ji=new Set(["message","blur","text"]),Ui=d.object({type:d.string()}).passthrough();function zi(e){return typeof e=="object"&&e!==null?e.type:void 0}var Fi=d.any().superRefine((e,t)=>{let i=(ji.has(zi(e))?Oi:Ui).safeParse(e);if(!i.success)for(let a of i.error.issues)t.addIssue(a)}).transform(e=>(ji.has(zi(e))?Oi:Ui).parse(e));var Hi=d.object({label:d.string().min(1),href:d.string().refine(e=>/^(https?:|mailto:)/i.test(e),"href must be an http(s) or mailto URL")}),yr=d.object({logo:d.string().min(1).optional(),name:d.string().min(1).optional(),logoHref:d.string().refine(e=>/^(https?:|mailto:)/i.test(e),"logoHref must be an http(s) or mailto URL").optional(),favicon:d.string().min(1).optional(),cta:Hi.optional(),secondaryCta:Hi.optional(),watermark:d.boolean().optional()}),Bi=yr.omit({favicon:!0});var Sl=d.object({type:d.literal("next")}),_l=d.object({type:d.literal("prev")}),Cl=d.object({type:d.literal("step"),stepId:d.string().min(1)}),Tl=d.object({type:d.literal("chapter"),chapterId:d.string().min(1)}),Al=d.object({type:d.literal("url"),href:d.string().min(1),target:d.enum(["_self","_blank"]).default("_blank")}),Pl=d.object({type:d.literal("restart")}),Il=d.discriminatedUnion("type",[Sl,_l,Cl,Tl,Al,Pl]),El=d.enum(["shimmer"]),Cn=d.object({label:d.string().min(1),action:Il.default({type:"next"}),animation:El.optional(),background:d.string().optional(),textColor:d.string().optional()});var Rl="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",xr=/^[A-Za-z0-9_-]{12}$/;function $l(e){let t=globalThis.crypto;if(!t||typeof t.getRandomValues!="function")throw new Error("generateDemoId requires globalThis.crypto.getRandomValues (Node 19+, browsers, or edge runtime).");t.getRandomValues(e)}function ae(){let e=new Uint8Array(12);$l(e);let t="";for(let n of e)t+=Rl.charAt(n&63);return t}function Tn(e){return typeof e=="string"&&xr.test(e)}function Wi(e){return String(e+1).padStart(4,"0")}function Vi(e){return`snap-${e.toString().padStart(3,"0")}`}function An(e){let t=((e??"").toLowerCase().split(";")[0]??"").trim();return t.startsWith("image/")?"image":t.startsWith("video/")?"video":t.startsWith("audio/")?"audio":t.startsWith("font/")||t.includes("font")||t.includes("woff")?"font":"other"}function wr(e){if(!e)return"";let t=e.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(t.split(/\r?\n/).map(r=>r.trim()).find(Boolean)??t).replace(/\s+/g," ").trim().slice(0,48)}var Dl=1.35,kr=.35;function Nl(e){return Math.max(0,Math.min(1,e))}function vr(e){let t=Nl(e);if(t<kr){let n=t/kr;return t*n*n}return t>1-kr?1-vr(1-t):t}function Sr(e){let{stepId:t,assetId:n,posterAssetId:r,kind:i,isLast:a}=e,o=`asset:${n}`,s=i==="video"?{type:"video",src:o,posterSrc:r?`asset:${r}`:void 0,naturalWidth:e.naturalWidth,naturalHeight:e.naturalHeight,alt:e.title,sourceUrl:e.sourceUrl??"",title:e.title,autoplay:!0,muted:!0,objectFit:"cover"}:{type:"image",src:o,naturalWidth:e.naturalWidth,naturalHeight:e.naturalHeight,alt:e.title,sourceUrl:e.sourceUrl??"",title:e.title,objectFit:"cover"},l=e.click,c=[];if(l){let h=wr(l.label);c.push({id:`${t}_pointer`,type:"message",variant:"pointer",x:l.x,y:l.y,text:h?`Click on "${h}"`:"Continue",anchor:"auto",textAlign:"left",advancesStep:!0,showNavigation:!0})}else c.push({id:`${t}_callout`,type:"message",variant:"callout",x:.5,y:.5,text:a?"End of walkthrough":"Continue",anchor:"auto",textAlign:"left",advancesStep:!0,showNavigation:!0});let u=!!l&&!(l.x===0&&l.y===0),p=i==="image"&&e.autoApplyZoom===!0&&u?{zoom:Dl,x:Number(vr(l.x).toFixed(4)),y:Number(vr(l.y).toFixed(4))}:void 0;return{id:t,kind:"content",background:s,...p?{transform:p}:{},annotations:c,advance:{trigger:"click"}}}function Ji(e){let{stepId:t,htmlPath:n,click:r}=e,i=[];if(r?.alphaId)i.push({id:`${t}_area`,type:"message",variant:"area",x:Number((r.x??.5).toFixed(4)),y:Number((r.y??.5).toFixed(4)),w:0,h:0,text:wr(r.label)||"Click here",target:{type:"html-element",alphaId:r.alphaId},anchor:"auto",textAlign:"left",advancesStep:!0,showNavigation:!0});else if(r){let a=wr(r.label);i.push({id:`${t}_pointer`,type:"message",variant:"pointer",x:Number((r.x??.5).toFixed(4)),y:Number((r.y??.5).toFixed(4)),text:a?`Click on "${a}"`:"Continue",anchor:"auto",textAlign:"left",advancesStep:!0,showNavigation:!0})}return{id:t,kind:"content",background:{type:"html",path:n,naturalWidth:e.naturalWidth,naturalHeight:e.naturalHeight,zoom:1,scroll:e.scroll,sourceUrl:e.sourceUrl??"",title:e.sourceUrl??""},annotations:i,advance:{trigger:"click"}}}function Ml(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function _r(e,t){let n=e;for(let[r,i]of t){let a=Ml(r);n=n.replace(new RegExp(`(?:\\.\\./)*assets/${a}`,"g"),i),n=n.replace(new RegExp(`assets/${a}`,"g"),i)}return n}function Ll(e){return`<script data-inkly-replay-scroll>(()=>{const c=${JSON.stringify(e).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 qi(e,t){let n=Ll(t);return/<\/body\s*>/i.test(e)?e.replace(/<\/body\s*>/i,`${n}</body>`):`${e}${n}`}function Gi(e,t){if(!t||/data-inkly-document-css|document\.css/i.test(e))return e;let n='<link rel="stylesheet" href="./document.css?draft=1" data-inkly-document-css>';return/<\/head\s*>/i.test(e)?e.replace(/<\/head\s*>/i,`${n}</head>`):`${n}${e}`}var Zi=d.object({id:d.string(),text:d.string(),start:d.number().nonnegative().optional(),end:d.number().nonnegative().optional()});var Ol=d.enum(["screenshot","image","video","audio","font","other"]),jl=d.object({id:d.string().min(1),path:d.string().min(1).optional(),uri:d.string().min(1).optional(),sha256:d.string().regex(/^[0-9a-f]{64}$/),kind:Ol,contentType:d.string().min(1).optional(),publicUrl:d.string().min(1).optional(),cdnPath:d.string().min(1).optional(),file:d.string().min(1).optional(),size:d.number().int().nonnegative().optional(),createdAt:d.string().min(1).optional(),updatedAt:d.string().min(1).optional(),viewport:d.object({w:d.number().int().positive(),h:d.number().int().positive()}).optional()}),Mt=d.object({version:d.literal(1),assets:d.array(jl),screens:d.array(d.unknown()).optional()});var Cr=d.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"}),Ul=d.enum(["color","image","glassmorphism"]),Ki=d.object({type:Ul,color:Cr.optional(),from:Cr.optional(),to:Cr.optional(),src:d.string().min(1).optional(),alt:d.string().optional(),intensity:d.number().min(-5).max(48).optional()}).superRefine((e,t)=>{if(e.type==="color"){let n=!!e.color,r=!!e.from&&!!e.to;!n&&!r&&t.addIssue({code:d.ZodIssueCode.custom,path:["color"],message:"color backgrounds require color or from/to"}),!!e.from!=!!e.to&&t.addIssue({code:d.ZodIssueCode.custom,path:e.from?["to"]:["from"],message:"gradient backgrounds require both from and to"})}e.type==="image"&&!e.src&&t.addIssue({code:d.ZodIssueCode.custom,path:["src"],message:"image backgrounds require src"})}),Yi=d.object({src:d.string(),alt:d.string().optional()});var Tr=d.object({src:d.string().min(1),duration:d.number().positive().optional()});var zl=d.enum(["text","dropdown"]),Fl=d.object({value:d.string().min(1),label:d.string().min(1)}),Hl=d.object({id:d.string(),label:d.string(),type:zl.default("text"),placeholder:d.string().optional(),required:d.boolean().default(!1),options:d.array(Fl).optional()}).superRefine((e,t)=>{e.type==="dropdown"&&(!e.options||e.options.length===0)&&t.addIssue({code:d.ZodIssueCode.custom,message:"Dropdown field requires at least one option.",path:["options"]})}),na=d.object({src:d.string().min(1),alt:d.string().optional(),height:d.number().int().positive().optional()}),Bl=d.enum(["left","right","top"]),Wl=d.enum(["standard","hero"]),ra=d.object({src:d.string().min(1),alt:d.string().optional(),naturalWidth:d.number().positive().optional(),naturalHeight:d.number().positive().optional(),position:Bl.default("right"),layout:Wl.default("hero")}),Vl=d.object({type:d.literal("headline"),id:d.string(),logo:na.optional(),image:ra.optional(),title:d.string(),titleColor:d.string().optional(),description:d.string().optional(),descriptionColor:d.string().optional(),textAlign:br.optional(),cta:Cn.optional(),secondaryCta:Cn.optional()}),Jl=d.object({type:d.literal("form"),id:d.string(),logo:na.optional(),image:ra.optional(),title:d.string().optional(),description:d.string().optional(),fields:d.array(Hl).min(1),submit:Cn.default({label:"Submit",action:{type:"next"}})}),ql="allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox allow-presentation",Gl="camera; microphone; fullscreen; payment; clipboard-write",Zl=d.object({type:d.literal("embed"),id:d.string(),src:d.string(),iframeTitle:d.string().optional(),sandbox:d.string().default(ql),allow:d.string().default(Gl)}),Kl=d.object({type:d.literal("custom"),id:d.string(),name:d.string().min(1),data:d.record(d.unknown()).optional()}),Xi=d.discriminatedUnion("type",[Vl,Jl,Zl,Kl]),Qi=new Set(["headline","form","embed","custom"]),ea=d.object({type:d.string()}).passthrough();function ta(e){return typeof e=="object"&&e!==null?e.type:void 0}var ia=d.any().superRefine((e,t)=>{let i=(Qi.has(ta(e))?Xi:ea).safeParse(e);if(!i.success)for(let a of i.error.issues)t.addIssue(a)}).transform(e=>(Qi.has(ta(e))?Xi:ea).parse(e));var aa=d.enum(["contain","cover","fill"]),oa=d.enum(["left top","center top","right top","left center","center center","right center","left bottom","center bottom","right bottom"]),Yl=d.object({type:d.literal("image"),src:d.string().min(1),naturalWidth:d.number().positive(),naturalHeight:d.number().positive(),alt:d.string().optional(),sourceUrl:d.string().optional(),title:d.string().optional(),objectFit:aa.optional(),objectPosition:oa.optional()}),Xl=d.object({type:d.literal("video"),src:d.string().min(1),posterSrc:d.string().min(1).optional(),naturalWidth:d.number().positive(),naturalHeight:d.number().positive(),alt:d.string().optional(),sourceUrl:d.string().optional(),title:d.string().optional(),autoplay:d.boolean().default(!0),muted:d.boolean().default(!0),objectFit:aa.optional(),objectPosition:oa.optional()}),Ql=d.object({x:d.number().nonnegative().default(0),y:d.number().nonnegative().default(0),maxX:d.number().nonnegative().default(0),maxY:d.number().nonnegative().default(0)}),ec=d.object({type:d.literal("html"),path:d.string().min(1),naturalWidth:d.number().positive(),naturalHeight:d.number().positive(),zoom:d.number().positive().default(1),scroll:Ql.default({x:0,y:0,maxX:0,maxY:0}),sourceUrl:d.string().optional(),title:d.string().optional()}),tc=d.discriminatedUnion("type",[Yl,Xl,ec]),nc=d.object({zoom:d.number().min(1).default(1),x:d.number().min(0).max(1).default(.5),y:d.number().min(0).max(1).default(.5)}),rc=d.object({trigger:d.enum(["auto","click"]).default("auto")}).default({trigger:"auto"}),ic=d.object({kind:d.literal("content").default("content"),id:d.string(),label:d.string().optional(),duration:d.number().positive().optional(),background:tc,script:d.string().optional(),voiceover:Tr.optional(),transform:nc.optional(),advance:rc,annotations:d.array(Fi).default([]),captions:d.array(Zi).optional()}).passthrough(),ac=d.object({kind:d.literal("cover"),id:d.string(),label:d.string().optional(),widgets:d.array(ia).length(1),background:Ki.optional(),backgroundImage:Yi.optional(),backgroundDim:d.number().min(0).max(1).optional(),script:d.string().optional(),voiceover:Tr.optional(),duration:d.number().positive().optional(),advance:d.object({trigger:d.enum(["auto","click"]).default("click")}).default({trigger:"click"})}).passthrough(),sa=d.discriminatedUnion("kind",[ic,ac]);var oc=/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,la=d.string().regex(oc,"must be a hex color like #5b3df5"),Pn=d.object({primary:la.optional(),secondary:la.optional(),font:d.string().min(1).optional(),radius:d.string().min(1).optional()}).partial();var In=d.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"}),sc=d.object({id:d.string(),title:d.string(),stepIds:d.array(d.string()).min(1)}),lc=d.object({hideHeader:d.boolean().default(!1),hideControls:d.boolean().default(!1),controls:d.enum(["full","minimal","hidden"]).optional(),showHubBreadcrumb:d.boolean().default(!1),mobileFooterMessage:d.boolean().default(!0),autoplay:d.boolean().default(!1)}),cc=d.object({width:d.number().positive(),height:d.number().positive()}),dc=d.enum(["public","private"]),uc=d.enum(["none","color","image"]),pc=d.object({type:uc,color:In.optional(),from:In.optional(),to:In.optional(),src:d.string().min(1).optional(),alt:d.string().optional()}).superRefine((e,t)=>{if(e.type==="color"){let n=!!e.color,r=!!e.from&&!!e.to;!n&&!r&&t.addIssue({code:d.ZodIssueCode.custom,path:["color"],message:"color backgrounds require color or from/to"}),!!e.from!=!!e.to&&t.addIssue({code:d.ZodIssueCode.custom,path:e.from?["to"]:["from"],message:"gradient backgrounds require both from and to"})}e.type==="image"&&!e.src&&t.addIssue({code:d.ZodIssueCode.custom,path:["src"],message:"image backgrounds require src"})}),Ve=d.object({id:d.string().regex(xr,{message:"must be a 12-character URL-safe demo id (see generateDemoId)"}),version:d.number().int().min(1),title:d.string().optional(),subtitle:d.string().optional(),runtime:d.string().min(1).optional(),visibility:dc.default("public"),backgroundColor:In.optional(),background:pc.optional(),theme:d.object({preset:d.string().min(1).optional(),tokens:Pn.optional(),brand:Bi.optional()}).optional(),chrome:lc.default({}),aspectRatio:cc.optional(),chapters:d.array(sc).default([]),steps:d.array(sa).min(1)}).passthrough().superRefine((e,t)=>{let n=new Set(e.steps.map(i=>i.id)),r=new Set(e.chapters.map(i=>i.id));e.chapters.forEach((i,a)=>{i.stepIds.forEach(o=>{n.has(o)||t.addIssue({code:d.ZodIssueCode.custom,path:["chapters",a,"stepIds"],message:`Chapter "${i.id}" references unknown step "${o}"`})})}),e.steps.forEach((i,a)=>{i.kind==="cover"&&i.widgets.forEach((o,s)=>{o.type==="headline"&&["cta","secondaryCta"].forEach(l=>{let c=o[l]?.action;c&&(c.type==="step"&&!n.has(c.stepId)&&t.addIssue({code:d.ZodIssueCode.custom,path:["steps",a,"widgets",s,l,"action","stepId"],message:`Widget "${o.id}" CTA targets unknown step "${c.stepId}"`}),c.type==="chapter"&&!r.has(c.chapterId)&&t.addIssue({code:d.ZodIssueCode.custom,path:["steps",a,"widgets",s,l,"action","chapterId"],message:`Widget "${o.id}" CTA targets unknown chapter "${c.chapterId}"`}))})})})});function En(e){return Ve.parse(e)}function Lt(e){let t=typeof e=="object"&&e!==null?e:{},n=Tn(t.id),r=n?t:{...t,id:ae()};return{config:Ve.parse(r),changed:!n}}function ca(e){let t=new Map;e.forEach((r,i)=>{let a=t.get(r.id);a?a.push({entry:r,index:i}):t.set(r.id,[{entry:r,index:i}])});let n=[];for(let r of t.values()){if(r.length<2)continue;let i=[...r].sort((o,s)=>o.entry.updatedAt!==s.entry.updatedAt?o.entry.updatedAt-s.entry.updatedAt:o.index-s.index),[,...a]=i;for(let{entry:o}of a)n.push({entry:o,newId:ae()})}return n}var Ar=d.enum(["sidebar","tabs"]),hc=d.object({name:d.string().min(1),description:d.string().min(1).optional(),icon:d.string().min(1).optional(),demos:d.array(d.string().min(1))}),Ce=d.object({$schema:d.string().optional(),name:d.string().min(1),runtime:d.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:d.string().min(1).optional(),layout:Ar.optional(),theme:d.string().min(1).optional(),tokens:Pn.optional(),brand:yr.optional(),title:d.string().min(1).optional(),subtitle:d.string().min(1).optional(),collections:d.array(hc).optional()});function da({slug:e,config:t,resolveAssetSrc:n}){let r=t.title??t.id??e;return{slug:e,title:r,description:mc(t,r),thumbnail:bc(t,r,n),visibility:t.visibility}}function Rn(e,t){return e.length<=t?e:`${e.slice(0,t-1).trimEnd()}\u2026`}function mc(e,t){if(e.subtitle?.trim())return Rn(e.subtitle.trim(),120);for(let n of e.steps){if(n.kind!=="content")continue;let r=n.captions?.[0]?.text;if(r&&r.trim())return Rn(r.trim(),120);break}for(let n of e.steps)if(n.kind==="cover"){for(let r of n.widgets)if(r.type==="headline"&&r.description&&r.description.trim())return Rn(r.description.trim(),120)}return Rn(`Explore the ${t} workflow.`,120)}function fc(e){return e.background?e.background.type==="image":e.backgroundImage?!0:e.widgets.some(t=>t.type==="headline"?!!t.title:t.type==="embed"?!!t.src:t.type==="form")}function Pr(e,t){return e?t?t(e):e:null}function gc(e,t){if(!t)return e;let n=e.widgets.map(o=>{if((o.type==="headline"||o.type==="form")&&o.image?.src){let s=t(o.image.src);return s&&s!==o.image.src?{...o,image:{...o.image,src:s}}:o}return o}),r=e.backgroundImage,i=e.background;if(i?.type==="image"&&i.src){let o=t(i.src);o&&o!==i.src&&(i={...i,src:o})}if(r?.src){let o=t(r.src);o&&o!==r.src&&(r={...r,src:o})}return!n.some((o,s)=>o!==e.widgets[s])&&i===e.background&&r===e.backgroundImage?e:{...e,widgets:n,background:i,backgroundImage:r}}function bc(e,t,n){let r=e.steps[0];if(r){if(r.kind==="cover"&&fc(r))return{kind:"cover",cover:gc(r,n),themeTokens:e.theme?.tokens};if(r.kind==="content"){let i=r.background;if(i?.type==="image"){let a=Pr(i.src,n);if(a)return{kind:"image",src:a}}else if(i?.type==="video"){let a=Pr(i.posterSrc,n);if(a)return{kind:"image",src:a};let o=Pr(i.src,n);if(o)return{kind:"video",src:o}}else if(i?.type==="html")return{kind:"html",path:i.path,naturalWidth:i.naturalWidth,naturalHeight:i.naturalHeight,zoom:i.zoom,scroll:i.scroll}}}return{kind:"placeholder",title:t}}function yc(e){return!e||e==="null"?"":e.replace(/\/+$/,"")}function xc(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var Je="/__inkly-capture-asset/",kc="../../public/";function $n(e,t){let n=String(e||"");if(!n.includes(Je))return n;let r=t||kc,i=r.endsWith("/")?r:`${r}/`;return n.split(Je).join(i)}function wc(e){return String(e||"").replace(/\\/g,"/").replace(/^\/+/,"").replace(/^\.\//,"")}function Ir(e){let t=wc(e);return/\/index\.html$/i.test(t)||/^index\.html$/i.test(t)?t.replace(/index\.html$/i,"document.css"):/\.html?$/i.test(t)?t.replace(/\.html?$/i,".css"):null}function vc(e){return e.replace(/<meta\b(?=[^>]*\bhttp-equiv\s*=\s*["']?content-security-policy\b)[^>]*>/gi,"")}var Sc=/\s+(?:href|xlink:href|target|rel|download|ping|referrerpolicy|data-inkly-href)(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s"'=<>`]+))?/gi;function an(e){return String(e||"").replace(/<(a|area)\b[^>]*>/gi,t=>t.replace(Sc,""))}function bt(e,t={}){let n=yc(t.resourceOrigin),r=String(e||"");return n?r.replace(new RegExp(`(^|["'\\(\\s,=])${xc("/api/hubs/")}`,"g"),`$1${n}/api/hubs/`):r}function _c(e){return vc(e).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:e,html:t,css:n,cssHref:r,resourceOrigin:i,captureAssetBaseUrl:a}){let o=$n(t,a),s=n==null?n:$n(n,a),l=_c(an(o)),c=Ir(e)!=null,u=s?.trim()??"";if(c&&u){let h=`<style data-inkly-document-css>
|
|
3
|
+
${bt(s??"",{resourceOrigin:i}).replace(/<\/(style)/gi,"<\\/$1")}
|
|
4
|
+
</style>`,m=/<\/head\s*>/i.test(l)?l.replace(/<\/head\s*>/i,`${h}</head>`):`${h}${l}`;return bt(m,{resourceOrigin:i})}if(c&&r){let h=`<link rel="stylesheet" href="${bt(r,{resourceOrigin:i})}" data-inkly-document-css>`,m=/<\/head\s*>/i.test(l)?l.replace(/<\/head\s*>/i,`${h}</head>`):`${h}${l}`;return bt(m,{resourceOrigin:i})}return bt(l,{resourceOrigin:i})}var on=d.string().regex(/^sha(?:256|384|512)-[A-Za-z0-9+/]+=*$/,{message:"must be an SRI string like sha384-<base64>"}),Dn=d.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"}),Cc=d.object({version:Dn,url:d.string().url(),integrity:on}),Nn=d.object({$schema:d.string().optional(),runtime:Cc});var pa=d.string().regex(/^[0-9a-f]{64}$/,{message:"must be lowercase sha-256 hex (64 chars)"}),Ot=d.object({version:Dn,externals:d.array(d.string().min(1)),jsHash:pa,cssHash:pa,jsBytes:d.number().int().nonnegative(),cssBytes:d.number().int().nonnegative(),integrity:on,cssIntegrity:on,minSchema:Dn,codemodsIntegrity:on.optional(),codemodsBytes:d.number().int().nonnegative().optional()});var De=["__inkly","assets","api","c"],Tc={__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"},Ac=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;function Ne(e){return typeof e!="string"?{ok:!1,reason:"Name is required."}:e.length===0?{ok:!1,reason:"Name cannot be empty."}:/\s/.test(e)?{ok:!1,reason:"Name cannot contain spaces."}:e.includes("/")||e.includes("\\")?{ok:!1,reason:"Name cannot contain slashes."}:e.includes(".")?{ok:!1,reason:"Name cannot contain dots."}:De.includes(e)?{ok:!1,reason:Tc[e]}:e.startsWith("_")?{ok:!1,reason:"Name cannot start with '_' (reserved for internal use)."}:e!==e.toLowerCase()?{ok:!1,reason:'Name must be lowercase (e.g. "getting-started").'}:Ac.test(e)?{ok:!0}:{ok:!1,reason:"Name must be kebab-case: lowercase letters, digits, and hyphens, starting and ending with a letter or digit."}}var qe={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 Pc=`
|
|
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 @@ ${ft(n??"",{resourceOrigin:i}).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
|
-
`,
|
|
1194
|
+
`,ha={id:"editorial",label:"Editorial",theme:qe.editorial,css:Pc};var Ic=`
|
|
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 @@ ${ft(n??"",{resourceOrigin:i}).replace(/<\/(style)/gi,"<\\/$1")}
|
|
|
2333
2333
|
border-radius: 10px;
|
|
2334
2334
|
box-shadow: none;
|
|
2335
2335
|
}
|
|
2336
|
-
`,
|
|
2336
|
+
`,ma={id:"mono",label:"Mono",theme:qe.mono,css:Ic};var Ec=`
|
|
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
|
|
@@ -4046,7 +4046,7 @@ ${ft(n??"",{resourceOrigin:i}).replace(/<\/(style)/gi,"<\\/$1")}
|
|
|
4046
4046
|
line-height: 1.45;
|
|
4047
4047
|
}
|
|
4048
4048
|
}
|
|
4049
|
-
`,
|
|
4049
|
+
`,fa={id:"inkly",label:"Inkly",theme:qe.inkly,css:Ec};var Rc=`
|
|
4050
4050
|
.hub-index[data-theme="substack"] {
|
|
4051
4051
|
background: #ffffff;
|
|
4052
4052
|
color: #1a1a1a;
|
|
@@ -4977,107 +4977,117 @@ ${ft(n??"",{resourceOrigin:i}).replace(/<\/(style)/gi,"<\\/$1")}
|
|
|
4977
4977
|
--demo-watermark-mark-radius: 3px;
|
|
4978
4978
|
font-family: var(--demo-font);
|
|
4979
4979
|
}
|
|
4980
|
-
`,ra={id:"substack",label:"Substack",theme:Be.substack,css:fc};var ia=[na,ea,ta,ra],pe=Object.fromEntries(ia.map(e=>[e.id,e]));import{createHash as Ac}from"crypto";import{mkdir as Ic,readFile as xr,rm as Zf,stat as Gf}from"fs/promises";import{homedir as Pc}from"os";import{join as We}from"path";import{fileURLToPath as Ec}from"url";import{access as gc,readFile as bc,readdir as yc,stat as xc}from"fs/promises";import{dirname as kc,join as Nt,resolve as wc,sep as vc}from"path";async function q(e){return gc(e).then(()=>!0,()=>!1)}async function De(e){let t=wc(e);for(;;){if(await q(Nt(t,"inkly.json")))return t;let n=kc(t);if(n===t)return null;t=n}}async function fr(e){let t=Nt(e,"demos");if(!await q(t))return[];let n=[];async function r(i){let a;try{a=await yc(i,{withFileTypes:!0})}catch{return}if(a.some(o=>o.isFile()&&o.name==="demo.config.json")){let o=i===t?"":i.slice(t.length+1).split(vc).join("/");n.push({slug:o,dir:i,configPath:Nt(i,"demo.config.json")});return}for(let o of a)o.isDirectory()&&await r(Nt(i,o.name))}return await r(t),n.sort((i,a)=>i.slug.localeCompare(a.slug))}async function $e(e){let t=await bc(e,"utf8");return JSON.parse(t)}async function Mt(e){let t=await De(e);if(!t)throw new Error(`No inkly.json found in ${e} or any parent directory.`);let n=Nt(t,"inkly.json"),r=we.safeParse(await $e(n));if(!r.success)throw new Error(`inkly.json failed schema validation: ${r.error.message}`);let i=[];for(let a of await fr(t)){let o;try{o=$t(await $e(a.configPath)).config}catch(d){throw new Error(`demos/${a.slug}/demo.config.json failed schema validation: ${d.message}`)}let s=Nt(a.dir,"assets.json"),c=null;if(await q(s)){let d=Rt.safeParse(await $e(s));if(!d.success)throw new Error(`demos/${a.slug}/assets.json failed schema validation: ${d.error.message}`);c=d.data}i.push({slug:a.slug,dir:a.dir,configPath:a.configPath,config:o,assetsPath:s,assets:c})}return{root:t,inklyPath:n,inkly:r.data,demos:i}}function gr(e){let t=e.split("/")[0]??e,n=Re(t);return n.ok?gt.includes(e)?`Demo folder "${e}" uses a reserved slug.`:null:n.reason}async function In(e){try{let t=await xc(e);return t.isFile()?t.size:null}catch{return null}}import{mkdir as Sc,rename as _c,writeFile as Cc}from"fs/promises";import{dirname as Tc}from"path";async function te(e,t,n){await Sc(Tc(e),{recursive:!0});let r=`${e}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;await Cc(r,t,n?.mode!=null?{mode:n.mode}:void 0),await _c(r,e)}var Rc="https://www.runtime.inklyai.dev";function yt(){let e=process.env.BUNDLES_R2_PUBLIC_BASE_URL;return typeof e=="string"&&e.length>0?e.replace(/\/+$/,""):Rc}function kr(e,t,n=yt()){return`${n}/runtime/${e}/${t}`}function $c(e){return We(Pc(),".inkly","cache","runtime",e)}function Dc(e){let t=/^(sha(?:256|384|512))-([A-Za-z0-9+/]+=*)$/.exec(e);return t?{algorithm:t[1],expected:t[2]}:null}function Lt(e,t){let n=Dc(t);return n?Ac(n.algorithm).update(e).digest("base64")===n.expected:!1}var Ot=class extends Error{constructor(n,r,i){super(`integrity mismatch for ${n}: expected ${r}`+(i?` (from ${i})`:"")+". 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=i;this.name="IntegrityMismatchError"}},bt=class extends Error{constructor(t){super(t),this.name="LockReadError"}};async function Nc(e){let t=We(e,"inkly.lock");if(!await q(t))throw new bt(`no inkly.lock found in ${e}. Run \`inkly lock\` to generate one.`);let n;try{n=await $e(t)}catch(i){throw new bt(`failed to read ${t}: ${i.message}`)}let r=An.safeParse(n);if(!r.success)throw new bt(`${t} failed InklyLockSchema validation: ${r.error.message}`);return r.data}function Mc(e,t){let n=e.lastIndexOf("/");return n===-1?e:`${e.slice(0,n+1)}${t}`}async function aa(e){try{return await xr(e)}catch{return null}}async function Lc(e){let t=We(e,"manifest.json");if(!await q(t))return null;try{let n=JSON.parse(await xr(t,"utf8")),r=Dt.safeParse(n);return r.success?r.data:null}catch{return null}}async function br(e,t){await te(e,t)}async function yr(e,t){if(e.startsWith("file://"))try{return await xr(Ec(e))}catch(i){throw new Error(`failed to read ${e}: ${i.message}`)}let n;try{n=await t(e)}catch(i){throw new Error(`failed to fetch ${e}: ${i.message}`)}if(!n.ok)throw new Error(`fetch ${e} returned HTTP ${n.status}`);let r=await n.arrayBuffer();return Buffer.from(r)}async function wr(e){let t=e.fetchImpl??fetch,n=e.lock??await Nc(e.hubRoot),{version:r,url:i,integrity:a}=n.runtime,o=$c(r),s=await aa(We(o,"runtime.js")),c=await aa(We(o,"runtime.css")),d=await Lc(o);if(s&&c&&d){let $=Lt(s,a),R=d.version===r,b=Lt(c,d.cssIntegrity);if($&&R&&b)return{version:r,cacheDir:o,manifest:d,fetched:!1,bytesFetched:0,lock:n}}let u=$=>{let R=e.urlOverrides?.[$];return R||($==="runtime.js"?i:Mc(i,$))};await Ic(o,{recursive:!0});let p=u("manifest.json"),h=await yr(p,t),f;try{let $=JSON.parse(h.toString("utf8")),R=Dt.safeParse($);if(!R.success)throw new Error(`manifest from ${p} failed schema validation: ${R.error.message}`);f=R.data}catch($){throw new Error(`manifest from ${p} is not valid JSON: ${$.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"),x=await yr(w,t);if(!Lt(x,a))throw new Ot("runtime.js",a,w);let _=u("runtime.css"),P=await yr(_,t);if(!Lt(P,f.cssIntegrity))throw new Ot("runtime.css",f.cssIntegrity,_);return await br(We(o,"runtime.js"),x),await br(We(o,"runtime.css"),P),await br(We(o,"manifest.json"),h),{version:r,cacheDir:o,manifest:f,fetched:!0,bytesFetched:x.byteLength+P.byteLength+h.byteLength,lock:n}}import{readFile as sa,writeFile as Oc}from"fs/promises";import{dirname as vr,isAbsolute as jc,join as jt,resolve as Uc}from"path";import{fileURLToPath as zc,pathToFileURL as Fc}from"url";function Ve(e,t,n){e.push({level:t,message:n})}async function Hc(){let e=vr(zc(import.meta.url));for(let t=0;t<10;t+=1){let n=jt(e,"node_modules","@inkly","runtime","dist","manifest.json");if(await q(n))return n;let r=jt(e,"packages","inkly-runtime","dist","manifest.json");if(await q(r))return r;let i=vr(e);if(i===e)break;e=i}return null}async function oa(e){let t=JSON.parse(await sa(e,"utf8")),n=Dt.safeParse(t);if(!n.success)throw new Error(`${e} failed RuntimeManifestSchema validation: ${n.error.message}`);return n.data}async function Bc(e,t){let n=yt(),r=kr(e,"manifest.json",n);try{let i=await t(r);if(!i.ok)return null;let a=JSON.parse(await i.text()),o=Dt.safeParse(a);return o.success?{manifest:o.data,url:r}:null}catch{return null}}async function Wc(e,t){if(t.manifestPath)return{manifest:await oa(t.manifestPath),source:"local",manifestPath:t.manifestPath};if(!t.localOnly){let r=t.fetchImpl??fetch,i=await Bc(e,r);if(i){if(i.manifest.version!==e)throw new Error(`CDN manifest at ${i.url} reports version ${i.manifest.version} but inkly.json pins ${e}. Wait for the publish workflow to upload the matching artifact, or update inkly.json#runtime to match.`);return{manifest:i.manifest,source:"cdn"}}}let n=await Hc();if(!n)throw new Error(`Could not fetch runtime manifest for ${e} from ${yt()} 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 oa(n),source:"local",manifestPath:n}}async function Pn(e,t={}){let n=jt(e,"inkly.json"),r=await $e(n),i=typeof r.runtime=="string"?r.runtime:null;if(!i)throw new Error('inkly.json is missing a string "runtime" pin.');if(!/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(i))throw new Error(`inkly.json#runtime must be an exact semver (got "${i}"). Set runtime to an exact version and put your compatibility range in runtimeRange.`);let{manifest:a,source:o,manifestPath:s}=await Wc(i,t);if(a.version!==i)throw new Error(`Runtime manifest reports version ${a.version} but inkly.json pins ${i}. Build the matching Inkly runtime version (or upgrade the pin) and retry.`);return{lock:{$schema:"https://inklyai.dev/inkly.lock",runtime:{version:a.version,url:o==="local"&&s?Fc(jt(vr(s),"runtime.js")).toString():kr(a.version,"runtime.js"),integrity:a.integrity}},manifest:a,source:o}}async function En(e){let t=[],n=await De(e.cwd);if(!n)return Ve(t,"error",`No inkly.json found in ${e.cwd} or any parent directory.`),ve({ok:!1,hubRoot:null,lockPath:null,lock:null,source:null,issues:t,drifted:!1,options:e});let r=jt(n,"inkly.lock"),i=e.manifestPath?jc(e.manifestPath)?e.manifestPath:Uc(e.cwd,e.manifestPath):void 0;if(e.check){if(!await q(r))return Ve(t,"error","inkly.lock is missing. Run `inkly lock` to create it."),ve({ok:!1,hubRoot:n,lockPath:r,lock:null,source:null,issues:t,drifted:!0,options:e});let a=await $e(r),o=An.safeParse(a);if(!o.success)return Ve(t,"error",`inkly.lock failed schema validation: ${o.error.message}`),ve({ok:!1,hubRoot:n,lockPath:r,lock:null,source:null,issues:t,drifted:!0,options:e});let s=jt(n,"inkly.json"),c=await $e(s),d=typeof c.runtime=="string"?c.runtime:null;if(!d)return Ve(t,"error",'inkly.json is missing a string "runtime" pin.'),ve({ok:!1,hubRoot:n,lockPath:r,lock:null,source:null,issues:t,drifted:!0,options:e});if(o.data.runtime.version!==d)return Ve(t,"error",`inkly.lock pins runtime ${o.data.runtime.version}, but inkly.json pins ${d}. Re-run \`inkly lock\` to refresh.`),ve({ok:!1,hubRoot:n,lockPath:r,lock:o.data,source:null,issues:t,drifted:!0,options:e});try{let u=await Pn(n,{manifestPath:i,localOnly:!!i||e.localOnly,fetchImpl:e.fetchImpl});return u.lock.runtime.integrity!==o.data.runtime.integrity?(Ve(t,"error",`inkly.lock integrity does not match what ${u.source==="cdn"?yt():"the local build"} serves for runtime ${d}. Re-run \`inkly lock\` to refresh, or someone tampered with the source.`),ve({ok:!1,hubRoot:n,lockPath:r,lock:o.data,source:u.source,issues:t,drifted:!0,options:e})):ve({ok:!0,hubRoot:n,lockPath:r,lock:o.data,source:u.source,issues:t,drifted:!1,options:e})}catch(u){return Ve(t,"error",u.message),ve({ok:!1,hubRoot:n,lockPath:r,lock:o.data,source:null,issues:t,drifted:!0,options:e})}}try{let{lock:a,source:o}=await Pn(n,{manifestPath:i,localOnly:!!i||e.localOnly,fetchImpl:e.fetchImpl}),s=JSON.stringify(a,null,2)+`
|
|
4981
|
-
`,
|
|
4982
|
-
`);else if(t)
|
|
4980
|
+
`,ga={id:"substack",label:"Substack",theme:qe.substack,css:Rc};var ba=[fa,ha,ma,ga],me=Object.fromEntries(ba.map(e=>[e.id,e]));import{createHash as Bc}from"crypto";import{mkdir as Wc,readFile as Nr,rm as Pg,stat as Ig}from"fs/promises";import{homedir as Vc}from"os";import{join as Ge}from"path";import{fileURLToPath as Jc}from"url";import{access as $c,readFile as Dc,readdir as Nc,stat as Mc}from"fs/promises";import{dirname as Lc,join as jt,resolve as Oc,sep as jc}from"path";async function G(e){return $c(e).then(()=>!0,()=>!1)}async function ye(e){let t=Oc(e);for(;;){if(await G(jt(t,"inkly.json")))return t;let n=Lc(t);if(n===t)return null;t=n}}async function Er(e){let t=jt(e,"demos");if(!await G(t))return[];let n=[];async function r(i){let a;try{a=await Nc(i,{withFileTypes:!0})}catch{return}if(a.some(o=>o.isFile()&&o.name==="demo.config.json")){let o=i===t?"":i.slice(t.length+1).split(jc).join("/");n.push({slug:o,dir:i,configPath:jt(i,"demo.config.json")});return}for(let o of a)o.isDirectory()&&await r(jt(i,o.name))}return await r(t),n.sort((i,a)=>i.slug.localeCompare(a.slug))}async function Me(e){let t=await Dc(e,"utf8");return JSON.parse(t)}async function yt(e){let t=await ye(e);if(!t)throw new Error(`No inkly.json found in ${e} or any parent directory.`);let n=jt(t,"inkly.json"),r=Ce.safeParse(await Me(n));if(!r.success)throw new Error(`inkly.json failed schema validation: ${r.error.message}`);let i=[];for(let a of await Er(t)){let o;try{o=Lt(await Me(a.configPath)).config}catch(c){throw new Error(`demos/${a.slug}/demo.config.json failed schema validation: ${c.message}`)}let s=jt(a.dir,"assets.json"),l=null;if(await G(s)){let c=Mt.safeParse(await Me(s));if(!c.success)throw new Error(`demos/${a.slug}/assets.json failed schema validation: ${c.error.message}`);l=c.data}i.push({slug:a.slug,dir:a.dir,configPath:a.configPath,config:o,assetsPath:s,assets:l})}return{root:t,inklyPath:n,inkly:r.data,demos:i}}function Rr(e){let t=e.split("/")[0]??e,n=Ne(t);return n.ok?De.includes(e)?`Demo folder "${e}" uses a reserved slug.`:null:n.reason}async function Mn(e){try{let t=await Mc(e);return t.isFile()?t.size:null}catch{return null}}import{mkdir as Uc,rename as zc,writeFile as Fc}from"fs/promises";import{dirname as Hc}from"path";async function ee(e,t,n){await Uc(Hc(e),{recursive:!0});let r=`${e}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;await Fc(r,t,n?.mode!=null?{mode:n.mode}:void 0),await zc(r,e)}var qc="https://www.runtime.inklyai.dev";function kt(){let e=process.env.BUNDLES_R2_PUBLIC_BASE_URL;return typeof e=="string"&&e.length>0?e.replace(/\/+$/,""):qc}function Mr(e,t,n=kt()){return`${n}/runtime/${e}/${t}`}function Gc(e){return Ge(Vc(),".inkly","cache","runtime",e)}function Zc(e){let t=/^(sha(?:256|384|512))-([A-Za-z0-9+/]+=*)$/.exec(e);return t?{algorithm:t[1],expected:t[2]}:null}function Ut(e,t){let n=Zc(t);return n?Bc(n.algorithm).update(e).digest("base64")===n.expected:!1}var zt=class extends Error{constructor(n,r,i){super(`integrity mismatch for ${n}: expected ${r}`+(i?` (from ${i})`:"")+". 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=i;this.name="IntegrityMismatchError"}},xt=class extends Error{constructor(t){super(t),this.name="LockReadError"}};async function Kc(e){let t=Ge(e,"inkly.lock");if(!await G(t))throw new xt(`no inkly.lock found in ${e}. Run \`inkly lock\` to generate one.`);let n;try{n=await Me(t)}catch(i){throw new xt(`failed to read ${t}: ${i.message}`)}let r=Nn.safeParse(n);if(!r.success)throw new xt(`${t} failed InklyLockSchema validation: ${r.error.message}`);return r.data}function Yc(e,t){let n=e.lastIndexOf("/");return n===-1?e:`${e.slice(0,n+1)}${t}`}async function ya(e){try{return await Nr(e)}catch{return null}}async function Xc(e){let t=Ge(e,"manifest.json");if(!await G(t))return null;try{let n=JSON.parse(await Nr(t,"utf8")),r=Ot.safeParse(n);return r.success?r.data:null}catch{return null}}async function $r(e,t){await ee(e,t)}async function Dr(e,t){if(e.startsWith("file://"))try{return await Nr(Jc(e))}catch(i){throw new Error(`failed to read ${e}: ${i.message}`)}let n;try{n=await t(e)}catch(i){throw new Error(`failed to fetch ${e}: ${i.message}`)}if(!n.ok)throw new Error(`fetch ${e} returned HTTP ${n.status}`);let r=await n.arrayBuffer();return Buffer.from(r)}async function Lr(e){let t=e.fetchImpl??fetch,n=e.lock??await Kc(e.hubRoot),{version:r,url:i,integrity:a}=n.runtime,o=Gc(r),s=await ya(Ge(o,"runtime.js")),l=await ya(Ge(o,"runtime.css")),c=await Xc(o);if(s&&l&&c){let I=Ut(s,a),$=c.version===r,x=Ut(l,c.cssIntegrity);if(I&&$&&x)return{version:r,cacheDir:o,manifest:c,fetched:!1,bytesFetched:0,lock:n}}let u=I=>{let $=e.urlOverrides?.[I];return $||(I==="runtime.js"?i:Yc(i,I))};await Wc(o,{recursive:!0});let p=u("manifest.json"),h=await Dr(p,t),m;try{let I=JSON.parse(h.toString("utf8")),$=Ot.safeParse(I);if(!$.success)throw new Error(`manifest from ${p} failed schema validation: ${$.error.message}`);m=$.data}catch(I){throw new Error(`manifest from ${p} is not valid JSON: ${I.message}`)}if(m.version!==r)throw new Error(`CDN manifest for ${p} reports version ${m.version} but inkly.lock pins ${r}. Re-run \`inkly lock\` to refresh.`);let w=u("runtime.js"),g=await Dr(w,t);if(!Ut(g,a))throw new zt("runtime.js",a,w);let k=u("runtime.css"),C=await Dr(k,t);if(!Ut(C,m.cssIntegrity))throw new zt("runtime.css",m.cssIntegrity,k);return await $r(Ge(o,"runtime.js"),g),await $r(Ge(o,"runtime.css"),C),await $r(Ge(o,"manifest.json"),h),{version:r,cacheDir:o,manifest:m,fetched:!0,bytesFetched:g.byteLength+C.byteLength+h.byteLength,lock:n}}import{readFile as ka,writeFile as Qc}from"fs/promises";import{dirname as Or,isAbsolute as ed,join as Ft,resolve as td}from"path";import{fileURLToPath as nd,pathToFileURL as rd}from"url";function Ze(e,t,n){e.push({level:t,message:n})}async function id(){let e=Or(nd(import.meta.url));for(let t=0;t<10;t+=1){let n=Ft(e,"node_modules","@inkly","runtime","dist","manifest.json");if(await G(n))return n;let r=Ft(e,"packages","inkly-runtime","dist","manifest.json");if(await G(r))return r;let i=Or(e);if(i===e)break;e=i}return null}async function xa(e){let t=JSON.parse(await ka(e,"utf8")),n=Ot.safeParse(t);if(!n.success)throw new Error(`${e} failed RuntimeManifestSchema validation: ${n.error.message}`);return n.data}async function ad(e,t){let n=kt(),r=Mr(e,"manifest.json",n);try{let i=await t(r);if(!i.ok)return null;let a=JSON.parse(await i.text()),o=Ot.safeParse(a);return o.success?{manifest:o.data,url:r}:null}catch{return null}}async function od(e,t){if(t.manifestPath)return{manifest:await xa(t.manifestPath),source:"local",manifestPath:t.manifestPath};if(!t.localOnly){let r=t.fetchImpl??fetch,i=await ad(e,r);if(i){if(i.manifest.version!==e)throw new Error(`CDN manifest at ${i.url} reports version ${i.manifest.version} but inkly.json pins ${e}. Wait for the publish workflow to upload the matching artifact, or update inkly.json#runtime to match.`);return{manifest:i.manifest,source:"cdn"}}}let n=await id();if(!n)throw new Error(`Could not fetch runtime manifest for ${e} from ${kt()} 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 xa(n),source:"local",manifestPath:n}}async function Ln(e,t={}){let n=Ft(e,"inkly.json"),r=await Me(n),i=typeof r.runtime=="string"?r.runtime:null;if(!i)throw new Error('inkly.json is missing a string "runtime" pin.');if(!/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(i))throw new Error(`inkly.json#runtime must be an exact semver (got "${i}"). Set runtime to an exact version and put your compatibility range in runtimeRange.`);let{manifest:a,source:o,manifestPath:s}=await od(i,t);if(a.version!==i)throw new Error(`Runtime manifest reports version ${a.version} but inkly.json pins ${i}. Build the matching Inkly runtime version (or upgrade the pin) and retry.`);return{lock:{$schema:"https://inklyai.dev/inkly.lock",runtime:{version:a.version,url:o==="local"&&s?rd(Ft(Or(s),"runtime.js")).toString():Mr(a.version,"runtime.js"),integrity:a.integrity}},manifest:a,source:o}}async function On(e){let t=[],n=await ye(e.cwd);if(!n)return Ze(t,"error",`No inkly.json found in ${e.cwd} or any parent directory.`),Te({ok:!1,hubRoot:null,lockPath:null,lock:null,source:null,issues:t,drifted:!1,options:e});let r=Ft(n,"inkly.lock"),i=e.manifestPath?ed(e.manifestPath)?e.manifestPath:td(e.cwd,e.manifestPath):void 0;if(e.check){if(!await G(r))return Ze(t,"error","inkly.lock is missing. Run `inkly lock` to create it."),Te({ok:!1,hubRoot:n,lockPath:r,lock:null,source:null,issues:t,drifted:!0,options:e});let a=await Me(r),o=Nn.safeParse(a);if(!o.success)return Ze(t,"error",`inkly.lock failed schema validation: ${o.error.message}`),Te({ok:!1,hubRoot:n,lockPath:r,lock:null,source:null,issues:t,drifted:!0,options:e});let s=Ft(n,"inkly.json"),l=await Me(s),c=typeof l.runtime=="string"?l.runtime:null;if(!c)return Ze(t,"error",'inkly.json is missing a string "runtime" pin.'),Te({ok:!1,hubRoot:n,lockPath:r,lock:null,source:null,issues:t,drifted:!0,options:e});if(o.data.runtime.version!==c)return Ze(t,"error",`inkly.lock pins runtime ${o.data.runtime.version}, but inkly.json pins ${c}. Re-run \`inkly lock\` to refresh.`),Te({ok:!1,hubRoot:n,lockPath:r,lock:o.data,source:null,issues:t,drifted:!0,options:e});try{let u=await Ln(n,{manifestPath:i,localOnly:!!i||e.localOnly,fetchImpl:e.fetchImpl});return u.lock.runtime.integrity!==o.data.runtime.integrity?(Ze(t,"error",`inkly.lock integrity does not match what ${u.source==="cdn"?kt():"the local build"} serves for runtime ${c}. Re-run \`inkly lock\` to refresh, or someone tampered with the source.`),Te({ok:!1,hubRoot:n,lockPath:r,lock:o.data,source:u.source,issues:t,drifted:!0,options:e})):Te({ok:!0,hubRoot:n,lockPath:r,lock:o.data,source:u.source,issues:t,drifted:!1,options:e})}catch(u){return Ze(t,"error",u.message),Te({ok:!1,hubRoot:n,lockPath:r,lock:o.data,source:null,issues:t,drifted:!0,options:e})}}try{let{lock:a,source:o}=await Ln(n,{manifestPath:i,localOnly:!!i||e.localOnly,fetchImpl:e.fetchImpl}),s=JSON.stringify(a,null,2)+`
|
|
4981
|
+
`,c=(await G(r)?await ka(r,"utf8"):null)!==s;return c&&await Qc(r,s,"utf8"),Te({ok:!0,hubRoot:n,lockPath:r,lock:a,source:o,issues:t,drifted:c,options:e})}catch(a){return Ze(t,"error",a.message),Te({ok:!1,hubRoot:n,lockPath:r,lock:null,source:null,issues:t,drifted:!1,options:e})}}function Te(e){let{ok:t,hubRoot:n,lockPath:r,lock:i,source:a,issues:o,drifted:s,options:l}=e,c={ok:t,hubRoot:n,lockPath:r,lock:i,source:a,issues:o,drifted:s};if(!l.silent)if(l.json)process.stdout.write(JSON.stringify(c,null,2)+`
|
|
4982
|
+
`);else if(t)l.check?process.stdout.write(`inkly lock --check: inkly.lock matches inkly.json (runtime ${i?.runtime.version}, source: ${a??"unknown"}).
|
|
4983
4983
|
`):s?process.stdout.write(`inkly lock: wrote ${r} (runtime ${i?.runtime.version}, source: ${a??"unknown"}).
|
|
4984
4984
|
`):process.stdout.write(`inkly lock: ${r} already up to date (runtime ${i?.runtime.version}, source: ${a??"unknown"}).
|
|
4985
4985
|
`);else{for(let u of o)process.stdout.write(`${u.level.toUpperCase()} ${u.message}
|
|
4986
4986
|
`);process.stdout.write(`inkly lock failed
|
|
4987
|
-
`)}return
|
|
4988
|
-
`],["{{themeJson}}",JSON.stringify(t.theme??"inkly")],["{{starterDemoIdJson}}",JSON.stringify(r)]],a=e.files.map(u=>{
|
|
4987
|
+
`)}return c}function jn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function hd(e=kt()){return`${e}/runtime/latest.json`}function Sa(e){return va==="/"?e:e.split("/").join(va)}function md(e){let t=e??globalThis.fetch;if(typeof t!="function")throw new Error("This Node runtime does not provide fetch; Node 20+ is required.");return t}async function _a(e,t){let n=await t(e);if(!n.ok)throw new Error(`failed to fetch ${e}: HTTP ${n.status}${n.statusText?` ${n.statusText}`:""}`);let r=sd.from(await n.arrayBuffer()),i;try{i=JSON.parse(r.toString("utf8"))}catch(a){throw new Error(`failed to parse JSON from ${e}: ${a.message}`)}return{json:i,bytes:r}}function fd(e,t){if(!jn(e))throw new Error(`${t} is not an object`);let n=e.version,r=e.hubSkeleton;if(typeof n!="string"||n.length===0)throw new Error(`${t} is missing version`);if(!jn(r))throw new Error(`${t} is missing hubSkeleton`);if(typeof r.url!="string"||r.url.length===0)throw new Error(`${t} is missing hubSkeleton.url`);if(typeof r.integrity!="string"||r.integrity.length===0)throw new Error(`${t} is missing hubSkeleton.integrity`);if(typeof r.version!="number")throw new Error(`${t} is missing hubSkeleton.version`);let i=typeof r.bytes=="number"?r.bytes:void 0;return{version:n,hubSkeleton:{version:r.version,url:r.url,integrity:r.integrity,bytes:i}}}function gd(e,t){if(!jn(e))throw new Error(`${t} is not an object`);if(e.version!==1)throw new Error(`${t} has unsupported skeleton version`);if(typeof e.runtime!="string"||e.runtime.length===0)throw new Error(`${t} is missing runtime`);if(!Array.isArray(e.files))throw new Error(`${t} is missing files`);let n=e.files.map((r,i)=>{if(!jn(r))throw new Error(`${t} files[${i}] is not an object`);if(typeof r.path!="string"||r.path.length===0)throw new Error(`${t} files[${i}].path is missing`);if(typeof r.contents!="string")throw new Error(`${t} files[${i}].contents is missing`);return{path:r.path,contents:r.contents}});return{version:1,runtime:e.runtime,files:n}}function bd(e,t,n){return e.split(t).join(n)}function yd(e){if(e.startsWith("/")||e.startsWith("\\")||/^[A-Za-z]:/.test(e)||e.includes("\\")||e.split("/").some(t=>t===".."||t.length===0))throw new Error(`Unsafe skeleton path from runtime manifest: ${e}`)}function xd(e,t){let n=e.runtime,r=ae(),i=[["{{hubName}}",t.hubName],["{{hubNameJson}}",JSON.stringify(t.hubName)],["{{runtimeVersionJson}}",JSON.stringify(n)],["{{layoutEntry}}",t.layout===void 0?"":` "layout": ${JSON.stringify(t.layout)},
|
|
4988
|
+
`],["{{themeJson}}",JSON.stringify(t.theme??"inkly")],["{{starterDemoIdJson}}",JSON.stringify(r)]],a=e.files.map(u=>{yd(u.path);let p=u.contents;for(let[h,m]of i)p=bd(p,h,m);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=a.find(u=>u.path==="inkly.json");if(!o)throw new Error("Runtime skeleton is missing inkly.json");let s=Ce.safeParse(JSON.parse(o.contents));if(!s.success)throw new Error(`Runtime skeleton inkly.json is invalid: ${s.error.message}`);let l=a.find(u=>u.path==="demos/getting-started/demo.config.json");if(!l)throw new Error("Runtime skeleton is missing demos/getting-started/demo.config.json");let c=Ve.safeParse(JSON.parse(l.contents));if(!c.success)throw new Error(`Runtime skeleton starter demo is invalid: ${c.error.message}`);return a}async function kd(e){let{latestUrl:t,fetchImpl:n}=e,r=await _a(t,n),i=fd(r.json,t),a=new URL(i.hubSkeleton.url,t).toString(),o=await _a(a,n);if(!Ut(o.bytes,i.hubSkeleton.integrity))throw new Error(`integrity mismatch for hub-skeleton.json from ${a}`);if(typeof i.hubSkeleton.bytes=="number"&&o.bytes.byteLength!==i.hubSkeleton.bytes)throw new Error(`byte length mismatch for hub-skeleton.json from ${a}`);let s=gd(o.json,a);if(s.runtime!==i.version)throw new Error(`runtime/latest.json points at ${i.version}, but hub-skeleton.json declares ${s.runtime}`);return s}async function Ca(e){let{name:t,cwd:n,layout:r,theme:i,silent:a}=e,o=Ne(t);if(!o.ok)throw new Error(o.reason);let s=r===void 0?void 0:Ar.safeParse(r);if(s&&!s.success)throw new Error("Invalid layout. Expected one of: sidebar, tabs.");if(i!==void 0){if(i.length===0)throw new Error("Invalid theme. Expected a theme preset id.");if(!me[i]){let m=Object.keys(me).join(", ");throw new Error(`Invalid theme "${i}". Expected one of: ${m}.`)}}let l=pd(n,t);if(await cd(l).then(()=>!0,()=>!1))throw new Error(`Directory already exists: ${l}. Refusing to overwrite \u2014 choose a different name or remove it first.`);let u=await kd({latestUrl:e.runtimeManifestUrl??hd(),fetchImpl:md(e.fetchImpl)}),p=xd(u,{hubName:t,layout:s?.data,theme:i});await wa(l,{recursive:!0}),await Promise.all(p.map(async m=>{let w=Sa(m.path),g=ud(l,w);await wa(dd(g),{recursive:!0}),await ld(g,m.contents,"utf8")}));let h=!1;try{let m=await On({cwd:l,silent:!0,fetchImpl:e.fetchImpl});h=m.ok&&m.lockPath!==null}catch{}return a||(process.stdout.write(`Scaffolded hub ${t} at ${l}
|
|
4989
4989
|
|
|
4990
4990
|
Next steps:
|
|
4991
4991
|
cd ${t}
|
|
4992
4992
|
inkly dev
|
|
4993
4993
|
open http://localhost:3000
|
|
4994
|
-
`),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:
|
|
4995
|
-
`)}
|
|
4996
|
-
|
|
4994
|
+
`),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:l,files:p.map(m=>Sa(m.path))}}import{createServer as Fd}from"vite";import Hd from"chokidar";import{readFile as xe,readdir as Bd,stat as Wn,mkdtemp as Wd,mkdir as Vd,cp as Jd,writeFile as qd,rm as Gd}from"fs/promises";import{existsSync as wt,createReadStream as Zd}from"fs";import{tmpdir as Kd}from"os";import{basename as Yd,dirname as vt,extname as Xd,join as z,relative as Qd,resolve as Ke,sep as Vn}from"path";import{fileURLToPath as Oa}from"url";import{createRequire as eu}from"module";import{createConnection as tu,createServer as nu}from"net";import{readFile as Ta,stat as wd}from"fs/promises";import{relative as vd}from"path";async function Un(e){let t=await ye(e);if(!t)throw new Error(`No inkly.json found in ${e} or any parent directory. Run \`inkly init <name>\` first or cd into your hub.`);let n=[],r=[],i=[],a=[];for(let s of await Er(t)){let l;try{l=await Ta(s.configPath,"utf8")}catch(h){i.push({slug:s.slug,configPath:s.configPath,message:`failed to read demo.config.json (${h.message})`});continue}let c;try{c=JSON.parse(l)}catch(h){i.push({slug:s.slug,configPath:s.configPath,message:`demo.config.json is not valid JSON (${h.message})`});continue}let u;try{u=Lt(c)}catch(h){i.push({slug:s.slug,configPath:s.configPath,message:`demo.config.json failed schema validation: ${h.message}`});continue}u.changed&&(await Aa(s.configPath,u.config),n.push({slug:s.slug,configPath:s.configPath,reason:"heal"}));let p=(await wd(s.configPath)).mtimeMs;a.push({slug:s.slug,configPath:s.configPath,id:u.config.id,mtimeMs:p})}let o=ca(a.map(s=>({...s,updatedAt:s.mtimeMs})));for(let{entry:s,newId:l}of o){let c=await Ta(s.configPath,"utf8"),u=JSON.parse(c);u.id=l,await Aa(s.configPath,u),r.push({slug:s.slug,configPath:s.configPath,reason:"remint"})}return{hubRoot:t,healed:n,reminted:r,skipped:i}}function sn(e,t){return vd(e,t).split(/[\\/]/).join("/")}async function Aa(e,t){await ee(e,JSON.stringify(t,null,2)+`
|
|
4995
|
+
`)}import{join as Sd}from"path";function jr(e,t){return t.file?Sd(e,"public",t.file):null}async function Pa(e,t){let n=jr(e,t);return n?G(n):!1}function zn(e){return typeof e?.publicUrl=="string"&&typeof e?.cdnPath=="string"}function Ur(e,t){return e.publicUrl&&/^(https?:)?\/\//i.test(e.publicUrl)?e.publicUrl:e.file?`/${t}/${e.file}`:e.publicUrl??null}import{mkdir as Ad,readFile as Pd,writeFile as Id}from"fs/promises";import{homedir as Ed}from"os";import{dirname as Rd,join as $d}from"path";import{readFile as _d}from"fs/promises";import{existsSync as Cd}from"fs";import{dirname as zr,join as Ia}from"path";import{fileURLToPath as Td}from"url";async function ln(){let e=zr(Td(import.meta.url));for(let t=0;t<5;t+=1){let n=Ia(e,"package.json");try{let i=JSON.parse(await _d(n,"utf8"));if(typeof i.version=="string"){let a=Cd(Ia(zr(n),"src"));return{version:i.version,packagePath:n,isLocalBuild:a}}}catch{}let r=zr(e);if(r===e)break;e=r}return{version:"0.0.0-unknown",packagePath:null,isLocalBuild:!1}}async function Fr(e={}){let t=await ln();if(!e.silent){let n=t.isLocalBuild?" (local build)":"";process.stdout.write(`${t.version}${n}
|
|
4996
|
+
`)}return t}var Ea="@inkly-org/cli",Dd="https://registry.npmjs.org",Hr=$d(Ed(),".inkly","update-check.json"),Nd=360*60*1e3,Md=1500;function Ld(e,t){let n=a=>a.trim().split("-")[0].split(".").map(o=>Number.parseInt(o,10)||0),r=n(e),i=n(t);for(let a=0;a<Math.max(r.length,i.length);a+=1){let o=r[a]??0,s=i[a]??0;if(o>s)return!0;if(o<s)return!1}return!1}async function Od(){try{let e=JSON.parse(await Pd(Hr,"utf8"));if(typeof e.latest=="string"&&typeof e.checkedAt=="number")return{latest:e.latest,checkedAt:e.checkedAt}}catch{}return null}async function jd(e){try{await Ad(Rd(Hr),{recursive:!0}),await Id(Hr,`${JSON.stringify(e,null,2)}
|
|
4997
|
+
`,"utf8")}catch{}}async function Ud(e){let t=new AbortController,n=setTimeout(()=>t.abort(),e);try{let r=await fetch(`${Dd}/${Ea}/latest`,{signal:t.signal,headers:{accept:"application/json"}});if(!r.ok)return null;let i=await r.json();return typeof i.version=="string"?i.version:null}catch{return null}finally{clearTimeout(n)}}async function zd(e,t={}){if(process.env.INKLY_NO_UPDATE_CHECK||process.env.CI)return null;let n=t.timeoutMs??Md,r=await Od(),i=r!=null&&Date.now()-r.checkedAt<Nd,a=r?.latest??null;if(!i){let o=await Ud(n);o&&(a=o,await jd({latest:o,checkedAt:Date.now()}))}return a&&Ld(a,e)?`A new release of the Inkly CLI is available: ${e} \u2192 ${a}. Update with \`inkly update\` (or \`npm i -g ${Ea}\`).`:null}async function Fn(e={}){try{let{version:t,isLocalBuild:n}=await ln();if(n)return;let r=await zd(t,e);r&&process.stderr.write(`
|
|
4998
|
+
${r}
|
|
4999
|
+
`)}catch{}}var ru=Oa(import.meta.url),Ht=vt(ru),Wr="127.0.0.1";function Ra(e){let t=Ke(Ht,"template",e);return wt(t)?t:Ke(Ht,"..","..","template",e)}function iu(e){let t=[Ke(Ht,"..","vendor",e),Ke(Ht,"..","..","vendor",e),Ke(Ht,"..","..","..","public","__inkly","vendor",e)];for(let n of t)if(wt(n))return n;return null}function au(e){try{let r=eu(z(e,"package.json")).resolve("@inkly/runtime/package.json");return Ke(vt(r),"dist")}catch{}let t=Ht;for(let n=0;n<8;n++){let r=z(t,"packages","inkly-runtime","dist");if(wt(r))return r;let i=vt(t);if(i===t)break;t=i}return null}function $a(e,t){if(!t)return e;let{integrity:n}=t.lock.runtime,r=t.manifest.cssIntegrity,i=e;i=i.replace(/<link rel="stylesheet" href="\/__inkly\/runtime\.css" \/>/,`<link rel="stylesheet" href="/__inkly/runtime.css" integrity="${r}" crossorigin="anonymous" />`);let a=`<link rel="modulepreload" href="/__inkly/runtime.js" integrity="${n}" crossorigin="anonymous" />`;return/<link rel="prefetch" href="\/__inkly\/runtime\.js"[^>]*\/>/.test(i)?i=i.replace(/<link rel="prefetch" href="\/__inkly\/runtime\.js"[^>]*\/>/,a):i=i.replace(/<link rel="stylesheet" href="\/__inkly\/runtime\.css"[^>]*\/>/,o=>`${o}
|
|
5000
|
+
${a}`),i}function V(e,t,n,r){e.statusCode=t,e.setHeader("content-type",n),e.setHeader("cache-control","no-store"),e.end(r)}function Jn(e,t,n){e.statusCode=200,e.setHeader("content-type",n),e.setHeader("cache-control","no-store");let r=Zd(t);r.on("error",i=>{e.statusCode=500,e.end(`Failed to read ${t}: ${i.message}`)}),r.pipe(e)}var Da=`Inkly runtime artifact not found. Run:
|
|
4997
5001
|
npm run build:runtime -w @inkly/runtime
|
|
4998
5002
|
then restart \`inkly dev\`.
|
|
4999
|
-
`;function
|
|
5000
|
-
${a.error.message}`);let o=a.data,s=await
|
|
5001
|
-
</head>`)}function
|
|
5002
|
-
`),{hubRoot:r,slug:n}}async function
|
|
5003
|
-
`)},o=e.path?
|
|
5004
|
-
`)}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
|
|
5005
|
-
`);for(let L of
|
|
5006
|
-
`)}let u=await
|
|
5007
|
-
`)}else process.stdout.write(`[inkly dev] runtime ${
|
|
5008
|
-
`)}catch(L){throw L instanceof
|
|
5003
|
+
`;function ou(e){let t=Ke(e);for(;;){if(wt(z(t,"inkly.json")))return t;let n=vt(t);if(n===t)return null;t=n}}function Na(e){if(!e)return null;let t=e.trim();return t?/^(?:[a-z][a-z0-9+.-]*:|\/\/|#)/i.test(t)||t.startsWith("/")?t:t.startsWith("public/")?`/${t.slice(7)}`:`/${t.replace(/^\.\/+/,"")}`:null}function Vr(e){return e.brand?{...e,brand:{...e.brand,...e.brand.logo?{logo:Na(e.brand.logo)??e.brand.logo}:{},...e.brand.favicon?{favicon:Na(e.brand.favicon)??e.brand.favicon}:{}}}:e}function su(e){let t=new Map(e.assets.map(n=>[n.id,n]));return da({slug:e.slug,config:e.config,resolveAssetSrc:n=>{if(!n.startsWith("asset:"))return n;let r=t.get(n.slice(6));return r?Ur(r,e.slug):null}})}async function lu(e){let t=z(vt(e),"assets.json");try{let n=await xe(t,"utf8"),r=JSON.parse(n);return Array.isArray(r.assets)?r.assets.filter(i=>{if(!i||typeof i!="object")return!1;let a=i;return typeof a.id=="string"&&a.id.length>0}):[]}catch{return[]}}async function cu(e){let t=z(e,"demos");if(!wt(t))return[];let n=[];async function r(i){let a;try{a=await Bd(i,{withFileTypes:!0})}catch{return}if(a.some(s=>s.isFile()&&s.name==="demo.config.json")){let s=Qd(t,i).split(Vn).join("/");n.push({slug:s,configPath:z(i,"demo.config.json")});return}for(let s of a)s.isDirectory()&&await r(z(i,s.name))}return await r(t),n}async function Ma(e,t){let n=z(e,"inkly.json"),r;try{r=await xe(n,"utf8")}catch(p){throw new Error(`Failed to read inkly.json at ${n}: ${p.message}`)}let i;try{i=JSON.parse(r)}catch(p){throw new Error(`inkly.json is not valid JSON: ${p.message}`)}let a=Ce.safeParse(i);if(!a.success)throw new Error(`inkly.json failed schema validation:
|
|
5004
|
+
${a.error.message}`);let o=a.data,s=await cu(e);for(let p of s){let h=cn(p.slug);if(!h.ok)throw new Error(`Demo folder "${p.slug}" has an invalid slug: ${h.reason}`);if(De.includes(p.slug))throw new Error(`Demo folder "${p.slug}" uses a reserved slug.`)}let l=[];for(let p of s){let h;try{h=await xe(p.configPath,"utf8")}catch(g){t(`Skipping ${p.slug}: failed to read demo.config.json (${g.message})`);continue}let m;try{m=JSON.parse(h)}catch(g){t(`Skipping ${p.slug}: demo.config.json is not valid JSON (${g.message})`);continue}let w;try{w=Lt(m).config}catch(g){t(`Skipping ${p.slug}: demo.config.json failed schema validation: ${g.message}`);continue}l.push({slug:p.slug,configPath:p.configPath,config:w,assets:await lu(p.configPath)})}let c=l.map(p=>su(p)),u=new Map;for(let p of l)u.set(p.slug,p);return{hub:o,hubPath:n,demos:l,index:c,bySlug:u}}function Hn(e,t,n){let r=JSON.stringify(n).replace(/<\/(script)/gi,"<\\/$1"),i=`<script id="${t}" type="application/json">${r}</script>`;return e.includes(`id="${t}"`)?e.replace(new RegExp(`<script id="${t}"[^>]*>[\\s\\S]*?</script>`),i):e.replace("</head>",`${i}
|
|
5005
|
+
</head>`)}function du(e){let t=e.hub.theme??"inkly",n=me[t];return{hub:Vr(e.hub),demos:e.index,theme:{id:t,tokens:n?.theme??null,css:n?.css??""}}}var uu={".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 Bn(e){return uu[Xd(e).toLowerCase()]??"application/octet-stream"}function cn(e){let t=e.split("/").filter(Boolean);if(t.length===0)return{ok:!1,reason:"Name cannot be empty."};for(let n of t){let r=Ne(n);if(!r.ok)return r}return De.includes(e)?{ok:!1,reason:`Demo folder "${e}" uses a reserved slug.`}:{ok:!0}}function La(e,t){let n;try{n=decodeURIComponent(e)}catch{return null}let r=n.replace(/^\/+/,"").replace(/\/+$/,"");if(!r)return null;let i=r.split("/").filter(Boolean);for(let a=i.length;a>=1;a-=1){let o=i.slice(0,a).join("/");if(!cn(o).ok)continue;let s=t.bySlug.get(o);if(s)return{slug:o,demo:s,rel:i.slice(a).join("/")}}return null}async function pu(e){return new Promise(t=>{let n=nu();n.once("error",()=>t(!1)),n.once("listening",()=>{n.close(()=>t(!0))}),n.listen(e,Wr)})}async function hu(e,t){return new Promise(n=>{let r=!1,i=o=>{r||(r=!0,a.destroy(),n(o))},a=tu({port:e,host:t});a.setTimeout(250),a.once("connect",()=>i(!0)),a.once("timeout",()=>i(!1)),a.once("error",()=>i(!1))})}async function mu(e){if(!await pu(e))return!1;for(let t of["localhost","127.0.0.1","::1"])if(await hu(e,t))return!1;return!0}async function fu(e){if(e===0)return 0;if(!Number.isInteger(e)||e<0||e>65535)throw new Error(`invalid port: ${e}`);for(let t=e;t<=65535;t+=1)if(await mu(t))return t;throw new Error(`No available port found at or above ${e}`)}function gu(e,t){let n=e.httpServer?.address();return n&&typeof n=="object"?n.port:e.config.server.port??t}async function bu(e){let t=Yd(e),n=/^[a-z0-9][a-z0-9-]*$/.test(t)&&!De.includes(t)?t:"demo",r=await Wd(z(Kd(),"inkly-dev-"));await Vd(z(r,"demos"),{recursive:!0}),await Jd(e,z(r,"demos",n),{recursive:!0});let i=n;try{let o=JSON.parse(await xe(z(e,"demo.config.json"),"utf8"));typeof o.title=="string"&&o.title.trim()&&(i=o.title.trim())}catch{}let a={$schema:"https://inklyai.dev/inkly.json",name:i,runtime:"0.6.2",theme:"inkly",collections:[{name:"Preview",demos:[n]}]};return await qd(z(r,"inkly.json"),`${JSON.stringify(a,null,2)}
|
|
5006
|
+
`),{hubRoot:r,slug:n}}async function ja(e){let{cwd:t,port:n=3e3,silent:r,skipRuntimeResolve:i}=e,a=L=>{r||process.stderr.write(`[inkly dev] ${L}
|
|
5007
|
+
`)},o=e.path?Ke(t,e.path):t,s=ou(o),l=null;if(!s)if(wt(z(o,"demo.config.json"))){let L=await bu(o);s=L.hubRoot,l=L.hubRoot,r||process.stdout.write(`[inkly dev] serving standalone demo "${L.slug}" via a temporary hub (no inkly.json required)
|
|
5008
|
+
`)}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 c=await Un(s);if(!r){for(let L of c.healed)process.stdout.write(`[inkly dev] healed missing id: ${sn(c.hubRoot,L.configPath)}
|
|
5009
|
+
`);for(let L of c.reminted)process.stdout.write(`[inkly dev] re-minted duplicate id: ${sn(c.hubRoot,L.configPath)}
|
|
5010
|
+
`)}let u=await Ma(s,a),p=z(s,"inkly.lock"),h=wt(p),m=null;if(h&&!i)try{if(m=await Lr({hubRoot:s}),!r)if(m.fetched){let L=(m.bytesFetched/1048576).toFixed(2);process.stdout.write(`[inkly dev] fetched runtime ${m.version} from ${m.lock.runtime.url} (${L} MiB)
|
|
5011
|
+
`)}else process.stdout.write(`[inkly dev] runtime ${m.version} loaded from cache (${m.cacheDir})
|
|
5012
|
+
`)}catch(L){throw L instanceof xt||L instanceof zt?L:new Error(`Failed to resolve runtime via inkly.lock: ${L.message}`)}else if(!i)try{let{lock:L,source:fe}=await Ln(s);if(m=await Lr({hubRoot:s,lock:L}),!r){let ne=m.fetched?`fetched ${(m.bytesFetched/1048576).toFixed(2)} MiB`:"from cache";process.stdout.write(`[inkly dev] no inkly.lock \u2014 resolved runtime ${m.version} from ${fe==="cdn"?"the CDN":"a local build"} (${ne}). Run \`inkly lock\` to pin this version.
|
|
5009
5013
|
`)}}catch(L){r||process.stdout.write(`[inkly dev] no inkly.lock and could not resolve a published runtime (${L.message}). Falling back to the in-workspace @inkly/runtime dist. Run \`inkly lock\` once a runtime is published to R2 to pin a version.
|
|
5010
|
-
`)}let w=
|
|
5011
|
-
`);return}
|
|
5012
|
-
`);return}}
|
|
5014
|
+
`)}let w=m?.cacheDir??au(s),g=$a(await xe(Ra("hub-index.html"),"utf8"),m),k=$a(await xe(Ra("demo.html"),"utf8"),m),C=await fu(n),I=C,$=async()=>{},x=await Fd({root:s,server:{port:C,strictPort:!0,host:Wr,hmr:{host:Wr},fs:{allow:[s,Oa(new URL("../",import.meta.url))]}},appType:"custom",clearScreen:!1,logLevel:r?"silent":"info",configFile:!1,plugins:[{name:"inkly-dev-endpoints",configureServer(L){let fe=(ne,N,ge)=>{let M=(ne.url??"").split("?")[0]??"";if(M==="/"||M==="/index.html"){let j=Hn(g,"__inkly_hub_data",du(u));V(N,200,"text/html; charset=utf-8",j);return}if(M.startsWith("/__inkly/snapshot/")){let j=decodeURIComponent(M.slice(18)),U=j.indexOf("/snapshots/"),W=U>0?j.slice(0,U):"",Z=U>0?j.slice(U+1):"";if(!cn(W).ok||!u.bySlug.has(W)||!Z||Z.includes("..")||Z.startsWith("/")){V(N,400,"text/plain; charset=utf-8","Invalid snapshot path");return}if(!Z.startsWith("snapshots/")){V(N,400,"text/plain; charset=utf-8","Invalid snapshot path");return}let Pe=z(s,"demos",...W.split("/")),we=z(Pe,Z);if(!we.startsWith(Pe+Vn)&&we!==Pe){V(N,400,"text/plain; charset=utf-8","Invalid snapshot path");return}Wn(we).then(async Xt=>{if(!Xt.isFile()){V(N,404,"text/plain; charset=utf-8",`Snapshot not found: ${Z}`);return}if(!/\.html?$/i.test(Z)){let ns=await xe(we,"utf8");V(N,200,Bn(we),$n(bt(ns),`/${W}/`));return}let le=Ir(Z),Qt=le?z(Pe,le):null,[pr,en]=await Promise.all([xe(we,"utf8"),Qt?xe(Qt,"utf8").catch(()=>null):Promise.resolve(null)]),xn=ua({htmlPath:Z,html:pr,css:en,cssHref:le?`/__inkly/snapshot/${encodeURIComponent(W)}/${le.split("/").map(encodeURIComponent).join("/")}`:null,captureAssetBaseUrl:`/${W}/`});V(N,200,Bn(we),xn)},()=>V(N,404,"text/plain; charset=utf-8",`Snapshot not found: ${Z}`));return}if(M==="/__inkly/hub"){V(N,200,"application/json; charset=utf-8",JSON.stringify(Vr(u.hub)));return}if(M==="/__inkly/demos"){V(N,200,"application/json; charset=utf-8",JSON.stringify(u.index));return}if(M.startsWith("/__inkly/demo/")){let j=decodeURIComponent(M.slice(14)),J=cn(j);if(!J.ok){V(N,400,"text/plain; charset=utf-8",J.reason);return}let U=u.bySlug.get(j);if(!U){V(N,404,"text/plain; charset=utf-8",`No such demo: ${j}`);return}let W=z(vt(U.configPath),"assets.json");xe(W,"utf8").then(Z=>{let Yt=[];try{let Pe=JSON.parse(Z);Array.isArray(Pe.assets)&&(Yt=Pe.assets)}catch{}V(N,200,"application/json; charset=utf-8",JSON.stringify({demo:U.config,assets:Yt}))},()=>{V(N,200,"application/json; charset=utf-8",JSON.stringify({demo:U.config,assets:[]}))});return}if(M==="/__inkly/runtime.js"){Br(N,w,"runtime.js","text/javascript; charset=utf-8");return}if(M==="/__inkly/runtime.css"){Br(N,w,"runtime.css","text/css; charset=utf-8");return}if(M==="/__inkly/manifest.json"){Br(N,w,"manifest.json","application/json; charset=utf-8");return}if(M.startsWith("/__inkly/vendor/")){let j=decodeURIComponent(M.slice(16));if(!/^(react|react-dom|react-dom-client|react-jsx-runtime)\.mjs$/.test(j)){V(N,404,"text/plain; charset=utf-8",`No such vendor module: ${j}`);return}let J=iu(j);if(!J){V(N,503,"text/plain; charset=utf-8",`Runtime vendor module not found: ${j}`);return}Jn(N,J,"text/javascript; charset=utf-8");return}if(M.startsWith("/__inkly/theme/")&&M.endsWith(".css")){let j=decodeURIComponent(M.slice(15,-4)),J=me[j];if(!J){let U=Object.keys(me).join(", ");V(N,404,"text/plain; charset=utf-8",`No such theme: "${j}". Known themes: ${U}
|
|
5015
|
+
`);return}V(N,200,"text/css; charset=utf-8",J.css??"");return}let Tt=M.startsWith("/__inkly/")?null:La(M,u);if(Tt&&Tt.rel){let{slug:j,rel:J}=Tt;if(J.includes("..")||J.startsWith("/")){V(N,400,"text/plain; charset=utf-8","Invalid path");return}let U=z(s,"demos",...j.split("/"),"public"),W=z(U,J);if(!W.startsWith(U+Vn)&&W!==U){V(N,400,"text/plain; charset=utf-8","Invalid path");return}Wn(W).then(Z=>{if(!Z.isFile()){ge();return}Jn(N,W,Bn(W))},()=>ge());return}if(M.length>1&&!M.startsWith("/__inkly/")&&!M.endsWith("/")){let j=decodeURIComponent(M.slice(1)),J=z(s,"public"),U=z(J,j);if(!j.includes("..")&&(U.startsWith(J+Vn)||U===J)){Wn(U).then(W=>{if(W.isFile()){Jn(N,U,Bn(U));return}O()},()=>O());return}}O();function O(){if(M.length>1&&!M.startsWith("/__inkly/")){let j=M.replace(/^\/+/,"").replace(/\/+$/,""),J=La(M,u);if(J&&J.rel===""){let{slug:U,demo:W}=J;if(!cn(U).ok){ge();return}let Yt={hub:{name:u.hub.name,brand:Vr(u.hub).brand??null,tokens:u.hub.tokens??null,theme:u.hub.theme??null,layout:u.hub.layout??null},demoSlug:U,demoTitle:W.config.title??W.config.id},Pe=z(vt(W.configPath),"assets.json"),we=Xt=>{let le=Hn(k,"__inkly_hub_meta",Yt);le=Hn(le,"__inkly_demo_config",W.config),le=Hn(le,"__inkly_demo_assets",Xt),V(N,200,"text/html; charset=utf-8",le)};xe(Pe,"utf8").then(Xt=>{let le=[];try{let Qt=JSON.parse(Xt);Array.isArray(Qt.assets)&&(le=Qt.assets.map(pr=>{let en=pr,xn=Ur(en,U);return xn?{...en,publicUrl:xn}:en}))}catch{}we(le)},()=>{we([])});return}if(j&&!j.includes("/")){if(!Ne(j).ok){ge();return}V(N,404,"text/plain; charset=utf-8",`No such demo: "${j}". Known demos: ${[...u.bySlug.keys()].join(", ")||"(none)"}
|
|
5016
|
+
`);return}}ge()}};L.middlewares.use(fe)}}]});await x.listen(),I=gu(x,C);let A=`http://127.0.0.1:${I}/`,P=`http://localhost:${I}/`,H=Hd.watch([z(s,"inkly.json"),z(s,"demos/**/demo.config.json"),z(s,"demos/**/assets.json")],{ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:60,pollInterval:20}}),D=!1,q=async()=>{if(!D){D=!0;try{u=await Ma(s,a);try{x.ws.send({type:"custom",event:"inkly:hub-changed"}),x.ws.send({type:"full-reload"})}catch{}}catch(L){a(`Reload failed: ${L.message}`)}finally{D=!1}}};if($=q,H.on("add",q),H.on("change",q),H.on("unlink",q),!r){let L=u.hub.collections?.length??0,fe=[...u.bySlug.keys()],ne=10,N=fe.length>0?`
|
|
5013
5017
|
demos:
|
|
5014
|
-
`+
|
|
5015
|
-
`)+(
|
|
5016
|
-
\u2026and ${
|
|
5017
|
-
inkly dev running at ${
|
|
5018
|
+
`+fe.slice(0,ne).map(ge=>` ${P}${ge}`).join(`
|
|
5019
|
+
`)+(fe.length>ne?`
|
|
5020
|
+
\u2026and ${fe.length-ne} more`:""):"";process.stdout.write(`
|
|
5021
|
+
inkly dev running at ${P}
|
|
5018
5022
|
hub: ${u.hub.name}
|
|
5019
|
-
demos: ${u.demos.length} in ${L} collection(s)${
|
|
5023
|
+
demos: ${u.demos.length} in ${L} collection(s)${N}
|
|
5024
|
+
assets: demos/<slug>/public/<file> served at ${P}<slug>/<file>
|
|
5020
5025
|
watching ${s}
|
|
5021
5026
|
|
|
5022
|
-
`)}let
|
|
5023
|
-
`)
|
|
5024
|
-
`),!
|
|
5025
|
-
`;
|
|
5026
|
-
`,
|
|
5027
|
-
|
|
5028
|
-
|
|
5027
|
+
`),Fn()}let de=!1;return{url:A,port:I,server:x,hubRoot:s,close:async()=>{de||(de=!0,await H.close(),await x.close(),l&&await Gd(l,{recursive:!0,force:!0}).catch(()=>{}))}}}function Br(e,t,n,r){if(!t){V(e,503,"text/plain; charset=utf-8",Da);return}let i=z(t,n);Wn(i).then(()=>Jn(e,i,r),()=>V(e,503,"text/plain; charset=utf-8",`${Da}(missing: ${n})`))}import{mkdir as yu,access as za,cp as xu,readFile as Fa}from"fs/promises";import{basename as ku,dirname as wu,join as Bt,resolve as Ha}from"path";function Jr(e){return e.split("-").filter(t=>t.length>0).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}function Ua(e,t){return{id:ae(),version:1,title:t??Jr(e),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 vu(e){let t=Ha(e);for(;;){let n=Bt(t,"inkly.json");if(await za(n).then(()=>!0,()=>!1))return t;let i=wu(t);if(i===t)return null;t=i}}async function Ba(e){let{slug:t,cwd:n,collection:r,from:i,silent:a}=e,o=await vu(n);if(!o)throw new Error("Not inside a hub. Run `inkly init <name>` first.");let s=Ne(t);if(!s.ok)throw new Error(s.reason);let l=Bt(o,"inkly.json"),c=await Fa(l,"utf8"),u;try{u=JSON.parse(c)}catch(A){throw new Error(`Failed to parse inkly.json: ${A.message}`)}let p=Ce.safeParse(u);if(!p.success)throw new Error(`Invalid inkly.json: ${p.error.issues.map(A=>`${A.path.join(".")||"<root>"}: ${A.message}`).join("; ")}`);let h=p.data,m=Bt(o,"demos",t);if(await za(m).then(()=>!0,()=>!1))throw new Error(`Demo already exists: demos/${t}. Choose a different slug or remove it first.`);let g,k=h,C=h.collections??[],I=r,$=!1;if(!I&&i&&C.length===1&&(I=C[0].name,$=!0),I){let A={...h,collections:C.map(H=>({...H,demos:[...H.demos]}))},P=A.collections.find(H=>H.name===I);P?P.demos.push(t):A.collections.push({name:I,demos:[t]}),k=A,g=I}if(g){let A=Ce.safeParse(k);if(!A.success)throw new Error(`Internal error: updated inkly.json failed schema validation. ${A.error.message}`)}let x;if(i)x=await Su(Ha(n,i),m);else{x=ae();let A={...Ua(t,Jr(t)),id:x},P=Ve.safeParse(A);if(!P.success)throw new Error(`Internal error: scaffolded demo failed schema validation. ${P.error.message}`);await yu(m,{recursive:!0}),await ee(Bt(m,"demo.config.json"),JSON.stringify(A,null,2)+`
|
|
5028
|
+
`)}if(g&&await ee(l,JSON.stringify(k,null,2)+`
|
|
5029
|
+
`),!a){let A=`${i?"Imported":"Added"} ${m}
|
|
5030
|
+
`;A+=` id: ${x}
|
|
5031
|
+
`,g&&(A+=$?`Added to collection "${g}" in inkly.json (the hub's only collection \u2014 pass --collection to choose another, or remove it there to keep this demo off the index)
|
|
5032
|
+
`:`Added to collection "${g}" in inkly.json
|
|
5033
|
+
`),A+=`Next: inkly dev
|
|
5034
|
+
`,process.stdout.write(A)}return{hubRoot:o,demoDir:m,collectionModified:g,id:x}}async function Su(e,t){let n=Bt(e,"demo.config.json"),r;try{r=await Fa(n,"utf8")}catch{throw new Error(`No demo.config.json found in ${e} \u2014 that is not an Inkly demo folder.`)}let i;try{i=JSON.parse(r)}catch(u){throw new Error(`Failed to parse ${n}: ${u.message}`)}let a=i&&typeof i=="object"?i:{},o=typeof a.id=="string"?a.id:"",s=i,l=!1;Tn(o)||(o=ae(),s={...a,id:o},l=!0);let c=Ve.safeParse(s);if(!c.success)throw new Error(`${n} is not a valid demo: ${c.error.issues.map(u=>`${u.path.join(".")||"<root>"}: ${u.message}`).join("; ")}`);return await xu(e,t,{recursive:!0,filter:u=>{let p=ku(u);return p!=="node_modules"&&p!==".inkly"&&p!==".git"}}),l&&await ee(Bt(t,"demo.config.json"),JSON.stringify(s,null,2)+`
|
|
5035
|
+
`),o}function Le(e,t,n,r){e.push({level:t,file:n,message:r})}function qr(e,t){if(typeof e=="string"){e.startsWith("asset:")&&t.add(e.slice(6));return}if(!(!e||typeof e!="object")){if(Array.isArray(e)){for(let n of e)qr(n,t);return}for(let n of Object.values(e))qr(n,t)}}async function qn(e){let t=[],n=null;try{let o=await yt(e.cwd);n=o.root,o.inkly.theme&&!me[o.inkly.theme]&&Le(t,"error","inkly.json",`Unknown theme "${o.inkly.theme}". Known themes: ${Object.keys(me).join(", ")}.`);let s=new Set(o.demos.map(c=>c.slug)),l=new Map;for(let c of o.demos){let u=Rr(c.slug);u&&Le(t,"error",`demos/${c.slug}`,u);let p=l.get(c.config.id);p?p.push(c.slug):l.set(c.config.id,[c.slug]),c.config.theme?.preset&&!me[c.config.theme.preset]&&Le(t,"error",`demos/${c.slug}/demo.config.json`,`Unknown demo theme preset "${c.config.theme.preset}".`);let h=new Set;qr(c.config,h);let m=new Set((c.assets?.assets??[]).map(w=>w.id));for(let w of h)m.has(w)||Le(t,"error",`demos/${c.slug}/demo.config.json`,`References asset:${w}, but demos/${c.slug}/assets.json has no matching asset id.`);for(let w of c.assets?.assets??[])await Pa(c.dir,w)||zn(w)||Le(t,"warning",`demos/${c.slug}/assets.json`,`Asset "${w.id}" has no local file and no CDN URL.`)}for(let[c,u]of l)if(!(u.length<2))for(let p of u)Le(t,"warning",`demos/${p}/demo.config.json`,`Duplicate demo id "${c}" shared with ${u.filter(h=>h!==p).map(h=>`demos/${h}`).join(", ")}. Run \`inkly doctor\` to re-mint.`);for(let c of o.inkly.collections??[])for(let u of c.demos){let p=Rr(u);if(p){Le(t,"error","inkly.json",`Collection "${c.name}" references invalid slug "${u}": ${p}`);continue}s.has(u)||Le(t,"warning","inkly.json",`Collection "${c.name}" references missing demo "${u}".`)}}catch(o){Le(t,"error","hub",o.message)}let r=t.filter(o=>o.level==="error").length,i=t.filter(o=>o.level==="warning").length,a={ok:r===0&&(!e.strict||i===0),hubRoot:n,errors:r,warnings:i,issues:t};if(!e.silent)if(e.json)process.stdout.write(JSON.stringify(a,null,2)+`
|
|
5029
5036
|
`);else if(a.ok)process.stdout.write(`inkly validate passed (${r} errors, ${i} warnings)
|
|
5030
5037
|
`);else{for(let o of t)process.stdout.write(`${o.level.toUpperCase()} ${o.file}: ${o.message}
|
|
5031
5038
|
`);process.stdout.write(`inkly validate failed (${r} errors, ${i} warnings)
|
|
5032
|
-
`)}return a}
|
|
5033
|
-
`)}
|
|
5034
|
-
|
|
5035
|
-
|
|
5036
|
-
`);
|
|
5037
|
-
`);if(
|
|
5038
|
-
`);
|
|
5039
|
-
|
|
5040
|
-
|
|
5041
|
-
`),{apiBase:
|
|
5042
|
-
`)
|
|
5043
|
-
`)
|
|
5044
|
-
`):(process.stdout.write(`Config: ${Me}
|
|
5039
|
+
`)}return a}import{spawn as _u}from"child_process";async function Wa(e={}){let t=e.packageName??"@inkly-org/cli@latest",n=process.env.npm_execpath?[process.execPath,process.env.npm_execpath,"install","-g",t]:["npm","install","-g",t];if(e.dryRun){e.silent||process.stdout.write(`${n.join(" ")}
|
|
5040
|
+
`);return}await new Promise((r,i)=>{let a=_u(n[0],n.slice(1),{stdio:"inherit"});a.on("error",i),a.on("exit",o=>{o===0?r():i(new Error(`Update failed with exit code ${o??"unknown"}`))})})}import{join as Iu}from"path";import{readFile as Cu,rm as Tu}from"fs/promises";import{join as Au}from"path";import{homedir as Pu}from"os";var Gr="https://app.inklyai.dev",Va="http://localhost:3000",Oe=Au(Pu(),".inkly","config.json");async function Ye(){try{let e=await Cu(Oe,"utf8"),t=JSON.parse(e);return{apiBase:typeof t.apiBase=="string"?t.apiBase:void 0,token:typeof t.token=="string"?t.token:void 0}}catch{return{}}}async function Zr(e){await ee(Oe,JSON.stringify(e,null,2)+`
|
|
5041
|
+
`,{mode:384})}async function Ja(){await Tu(Oe,{force:!0})}function Xe(e){return(e||Gr).replace(/\/+$/,"")}async function qa(e){let t=[],n=await ln();t.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);t.push({name:"node",ok:r>=20,message:process.version});let i=await ye(e.cwd);t.push({name:"hub-root",ok:!!i,message:i??"No inkly.json found."});let a=await Ye();t.push({name:"login",ok:!!a.token,message:a.token?`Configured for ${a.apiBase??"(default API)"}`:"Not logged in."});let o=[],s=null;if(i){let c=await Un(i);s={healed:c.healed.length,reminted:c.reminted.length,paths:[...c.healed,...c.reminted].map(h=>sn(c.hubRoot,h.configPath))},t.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 qn({cwd:i,silent:!0});o=u.issues,t.push({name:"schema",ok:u.ok,message:`${u.errors} errors, ${u.warnings} warnings`});let p=await Mn(Iu(i,"node_modules","@inkly","runtime","dist","runtime.js"));p!==null&&t.push({name:"runtime-artifact",ok:!0,message:`${p} bytes`})}let l={ok:t.every(c=>c.ok||c.name==="login"),checks:t,validationIssues:o,demoIds:s};if(!e.silent)if(e.json)process.stdout.write(JSON.stringify(l,null,2)+`
|
|
5042
|
+
`);else{for(let c of t)process.stdout.write(`${c.ok?"OK":"WARN"} ${c.name}: ${c.message}
|
|
5043
|
+
`);if(s&&s.paths.length>0)for(let c of s.paths)process.stdout.write(` fixed id in ${c}
|
|
5044
|
+
`);if(o.length>0)for(let c of o)process.stdout.write(`${c.level.toUpperCase()} ${c.file}: ${c.message}
|
|
5045
|
+
`)}return l}import{randomBytes as Bu}from"crypto";import{createServer as Wu}from"http";import{spawn as Vu}from"child_process";import{randomUUID as Eu}from"crypto";import{mkdir as Ru,readFile as $u,writeFile as Du}from"fs/promises";import{dirname as Nu,join as Mu}from"path";import{homedir as Lu}from"os";import{PostHog as Ou}from"posthog-node";var Ga=process.env.NEXT_PUBLIC_POSTHOG_PROJECT_TOKEN??process.env.POSTHOG_PROJECT_TOKEN??"phc_Dmh4w8YFNosi3YHD4Sv7ShHX7ccS8kmtRcm8XSVmB5jT",ju=process.env.NEXT_PUBLIC_POSTHOG_HOST??process.env.POSTHOG_HOST??"https://us.i.posthog.com",Uu="@inkly-org/cli@0.5.1",Kr=Mu(Lu(),".inkly","analytics.json"),Zn=null,Gn=null,Wt=null;function zu(){return!!Ga&&process.env.INKLY_TELEMETRY_DISABLED!=="1"}function Za(){return zu()?(Zn??=new Ou(Ga,{host:ju,flushAt:1,flushInterval:0}),Zn):null}async function Yr(){try{let e=await $u(Kr,"utf8");return JSON.parse(e)}catch{return{}}}async function Xr(e){await Ru(Nu(Kr),{recursive:!0}),await Du(Kr,JSON.stringify(e,null,2)+`
|
|
5046
|
+
`,{encoding:"utf8",mode:384})}async function Ka(){return Gn||(Gn=(async()=>{let e=await Yr();if(typeof e.platformUserId=="string"&&e.platformUserId&&(Wt=e.platformUserId),typeof e.distinctId=="string"&&e.distinctId)return e.distinctId;let t=`cli_${Eu()}`;return await Xr({...e,distinctId:t}),t})(),Gn)}async function Fu(){let e=await Ka();return Wt??e}async function Qr(e){if(!e||Wt===e){e&&(Wt=e);return}let t=Za();try{let n=await Ka(),r=await Yr(),i=r.platformUserId!==e;Wt=e,i&&(await Xr({...r,platformUserId:e}),t?.alias({distinctId:e,alias:n}))}catch{}}async function Ya(){Wt=null;try{let e=await Yr();if(e.platformUserId){let{platformUserId:t,...n}=e;await Xr(n)}}catch{}}function Hu(){return{surface:"cli",release:process.env.POSTHOG_RELEASE??Uu,node_version:process.versions.node,platform:process.platform,arch:process.arch,ci:!!process.env.CI}}async function B(e,t={}){let n=Za();if(n)try{n.capture({distinctId:await Fu(),event:e,properties:{...Hu(),...t}})}catch{}}async function ei(){if(Zn)try{await Zn.shutdown(2e3)}catch{}}async function Qa(e){let t=Xe(e.local?Va:Gr),n=e.token??process.env.INKLY_API_TOKEN;if(n){let a=await ti(t,n).catch(()=>({valid:!1,userId:null}));return await Zr({apiBase:t,token:n}),await Xa("token",a),e.silent||process.stdout.write(`Logged in to ${t}${a.valid?"":" (token saved without online verification)"}
|
|
5047
|
+
`),{apiBase:t,configPath:Oe,verified:a.valid,method:"token"}}let r=await Ju({apiBase:t,shouldOpen:e.open!==!1,silent:e.silent});await Zr({apiBase:r.apiBase,token:r.apiToken});let i=await ti(r.apiBase,r.apiToken).catch(()=>({valid:!1,userId:null}));return await Xa("browser",i),e.silent||process.stdout.write(`Logged in to ${r.apiBase}
|
|
5048
|
+
`),{apiBase:r.apiBase,configPath:Oe,verified:i.valid,method:"browser"}}async function Xa(e,t){t.valid&&t.userId&&await Qr(t.userId),await B("inkly_cli_logged_in",{method:e,verified:t.valid})}async function eo(e={}){await B("inkly_cli_logged_out",{}),await Ya(),await Ja(),e.silent||process.stdout.write(`Removed ${Oe}
|
|
5049
|
+
`)}async function to(e){let t=await Ye(),n=t.apiBase?Xe(t.apiBase):null,r=await ye(e.cwd),i="skipped",a;if(n&&t.token)try{let s=await ti(n,t.token);i=s.valid?"ok":"failed",i==="failed"&&(a="Token was rejected by the platform."),s.valid&&s.userId&&await Qr(s.userId)}catch(s){i="failed",a=s.message}let o={configPath:Oe,apiBase:n,loggedIn:!!t.token,hubRoot:r,online:i,message:a};return e.silent||(e.json?process.stdout.write(JSON.stringify(o,null,2)+`
|
|
5050
|
+
`):(process.stdout.write(`Config: ${Oe}
|
|
5045
5051
|
`),process.stdout.write(`Hub: ${r??"(not inside a hub)"}
|
|
5046
5052
|
`),process.stdout.write(`API: ${n??"(not configured)"}
|
|
5047
5053
|
`),process.stdout.write(`Login: ${o.loggedIn?"configured":"not configured"}
|
|
5048
5054
|
`),process.stdout.write(`Online: ${i}${a?` (${a})`:""}
|
|
5049
|
-
`))),o}async function
|
|
5055
|
+
`))),o}async function ti(e,t){let n=await fetch(`${e}/api/captures/verify`,{method:"GET",headers:{authorization:`Bearer ${t}`}});if(!n.ok)return{valid:!1,userId:null};let r=null;try{let i=await n.json();typeof i.userId=="string"&&i.userId&&(r=i.userId)}catch{}return{valid:!0,userId:r}}async function Ju(e){let t=Bu(16).toString("hex"),n=Wu(),r=await qu(n),i=new URL("/cli/login",e.apiBase);i.searchParams.set("callback",r.url),i.searchParams.set("state",t);let a=Gu({server:n,state:t,apiBase:e.apiBase,timeoutMs:120*1e3});return e.silent||process.stdout.write(`Opening browser for Inkly login:
|
|
5050
5056
|
${i.toString()}
|
|
5051
|
-
`),e.shouldOpen&&
|
|
5052
|
-
`),
|
|
5057
|
+
`),e.shouldOpen&&Ku(i.toString()),a}async function qu(e){await new Promise((n,r)=>{e.once("error",r),e.listen(0,"127.0.0.1",()=>n())});let t=e.address();if(!t||typeof t=="string")throw new Error("Could not start local login callback server.");return{url:`http://127.0.0.1:${t.port}/callback`}}async function Gu(e){return new Promise((t,n)=>{let r=setTimeout(()=>{dn(e.server),n(new Error("Timed out waiting for browser login."))},e.timeoutMs);e.server.on("request",(i,a)=>{(async()=>{try{let o=new URL(i.url??"/","http://127.0.0.1");if(o.pathname!=="/callback"){Vt(a,404,"Not found.");return}let s=o.searchParams.get("state"),l=o.searchParams.get("pairingToken"),c=o.searchParams.get("error");if(s!==e.state){Vt(a,400,"Invalid Inkly CLI login callback. You can close this tab.");return}if(c){clearTimeout(r),Vt(a,400,`Inkly CLI login failed: ${c}`),dn(e.server),n(new Error(c));return}if(!l){clearTimeout(r),Vt(a,400,"Invalid Inkly CLI login callback. You can close this tab."),dn(e.server),n(new Error("Invalid Inkly CLI login callback."));return}let u=await Zu(e.apiBase,l);clearTimeout(r),Vt(a,200,"Inkly CLI is connected. You can close this tab."),dn(e.server),t(u)}catch(o){clearTimeout(r),Vt(a,500,`Inkly CLI login failed: ${o.message}`),dn(e.server),n(o)}})()})})}async function Zu(e,t){let n=await fetch(`${e}/api/cli/exchange`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({pairingToken:t})}),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:Xe(r.apiBase??e)}}function Ku(e){let t=process.platform,i=Vu(t==="darwin"?"open":t==="win32"?"cmd":"xdg-open",t==="win32"?["/c","start","",e]:[e],{stdio:"ignore",detached:!0});i.on("error",()=>{}),i.unref()}function Vt(e,t,n){e.statusCode=t,e.setHeader("content-type","text/html; charset=utf-8"),e.end(`<!doctype html><meta charset="utf-8"><title>Inkly CLI</title><body style="font-family: system-ui, sans-serif; padding: 32px;">${Yu(n)}</body>`)}function dn(e){try{e.close()}catch{}}function Yu(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}import{readFile as Xu}from"fs/promises";import{extname as io}from"path";async function Yn(e){let t=await Ye(),n=await yt(e.cwd),r=e.demo?n.demos.filter(h=>h.slug===e.demo):n.demos;if(e.demo&&r.length===0)throw new Error(`No such demo: ${e.demo}`);let i=[],a=[];for(let h of r)for(let m of h.assets?.assets??[]){let w=jr(h.dir,m),g=w?await G(w):!1,k=zn(m);if(!g&&!k){a.push({demo:h.slug,id:m.id,sha256:m.sha256});continue}if(!g||k||!m.file||!w)continue;let C=await Mn(w);i.push({demo:h.slug,id:m.id,sha256:m.sha256,file:m.file,localPath:w,contentType:m.contentType??Kn(m.file,m.kind),size:m.size??C??0,alreadyRemote:k})}let o=Array.from(new Map(i.map(h=>[h.sha256,h])).values()),s={hubRoot:n.root,dryRun:!!e.dryRun,assets:o,unresolved:a,uploaded:0,updatedManifests:[]};if(e.dryRun||o.length===0)return e.silent||no(s,e.json),s;if(!t.token)throw new Error("Not logged in. Run `inkly login --token <token>` first.");let l=Xe(t.apiBase??process.env.INKLY_API_BASE),c=await ni({apiBase:l,token:t.token,assets:o}),u=c.uploads,p=new Map(u.map(h=>[h.sha256,h]));for(let h of r){if(!h.assets)continue;let m=!1,w=h.assets.assets.map(k=>{let C=p.get(k.sha256);return C?(m=!0,{...k,contentType:k.contentType??Kn(`${k.sha256}${C.ext}`,k.kind),publicUrl:C.publicUrl,cdnPath:C.cdnPath}):k});if(!m)continue;let g={...h.assets,assets:w};await ee(h.assetsPath,JSON.stringify(g,null,2)+`
|
|
5058
|
+
`),s.updatedManifests.push(`demos/${h.slug}/assets.json`)}return s.uploaded=c.uploaded,e.silent||no(s,e.json),s}async function ni(e){let t=await ep(e.apiBase,e.token,e.assets),n=new Map(t.uploads.map(a=>[a.sha256,a])),r=0;for(let a of e.assets){let o=n.get(a.sha256);if(!o)throw new Error(`Platform did not return upload metadata for ${a.sha256}.`);if(o.uploadUrl){let s=await Xu(a.localPath),l=await fetch(o.uploadUrl,{method:"PUT",headers:o.uploadHeaders??{"content-type":a.contentType},body:s});if(!l.ok)throw new Error(`Asset upload failed for ${a.id}: HTTP ${l.status}`);r+=1}}return{uploads:(await Qu(e.apiBase,e.token,e.assets,t.uploads)).uploads,uploaded:r}}async function Qu(e,t,n,r){let i=new Map(r.map(s=>[s.sha256,s])),a=await fetch(`${e}/api/cli/sync-assets/complete`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify({assets:n.map(s=>{let l=i.get(s.sha256);if(!l)throw new Error(`Platform did not return upload metadata for ${s.sha256}.`);return{sha256:s.sha256,ext:l.ext,contentType:s.contentType,size:s.size,cdnPath:l.cdnPath}})})}),o=await a.json().catch(()=>null);if(!a.ok||!o||!Array.isArray(o.uploads))throw new Error(o?.error??`Sync completion failed: HTTP ${a.status}`);return{uploads:o.uploads}}async function ep(e,t,n){let r=await fetch(`${e}/api/cli/sync-assets`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify({assets:n.map(a=>({sha256:a.sha256,ext:io(a.file)||tp(a.contentType),contentType:a.contentType,size:a.size}))})}),i=await r.json().catch(()=>null);if(!r.ok||!i||!Array.isArray(i.uploads))throw new Error(i?.error??`Sync endpoint failed: HTTP ${r.status}`);return{uploads:i.uploads}}function Kn(e,t){let n=io(e).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":t==="font"?"font/woff2":"application/octet-stream"}function tp(e){let t=e.toLowerCase().split(";")[0]?.trim();return t==="image/png"?".png":t==="image/jpeg"?".jpg":t==="image/webp"?".webp":t==="image/gif"?".gif":t==="image/svg+xml"?".svg":t==="video/webm"?".webm":t==="video/mp4"?".mp4":t==="audio/mpeg"?".mp3":t==="audio/wav"?".wav":t==="font/woff2"?".woff2":".bin"}function no(e,t){if(t){process.stdout.write(JSON.stringify(e,null,2)+`
|
|
5053
5059
|
`);return}if(e.dryRun){process.stdout.write(`inkly sync dry run: ${e.assets.length} asset(s) need upload
|
|
5054
|
-
`),
|
|
5055
|
-
`),
|
|
5060
|
+
`),ro(e);return}process.stdout.write(`inkly sync complete: ${e.uploaded} uploaded, ${e.updatedManifests.length} manifest(s) updated
|
|
5061
|
+
`),ro(e)}function ro(e){if(e.unresolved.length!==0){process.stderr.write(`inkly sync warning: ${e.unresolved.length} asset(s) have no local bytes and are not on the CDN:
|
|
5056
5062
|
`);for(let t of e.unresolved)process.stderr.write(` - demos/${t.demo} "${t.id}" (${t.sha256})
|
|
5057
|
-
`)}}import{readdir as
|
|
5058
|
-
|
|
5059
|
-
`))
|
|
5060
|
-
|
|
5061
|
-
`)
|
|
5062
|
-
|
|
5063
|
-
|
|
5064
|
-
|
|
5065
|
-
`)
|
|
5066
|
-
|
|
5067
|
-
|
|
5068
|
-
|
|
5069
|
-
|
|
5070
|
-
|
|
5071
|
-
|
|
5063
|
+
`)}}import{cp as np,mkdir as rp,mkdtemp as ip,readdir as ap,readFile as ao,rm as oo,writeFile as op}from"fs/promises";import{tmpdir as sp}from"os";import{basename as lp,join as Qe,resolve as ri}from"path";function Xn(e,t){e||process.stdout.write(t)}function cp(e,t){if(t.demo){let n=e.demos.find(r=>r.slug===t.demo);if(!n)throw new Error(`No such demo: ${t.demo}`);return n}if(t.path){let n=ri(t.cwd,t.path),r=e.demos.find(a=>ri(a.dir)===n);if(r)return r;let i=e.demos.find(a=>a.slug===t.path||a.slug===t.path?.replace(/^demos\//,""));if(i)return i;throw new Error(`No demo found at "${t.path}". Available demos: ${e.demos.map(a=>a.slug).join(", ")||"(none)"}`)}if(e.demos.length===1)return e.demos[0];throw new Error(`This hub has ${e.demos.length} demos \u2014 pass a demo path or --demo <slug>. Available: ${e.demos.map(n=>n.slug).join(", ")}`)}async function dp(e,t=[]){let n=Qe(e,"snapshots");if(!await G(n))return{};let r={};async function i(a){for(let o of await ap(a,{withFileTypes:!0})){let s=Qe(a,o.name);if(o.isDirectory())await i(s);else if(o.isFile()&&/\.(html|css)$/i.test(o.name)){let l=s.slice(e.length+1).split(/[\\/]/).join("/");r[l]=up(await ao(s,"utf8"),t)}}}return await i(n),r}function up(e,t){let n=e;for(let r of t)n=n.split(r.local).join(r.remote);return n}function pp(e){let t=[];for(let n of e.assets)!n.publicUrl||!n.file||t.push({local:`${Je}${n.file}`,remote:n.publicUrl});return t}function hp(e,t,n){let r=e??{version:1,assets:[]},i=new Map(n.map(o=>[o.sha256,o])),a=new Map(t.map(o=>[o.sha256,o]));return{...r,assets:r.assets.map(o=>{let s=i.get(o.sha256);if(!s)return o;let l=a.get(o.sha256);return{...o,contentType:o.contentType??l?.contentType??Kn(`${o.sha256}${s.ext}`,o.kind),publicUrl:s.publicUrl,cdnPath:s.cdnPath}})}}async function mp(e){let t=lp(e),n=/^[a-z0-9][a-z0-9-]*$/.test(t)&&!De.includes(t)?t:"demo",r=await ip(Qe(sp(),"inkly-snapshot-"));await rp(Qe(r,"demos"),{recursive:!0}),await np(e,Qe(r,"demos",n),{recursive:!0});let i=n;try{let o=JSON.parse(await ao(Qe(e,"demo.config.json"),"utf8"));typeof o.title=="string"&&o.title.trim()&&(i=o.title.trim())}catch{}let a={$schema:"https://app.inklyai.dev/inkly.json",name:i,runtime:"0.6.2",theme:"inkly",collections:[{name:"Preview",demos:[n]}]};return await op(Qe(r,"inkly.json"),`${JSON.stringify(a,null,2)}
|
|
5064
|
+
`),{hubRoot:r,slug:n}}async function fp(e){if(!await ye(e.cwd)&&e.path){let r=ri(e.cwd,e.path);if(await G(Qe(r,"demo.config.json"))){let i=await mp(r);try{let a=await yt(i.hubRoot),o=a.demos.find(s=>s.slug===i.slug)??a.demos[0];if(!o)throw new Error(`No demo.config.json found in ${r}.`);return{hub:a,demo:o,ephemeralHubRoot:i.hubRoot}}catch(a){throw await oo(i.hubRoot,{recursive:!0,force:!0}),a}}}let n=await yt(e.cwd);return{hub:n,demo:cp(n,e),ephemeralHubRoot:null}}async function so(e){let t=await Ye();if(!t.token)throw new Error("Not logged in. Run `inkly login` first.");let n=Xe(t.apiBase??process.env.INKLY_API_BASE),{hub:r,demo:i,ephemeralHubRoot:a}=await fp(e);a&&!e.silent&&!e.json&&Xn(e.silent,`Publishing standalone demo "${i.slug}" (no inkly.json required)
|
|
5065
|
+
`);try{return await gp({hub:r,demo:i,options:e,apiBase:n,token:t.token})}finally{a&&await oo(a,{recursive:!0,force:!0})}}async function gp(e){let{hub:t,demo:n,options:r,apiBase:i,token:a}=e,o=await Yn({cwd:t.root,demo:n.slug,dryRun:!0,silent:!0});if(o.unresolved.length>0)throw new Error(`${o.unresolved.length} asset(s) have no local bytes and are not on the CDN, so a hosted preview cannot be published:
|
|
5066
|
+
`+o.unresolved.map(g=>` - ${g.id} (${g.sha256})`).join(`
|
|
5067
|
+
`));let s=[];o.assets.length>0&&(Xn(r.silent,`Uploading ${o.assets.length} asset(s) to the CDN for this snapshot...
|
|
5068
|
+
`),s=(await ni({apiBase:i,token:a,assets:o.assets})).uploads);let l=hp(n.assets,o.assets,s),c=await dp(n.dir,pp(l)),u=Object.keys(c).filter(g=>c[g].includes(Je));if(u.length>0)throw new Error(`${u.length} snapshot file(s) still reference an un-synced capture asset (the ${Je} placeholder was not resolved to a CDN URL), so the hosted snapshot would 404:
|
|
5069
|
+
`+u.map(g=>` - ${g}`).join(`
|
|
5070
|
+
`));let p=await fetch(`${i}/api/previews`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${a}`},body:JSON.stringify({demoSlug:n.slug,title:n.config.title??null,config:n.config,assets:l,hub:t.inkly,snapshots:c})}),h=await p.json().catch(()=>null);if(!p.ok||!h?.id)throw new Error(h?.error??`Snapshot publish failed: HTTP ${p.status}`);let m=h.url??`${i}${h.path??`/p/${h.id}`}`,w={hubRoot:t.root,slug:n.slug,id:h.id,url:m};return r.json?Xn(r.silent,JSON.stringify(w,null,2)+`
|
|
5071
|
+
`):Xn(r.silent,`Snapshot published:
|
|
5072
|
+
${m}
|
|
5073
|
+
`),w}import*as St from"@sentry/node";var bp="https://b3450c6a8fdcd02b8aee3b9f2c8425eb@o4511498910433280.ingest.us.sentry.io/4511498940252160",yp="@inkly-org/cli@0.5.1";function lo(){St.init({dsn:bp,release:process.env.SENTRY_RELEASE??yp,environment:process.env.SENTRY_ENVIRONMENT??"production",enabled:process.env.INKLY_SENTRY_DISABLED!=="1",sendDefaultPii:!1,tracesSampleRate:0,beforeSend(e){return e.server_name=void 0,e}})}async function oe(e,t){St.captureException(t,{tags:{command:e,surface:"cli"}}),await St.flush(2e3)}async function co(){await St.flush(2e3)}import{spawn as hi,execFile as So}from"child_process";import{createHash as ph,randomUUID as hh}from"crypto";import{mkdir as _t,mkdtemp as mh,open as mi,readFile as Ae,readdir as fi,rm as ce,writeFile as _o}from"fs/promises";import{existsSync as ke}from"fs";import{dirname as or,isAbsolute as Co,join as F,resolve as Gt,sep as fh}from"path";import{tmpdir as gh,homedir as gi}from"os";import{fileURLToPath as To}from"url";import{unzipSync as bh,zipSync as yh}from"fflate";import xh from"ws";import kh from"sharp";import wh from"subset-font";var xp=new Set(["area","base","br","col","embed","hr","img","input","link","meta","source","track","wbr"]),kp=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 wp(e){let t="";for(let n=0;n<e.length;n+=1)t+=(e[n]??0).toString(16).padStart(2,"0");return t}async function Qn(e,t=16){let n=new Uint8Array(e.byteLength);n.set(e);let r=await crypto.subtle.digest("SHA-256",n);return wp(new Uint8Array(r)).slice(0,t)}function li(e){switch((e.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 ii(e,t){let n=e.trim();if(!n||n.startsWith("data:")||n.startsWith("blob:")||n.startsWith("assets/")||n.startsWith("#"))return null;try{let r=new URL(n,t);return r.protocol!=="http:"&&r.protocol!=="https:"?null:r.href}catch{return null}}function fo(e,t,n){if(t){let i=atob(n.replace(/\s+/g,"")),a=new Uint8Array(i.length);for(let o=0;o<i.length;o+=1)a[o]=i.charCodeAt(o);return a}let r=decodeURIComponent(n.replace(/\+/g,"%20"));return new TextEncoder().encode(r)}function vp(e){return/\s/.test(e)||e===")"||e==='"'||e==="<"||e===">"}function go(e){return e.replace(/\\(?:\r\n|[\n\r\f])/g,"").replace(/\\([0-9a-fA-F]{1,6}\s?|[\s\S])/g,(t,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 Sp(e){let t=[],n=0;for(;n<e.length;){let r=e.toLowerCase().indexOf("data:",n);if(r<0)break;let i=r>0?e[r-1]:"",a=i==='"'||i==="'"?i:null,o=e.indexOf(",",r);if(o<0)break;let s=e.slice(r+5,o);if(!s||/[\s"'()<>]/.test(s)){n=r+5;continue}let l=o+1,c=!1;for(;l<e.length;){let g=e[l]??"";if(c){c=!1,l+=1;continue}if(g==="\\"){c=!0,l+=1;continue}if(a?g===a:vp(g))break;l+=1}let u=e.slice(r,l),p=go(e.slice(o+1,l)),h=s.split(";"),m=h.shift()||"text/plain",w=h.some(g=>g.toLowerCase()==="base64");t.push({match:u,mime:m,isBase64:w,payload:p,index:r}),n=l}return t}function _p(e){let t=e.trim();if(!t.toLowerCase().startsWith("data:"))return null;let n=t.indexOf(",");if(n<0)return null;let r=t.slice(5,n);if(!r||/[\s"'()<>]/.test(r))return null;let i=r.split(";"),a=i.shift()||"text/plain",o=i.some(s=>s.toLowerCase()==="base64");return{mime:a,isBase64:o,payload:go(t.slice(n+1))}}async function uo(e,t){let n=_p(e);if(!n)return null;let r;try{r=fo(n.mime,n.isBase64,n.payload)}catch{return null}let i=`${await Qn(r)}${li(n.mime)}`;return t.has(i)||t.set(i,{filename:i,bytes:r,contentType:n.mime||"application/octet-stream"}),`assets/${i}`}async function ai(e,t,n){let r=n.get(e);if(r)return r;try{let i=await fetch(e,{cache:"force-cache",referrerPolicy:"strict-origin-when-cross-origin"});if(!i.ok)return null;let a=i.headers.get("content-type")?.split(";")[0]?.trim()||"application/octet-stream",o=new Uint8Array(await i.arrayBuffer());if(o.byteLength===0)return null;let s=`${await Qn(o)}${li(a)}`;t.has(s)||t.set(s,{filename:s,bytes:o,contentType:a});let l=`assets/${s}`;return n.set(e,l),l}catch{return null}}function Cp(e){let t=[],n=0,r=!1;for(let i=0;i<e.length;i+=1){if(e[i]!==",")continue;if(e.slice(n,i).trimStart().toLowerCase().startsWith("data:")&&!r){r=!0;continue}t.push(e.slice(n,i).trim()),n=i+1,r=!1}return t.push(e.slice(n).trim()),t.filter(Boolean).map(i=>{let a=i.match(/\s+(\d+(?:\.\d+)?[wx])$/);return a?.index?{url:i.slice(0,a.index).trim(),descriptor:a[1]??""}:{url:i,descriptor:""}}).filter(i=>i.url.length>0)}async function Tp(e,t,n,r){let i=Array.from(e.querySelectorAll("img[src],source[src],video[poster]"));for(let o of i){let s=o.hasAttribute("poster")?"poster":"src",l=o.getAttribute(s);if(!l)continue;let c=await uo(l,n);if(c){o.setAttribute(s,c);continue}let u=ii(l,t);if(!u)continue;let p=await ai(u,n,r);p&&o.setAttribute(s,p)}let a=Array.from(e.querySelectorAll("img[srcset],source[srcset]"));for(let o of a){let s=o.getAttribute("srcset");if(!s)continue;let l=[];for(let c of Cp(s)){let u=await uo(c.url,n);if(u){l.push(`${u}${c.descriptor?` ${c.descriptor}`:""}`);continue}let p=ii(c.url,t),h=p?await ai(p,n,r):null;l.push(`${h??c.url}${c.descriptor?` ${c.descriptor}`:""}`)}o.setAttribute("srcset",l.join(", "))}}async function Ap(e,t,n,r){let i=[],a=/url\(\s*(["']?)([^"')]+)\1\s*\)/gi,o;for(;o=a.exec(e);){let l=o[2]??"",c=ii(l,t);c&&i.push({raw:l,url:c})}let s=e;for(let l of i){let c=await ai(l.url,n,r);c&&(s=s.split(l.raw).join(c))}return s}async function Pp(e){let t=new Map,n=Sp(e),r=[];for(let o of n){let s;try{s=fo(o.mime,o.isBase64,o.payload)}catch{continue}let l=`${await Qn(s)}${li(o.mime)}`;t.has(l)||t.set(l,{filename:l,bytes:s,contentType:o.mime||"application/octet-stream"}),r.push({match:o.match,replacement:`assets/${l}`})}let i=e,a=new Map;for(let o of r)a.set(o.match,o.replacement);for(let[o,s]of a)i=i.split(o).join(s);return{html:i,assets:t}}function Ip(e){return e.replace(/<script\b[\s\S]*?<\/script>/gi,"")}function Ep(e){return e.replace(/<script\b(?=[^>]*\bid=["']alpha-capture-index["'])[\s\S]*?<\/script>/i,"")}function Rp(e){return e.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 $p(e){let t=1,n=e.createTreeWalker(e.documentElement,NodeFilter.SHOW_ELEMENT,null),r=e.documentElement;do{if(r&&r.nodeType===1){let i=r.tagName.toLowerCase();kp.has(i)&&(r.hasAttribute("data-inkly-id")||(r.setAttribute("data-inkly-id",String(t)),t+=1))}r=n.nextNode()}while(r)}function Dp(e){e.removeAttribute("href"),e.removeAttribute("xlink:href"),e.removeAttributeNS("http://www.w3.org/1999/xlink","href"),e.removeAttribute("target"),e.removeAttribute("rel"),e.removeAttribute("download"),e.removeAttribute("ping"),e.removeAttribute("referrerpolicy")}function Np(e){for(let t of Array.from(e.querySelectorAll("*")))for(let n of Array.from(t.attributes))/^on/i.test(n.name)&&t.removeAttribute(n.name),/^formaction$/i.test(n.name)&&t.removeAttribute(n.name);for(let t of Array.from(e.querySelectorAll("base")))t.remove();for(let t of Array.from(e.querySelectorAll("link[href]")))(t.getAttribute("rel")??"").toLowerCase().split(/\s+/).filter(Boolean).includes("stylesheet")||t.remove();for(let t of Array.from(e.querySelectorAll("meta[http-equiv]")))(t.getAttribute("http-equiv")??"").toLowerCase()==="refresh"&&t.remove();for(let t of Array.from(e.querySelectorAll("a,area")))Dp(t),t.removeAttribute("data-inkly-href");for(let t of Array.from(e.querySelectorAll("form")))t.removeAttribute("action"),t.removeAttribute("method"),t.removeAttribute("target"),t.removeAttribute("data-inkly-action")}function Mp(e){let t=Array.from(e.querySelectorAll("style"));if(t.length===0)return"";let n=[],r=!0;for(let i of t){let a=i.textContent?.trim()??"",o=i.getAttribute("media")?.trim();if(o&&o.toLowerCase()!=="all"?n.push(`@media ${o} {${a}}`):n.push(a),r){let s=e.createElement("link");s.setAttribute("rel","stylesheet"),s.setAttribute("href","assets/document.css"),i.replaceWith(s),r=!1}else i.remove()}return n.join(`
|
|
5074
|
+
|
|
5075
|
+
`)}function Lp(e){let t="",n=0,r="",i=!1,a=0,o=!0,s=()=>{o&&(t+=" ".repeat(n),o=!1)},l=()=>{t=t.replace(/[ \t]+$/,""),t+=`
|
|
5076
|
+
`,o=!0};for(let c of e){if(r){s(),t+=c,i?i=!1:c==="\\"?i=!0:c===r&&(r="");continue}if(i){s(),t+=c,i=!1;continue}if(c==="\\"){s(),t+=c,i=!0;continue}if(c==='"'||c==="'"){s(),r=c,t+=c;continue}if(c==="("&&(a+=1),c===")"&&(a=Math.max(0,a-1)),c==="{"){s(),t=t.replace(/[ \t]+$/,""),t+=` {
|
|
5077
|
+
`,n+=1,o=!0;continue}if(c==="}"){n=Math.max(0,n-1),l(),s(),t+="}",l();continue}if(c===";"&&a===0){s(),t+=";",l();continue}if(c===","&&a===0){s(),t+=",",l();continue}s(),t+=c}return`${t.trim()}
|
|
5078
|
+
`}function po(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function oi(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function ho(e){return e==="id"?0:e==="data-inkly-id"?1:e==="class"?2:e==="href"?3:e==="src"?4:e==="srcset"?5:e==="alt"?6:e==="aria-label"?7:e==="role"?8:e==="type"?9:e==="style"?10:20}function Op(e){return Array.from(e.attributes).sort((n,r)=>ho(n.name)-ho(r.name)||n.name.localeCompare(r.name))}function jp(e,t){let n=e.trim().split(/\s+/).filter(Boolean);if(n.length<=5&&e.length<=100)return`"${oi(e)}"`;let r=" ".repeat(t+2);return`"${n.map(i=>`
|
|
5079
|
+
${r}${oi(i)}`).join("")}
|
|
5080
|
+
${" ".repeat(t)}"`}function mo(e,t){return e.name==="class"?`${e.name}=${jp(e.value,t+e.name.length+2)}`:`${e.name}="${oi(e.value)}"`}function Up(e,t){let n=Op(e),r=e.tagName.toLowerCase();if(n.length===0)return`<${r}>`;let i=`<${r} ${n.map(o=>mo(o,t)).join(" ")}>`;if(i.length<=110&&!n.some(o=>o.name==="class"&&o.value.length>100))return i;let a=[`<${r}`];for(let o of n)a.push(`${" ".repeat(t+2)}${mo(o,t+2)}`);return a.push(`${" ".repeat(t)}>`),a.join(`
|
|
5081
|
+
`)}function zp(e){let t=e.tagName.toLowerCase();if(t==="pre"||t==="code"||t==="textarea"||t==="style")return!0;let n=e.getAttribute("class")??"";if(/(^|\s)whitespace-(?:pre|pre-wrap|pre-line|break-spaces)(\s|$)/.test(n))return!0;let r=e.getAttribute("style")??"";return/(?:^|;)\s*white-space\s*:\s*(?:pre|pre-wrap|pre-line|break-spaces)\b/i.test(r)}function si(e,t){let n=" ".repeat(t*2);if(e.nodeType===Node.TEXT_NODE){let c=(e.nodeValue??"").replace(/\s+/g," ").trim();return c?`${n}${po(c)}`:""}if(e.nodeType===Node.COMMENT_NODE||e.nodeType!==Node.ELEMENT_NODE)return"";let r=e,i=r.tagName.toLowerCase(),a=`${n}${Up(r,n.length)}`;if(xp.has(i))return a;if(i==="template"&&"content"in r){let c=r,u=[];for(let p of Array.from(c.content.childNodes)){let h=si(p,t+1);h&&u.push(h)}return u.length===0?`${a}</${i}>`:`${a}
|
|
5072
5082
|
${u.join(`
|
|
5073
5083
|
`)}
|
|
5074
|
-
${n}</${i}>`}if(
|
|
5075
|
-
`)&&a.length+
|
|
5084
|
+
${n}</${i}>`}if(zp(r))return`${n}${r.outerHTML}`;let o=Array.from(r.childNodes).filter(c=>c.nodeType!==Node.COMMENT_NODE&&!(c.nodeType===Node.TEXT_NODE&&(c.nodeValue??"").trim().length===0));if(o.length>0&&o.every(c=>c.nodeType===Node.TEXT_NODE)){let c=o.map(u=>u.nodeValue??"").join("").replace(/\s+/g," ").trim();return c?`${a}${po(c)}</${i}>`:`${a}</${i}>`}let s=[];for(let c of Array.from(r.childNodes)){let u=si(c,t+1);u&&s.push(u)}if(s.length===0)return`${a}</${i}>`;let l=s[0];return s.length===1&&l&&l.trim()&&!l.includes(`
|
|
5085
|
+
`)&&a.length+l.trim().length<120?`${a}${l.trim()}</${i}>`:`${a}
|
|
5076
5086
|
${s.join(`
|
|
5077
5087
|
`)}
|
|
5078
|
-
${n}</${i}>`}function
|
|
5079
|
-
${
|
|
5080
|
-
`}var
|
|
5088
|
+
${n}</${i}>`}function Fp(e){let t=e.documentElement;return`<!doctype html>
|
|
5089
|
+
${si(t,0)}
|
|
5090
|
+
`}var Hp=.8,Bp=1024;function Wp(e){let t=(e.toLowerCase().split(";")[0]??"").trim();return t==="image/png"||t==="image/jpeg"||t==="image/jpg"}async function Vp(e,t){if(typeof createImageBitmap!="function"||typeof OffscreenCanvas!="function")return null;try{let n=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength),r=await createImageBitmap(new Blob([n],{type:t}));try{let i=new OffscreenCanvas(r.width,r.height),a=i.getContext("2d");if(!a)return null;a.drawImage(r,0,0);let o=await i.convertToBlob({type:"image/webp",quality:Hp});return o.type!=="image/webp"?null:new Uint8Array(await o.arrayBuffer())}finally{r.close()}}catch{return null}}async function Jp(e,t,n){let r=new Map,i=new Map;for(let s of e.values()){if(!Wp(s.contentType)||s.bytes.byteLength<Bp){i.set(s.filename,s);continue}let l=await Vp(s.bytes,s.contentType);if(!l||l.byteLength>=s.bytes.byteLength){i.set(s.filename,s);continue}let c=`${await Qn(l)}.webp`;r.set(s.filename,c),i.has(c)||i.set(c,{filename:c,bytes:l,contentType:"image/webp"})}if(r.size===0)return{assets:[...e.values()],html:t,css:n};let a=t,o=n;for(let[s,l]of r)a=a.split(`assets/${s}`).join(`assets/${l}`),o=o.split(s).join(l);return{assets:[...i.values()],html:a,css:o}}async function bo(e,t,n={}){let r=Ip(e);r=Ep(r),r=Rp(r);let i=await Pp(r);r=i.html;let a=qp(r);$p(a),Np(a);let o=new Map;await Tp(a,t,i.assets,o);let s=(await Ap(Mp(a),t,i.assets,o)).replace(/url\((["']?)assets\//g,"url($1"),l=an(Fp(a)),c=Lp(s);if(n.compressImages){let u=await Jp(i.assets,l,c);return{html:u.html,css:u.css,assets:u.assets}}return{html:l,css:c,assets:[...i.assets.values()]}}function qp(e){let t=globalThis.DOMParser;if(!t)throw new Error("DOMParser is not available in this context. Run compactSnapshot in an offscreen document.");return new t().parseFromString(e,"text/html")}import{zipSync as Gp}from"fflate";var Zp=/^(?:https?:)?\/\//i,Kp=/^(?:#|data:|blob:|javascript:|mailto:|tel:|about:|chrome:|chrome-extension:)/i;function Yp(e){return e.normalize("NFKD").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+/,"").slice(0,60).replace(/-+$/,"")||"demo"}function Xp(e){let t="abcdefghijklmnopqrstuvwxyz0123456789",n=new Uint8Array(e);crypto.getRandomValues(n);let r="";for(let i=0;i<e;i+=1)r+=t[(n[i]??0)%t.length];return r}function Qp(e){return`${Yp(e)}-${Xp(6)}`}function eh(e,t){return`# ${t}
|
|
5081
5091
|
|
|
5082
5092
|
This is a self-contained Inkly HTML capture. Everything it needs is in
|
|
5083
5093
|
this folder \u2014 no hub and no upload required to preview it.
|
|
@@ -5097,12 +5107,14 @@ It serves at http://localhost:3000.
|
|
|
5097
5107
|
## Host it in a hub
|
|
5098
5108
|
|
|
5099
5109
|
To keep all your demos together as a collection and sync them with the
|
|
5100
|
-
Inkly platform, scaffold a hub and
|
|
5110
|
+
Inkly platform, scaffold a hub and import this demo into it. \`inkly add
|
|
5111
|
+
--from\` copies the folder into \`demos/\` and registers it in a collection
|
|
5112
|
+
(plain \`cp\` would leave it out of the hub index):
|
|
5101
5113
|
|
|
5102
5114
|
\`\`\`bash
|
|
5103
5115
|
inkly init my-hub
|
|
5104
|
-
cp -r ${e} my-hub/demos/
|
|
5105
5116
|
cd my-hub
|
|
5117
|
+
inkly add ${e} --from ../${e} --collection Main
|
|
5106
5118
|
inkly login # connect your Inkly account
|
|
5107
5119
|
inkly sync # upload assets to the CDN
|
|
5108
5120
|
\`\`\`
|
|
@@ -5123,12 +5135,12 @@ inkly snapshot --demo ${e}
|
|
|
5123
5135
|
- \`${e}/capture-metadata.json\` - HTML export diagnostics.
|
|
5124
5136
|
- \`${e}/public/<file>\` - captured HTML asset bytes.
|
|
5125
5137
|
- \`${e}/snapshots/snap-NNN/index.html\` and \`document.css\` - replayable snapshots.
|
|
5126
|
-
`}function
|
|
5127
|
-
`),"assets.json":
|
|
5128
|
-
`),"capture-metadata.json":
|
|
5129
|
-
`),snapshots:o,public:w}};return{bytes:
|
|
5130
|
-
`);if(
|
|
5131
|
-
`)})}async function
|
|
5138
|
+
`}function th(e){return e.trim().replace(/^['"]|['"]$/g,"")}function er(e,t){let n=th(t.url);!n||Kp.test(n)||!Zp.test(n)||e.set(`${t.stepId}\0${t.file}\0${t.kind}\0${n}`,{...t,url:n})}function nh(e){return e.split(",").map(t=>t.trim().split(/\s+/)[0]??"").filter(Boolean)}function rh(e,t){return e?.alphaId?t.includes(`data-inkly-id="${e.alphaId}"`)||t.includes(`data-inkly-id='${e.alphaId}'`)?e:{...e,alphaId:void 0}:e}function ih(e){let t=new Map,n=/\b(?:src|poster|data|action|formaction)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'<>`]+))/gi,r;for(;(r=n.exec(e.html))!==null;)er(t,{stepId:e.stepId,file:e.htmlPath,kind:"html-attribute",url:r[1]??r[2]??r[3]??""});let i=/<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,a;for(;(a=i.exec(e.html))!==null;)er(t,{stepId:e.stepId,file:e.htmlPath,kind:"html-attribute",url:a[1]??a[2]??a[3]??""});let o=/\b(?:srcset|imagesrcset)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'<>`]+))/gi,s;for(;(s=o.exec(e.html))!==null;){let u=s[1]??s[2]??s[3]??"";for(let p of nh(u))er(t,{stepId:e.stepId,file:e.htmlPath,kind:"html-srcset",url:p})}let l=/url\(\s*(?:"([^"]*)"|'([^']*)'|([^)"'\s]+))\s*\)/gi,c;for(;(c=l.exec(e.css))!==null;)er(t,{stepId:e.stepId,file:e.htmlPath.replace(/\/index\.html$/,"/document.css"),kind:"css-url",url:c[1]??c[2]??c[3]??""});return[...t.values()]}async function yo(e){let{name:t,steps:n,assets:r}=e;if(n.length===0)throw new Error("No HTML steps captured.");let i=Qp(t),a=new Map;for(let k of r)a.set(k.filename,`${Je}${k.filename}`);let o={},s=[],l=[],c=new TextEncoder;for(let k=0;k<n.length;k+=1){let C=n[k];if(!C)continue;let I=`s${k+1}`,$=Vi(k+1),x=`snapshots/${$}/index.html`,A=_r(C.cssText??"",a),P=qi(Gi(an(_r(C.htmlText,a)),A.length>0),C.scroll);o[$]={"index.html":c.encode(P),"document.css":c.encode(A)},l.push(...ih({stepId:I,htmlPath:x,html:P,css:A})),s.push(Ji({stepId:I,htmlPath:x,naturalWidth:C.viewport.width,naturalHeight:C.viewport.height,scroll:C.scroll,sourceUrl:C.url||void 0,click:rh(C.click,P)}))}let u=r.map(k=>({id:k.filename,sha256:k.sha256,kind:An(k.contentType),contentType:k.contentType,size:k.bytes.byteLength,file:k.filename})),p=En({id:ae(),version:1,title:t,steps:s}),h=Mt.parse({version:1,assets:u,screens:[]}),m={version:1,kind:"html-capture",generatedAt:e.generatedAt??new Date().toISOString(),stepCount:n.length,assetCount:r.length,unresolvedExternalReferences:l},w={};for(let k of r)w[k.filename]=k.bytes;let g={"README.md":c.encode(eh(i,t)),[i]:{"demo.config.json":c.encode(`${JSON.stringify(p,null,2)}
|
|
5139
|
+
`),"assets.json":c.encode(`${JSON.stringify(h,null,2)}
|
|
5140
|
+
`),"capture-metadata.json":c.encode(`${JSON.stringify(m,null,2)}
|
|
5141
|
+
`),snapshots:o,public:w}};return{bytes:Gp(g,{level:6}),filename:`${i}.zip`,slug:i}}import{JSDOM as vh}from"jsdom";import{Stagehand as Yy}from"@browserbasehq/stagehand";import{NodeHtmlMarkdown as Qy}from"node-html-markdown";var ah=["button","link","textbox","searchbox","checkbox","radio","combobox","listbox","option","switch","slider","spinbutton","tab","menuitem","menuitemcheckbox","menuitemradio","treeitem"],oh=["navigation","main","banner","contentinfo","complementary","search","form","dialog","alertdialog","menu","menubar","tablist","region"],un="^\\s*(?:\\[[\\w-]+]\\s*)?",Fy=new RegExp(`${un}(?:${ah.join("|")})\\b`,"i"),Hy=new RegExp(`${un}(?:${oh.join("|")})\\b`,"i"),By=new RegExp(`${un}heading\\b`,"i"),Wy=new RegExp(`${un}StaticText\\b`,"i");var Vy=new RegExp(`${un}[\\w-]+(?:,[^:]*)?:\\s`,"i");import sh from"net";import ax from"readline";import{rm as sx}from"fs/promises";import{join as ci}from"path";import{homedir as lh}from"os";function ch(){return ci(process.env.INKLY_CAPTURE_AGENT_HOME||ci(lh(),".inkly"),"capture-agent","sessions")}function di(e){if(!/^[a-zA-Z0-9._:-]+$/.test(e))throw new Error(`invalid session id: ${e}`);return ci(ch(),`${e}.nav.sock`)}async function Y(e,t,n,r={}){let i=r.connectTimeoutMs??8e3,a=r.requestTimeoutMs??6e4,s={id:`${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`,type:"command",command:t,params:n},l=await dh(e,i);return new Promise((c,u)=>{let p="",h=!1,m=g=>{h||(h=!0,clearTimeout(w),g())},w=setTimeout(()=>{m(()=>{l.destroy(),u(new Error(`nav request "${t}" timed out`))})},a);l.on("data",g=>{p+=g.toString();let k=p.indexOf(`
|
|
5142
|
+
`);if(k===-1)return;let C;try{C=JSON.parse(p.slice(0,k))}catch(I){m(()=>{l.destroy(),u(I instanceof Error?I:new Error(String(I)))});return}if(C.type==="error"){m(()=>{l.end(),u(new Error(C.error))});return}m(()=>{l.end(),c(C.data)})}),l.on("error",g=>{m(()=>u(g))}),l.on("close",()=>{m(()=>u(new Error("nav listener closed without a response")))}),l.write(`${JSON.stringify(s)}
|
|
5143
|
+
`)})}async function dh(e,t){let n=Date.now(),r=null;for(;Date.now()-n<t;)try{return await uh(e)}catch(i){r=i instanceof Error?i:new Error(String(i)),await new Promise(a=>setTimeout(a,150))}throw new Error(`could not reach the capture listener nav socket at ${e}`+(r?` (${r.message})`:"")+". Is the session started and is its listener ready?")}function uh(e){return new Promise((t,n)=>{let r=sh.createConnection(e),i=a=>{r.destroy(),n(a)};r.once("error",i),r.once("connect",()=>{r.off("error",i),t(r)})})}var xo=!1;function Sh(){if(xo)return;let{window:e}=new vh("<!doctype html><html></html>"),t=globalThis;t.DOMParser??=e.DOMParser,t.Node??=e.Node,t.NodeFilter??=e.NodeFilter,t.Element??=e.Element,t.HTMLImageElement??=e.HTMLImageElement,xo=!0}var Ao=`Options:
|
|
5132
5144
|
--url <url> URL to open and arm for recording.
|
|
5133
5145
|
--name <name> Demo name written into the exported ZIP.
|
|
5134
5146
|
--session <id> Session id printed by start.
|
|
@@ -5148,7 +5160,7 @@ inkly snapshot --demo ${e}
|
|
|
5148
5160
|
done once in this profile survives, so later captures of the same site need
|
|
5149
5161
|
no re-login. Implies --keep-profile. Run --headed the first time so the user
|
|
5150
5162
|
can sign in; reuse can run headless.
|
|
5151
|
-
--no-unpack On stop, write only the ZIP.`,
|
|
5163
|
+
--no-unpack On stop, write only the ZIP.`,mn=`inkly capture - capture an image/video walkthrough for an external browser agent
|
|
5152
5164
|
|
|
5153
5165
|
Usage:
|
|
5154
5166
|
inkly capture start --url <url> --name <name>
|
|
@@ -5158,8 +5170,9 @@ Usage:
|
|
|
5158
5170
|
inkly capture undo --session <id>
|
|
5159
5171
|
inkly capture nav <verb> --session <id> (snapshot|click|fill|type|press|select|upload|get|is|wait|back|forward|reload|refs|mouse)
|
|
5160
5172
|
inkly capture profiles
|
|
5173
|
+
inkly capture ask-user-to-log-in --profile <name> [--url <login-url>]
|
|
5161
5174
|
|
|
5162
|
-
${
|
|
5175
|
+
${Ao}
|
|
5163
5176
|
--video, --record-video Record motion segments. Enabled by default; use --no-video to disable.
|
|
5164
5177
|
--zoom Apply click zoom/pan to screenshot steps. Enabled by default; use --no-zoom to disable.
|
|
5165
5178
|
--compress-images Re-encode captured PNG/JPEG screenshots to WebP (smaller, near-lossless).
|
|
@@ -5168,7 +5181,7 @@ ${yo}
|
|
|
5168
5181
|
Output:
|
|
5169
5182
|
Every subcommand prints JSON. This command does not accept prompts and does not plan or drive the page.
|
|
5170
5183
|
For self-contained HTML snapshot capture, use \`inkly capture-html\`.
|
|
5171
|
-
`,
|
|
5184
|
+
`,fn=`inkly capture-html - capture a self-contained HTML walkthrough for an external browser agent
|
|
5172
5185
|
|
|
5173
5186
|
Usage:
|
|
5174
5187
|
inkly capture-html start --url <url> --name <name>
|
|
@@ -5178,24 +5191,25 @@ Usage:
|
|
|
5178
5191
|
inkly capture-html undo --session <id>
|
|
5179
5192
|
inkly capture-html nav <verb> --session <id> (snapshot|click|fill|type|press|select|upload|get|is|wait|back|forward|reload|refs|mouse)
|
|
5180
5193
|
inkly capture-html profiles
|
|
5194
|
+
inkly capture-html ask-user-to-log-in --profile <name> [--url <login-url>]
|
|
5181
5195
|
|
|
5182
|
-
${
|
|
5196
|
+
${Ao}
|
|
5183
5197
|
--block-videos Replace <video> with its poster frame instead of inlining the video.
|
|
5184
5198
|
|
|
5185
5199
|
Output:
|
|
5186
5200
|
Every subcommand prints JSON. This command does not accept prompts and does not plan or drive the page.
|
|
5187
|
-
`,
|
|
5188
|
-
`)}function
|
|
5201
|
+
`,_h=or(To(import.meta.url)),Ch=["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/opt/google/chrome/chrome"],Po=1440,Io=900,Th=12e4;var Ah=720,Ph=60,Nx=Math.round(Ah/Ph);function Ct(e){return new Promise(t=>setTimeout(t,e))}function X(e){process.stdout.write(`${JSON.stringify(e,null,2)}
|
|
5202
|
+
`)}function se(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))return;let n=e[t];return typeof n=="string"?n:""}function qt(e,t,n){let r=e[t];return typeof r=="number"?r:typeof r=="string"&&r.trim()?Number(r):n}function Jt(e,t,n){for(let r of t)if(Object.prototype.hasOwnProperty.call(e,r))return e[r]!==!1;return n}function Eo(e){if(!e)return null;let t=/^\s*(\d+)\s*[x,]\s*(\d+)\s*$/i.exec(e);if(!t)throw new Error("--window-size must look like 1440x900");return{width:Number(t[1]),height:Number(t[2])}}function et(e,t,n){let r=se(e,t);if(!r)throw new Error(`missing --${t} <value>
|
|
5189
5203
|
|
|
5190
|
-
${n}`);return r}function
|
|
5204
|
+
${n}`);return r}function Ro(e){return se(e,"connect-to-browser")??process.env.INKLY_CAPTURE_BROWSER_URL}function Ih(e){if(Object.prototype.hasOwnProperty.call(e,"prompt"))throw new Error("inkly capture does not accept --prompt. The external agent owns planning.")}function sr(e,t){return Co(t)?t:Gt(e,t)}function $o(){return F(gi(),".inkly","capture-agent","profiles")}function Do(e,t){if(t.includes("/")||Co(t))return sr(e,t);let n=t.toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64);return F($o(),n||"default")}function ko(e,t){let n=Gt(e);for(;;){let r=F(n,t);if(ke(r))return r;let i=or(n);if(i===n)return null;n=i}}async function wo(e){let t=[e];for(;t.length>0;){let n=t.pop();if(!n)continue;let r=await fi(n,{withFileTypes:!0}).catch(()=>[]);for(let i of r){let a=F(n,i.name);if(i.isDirectory()){t.push(a);continue}if(i.name==="Google Chrome for Testing"&&a.includes("Google Chrome for Testing.app/Contents/MacOS"))return a}}return null}async function No(e,t){if(t){let s=sr(e,t);if(ke(s))return s;throw new Error(`Chrome binary does not exist: ${s}`)}let n=process.env.CHROME_PATH;if(n&&ke(n))return n;let r=Ch.find(s=>ke(s));if(r)return r;let i=ko(e,"chrome");if(i){let s=await wo(i);if(s)return s}let a=ko(_h,"chrome");if(a&&a!==i){let s=await wo(a);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(ke(s))return s;throw new Error("No Chrome binary found. Pass --browser /path/to/chrome.")}var nr=class{constructor(t){this.nextId=1;this.pending=new Map;this.listeners=new Map;this.ws=new xh(t,{perMessageDeflate:!1,maxPayload:512*1024*1024}),this.ready=new Promise((n,r)=>{this.ws.once("open",()=>n()),this.ws.once("error",i=>r(i))}),this.ws.on("message",n=>{let r=JSON.parse(n.toString());if(typeof r.id=="number"&&this.pending.has(r.id)){let a=this.pending.get(r.id);if(this.pending.delete(r.id),!a)return;r.error?a.reject(new Error(`${r.error.message??"CDP error"}: ${JSON.stringify(r.error.data??"")}`)):a.resolve(r.result??{});return}if(!r.method)return;let i=this.listeners.get(r.method);if(i)for(let a of i)a(r.params,r.sessionId)})}async send(t,n={},r){await this.ready;let i=this.nextId;this.nextId+=1;let a={id:i,method:t,params:n};return r&&(a.sessionId=r),new Promise((o,s)=>{this.pending.set(i,{resolve:o,reject:s}),this.ws.send(JSON.stringify(a),l=>{l&&(this.pending.delete(i),s(l))})})}on(t,n){let r=this.listeners.get(t)??new Set;return r.add(n),this.listeners.set(t,r),()=>r.delete(n)}close(){try{this.ws.close()}catch{}}};async function Mo(e,t,n,r=3e4){let i=await e.send("Runtime.evaluate",{expression:n,awaitPromise:!0,returnByValue:!0,timeout:r,userGesture:!0},t);if(i.exceptionDetails)throw new Error(`Runtime.evaluate failed: ${JSON.stringify(i.exceptionDetails)}`);return i.result?.value}async function Eh(e,t){let r=(await e.send("Target.attachToTarget",{targetId:t,flatten:!0})).sessionId;if(typeof r!="string")throw new Error("Target.attachToTarget returned no sessionId");return r}async function Rh(e){let t=e.userDataDir?(await _t(e.userDataDir,{recursive:!0}),e.userDataDir):await mh(F(gh(),"inkly-capture-agent-")),n=F(t,"chrome.log"),r=await mi(n,"a"),i=["--remote-debugging-port=0",`--user-data-dir=${t}`,`--window-size=${e.width},${e.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"];e.headless&&i.unshift("--headless=new");for(let p of["DevToolsActivePort","SingletonLock","SingletonCookie","SingletonSocket"])await ce(F(t,p),{force:!0}).catch(()=>{});let a=hi(e.browser,i,{detached:!0,stdio:["ignore",r.fd,r.fd]});a.unref(),await r.close();let o=F(t,"DevToolsActivePort"),s=Date.now(),l;a.once("exit",p=>{l=p});let c=!e.userDataDir,u=async p=>{let h=await Ae(n,"utf8").then(m=>m.split(`
|
|
5191
5205
|
`).filter(Boolean).slice(-10).join(`
|
|
5192
|
-
`)).catch(()=>"");throw a.pid&&await
|
|
5193
|
-
${h||"(empty \u2014 Chrome wrote nothing)"}`)};for(;Date.now()-s<2e4;){if(
|
|
5206
|
+
`)).catch(()=>"");throw a.pid&&await hn(a.pid).catch(()=>{}),await ir(t).catch(()=>{}),c&&await ce(t,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}).catch(()=>{}),new Error(`${p} Chrome log (${n}):
|
|
5207
|
+
${h||"(empty \u2014 Chrome wrote nothing)"}`)};for(;Date.now()-s<2e4;){if(l!==void 0)return u("Chrome exited before DevTools was ready.");let p=await Ae(o,"utf8").catch(()=>null);if(p){let h=p.trim().split(/\r?\n/),m=h[0],w=h[1];if(m&&w)return{pid:a.pid??null,profileDir:t,wsUrl:`ws://127.0.0.1:${m}${w}`,debuggingUrl:`http://127.0.0.1:${m}`,logPath:n}}await Ct(100)}return u("Timed out waiting for Chrome DevTools.")}async function $h(e){if(e.startsWith("ws://")||e.startsWith("wss://")){let i=new URL(e);return{wsUrl:e,debuggingUrl:`${i.protocol==="wss:"?"https":"http"}://${i.host}`}}let t=new URL(e),n=await fetch(new URL("/json/version",t));if(!n.ok)throw new Error(`could not read Chrome DevTools metadata from ${t.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:`${t.protocol}//${t.host}`}}async function Dh(e,t,n,r,i){let o=(await e.send("Target.createTarget",{url:"about:blank"})).targetId;if(typeof o!="string")throw new Error("Target.createTarget returned no targetId");let s=await Eh(e,o);await e.send("Page.enable",{},s),await e.send("Runtime.enable",{},s),await Mh(e,s,o,n,r);let l=!1,c=e.on("Page.loadEventFired",(p,h)=>{h===s&&(l=!0)});await e.send("Page.navigate",{url:t},s);let u=Date.now();for(;!l&&Date.now()-u<i;)await Ct(100);return c(),await Ct(1e3),{targetId:o,sessionId:s}}async function Nh(e,t){let n=await Mo(e,t,`JSON.stringify({
|
|
5194
5208
|
innerWidth: window.innerWidth,
|
|
5195
5209
|
innerHeight: window.innerHeight,
|
|
5196
5210
|
outerWidth: window.outerWidth,
|
|
5197
5211
|
outerHeight: window.outerHeight
|
|
5198
|
-
})`,5e3),r=JSON.parse(String(n)),i={innerWidth:Number(r.innerWidth),innerHeight:Number(r.innerHeight),outerWidth:Number(r.outerWidth),outerHeight:Number(r.outerHeight)};if(!Number.isFinite(i.innerWidth)||!Number.isFinite(i.innerHeight)||!Number.isFinite(i.outerWidth)||!Number.isFinite(i.outerHeight))throw new Error(`could not measure Chrome viewport: ${JSON.stringify(r)}`);return i}async function
|
|
5212
|
+
})`,5e3),r=JSON.parse(String(n)),i={innerWidth:Number(r.innerWidth),innerHeight:Number(r.innerHeight),outerWidth:Number(r.outerWidth),outerHeight:Number(r.outerHeight)};if(!Number.isFinite(i.innerWidth)||!Number.isFinite(i.innerHeight)||!Number.isFinite(i.outerWidth)||!Number.isFinite(i.outerHeight))throw new Error(`could not measure Chrome viewport: ${JSON.stringify(r)}`);return i}async function Mh(e,t,n,r,i){try{let o=(await e.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 l=await Nh(e,t),c=Math.max(0,l.outerWidth-l.innerWidth),u=Math.max(0,l.outerHeight-l.innerHeight),p=r+c,h=i+u;if(Math.abs(l.innerWidth-r)<=1&&Math.abs(l.innerHeight-i)<=1)return;await e.send("Browser.setWindowBounds",{windowId:o,bounds:{windowState:"normal",width:p,height:h}}),await Ct(250)}}catch{}await e.send("Emulation.setDeviceMetricsOverride",{width:r,height:i,deviceScaleFactor:1,mobile:!1},t).catch(()=>{}),await Ct(100)}function Lh(e){return e.toLowerCase().replace(/['"]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)||"captured-demo"}function Oh(e){return`${Lh(e)}-${Math.random().toString(36).slice(2,8)}`}function bi(e){return ph("sha256").update(e).digest("hex")}function jh(e,t){return`# ${t}
|
|
5199
5213
|
|
|
5200
5214
|
This is a self-contained Inkly demo. Everything it needs is in this
|
|
5201
5215
|
folder \u2014 no hub and no upload required to preview it.
|
|
@@ -5215,12 +5229,14 @@ It serves at http://localhost:3000.
|
|
|
5215
5229
|
## Host it in a hub
|
|
5216
5230
|
|
|
5217
5231
|
To keep all your demos together as a collection and sync them with the
|
|
5218
|
-
Inkly platform, scaffold a hub and
|
|
5232
|
+
Inkly platform, scaffold a hub and import this demo into it. \`inkly add
|
|
5233
|
+
--from\` copies the folder into \`demos/\` and registers it in a collection
|
|
5234
|
+
(plain \`cp\` would leave it out of the hub index):
|
|
5219
5235
|
|
|
5220
5236
|
\`\`\`bash
|
|
5221
5237
|
inkly init my-hub
|
|
5222
|
-
cp -r ${e} my-hub/demos/
|
|
5223
5238
|
cd my-hub
|
|
5239
|
+
inkly add ${e} --from ../${e} --collection Main
|
|
5224
5240
|
inkly login # connect your Inkly account
|
|
5225
5241
|
inkly sync # upload assets to the CDN
|
|
5226
5242
|
\`\`\`
|
|
@@ -5239,9 +5255,9 @@ inkly snapshot --demo ${e}
|
|
|
5239
5255
|
- \`${e}/demo.config.json\` \u2014 the demo definition.
|
|
5240
5256
|
- \`${e}/assets.json\` \u2014 maps each \`asset:<id>\` to a file in \`public/\`.
|
|
5241
5257
|
- \`${e}/public/<file>\` \u2014 captured image/video bytes.
|
|
5242
|
-
`}function
|
|
5243
|
-
`),"assets.json":
|
|
5244
|
-
`),public:
|
|
5258
|
+
`}function Uh(e){switch(e.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 zh(e,t,n,r,i){let a=new TextDecoder,o=new TextEncoder,s=new Map,l=0,c=0,u=0,p=" ";if(i.subsetFonts){let h=new Set;for(let m of Object.values(r)){let w=m["index.html"];if(!w)continue;let g=a.decode(w).replace(/<style[\s\S]*?<\/style>/gi," ").replace(/<[^>]+>/g," ");for(let k of g)h.add(k)}for(let m of" 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,:;!?@#$%&*()-_=+[]{}/\\|<>'\"`~\u2019\u201C\u201D\u2014\u2013\u2026\u2022\u2192")h.add(m);p=Array.from(h).join("")}for(let h of t){let m=h.publicUrl;if(!m)continue;let w=m.split("/").pop();if(!w)continue;let g=n[w];if(!g)continue;let k=null,C="",I="",$=(h.contentType??"").toLowerCase();try{if(i.compressImages&&h.kind==="image"&&/^image\/(png|jpe?g)$/.test($)){let D=await kh(Buffer.from(g)).webp({quality:80}).toBuffer();D.length<g.byteLength&&(k=D,C="webp",I="image/webp")}else if(i.subsetFonts&&h.kind==="font"){let D=await wh(Buffer.from(g),p,{targetFormat:"woff2"});D.length<g.byteLength&&(k=D,C="woff2",I="font/woff2")}}catch{k=null}if(!k)continue;let x=new Uint8Array(k),A=bi(x),P=`${A.slice(0,16)}.${C}`,H=`/${e}/${P}`;u+=g.byteLength-x.byteLength,h.kind==="image"?l+=1:c+=1,delete n[w],n[P]=x,h.id===w&&(h.id=P),s.set(m,H),h.sha256=A,h.size=x.byteLength,h.contentType=I,h.publicUrl=H}if(s.size)for(let h of Object.values(r)){let m=h;for(let w of Object.keys(m)){let g=a.decode(m[w]);for(let[k,C]of s)g=g.split(k).join(C);m[w]=o.encode(g)}}return{images:l,fonts:c,savedBytes:u}}async function Fh(e){let{name:t,screens:n,autoApplyZoom:r=!0,compressImages:i=!1,subsetFonts:a=!1}=e;if(n.length===0)throw new Error("No screens captured.");let o=Oh(t),s=[],l=[],c={},u={},p=[],h=[],m=new TextEncoder,w=0;async function g($,x,A,P,H){let D=bi($),q=H??`${D}.${Uh(x)}`;c[q]=$,w+=1;let de=A==="other"?q:`cap-${String(w).padStart(3,"0")}`;return s.push({id:de,sha256:D,kind:A==="other"?An(x):A,contentType:x,size:$.byteLength,viewport:P?{w:P.width,h:P.height}:void 0,file:q}),de}for(let[$,x]of n.entries()){let A=`s${$+1}`,P=null;if(x.kind!=="html"){if(x.kind==="video"&&x.videoPath){let H=new Uint8Array(await Ae(x.videoPath));P=await g(H,"video/webm","video",x.viewport);let D;if(x.posterPngPath){let q=new Uint8Array(await Ae(x.posterPngPath));D=await g(q,"image/png","image",x.viewport)}p.push(Sr({stepId:A,kind:"video",assetId:P,posterAssetId:D,naturalWidth:x.naturalSize.width,naturalHeight:x.naturalSize.height,sourceUrl:x.sourceUrl||void 0,title:x.title||void 0,click:x.click,autoApplyZoom:r,isLast:$===n.length-1})),h.push(x.click?.label||x.title||`Step ${$+1}`)}else{if(!x.pngPath)continue;let H=new Uint8Array(await Ae(x.pngPath));P=await g(H,"image/png","image",x.viewport),p.push(Sr({stepId:A,kind:"image",assetId:P,naturalWidth:x.naturalSize.width,naturalHeight:x.naturalSize.height,sourceUrl:x.sourceUrl||void 0,title:x.title||void 0,click:x.click,autoApplyZoom:r,isLast:$===n.length-1})),h.push(x.click?.label||x.title||`Step ${$+1}`)}l.push({index:$,id:Wi($),assetId:P,sourceUrl:x.sourceUrl,capturedAt:x.capturedAt,naturalWidth:x.naturalSize.width,naturalHeight:x.naturalSize.height,precedingClick:x.click})}}if(p.length===0)throw new Error("No usable screens captured.");(i||a)&&await zh(o,s,c,u,{compressImages:i,subsetFonts:a});let k=En({id:ae(),version:1,title:t,steps:p}),C=Mt.parse({version:1,assets:s,screens:l}),I={"README.md":m.encode(jh(o,t)),[o]:{"demo.config.json":m.encode(`${JSON.stringify(k,null,2)}
|
|
5259
|
+
`),"assets.json":m.encode(`${JSON.stringify(C,null,2)}
|
|
5260
|
+
`),public:c,snapshots:u}};return{bytes:yh(I,{level:6}),filename:`${o}.zip`,slug:o,stepCount:n.length,labels:h}}function Hh(e){return e?{x:e.x,y:e.y,alphaId:e.alphaId??void 0,label:e.label}:null}async function Bh(e){let{name:t,screens:n}=e,r=n.filter(l=>l.kind==="html"&&l.htmlPath);if(r.length===0)throw new Error("No HTML screens captured.");let i=r.map((l,c)=>l.click?.label||l.title||`Step ${c+1}`);Sh();let a=[],o=new Map;for(let l of r){let c=await Ae(l.htmlPath,"utf8"),u=await bo(c,l.sourceUrl||"");for(let p of u.assets)o.has(p.filename)||o.set(p.filename,{filename:p.filename,sha256:bi(p.bytes),contentType:p.contentType,bytes:p.bytes});a.push({htmlText:u.html,cssText:u.css,viewport:{width:l.naturalSize.width,height:l.naturalSize.height},scroll:l.scroll??{x:0,y:0,maxX:0,maxY:0},url:l.sourceUrl||"",click:Hh(l.click)})}return{...await yo({name:t,steps:a,assets:[...o.values()]}),stepCount:r.length,labels:i}}var vo=`(() => {
|
|
5245
5261
|
if (window.__inklyCliRecorderInstalled) return;
|
|
5246
5262
|
window.__inklyCliRecorderInstalled = true;
|
|
5247
5263
|
window.__inklyCliLastClick = null;
|
|
@@ -5425,7 +5441,7 @@ function selectorFor(el) {
|
|
|
5425
5441
|
window.addEventListener("scroll", onMotionScroll, true);
|
|
5426
5442
|
window.addEventListener("wheel", onMotionScroll, true);
|
|
5427
5443
|
window.addEventListener("touchmove", onMotionScroll, true);
|
|
5428
|
-
})();`;async function
|
|
5444
|
+
})();`;async function Wh(e,t,n=!1){n&&(await e.send("Runtime.addBinding",{name:"__inklyCliCaptureEvent"},t).catch(()=>{}),await e.send("Runtime.addBinding",{name:"__inklyCliCaptureClick"},t).catch(()=>{})),await e.send("Page.addScriptToEvaluateOnNewDocument",{source:vo},t),await Mo(e,t,vo,5e3).catch(()=>{})}var Vh="__inklySingleFileFetch",Mx=`(() => {
|
|
5429
5445
|
if (globalThis.__inklyFetchInstalled) return;
|
|
5430
5446
|
globalThis.__inklyFetchInstalled = true;
|
|
5431
5447
|
const pending = new Map();
|
|
@@ -5445,7 +5461,7 @@ function selectorFor(el) {
|
|
|
5445
5461
|
const id = nextId++;
|
|
5446
5462
|
pending.set(id, { resolve, reject });
|
|
5447
5463
|
try {
|
|
5448
|
-
globalThis.${
|
|
5464
|
+
globalThis.${Vh}(JSON.stringify({
|
|
5449
5465
|
id,
|
|
5450
5466
|
url: String(url),
|
|
5451
5467
|
options: {
|
|
@@ -5468,17 +5484,18 @@ function selectorFor(el) {
|
|
|
5468
5484
|
return viaNode(url, options);
|
|
5469
5485
|
}
|
|
5470
5486
|
};
|
|
5471
|
-
})();`;var
|
|
5472
|
-
`)}async function
|
|
5473
|
-
`)}async function
|
|
5474
|
-
`).map(o=>Number(o.trim())).filter(o=>Number.isInteger(o)&&o>0&&o!==process.pid);n(a)})});for(let n of t)try{process.kill(n,"SIGKILL")}catch{}}async function
|
|
5487
|
+
})();`;var Lx=Math.max(6e4,Number(process.env.INKLY_CAPTURE_TIMEOUT_MS)||24e4);function lr(){return F(process.env.INKLY_CAPTURE_AGENT_HOME||F(gi(),".inkly"),"capture-agent","sessions")}function Jh(e){return F(process.env.INKLY_CAPTURE_AGENT_HOME||F(gi(),".inkly"),"capture-agent","captures",e)}async function qh(e,t){await _t(t,{recursive:!0});let n=F(t,"listener.log"),r=await mi(n,"a"),i=To(import.meta.url),a=F(or(i),"capture-listener.js"),o=hi(process.execPath,[a,"--session",e],{detached:!0,stdio:["ignore",r.fd,r.fd]});return o.unref(),await r.close(),{pid:o.pid??null,logPath:n}}async function Gh(e,t){let n=Date.now();for(;Date.now()-n<t;){let r=await ze(e).catch(()=>null);if(r?.cliListenerReadyAt)return r;await Ct(100)}return ze(e)}function cr(e){if(!/^[a-zA-Z0-9._:-]+$/.test(e))throw new Error(`invalid session id: ${e}`);return F(lr(),`${e}.json`)}function yi(e){return F(lr(),`${e}.listener.json`)}async function Zh(e,t){await ee(yi(e),`${JSON.stringify(t,null,2)}
|
|
5488
|
+
`)}async function Kh(e){try{let t=await Ae(yi(e),"utf8");return JSON.parse(t)}catch{return null}}async function Yh(e){await ee(cr(e.id),`${JSON.stringify(e,null,2)}
|
|
5489
|
+
`)}async function ze(e){let t=await Ae(cr(e),"utf8");return JSON.parse(t)}async function rr(e){await ce(cr(e),{force:!0}),await ce(yi(e),{force:!0}),await ce(di(e),{force:!0}).catch(()=>{}),await ce(dr(e),{force:!0}).catch(()=>{})}function xi(e){try{return process.kill(e,0),!0}catch{return!1}}async function hn(e){let t=(n,r)=>{try{process.kill(n,r)}catch{}};t(-e,"SIGTERM"),t(e,"SIGTERM");for(let n=0;n<8&&xi(e);n+=1)await new Promise(r=>setTimeout(r,100));t(-e,"SIGKILL"),t(e,"SIGKILL")}async function ir(e){if(!e||!e.includes("inkly"))return;let t=await new Promise(n=>{So("pgrep",["-f","--",e],{timeout:4e3},(r,i)=>{let a=String(i||"").split(`
|
|
5490
|
+
`).map(o=>Number(o.trim())).filter(o=>Number.isInteger(o)&&o>0&&o!==process.pid);n(a)})});for(let n of t)try{process.kill(n,"SIGKILL")}catch{}}async function Xh(e){let t=await new Promise(s=>{So("ps",["-axo","pid=,ppid=,command="],{timeout:4e3,maxBuffer:16777216},(l,c)=>s(l&&!c?null:String(c||"")))});if(t==null)return null;let n=new Map,r=new Map;for(let s of t.split(`
|
|
5491
|
+
`)){let l=s.match(/^\s*(\d+)\s+(\d+)\s+(.*)$/);if(!l)continue;let c=Number(l[1]),u=Number(l[2]);r.set(c,l[3]??""),n.has(u)||n.set(u,[]),n.get(u).push(c)}let i=0,a=new Set,o=[e];for(;o.length>0;){let s=o.pop();if(!a.has(s)){a.add(s);for(let l of n.get(s)??[])o.push(l);s!==e&&(r.get(s)??"").includes("--type=renderer")&&(i+=1)}}return i}async function Qh(e){if(!e)return;let t=null;try{t=new nr(e),await Promise.race([t.send("Browser.close"),new Promise((n,r)=>setTimeout(()=>r(new Error("Browser.close timed out")),2e3))])}catch{}finally{t?.close()}}async function Zt(e){let t=e.cliListenerPid??null;!t&&e.id&&(t=(await Kh(e.id))?.cliListenerPid??null),t&&await hn(t),!e.attached&&(await Qh(e.browserWsUrl),e.chromePid&&await hn(e.chromePid),await ir(e.profileDir),e.keepProfile||e.profileDir&&await ce(e.profileDir,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}).catch(()=>{}))}async function em(e,t,n,r){let i=et(t,"url",r),a=et(t,"name",r);new URL(i);let o=Fn(),s=Eo(se(t,"window-size")),l=s?.width??qt(t,"width",Po),c=s?.height??qt(t,"height",Io),u=qt(t,"timeout",Th),p=Ro(t),h=se(t,"runtime");if(h&&h!=="cli")throw new Error("--runtime must be cli");let m=n,w=Jt(t,["zoom","auto-apply-zoom"],!0),k=Jt(t,["record-video","video"],!0)&&m!=="html",C=Jt(t,["block-videos","block-video"],!1),I=Jt(t,["compress-images","compress-image"],!1),$=Jt(t,["subset-fonts","subset-font"],!1),x=Jt(t,["headless"],!0)&&t.headed!==!0,A=se(t,"profile"),P=!p&&A?Do(e,A):null,H=P!=null&&ke(F(P,"Default"));if(!Number.isInteger(l)||l<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(u)||u<1e3)throw new Error("--timeout must be an integer >= 1000");let D=p?{pid:null,profileDir:null,...await $h(p),logPath:null}:await(async()=>{let ne=await No(e,se(t,"browser"));return Rh({browser:ne,width:l,height:c,headless:x,timeoutMs:u,userDataDir:P})})(),q=new nr(D.wsUrl),de=null,yn=!1,L=()=>{Zt({id:"",runtime:"cli",createdAt:"",url:i,name:a,chromePid:D.pid,profileDir:D.profileDir,keepProfile:P!=null||!!p,browserWsUrl:D.wsUrl,browserDebuggingUrl:D.debuggingUrl,chromeLogPath:D.logPath,attached:!!p,tabId:0,tabUrl:"",targetId:"",width:l,height:c,cliScreens:[],captureDir:null,cliListenerPid:de,cliListenerLogPath:null,cliListenerReadyAt:null}).finally(()=>{process.exit(130)})};process.on("SIGINT",L),process.on("SIGTERM",L),yn=!0;let fe=()=>{yn&&(process.removeListener("SIGINT",L),process.removeListener("SIGTERM",L),yn=!1)};try{await q.send("Target.setDiscoverTargets",{discover:!0}).catch(()=>{});let ne=await Dh(q,i,l,c,u);await q.send("Target.activateTarget",{targetId:ne.targetId}).catch(()=>{});let N=hh();await Wh(q,ne.sessionId);let ge=Jh(N),Kt={id:N,runtime:"cli",createdAt:new Date().toISOString(),url:i,name:a,chromePid:D.pid,profileDir:D.profileDir,keepProfile:p?!0:P!=null||t["keep-profile"]===!0,browserWsUrl:D.wsUrl,browserDebuggingUrl:D.debuggingUrl,chromeLogPath:D.logPath,attached:!!p,tabId:0,tabUrl:i,targetId:ne.targetId,width:l,height:c,cliScreens:[],cliCaptureKind:m,cliRecordVideo:k,cliHeadless:p?!1:x,cliBlockVideos:m==="html"?C:!1,cliCompressImages:m==="image"?I:!1,cliSubsetFonts:m==="image"?$:!1,autoApplyZoom:w,captureDir:ge,cliListenerPid:null,cliListenerLogPath:null,cliListenerReadyAt:null};await _t(ge,{recursive:!0}),await Yh(Kt);let M=await qh(Kt.id,ge);de=M.pid,await Zh(Kt.id,{cliListenerPid:M.pid,cliListenerLogPath:M.logPath});let Tt=15e3,O=await Gh(Kt.id,Tt);if(!O.cliListenerReadyAt){let j=async W=>W?Ae(W,"utf8").then(Z=>Z.split(`
|
|
5475
5492
|
`).filter(Boolean).slice(-12).join(`
|
|
5476
|
-
`)).catch(()=>""):"",
|
|
5477
|
-
Listener log (${
|
|
5478
|
-
${
|
|
5493
|
+
`)).catch(()=>""):"",J=await j(M.logPath),U=await j(O.chromeLogPath??D.logPath);throw new Error(`capture recorder failed to arm within ${Tt/1e3}s (listenerReadyAt is null). Every click would be silently dropped, so this session is unusable.
|
|
5494
|
+
Listener log (${M.logPath}):
|
|
5495
|
+
${J||"(empty)"}
|
|
5479
5496
|
Chrome log (${O.chromeLogPath??D.logPath}):
|
|
5480
|
-
${
|
|
5481
|
-
`);let
|
|
5497
|
+
${U||"(empty)"}`)}return await B("inkly_cli_capture_session_started",{runtime:"cli",capture_kind:O.cliCaptureKind??m,record_video:O.cliRecordVideo===!0,auto_apply_zoom:O.autoApplyZoom!==!1,window_width:O.width,window_height:O.height,headless:p?null:x,attached:O.attached,persistent_profile:P!=null,profile_reused:H,connect_to_browser:!!p}),fe(),await o,X({ok:!0,mode:"cli",session:{id:O.id,stateFile:cr(O.id),createdAt:O.createdAt},browser:{pid:O.chromePid,debuggingUrl:O.browserDebuggingUrl,webSocketDebuggerUrl:O.browserWsUrl,headless:p?null:x,attached:O.attached,profile:P?{dir:P,persistent:!0,reused:H}:null},tab:{targetId:O.targetId,url:O.tabUrl},capture:{kind:O.cliCaptureKind??"image",video:O.cliRecordVideo===!0,recordVideo:O.cliRecordVideo===!0,autoApplyZoom:O.autoApplyZoom!==!1,window:{width:O.width,height:O.height},stepCount:0,automatic:!0,listenerPid:O.cliListenerPid??M.pid,listenerReadyAt:O.cliListenerReadyAt}}),0}catch(ne){throw await Zt({id:"",runtime:"cli",createdAt:"",url:i,name:a,chromePid:D.pid,profileDir:D.profileDir,keepProfile:P!=null||!!p,browserWsUrl:D.wsUrl,browserDebuggingUrl:D.debuggingUrl,chromeLogPath:D.logPath,attached:!!p,tabId:0,tabUrl:"",targetId:"",width:l,height:c,cliScreens:[],captureDir:null,cliListenerPid:de,cliListenerLogPath:null,cliListenerReadyAt:null}),ne}finally{fe(),q.close()}}async function tm(e,t){let n=bh(new Uint8Array(e)),r=Gt(t);await _t(r,{recursive:!0});for(let[i,a]of Object.entries(n)){let o=i.replace(/\\/g,"/");if(!o||o.endsWith("/"))continue;let s=Gt(r,o);if(s!==r&&!s.startsWith(r+fh))throw new Error(`Unsafe zip entry: ${i}`);await _t(or(s),{recursive:!0}),await _o(s,Buffer.from(a))}}async function nm(e,t,n){let r=et(t,"session",n),i=et(t,"out",n),a=sr(e,i),o=await ze(r),s=await ki(r),l=ar(o.cliScreens??[],s);if(l.length===0)return await Zt(o),o.captureDir&&await ce(o.captureDir,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}).catch(()=>{}),await rr(o.id),await ui(o.id),await B("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}),X({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 Bh({name:o.name,screens:l}):await Fh({name:o.name,screens:l,autoApplyZoom:o.autoApplyZoom!==!1,compressImages:o.cliCompressImages===!0,subsetFonts:o.cliSubsetFonts===!0});await _t(a,{recursive:!0});let p=Buffer.from(u.bytes),h=F(a,u.filename);await _o(h,p);let m=null;return t["no-unpack"]!==!0&&(await tm(p,a),m=F(a,u.slug)),await Zt(o),o.captureDir&&await ce(o.captureDir,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}).catch(()=>{}),await rr(o.id),await ui(o.id),await B("inkly_cli_capture_session_stopped",{runtime:"cli",capture_kind:o.cliCaptureKind??"image",step_count:u.stepCount,output_bytes:p.byteLength,unpacked:t["no-unpack"]!==!0,record_video:o.cliRecordVideo===!0,auto_apply_zoom:o.autoApplyZoom!==!1}),X({ok:!0,mode:"cli",session:{id:o.id},output:{zipPath:h,demoDir:m,bytes:p.byteLength,stepCount:u.stepCount,stepLabels:u.labels}}),0}async function rm(e,t){let n=et(e,"session",t),r=await ze(n);return await Zt(r),r.captureDir&&await ce(r.captureDir,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}).catch(()=>{}),await rr(r.id),await ui(r.id),await B("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}),X({ok:!0,mode:"cli",session:{id:r.id}}),0}function Lo(e){return e.pngPath||e.videoPath||e.htmlPath||e.posterPngPath||`t:${e.capturedAt??""}`}function dr(e){return F(lr(),`${e}.undo.json`)}async function ki(e){try{let t=JSON.parse(await Ae(dr(e),"utf8"));return Array.isArray(t.droppedKeys)?t.droppedKeys.filter(n=>typeof n=="string"):[]}catch{return[]}}function ar(e,t){if(t.length===0)return e;let n=new Set(t);return e.filter(r=>!n.has(Lo(r)))}async function ui(e){await ce(dr(e),{force:!0}).catch(()=>{})}function pi(e,t){return e.click?.label||e.title||`Step ${t+1}`}async function im(e,t){let n=et(e,"session",t),r=await ze(n),i=await ki(n),a=ar(r.cliScreens??[],i);if(a.length===0)return X({ok:!1,mode:"cli",session:{id:r.id},error:"No recorded step to undo.",capture:{stepCount:0}}),1;let o=a[a.length-1],s=pi(o,a.length-1);i.push(Lo(o)),await ee(dr(n),`${JSON.stringify({droppedKeys:i},null,2)}
|
|
5498
|
+
`);let l=ar(r.cliScreens??[],i);return X({ok:!0,mode:"cli",session:{id:r.id},capture:{undone:s,stepCount:l.length,stepLabels:l.map((c,u)=>pi(c,u))}}),0}async function am(e,t){let n=et(e,"session",t),r=await ze(n),i=await ki(n),a=ar(r.cliScreens??[],i),o=a.map((l,c)=>pi(l,c)),s=a.map((l,c)=>({index:c+1,label:o[c],url:l.sourceUrl||null,kind:l.kind??"image"}));return X({ok:!0,mode:"cli",session:{id:r.id},capture:{kind:r.cliCaptureKind??"image",ready:!!r.cliListenerReadyAt,browserAlive:r.attached?null:!!(r.chromePid&&xi(r.chromePid)),listenerReadyAt:r.cliListenerReadyAt??null,stepCount:a.length,stepLabels:o,lastLabel:o[o.length-1]??null,steps:s}}),0}async function ur(e){let{cwd:t,subcommand:n,args:r,kind:i,usage:a}=e;switch(Ih(r),await B("inkly_cli_capture_command_invoked",{capture_kind:i,subcommand:n??"(none)"}),n){case"start":return em(t,r,i,a);case"stop":return nm(t,r,a);case"cancel":return rm(r,a);case"status":return am(r,a);case"undo":return im(r,a);case"profiles":return dm();case"ask-user-to-log-in":return mm(t,r,a);case"nav":return lm(r);default:return process.stdout.write(a),1}}var te=`inkly capture nav - drive the captured browser (Stagehand)
|
|
5482
5499
|
|
|
5483
5500
|
Usage:
|
|
5484
5501
|
inkly capture nav snapshot --session <id> [--full] [--filter <t|/re/>] [--max-depth <n>] [--json]
|
|
@@ -5509,43 +5526,51 @@ Output:
|
|
|
5509
5526
|
straight to stdout \u2014 no JSON, no maps; read refs directly from it. Action verbs
|
|
5510
5527
|
(click/fill/type/select/scroll/back/...) print a one-line status header
|
|
5511
5528
|
(\`ok | url=\u2026 | steps=N | <label>\`) then the FRESH trimmed tree, so you rarely
|
|
5512
|
-
need a standalone snapshot.
|
|
5529
|
+
need a standalone snapshot. A heavy video step may still be encoding when the
|
|
5530
|
+
click returns; the header then OMITS \`steps=\` (shows \`step still committing\`)
|
|
5531
|
+
rather than a stale count \u2014 the click WAS recorded, do not re-click; \`capture
|
|
5532
|
+
status\` has the settled count. Read the WHOLE returned tree \u2014 do NOT pipe through
|
|
5513
5533
|
\`head\`/\`sed\` (truncating it cuts the refs and forces a wasteful re-snapshot);
|
|
5514
5534
|
bound a long tree with \`--filter\`/\`--max-depth\` instead. Add \`--full\` to
|
|
5515
5535
|
snapshot for the untrimmed tree, \`--no-snapshot\` to suppress the post-action
|
|
5516
5536
|
tree, and \`--json\` for the structured object (with urlMap/xpathMap on snapshot).
|
|
5517
5537
|
A driving verb fires real browser input, which the recorder captures as a step \u2014
|
|
5518
5538
|
nav never writes steps.
|
|
5519
|
-
`;async function
|
|
5520
|
-
`)}async function
|
|
5539
|
+
`;async function om(e){let n=(await ze(e).catch(()=>null))?.cliScreens??[],r=n[n.length-1];return{steps:n.length,lastLabel:r&&(r.click?.label||r.title)||null,lastKind:r?.kind??null}}function wi(e){return e.json===!0}function je(e){return e["no-snapshot"]===!0||e.snapshot===!1}function sm(e,t){if(wi(t)){X({ok:!0,...e});return}let n=typeof e.tree=="string"?e.tree:"";process.stdout.write(`${n}
|
|
5540
|
+
`)}async function Ue(e,t,n){if(wi(t)){X({ok:!0,...e});return}let r=e,i=r.steps!==void 0?{steps:r.steps,lastLabel:r.lastLabel??null}:await om(n),a=r.snapshot?.url??"",o=["ok"];a&&o.push(`url=${a}`),i.steps!==null&&o.push(`steps=${i.steps}`),i.lastLabel&&o.push(i.lastLabel),process.stdout.write(`${o.join(" | ")}
|
|
5521
5541
|
`);let s=r.snapshot?.tree;typeof s=="string"&&s.length>0&&process.stdout.write(`${s}
|
|
5522
|
-
`)}async function
|
|
5542
|
+
`)}async function lm(e){let t=typeof e._[2]=="string"?e._[2]:void 0;if(!t)return process.stdout.write(te),1;let n=et(e,"session",te),r=await ze(n).catch(()=>null);if(!r)throw new Error(`no capture session "${n}" \u2014 run \`inkly capture start\` first`);if(r.runtime!=="cli")throw new Error("nav is only available for cli runtime sessions");let i=di(n);switch(t){case"snapshot":{let a=await Y(i,"snapshot",{full:e.full===!0,json:wi(e),filter:se(e,"filter"),maxDepth:tr(e,"max-depth")});return sm(a,e),0}case"refs":{let a=await Y(i,"refs",{});return X({ok:!0,...a}),0}case"click":{let a=typeof e._[3]=="string"?e._[3]:void 0;if(!a)throw new Error(`nav click requires a <selector>
|
|
5523
5543
|
|
|
5524
|
-
`+
|
|
5544
|
+
`+te);let o=await Y(i,"click",{selector:a,noSnapshot:je(e)});return await Ue(o,e,n),0}case"fill":{let a=typeof e._[3]=="string"?e._[3]:void 0,o=typeof e._[4]=="string"?e._[4]:void 0;if(!a||o===void 0)throw new Error(`nav fill requires <selector> <value>
|
|
5525
5545
|
|
|
5526
|
-
`+
|
|
5546
|
+
`+te);let s=await Y(i,"fill",{selector:a,value:o,pressEnter:e.enter===!0,noSnapshot:je(e)});return await Ue(s,e,n),0}case"type":{let a=typeof e._[3]=="string"?e._[3]:void 0;if(a===void 0)throw new Error(`nav type requires <text>
|
|
5527
5547
|
|
|
5528
|
-
`+
|
|
5548
|
+
`+te);let o=await Y(i,"type",{text:a,delay:tr(e,"delay"),noSnapshot:je(e)});return await Ue(o,e,n),0}case"press":case"key":{let a=typeof e._[3]=="string"?e._[3]:void 0;if(!a)throw new Error(`nav press requires a <key>
|
|
5529
5549
|
|
|
5530
|
-
`+
|
|
5550
|
+
`+te);let o=await Y(i,"key",{key:a,noSnapshot:je(e)});return await Ue(o,e,n),0}case"scroll":{let o=(typeof e._[3]=="string"?e._[3]:void 0)==="up"?"up":"down",s=pn(e._[4]),l=await Y(i,"scroll",{direction:o,amount:s!==void 0&&s>0?s:void 0,noSnapshot:je(e)});return await Ue(l,e,n),0}case"select":{let a=typeof e._[3]=="string"?e._[3]:void 0,o=e._.slice(4).filter(l=>typeof l=="string");if(!a||o.length===0)throw new Error(`nav select requires <selector> <value...>
|
|
5531
5551
|
|
|
5532
|
-
`+
|
|
5552
|
+
`+te);let s=await Y(i,"select",{selector:a,values:o,noSnapshot:je(e)});return await Ue(s,e,n),0}case"upload":{let a=typeof e._[3]=="string"?e._[3]:void 0,o=e._.slice(4).filter(l=>typeof l=="string").map(l=>sr(process.cwd(),l));if(!a||o.length===0)throw new Error(`nav upload requires <selector> <file...>
|
|
5533
5553
|
|
|
5534
|
-
`+
|
|
5554
|
+
`+te);let s=await Y(i,"upload",{selector:a,files:o});return X({ok:!0,...s}),0}case"get":{let a=typeof e._[3]=="string"?e._[3]:void 0;if(!a)throw new Error(`nav get requires a target
|
|
5535
5555
|
|
|
5536
|
-
`+
|
|
5556
|
+
`+te);let o=typeof e._[4]=="string"?e._[4]:void 0,s=await Y(i,"get",{what:a,selector:o});return X({ok:!0,...s}),0}case"is":{let a=typeof e._[3]=="string"?e._[3]:void 0,o=typeof e._[4]=="string"?e._[4]:void 0;if(!a||!o)throw new Error(`nav is requires <visible|checked> <selector>
|
|
5537
5557
|
|
|
5538
|
-
`+
|
|
5558
|
+
`+te);let s=await Y(i,"is",{check:a,selector:o});return X({ok:!0,...s}),0}case"wait":{let a=typeof e._[3]=="string"?e._[3]:void 0;if(!a)throw new Error(`nav wait requires <load|selector|timeout>
|
|
5539
5559
|
|
|
5540
|
-
`+
|
|
5560
|
+
`+te);let o=/^\d+$/.test(a),s=o?"timeout":a,l=o?a:typeof e._[4]=="string"?e._[4]:void 0,c=await Y(i,"wait",{type:s,arg:l,state:se(e,"state"),timeoutMs:tr(e,"timeout")});return X({ok:!0,...c}),0}case"back":case"forward":case"reload":{let a=await Y(i,t,{waitUntil:se(e,"wait"),timeoutMs:tr(e,"timeout"),noSnapshot:je(e)});return await Ue(a,e,n),0}case"mouse":{let a=typeof e._[3]=="string"?e._[3]:void 0;if(a==="click"){let o=pn(e._[4]),s=pn(e._[5]);if(o===void 0||s===void 0)throw new Error(`nav mouse click requires <x> <y>
|
|
5541
5561
|
|
|
5542
|
-
`+
|
|
5562
|
+
`+te);let l=await Y(i,"mouse.click",{x:o,y:s,button:se(e,"button"),noSnapshot:je(e)});return await Ue(l,e,n),0}if(a==="hover"){let o=pn(e._[4]),s=pn(e._[5]);if(o===void 0||s===void 0)throw new Error(`nav mouse hover requires <x> <y>
|
|
5543
5563
|
|
|
5544
|
-
`+
|
|
5564
|
+
`+te);let l=await Y(i,"mouse.hover",{x:o,y:s});return X({ok:!0,...l}),0}if(a==="scroll"){let o=cm(),s=o[0],l=o[1],c=o[2],u=o[3];if(s===void 0||l===void 0||c===void 0||u===void 0)throw new Error(`nav mouse scroll requires <x> <y> <deltaX> <deltaY>
|
|
5545
5565
|
|
|
5546
|
-
`+
|
|
5566
|
+
`+te);let p=await Y(i,"mouse.scroll",{x:s,y:l,deltaX:c,deltaY:u,noSnapshot:je(e)});return await Ue(p,e,n),0}throw new Error(`nav mouse requires <click|hover|scroll>
|
|
5547
5567
|
|
|
5548
|
-
`+
|
|
5568
|
+
`+te)}default:return process.stdout.write(te),1}}function pn(e){if(typeof e=="number")return e;if(typeof e=="string"&&e.trim()){let t=Number(e);return Number.isFinite(t)?t:void 0}}function cm(){let e=process.argv.slice(2),t=e.findIndex(r=>r==="scroll"),n=[];if(t!==-1)for(let r=t+1;r<e.length&&n.length<4;r+=1){let i=e[r];if(i.startsWith("--"))break;/^-?\d+(\.\d+)?$/.test(i)&&n.push(Number(i))}return[n[0],n[1],n[2],n[3]]}function tr(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))return;let n=e[t],r=typeof n=="number"?n:Number(n);return Number.isFinite(r)?r:void 0}async function dm(){let e=$o(),t=await fi(e,{withFileTypes:!0}).catch(()=>[]),n=[];for(let r of t){if(!r.isDirectory())continue;let i=F(e,r.name),a=ke(F(i,"Default")),o=ke(F(i,"Default","Network","Cookies"))||ke(F(i,"Default","Cookies"));n.push({name:r.name,dir:i,initialized:a,hasCookies:o})}return await B("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}),X({ok:!0,profilesDir:e,profiles:n}),0}var um=20*6e4;async function pm(){let e=lr(),t=await fi(e).catch(()=>[]),n=[];for(let r of t){if(!r.endsWith(".json")||r.endsWith(".listener.json")||r.endsWith(".undo.json"))continue;let i=r.slice(0,-5),a=await ze(i).catch(()=>null);a&&n.push(a)}return n}async function hm(e){let t=Gt(e),n=[];for(let r of await pm())!r.profileDir||Gt(r.profileDir)!==t||(await Zt({...r,keepProfile:!0}),r.captureDir&&await ce(r.captureDir,{recursive:!0,force:!0,maxRetries:5,retryDelay:200}).catch(()=>{}),await rr(r.id),n.push(r.id));return n}async function mm(e,t,n){if(Ro(t))throw new Error("ask-user-to-log-in manages a persistent --profile and cannot be combined with --connect-to-browser (an attached browser owns its own profile).");let r=se(t,"profile");if(!r)throw new Error("ask-user-to-log-in requires --profile <name>: the sign-in is saved into that profile, then reused by `capture start --profile <name>`.");let i=Do(e,r),a=se(t,"url")??null;a&&new URL(a);let o=Eo(se(t,"window-size")),s=o?.width??qt(t,"width",Po),l=o?.height??qt(t,"height",Io),c=qt(t,"timeout",um),u=await hm(i);await ir(i),await _t(i,{recursive:!0});for(let I of["DevToolsActivePort","SingletonLock","SingletonCookie","SingletonSocket"])await ce(F(i,I),{force:!0}).catch(()=>{});let p=await No(e,se(t,"browser")),h=F(i,"login.log"),m=await mi(h,"a"),w=[`--user-data-dir=${i}`,`--window-size=${s},${l}`,"--no-first-run","--no-default-browser-check","--disable-default-apps","--use-mock-keychain","--hide-crash-restore-bubble"];a&&w.push(a);let g=hi(p,w,{detached:!1,stdio:["ignore",m.fd,m.fd]});await m.close(),process.stderr.write(`
|
|
5569
|
+
A Chrome window opened for sign-in (profile "${r}"${a?` at ${a}`:""}).
|
|
5570
|
+
Tell the user to sign in there \u2014 "Sign in with Google/GitHub" works in this window \u2014 then CLOSE it.
|
|
5571
|
+
This command is WAITING; it returns once the window is closed.
|
|
5572
|
+
|
|
5573
|
+
`);let k=!1;await new Promise(I=>{let $=!1,x=!1,A=!1,P=0,H=()=>{$||($=!0,clearInterval(q),I())};g.once("exit",H),g.once("error",H);let D=Date.now(),q=setInterval(()=>{$||x||(x=!0,(async()=>{try{if(Date.now()-D>c)return k=!0,g.pid&&await hn(g.pid),H();if(!g.pid||!xi(g.pid))return H();let de=await Xh(g.pid);if(de===null)return;if(de>0){A=!0,P=0;return}if(!A)return;if(P+=1,P>=3)return g.pid&&await hn(g.pid),H()}finally{x=!1}})())},500)}),await Ct(400),await ir(i);let C=ke(F(i,"Default","Network","Cookies"))||ke(F(i,"Default","Cookies"));return await B("inkly_cli_capture_login_handoff",{closed_sessions:u.length,timed_out:k,has_cookies:C}),X({ok:!k,mode:"cli",action:"ask-user-to-log-in",profile:{name:r,dir:i,hasCookies:C},closedSessions:u,timedOut:k,next:k?"Timed out waiting for the sign-in window to close. Re-run ask-user-to-log-in (or if the user already finished, start the capture).":`Window closed. Start the capture: inkly capture start --profile ${r} --url <app-url> --window-size ${s}x${l}. Then verify sign-in FROM THE PAGE (account menu / app URL), not from hasCookies.`}),k?1:0}async function Oo(e){let{cwd:t,subcommand:n,args:r}=e;if(r.html===!0)throw new Error("inkly capture is image/video only. For HTML snapshot capture use `inkly capture-html`.");for(let i of["block-videos","block-video","compress-images","compress-image","subset-fonts","subset-font"])if(Object.prototype.hasOwnProperty.call(r,i))throw new Error(`--${i} only applies to HTML capture. Use \`inkly capture-html --${i}\`.`);return ur({cwd:t,subcommand:n,args:r,kind:"image",usage:mn})}async function jo(e){let{cwd:t,subcommand:n,args:r}=e;return ur({cwd:t,subcommand:n,args:r,kind:"html",usage:fn})}import{spawn as fm}from"child_process";import{access as gm,constants as bm}from"fs/promises";import{delimiter as ym,dirname as xm,join as Uo}from"path";import{fileURLToPath as km}from"url";var gn=`inkly skills \u2014 install the bundled Inkly CLI skill
|
|
5549
5574
|
|
|
5550
5575
|
Usage:
|
|
5551
5576
|
inkly skills install
|
|
@@ -5556,14 +5581,14 @@ ecosystem. Re-run any time to refresh the skill after a CLI upgrade.
|
|
|
5556
5581
|
|
|
5557
5582
|
Commands:
|
|
5558
5583
|
install Install or refresh the bundled Inkly CLI skill.
|
|
5559
|
-
`;function
|
|
5584
|
+
`;function wm(){return Uo(xm(km(import.meta.url)),"skills","inkly")}async function vm(e){let t=process.env.PATH;if(!t)return null;let n=process.platform==="win32"?(process.env.PATHEXT||".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean):[""];for(let r of t.split(ym))for(let i of n){let a=Uo(r,`${e}${i.toLowerCase()}`);try{return await gm(a,bm.X_OK),a}catch{}}return null}function Sm(e){return process.platform==="win32"&&/\.(?:bat|cmd)$/i.test(e)}async function _m(e,t){return await new Promise((n,r)=>{let i=fm(e,t,{stdio:"inherit",shell:Sm(e)});i.on("error",r),i.on("close",(a,o)=>{if(o){n(1);return}n(a??0)})})}async function Cm(){let e=await vm("npx");return e?await _m(e,["--yes","skills","add",wm(),"--yes","--global","--agent","*"]):(process.stderr.write("`npx` is not installed. Install Node.js from https://nodejs.org, then rerun `inkly skills install`.\n"),1)}async function zo(e){return e.help||!e.subcommand?(process.stdout.write(gn),e.help?0:1):e.subcommand==="install"?await Cm():(process.stderr.write(`inkly skills: unknown command "${e.subcommand}"
|
|
5560
5585
|
|
|
5561
|
-
${
|
|
5586
|
+
${gn}`),1)}var Ho=`inkly \u2014 Inkly CLI
|
|
5562
5587
|
|
|
5563
5588
|
Usage:
|
|
5564
5589
|
inkly init <name> [--layout <layout>] Scaffold a new demo hub.
|
|
5565
|
-
inkly add <name> [--
|
|
5566
|
-
inkly demo <slug> [--
|
|
5590
|
+
inkly add <name> [--from <dir>] Scaffold or import a demo in the hub.
|
|
5591
|
+
inkly demo <slug> [--from <dir>] Alias of \`inkly add\`.
|
|
5567
5592
|
inkly dev [--port <n>] Start a local preview server for
|
|
5568
5593
|
the hub in the current directory.
|
|
5569
5594
|
inkly validate [--json] [--strict] Validate hub and demo files.
|
|
@@ -5581,7 +5606,7 @@ Usage:
|
|
|
5581
5606
|
inkly help [command] Show CLI help.
|
|
5582
5607
|
|
|
5583
5608
|
Run \`inkly <command> --help\` for more.
|
|
5584
|
-
`,
|
|
5609
|
+
`,Si=`inkly init \u2014 scaffold a new demo hub
|
|
5585
5610
|
|
|
5586
5611
|
Usage:
|
|
5587
5612
|
inkly init <name> [--layout <layout>]
|
|
@@ -5592,33 +5617,46 @@ Arguments:
|
|
|
5592
5617
|
Options:
|
|
5593
5618
|
--layout <layout> Hub index layout to write to inkly.json.
|
|
5594
5619
|
One of: sidebar, tabs.
|
|
5595
|
-
`,
|
|
5620
|
+
`,Bo=`inkly add \u2014 scaffold or import a demo in the current hub
|
|
5596
5621
|
|
|
5597
5622
|
Usage:
|
|
5598
5623
|
inkly add <name> [--collection <name>]
|
|
5624
|
+
inkly add [<name>] --from <dir> [--collection <name>]
|
|
5599
5625
|
|
|
5600
5626
|
Arguments:
|
|
5601
|
-
<name> Folder name for the
|
|
5602
|
-
|
|
5603
|
-
|
|
5627
|
+
<name> Folder name for the demo (kebab-case). The scaffold
|
|
5628
|
+
form mints a fresh opaque id; the --from form keeps
|
|
5629
|
+
the imported demo's id. Optional with --from (defaults
|
|
5630
|
+
to the source folder's name).
|
|
5604
5631
|
|
|
5605
5632
|
Options:
|
|
5633
|
+
--from <dir> Import an existing demo folder (one with a
|
|
5634
|
+
demo.config.json, e.g. an \`inkly capture\` export) into
|
|
5635
|
+
demos/<name>/ instead of scaffolding. Copies the
|
|
5636
|
+
config, assets.json, public/ bytes, and snapshots/.
|
|
5637
|
+
When the hub has a single collection and --collection
|
|
5638
|
+
is omitted, the imported demo joins it automatically so
|
|
5639
|
+
it shows up in the hub index.
|
|
5606
5640
|
--collection <name> Add the demo to this collection in inkly.json.
|
|
5607
5641
|
Creates the collection if it doesn't exist. When
|
|
5608
|
-
omitted,
|
|
5609
|
-
`,
|
|
5642
|
+
omitted, a scaffolded demo joins no collection.
|
|
5643
|
+
`,Wo=`inkly demo \u2014 alias of \`inkly add\`
|
|
5610
5644
|
|
|
5611
5645
|
Usage:
|
|
5612
5646
|
inkly demo <slug> [--collection <name>]
|
|
5647
|
+
inkly demo [<slug>] --from <dir> [--collection <name>]
|
|
5613
5648
|
|
|
5614
5649
|
Arguments:
|
|
5615
|
-
<slug> Folder name for the
|
|
5650
|
+
<slug> Folder name for the demo (kebab-case). Optional with
|
|
5651
|
+
--from (defaults to the source folder's name).
|
|
5616
5652
|
|
|
5617
5653
|
Options:
|
|
5654
|
+
--from <dir> Import an existing demo folder into demos/<slug>/
|
|
5655
|
+
instead of scaffolding.
|
|
5618
5656
|
--collection <name> Add the demo to this collection in inkly.json.
|
|
5619
5657
|
Creates the collection if it doesn't exist. When
|
|
5620
5658
|
omitted, the demo is not added to any collection.
|
|
5621
|
-
|
|
5659
|
+
`,Vo=`inkly validate \u2014 validate a demo hub
|
|
5622
5660
|
|
|
5623
5661
|
Usage:
|
|
5624
5662
|
inkly validate [--json] [--strict]
|
|
@@ -5626,7 +5664,7 @@ Usage:
|
|
|
5626
5664
|
Options:
|
|
5627
5665
|
--json Print machine-readable JSON.
|
|
5628
5666
|
--strict Treat warnings as failures.
|
|
5629
|
-
`,
|
|
5667
|
+
`,Jo=`inkly lock \u2014 pin the runtime via inkly.lock
|
|
5630
5668
|
|
|
5631
5669
|
Usage:
|
|
5632
5670
|
inkly lock [--json] [--local <path>]
|
|
@@ -5647,7 +5685,7 @@ Environment:
|
|
|
5647
5685
|
BUNDLES_R2_PUBLIC_BASE_URL
|
|
5648
5686
|
Override the bundles bucket's public base URL
|
|
5649
5687
|
(default https://www.runtime.inklyai.dev). Useful for staging.
|
|
5650
|
-
`,
|
|
5688
|
+
`,qo=`inkly login \u2014 connect to the hosted app
|
|
5651
5689
|
|
|
5652
5690
|
Usage:
|
|
5653
5691
|
inkly login [--no-open]
|
|
@@ -5659,11 +5697,11 @@ overridden on the command line.
|
|
|
5659
5697
|
Options:
|
|
5660
5698
|
--no-open Print the grant URL without opening a browser.
|
|
5661
5699
|
--token <token> Automation fallback: save an existing API token.
|
|
5662
|
-
`,
|
|
5700
|
+
`,Go=`inkly logout \u2014 remove saved platform API credentials
|
|
5663
5701
|
|
|
5664
5702
|
Usage:
|
|
5665
5703
|
inkly logout
|
|
5666
|
-
`,
|
|
5704
|
+
`,Zo=`inkly sync \u2014 upload local capture blobs to CDN
|
|
5667
5705
|
|
|
5668
5706
|
Usage:
|
|
5669
5707
|
inkly sync [--demo <slug>] [--dry-run] [--json]
|
|
@@ -5672,7 +5710,7 @@ Options:
|
|
|
5672
5710
|
--demo <slug> Sync one demo instead of every demo.
|
|
5673
5711
|
--dry-run Report pending uploads without changing files.
|
|
5674
5712
|
--json Print machine-readable JSON.
|
|
5675
|
-
`,
|
|
5713
|
+
`,Ko=`inkly snapshot \u2014 publish a standalone snapshot of one demo
|
|
5676
5714
|
|
|
5677
5715
|
Usage:
|
|
5678
5716
|
inkly snapshot <demo-path> [--json]
|
|
@@ -5682,14 +5720,20 @@ from the demo hub. Missing binary assets are uploaded to the CDN for the
|
|
|
5682
5720
|
snapshot without changing local files. (For a LOCAL preview without
|
|
5683
5721
|
publishing, use \`inkly dev\` instead.)
|
|
5684
5722
|
|
|
5723
|
+
The <demo-path> may be a demo inside a hub OR a bare exported demo folder
|
|
5724
|
+
(one containing demo.config.json) with no inkly.json above it \u2014 in the latter
|
|
5725
|
+
case snapshot wraps it in a throwaway hub, so a fresh \`capture stop\` export
|
|
5726
|
+
publishes with no manual hub assembly.
|
|
5727
|
+
|
|
5685
5728
|
Arguments:
|
|
5686
|
-
<demo-path> Path to the demo folder (e.g. demos/intro)
|
|
5687
|
-
|
|
5729
|
+
<demo-path> Path to the demo folder (e.g. demos/intro), or a bare
|
|
5730
|
+
exported demo folder. Omit when inside a hub with exactly
|
|
5731
|
+
one demo, or use --demo <slug>.
|
|
5688
5732
|
|
|
5689
5733
|
Options:
|
|
5690
5734
|
--demo <slug> Select the demo by slug instead of by path.
|
|
5691
5735
|
--json Print machine-readable JSON.
|
|
5692
|
-
`,
|
|
5736
|
+
`,Yo=`inkly dev \u2014 start the local preview server
|
|
5693
5737
|
|
|
5694
5738
|
Usage:
|
|
5695
5739
|
inkly dev [<path>] [--port <n>]
|
|
@@ -5705,33 +5749,33 @@ Arguments:
|
|
|
5705
5749
|
Options:
|
|
5706
5750
|
--port <n> Preferred port. Defaults to 3000; if taken, the CLI
|
|
5707
5751
|
tries the next available port. Must be 1-65535.
|
|
5708
|
-
`,
|
|
5752
|
+
`,Xo=`inkly update \u2014 update the globally installed CLI
|
|
5709
5753
|
|
|
5710
5754
|
Usage:
|
|
5711
5755
|
inkly update [--dry-run]
|
|
5712
5756
|
|
|
5713
5757
|
Options:
|
|
5714
5758
|
--dry-run Print the update command without running it.
|
|
5715
|
-
`,
|
|
5759
|
+
`,Qo=`inkly doctor \u2014 run local diagnostics
|
|
5716
5760
|
|
|
5717
5761
|
Usage:
|
|
5718
5762
|
inkly doctor [--json]
|
|
5719
5763
|
|
|
5720
5764
|
Options:
|
|
5721
5765
|
--json Print machine-readable JSON.
|
|
5722
|
-
`,
|
|
5766
|
+
`,es=`inkly status \u2014 show local CLI status
|
|
5723
5767
|
|
|
5724
5768
|
Usage:
|
|
5725
5769
|
inkly status [--json]
|
|
5726
5770
|
|
|
5727
5771
|
Options:
|
|
5728
5772
|
--json Print machine-readable JSON.
|
|
5729
|
-
`,
|
|
5773
|
+
`,ts=`inkly version \u2014 print the CLI version
|
|
5730
5774
|
|
|
5731
5775
|
Usage:
|
|
5732
5776
|
inkly version
|
|
5733
5777
|
inkly --version
|
|
5734
|
-
`,
|
|
5778
|
+
`,_i=`inkly help \u2014 show command help
|
|
5735
5779
|
|
|
5736
5780
|
Usage:
|
|
5737
5781
|
inkly help [command]
|
|
@@ -5756,26 +5800,26 @@ Commands:
|
|
|
5756
5800
|
capture-html
|
|
5757
5801
|
Capture a self-contained HTML walkthrough for an agent.
|
|
5758
5802
|
skills Install the Inkly CLI agent skill.
|
|
5759
|
-
`,
|
|
5760
|
-
|
|
5761
|
-
${
|
|
5762
|
-
|
|
5763
|
-
`+
|
|
5764
|
-
`),await B("inkly_cli_failed",{command:"init"}),await
|
|
5765
|
-
|
|
5766
|
-
`+a),1;let
|
|
5767
|
-
`),await B("inkly_cli_failed",{command:n}),await
|
|
5768
|
-
`),await B("inkly_cli_failed",{command:"lock"}),await
|
|
5769
|
-
`),await B("inkly_cli_failed",{command:"update"}),await
|
|
5770
|
-
`),await B("inkly_cli_failed",{command:"login"}),await
|
|
5771
|
-
`),await B("inkly_cli_failed",{command:"sync"}),await
|
|
5772
|
-
`),await B("inkly_cli_failed",{command:"snapshot"}),await
|
|
5773
|
-
`),await B("inkly_cli_failed",{command:"capture",subcommand:r[0]}),await
|
|
5774
|
-
`),await B("inkly_cli_failed",{command:"capture-html",subcommand:r[0]}),await
|
|
5775
|
-
`),await B("inkly_cli_failed",{command:"skills",subcommand:r[0]}),await
|
|
5776
|
-
`),1;try{let s=await
|
|
5777
|
-
`),B("inkly_cli_failed",{command:"dev.shutdown"}),
|
|
5778
|
-
`),await B("inkly_cli_failed",{command:"dev"}),await
|
|
5779
|
-
|
|
5780
|
-
${
|
|
5781
|
-
`),await B("inkly_cli_failed",{command:"main"}),await
|
|
5803
|
+
`,Rm={add:Bo,demo:Wo,dev:Yo,doctor:Qo,capture:mn,"capture-html":fn,help:_i,init:Si,lock:Jo,login:qo,logout:Go,skills:gn,snapshot:Ko,status:es,sync:Zo,update:Xo,validate:Vo,version:ts};function $m(e,t){let n=Im(e)?e:Em(t,e);if(vi(n))try{if(Am(n).isFile())return n;let i=Fo(n,"manifest.json");if(vi(i))return i;let a=Fo(n,"dist","manifest.json");if(vi(a))return a}catch{}return n}function bn(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))return;let n=e[t];return typeof n=="string"?n:""}function Dm(e){let t=new Set(["_","api-base","token","url","name","out","session"]);return Object.keys(e).filter(n=>!t.has(n)).filter(n=>e[n]!==!1&&e[n]!==void 0).sort()}async function Nm(e){let t=Tm(e,{alias:{h:"help",p:"port",v:"version"},boolean:["auto-apply-zoom","block-videos","check","compress-images","dry-run","enter","full","headed","headless","html","help","json","keep-profile","no-open","no-snapshot","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]=t._,i=n??(t.version?"version":t.help?"help":"(none)");if(await B("inkly_cli_invoked",{command:i,subcommand:typeof r[0]=="string"?r[0]:void 0,option_keys:Dm(t),json:!!t.json,help:!!t.help}),t.version&&!n)return await Fr(),0;if(!n||t.help&&!n)return process.stdout.write(Ho),t.help?0:1;switch(n){case"help":{let a=r[0];if(!a)return process.stdout.write(_i),0;let o=Rm[a];return o?(process.stdout.write(o),0):(process.stderr.write(`inkly help: unknown command "${a}"
|
|
5804
|
+
|
|
5805
|
+
${_i}`),1)}case"init":{if(t.help)return process.stdout.write(Si),0;let a=r[0];if(!a)return process.stderr.write(`inkly init: missing <name> argument
|
|
5806
|
+
|
|
5807
|
+
`+Si),1;let o=bn(t,"layout");try{return await Ca({name:a,cwd:process.cwd(),layout:o}),0}catch(s){return process.stderr.write(`inkly init failed: ${s.message}
|
|
5808
|
+
`),await B("inkly_cli_failed",{command:"init"}),await oe("init",s),1}}case"add":case"demo":{let a=n==="add"?Bo:Wo;if(t.help)return process.stdout.write(a),0;let o=typeof t.from=="string"&&t.from.length>0?t.from:void 0,s=r[0]??(o?Pm(o.replace(/[/\\]+$/,"")):void 0);if(!s)return process.stderr.write(`inkly ${n}: missing <name> argument
|
|
5809
|
+
|
|
5810
|
+
`+a),1;let l=typeof t.collection=="string"&&t.collection.length>0?t.collection:void 0;try{return await Ba({slug:s,cwd:process.cwd(),collection:l,from:o}),0}catch(c){return process.stderr.write(`inkly ${n} failed: ${c.message}
|
|
5811
|
+
`),await B("inkly_cli_failed",{command:n}),await oe(n,c),1}}case"validate":return t.help?(process.stdout.write(Vo),0):(await qn({cwd:process.cwd(),json:!!t.json,strict:!!t.strict})).ok?0:1;case"lock":{if(t.help)return process.stdout.write(Jo),0;try{let a=bn(t,"local");return(await On({cwd:process.cwd(),check:!!t.check,json:!!t.json,manifestPath:a?$m(a,process.cwd()):void 0})).ok?0:1}catch(a){return process.stderr.write(`inkly lock failed: ${a.message}
|
|
5812
|
+
`),await B("inkly_cli_failed",{command:"lock"}),await oe("lock",a),1}}case"version":return t.help?(process.stdout.write(ts),0):(await Fr(),0);case"update":{if(t.help)return process.stdout.write(Xo),0;try{return await Wa({dryRun:!!t["dry-run"]}),0}catch(a){return process.stderr.write(`inkly update failed: ${a.message}
|
|
5813
|
+
`),await B("inkly_cli_failed",{command:"update"}),await oe("update",a),1}}case"doctor":return t.help?(process.stdout.write(Qo),0):(await qa({cwd:process.cwd(),json:!!t.json})).ok?0:1;case"login":{if(t.help)return process.stdout.write(qo),0;try{return await Qa({cwd:process.cwd(),local:process.env.INKLY_LOCAL==="1",token:bn(t,"token"),open:!t["no-open"]}),0}catch(a){return process.stderr.write(`inkly login failed: ${a.message}
|
|
5814
|
+
`),await B("inkly_cli_failed",{command:"login"}),await oe("login",a),1}}case"logout":return t.help?(process.stdout.write(Go),0):(await eo(),0);case"status":return t.help?(process.stdout.write(es),0):(await to({cwd:process.cwd(),json:!!t.json})).loggedIn?0:1;case"sync":{if(t.help)return process.stdout.write(Zo),0;try{return await Yn({cwd:process.cwd(),demo:bn(t,"demo"),dryRun:!!t["dry-run"],json:!!t.json}),0}catch(a){return process.stderr.write(`inkly sync failed: ${a.message}
|
|
5815
|
+
`),await B("inkly_cli_failed",{command:"sync"}),await oe("sync",a),1}}case"snapshot":{if(t.help)return process.stdout.write(Ko),0;try{return await so({cwd:process.cwd(),path:r[0],demo:bn(t,"demo"),json:!!t.json}),0}catch(a){return process.stderr.write(`inkly snapshot failed: ${a.message}
|
|
5816
|
+
`),await B("inkly_cli_failed",{command:"snapshot"}),await oe("snapshot",a),1}}case"capture":{if(t.help)return process.stdout.write(mn),0;try{return await Oo({cwd:process.cwd(),subcommand:r[0],args:t})}catch(a){return process.stderr.write(`inkly capture failed: ${a.message}
|
|
5817
|
+
`),await B("inkly_cli_failed",{command:"capture",subcommand:r[0]}),await oe("capture",a),1}}case"capture-html":{if(t.help)return process.stdout.write(fn),0;try{return await jo({cwd:process.cwd(),subcommand:r[0],args:t})}catch(a){return process.stderr.write(`inkly capture-html failed: ${a.message}
|
|
5818
|
+
`),await B("inkly_cli_failed",{command:"capture-html",subcommand:r[0]}),await oe("capture-html",a),1}}case"skills":{if(t.help&&!r[0])return process.stdout.write(gn),0;try{return await zo({subcommand:r[0],help:!!t.help})}catch(a){return process.stderr.write(`inkly skills failed: ${a.message}
|
|
5819
|
+
`),await B("inkly_cli_failed",{command:"skills",subcommand:r[0]}),await oe("skills",a),1}}case"dev":{if(t.help)return process.stdout.write(Yo),0;let a=t.port,o=typeof a=="number"?a:typeof a=="string"?Number(a):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
|
|
5820
|
+
`),1;try{let s=await ja({cwd:process.cwd(),port:o,path:r[0]});return await new Promise(l=>{let c=()=>{s.close().catch(u=>{process.stderr.write(`inkly dev: error during shutdown: ${u.message}
|
|
5821
|
+
`),B("inkly_cli_failed",{command:"dev.shutdown"}),oe("dev.shutdown",u)}).finally(()=>l())};process.once("SIGINT",c),process.once("SIGTERM",c)}),0}catch(s){return process.stderr.write(`inkly dev failed: ${s.message}
|
|
5822
|
+
`),await B("inkly_cli_failed",{command:"dev"}),await oe("dev",s),1}}default:return process.stderr.write(`inkly: unknown command "${n}"
|
|
5823
|
+
|
|
5824
|
+
${Ho}`),1}}lo();Nm(process.argv.slice(2)).then(async e=>{await B("inkly_cli_exited",{command:process.argv[2]??"(none)",exit_code:e}),await ei(),await co(),process.exit(e)},async e=>{process.stderr.write(`inkly: ${e.message}
|
|
5825
|
+
`),await B("inkly_cli_failed",{command:"main"}),await oe("main",e),await ei(),process.exit(1)});
|