@tailorkit/cli 0.1.0-beta.19 → 0.1.0-beta.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +16 -7
  2. package/package.json +4 -4
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import{fileURLToPath as e}from"node:url";import{dirname as t}from"node:path";const n=e(import.meta.url);t(n);import{createRequire as r}from"node:module";import{cancel as i,confirm as a,intro as o,isCancel as s,log as c,outro as l,select as u,spinner as d,text as f}from"@clack/prompts";import{cac as p}from"cac";import m from"picocolors";import{chmod as h,mkdir as g,mkdtemp as _,readFile as v,readdir as y,realpath as b,rm as x,stat as S,writeFile as C}from"node:fs/promises";import{homedir as w,platform as T}from"node:os";import E from"node:path";import{loadTailorKitConfig as ee}from"@tailorkit/app/config/loader";import{ORPCError as D,ORPCError as O,createORPCClient as te,wrapAsyncIteratorPreservingEventMeta as ne}from"@orpc/client";import{RPCLink as re}from"@orpc/client/fetch";import{z as k}from"zod";import{asSchema as A,uiMessageChunkSchema as j}from"ai";import{RPCLink as ie}from"@orpc/client/websocket";import{createHash as ae}from"node:crypto";import{execFile as oe,spawn as se}from"node:child_process";import{existsSync as M}from"node:fs";import{promisify as ce}from"node:util";import{gzip as le}from"node:zlib";import{Liquid as ue}from"liquidjs";function N(e){return Array.isArray(e)?e:e==null?[]:[e]}function de(e){return!e||typeof e!=`object`?!1:`next`in e&&typeof e.next==`function`&&Symbol.asyncIterator in e&&typeof e[Symbol.asyncIterator]==`function`}function P(e){if(!e)return!1;let t=typeof e;return t===`object`||t===`function`}var fe=`orpc`;Object.getPrototypeOf(async function*(){}).constructor;function pe(e){return P(e)?Object.getPrototypeOf(e)?.constructor:null}function me(e,t){let n={...e};for(let e of t)delete n[e];return n}function F(e,t){return{...e,...t}}function I(e,t,n){t=N(t),n=N(n);let r=e;for(let e of n)e.init&&(r=e.init(r));let i=[...t,...n];for(let e of i)e.apply&&(r=e.apply(r));return[r,i]}var he=class e{"~orpc";constructor(e){this[`~orpc`]=e}static[Symbol.hasInstance](t){return this===e?pe(t)===e||P(t)&&P(t[`~orpc`])&&P(t[`~orpc`].errorMap)&&P(t[`~orpc`].meta)&&(t[`~orpc`].inputSchemas===void 0||Array.isArray(t[`~orpc`].inputSchemas))&&(t[`~orpc`].outputSchemas===void 0||Array.isArray(t[`~orpc`].outputSchemas)):Function.prototype[Symbol.hasInstance].call(this,t)}};function ge(e,t){if(e instanceof he){let[n,r]=I(t.meta,t.metaPlugins,e[`~orpc`].metaPlugins);return new he({...e[`~orpc`],errorMap:F(t.errorMap,e[`~orpc`].errorMap),meta:n,metaPlugins:r})}if(!P(e))return e;let n={};for(let r of Object.keys(e))n[r]=ge(e[r],t);return n}var _e=class extends Error{name=`ValidationError`;issues;invalidData;constructor(e){super(e.message,e),this.issues=e.issues,this.invalidData=e.invalidData}},ve=Symbol.for(`ORPC_HIDDEN_META_PLUGINS`);function L(e){if(P(e))return e[ve]}(class e extends he{constructor(e){super(e)}static create(){return new e({errorMap:{},meta:{}})}meta(...t){let[n,r]=I(this[`~orpc`].meta,this[`~orpc`].metaPlugins,t);return new e({...this[`~orpc`],meta:n,metaPlugins:r})}errors(t){let n=new e({...this[`~orpc`],errorMap:F(this[`~orpc`].errorMap,t)}),r=L(t);return r&&(n=n.meta(...r)),n}input(t){let n=new e({...this[`~orpc`],inputSchemas:[...N(this[`~orpc`].inputSchemas),t]}),r=L(t);return r&&(n=n.meta(...r)),n}output(t){let n=new e({...this[`~orpc`],outputSchemas:[...N(this[`~orpc`].outputSchemas),t]}),r=L(t);return r&&(n=n.meta(...r)),n}router(e){return ge(e,this[`~orpc`])}}).create();var ye=Symbol.for(`ORPC_ASYNC_ITERATOR_OBJECT_SCHEMA_DETAILS`);function be(e,t){return{"~standard":{[ye]:{yieldSchema:e,returnSchema:t},vendor:fe,version:1,validate(n){return de(n)?{value:ne(n,{async mapResult(n){let r=n.done?t:e;if(!r)return n;let i=await r[`~standard`].validate(n.value);if(i.issues)throw new D(`ASYNC_ITERATOR_OBJECT_VALIDATION_FAILED`,{message:`AsyncIteratorObject validation failed`,cause:new _e({issues:i.issues,message:`AsyncIteratorObject validation failed`,invalidData:n.value})});return{done:n.done,value:i.value}}})}:{issues:[{message:`Expect AsyncIteratorObject`,path:[]}]}}}}}var xe=class e{"~orpc";constructor(e){this[`~orpc`]=e}static[Symbol.hasInstance](t){return this===e?pe(t)===e||P(t)&&P(t[`~orpc`])&&P(t[`~orpc`].meta)&&(t[`~orpc`].metaPlugins===void 0||Array.isArray(t[`~orpc`].metaPlugins))&&typeof t[`~orpc`].loader==`function`:Function.prototype[Symbol.hasInstance].call(this,t)}};function Se(e){return e instanceof xe?e[`~orpc`].loader():Promise.resolve({default:e})}var Ce=class e{"~orpc";constructor(e){this[`~orpc`]=e}static[Symbol.hasInstance](t){return this===e?pe(t)===e||t instanceof he&&Array.isArray(t[`~orpc`].orderedMiddlewares)&&typeof t[`~orpc`].handler==`function`:Function.prototype[Symbol.hasInstance].call(this,t)}};function we(e,t){if(e instanceof xe){let[n,r]=I(t.meta,t.metaPlugins,e[`~orpc`].metaPlugins);return new xe({meta:n,metaPlugins:r,async loader(){let{default:n}=await Se(e);return Se(we(n,t))}})}if(e instanceof Ce){let[n,r]=I(t.meta,t.metaPlugins,e[`~orpc`].metaPlugins);return new Ce({...me(t,[`middlewares`,`errorMap`,`meta`,`metaPlugins`]),...e[`~orpc`],meta:n,metaPlugins:r,errorMap:F(t.errorMap,e[`~orpc`].errorMap),orderedMiddlewares:[...t.middlewares.map(e=>({middleware:e,inputSchemasLengthAtUse:0,outputSchemasLengthAtUse:0})),...e[`~orpc`].orderedMiddlewares]})}if(!P(e))return e;let n={};for(let[r,i]of Object.entries(e))n[r]=we(i,t);return n}function Te({onRequest:e,onSseError:t,onSseEvent:n,responseTransformer:r,responseValidator:i,sseDefaultRetryDelay:a,sseMaxRetryAttempts:o,sseMaxRetryDelay:s,sseSleepFn:c,url:l,...u}){let d,f=c??(e=>new Promise(t=>setTimeout(t,e)));return{stream:async function*(){let c=a??3e3,p=0,m=u.signal??new AbortController().signal;for(;!m.aborted;){p++;let a=u.headers instanceof Headers?u.headers:new Headers(u.headers);d!==void 0&&a.set(`Last-Event-ID`,d);try{let t={redirect:`follow`,...u,body:u.serializedBody,headers:a,signal:m},o=new Request(l,t);e&&(o=await e(l,t));let s=await(u.fetch??globalThis.fetch)(o);if(!s.ok)throw Error(`SSE failed: ${s.status} ${s.statusText}`);if(!s.body)throw Error(`No body in SSE response`);let f=s.body.pipeThrough(new TextDecoderStream).getReader(),p=``,h=()=>{try{f.cancel().catch(()=>{})}catch{}};m.addEventListener(`abort`,h);try{for(;;){let{done:e,value:t}=await f.read();if(e)break;p+=t,p=p.replace(/\r\n?/g,`
2
+ import{fileURLToPath as e}from"node:url";import{dirname as t}from"node:path";const n=e(import.meta.url);t(n);import{createRequire as r}from"node:module";import{cancel as i,confirm as a,intro as o,isCancel as s,log as c,outro as l,select as u,spinner as d,text as f}from"@clack/prompts";import{cac as p}from"cac";import m from"picocolors";import{chmod as h,mkdir as g,mkdtemp as _,readFile as v,readdir as y,realpath as b,rm as x,stat as S,writeFile as C}from"node:fs/promises";import{homedir as w,platform as T}from"node:os";import E from"node:path";import{loadTailorKitConfig as ee}from"@tailorkit/app/config/loader";import{ORPCError as D,ORPCError as O,createORPCClient as te,wrapAsyncIteratorPreservingEventMeta as ne}from"@orpc/client";import{RPCLink as re}from"@orpc/client/fetch";import{z as k}from"zod";import{asSchema as A,uiMessageChunkSchema as ie}from"ai";import{RPCLink as ae}from"@orpc/client/websocket";import{createHash as oe}from"node:crypto";import{execFile as se,spawn as ce}from"node:child_process";import{existsSync as le}from"node:fs";import{promisify as ue}from"node:util";import{gzip as de}from"node:zlib";import{Liquid as fe}from"liquidjs";function j(e){return Array.isArray(e)?e:e==null?[]:[e]}function pe(e){return!e||typeof e!=`object`?!1:`next`in e&&typeof e.next==`function`&&Symbol.asyncIterator in e&&typeof e[Symbol.asyncIterator]==`function`}function M(e){if(!e)return!1;let t=typeof e;return t===`object`||t===`function`}var me=`orpc`;Object.getPrototypeOf(async function*(){}).constructor;function he(e){return M(e)?Object.getPrototypeOf(e)?.constructor:null}function ge(e,t){let n={...e};for(let e of t)delete n[e];return n}function N(e,t){return{...e,...t}}function P(e,t,n){t=j(t),n=j(n);let r=e;for(let e of n)e.init&&(r=e.init(r));let i=[...t,...n];for(let e of i)e.apply&&(r=e.apply(r));return[r,i]}var _e=class e{"~orpc";constructor(e){this[`~orpc`]=e}static[Symbol.hasInstance](t){return this===e?he(t)===e||M(t)&&M(t[`~orpc`])&&M(t[`~orpc`].errorMap)&&M(t[`~orpc`].meta)&&(t[`~orpc`].inputSchemas===void 0||Array.isArray(t[`~orpc`].inputSchemas))&&(t[`~orpc`].outputSchemas===void 0||Array.isArray(t[`~orpc`].outputSchemas)):Function.prototype[Symbol.hasInstance].call(this,t)}};function ve(e,t){if(e instanceof _e){let[n,r]=P(t.meta,t.metaPlugins,e[`~orpc`].metaPlugins);return new _e({...e[`~orpc`],errorMap:N(t.errorMap,e[`~orpc`].errorMap),meta:n,metaPlugins:r})}if(!M(e))return e;let n={};for(let r of Object.keys(e))n[r]=ve(e[r],t);return n}var ye=class extends Error{name=`ValidationError`;issues;invalidData;constructor(e){super(e.message,e),this.issues=e.issues,this.invalidData=e.invalidData}},be=Symbol.for(`ORPC_HIDDEN_META_PLUGINS`);function F(e){if(M(e))return e[be]}(class e extends _e{constructor(e){super(e)}static create(){return new e({errorMap:{},meta:{}})}meta(...t){let[n,r]=P(this[`~orpc`].meta,this[`~orpc`].metaPlugins,t);return new e({...this[`~orpc`],meta:n,metaPlugins:r})}errors(t){let n=new e({...this[`~orpc`],errorMap:N(this[`~orpc`].errorMap,t)}),r=F(t);return r&&(n=n.meta(...r)),n}input(t){let n=new e({...this[`~orpc`],inputSchemas:[...j(this[`~orpc`].inputSchemas),t]}),r=F(t);return r&&(n=n.meta(...r)),n}output(t){let n=new e({...this[`~orpc`],outputSchemas:[...j(this[`~orpc`].outputSchemas),t]}),r=F(t);return r&&(n=n.meta(...r)),n}router(e){return ve(e,this[`~orpc`])}}).create();var xe=Symbol.for(`ORPC_ASYNC_ITERATOR_OBJECT_SCHEMA_DETAILS`);function Se(e,t){return{"~standard":{[xe]:{yieldSchema:e,returnSchema:t},vendor:me,version:1,validate(n){return pe(n)?{value:ne(n,{async mapResult(n){let r=n.done?t:e;if(!r)return n;let i=await r[`~standard`].validate(n.value);if(i.issues)throw new D(`ASYNC_ITERATOR_OBJECT_VALIDATION_FAILED`,{message:`AsyncIteratorObject validation failed`,cause:new ye({issues:i.issues,message:`AsyncIteratorObject validation failed`,invalidData:n.value})});return{done:n.done,value:i.value}}})}:{issues:[{message:`Expect AsyncIteratorObject`,path:[]}]}}}}}var Ce=class e{"~orpc";constructor(e){this[`~orpc`]=e}static[Symbol.hasInstance](t){return this===e?he(t)===e||M(t)&&M(t[`~orpc`])&&M(t[`~orpc`].meta)&&(t[`~orpc`].metaPlugins===void 0||Array.isArray(t[`~orpc`].metaPlugins))&&typeof t[`~orpc`].loader==`function`:Function.prototype[Symbol.hasInstance].call(this,t)}};function we(e){return e instanceof Ce?e[`~orpc`].loader():Promise.resolve({default:e})}var Te=class e{"~orpc";constructor(e){this[`~orpc`]=e}static[Symbol.hasInstance](t){return this===e?he(t)===e||t instanceof _e&&Array.isArray(t[`~orpc`].orderedMiddlewares)&&typeof t[`~orpc`].handler==`function`:Function.prototype[Symbol.hasInstance].call(this,t)}};function Ee(e,t){if(e instanceof Ce){let[n,r]=P(t.meta,t.metaPlugins,e[`~orpc`].metaPlugins);return new Ce({meta:n,metaPlugins:r,async loader(){let{default:n}=await we(e);return we(Ee(n,t))}})}if(e instanceof Te){let[n,r]=P(t.meta,t.metaPlugins,e[`~orpc`].metaPlugins);return new Te({...ge(t,[`middlewares`,`errorMap`,`meta`,`metaPlugins`]),...e[`~orpc`],meta:n,metaPlugins:r,errorMap:N(t.errorMap,e[`~orpc`].errorMap),orderedMiddlewares:[...t.middlewares.map(e=>({middleware:e,inputSchemasLengthAtUse:0,outputSchemasLengthAtUse:0})),...e[`~orpc`].orderedMiddlewares]})}if(!M(e))return e;let n={};for(let[r,i]of Object.entries(e))n[r]=Ee(i,t);return n}function De({onRequest:e,onSseError:t,onSseEvent:n,responseTransformer:r,responseValidator:i,sseDefaultRetryDelay:a,sseMaxRetryAttempts:o,sseMaxRetryDelay:s,sseSleepFn:c,url:l,...u}){let d,f=c??(e=>new Promise(t=>setTimeout(t,e)));return{stream:async function*(){let c=a??3e3,p=0,m=u.signal??new AbortController().signal;for(;!m.aborted;){p++;let a=u.headers instanceof Headers?u.headers:new Headers(u.headers);d!==void 0&&a.set(`Last-Event-ID`,d);try{let t={redirect:`follow`,...u,body:u.serializedBody,headers:a,signal:m},o=new Request(l,t);e&&(o=await e(l,t));let s=await(u.fetch??globalThis.fetch)(o);if(!s.ok)throw Error(`SSE failed: ${s.status} ${s.statusText}`);if(!s.body)throw Error(`No body in SSE response`);let f=s.body.pipeThrough(new TextDecoderStream).getReader(),p=``,h=()=>{try{f.cancel().catch(()=>{})}catch{}};m.addEventListener(`abort`,h);try{for(;;){let{done:e,value:t}=await f.read();if(e)break;p+=t,p=p.replace(/\r\n?/g,`
3
3
  `);let a=p.split(`
4
4
 
5
5
  `);p=a.pop()??``;for(let e of a){let t=e.split(`
6
6
  `),a=[],o;for(let e of t)if(e.startsWith(`data:`))a.push(e.replace(/^data:\s*/,``));else if(e.startsWith(`event:`))o=e.replace(/^event:\s*/,``);else if(e.startsWith(`id:`))d=e.replace(/^id:\s*/,``);else if(e.startsWith(`retry:`)){let t=Number.parseInt(e.replace(/^retry:\s*/,``),10);Number.isNaN(t)||(c=t)}let s,l=!1;if(a.length){let e=a.join(`
7
- `);try{s=JSON.parse(e),l=!0}catch{s=e}}l&&(i&&await i(s),r&&(s=await r(s))),n?.({data:s,event:o,id:d,retry:c}),a.length&&(yield s)}}}finally{m.removeEventListener(`abort`,h),f.releaseLock()}break}catch(e){if(t?.(e),o!==void 0&&p>=o)break;let n=Math.min(c*2**(p-1),s??3e4);await f(n)}}}()}}var Ee=e=>{switch(e){case`label`:return`.`;case`matrix`:return`;`;case`simple`:return`,`;default:return`&`}},De=e=>{switch(e){case`form`:return`,`;case`pipeDelimited`:return`|`;case`spaceDelimited`:return`%20`;default:return`,`}},Oe=e=>{switch(e){case`label`:return`.`;case`matrix`:return`;`;case`simple`:return`,`;default:return`&`}},ke=({allowReserved:e,explode:t,name:n,style:r,value:i})=>{if(!t){let t=(e?i:i.map(e=>encodeURIComponent(e))).join(De(r));switch(r){case`label`:return`.${t}`;case`matrix`:return`;${n}=${t}`;case`simple`:return t;default:return`${n}=${t}`}}let a=Ee(r),o=i.map(t=>r===`label`||r===`simple`?e?t:encodeURIComponent(t):Ae({allowReserved:e,name:n,value:t})).join(a);return r===`label`||r===`matrix`?a+o:o},Ae=({allowReserved:e,name:t,value:n})=>{if(n==null)return``;if(typeof n==`object`)throw Error("Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.");return`${t}=${e?n:encodeURIComponent(n)}`},je=({allowReserved:e,explode:t,name:n,style:r,value:i,valueOnly:a})=>{if(i instanceof Date)return a?i.toISOString():`${n}=${i.toISOString()}`;if(r!==`deepObject`&&!t){let t=[];Object.entries(i).forEach(([n,r])=>{t=[...t,n,e?r:encodeURIComponent(r)]});let a=t.join(`,`);switch(r){case`form`:return`${n}=${a}`;case`label`:return`.${a}`;case`matrix`:return`;${n}=${a}`;default:return a}}let o=Oe(r),s=Object.entries(i).map(([t,i])=>Ae({allowReserved:e,name:r===`deepObject`?`${n}[${t}]`:t,value:i})).join(o);return r===`label`||r===`matrix`?o+s:s},Me=/\{[^{}]+\}/g,Ne=({path:e,url:t})=>{let n=t,r=t.match(Me);if(r)for(let t of r){let r=!1,i=t.substring(1,t.length-1),a=`simple`;i.endsWith(`*`)&&(r=!0,i=i.substring(0,i.length-1)),i.startsWith(`.`)?(i=i.substring(1),a=`label`):i.startsWith(`;`)&&(i=i.substring(1),a=`matrix`);let o=e[i];if(o==null)continue;if(Array.isArray(o)){n=n.replace(t,ke({explode:r,name:i,style:a,value:o}));continue}if(typeof o==`object`){n=n.replace(t,je({explode:r,name:i,style:a,value:o,valueOnly:!0}));continue}if(a===`matrix`){n=n.replace(t,`;${Ae({name:i,value:o})}`);continue}let s=encodeURIComponent(a===`label`?`.${o}`:o);n=n.replace(t,s)}return n},Pe=({baseUrl:e,path:t,query:n,querySerializer:r,url:i})=>{let a=i.startsWith(`/`)?i:`/${i}`,o=(e??``)+a;t&&(o=Ne({path:t,url:o}));let s=n?r(n):``;return s.startsWith(`?`)&&(s=s.substring(1)),s&&(o+=`?${s}`),o};function Fe(e){let t=e.body!==void 0;if(t&&e.bodySerializer)return`serializedBody`in e?e.serializedBody!==void 0&&e.serializedBody!==``?e.serializedBody:null:e.body===``?null:e.body;if(t)return e.body}var Ie=async(e,t)=>{let n=typeof t==`function`?await t(e):t;if(n)return e.scheme===`bearer`?`Bearer ${n}`:e.scheme===`basic`?`Basic ${btoa(n)}`:n},Le={bodySerializer:e=>JSON.stringify(e,(e,t)=>typeof t==`bigint`?t.toString():t)},Re=({parameters:e={},...t}={})=>n=>{let r=[];if(n&&typeof n==`object`)for(let i in n){let a=n[i];if(a==null)continue;let o=e[i]||t;if(Array.isArray(a)){let e=ke({allowReserved:o.allowReserved,explode:!0,name:i,style:`form`,value:a,...o.array});e&&r.push(e)}else if(typeof a==`object`){let e=je({allowReserved:o.allowReserved,explode:!0,name:i,style:`deepObject`,value:a,...o.object});e&&r.push(e)}else{let e=Ae({allowReserved:o.allowReserved,name:i,value:a});e&&r.push(e)}}return r.join(`&`)},ze=e=>{if(!e)return`stream`;let t=e.split(`;`)[0]?.trim();if(t){if(t.startsWith(`application/json`)||t.endsWith(`+json`))return`json`;if(t===`multipart/form-data`)return`formData`;if([`application/`,`audio/`,`image/`,`video/`].some(e=>t.startsWith(e)))return`blob`;if(t.startsWith(`text/`))return`text`}},Be=(e,t)=>t?!!(e.headers.has(t)||e.query?.[t]||e.headers.get(`Cookie`)?.includes(`${t}=`)):!1;async function Ve(e){for(let t of e.security??[]){if(Be(e,t.name))continue;let n=await Ie(t,e.auth);if(!n)continue;let r=t.name??`Authorization`;switch(t.in){case`query`:e.query||={},e.query[r]=n;break;case`cookie`:e.headers.append(`Cookie`,`${r}=${n}`);break;default:e.headers.set(r,n)}}}var He=e=>Pe({baseUrl:e.baseUrl,path:e.path,query:e.query,querySerializer:typeof e.querySerializer==`function`?e.querySerializer:Re(e.querySerializer),url:e.url}),Ue=(e,t)=>{let n={...e,...t};return n.baseUrl?.endsWith(`/`)&&(n.baseUrl=n.baseUrl.substring(0,n.baseUrl.length-1)),n.headers=Ge(e.headers,t.headers),n},We=e=>{let t=[];return e.forEach((e,n)=>{t.push([n,e])}),t},Ge=(...e)=>{let t=new Headers;for(let n of e){if(!n)continue;let e=n instanceof Headers?We(n):Object.entries(n);for(let[n,r]of e)if(r===null)t.delete(n);else if(Array.isArray(r))for(let e of r)t.append(n,e);else r!==void 0&&t.set(n,typeof r==`object`?JSON.stringify(r):r)}return t},Ke=class{fns=[];clear(){this.fns=[]}eject(e){let t=this.getInterceptorIndex(e);this.fns[t]&&(this.fns[t]=null)}exists(e){let t=this.getInterceptorIndex(e);return!!this.fns[t]}getInterceptorIndex(e){return typeof e==`number`?this.fns[e]?e:-1:this.fns.indexOf(e)}update(e,t){let n=this.getInterceptorIndex(e);return this.fns[n]?(this.fns[n]=t,e):!1}use(e){return this.fns.push(e),this.fns.length-1}},qe=()=>({error:new Ke,request:new Ke,response:new Ke}),Je=Re({allowReserved:!1,array:{explode:!0,style:`form`},object:{explode:!0,style:`deepObject`}}),Ye={"Content-Type":`application/json`},Xe=(e={})=>({...Le,headers:Ye,parseAs:`auto`,querySerializer:Je,...e}),R=((e={})=>{let t=Ue(Xe(),e),n=()=>({...t}),r=e=>(t=Ue(t,e),n()),i=qe(),a=async e=>{let n={...t,...e,fetch:e.fetch??t.fetch??globalThis.fetch,headers:Ge(t.headers,e.headers),serializedBody:void 0};n.security&&await Ve(n),n.requestValidator&&await n.requestValidator(n),n.body!==void 0&&n.bodySerializer&&(n.serializedBody=n.bodySerializer(n.body)),(n.body===void 0||n.serializedBody===``)&&n.headers.delete(`Content-Type`);let r=n;return{opts:r,url:He(r)}},o=async e=>{let n=e.throwOnError??t.throwOnError,r=e.responseStyle??t.responseStyle,o,s;try{let{opts:t,url:n}=await a(e),r={redirect:`follow`,...t,body:Fe(t)};o=new Request(n,r);for(let e of i.request.fns)e&&(o=await e(o,t));let c=t.fetch;s=await c(o);for(let e of i.response.fns)e&&(s=await e(s,o,t));let l={request:o,response:s};if(s.ok){let e=(t.parseAs===`auto`?ze(s.headers.get(`Content-Type`)):t.parseAs)??`json`;if(s.status===204||s.headers.get(`Content-Length`)===`0`){let n;switch(e){case`arrayBuffer`:case`blob`:case`text`:n=await s[e]();break;case`formData`:n=new FormData;break;case`stream`:n=s.body;break;default:n={}}return t.responseStyle===`data`?n:{data:n,...l}}let n;switch(e){case`arrayBuffer`:case`blob`:case`formData`:case`text`:n=await s[e]();break;case`json`:{let e=await s.text();n=e?JSON.parse(e):{};break}case`stream`:return t.responseStyle===`data`?s.body:{data:s.body,...l}}return e===`json`&&(t.responseValidator&&await t.responseValidator(n),t.responseTransformer&&(n=await t.responseTransformer(n))),t.responseStyle===`data`?n:{data:n,...l}}let u=await s.text(),d;try{d=JSON.parse(u)}catch{}throw d??u}catch(t){let a=t;for(let t of i.error.fns)t&&(a=await t(a,s,o,e));if(a||={},n)throw a;return r===`data`?void 0:{error:a,request:o,response:s}}},s=e=>t=>o({...t,method:e}),c=e=>async t=>{let{opts:n,url:r}=await a(t);return Te({...n,body:n.body,method:e,onRequest:async(e,t)=>{let r=new Request(e,t);for(let e of i.request.fns)e&&(r=await e(r,n));return r},serializedBody:Fe(n),url:r})};return{buildUrl:e=>He({...t,...e}),connect:s(`CONNECT`),delete:s(`DELETE`),get:s(`GET`),getConfig:n,head:s(`HEAD`),interceptors:i,options:s(`OPTIONS`),patch:s(`PATCH`),post:s(`POST`),put:s(`PUT`),request:o,setConfig:r,sse:{connect:c(`CONNECT`),delete:c(`DELETE`),get:c(`GET`),head:c(`HEAD`),options:c(`OPTIONS`),patch:c(`PATCH`),post:c(`POST`),put:c(`PUT`),trace:c(`TRACE`)},trace:s(`TRACE`)}})(Xe({baseUrl:`https://tailorkit.dev/api/platform`})),Ze=e=>(e.client??R).sse.post({url:`/app-agent/chat`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),Qe=e=>(e.client??R).post({url:`/apps/list`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),$e=e=>(e.client??R).post({url:`/apps/{appId}/lookup`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),et=e=>(e.client??R).post({url:`/apps`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),tt=e=>(e.client??R).delete({url:`/apps/{appId}`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),nt=e=>(e.client??R).put({url:`/apps/{appId}`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),rt=e=>(e.client??R).post({url:`/apps/{appId}/deploy`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),it=e=>(e.client??R).post({url:`/cli-auth/approve`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),at=e=>(e.client??R).post({url:`/cli-auth/deny`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),ot=e=>(e.client??R).post({url:`/cli-auth/poll`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),st=e=>(e.client??R).post({url:`/cli-auth/start`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),ct=e=>(e.client??R).post({url:`/cli-auth/verify-token`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),lt=e=>(e.client??R).post({url:`/deployments/list`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),ut=e=>(e.client??R).post({url:`/deployments/{deploymentId}/lookup`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),dt=e=>(e.client??R).post({url:`/deployments`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),ft=e=>(e.client??R).post({url:`/deployments/{deploymentId}`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),pt=e=>(e.client??R).post({url:`/preview/start`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),mt=e=>(e.client??R).post({url:`/preview/{sessionId}/stop`,...e,headers:{"Content-Type":`application/json`,...e.headers}});Object.entries({$body_:`body`,$headers_:`headers`,$path_:`path`,$query_:`query`});var ht=class e extends Ce{meta(...t){let[n,r]=I(this[`~orpc`].meta,this[`~orpc`].metaPlugins,t);return new e({...this[`~orpc`],meta:n,metaPlugins:r})}errors(t){let n=new e({...this[`~orpc`],errorMap:F(this[`~orpc`].errorMap,t)}),r=L(t);return r&&(n=n.meta(...r)),n}use(t){let n=new e({...this[`~orpc`],errorMap:F(t[`~orpc`]?.errorMap,this[`~orpc`].errorMap),orderedMiddlewares:[...this[`~orpc`].orderedMiddlewares,{middleware:t,inputSchemasLengthAtUse:this[`~orpc`].inputSchemas?.length,outputSchemasLengthAtUse:this[`~orpc`].outputSchemas?.length}]});return t[`~orpc`]?.metaPlugins&&(n=n.meta(...t[`~orpc`]?.metaPlugins)),n}};function gt(e){let t=((...t)=>e(...t));return t[`~orpc`]=e[`~orpc`],Object.defineProperty(t,"name",{value:e.name}),t.adaptInput=t=>{let n=gt((n,r,...i)=>e(n,t(r),...i));return n[`~orpc`]=e[`~orpc`],Object.defineProperty(n,"name",{value:e.name}),n},t.errors=e=>{let n=gt(t);return n[`~orpc`]={...t[`~orpc`],errorMap:F(t[`~orpc`]?.errorMap,e)},n},t.use=n=>{let r=gt((t,...r)=>e({...t,async next(e){let i=await n({...t,context:{...t.context,...e?.context},next(n,...r){return t.next({...t,context:{...e?.context,...n?.context}},...r)}},...r);return{...i,context:{...e?.context,...i.context}}}},...r));return r[`~orpc`]={...t[`~orpc`],errorMap:F(n[`~orpc`]?.errorMap,t[`~orpc`]?.errorMap),metaPlugins:[...N(e[`~orpc`]?.metaPlugins),...N(n[`~orpc`]?.metaPlugins)]},Object.defineProperty(r,"name",{value:`${e.name} + ${n.name}`}),r},t}var _t=class e{"~orpc";constructor(e){this[`~orpc`]=e}static create(){return new e({errorMap:{},meta:{},orderedMiddlewares:[]})}$context(){return this}$config(t){return new e({...this[`~orpc`],...t})}meta(...t){let[n,r]=I(this[`~orpc`].meta,this[`~orpc`].metaPlugins,t);return new e({...this[`~orpc`],meta:n,metaPlugins:r})}errors(t){let n=new e({...this[`~orpc`],errorMap:F(this[`~orpc`].errorMap,t)}),r=L(t);return r&&(n=n.meta(...r)),n}use(t){let n=new e({...this[`~orpc`],errorMap:F(t[`~orpc`]?.errorMap??{},this[`~orpc`].errorMap),orderedMiddlewares:[...this[`~orpc`].orderedMiddlewares,{middleware:t,inputSchemasLengthAtUse:this[`~orpc`].inputSchemas?.length,outputSchemasLengthAtUse:this[`~orpc`].outputSchemas?.length}]});return t[`~orpc`]?.metaPlugins&&(n=n.meta(...t[`~orpc`]?.metaPlugins)),n}middleware(e){let t=[...this[`~orpc`].orderedMiddlewares.map(({middleware:e})=>e),e],n=gt(t.shift());for(let e of t)n=n.use(e);return n[`~orpc`]={...n[`~orpc`],errorMap:this[`~orpc`].errorMap,metaPlugins:[...N(this[`~orpc`].metaPlugins),...N(e[`~orpc`]?.metaPlugins)]},n}input(t){let n=new e({...this[`~orpc`],inputSchemas:[...N(this[`~orpc`].inputSchemas),t]}),r=L(t);return r&&(n=n.meta(...r)),n}output(t){let n=new e({...this[`~orpc`],outputSchemas:[...N(this[`~orpc`].outputSchemas),t]}),r=L(t);return r&&(n=n.meta(...r)),n}handler(e){let t=new ht({...this[`~orpc`],handler:e}),n=L(e);return n&&(t=t.meta(...n)),t}router(e){return we(e,{...this[`~orpc`],middlewares:this[`~orpc`].orderedMiddlewares.map(({middleware:e})=>e)})}lazy(e){return new xe({loader:async()=>{let{default:t}=await e();return{default:this.router(t)}},meta:this[`~orpc`].meta,metaPlugins:this[`~orpc`].metaPlugins})}}.create(),vt=A(j),yt=k.custom(async e=>(await vt.validate?.(e))?.success===!0).describe(`An AI SDK UIMessageChunk. Fields depend on the chunk type.`),bt=k.array(k.object({id:k.string().min(1),role:k.enum([`user`,`assistant`]),parts:k.array(k.looseObject({type:k.string()})).min(1),metadata:k.unknown().optional()})).min(1),xt=k.object({appId:k.string().min(1),messages:bt}),z=k.string().regex(/^[A-Za-z0-9_-]{1,128}$/u),St=k.string().max(349528).regex(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/u),Ct=e=>[...e].some(e=>(e.codePointAt(0)??0)<32),wt=k.object({path:k.string().min(1).max(1024).refine(e=>new TextEncoder().encode(e).byteLength<=1024,{message:`Preview path exceeds 1024 UTF-8 bytes`}),contentType:k.string().min(1).max(255).refine(e=>!/[\r\n]/u.test(e),{message:`Invalid preview content type`}),size:k.number().int().min(0).max(1048576),chunks:k.number().int().min(0).max(4),sha256:k.string().regex(/^[a-f0-9]{64}$/u)}),Tt=k.object({files:k.array(wt).max(100),views:k.array(k.object({slot:k.string().min(1).max(255),path:k.string().startsWith(`/`).max(1024),instances:k.literal(!0).optional(),disabled:k.literal(!0).optional()})).max(1e3).optional()}).superRefine((e,t)=>{let n=new Set,r=0;for(let[i,a]of e.files.entries())(a.path.startsWith(`/`)||a.path.includes(`\\`)||a.path.split(`/`).some(e=>!e||e===`.`||e===`..`)||Ct(a.path)||n.has(a.path))&&t.addIssue({code:`custom`,message:`Invalid or duplicate preview path`,path:[`files`,i,`path`]}),a.chunks!==Math.ceil(a.size/262144)&&t.addIssue({code:`custom`,message:`Invalid preview chunk count`,path:[`files`,i,`chunks`]}),n.add(a.path),r+=a.size;n.has(`client.js`)||t.addIssue({code:`custom`,message:`Missing client.js`}),r>10485760&&t.addIssue({code:`custom`,message:`Preview build exceeds 10 MiB`})}),Et=k.discriminatedUnion(`type`,[k.object({type:k.literal(`begin`),buildId:z,revision:k.number().int().positive(),manifest:Tt}),k.object({type:k.literal(`chunk`),revision:k.number().int().positive(),fileIndex:k.number().int().min(0).max(99),chunkIndex:k.number().int().min(0).max(3),base64:St}),k.object({type:k.literal(`complete`),revision:k.number().int().positive()}),k.object({type:k.literal(`ended`)})]);k.object({sessionId:k.uuid(),expiresAt:k.string().min(1),websocketUrl:k.url(),token:k.string().min(1)});var Dt=k.object({manifest:Tt}),Ot=k.object({buildId:z,fileIndex:k.number().int().min(0).max(99),chunkIndex:k.number().int().min(0).max(3),base64:St}),kt=k.object({buildId:z}),At=k.object({accepted:k.literal(!0)}),jt=k.object({revision:k.number().int().positive()});function Mt(e){let t=te(new ie({connect:()=>e}));return{beginBuild:async e=>kt.parse(await t.beginBuild(Dt.parse(e))),uploadChunk:async e=>At.parse(await t.uploadChunk(Ot.parse(e))),commitBuild:async e=>jt.parse(await t.commitBuild({buildId:z.parse(e.buildId)})),heartbeat:async()=>At.parse(await t.heartbeat()),subscribe:async()=>{let e=await t.subscribe();return(async function*(){for await(let t of e)yield Et.parse(t)})()}}}function B(e){let t=URL.canParse(e.url)?new URL(e.url):void 0,n=new re({origin:t?.origin,async fetch(t,n){let r=await(typeof e.headers==`function`?e.headers():e.headers),i=new Headers(r);return new Headers(n.headers).forEach((e,t)=>{i.set(t,e)}),(e.fetch??fetch)(t,{...n,headers:i})},url:t?`${t.pathname}${t.search}${t.hash}`:e.url});return te(n)}var Nt=32,Pt=64,Ft=255,It=16,Lt=100,Rt=16384,zt=512,Bt=/^[A-Za-z][A-Za-z0-9_-]{0,63}$/u;function Vt(e){if(!Bt.test(e))throw TypeError(`TailorKit scope names must start with a letter and contain only letters, numbers, "_", or "-".`);return e}function Ht(e){if(!qt(e))throw TypeError(`TailorKit scope values must be nonempty plain JSON objects.`);let t=0,n=Gt(e,0,!0,new Set,()=>{if(t+=1,t>zt)throw TypeError(`TailorKit scope values may contain at most ${zt} JSON values.`)}),r=JSON.stringify(n);if(r===void 0||new TextEncoder().encode(r).byteLength>Rt)throw TypeError(`TailorKit scope values may not exceed ${Rt} bytes of JSON.`);return n}function Ut(e){if(!qt(e))throw TypeError(`TailorKit scope identity must contain a name and value.`);if(Kt(e,`TailorKit scope identity must contain data properties.`).length!==2||!Object.hasOwn(e,`name`)||!Object.hasOwn(e,`value`))throw TypeError(`TailorKit scope identity must contain only a name and value.`);let t=Object.getOwnPropertyDescriptor(e,`name`)?.value,n=Object.getOwnPropertyDescriptor(e,`value`)?.value;if(typeof t!=`string`)throw TypeError(`TailorKit scope identity must contain a name and value.`);return Vt(t),{name:t,value:Ht(n)}}function Wt(e,t){let n=t??Object.keys(e);if(n.length===0)throw TypeError(`At least one TailorKit scope must be selected.`);let r=[],i=new Set;for(let t of n){if(Vt(t),i.has(t))continue;if(i.add(t),!Object.hasOwn(e,t))throw TypeError(`TailorKit scope "${t}" is not available for this request.`);let n=e[t];if(!n)throw TypeError(`TailorKit scope "${t}" is not available for this request.`);r.push({name:t,value:n})}if(r.length===0)throw TypeError(`At least one TailorKit scope must be selected.`);return r}function Gt(e,t,n,r,i){if(i(),e===null||typeof e==`boolean`||typeof e==`string`){if(typeof e==`string`&&e.length>Ft)throw TypeError(`TailorKit scope strings may not exceed ${Ft} characters.`);return e}if(typeof e==`number`){if(!Number.isFinite(e)||Number.isInteger(e)&&!Number.isSafeInteger(e))throw TypeError(`TailorKit scope numbers must be finite and safe when integral.`);if(Object.is(e,-0))throw TypeError(`TailorKit scope numbers may not be negative zero.`);return e}if(typeof e!=`object`)throw TypeError(`TailorKit scope values must contain only JSON values.`);if(t>It)throw TypeError(`TailorKit scope values may be nested at most ${It} levels deep.`);if(r.has(e))throw TypeError(`TailorKit scope values may not contain cycles.`);if(r.add(e),Array.isArray(e)){if(Object.getPrototypeOf(e)!==Array.prototype)throw TypeError(`TailorKit scope arrays must be standard arrays.`);if(e.length>Lt)throw TypeError(`TailorKit scope arrays may contain at most ${Lt} items.`);let n=Reflect.ownKeys(e);if(n.length!==e.length+1||!n.includes(`length`)||n.some(e=>typeof e!=`string`))throw TypeError(`TailorKit scope arrays must be dense and have no extra properties.`);let a=[];for(let n=0;n<e.length;n+=1){let o=Object.getOwnPropertyDescriptor(e,String(n));if(!o?.enumerable||!(`value`in o))throw TypeError(`TailorKit scope arrays must contain enumerable data items.`);a.push(Gt(o.value,t+1,!1,r,i))}return r.delete(e),Object.freeze(a)}if(!qt(e))throw TypeError(`TailorKit scope objects must be plain JSON objects.`);let a=Kt(e,`TailorKit scope objects must contain data properties.`);if(n&&a.length===0)throw TypeError(`TailorKit scope values must be nonempty plain JSON objects.`);if(a.length>Nt)throw TypeError(`TailorKit scope objects may contain at most ${Nt} properties.`);let o=Object.fromEntries(a.sort(([e],[t])=>Jt(e,t)).map(([e,n])=>[e,Gt(n,t+1,!1,r,i)]));return r.delete(e),Object.freeze(o)}function Kt(e,t){let n=Reflect.ownKeys(e);if(n.some(e=>typeof e!=`string`))throw TypeError(t);let r=[];for(let i of n){if(i===`__proto__`)throw TypeError(`TailorKit scope property names may not be "__proto__".`);if(i.length===0||i.length>Pt)throw TypeError(`TailorKit scope property names must be 1 to ${Pt} characters.`);let n=Object.getOwnPropertyDescriptor(e,i);if(!n?.enumerable||!(`value`in n))throw TypeError(t);r.push([i,n.value])}return r}function qt(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Jt(e,t){return e<t?-1:+(e>t)}var Yt=k.string().regex(/^[A-Za-z0-9_-]{43}$/u);k.array(Yt).max(20),k.enum([`accept`,`cancel`]);var V=_t.$context();function Xt(e){if(!e.tailorkit)throw new O(`UNAUTHORIZED`,{message:`Unauthorized.`});return e.tailorkit}function H(e,t){let n=Xt(e).scopes,r=t===void 0?Object.keys(n):[t];if(r.length!==1)throw new O(`BAD_REQUEST`,{message:`Choose one TailorKit scope for this operation.`});try{return Wt(n,r)[0]}catch(e){throw new O(`BAD_REQUEST`,{message:e instanceof Error?e.message:`Invalid TailorKit scope selection.`})}}function Zt(e,t){try{return Wt(Xt(e).scopes,t)}catch(e){throw new O(`BAD_REQUEST`,{message:e instanceof Error?e.message:`Invalid TailorKit scope selection.`})}}function Qt(e){let[t,n]=e.headers.get(`authorization`)?.split(` `)??[];if(t!==`Bearer`||!n)throw new O(`UNAUTHORIZED`,{message:`Missing CLI deploy token.`});return n}var U=V.middleware(async({context:e,next:t})=>{let n=await ct({body:{deployToken:Qt(e.request)},client:e.platform,headers:e.platformHeaders}),r=`data`in n?n.data:n;if(!r?.scope)throw new O(`UNAUTHORIZED`,{message:`Invalid CLI deploy token.`});let i;try{let t=Ut(r.scope);if(!Object.hasOwn(e.scopeSchemas,t.name))throw TypeError(`CLI token uses an undeclared scope.`);i=Object.freeze({[t.name]:t.value})}catch{throw new O(`UNAUTHORIZED`,{message:`Invalid CLI deploy token.`})}return t({context:{tailorkit:{scopes:i}}})}),$t=V.middleware(async({context:e,next:t})=>{let n=await e.authenticate({request:e.request});if(!n)throw new O(`UNAUTHORIZED`,{message:`Unauthorized.`});return t({context:{tailorkit:n}})});V.use(U).input(xt).output(be(yt)).handler(async function*({context:e,input:t,signal:n}){let r=new AbortController,i=n?AbortSignal.any([n,r.signal]):r.signal;try{let n,r=!1,{stream:a}=await Ze({body:{...t,deployToken:Qt(e.request)},client:e.platform,headers:e.platformHeaders,signal:i,sseMaxRetryAttempts:1,onSseError:e=>{n=e}});for await(let e of a){let t=await yt.parseAsync(e);(t.type===`finish`||t.type===`error`)&&(r=!0),yield t}if(i?.throwIfAborted(),n)throw new O(`BAD_GATEWAY`,{message:`The app agent stream failed. Try again.`});if(!r)throw new O(`BAD_GATEWAY`,{message:`The agent stream ended unexpectedly. Try again.`})}finally{r.abort()}});var en=async(e,t)=>{if(e===void 0)return t;let n=await e[`~standard`].validate(t);if(`issues`in n)throw new O(`BAD_REQUEST`,{message:`Invalid TailorKit payload`});return n.value};V.use($t).input(k.object({input:k.unknown().optional(),path:k.string()})).handler(async({context:e,input:t})=>{let n=e.actions.get(t.path);if(n===void 0)throw new O(`NOT_FOUND`,{message:`Action not found`});let r=await en(n.definition.input,t.input),i=await n.handler({context:Xt(e).actionContext,input:r});return en(n.definition.output,i)});var tn=k.object({page:k.number().int().min(1).optional(),pageSize:k.number().int().min(1).max(100).optional()}),nn=k.object({description:k.string().nullable(),name:k.string()});V.use(U).input(nn).handler(async({context:e,input:t})=>{let{data:n}=await et({responseStyle:`fields`,throwOnError:!0,body:{...t,scope:H(e)},client:e.platform,headers:e.platformHeaders});return n}),V.use(U).input(k.object({appId:k.string()})).handler(async({context:e,input:t})=>await tt({body:{scope:H(e)},client:e.platform,headers:e.platformHeaders,path:{appId:t.appId}})),V.use(U).input(k.object({appId:k.string(),deploymentId:k.string()})).handler(async({context:e,input:t})=>await rt({body:{deploymentId:t.deploymentId,scope:H(e)},client:e.platform,headers:e.platformHeaders,path:{appId:t.appId}})),V.use(U).input(k.object({appId:k.string(),scopes:k.array(k.string()).optional()})).handler(async({context:e,input:t})=>await $e({body:{scopes:Zt(e,t.scopes)},client:e.platform,headers:e.platformHeaders,path:{appId:t.appId}})),V.use(U).input(tn.extend({scopes:k.array(k.string()).optional()}).optional()).handler(async({context:e,input:t})=>{let{data:n}=await Qe({responseStyle:`fields`,throwOnError:!0,client:e.platform,headers:e.platformHeaders,body:{page:t?.page,pageSize:t?.pageSize,scopes:Zt(e,t?.scopes)}});return n}),V.use(U).input(k.object({appId:k.string()}).extend(nn.shape)).handler(async({context:e,input:t})=>await nt({body:{description:t.description,name:t.name,scope:H(e)},client:e.platform,headers:e.platformHeaders,path:{appId:t.appId}}));var rn=async e=>{try{return await e}catch(e){throw typeof e==`string`&&e.toLowerCase()===`unauthorized`?new O(`UNAUTHORIZED`,{message:`TailorKit platform rejected the host project key. Check TAILORKIT_PROJECT_KEY.`}):e}};V.use($t).input(k.object({scope:k.string().min(1),userCode:k.string().min(1)})).handler(async({context:e,input:t})=>await rn(it({body:{scope:H(e,t.scope),userCode:t.userCode},client:e.platform,headers:e.platformHeaders}))),V.use($t).input(k.object({userCode:k.string().min(1)})).handler(async({context:e,input:t})=>await rn(at({body:{userCode:t.userCode},client:e.platform,headers:e.platformHeaders}))),V.input(k.object({deviceCode:k.string().min(1)})).handler(async({context:e,input:t})=>await rn(ot({body:{deviceCode:t.deviceCode},client:e.platform,headers:e.platformHeaders}))),V.input(k.object({})).handler(async({context:e})=>await rn(st({body:{},client:e.platform,headers:e.platformHeaders}))),V.input(k.object({})).use(U).handler(({context:e})=>({scope:H(e)}));var an=k.object({page:k.number().int().min(1).optional(),pageSize:k.number().int().min(1).max(100).optional()}),on=k.object({checksum:k.string(),contentLength:k.number().int().min(1),contentType:k.literal(`application/javascript`),encoding:k.literal(`utf-8`),objectKey:k.literal(`client.js`)}),sn=on.extend({objectKey:k.literal(`server.js`)}),cn=k.object({checksum:k.string(),contentLength:k.number().int().min(1).max(262144),contentType:k.enum([`image/svg+xml`,`image/png`,`image/webp`])}),ln=k.tuple([on]),un=k.object({dark:cn.optional(),light:cn.optional()}).optional(),dn=e=>{if(e instanceof Error)return e.message;if(typeof e==`string`)return e;if(e&&typeof e==`object`&&`message`in e){let t=e.message;return typeof t==`string`?t:void 0}},fn=e=>dn(e)?.toLowerCase().includes(`not found`)??!1,pn=e=>{throw fn(e)?new O(`NOT_FOUND`,{message:`App not found.`}):e};V.use(U).input(k.object({appId:k.string(),assets:ln,views:k.array(k.object({slot:k.string().min(1).max(255),path:k.string().startsWith(`/`).max(1024),instances:k.literal(!0).optional(),disabled:k.literal(!0).optional()})).max(1e3).optional(),server:sn.optional(),logos:un})).handler(async({context:e,input:t})=>{try{return await dt({body:{appId:t.appId,assets:t.assets,views:t.views,server:t.server,logos:t.logos,scope:H(e)},client:e.platform,headers:e.platformHeaders})}catch(e){pn(e)}}),V.use(U).input(k.object({deploymentId:k.string(),scopes:k.array(k.string()).optional()})).handler(async({context:e,input:t})=>await ut({body:{scopes:Zt(e,t.scopes)},client:e.platform,headers:e.platformHeaders,path:{deploymentId:t.deploymentId}})),V.use(U).input(k.object({appId:k.string(),scopes:k.array(k.string()).optional()}).merge(an)).handler(async({context:e,input:t})=>await lt({client:e.platform,headers:e.platformHeaders,body:{appId:t.appId,page:t.page,pageSize:t.pageSize,scopes:Zt(e,t.scopes)}})),V.use(U).input(k.object({deploymentId:k.string(),rollout:k.boolean().optional()})).handler(async({context:e,input:t})=>await ft({body:{scope:H(e),rollout:t.rollout},client:e.platform,headers:e.platformHeaders,path:{deploymentId:t.deploymentId}}));function mn(e){if(!e||typeof e!=`object`)return!1;if(`data`in e&&e.data&&typeof e.data==`object`&&`reason`in e.data&&e.data.reason===`ACTIVE_PREVIEW_EXISTS`)return!0;let t=`message`in e&&typeof e.message==`string`?e.message:``;return/active preview already exists|preview is already running/iu.test(t)?!0:`error`in e&&mn(e.error)||`cause`in e&&mn(e.cause)}V.use(U).input(k.object({appId:k.string().min(1),replaceActive:k.boolean().optional()})).handler(async({context:e,input:t})=>{try{return await pt({body:{appId:t.appId,deployToken:Qt(e.request),replaceActive:t.replaceActive},client:e.platform,headers:e.platformHeaders})}catch(e){throw mn(e)?new O(`CONFLICT`,{message:"A preview is already running for this app. Run `pnpm tailorkit preview --replace` to end it and start a new one."}):e}}),V.use(U).input(k.object({sessionId:k.uuid()})).handler(async({context:e,input:t})=>await mt({body:{deployToken:Qt(e.request)},client:e.platform,headers:e.platformHeaders,path:{sessionId:t.sessionId}}));var hn=e=>{let t=new URL(e);return t.hash=``,t.search=``,t.pathname=t.pathname.replace(/\/+$/u,``),t.toString().replace(/\/$/u,``)},gn=k.object({name:k.string().min(1),value:k.record(k.string(),k.unknown())}),_n=k.record(k.string(),k.string()),vn=k.preprocess(e=>typeof e==`object`&&e&&!Array.isArray(e)&&!Object.hasOwn(e,`value`)&&_n.safeParse(e).success?void 0:e,gn.optional()),W=E.join(w(),`.tailorkit`,`auth.json`),yn=18e5,bn=2e3,xn=k.object({deployToken:k.string().min(1),scope:vn}),Sn=k.object({deployToken:k.string().min(1),scope:gn}),Cn=k.object({scope:gn}),wn=k.object({hosts:k.record(k.string(),xn).optional()}).passthrough(),Tn=e=>new Promise(t=>setTimeout(t,e)),En=e=>{if(e&&typeof e==`object`&&`error`in e&&e.error!==void 0)throw e.error},Dn=async()=>{try{return wn.parse(JSON.parse(await v(W,`utf-8`)))}catch(e){if(e&&typeof e==`object`&&`code`in e&&e.code===`ENOENT`)return{};throw e}},On=async e=>{await g(E.dirname(W),{recursive:!0}),await C(W,`${JSON.stringify(e,null,2)}\n`,{encoding:`utf-8`,mode:384}),await h(W,384)},kn=async e=>{let t=await ee(e.configPath,e.cwd);if(t.config.host)return hn(t.config.host);throw Error(`Missing TailorKit host URL. Set host in tailorkit.config.ts.`)},An=(e,t)=>{let n=new URL(e);return n.pathname=`${n.pathname.replace(/\/+$/u,``)}/cli-auth/approve`,n.search=``,n.searchParams.set(`code`,t),n.hash=``,n.toString()},jn=class extends Error{constructor(e){super(`Not logged in for ${e}. Run tailorkit login after checking host in tailorkit.config.ts.`),this.name=`NotLoggedInError`}},Mn=async(e,t)=>{let n=await Dn();await On({...n,hosts:{...n.hosts,[e]:t}})},Nn=async e=>{let t=await Dn();if(!t.hosts?.[e])return!1;let{[e]:n,...r}=t.hosts,i={...t,hosts:r};return Object.keys(r).length===0?(await x(W,{force:!0}),!0):(await On(i),!0)},Pn=async e=>(await Dn()).hosts?.[e],Fn=async(e,t)=>{let n=await kn(e),r=B({url:n}),i=await r.cliAuth.start({});En(i);let a=`data`in i?i.data:i,o=new Date(a.expiresAt),s=Date.now()+(e.timeout??yn);for(t({expiresAt:o,hostUrl:n,userCode:a.userCode});Date.now()<s&&Date.now()<o.getTime();){await Tn(bn);let e=await r.cliAuth.poll({deviceCode:a.deviceCode});En(e);let t=`data`in e?e.data:e;switch(t.status){case`pending`:continue;case`denied`:throw Error(`CLI login was denied.`);case`expired`:throw Error(`CLI login expired.`);case`approved`:{let e=Sn.parse(t);return await Mn(n,{deployToken:e.deployToken,scope:e.scope}),{hostUrl:n,scope:e.scope}}default:throw Error(`Unexpected CLI login status.`)}}throw Error(`Timed out waiting for CLI login approval.`)},In=async e=>{let t=await kn(e),n=await Pn(t);if(!n?.deployToken)throw new jn(t);let r=B({headers:{authorization:`Bearer ${n.deployToken}`},url:t}),i;try{let e=await r.cliAuth.verifyToken({});En(e),i=Cn.parse(`data`in e?e.data:e)}catch(e){throw typeof e==`object`&&e&&`code`in e&&e.code===`UNAUTHORIZED`?new jn(t):e}return await Mn(t,{deployToken:n.deployToken,scope:i.scope}),{hostUrl:t,scope:i.scope}},Ln=async e=>{let t=await kn(e);return{hostUrl:t,removed:await Nn(t)}},Rn=async e=>{try{let t=JSON.parse(await v(E.join(e,`package.json`),`utf-8`));if(typeof t.name==`string`&&t.name.trim())return t.name.trim()}catch{}return E.basename(e)},zn=async(e,t)=>{let n=await v(e,`utf-8`),{parseSync:r}=await import(`vite`),{program:i}=r(e,n),a=i.body.find(e=>e.type===`ExportDefaultDeclaration`)?.declaration;if(a?.type===`Identifier`){let e=a.name;a=i.body.filter(e=>e.type===`VariableDeclaration`).flatMap(e=>e.declarations).find(t=>t.id.type===`Identifier`&&t.id.name===e)?.init??void 0}for(;a?.type===`TSSatisfiesExpression`||a?.type===`TSAsExpression`;)a=a.expression;if(a?.type===`CallExpression`&&a.callee.type===`Identifier`&&[`defineTailorKitConfig`,`defineConfig`].includes(a.callee.name)){let e=a.arguments[0];a=e?.type===`SpreadElement`?void 0:e}if(a?.type!==`ObjectExpression`)throw Error(`Could not write appId to ${e}. Add appId: ${JSON.stringify(t)} manually.`);let o=a.properties.find(e=>e.type===`Property`&&!e.computed&&(e.key.type===`Identifier`&&e.key.name===`appId`||e.key.type===`Literal`&&e.key.value===`appId`));if(o?.type===`Property`){await C(e,n.slice(0,o.start)+`appId: ${JSON.stringify(t)}`+n.slice(o.end),`utf-8`);return}let s=a.start+1,c=n.slice(s),l=/^(\r?\n)([ \t]*)/u.exec(c),u=l?`${l[1]}${l[2]||` `}appId: ${JSON.stringify(t)},`:` appId: ${JSON.stringify(t)},`;await C(e,n.slice(0,s)+u+c,`utf-8`)},Bn=1048576,Vn=ce(le),Hn={png:`image/png`,svg:`image/svg+xml`,webp:`image/webp`},Un=e=>{if(e&&typeof e==`object`&&`error`in e&&e.error!==void 0)throw e.error;let t=e&&typeof e==`object`&&`data`in e?e.data:e;return t&&typeof t==`object`&&`body`in t?t.body:t},Wn=e=>{if(e instanceof Error)return e.message;if(typeof e==`string`)return e;if(e&&typeof e==`object`&&`message`in e){let t=e.message;return typeof t==`string`?t:void 0}},Gn=e=>Wn(e)?.toLowerCase().includes(`not found`)??!1,Kn=async(e,t)=>{let n=E.join(e,`tailorkit-upload.json`);return t.parse(JSON.parse(await v(n,`utf-8`)))},qn=e=>ae(`sha256`).update(e).digest(`hex`),Jn=async(e,t)=>{if(!e.uploadUrl)return;if(t.byteLength>Bn)throw Error(`Deployment asset exceeds ${Bn} bytes.`);let n=new Headers(e.headers);n.has(`content-type`)||n.set(`content-type`,`application/javascript`);let r=await fetch(e.uploadUrl,{body:new Uint8Array(t),headers:n,method:`PUT`});if(!r.ok)throw Error(`Asset upload failed with ${r.status} ${r.statusText}.`)},Yn=e=>{for(let t of[`tsconfig.json`,`jsconfig.json`]){let n=E.join(e,t);if(M(n))return n}},Xn=async e=>{let t=Yn(e.root);if(!t)return;let n=r(E.join(e.root,`package.json`)),i;try{i=E.join(E.dirname(n.resolve(`typescript/package.json`)),`bin/tsc`)}catch{return}let a=E.resolve(e.root,e.config.client?.entry??`src/client.ts`),o=await _(E.join(e.root,`.tailorkit-typecheck-`));try{let n=E.join(o,`tsconfig.json`);await C(n,JSON.stringify({extends:t,compilerOptions:{noEmit:!0,incremental:!1,composite:!1},files:[a,...e.config.server?[E.resolve(e.root,e.config.server.entry??`src/server.ts`)]:[]],include:[]})),await ce(oe)(process.execPath,[i,`--noEmit`,`--project`,n,`--pretty`,`false`],{cwd:e.root,maxBuffer:4194304})}catch(t){let n=t;return{command:`tsc --noEmit ${E.relative(e.root,a)}`,exitCode:typeof n.code==`number`?n.code:null,output:`${n.stdout??``}${n.stderr??``}`.trim()||n.message||String(t)}}finally{await x(o,{recursive:!0,force:!0})}},Zn=async e=>{let t=await ee(e.configPath,e.cwd),n=t.config.appId,r=!1,i=await In(e).catch(t=>{if(t instanceof jn&&e.onLoginRequired)return e.onLoginRequired();throw t}),a=await Pn(i.hostUrl);if(!a?.deployToken)throw Error(`Not logged in for ${i.hostUrl}. Run tailorkit login after checking host in tailorkit.config.ts.`);let{buildApp:o,tailorkitUploadManifestSchema:s}=await import(`@tailorkit/app/builder`),[c,l]=await Promise.allSettled([o(e),Xn(t)]);if(c.status===`rejected`)throw c.reason;if(l.status===`rejected`)throw l.reason;if(l.value!==void 0&&!await e.onTypecheckFailed?.(l.value))throw Error(`Deployment cancelled because type check failed.`);let u=E.resolve(t.root,e.outDir??t.config.build?.outDir??`.tailorkit`),d=await Kn(u,s),f=E.join(u,d.assets.client),p=await v(f),m=await Vn(p),h=d.assets.server?await v(E.join(u,d.assets.server)):void 0,g=Object.entries(d.assets.logos??{}),_=await Promise.all(g.map(async([e,t])=>{let n=await v(E.join(u,t)),r=Hn[E.extname(t).slice(1)];if(!r)throw Error(`Unsupported ${e} logo format.`);return{content:n,contentType:r,filename:t,variant:e}}));if(p.byteLength>Bn)throw Error(`Combined client assets are ${p.byteLength} bytes and cannot exceed ${Bn} bytes.`);let y=B({headers:{authorization:`Bearer ${a.deployToken}`},url:i.hostUrl}),b=async a=>{let o=await Rn(t.root);if(!await e.onMissingAppId?.({appName:o,configPath:t.filepath,hostUrl:i.hostUrl,reason:a}))throw Error(`Deployment cancelled.`);return n=Un(await y.apps.create({description:null,name:o})).id,r=!0,await zn(t.filepath,n),n};n||=await b(`missing`);let x=async e=>Un(await y.deployments.create({appId:e,views:d.views,assets:[{checksum:qn(p),contentLength:p.byteLength,contentType:`application/javascript`,encoding:`utf-8`,objectKey:`client.js`}],server:h?{checksum:qn(h),contentLength:h.byteLength,contentType:`application/javascript`,encoding:`utf-8`,objectKey:`server.js`}:void 0,logos:_.length>0?Object.fromEntries(_.map(e=>[e.variant,{checksum:qn(e.content),contentLength:e.content.byteLength,contentType:e.contentType}])):void 0})),S;try{S=await x(n)}catch(e){if(!Gn(e))throw e;n=await b(`not-found`),S=await x(n)}if(S.assets.length!==1||!S.assets[0])throw Error(`Deployment did not return an upload URL for the client asset.`);if(h&&!S.server)throw Error(`Deployment did not return an upload URL for the server asset.`);await Promise.all([...h&&S.server?[Jn(S.server,h)]:[],Jn(S.assets[0],p),..._.map(e=>{let t=S.logos?.[e.variant];if(!t)throw Error(`Deployment did not return an upload URL for the ${e.variant} logo.`);return Jn(t,e.content)})]);let C=Un(await y.deployments.publish({deploymentId:S.deployment.id,rollout:!0})),w=await Promise.all(_.map(async e=>({gzipSize:(await Vn(e.content)).byteLength,path:e.filename,size:e.content.byteLength}))),T=[];if(h&&d.assets.server){let e=await Vn(h);T.push({gzipSize:e.byteLength,path:d.assets.server,size:h.byteLength})}return{appId:n,createdApp:r,deploymentId:C.id,hostUrl:i.hostUrl,status:C.status,uploadedFiles:[{gzipSize:m.byteLength,path:d.assets.client,size:p.byteLength},...T,...w]}};function Qn(e,t){return e===`/`||e===t||t.startsWith(`${e}/`)}var $n=k.enum([`object`,`array`,`string`,`number`,`integer`,`boolean`,`null`]),G=k.object({$schema:k.enum([`https://json-schema.org/draft/2020-12/schema`]).optional(),type:k.union([$n,k.array(k.string())]).optional(),properties:k.lazy(()=>k.record(k.string(),G)).optional(),required:k.array(k.string()).optional(),additionalProperties:k.union([k.boolean(),k.lazy(()=>G)]).optional(),enum:k.array(k.unknown()).optional(),const:k.unknown().optional(),items:k.union([k.boolean(),k.lazy(()=>G)]).optional(),prefixItems:k.lazy(()=>k.array(G)).optional(),minItems:k.number().int().nonnegative().optional(),maxItems:k.number().int().nonnegative().optional(),propertyNames:k.lazy(()=>G).optional(),minimum:k.number().optional(),maximum:k.number().optional(),anyOf:k.lazy(()=>k.array(G)).optional(),oneOf:k.lazy(()=>k.array(G)).optional(),allOf:k.lazy(()=>k.array(G)).optional(),not:k.lazy(()=>G).optional()}).strict(),er=k.object({async:k.boolean().optional(),input:G.optional(),output:G.optional()}),tr=k.object({fields:G.optional(),callbacks:k.record(k.string(),er),children:k.boolean()}),nr=k.record(k.string(),tr),rr=k.string().regex(/^\/.*$/u,{message:`View keys must start with "/".`}),ir=k.object({context:G.optional(),contextOptional:k.boolean().optional()}).strict(),ar=k.record(rr,ir),or=k.object({input:k.record(k.string(),k.unknown()).optional(),output:k.record(k.string(),k.unknown()).optional()}),sr=k.lazy(()=>k.record(k.string(),k.union([or,sr])));k.object({version:k.literal(1),slots:k.record(k.string().min(1),k.object({views:k.array(k.string().startsWith(`/`))})).default({}),actions:sr.default({}),components:nr,views:ar.default({})}).superRefine((e,t)=>{for(let[n,r]of Object.entries(e.slots))r.views.forEach((r,i)=>{Object.hasOwn(e.views,r)||t.addIssue({code:`custom`,path:[`slots`,n,`views`,i],message:`Unknown view "${r}".`})})});var cr=`/* eslint-disable */
7
+ `);try{s=JSON.parse(e),l=!0}catch{s=e}}l&&(i&&await i(s),r&&(s=await r(s))),n?.({data:s,event:o,id:d,retry:c}),a.length&&(yield s)}}}finally{m.removeEventListener(`abort`,h),f.releaseLock()}break}catch(e){if(t?.(e),o!==void 0&&p>=o)break;let n=Math.min(c*2**(p-1),s??3e4);await f(n)}}}()}}var Oe=e=>{switch(e){case`label`:return`.`;case`matrix`:return`;`;case`simple`:return`,`;default:return`&`}},ke=e=>{switch(e){case`form`:return`,`;case`pipeDelimited`:return`|`;case`spaceDelimited`:return`%20`;default:return`,`}},Ae=e=>{switch(e){case`label`:return`.`;case`matrix`:return`;`;case`simple`:return`,`;default:return`&`}},je=({allowReserved:e,explode:t,name:n,style:r,value:i})=>{if(!t){let t=(e?i:i.map(e=>encodeURIComponent(e))).join(ke(r));switch(r){case`label`:return`.${t}`;case`matrix`:return`;${n}=${t}`;case`simple`:return t;default:return`${n}=${t}`}}let a=Oe(r),o=i.map(t=>r===`label`||r===`simple`?e?t:encodeURIComponent(t):Me({allowReserved:e,name:n,value:t})).join(a);return r===`label`||r===`matrix`?a+o:o},Me=({allowReserved:e,name:t,value:n})=>{if(n==null)return``;if(typeof n==`object`)throw Error("Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.");return`${t}=${e?n:encodeURIComponent(n)}`},Ne=({allowReserved:e,explode:t,name:n,style:r,value:i,valueOnly:a})=>{if(i instanceof Date)return a?i.toISOString():`${n}=${i.toISOString()}`;if(r!==`deepObject`&&!t){let t=[];Object.entries(i).forEach(([n,r])=>{t=[...t,n,e?r:encodeURIComponent(r)]});let a=t.join(`,`);switch(r){case`form`:return`${n}=${a}`;case`label`:return`.${a}`;case`matrix`:return`;${n}=${a}`;default:return a}}let o=Ae(r),s=Object.entries(i).map(([t,i])=>Me({allowReserved:e,name:r===`deepObject`?`${n}[${t}]`:t,value:i})).join(o);return r===`label`||r===`matrix`?o+s:s},Pe=/\{[^{}]+\}/g,Fe=({path:e,url:t})=>{let n=t,r=t.match(Pe);if(r)for(let t of r){let r=!1,i=t.substring(1,t.length-1),a=`simple`;i.endsWith(`*`)&&(r=!0,i=i.substring(0,i.length-1)),i.startsWith(`.`)?(i=i.substring(1),a=`label`):i.startsWith(`;`)&&(i=i.substring(1),a=`matrix`);let o=e[i];if(o==null)continue;if(Array.isArray(o)){n=n.replace(t,je({explode:r,name:i,style:a,value:o}));continue}if(typeof o==`object`){n=n.replace(t,Ne({explode:r,name:i,style:a,value:o,valueOnly:!0}));continue}if(a===`matrix`){n=n.replace(t,`;${Me({name:i,value:o})}`);continue}let s=encodeURIComponent(a===`label`?`.${o}`:o);n=n.replace(t,s)}return n},Ie=({baseUrl:e,path:t,query:n,querySerializer:r,url:i})=>{let a=i.startsWith(`/`)?i:`/${i}`,o=(e??``)+a;t&&(o=Fe({path:t,url:o}));let s=n?r(n):``;return s.startsWith(`?`)&&(s=s.substring(1)),s&&(o+=`?${s}`),o};function Le(e){let t=e.body!==void 0;if(t&&e.bodySerializer)return`serializedBody`in e?e.serializedBody!==void 0&&e.serializedBody!==``?e.serializedBody:null:e.body===``?null:e.body;if(t)return e.body}var Re=async(e,t)=>{let n=typeof t==`function`?await t(e):t;if(n)return e.scheme===`bearer`?`Bearer ${n}`:e.scheme===`basic`?`Basic ${btoa(n)}`:n},ze={bodySerializer:e=>JSON.stringify(e,(e,t)=>typeof t==`bigint`?t.toString():t)},Be=({parameters:e={},...t}={})=>n=>{let r=[];if(n&&typeof n==`object`)for(let i in n){let a=n[i];if(a==null)continue;let o=e[i]||t;if(Array.isArray(a)){let e=je({allowReserved:o.allowReserved,explode:!0,name:i,style:`form`,value:a,...o.array});e&&r.push(e)}else if(typeof a==`object`){let e=Ne({allowReserved:o.allowReserved,explode:!0,name:i,style:`deepObject`,value:a,...o.object});e&&r.push(e)}else{let e=Me({allowReserved:o.allowReserved,name:i,value:a});e&&r.push(e)}}return r.join(`&`)},Ve=e=>{if(!e)return`stream`;let t=e.split(`;`)[0]?.trim();if(t){if(t.startsWith(`application/json`)||t.endsWith(`+json`))return`json`;if(t===`multipart/form-data`)return`formData`;if([`application/`,`audio/`,`image/`,`video/`].some(e=>t.startsWith(e)))return`blob`;if(t.startsWith(`text/`))return`text`}},He=(e,t)=>t?!!(e.headers.has(t)||e.query?.[t]||e.headers.get(`Cookie`)?.includes(`${t}=`)):!1;async function Ue(e){for(let t of e.security??[]){if(He(e,t.name))continue;let n=await Re(t,e.auth);if(!n)continue;let r=t.name??`Authorization`;switch(t.in){case`query`:e.query||={},e.query[r]=n;break;case`cookie`:e.headers.append(`Cookie`,`${r}=${n}`);break;default:e.headers.set(r,n)}}}var We=e=>Ie({baseUrl:e.baseUrl,path:e.path,query:e.query,querySerializer:typeof e.querySerializer==`function`?e.querySerializer:Be(e.querySerializer),url:e.url}),Ge=(e,t)=>{let n={...e,...t};return n.baseUrl?.endsWith(`/`)&&(n.baseUrl=n.baseUrl.substring(0,n.baseUrl.length-1)),n.headers=qe(e.headers,t.headers),n},Ke=e=>{let t=[];return e.forEach((e,n)=>{t.push([n,e])}),t},qe=(...e)=>{let t=new Headers;for(let n of e){if(!n)continue;let e=n instanceof Headers?Ke(n):Object.entries(n);for(let[n,r]of e)if(r===null)t.delete(n);else if(Array.isArray(r))for(let e of r)t.append(n,e);else r!==void 0&&t.set(n,typeof r==`object`?JSON.stringify(r):r)}return t},Je=class{fns=[];clear(){this.fns=[]}eject(e){let t=this.getInterceptorIndex(e);this.fns[t]&&(this.fns[t]=null)}exists(e){let t=this.getInterceptorIndex(e);return!!this.fns[t]}getInterceptorIndex(e){return typeof e==`number`?this.fns[e]?e:-1:this.fns.indexOf(e)}update(e,t){let n=this.getInterceptorIndex(e);return this.fns[n]?(this.fns[n]=t,e):!1}use(e){return this.fns.push(e),this.fns.length-1}},Ye=()=>({error:new Je,request:new Je,response:new Je}),Xe=Be({allowReserved:!1,array:{explode:!0,style:`form`},object:{explode:!0,style:`deepObject`}}),Ze={"Content-Type":`application/json`},Qe=(e={})=>({...ze,headers:Ze,parseAs:`auto`,querySerializer:Xe,...e}),I=((e={})=>{let t=Ge(Qe(),e),n=()=>({...t}),r=e=>(t=Ge(t,e),n()),i=Ye(),a=async e=>{let n={...t,...e,fetch:e.fetch??t.fetch??globalThis.fetch,headers:qe(t.headers,e.headers),serializedBody:void 0};n.security&&await Ue(n),n.requestValidator&&await n.requestValidator(n),n.body!==void 0&&n.bodySerializer&&(n.serializedBody=n.bodySerializer(n.body)),(n.body===void 0||n.serializedBody===``)&&n.headers.delete(`Content-Type`);let r=n;return{opts:r,url:We(r)}},o=async e=>{let n=e.throwOnError??t.throwOnError,r=e.responseStyle??t.responseStyle,o,s;try{let{opts:t,url:n}=await a(e),r={redirect:`follow`,...t,body:Le(t)};o=new Request(n,r);for(let e of i.request.fns)e&&(o=await e(o,t));let c=t.fetch;s=await c(o);for(let e of i.response.fns)e&&(s=await e(s,o,t));let l={request:o,response:s};if(s.ok){let e=(t.parseAs===`auto`?Ve(s.headers.get(`Content-Type`)):t.parseAs)??`json`;if(s.status===204||s.headers.get(`Content-Length`)===`0`){let n;switch(e){case`arrayBuffer`:case`blob`:case`text`:n=await s[e]();break;case`formData`:n=new FormData;break;case`stream`:n=s.body;break;default:n={}}return t.responseStyle===`data`?n:{data:n,...l}}let n;switch(e){case`arrayBuffer`:case`blob`:case`formData`:case`text`:n=await s[e]();break;case`json`:{let e=await s.text();n=e?JSON.parse(e):{};break}case`stream`:return t.responseStyle===`data`?s.body:{data:s.body,...l}}return e===`json`&&(t.responseValidator&&await t.responseValidator(n),t.responseTransformer&&(n=await t.responseTransformer(n))),t.responseStyle===`data`?n:{data:n,...l}}let u=await s.text(),d;try{d=JSON.parse(u)}catch{}throw d??u}catch(t){let a=t;for(let t of i.error.fns)t&&(a=await t(a,s,o,e));if(a||={},n)throw a;return r===`data`?void 0:{error:a,request:o,response:s}}},s=e=>t=>o({...t,method:e}),c=e=>async t=>{let{opts:n,url:r}=await a(t);return De({...n,body:n.body,method:e,onRequest:async(e,t)=>{let r=new Request(e,t);for(let e of i.request.fns)e&&(r=await e(r,n));return r},serializedBody:Le(n),url:r})};return{buildUrl:e=>We({...t,...e}),connect:s(`CONNECT`),delete:s(`DELETE`),get:s(`GET`),getConfig:n,head:s(`HEAD`),interceptors:i,options:s(`OPTIONS`),patch:s(`PATCH`),post:s(`POST`),put:s(`PUT`),request:o,setConfig:r,sse:{connect:c(`CONNECT`),delete:c(`DELETE`),get:c(`GET`),head:c(`HEAD`),options:c(`OPTIONS`),patch:c(`PATCH`),post:c(`POST`),put:c(`PUT`),trace:c(`TRACE`)},trace:s(`TRACE`)}})(Qe({baseUrl:`https://tailorkit.dev/api/platform`})),$e=e=>(e.client??I).sse.post({url:`/app-agent/chat`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),et=e=>(e.client??I).post({url:`/apps/list`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),tt=e=>(e.client??I).post({url:`/apps/{appId}/lookup`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),nt=e=>(e.client??I).post({url:`/apps`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),rt=e=>(e.client??I).delete({url:`/apps/{appId}`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),it=e=>(e.client??I).put({url:`/apps/{appId}`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),at=e=>(e.client??I).post({url:`/apps/{appId}/deploy`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),ot=e=>(e.client??I).post({url:`/cli-auth/approve`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),st=e=>(e.client??I).post({url:`/cli-auth/deny`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),ct=e=>(e.client??I).post({url:`/cli-auth/poll`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),lt=e=>(e.client??I).post({url:`/cli-auth/start`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),ut=e=>(e.client??I).post({url:`/cli-auth/verify-token`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),dt=e=>(e.client??I).post({url:`/deployments/list`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),ft=e=>(e.client??I).post({url:`/deployments/{deploymentId}/lookup`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),pt=e=>(e.client??I).post({url:`/deployments`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),mt=e=>(e.client??I).post({url:`/deployments/{deploymentId}`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),ht=e=>(e.client??I).post({url:`/preview/start`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),gt=e=>(e.client??I).post({url:`/preview/{sessionId}/stop`,...e,headers:{"Content-Type":`application/json`,...e.headers}});Object.entries({$body_:`body`,$headers_:`headers`,$path_:`path`,$query_:`query`});var _t=class e extends Te{meta(...t){let[n,r]=P(this[`~orpc`].meta,this[`~orpc`].metaPlugins,t);return new e({...this[`~orpc`],meta:n,metaPlugins:r})}errors(t){let n=new e({...this[`~orpc`],errorMap:N(this[`~orpc`].errorMap,t)}),r=F(t);return r&&(n=n.meta(...r)),n}use(t){let n=new e({...this[`~orpc`],errorMap:N(t[`~orpc`]?.errorMap,this[`~orpc`].errorMap),orderedMiddlewares:[...this[`~orpc`].orderedMiddlewares,{middleware:t,inputSchemasLengthAtUse:this[`~orpc`].inputSchemas?.length,outputSchemasLengthAtUse:this[`~orpc`].outputSchemas?.length}]});return t[`~orpc`]?.metaPlugins&&(n=n.meta(...t[`~orpc`]?.metaPlugins)),n}};function vt(e){let t=((...t)=>e(...t));return t[`~orpc`]=e[`~orpc`],Object.defineProperty(t,"name",{value:e.name}),t.adaptInput=t=>{let n=vt((n,r,...i)=>e(n,t(r),...i));return n[`~orpc`]=e[`~orpc`],Object.defineProperty(n,"name",{value:e.name}),n},t.errors=e=>{let n=vt(t);return n[`~orpc`]={...t[`~orpc`],errorMap:N(t[`~orpc`]?.errorMap,e)},n},t.use=n=>{let r=vt((t,...r)=>e({...t,async next(e){let i=await n({...t,context:{...t.context,...e?.context},next(n,...r){return t.next({...t,context:{...e?.context,...n?.context}},...r)}},...r);return{...i,context:{...e?.context,...i.context}}}},...r));return r[`~orpc`]={...t[`~orpc`],errorMap:N(n[`~orpc`]?.errorMap,t[`~orpc`]?.errorMap),metaPlugins:[...j(e[`~orpc`]?.metaPlugins),...j(n[`~orpc`]?.metaPlugins)]},Object.defineProperty(r,"name",{value:`${e.name} + ${n.name}`}),r},t}var yt=class e{"~orpc";constructor(e){this[`~orpc`]=e}static create(){return new e({errorMap:{},meta:{},orderedMiddlewares:[]})}$context(){return this}$config(t){return new e({...this[`~orpc`],...t})}meta(...t){let[n,r]=P(this[`~orpc`].meta,this[`~orpc`].metaPlugins,t);return new e({...this[`~orpc`],meta:n,metaPlugins:r})}errors(t){let n=new e({...this[`~orpc`],errorMap:N(this[`~orpc`].errorMap,t)}),r=F(t);return r&&(n=n.meta(...r)),n}use(t){let n=new e({...this[`~orpc`],errorMap:N(t[`~orpc`]?.errorMap??{},this[`~orpc`].errorMap),orderedMiddlewares:[...this[`~orpc`].orderedMiddlewares,{middleware:t,inputSchemasLengthAtUse:this[`~orpc`].inputSchemas?.length,outputSchemasLengthAtUse:this[`~orpc`].outputSchemas?.length}]});return t[`~orpc`]?.metaPlugins&&(n=n.meta(...t[`~orpc`]?.metaPlugins)),n}middleware(e){let t=[...this[`~orpc`].orderedMiddlewares.map(({middleware:e})=>e),e],n=vt(t.shift());for(let e of t)n=n.use(e);return n[`~orpc`]={...n[`~orpc`],errorMap:this[`~orpc`].errorMap,metaPlugins:[...j(this[`~orpc`].metaPlugins),...j(e[`~orpc`]?.metaPlugins)]},n}input(t){let n=new e({...this[`~orpc`],inputSchemas:[...j(this[`~orpc`].inputSchemas),t]}),r=F(t);return r&&(n=n.meta(...r)),n}output(t){let n=new e({...this[`~orpc`],outputSchemas:[...j(this[`~orpc`].outputSchemas),t]}),r=F(t);return r&&(n=n.meta(...r)),n}handler(e){let t=new _t({...this[`~orpc`],handler:e}),n=F(e);return n&&(t=t.meta(...n)),t}router(e){return Ee(e,{...this[`~orpc`],middlewares:this[`~orpc`].orderedMiddlewares.map(({middleware:e})=>e)})}lazy(e){return new Ce({loader:async()=>{let{default:t}=await e();return{default:this.router(t)}},meta:this[`~orpc`].meta,metaPlugins:this[`~orpc`].metaPlugins})}}.create(),bt=A(ie),xt=k.custom(async e=>(await bt.validate?.(e))?.success===!0).describe(`An AI SDK UIMessageChunk. Fields depend on the chunk type.`),St=k.array(k.object({id:k.string().min(1),role:k.enum([`user`,`assistant`]),parts:k.array(k.looseObject({type:k.string()})).min(1),metadata:k.unknown().optional()})).min(1),Ct=k.object({appId:k.string().min(1),messages:St}),wt=k.string().regex(/^[A-Za-z0-9_-]{1,128}$/u),Tt=k.string().max(349528).regex(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/u),Et=e=>[...e].some(e=>(e.codePointAt(0)??0)<32),Dt=k.object({path:k.string().min(1).max(1024).refine(e=>new TextEncoder().encode(e).byteLength<=1024,{message:`Preview path exceeds 1024 UTF-8 bytes`}),contentType:k.string().min(1).max(255).refine(e=>!/[\r\n]/u.test(e),{message:`Invalid preview content type`}),size:k.number().int().min(0).max(1048576),chunks:k.number().int().min(0).max(4),sha256:k.string().regex(/^[a-f0-9]{64}$/u)}),Ot=k.object({files:k.array(Dt).max(100),views:k.array(k.object({slot:k.string().min(1).max(255),path:k.string().startsWith(`/`).max(1024),instances:k.literal(!0).optional(),disabled:k.literal(!0).optional()})).max(1e3).optional()}).superRefine((e,t)=>{let n=new Set,r=0;for(let[i,a]of e.files.entries())(a.path.startsWith(`/`)||a.path.includes(`\\`)||a.path.split(`/`).some(e=>!e||e===`.`||e===`..`)||Et(a.path)||n.has(a.path))&&t.addIssue({code:`custom`,message:`Invalid or duplicate preview path`,path:[`files`,i,`path`]}),a.chunks!==Math.ceil(a.size/262144)&&t.addIssue({code:`custom`,message:`Invalid preview chunk count`,path:[`files`,i,`chunks`]}),n.add(a.path),r+=a.size;n.has(`client.js`)||t.addIssue({code:`custom`,message:`Missing client.js`}),r>10485760&&t.addIssue({code:`custom`,message:`Preview build exceeds 10 MiB`})}),kt=k.discriminatedUnion(`type`,[k.object({type:k.literal(`begin`),buildId:wt,revision:k.number().int().positive(),manifest:Ot}),k.object({type:k.literal(`chunk`),revision:k.number().int().positive(),fileIndex:k.number().int().min(0).max(99),chunkIndex:k.number().int().min(0).max(3),base64:Tt}),k.object({type:k.literal(`complete`),revision:k.number().int().positive()}),k.object({type:k.literal(`ended`)})]);k.object({sessionId:k.uuid(),expiresAt:k.string().min(1),websocketUrl:k.url(),token:k.string().min(1)});var At=k.object({manifest:Ot}),jt=k.object({buildId:wt,fileIndex:k.number().int().min(0).max(99),chunkIndex:k.number().int().min(0).max(3),base64:Tt}),Mt=k.object({buildId:wt}),Nt=k.object({accepted:k.literal(!0)}),Pt=k.object({revision:k.number().int().positive()});function Ft(e){let t=te(new ae({connect:()=>e}));return{beginBuild:async e=>Mt.parse(await t.beginBuild(At.parse(e))),uploadChunk:async e=>Nt.parse(await t.uploadChunk(jt.parse(e))),commitBuild:async e=>Pt.parse(await t.commitBuild({buildId:wt.parse(e.buildId)})),heartbeat:async()=>Nt.parse(await t.heartbeat()),subscribe:async()=>{let e=await t.subscribe();return(async function*(){for await(let t of e)yield kt.parse(t)})()}}}function L(e){let t=URL.canParse(e.url)?new URL(e.url):void 0,n=new re({origin:t?.origin,async fetch(t,n){let r=await(typeof e.headers==`function`?e.headers():e.headers),i=new Headers(r);return new Headers(n.headers).forEach((e,t)=>{i.set(t,e)}),(e.fetch??fetch)(t,{...n,headers:i})},url:t?`${t.pathname}${t.search}${t.hash}`:e.url});return te(n)}var It=32,Lt=64,Rt=255,zt=16,Bt=100,Vt=16384,Ht=512,Ut=/^[A-Za-z][A-Za-z0-9_-]{0,63}$/u;function Wt(e){if(!Ut.test(e))throw TypeError(`TailorKit scope names must start with a letter and contain only letters, numbers, "_", or "-".`);return e}function Gt(e){if(!Xt(e))throw TypeError(`TailorKit scope values must be nonempty plain JSON objects.`);let t=0,n=Jt(e,0,!0,new Set,()=>{if(t+=1,t>Ht)throw TypeError(`TailorKit scope values may contain at most ${Ht} JSON values.`)}),r=JSON.stringify(n);if(r===void 0||new TextEncoder().encode(r).byteLength>Vt)throw TypeError(`TailorKit scope values may not exceed ${Vt} bytes of JSON.`);return n}function Kt(e){if(!Xt(e))throw TypeError(`TailorKit scope identity must contain a name and value.`);if(Yt(e,`TailorKit scope identity must contain data properties.`).length!==2||!Object.hasOwn(e,`name`)||!Object.hasOwn(e,`value`))throw TypeError(`TailorKit scope identity must contain only a name and value.`);let t=Object.getOwnPropertyDescriptor(e,`name`)?.value,n=Object.getOwnPropertyDescriptor(e,`value`)?.value;if(typeof t!=`string`)throw TypeError(`TailorKit scope identity must contain a name and value.`);return Wt(t),{name:t,value:Gt(n)}}function qt(e,t){let n=t??Object.keys(e);if(n.length===0)throw TypeError(`At least one TailorKit scope must be selected.`);let r=[],i=new Set;for(let t of n){if(Wt(t),i.has(t))continue;if(i.add(t),!Object.hasOwn(e,t))throw TypeError(`TailorKit scope "${t}" is not available for this request.`);let n=e[t];if(!n)throw TypeError(`TailorKit scope "${t}" is not available for this request.`);r.push({name:t,value:n})}if(r.length===0)throw TypeError(`At least one TailorKit scope must be selected.`);return r}function Jt(e,t,n,r,i){if(i(),e===null||typeof e==`boolean`||typeof e==`string`){if(typeof e==`string`&&e.length>Rt)throw TypeError(`TailorKit scope strings may not exceed ${Rt} characters.`);return e}if(typeof e==`number`){if(!Number.isFinite(e)||Number.isInteger(e)&&!Number.isSafeInteger(e))throw TypeError(`TailorKit scope numbers must be finite and safe when integral.`);if(Object.is(e,-0))throw TypeError(`TailorKit scope numbers may not be negative zero.`);return e}if(typeof e!=`object`)throw TypeError(`TailorKit scope values must contain only JSON values.`);if(t>zt)throw TypeError(`TailorKit scope values may be nested at most ${zt} levels deep.`);if(r.has(e))throw TypeError(`TailorKit scope values may not contain cycles.`);if(r.add(e),Array.isArray(e)){if(Object.getPrototypeOf(e)!==Array.prototype)throw TypeError(`TailorKit scope arrays must be standard arrays.`);if(e.length>Bt)throw TypeError(`TailorKit scope arrays may contain at most ${Bt} items.`);let n=Reflect.ownKeys(e);if(n.length!==e.length+1||!n.includes(`length`)||n.some(e=>typeof e!=`string`))throw TypeError(`TailorKit scope arrays must be dense and have no extra properties.`);let a=[];for(let n=0;n<e.length;n+=1){let o=Object.getOwnPropertyDescriptor(e,String(n));if(!o?.enumerable||!(`value`in o))throw TypeError(`TailorKit scope arrays must contain enumerable data items.`);a.push(Jt(o.value,t+1,!1,r,i))}return r.delete(e),Object.freeze(a)}if(!Xt(e))throw TypeError(`TailorKit scope objects must be plain JSON objects.`);let a=Yt(e,`TailorKit scope objects must contain data properties.`);if(n&&a.length===0)throw TypeError(`TailorKit scope values must be nonempty plain JSON objects.`);if(a.length>It)throw TypeError(`TailorKit scope objects may contain at most ${It} properties.`);let o=Object.fromEntries(a.sort(([e],[t])=>Zt(e,t)).map(([e,n])=>[e,Jt(n,t+1,!1,r,i)]));return r.delete(e),Object.freeze(o)}function Yt(e,t){let n=Reflect.ownKeys(e);if(n.some(e=>typeof e!=`string`))throw TypeError(t);let r=[];for(let i of n){if(i===`__proto__`)throw TypeError(`TailorKit scope property names may not be "__proto__".`);if(i.length===0||i.length>Lt)throw TypeError(`TailorKit scope property names must be 1 to ${Lt} characters.`);let n=Object.getOwnPropertyDescriptor(e,i);if(!n?.enumerable||!(`value`in n))throw TypeError(t);r.push([i,n.value])}return r}function Xt(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Zt(e,t){return e<t?-1:+(e>t)}var Qt=k.string().regex(/^[A-Za-z0-9_-]{43}$/u);k.array(Qt).max(20),k.enum([`accept`,`cancel`]);var R=yt.$context();function $t(e){if(!e.tailorkit)throw new O(`UNAUTHORIZED`,{message:`Unauthorized.`});return e.tailorkit}function z(e,t){let n=$t(e).scopes,r=t===void 0?Object.keys(n):[t];if(r.length!==1)throw new O(`BAD_REQUEST`,{message:`Choose one TailorKit scope for this operation.`});try{return qt(n,r)[0]}catch(e){throw new O(`BAD_REQUEST`,{message:e instanceof Error?e.message:`Invalid TailorKit scope selection.`})}}function B(e,t){try{return qt($t(e).scopes,t)}catch(e){throw new O(`BAD_REQUEST`,{message:e instanceof Error?e.message:`Invalid TailorKit scope selection.`})}}function V(e){let[t,n]=e.headers.get(`authorization`)?.split(` `)??[];if(t!==`Bearer`||!n)throw new O(`UNAUTHORIZED`,{message:`Missing CLI deploy token.`});return n}var H=R.middleware(async({context:e,next:t})=>{let n=await ut({body:{deployToken:V(e.request)},client:e.platform,headers:e.platformHeaders}),r=`data`in n?n.data:n;if(!r?.scope)throw new O(`UNAUTHORIZED`,{message:`Invalid CLI deploy token.`});let i;try{let t=Kt(r.scope);if(!Object.hasOwn(e.scopeSchemas,t.name))throw TypeError(`CLI token uses an undeclared scope.`);i=Object.freeze({[t.name]:t.value})}catch{throw new O(`UNAUTHORIZED`,{message:`Invalid CLI deploy token.`})}return t({context:{tailorkit:{scopes:i}}})}),en=R.middleware(async({context:e,next:t})=>{let n=await e.authenticate({request:e.request});if(!n)throw new O(`UNAUTHORIZED`,{message:`Unauthorized.`});return t({context:{tailorkit:n}})});R.use(H).input(Ct).output(Se(xt)).handler(async function*({context:e,input:t,signal:n}){let r=new AbortController,i=n?AbortSignal.any([n,r.signal]):r.signal;try{let n,r=!1,{stream:a}=await $e({body:{...t,deployToken:V(e.request)},client:e.platform,headers:e.platformHeaders,signal:i,sseMaxRetryAttempts:1,onSseError:e=>{n=e}});for await(let e of a){let t=await xt.parseAsync(e);(t.type===`finish`||t.type===`error`)&&(r=!0),yield t}if(i?.throwIfAborted(),n)throw new O(`BAD_GATEWAY`,{message:`The app agent stream failed. Try again.`});if(!r)throw new O(`BAD_GATEWAY`,{message:`The agent stream ended unexpectedly. Try again.`})}finally{r.abort()}});var tn=async(e,t)=>{if(e===void 0)return t;let n=await e[`~standard`].validate(t);if(`issues`in n)throw new O(`BAD_REQUEST`,{message:`Invalid TailorKit payload`});return n.value};R.use(en).input(k.object({input:k.unknown().optional(),path:k.string()})).handler(async({context:e,input:t})=>{let n=e.actions.get(t.path);if(n===void 0)throw new O(`NOT_FOUND`,{message:`Action not found`});let r=await tn(n.definition.input,t.input),i=await n.handler({context:$t(e).actionContext,input:r});return tn(n.definition.output,i)});var nn=k.object({page:k.number().int().min(1).optional(),pageSize:k.number().int().min(1).max(100).optional()}),rn=k.object({description:k.string().nullable(),name:k.string()});R.use(H).input(rn).handler(async({context:e,input:t})=>{let{data:n}=await nt({responseStyle:`fields`,throwOnError:!0,body:{...t,scope:z(e)},client:e.platform,headers:e.platformHeaders});return n}),R.use(H).input(k.object({appId:k.string()})).handler(async({context:e,input:t})=>await rt({body:{scope:z(e)},client:e.platform,headers:e.platformHeaders,path:{appId:t.appId}})),R.use(H).input(k.object({appId:k.string(),deploymentId:k.string()})).handler(async({context:e,input:t})=>await at({body:{deploymentId:t.deploymentId,scope:z(e)},client:e.platform,headers:e.platformHeaders,path:{appId:t.appId}})),R.use(H).input(k.object({appId:k.string(),scopes:k.array(k.string()).optional()})).handler(async({context:e,input:t})=>await tt({body:{scopes:B(e,t.scopes)},client:e.platform,headers:e.platformHeaders,path:{appId:t.appId}})),R.use(H).input(nn.extend({scopes:k.array(k.string()).optional()}).optional()).handler(async({context:e,input:t})=>{let{data:n}=await et({responseStyle:`fields`,throwOnError:!0,client:e.platform,headers:e.platformHeaders,body:{page:t?.page,pageSize:t?.pageSize,scopes:B(e,t?.scopes)}});return n}),R.use(H).input(k.object({appId:k.string()}).extend(rn.shape)).handler(async({context:e,input:t})=>await it({body:{description:t.description,name:t.name,scope:z(e)},client:e.platform,headers:e.platformHeaders,path:{appId:t.appId}}));var an=async e=>{try{return await e}catch(e){throw typeof e==`string`&&e.toLowerCase()===`unauthorized`?new O(`UNAUTHORIZED`,{message:`TailorKit platform rejected the host project key. Check TAILORKIT_PROJECT_KEY.`}):e}};R.use(en).input(k.object({scope:k.string().min(1),userCode:k.string().min(1)})).handler(async({context:e,input:t})=>await an(ot({body:{scope:z(e,t.scope),userCode:t.userCode},client:e.platform,headers:e.platformHeaders}))),R.use(en).input(k.object({userCode:k.string().min(1)})).handler(async({context:e,input:t})=>await an(st({body:{userCode:t.userCode},client:e.platform,headers:e.platformHeaders}))),R.input(k.object({deviceCode:k.string().min(1)})).handler(async({context:e,input:t})=>await an(ct({body:{deviceCode:t.deviceCode},client:e.platform,headers:e.platformHeaders}))),R.input(k.object({})).handler(async({context:e})=>await an(lt({body:{},client:e.platform,headers:e.platformHeaders}))),R.input(k.object({})).use(H).handler(({context:e})=>({scope:z(e)}));var on=k.object({page:k.number().int().min(1).optional(),pageSize:k.number().int().min(1).max(100).optional()}),sn=k.object({checksum:k.string(),contentLength:k.number().int().min(1),contentType:k.literal(`application/javascript`),encoding:k.enum([`utf-8`,`gzip`]),objectKey:k.literal(`client.js`)}),cn=sn.extend({objectKey:k.literal(`server.js`)}),ln=k.object({checksum:k.string(),contentLength:k.number().int().min(1).max(262144),contentType:k.enum([`image/svg+xml`,`image/png`,`image/webp`])}),un=k.tuple([sn]),dn=k.object({dark:ln.optional(),light:ln.optional()}).optional(),fn=e=>{if(e instanceof Error)return e.message;if(typeof e==`string`)return e;if(e&&typeof e==`object`&&`message`in e){let t=e.message;return typeof t==`string`?t:void 0}},pn=e=>fn(e)?.toLowerCase().includes(`not found`)??!1,mn=e=>{throw pn(e)?new O(`NOT_FOUND`,{message:`App not found.`}):e};R.use(H).input(k.object({appId:k.string(),assets:un,views:k.array(k.object({slot:k.string().min(1).max(255),path:k.string().startsWith(`/`).max(1024),instances:k.literal(!0).optional(),disabled:k.literal(!0).optional()})).max(1e3).optional(),server:cn.optional(),logos:dn})).handler(async({context:e,input:t})=>{try{return await pt({body:{appId:t.appId,assets:t.assets,views:t.views,server:t.server,logos:t.logos,scope:z(e)},client:e.platform,headers:e.platformHeaders})}catch(e){mn(e)}}),R.use(H).input(k.object({deploymentId:k.string(),scopes:k.array(k.string()).optional()})).handler(async({context:e,input:t})=>await ft({body:{scopes:B(e,t.scopes)},client:e.platform,headers:e.platformHeaders,path:{deploymentId:t.deploymentId}})),R.use(H).input(k.object({appId:k.string(),scopes:k.array(k.string()).optional()}).merge(on)).handler(async({context:e,input:t})=>await dt({client:e.platform,headers:e.platformHeaders,body:{appId:t.appId,page:t.page,pageSize:t.pageSize,scopes:B(e,t.scopes)}})),R.use(H).input(k.object({deploymentId:k.string(),rollout:k.boolean().optional()})).handler(async({context:e,input:t})=>await mt({body:{scope:z(e),rollout:t.rollout},client:e.platform,headers:e.platformHeaders,path:{deploymentId:t.deploymentId}}));function hn(e){if(!e||typeof e!=`object`)return!1;if(`data`in e&&e.data&&typeof e.data==`object`&&`reason`in e.data&&e.data.reason===`ACTIVE_PREVIEW_EXISTS`)return!0;let t=`message`in e&&typeof e.message==`string`?e.message:``;return/active preview already exists|preview is already running/iu.test(t)?!0:`error`in e&&hn(e.error)||`cause`in e&&hn(e.cause)}R.use(H).input(k.object({appId:k.string().min(1),replaceActive:k.boolean().optional()})).handler(async({context:e,input:t})=>{try{return await ht({body:{appId:t.appId,deployToken:V(e.request),replaceActive:t.replaceActive},client:e.platform,headers:e.platformHeaders})}catch(e){throw hn(e)?new O(`CONFLICT`,{message:"A preview is already running for this app. Run `pnpm tailorkit preview --replace` to end it and start a new one."}):e}}),R.use(H).input(k.object({sessionId:k.uuid()})).handler(async({context:e,input:t})=>await gt({body:{deployToken:V(e.request)},client:e.platform,headers:e.platformHeaders,path:{sessionId:t.sessionId}}));var gn=e=>{let t=new URL(e);return t.hash=``,t.search=``,t.pathname=t.pathname.replace(/\/+$/u,``),t.toString().replace(/\/$/u,``)},_n=k.object({name:k.string().min(1),value:k.record(k.string(),k.unknown())}),vn=k.record(k.string(),k.string()),yn=k.preprocess(e=>typeof e==`object`&&e&&!Array.isArray(e)&&!Object.hasOwn(e,`value`)&&vn.safeParse(e).success?void 0:e,_n.optional()),U=E.join(w(),`.tailorkit`,`auth.json`),bn=18e5,xn=2e3,Sn=k.object({deployToken:k.string().min(1),scope:yn}),Cn=k.object({deployToken:k.string().min(1),scope:_n}),wn=k.object({scope:_n}),Tn=k.object({hosts:k.record(k.string(),Sn).optional()}).passthrough(),En=e=>new Promise(t=>setTimeout(t,e)),Dn=e=>{if(e&&typeof e==`object`&&`error`in e&&e.error!==void 0)throw e.error},On=async()=>{try{return Tn.parse(JSON.parse(await v(U,`utf-8`)))}catch(e){if(e&&typeof e==`object`&&`code`in e&&e.code===`ENOENT`)return{};throw e}},kn=async e=>{await g(E.dirname(U),{recursive:!0}),await C(U,`${JSON.stringify(e,null,2)}\n`,{encoding:`utf-8`,mode:384}),await h(U,384)},An=async e=>{let t=await ee(e.configPath,e.cwd);if(t.config.host)return gn(t.config.host);throw Error(`Missing TailorKit host URL. Set host in tailorkit.config.ts.`)},jn=(e,t)=>{let n=new URL(e);return n.pathname=`${n.pathname.replace(/\/+$/u,``)}/cli-auth/approve`,n.search=``,n.searchParams.set(`code`,t),n.hash=``,n.toString()},Mn=class extends Error{constructor(e){super(`Not logged in for ${e}. Run tailorkit login after checking host in tailorkit.config.ts.`),this.name=`NotLoggedInError`}},Nn=async(e,t)=>{let n=await On();await kn({...n,hosts:{...n.hosts,[e]:t}})},Pn=async e=>{let t=await On();if(!t.hosts?.[e])return!1;let{[e]:n,...r}=t.hosts,i={...t,hosts:r};return Object.keys(r).length===0?(await x(U,{force:!0}),!0):(await kn(i),!0)},Fn=async e=>(await On()).hosts?.[e],In=async(e,t)=>{let n=await An(e),r=L({url:n}),i=await r.cliAuth.start({});Dn(i);let a=`data`in i?i.data:i,o=new Date(a.expiresAt),s=Date.now()+(e.timeout??bn);for(t({expiresAt:o,hostUrl:n,userCode:a.userCode});Date.now()<s&&Date.now()<o.getTime();){await En(xn);let e=await r.cliAuth.poll({deviceCode:a.deviceCode});Dn(e);let t=`data`in e?e.data:e;switch(t.status){case`pending`:continue;case`denied`:throw Error(`CLI login was denied.`);case`expired`:throw Error(`CLI login expired.`);case`approved`:{let e=Cn.parse(t);return await Nn(n,{deployToken:e.deployToken,scope:e.scope}),{hostUrl:n,scope:e.scope}}default:throw Error(`Unexpected CLI login status.`)}}throw Error(`Timed out waiting for CLI login approval.`)},Ln=async e=>{let t=await An(e),n=await Fn(t);if(!n?.deployToken)throw new Mn(t);let r=L({headers:{authorization:`Bearer ${n.deployToken}`},url:t}),i;try{let e=await r.cliAuth.verifyToken({});Dn(e),i=wn.parse(`data`in e?e.data:e)}catch(e){throw typeof e==`object`&&e&&`code`in e&&e.code===`UNAUTHORIZED`?new Mn(t):e}return await Nn(t,{deployToken:n.deployToken,scope:i.scope}),{hostUrl:t,scope:i.scope}},Rn=async e=>{let t=await An(e);return{hostUrl:t,removed:await Pn(t)}},zn=async e=>{try{let t=JSON.parse(await v(E.join(e,`package.json`),`utf-8`));if(typeof t.name==`string`&&t.name.trim())return t.name.trim()}catch{}return E.basename(e)},Bn=async(e,t)=>{let n=await v(e,`utf-8`),{parseSync:r}=await import(`vite`),{program:i}=r(e,n),a=i.body.find(e=>e.type===`ExportDefaultDeclaration`)?.declaration;if(a?.type===`Identifier`){let e=a.name;a=i.body.filter(e=>e.type===`VariableDeclaration`).flatMap(e=>e.declarations).find(t=>t.id.type===`Identifier`&&t.id.name===e)?.init??void 0}for(;a?.type===`TSSatisfiesExpression`||a?.type===`TSAsExpression`;)a=a.expression;if(a?.type===`CallExpression`&&a.callee.type===`Identifier`&&[`defineTailorKitConfig`,`defineConfig`].includes(a.callee.name)){let e=a.arguments[0];a=e?.type===`SpreadElement`?void 0:e}if(a?.type!==`ObjectExpression`)throw Error(`Could not write appId to ${e}. Add appId: ${JSON.stringify(t)} manually.`);let o=a.properties.find(e=>e.type===`Property`&&!e.computed&&(e.key.type===`Identifier`&&e.key.name===`appId`||e.key.type===`Literal`&&e.key.value===`appId`));if(o?.type===`Property`){await C(e,n.slice(0,o.start)+`appId: ${JSON.stringify(t)}`+n.slice(o.end),`utf-8`);return}let s=a.start+1,c=n.slice(s),l=/^(\r?\n)([ \t]*)/u.exec(c),u=l?`${l[1]}${l[2]||` `}appId: ${JSON.stringify(t)},`:` appId: ${JSON.stringify(t)},`;await C(e,n.slice(0,s)+u+c,`utf-8`)},W=3145728,Vn=ue(de),Hn={png:`image/png`,svg:`image/svg+xml`,webp:`image/webp`},Un=e=>{if(e&&typeof e==`object`&&`error`in e&&e.error!==void 0)throw e.error;let t=e&&typeof e==`object`&&`data`in e?e.data:e;return t&&typeof t==`object`&&`body`in t?t.body:t},Wn=e=>{if(e instanceof Error)return e.message;if(typeof e==`string`)return e;if(e&&typeof e==`object`&&`message`in e){let t=e.message;return typeof t==`string`?t:void 0}},Gn=e=>Wn(e)?.toLowerCase().includes(`not found`)??!1,Kn=async(e,t)=>{let n=E.join(e,`tailorkit-upload.json`);return t.parse(JSON.parse(await v(n,`utf-8`)))},qn=e=>oe(`sha256`).update(e).digest(`hex`),Jn=async(e,t,n)=>{if(!e.uploadUrl)return;if(t.byteLength>W)throw Error(`Deployment asset exceeds ${W} bytes.`);let r=new Headers(e.headers);r.has(`content-type`)||r.set(`content-type`,`application/javascript`),n&&r.set(`content-encoding`,n);let i=await fetch(e.uploadUrl,{body:new Uint8Array(t),headers:r,method:`PUT`});if(!i.ok)throw Error(`Asset upload failed with ${i.status} ${i.statusText}.`)},Yn=e=>{for(let t of[`tsconfig.json`,`jsconfig.json`]){let n=E.join(e,t);if(le(n))return n}},Xn=async e=>{let t=Yn(e.root);if(!t)return;let n=r(E.join(e.root,`package.json`)),i;try{i=E.join(E.dirname(n.resolve(`typescript/package.json`)),`bin/tsc`)}catch{return}let a=E.resolve(e.root,e.config.client?.entry??`src/client.ts`),o=await _(E.join(e.root,`.tailorkit-typecheck-`));try{let n=E.join(o,`tsconfig.json`);await C(n,JSON.stringify({extends:t,compilerOptions:{noEmit:!0,incremental:!1,composite:!1},files:[a,...e.config.server?[E.resolve(e.root,e.config.server.entry??`src/server.ts`)]:[]],include:[]})),await ue(se)(process.execPath,[i,`--noEmit`,`--project`,n,`--pretty`,`false`],{cwd:e.root,maxBuffer:4194304})}catch(t){let n=t;return{command:`tsc --noEmit ${E.relative(e.root,a)}`,exitCode:typeof n.code==`number`?n.code:null,output:`${n.stdout??``}${n.stderr??``}`.trim()||n.message||String(t)}}finally{await x(o,{recursive:!0,force:!0})}},Zn=async e=>{let t=await ee(e.configPath,e.cwd),n=t.config.appId,r=!1,i=await Ln(e).catch(t=>{if(t instanceof Mn&&e.onLoginRequired)return e.onLoginRequired();throw t}),a=await Fn(i.hostUrl);if(!a?.deployToken)throw Error(`Not logged in for ${i.hostUrl}. Run tailorkit login after checking host in tailorkit.config.ts.`);let{buildApp:o,tailorkitUploadManifestSchema:s}=await import(`@tailorkit/app/builder`),[c,l]=await Promise.allSettled([o(e),Xn(t)]);if(c.status===`rejected`)throw c.reason;if(l.status===`rejected`)throw l.reason;if(l.value!==void 0&&!await e.onTypecheckFailed?.(l.value))throw Error(`Deployment cancelled because type check failed.`);let u=E.resolve(t.root,e.outDir??t.config.build?.outDir??`.tailorkit`),d=await Kn(u,s),f=E.join(u,d.assets.client),p=await v(f),m=await Vn(p),h=d.assets.server?await v(E.join(u,d.assets.server)):void 0,g=h?await Vn(h):void 0,_=Object.entries(d.assets.logos??{}),y=await Promise.all(_.map(async([e,t])=>{let n=await v(E.join(u,t)),r=Hn[E.extname(t).slice(1)];if(!r)throw Error(`Unsupported ${e} logo format.`);return{content:n,contentType:r,filename:t,variant:e}}));if(p.byteLength>W)throw Error(`Combined client assets are ${p.byteLength} bytes and cannot exceed ${W} bytes.`);if(h&&h.byteLength>W)throw Error(`Server asset exceeds ${W} bytes.`);if(m.byteLength>W||g&&g.byteLength>W)throw Error(`Compressed deployment asset exceeds ${W} bytes.`);let b=L({headers:{authorization:`Bearer ${a.deployToken}`},url:i.hostUrl}),x=async a=>{let o=await zn(t.root);if(!await e.onMissingAppId?.({appName:o,configPath:t.filepath,hostUrl:i.hostUrl,reason:a}))throw Error(`Deployment cancelled.`);return n=Un(await b.apps.create({description:null,name:o})).id,r=!0,await Bn(t.filepath,n),n};n||=await x(`missing`);let S=async e=>Un(await b.deployments.create({appId:e,views:d.views,assets:[{checksum:qn(m),contentLength:m.byteLength,contentType:`application/javascript`,encoding:`gzip`,objectKey:`client.js`}],server:g?{checksum:qn(g),contentLength:g.byteLength,contentType:`application/javascript`,encoding:`gzip`,objectKey:`server.js`}:void 0,logos:y.length>0?Object.fromEntries(y.map(e=>[e.variant,{checksum:qn(e.content),contentLength:e.content.byteLength,contentType:e.contentType}])):void 0})),C;try{C=await S(n)}catch(e){if(!Gn(e))throw e;n=await x(`not-found`),C=await S(n)}if(C.assets.length!==1||!C.assets[0])throw Error(`Deployment did not return an upload URL for the client asset.`);if(h&&!C.server)throw Error(`Deployment did not return an upload URL for the server asset.`);await Promise.all([...g&&C.server?[Jn(C.server,g,`gzip`)]:[],Jn(C.assets[0],m,`gzip`),...y.map(e=>{let t=C.logos?.[e.variant];if(!t)throw Error(`Deployment did not return an upload URL for the ${e.variant} logo.`);return Jn(t,e.content)})]);let w=Un(await b.deployments.publish({deploymentId:C.deployment.id,rollout:!0})),T=await Promise.all(y.map(async e=>({gzipSize:(await Vn(e.content)).byteLength,path:e.filename,size:e.content.byteLength}))),D=[];return h&&g&&d.assets.server&&D.push({gzipSize:g.byteLength,path:d.assets.server,size:h.byteLength}),{appId:n,createdApp:r,deploymentId:w.id,hostUrl:i.hostUrl,status:w.status,uploadedFiles:[{gzipSize:m.byteLength,path:d.assets.client,size:p.byteLength},...D,...T]}};function Qn(e,t){return e===`/`||e===t||t.startsWith(`${e}/`)}var $n=k.enum([`object`,`array`,`string`,`number`,`integer`,`boolean`,`null`]),G=k.object({$schema:k.enum([`https://json-schema.org/draft/2020-12/schema`]).optional(),type:k.union([$n,k.array(k.string())]).optional(),properties:k.lazy(()=>k.record(k.string(),G)).optional(),required:k.array(k.string()).optional(),additionalProperties:k.union([k.boolean(),k.lazy(()=>G)]).optional(),enum:k.array(k.unknown()).optional(),const:k.unknown().optional(),items:k.union([k.boolean(),k.lazy(()=>G)]).optional(),prefixItems:k.lazy(()=>k.array(G)).optional(),minItems:k.number().int().nonnegative().optional(),maxItems:k.number().int().nonnegative().optional(),propertyNames:k.lazy(()=>G).optional(),minimum:k.number().optional(),maximum:k.number().optional(),anyOf:k.lazy(()=>k.array(G)).optional(),oneOf:k.lazy(()=>k.array(G)).optional(),allOf:k.lazy(()=>k.array(G)).optional(),not:k.lazy(()=>G).optional()}).strict(),er=k.object({async:k.boolean().optional(),input:G.optional(),output:G.optional()}),tr=k.object({fields:G.optional(),callbacks:k.record(k.string(),er),children:k.boolean()}),nr=k.record(k.string(),tr),rr=k.string().regex(/^\/.*$/u,{message:`View keys must start with "/".`}),ir=k.object({context:G.optional(),contextOptional:k.boolean().optional()}).strict(),ar=k.record(rr,ir),or=k.object({input:k.record(k.string(),k.unknown()).optional(),output:k.record(k.string(),k.unknown()).optional()}),sr=k.lazy(()=>k.record(k.string(),k.union([or,sr])));k.object({version:k.literal(1),slots:k.record(k.string().min(1),k.object({views:k.array(k.string().startsWith(`/`)),multiple:k.boolean().optional()})).default({}),actions:sr.default({}),components:nr,views:ar.default({})}).superRefine((e,t)=>{for(let[n,r]of Object.entries(e.slots))r.views.forEach((r,i)=>{Object.hasOwn(e.views,r)||t.addIssue({code:`custom`,path:[`slots`,n,`views`,i],message:`Unknown view "${r}".`})})});var cr=`/* eslint-disable */
8
8
 
9
9
  // This file was automatically generated by TailorKit.
10
10
  // Documentation: https://tailorkit.dev/docs
@@ -24,7 +24,7 @@ import { createRemoteComponent } from "tailorkit/client";
24
24
  `);n.push(` ${q(r)}: ${t[0]}`),n.push(...t.slice(1).map(e=>` ${e}`)),n.push(`,`)}}return n.push(`}`),n.join(`
25
25
  `)},kr=(e,t={})=>{let n=Dr(e.actions??{}),r=e.components??{},i=Sr(r),a=[cr,wr(e.views??{}),`declare module "tailorkit/client" {
26
26
  interface TailorKitViews extends ViewPropsByPath {}
27
- interface TailorKitSlots { ${Object.entries(e.slots??{}).map(([e,t])=>`${K(e)}: ${t.views.map(K).join(` | `)||`never`};`).join(` `)} }
27
+ interface TailorKitSlots { ${Object.entries(e.slots??{}).map(([e,t])=>`${K(e)}: { views: ${t.views.map(K).join(` | `)||`never`}; multiple: ${t.multiple===!0} };`).join(` `)} }
28
28
  }
29
29
 
30
30
  export type ViewPath = keyof ViewPropsByPath & string;
@@ -144,10 +144,19 @@ const client = defineClient({
144
144
  });
145
145
 
146
146
  export default client;
147
- `,qr=`import { createView, useQuery } from "tailorkit/client";
147
+ `,qr=`import { defineView, useQuery } from "tailorkit/client";
148
148
  import { api{% if useBox %}, Box{% endif %} } from "#tailorkit";
149
-
150
- const view = createView({{ viewPath }}, {
149
+ {% if multiple %}import { z } from "zod";
150
+ {% endif %}
151
+
152
+ const view = defineView({
153
+ slot: {{ slotName }},
154
+ view: {{ viewPath }},
155
+ {% if multiple %} instances: {
156
+ dataSchema: z.object({}),
157
+ resolve: () => [{ key: "default", metadata: { title: "Default" }, data: {} }],
158
+ },
159
+ {% endif %}
151
160
  component: ViewComponent,
152
161
  });
153
162
 
@@ -181,4 +190,4 @@ export const greeting = tk.query
181
190
  <path d="M3 6h6v6H3z" style="fill:#262626" transform="matrix(1.5 0 0 1.5 10.5 -9)"/>
182
191
  <path d="M2 6v12h12v-6H8V6z" style="fill:#262626" transform="matrix(1.5 0 0 1.5 -3 -3)"/>
183
192
  </svg>
184
- `,$r=new ue({strictVariables:!0}),ei=(e,t)=>$r.parseAndRender(e,t),ti=e=>g(e,{recursive:!0}).then(()=>{}),ni=async(e,t,n)=>{if(!n&&M(e))throw Error(`${e} already exists. Use --force to overwrite it.`);await C(e,t,`utf-8`)},ri=async e=>{let{targetDirectory:t,force:n,formatting:r,hostUrl:i,schema:a,linting:o,packageName:s,packageVersions:c,useWorkspaceDependencies:l}=e,u=Object.keys(a.slots??{}).sort(),d=Object.keys(a.views??{}).sort().find(e=>u.some(t=>a.slots?.[t]?.views.includes(e)));if(d===void 0)throw Error(`The host schema has no views supported by a slot. Add a view and slot before running tailorkit init.`);let f=u.find(e=>a.slots?.[e]?.views.includes(d)),p=a.components?.Box,m=p?.children===!0&&!p.fields?.required?.length,h=E.join(t,`src`,`tailorkit.gen.ts`);if(!n&&M(h))throw Error(`${h} already exists. Use --force to overwrite it.`);let g=l?`workspace:*`:c.tailorkit,_=[],v=[];o&&(_.push(`pnpm run lint`),v.push(`pnpm run lint:fix`)),r&&(_.push(`pnpm run format`),v.push(`pnpm run format:fix`));let y={viewPath:JSON.stringify(d),slotName:JSON.stringify(f),useBox:m,checkScript:_.join(` && `),fixScript:v.join(` && `),formatting:r,hostUrl:i,linting:o,oxfmtVersion:c.oxfmt,oxlintVersion:c.oxlint,packageName:s,preactVersion:c.preact,tailorkitVersion:g,typescriptVersion:c.typescript,zodVersion:c.zod??`^4.0.0`,drizzleKitVersion:c.drizzleKit??`1.0.0-rc.4-5d5b77c`,drizzleOrmVersion:c.drizzleOrm??`1.0.0-rc.4-5d5b77c`};await ti(E.join(t,`src`,`views`)),await ti(E.join(t,`src`,`functions`));let b=[{template:Br,dest:`package.json`},{template:Vr,dest:`tsconfig.json`},{template:Hr,dest:`tailorkit.config.ts`},{template:Zr,dest:`logo-dark.svg`},{template:Qr,dest:`logo-light.svg`},{template:Ur,dest:`.gitignore`},{template:Wr,dest:`oxlint.config.ts`,condition:o},{template:Gr,dest:`oxfmt.config.ts`,condition:r},{template:Kr,dest:E.join(`src`,`client.ts`)},{template:qr,dest:E.join(`src`,`views`,`default.tsx`)},{template:Jr,dest:E.join(`src`,`server.ts`)},{template:Yr,dest:E.join(`src`,`schema.ts`)},{template:Xr,dest:E.join(`src`,`functions`,`greeting.ts`)}];await Promise.all(b.filter(e=>e.condition!==!1).map(async({template:e,dest:r})=>{let i=await ei(e,y);await ni(E.join(t,r),i,n)})),await Mr({cwd:t,schema:a})},ii=[`pnpm`,`yarn`,`npm`,`bun`],ai=e=>ii.includes(e),oi=e=>e.trim().toLowerCase().replaceAll(/[^a-z0-9._/-]+/gu,`-`).replaceAll(/^-+|-+$/gu,``),Z=e=>(s(e)&&(i(`Init cancelled.`),process.exit(0)),e),si=(e,t)=>E.resolve(t,e??`.`),ci=async(e,t)=>{let n=oi(E.basename(t))||`tailorkit-app`;return oi(e===void 0?Z(await f({defaultValue:n,message:`Package name`,placeholder:n,validate:e=>oi(e??``).length===0?`Enter a package name.`:void 0})):e)},li=async e=>{if(e!==void 0){if(ai(e))return e;throw Error(`--package-manager must be one of: ${ii.join(`, `)}.`)}return Z(await u({initialValue:`pnpm`,message:`Package manager`,options:ii.map(e=>({label:e,value:e}))}))},ui=async e=>e===void 0?Z(await a({initialValue:!0,message:`Add linting with oxlint?`})):e,di=async e=>e===void 0?Z(await a({initialValue:!0,message:`Add formatting with oxfmt?`})):e,fi=e=>{try{hn(e??``);return}catch{return`Enter a valid host URL.`}},pi=async e=>{if(e!==void 0){let t=fi(e);if(t!==void 0)throw Error(t);return hn(e)}let t=`https://example.com/api/tailorkit`;return hn(Z(await f({defaultValue:t,message:`Host URL`,placeholder:t,validate:fi})))},mi=async e=>e===void 0?Z(await a({initialValue:!0,message:`Install dependencies?`})):e,hi=async(e,t)=>t||!M(e)?t:Z(await a({initialValue:!1,message:`${m.cyan(e)} already exists. Overwrite matching files?`})),gi=(e,t,n)=>new Promise((r,i)=>{let a=se(e,t,{cwd:n,stdio:`inherit`});a.on(`close`,r),a.on(`error`,i)}),_i=async(e,t)=>{let n=d();n.start(`Installing dependencies with ${t}`);let r=await gi(t,[`install`],e);if(r!==0)throw n.stop(`Install failed.`),Error(`${t} install exited with code ${r}.`);n.stop(`Installed dependencies.`)},vi=async(e,t)=>{let n=d();n.start(`Formatting project`);let r=await gi(t,[`run`,`format:fix`],e);if(r!==0)throw n.stop(`Formatting failed.`),Error(`${t} run format:fix exited with code ${r}.`);n.stop(`Formatted project.`)},yi=async e=>{let t=si(e.directory,e.cwd),n=await ci(e.name,t),r=E.join(t,n),i=await hi(r,e.force??!1),a=await li(e.packageManager),o=await pi(e.host),s=await ui(e.linting),c=await di(e.formatting),l=await mi(e.install),u=d();u.start(`Fetching host schema`);let f;try{f=await jr(o),u.stop(`Fetched host schema.`)}catch(e){throw u.stop(`Unable to fetch host schema.`),e}u.start(`Resolving package versions`);let p=await zr();return u.stop(`Resolved package versions.`),await g(r,{recursive:!0}),await ri({force:i,formatting:c,hostUrl:o,linting:s,packageName:n,packageVersions:p,schema:f,targetDirectory:r}),l&&(await _i(r,a),c&&await vi(r,a)),r},bi=262144,xi={".css":`text/css; charset=utf-8`,".html":`text/html; charset=utf-8`,".js":`text/javascript; charset=utf-8`,".json":`application/json; charset=utf-8`,".map":`application/json; charset=utf-8`},Q=e=>e instanceof Error?e.message:String(e),Si=e=>typeof e==`object`&&!!e&&`code`in e&&e.code===`UNAUTHORIZED`&&`message`in e&&typeof e.message==`string`&&/Preview session is unavailable|Preview developer reconnect grace expired|Preview CLI token is unavailable/u.test(e.message);async function Ci(e){let t=await b(e),n=(await y(t,{recursive:!0,withFileTypes:!0})).filter(e=>e.isFile()).toSorted((e,t)=>E.join(e.parentPath,e.name).localeCompare(E.join(t.parentPath,t.name)));if(n.length>100)throw Error(`Preview build exceeds 100 files.`);let r=[],i={files:[]},a=0;for(let e of n){let n=await b(E.join(e.parentPath,e.name)),o=E.relative(t,n).replaceAll(E.sep,`/`);if(!o||o.startsWith(`../`)||E.isAbsolute(o))throw Error(`Preview file escapes the build output.`);let s=await v(n);if(s.length>1048576)throw Error(`Preview file ${o} exceeds 1 MiB.`);if(a+=s.length,a>10485760)throw Error(`Preview build exceeds 10 MiB.`);o===`views.json`&&(i.views=Tt.shape.views.unwrap().parse(JSON.parse(s.toString(`utf8`)))),r.push(s),i.files.push({path:o,contentType:xi[E.extname(o)]??`application/octet-stream`,size:s.length,chunks:Math.ceil(s.length/bi),sha256:ae(`sha256`).update(s).digest(`hex`)})}if(!i.files.some(e=>e.path===`client.js`))throw Error(`Preview build is missing client.js.`);return{files:r,manifest:i,fingerprint:ae(`sha256`).update(JSON.stringify(i)).digest(`hex`)}}function wi(e,t,n){let r=0;return async()=>{let i=++r;try{let n=await e();i===r&&t(n)}catch(e){i===r&&n(e)}}}async function Ti(e,t){let{buildId:n}=await e.beginBuild({manifest:t.manifest});for(let[r,i]of t.files.entries())for(let a=0;a<(t.manifest.files[r]?.chunks??0);a++)await e.uploadChunk({buildId:n,fileIndex:r,chunkIndex:a,base64:i.subarray(a*bi,(a+1)*bi).toString(`base64`)});await e.commitBuild({buildId:n})}var Ei=k.object({config:k.string().optional(),cwd:k.string().default(`.`),mode:k.string().optional(),outDir:k.string().optional(),replace:k.boolean().optional()}),Di=e=>{let t=Ei.parse(e);return{configPath:t.config,cwd:t.cwd,mode:t.mode,outDir:t.outDir,replace:t.replace}};async function Oi(e){let t=await ee(e.configPath,e.cwd);if(!t.config.appId)throw Error(`Missing appId. Deploy once before starting a remote preview.`);let n=await In(e),r=await Pn(n.hostUrl);if(!r?.deployToken)throw Error(`Not logged in. Run tailorkit login first.`);let{buildApp:i}=await import(`@tailorkit/app/builder`),a=await i({...e,watch:!0}),o=async()=>{a&&typeof a==`object`&&`close`in a&&await a.close()},s=await B({headers:{authorization:`Bearer ${r.deployToken}`},url:n.hostUrl}).preview.start({appId:t.config.appId,replaceActive:e.replace}).catch(async e=>{throw await o(),e}),l=`data`in s?s.data:s;if(!l)throw await o(),Error(`Unable to start preview session.`);let u=B({fetch:(e,t)=>fetch(e,{...t,signal:AbortSignal.timeout(5e3)}),headers:{authorization:`Bearer ${r.deployToken}`},url:n.hostUrl}),d=async()=>{try{await u.preview.stop({sessionId:l.sessionId})}catch(e){c.warn(`Unable to end preview session: ${Q(e)}`)}},f=E.resolve(t.root,e.outDir??t.config.build?.outDir??`.tailorkit`),p,h;try{p=await b(E.join(f,`client`)),h=await Ci(p)}catch(e){try{await o()}catch(e){c.warn(`Unable to close preview watcher: ${Q(e)}`)}throw await d(),e}let g,_,v,y=!1,x=!1,S,C,w,T=0,D=1e3,O=0,te=()=>{y||(y=!0,process.off(`SIGINT`,A),process.off(`SIGTERM`,A),S&&clearTimeout(S),C&&clearTimeout(C),w&&clearInterval(w),v?.close(),o().catch(e=>{c.warn(`Unable to close preview watcher: ${Q(e)}`)}),c.warn(`Preview session ended. Start a new preview to continue.`))},ne=()=>{y||!_||x||(S&&clearTimeout(S),S=setTimeout(()=>{if(S=void 0,!_||h.fingerprint===g)return;let e=h,t=_,n=O;x=!0,T=Date.now(),Ti(t,e).then(()=>{n===O&&(g=e.fingerprint)}).catch(e=>{y||c.warn(`Preview upload interrupted: ${Q(e)}`)}).finally(()=>{n===O&&(x=!1,h.fingerprint!==g&&ne())})},Math.max(500,500-(Date.now()-T))))},re=wi(()=>Ci(p),e=>{y||(h=e,ne())},e=>{y||c.warn(`Keeping the last successful preview: ${Q(e)}`)});a&&typeof a==`object`&&`on`in a&&a.on(`event`,e=>{e.code===`BUNDLE_END`&&re()});let k=()=>{if(y)return;let e=new URL(l.tunnelUrl);e.searchParams.set(`role`,`uploader`);let t=new WebSocket(e,l.tunnelToken);v=t,t.addEventListener(`open`,()=>{O+=1,D=1e3,_=Mt(t);let e=()=>void _?.heartbeat().catch(e=>{v!==t||y||(Si(e)?te():t.close())});e(),w=setInterval(e,2e4),ne()}),t.addEventListener(`close`,()=>{O+=1,x=!1,w&&clearInterval(w),v===t&&(v=void 0,_=void 0),y||(C=setTimeout(k,D),D=Math.min(D*2,3e4))}),t.addEventListener(`error`,()=>t.close())};k();let A=()=>{y||(y=!0,process.off(`SIGINT`,A),process.off(`SIGTERM`,A),o().catch(e=>{c.warn(`Unable to close preview watcher: ${Q(e)}`)}),S&&clearTimeout(S),C&&clearTimeout(C),w&&clearInterval(w),v?.close(),d().finally(()=>process.exit(0)))};process.once(`SIGINT`,A),process.once(`SIGTERM`,A);let j=new URL(n.hostUrl);j.pathname=`${j.pathname.replace(/\/+$/u,``)}/preview/${l.shareId}`,c.info(m.green(`Host preview: ${j.href}`)),c.info(m.dim(`Uploading built app assets from ${p}`))}var ki=e=>{let t=T();return t===`darwin`?{args:[e],command:`open`}:t===`win32`?{args:[`/c`,`start`,``,e],command:`cmd`}:{args:[e],command:`xdg-open`}},Ai=e=>new Promise(t=>{let{args:n,command:r}=ki(e),i=se(r,n,{detached:!0,stdio:`ignore`,windowsHide:!0});i.once(`error`,()=>{t(!1)}),i.once(`spawn`,()=>{i.unref(),t(!0)})}),$=p(`tailorkit`),ji=e=>{if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n.toFixed(n>=10?1:2)} ${t[r]}`},Mi=async(e,t=!0)=>{let n=d(),r=!1;try{let i=await Fn(e,({expiresAt:e,hostUrl:i,userCode:a})=>{let o=An(i,a);t&&Ai(o),c.info(`Enter this code in the host app: ${m.bold(a)}`),c.info(`Approval URL: ${m.cyan(o)}`),c.info(`Code expires at ${e.toLocaleString()}.`),c.info(`Waiting for approval...`),n.start(`Checking approval status`),r=!0});return r&&n.stop(`Approved.`),i}catch(e){throw r&&n.stop(`Approval failed.`),e}};$.option(`--cwd <path>`,`Working directory`,{default:`.`}),$.command(`preview`,`Preview the app inside a host app`).option(`--config <path>`,`Path to tailorkit config`).option(`--out-dir <path>`,`Build output directory`).option(`--mode <mode>`,`Vite mode`).option(`--replace`,`End the active preview for this app and start a new one`).action(async e=>{o(m.bold(`TailorKit`));try{await Oi(Di(e))}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`login`,`Authenticate the TailorKit CLI with a host app`).option(`--config <path>`,`Path to tailorkit config`).option(`--open`,`Open the approval URL in the default browser`,{default:!0}).option(`--timeout <seconds>`,`Seconds to wait for approval`,{default:1800}).action(async e=>{o(m.bold(`TailorKit`));try{let t=Number.parseInt(String(e.timeout??`1800`),10);if(!Number.isInteger(t)||t<=0)throw Error(`--timeout must be a positive integer.`);await Mi({configPath:e.config,cwd:String(e.cwd??`.`),timeout:t*1e3},e.open!==!1),l(`Authenticated successfully.`)}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`logout`,`Remove stored TailorKit CLI credentials for a host app`).option(`--config <path>`,`Path to tailorkit config`).action(async e=>{o(m.bold(`TailorKit`));try{let t=await Ln({configPath:e.config,cwd:String(e.cwd??`.`)});l(t.removed?`Logged out of ${m.cyan(t.hostUrl)}.`:`No stored credentials found for ${m.cyan(t.hostUrl)}.`)}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`whoami`,`Show the current TailorKit CLI authentication scope`).option(`--config <path>`,`Path to tailorkit config`).action(async e=>{o(m.bold(`TailorKit`));try{let t=await In({configPath:e.config,cwd:String(e.cwd??`.`)});c.info(`Host: ${m.cyan(t.hostUrl)}`),c.info(`Scope: ${m.cyan(JSON.stringify(t.scope))}`),l(`Authenticated.`)}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`deploy`,`Build and deploy the TailorKit app`).option(`--config <path>`,`Path to tailorkit config`).option(`--out-dir <path>`,`Build output directory`).option(`--mode <mode>`,`Vite mode`).action(async e=>{o(m.bold(`TailorKit`));let t=d();try{t.start(`Building and deploying app`);let n=await Zn({configPath:e.config,cwd:String(e.cwd??`.`),mode:e.mode,onLoginRequired:async()=>{t.stop(`Authentication required.`);let n=await Mi({configPath:e.config,cwd:String(e.cwd??`.`)});return t.start(`Building and deploying app`),n},onMissingAppId:async({appName:e,configPath:n,hostUrl:r,reason:i})=>{t.stop(`App not linked.`),c.info(i===`missing`?`No appId found in ${m.cyan(n)}.`:`The appId in ${m.cyan(n)} does not exist.`),c.info(`Host: ${m.cyan(r)}`);let o=await a({initialValue:!0,message:i===`missing`?`Create a TailorKit app named ${e}?`:`Create a new TailorKit app named ${e} and update the config?`});return!s(o)&&(o&&t.start(`Creating app and deploying`),o===!0)},onTypecheckFailed:async({command:e,output:n})=>{t.stop(`Type check failed.`),c.error(`Type check failed while running ${m.cyan(e)}.`),n&&c.error(n);let r=await a({initialValue:!1,message:`Type check failed, but the app built successfully. Upload anyway?`});return!s(r)&&(r&&t.start(`Uploading app`),r===!0)},outDir:e.outDir});t.stop(`Deployed app.`),n.createdApp&&c.info(`Created app and updated tailorkit.config.ts with ${m.cyan(n.appId)}.`),c.info(`Host: ${m.cyan(n.hostUrl)}`),c.info(`App: ${m.cyan(n.appId)}`),c.info(`Deployment: ${m.cyan(n.deploymentId)}`),c.info(`Uploaded files:`);for(let e of n.uploadedFiles)c.info(` ${m.cyan(e.path)} ${m.dim(`${ji(e.size)} raw, ${ji(e.gzipSize)} gzip`)}`);n.status&&c.info(`Status: ${m.cyan(n.status)}`),l(`Deployment published.`)}catch(e){t.stop(`Deployment failed.`),c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`build`,`Build the TailorKit app`).option(`--config <path>`,`Path to tailorkit config`).option(`--out-dir <path>`,`Build output directory`).option(`--mode <mode>`,`Vite mode`).action(async e=>{o(m.bold(`TailorKit`));try{let{buildApp:t}=await import(`@tailorkit/app/builder`);await t({configPath:e.config,cwd:String(e.cwd??`.`),mode:e.mode,outDir:e.outDir}),l(`Built app.`)}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`db <command>`,`Generate database migrations with db generate`).option(`--config <path>`,`Path to tailorkit config`).option(`--name <name>`,`Migration name`).action(async(e,t)=>{o(m.bold(`TailorKit`));try{if(e!==`generate`)throw Error(`Unknown database command: ${e}. Use tailorkit db generate.`);let{generateAppMigrations:n}=await import(`@tailorkit/app/builder`),r=await n({configPath:t.config,cwd:String(t.cwd??`.`),name:t.name});l(`Migrations are up to date in ${m.cyan(r)}.`)}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`generate`,`Generate TailorKit app bindings`).option(`--config <path>`,`Path to tailorkit config`).option(`--out <path>`,`Generated TypeScript output file`).action(async e=>{o(m.bold(`TailorKit`));try{let t=await Mr({configPath:e.config,cwd:String(e.cwd??`.`),outFile:e.out});l(`Generated ${m.cyan(t)}.`)}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`init [directory]`,`Create a new TailorKit app`).option(`--name <name>`,`Package name`).option(`--host <url>`,`TailorKit host URL`).option(`--package-manager <pm>`,`Package manager: bun, yarn, pnpm, or npm`).option(`--lint`,`Add oxlint (use --no-lint to skip)`).option(`--format`,`Add oxfmt (use --no-format to skip)`).option(`--install`,`Install dependencies after scaffolding (use --no-install to skip)`).option(`--force`,`Overwrite existing files`).action(async(e,t)=>{o(m.bold(`TailorKit`));try{let n=await yi({cwd:String(t.cwd??`.`),directory:e,force:t.force,formatting:t.format,host:t.host,install:t.install,linting:t.lint,name:t.name,packageManager:t.packageManager});l(`Created app at ${m.cyan(n)}.`)}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`agent`,`Chat with the TailorKit app agent`).option(`--app <id>`,`App ID (uses config appId, or prompts to select or create an app)`).option(`--config <path>`,`Path to tailorkit config`).action(async e=>{try{let{runAgentCommand:t}=await import(`./assets/agent-BSIUE6vC.js`);await t({appId:e.app,configPath:e.config,cwd:String(e.cwd??`.`),onLoginRequired:()=>Mi({configPath:e.config,cwd:String(e.cwd??`.`)})})}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exitCode=1}}),$.help(),$.version(`0.1.0-beta.19`),$.parse();export{kn as a,Pn as i,zn as n,In as o,jn as r,B as s,Rn as t};
193
+ `,$r=new fe({strictVariables:!0}),ei=(e,t)=>$r.parseAndRender(e,t),ti=e=>g(e,{recursive:!0}).then(()=>{}),ni=async(e,t,n)=>{if(!n&&le(e))throw Error(`${e} already exists. Use --force to overwrite it.`);await C(e,t,`utf-8`)},ri=async e=>{let{targetDirectory:t,force:n,formatting:r,hostUrl:i,schema:a,linting:o,packageName:s,packageVersions:c,useWorkspaceDependencies:l}=e,u=Object.keys(a.slots??{}).sort(),d=Object.keys(a.views??{}).sort().find(e=>u.some(t=>a.slots?.[t]?.views.includes(e)));if(d===void 0)throw Error(`The host schema has no views supported by a slot. Add a view and slot before running tailorkit init.`);let f=u.find(e=>a.slots?.[e]?.views.includes(d)),p=a.components?.Box,m=p?.children===!0&&!p.fields?.required?.length,h=E.join(t,`src`,`tailorkit.gen.ts`);if(!n&&le(h))throw Error(`${h} already exists. Use --force to overwrite it.`);let g=l?`workspace:*`:c.tailorkit,_=[],v=[];o&&(_.push(`pnpm run lint`),v.push(`pnpm run lint:fix`)),r&&(_.push(`pnpm run format`),v.push(`pnpm run format:fix`));let y={viewPath:JSON.stringify(d),slotName:JSON.stringify(f),multiple:a.slots?.[f]?.multiple===!0,useBox:m,checkScript:_.join(` && `),fixScript:v.join(` && `),formatting:r,hostUrl:i,linting:o,oxfmtVersion:c.oxfmt,oxlintVersion:c.oxlint,packageName:s,preactVersion:c.preact,tailorkitVersion:g,typescriptVersion:c.typescript,zodVersion:c.zod??`^4.0.0`,drizzleKitVersion:c.drizzleKit??`1.0.0-rc.4-5d5b77c`,drizzleOrmVersion:c.drizzleOrm??`1.0.0-rc.4-5d5b77c`};await ti(E.join(t,`src`,`views`)),await ti(E.join(t,`src`,`functions`));let b=[{template:Br,dest:`package.json`},{template:Vr,dest:`tsconfig.json`},{template:Hr,dest:`tailorkit.config.ts`},{template:Zr,dest:`logo-dark.svg`},{template:Qr,dest:`logo-light.svg`},{template:Ur,dest:`.gitignore`},{template:Wr,dest:`oxlint.config.ts`,condition:o},{template:Gr,dest:`oxfmt.config.ts`,condition:r},{template:Kr,dest:E.join(`src`,`client.ts`)},{template:qr,dest:E.join(`src`,`views`,`default.tsx`)},{template:Jr,dest:E.join(`src`,`server.ts`)},{template:Yr,dest:E.join(`src`,`schema.ts`)},{template:Xr,dest:E.join(`src`,`functions`,`greeting.ts`)}];await Promise.all(b.filter(e=>e.condition!==!1).map(async({template:e,dest:r})=>{let i=await ei(e,y);await ni(E.join(t,r),i,n)})),await Mr({cwd:t,schema:a})},ii=[`pnpm`,`yarn`,`npm`,`bun`],ai=e=>ii.includes(e),oi=e=>e.trim().toLowerCase().replaceAll(/[^a-z0-9._/-]+/gu,`-`).replaceAll(/^-+|-+$/gu,``),Z=e=>(s(e)&&(i(`Init cancelled.`),process.exit(0)),e),si=(e,t)=>E.resolve(t,e??`.`),ci=async(e,t)=>{let n=oi(E.basename(t))||`tailorkit-app`;return oi(e===void 0?Z(await f({defaultValue:n,message:`Package name`,placeholder:n,validate:e=>oi(e??``).length===0?`Enter a package name.`:void 0})):e)},li=async e=>{if(e!==void 0){if(ai(e))return e;throw Error(`--package-manager must be one of: ${ii.join(`, `)}.`)}return Z(await u({initialValue:`pnpm`,message:`Package manager`,options:ii.map(e=>({label:e,value:e}))}))},ui=async e=>e===void 0?Z(await a({initialValue:!0,message:`Add linting with oxlint?`})):e,di=async e=>e===void 0?Z(await a({initialValue:!0,message:`Add formatting with oxfmt?`})):e,fi=e=>{try{gn(e??``);return}catch{return`Enter a valid host URL.`}},pi=async e=>{if(e!==void 0){let t=fi(e);if(t!==void 0)throw Error(t);return gn(e)}let t=`https://example.com/api/tailorkit`;return gn(Z(await f({defaultValue:t,message:`Host URL`,placeholder:t,validate:fi})))},mi=async e=>e===void 0?Z(await a({initialValue:!0,message:`Install dependencies?`})):e,hi=async(e,t)=>t||!le(e)?t:Z(await a({initialValue:!1,message:`${m.cyan(e)} already exists. Overwrite matching files?`})),gi=(e,t,n)=>new Promise((r,i)=>{let a=ce(e,t,{cwd:n,stdio:`inherit`});a.on(`close`,r),a.on(`error`,i)}),_i=async(e,t)=>{let n=d();n.start(`Installing dependencies with ${t}`);let r=await gi(t,[`install`],e);if(r!==0)throw n.stop(`Install failed.`),Error(`${t} install exited with code ${r}.`);n.stop(`Installed dependencies.`)},vi=async(e,t)=>{let n=d();n.start(`Formatting project`);let r=await gi(t,[`run`,`format:fix`],e);if(r!==0)throw n.stop(`Formatting failed.`),Error(`${t} run format:fix exited with code ${r}.`);n.stop(`Formatted project.`)},yi=async e=>{let t=si(e.directory,e.cwd),n=await ci(e.name,t),r=E.join(t,n),i=await hi(r,e.force??!1),a=await li(e.packageManager),o=await pi(e.host),s=await ui(e.linting),c=await di(e.formatting),l=await mi(e.install),u=d();u.start(`Fetching host schema`);let f;try{f=await jr(o),u.stop(`Fetched host schema.`)}catch(e){throw u.stop(`Unable to fetch host schema.`),e}u.start(`Resolving package versions`);let p=await zr();return u.stop(`Resolved package versions.`),await g(r,{recursive:!0}),await ri({force:i,formatting:c,hostUrl:o,linting:s,packageName:n,packageVersions:p,schema:f,targetDirectory:r}),l&&(await _i(r,a),c&&await vi(r,a)),r},bi=262144,xi={".css":`text/css; charset=utf-8`,".html":`text/html; charset=utf-8`,".js":`text/javascript; charset=utf-8`,".json":`application/json; charset=utf-8`,".map":`application/json; charset=utf-8`},Q=e=>e instanceof Error?e.message:String(e),Si=e=>typeof e==`object`&&!!e&&`code`in e&&e.code===`UNAUTHORIZED`&&`message`in e&&typeof e.message==`string`&&/Preview session is unavailable|Preview developer reconnect grace expired|Preview CLI token is unavailable/u.test(e.message);async function Ci(e){let t=await b(e),n=(await y(t,{recursive:!0,withFileTypes:!0})).filter(e=>e.isFile()).toSorted((e,t)=>E.join(e.parentPath,e.name).localeCompare(E.join(t.parentPath,t.name)));if(n.length>100)throw Error(`Preview build exceeds 100 files.`);let r=[],i={files:[]},a=0;for(let e of n){let n=await b(E.join(e.parentPath,e.name)),o=E.relative(t,n).replaceAll(E.sep,`/`);if(!o||o.startsWith(`../`)||E.isAbsolute(o))throw Error(`Preview file escapes the build output.`);let s=await v(n);if(s.length>1048576)throw Error(`Preview file ${o} exceeds 1 MiB.`);if(a+=s.length,a>10485760)throw Error(`Preview build exceeds 10 MiB.`);o===`views.json`&&(i.views=Ot.shape.views.unwrap().parse(JSON.parse(s.toString(`utf8`)))),r.push(s),i.files.push({path:o,contentType:xi[E.extname(o)]??`application/octet-stream`,size:s.length,chunks:Math.ceil(s.length/bi),sha256:oe(`sha256`).update(s).digest(`hex`)})}if(!i.files.some(e=>e.path===`client.js`))throw Error(`Preview build is missing client.js.`);return{files:r,manifest:i,fingerprint:oe(`sha256`).update(JSON.stringify(i)).digest(`hex`)}}function wi(e,t,n){let r=0;return async()=>{let i=++r;try{let n=await e();i===r&&t(n)}catch(e){i===r&&n(e)}}}async function Ti(e,t){let{buildId:n}=await e.beginBuild({manifest:t.manifest});for(let[r,i]of t.files.entries())for(let a=0;a<(t.manifest.files[r]?.chunks??0);a++)await e.uploadChunk({buildId:n,fileIndex:r,chunkIndex:a,base64:i.subarray(a*bi,(a+1)*bi).toString(`base64`)});await e.commitBuild({buildId:n})}var Ei=k.object({config:k.string().optional(),cwd:k.string().default(`.`),mode:k.string().optional(),outDir:k.string().optional(),replace:k.boolean().optional()}),Di=e=>{let t=Ei.parse(e);return{configPath:t.config,cwd:t.cwd,mode:t.mode,outDir:t.outDir,replace:t.replace}};async function Oi(e){let t=await ee(e.configPath,e.cwd);if(!t.config.appId)throw Error(`Missing appId. Deploy once before starting a remote preview.`);let n=await Ln(e),r=await Fn(n.hostUrl);if(!r?.deployToken)throw Error(`Not logged in. Run tailorkit login first.`);let{buildApp:i}=await import(`@tailorkit/app/builder`),a=await i({...e,watch:!0}),o=async()=>{a&&typeof a==`object`&&`close`in a&&await a.close()},s=await L({headers:{authorization:`Bearer ${r.deployToken}`},url:n.hostUrl}).preview.start({appId:t.config.appId,replaceActive:e.replace}).catch(async e=>{throw await o(),e}),l=`data`in s?s.data:s;if(!l)throw await o(),Error(`Unable to start preview session.`);let u=L({fetch:(e,t)=>fetch(e,{...t,signal:AbortSignal.timeout(5e3)}),headers:{authorization:`Bearer ${r.deployToken}`},url:n.hostUrl}),d=async()=>{try{await u.preview.stop({sessionId:l.sessionId})}catch(e){c.warn(`Unable to end preview session: ${Q(e)}`)}},f=E.resolve(t.root,e.outDir??t.config.build?.outDir??`.tailorkit`),p,h;try{p=await b(E.join(f,`client`)),h=await Ci(p)}catch(e){try{await o()}catch(e){c.warn(`Unable to close preview watcher: ${Q(e)}`)}throw await d(),e}let g,_,v,y=!1,x=!1,S,C,w,T=0,D=1e3,O=0,te=()=>{y||(y=!0,process.off(`SIGINT`,A),process.off(`SIGTERM`,A),S&&clearTimeout(S),C&&clearTimeout(C),w&&clearInterval(w),v?.close(),o().catch(e=>{c.warn(`Unable to close preview watcher: ${Q(e)}`)}),c.warn(`Preview session ended. Start a new preview to continue.`))},ne=()=>{y||!_||x||(S&&clearTimeout(S),S=setTimeout(()=>{if(S=void 0,!_||h.fingerprint===g)return;let e=h,t=_,n=O;x=!0,T=Date.now(),Ti(t,e).then(()=>{n===O&&(g=e.fingerprint)}).catch(e=>{y||c.warn(`Preview upload interrupted: ${Q(e)}`)}).finally(()=>{n===O&&(x=!1,h.fingerprint!==g&&ne())})},Math.max(500,500-(Date.now()-T))))},re=wi(()=>Ci(p),e=>{y||(h=e,ne())},e=>{y||c.warn(`Keeping the last successful preview: ${Q(e)}`)});a&&typeof a==`object`&&`on`in a&&a.on(`event`,e=>{e.code===`BUNDLE_END`&&re()});let k=()=>{if(y)return;let e=new URL(l.tunnelUrl);e.searchParams.set(`role`,`uploader`);let t=new WebSocket(e,l.tunnelToken);v=t,t.addEventListener(`open`,()=>{O+=1,D=1e3,_=Ft(t);let e=()=>void _?.heartbeat().catch(e=>{v!==t||y||(Si(e)?te():t.close())});e(),w=setInterval(e,2e4),ne()}),t.addEventListener(`close`,()=>{O+=1,x=!1,w&&clearInterval(w),v===t&&(v=void 0,_=void 0),y||(C=setTimeout(k,D),D=Math.min(D*2,3e4))}),t.addEventListener(`error`,()=>t.close())};k();let A=()=>{y||(y=!0,process.off(`SIGINT`,A),process.off(`SIGTERM`,A),o().catch(e=>{c.warn(`Unable to close preview watcher: ${Q(e)}`)}),S&&clearTimeout(S),C&&clearTimeout(C),w&&clearInterval(w),v?.close(),d().finally(()=>process.exit(0)))};process.once(`SIGINT`,A),process.once(`SIGTERM`,A);let ie=new URL(n.hostUrl);ie.pathname=`${ie.pathname.replace(/\/+$/u,``)}/preview/${l.shareId}`,c.info(m.green(`Host preview: ${ie.href}`)),c.info(m.dim(`Uploading built app assets from ${p}`))}var ki=e=>{let t=T();return t===`darwin`?{args:[e],command:`open`}:t===`win32`?{args:[`/c`,`start`,``,e],command:`cmd`}:{args:[e],command:`xdg-open`}},Ai=e=>new Promise(t=>{let{args:n,command:r}=ki(e),i=ce(r,n,{detached:!0,stdio:`ignore`,windowsHide:!0});i.once(`error`,()=>{t(!1)}),i.once(`spawn`,()=>{i.unref(),t(!0)})}),$=p(`tailorkit`),ji=e=>{if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n.toFixed(n>=10?1:2)} ${t[r]}`},Mi=async(e,t=!0)=>{let n=d(),r=!1;try{let i=await In(e,({expiresAt:e,hostUrl:i,userCode:a})=>{let o=jn(i,a);t&&Ai(o),c.info(`Enter this code in the host app: ${m.bold(a)}`),c.info(`Approval URL: ${m.cyan(o)}`),c.info(`Code expires at ${e.toLocaleString()}.`),c.info(`Waiting for approval...`),n.start(`Checking approval status`),r=!0});return r&&n.stop(`Approved.`),i}catch(e){throw r&&n.stop(`Approval failed.`),e}};$.option(`--cwd <path>`,`Working directory`,{default:`.`}),$.command(`preview`,`Preview the app inside a host app`).option(`--config <path>`,`Path to tailorkit config`).option(`--out-dir <path>`,`Build output directory`).option(`--mode <mode>`,`Vite mode`).option(`--replace`,`End the active preview for this app and start a new one`).action(async e=>{o(m.bold(`TailorKit`));try{await Oi(Di(e))}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`login`,`Authenticate the TailorKit CLI with a host app`).option(`--config <path>`,`Path to tailorkit config`).option(`--open`,`Open the approval URL in the default browser`,{default:!0}).option(`--timeout <seconds>`,`Seconds to wait for approval`,{default:1800}).action(async e=>{o(m.bold(`TailorKit`));try{let t=Number.parseInt(String(e.timeout??`1800`),10);if(!Number.isInteger(t)||t<=0)throw Error(`--timeout must be a positive integer.`);await Mi({configPath:e.config,cwd:String(e.cwd??`.`),timeout:t*1e3},e.open!==!1),l(`Authenticated successfully.`)}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`logout`,`Remove stored TailorKit CLI credentials for a host app`).option(`--config <path>`,`Path to tailorkit config`).action(async e=>{o(m.bold(`TailorKit`));try{let t=await Rn({configPath:e.config,cwd:String(e.cwd??`.`)});l(t.removed?`Logged out of ${m.cyan(t.hostUrl)}.`:`No stored credentials found for ${m.cyan(t.hostUrl)}.`)}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`whoami`,`Show the current TailorKit CLI authentication scope`).option(`--config <path>`,`Path to tailorkit config`).action(async e=>{o(m.bold(`TailorKit`));try{let t=await Ln({configPath:e.config,cwd:String(e.cwd??`.`)});c.info(`Host: ${m.cyan(t.hostUrl)}`),c.info(`Scope: ${m.cyan(JSON.stringify(t.scope))}`),l(`Authenticated.`)}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`deploy`,`Build and deploy the TailorKit app`).option(`--config <path>`,`Path to tailorkit config`).option(`--out-dir <path>`,`Build output directory`).option(`--mode <mode>`,`Vite mode`).action(async e=>{o(m.bold(`TailorKit`));let t=d();try{t.start(`Building and deploying app`);let n=await Zn({configPath:e.config,cwd:String(e.cwd??`.`),mode:e.mode,onLoginRequired:async()=>{t.stop(`Authentication required.`);let n=await Mi({configPath:e.config,cwd:String(e.cwd??`.`)});return t.start(`Building and deploying app`),n},onMissingAppId:async({appName:e,configPath:n,hostUrl:r,reason:i})=>{t.stop(`App not linked.`),c.info(i===`missing`?`No appId found in ${m.cyan(n)}.`:`The appId in ${m.cyan(n)} does not exist.`),c.info(`Host: ${m.cyan(r)}`);let o=await a({initialValue:!0,message:i===`missing`?`Create a TailorKit app named ${e}?`:`Create a new TailorKit app named ${e} and update the config?`});return!s(o)&&(o&&t.start(`Creating app and deploying`),o===!0)},onTypecheckFailed:async({command:e,output:n})=>{t.stop(`Type check failed.`),c.error(`Type check failed while running ${m.cyan(e)}.`),n&&c.error(n);let r=await a({initialValue:!1,message:`Type check failed, but the app built successfully. Upload anyway?`});return!s(r)&&(r&&t.start(`Uploading app`),r===!0)},outDir:e.outDir});t.stop(`Deployed app.`),n.createdApp&&c.info(`Created app and updated tailorkit.config.ts with ${m.cyan(n.appId)}.`),c.info(`Host: ${m.cyan(n.hostUrl)}`),c.info(`App: ${m.cyan(n.appId)}`),c.info(`Deployment: ${m.cyan(n.deploymentId)}`),c.info(`Uploaded files:`);for(let e of n.uploadedFiles)c.info(` ${m.cyan(e.path)} ${m.dim(`${ji(e.size)} raw, ${ji(e.gzipSize)} gzip`)}`);n.status&&c.info(`Status: ${m.cyan(n.status)}`),l(`Deployment published.`)}catch(e){t.stop(`Deployment failed.`),c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`build`,`Build the TailorKit app`).option(`--config <path>`,`Path to tailorkit config`).option(`--out-dir <path>`,`Build output directory`).option(`--mode <mode>`,`Vite mode`).action(async e=>{o(m.bold(`TailorKit`));try{let{buildApp:t}=await import(`@tailorkit/app/builder`);await t({configPath:e.config,cwd:String(e.cwd??`.`),mode:e.mode,outDir:e.outDir}),l(`Built app.`)}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`db <command>`,`Generate database migrations with db generate`).option(`--config <path>`,`Path to tailorkit config`).option(`--name <name>`,`Migration name`).action(async(e,t)=>{o(m.bold(`TailorKit`));try{if(e!==`generate`)throw Error(`Unknown database command: ${e}. Use tailorkit db generate.`);let{generateAppMigrations:n}=await import(`@tailorkit/app/builder`),r=await n({configPath:t.config,cwd:String(t.cwd??`.`),name:t.name});l(`Migrations are up to date in ${m.cyan(r)}.`)}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`generate`,`Generate TailorKit app bindings`).option(`--config <path>`,`Path to tailorkit config`).option(`--out <path>`,`Generated TypeScript output file`).action(async e=>{o(m.bold(`TailorKit`));try{let t=await Mr({configPath:e.config,cwd:String(e.cwd??`.`),outFile:e.out});l(`Generated ${m.cyan(t)}.`)}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`init [directory]`,`Create a new TailorKit app`).option(`--name <name>`,`Package name`).option(`--host <url>`,`TailorKit host URL`).option(`--package-manager <pm>`,`Package manager: bun, yarn, pnpm, or npm`).option(`--lint`,`Add oxlint (use --no-lint to skip)`).option(`--format`,`Add oxfmt (use --no-format to skip)`).option(`--install`,`Install dependencies after scaffolding (use --no-install to skip)`).option(`--force`,`Overwrite existing files`).action(async(e,t)=>{o(m.bold(`TailorKit`));try{let n=await yi({cwd:String(t.cwd??`.`),directory:e,force:t.force,formatting:t.format,host:t.host,install:t.install,linting:t.lint,name:t.name,packageManager:t.packageManager});l(`Created app at ${m.cyan(n)}.`)}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exit(1)}}),$.command(`agent`,`Chat with the TailorKit app agent`).option(`--app <id>`,`App ID (uses config appId, or prompts to select or create an app)`).option(`--config <path>`,`Path to tailorkit config`).action(async e=>{try{let{runAgentCommand:t}=await import(`./assets/agent-BSIUE6vC.js`);await t({appId:e.app,configPath:e.config,cwd:String(e.cwd??`.`),onLoginRequired:()=>Mi({configPath:e.config,cwd:String(e.cwd??`.`)})})}catch(e){c.error(e instanceof Error?e.message:String(e)),process.exitCode=1}}),$.help(),$.version(`0.1.0-beta.20`),$.parse();export{An as a,Fn as i,Bn as n,Ln as o,Mn as r,L as s,zn as t};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tailorkit/cli",
3
- "version": "0.1.0-beta.19",
3
+ "version": "0.1.0-beta.20",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -26,9 +26,9 @@
26
26
  "@ai-sdk/tui": "1.0.128",
27
27
  "@clack/prompts": "^1.8.1",
28
28
  "@orpc/client": "2.0.0-beta.40",
29
- "@tailorkit/app": "0.1.0-beta.19",
30
- "@tailorkit/client-platform": "0.1.0-beta.19",
31
- "@tailorkit/core": "0.1.0-beta.19",
29
+ "@tailorkit/app": "0.1.0-beta.20",
30
+ "@tailorkit/client-platform": "0.1.0-beta.20",
31
+ "@tailorkit/core": "0.1.0-beta.20",
32
32
  "ai": "^7.0.127",
33
33
  "cac": "^7.0.0",
34
34
  "jose": "6.2.12",