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

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.
@@ -0,0 +1 @@
1
+ import{fileURLToPath as e}from"node:url";import{dirname as t}from"node:path";const n=e(import.meta.url);t(n);import{a as r,i,n as a,o,r as s,s as c,t as l}from"../index.js";import{autocomplete as u,cancel as d,isCancel as f,log as p,spinner as m,text as h}from"@clack/prompts";import{loadTailorKitConfig as g}from"@tailorkit/app/config/loader";async function _(e,t){let n=m(),r=[];n.start(`Finding apps`);try{let t=1,i=!0;for(;i;){let n=await e.apps.list({page:t,pageSize:100});r.push(...n.items),i=n.pagination.hasMore,t+=1}n.stop(r.length?`Found apps.`:`No apps found.`)}catch(e){throw n.stop(`Unable to list apps.`),e}let i=await u({message:`Select an app or create a new one`,placeholder:`Search by name or app ID`,options:[...r.map(e=>({value:e.id,label:e.name,hint:e.publicId})),{value:null,label:`Create a new app`}],filter:(e,t)=>t.value===null||[t.label,t.hint,t.value].some(t=>t?.toLowerCase().includes(e.toLowerCase()))});if(f(i)){d(`Agent cancelled.`);return}if(i!==null)return i;let a=await l(t),o=await h({message:`App name`,defaultValue:a,placeholder:a,validate:e=>e?.trim()?void 0:`Enter an app name.`});if(f(o)){d(`Agent cancelled.`);return}n.start(`Creating app`);try{let t=await e.apps.create({name:o.trim(),description:null});return n.stop(`Created app.`),t.id}catch(e){throw n.stop(`Unable to create app.`),e}}async function v(e){if(!process.stdin.isTTY||!process.stdout.isTTY)throw Error(`tailorkit agent requires an interactive terminal.`);let t=await g(e.configPath,e.cwd),n=e.appId??t.config.appId,l=await r(e);try{await o(e)}catch(t){if(!(t instanceof s)||!e.onLoginRequired)throw t;await e.onLoginRequired(),await o(e)}let u=await i(l);if(!u)throw new s(l);let d=c({url:l,headers:{authorization:`Bearer ${u.deployToken}`}});if(!n){if(n=await _(d,t.root),!n)return;await a(t.filepath,n),p.info(`Saved appId ${n} to ${t.filepath}.`)}let{openAgentTui:f}=await import(`./agent-tui-DujCIubK.js`);await f({client:d,hostUrl:l,appId:n})}export{v as runAgentCommand};
@@ -0,0 +1 @@
1
+ import{fileURLToPath as e}from"node:url";import{dirname as t}from"node:path";const n=e(import.meta.url);t(n);import{asyncIteratorToUnproxiedDataStream as r}from"@orpc/client";import{runAgentTUI as i}from"@ai-sdk/tui";async function a({client:e,hostUrl:t,appId:n}){await i({title:`TailorKit Agent · ${t}`,transport:{async sendMessages({messages:t,abortSignal:i}){let a=await e.appAgent.chat({appId:n,messages:t.filter(e=>e.role!==`system`)},{signal:i});return r(a)},async reconnectToStream(){return null}},tools:`collapsed`,reasoning:`hidden`})}export{a as openAgentTui};
package/dist/index.js CHANGED
@@ -1,18 +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 ee}from"node:os";import T from"node:path";import{loadTailorKitConfig as te}from"@tailorkit/app/config/loader";import{z as E}from"zod";import{createHash as D}from"node:crypto";import{execFile as ne,spawn as re}from"node:child_process";import{existsSync as ie}from"node:fs";import{promisify as ae}from"node:util";import{gzip as O}from"node:zlib";import{Liquid as oe}from"liquidjs";function k(e){return Array.isArray(e)?e:e==null?[]:[e]}var A=class extends Error{constructor(...e){super(...e),this.name=`AbortError`}};function se(e){let t=Promise.resolve();return(...n)=>t=t.catch(()=>{}).then(()=>e(...n))}var ce=class{index=BigInt(1);generate(){let e=this.index.toString(36);return this.index++,e}};function j(e){return!e||typeof e!=`object`?!1:`next`in e&&typeof e.next==`function`&&Symbol.asyncIterator in e&&typeof e[Symbol.asyncIterator]==`function`}var le=Symbol.asyncDispose??Symbol.for(`asyncDispose`),ue=class{isDone=!1;isExecuteComplete=!1;cleanup;next;constructor(e,t){this.cleanup=t,this.next=se(async()=>{if(this.isDone)return{done:!0,value:void 0};let t;try{let t=await e();return t.done&&(this.isDone=!0),t}catch(e){throw t={value:e},this.isDone=!0,e}finally{this.isDone&&!this.isExecuteComplete&&(this.isExecuteComplete=!0,await this.cleanup(t?{kind:`error`,error:t.value}:{kind:`success`}))}})}async return(e){return this.isDone=!0,this.isExecuteComplete||(this.isExecuteComplete=!0,await this.cleanup({kind:`cancelled`})),{done:!0,value:e}}async throw(e){throw this.isDone=!0,this.isExecuteComplete||(this.isExecuteComplete=!0,await this.cleanup({kind:`cancelled`,error:e})),e}async[le](){this.isDone=!0,this.isExecuteComplete||(this.isExecuteComplete=!0,await this.cleanup({kind:`cancelled`}))}[Symbol.asyncIterator](){return this}};function de(e){if(e)return JSON.parse(e)}function M(e){return JSON.stringify(e)}function fe(e){for(let t of Object.values(e))if(t!==void 0)return!0;return!1}function N(e){if(!e)return!1;let t=typeof e;return t===`object`||t===`function`}var pe=new WeakMap;function me(e,t,{bind:n=!0}={}){let r=Reflect.get(e,t);if(!n||typeof r!=`function`)return r;let i=pe.get(r);i||pe.set(r,i=new WeakMap);let a=i.get(e);return a||i.set(e,a=r.bind(e)),a}var he=class{items=[];pendingPulls=[];closed;push(e){if(this.closed)throw this.closed.reason;let t=this.pendingPulls.shift();t?t[0](e):this.items.push(e)}async pull(){if(this.items.length>0)return this.items.shift();if(this.closed)throw this.closed.reason;return new Promise((e,t)=>{this.pendingPulls.push([e,t])})}close(e){this.closed||(e??=new A(`Queue was closed.`),this.closed={reason:e},this.pendingPulls.forEach(([,t])=>t(e)),this.pendingPulls.length=0)}abort(e){e??=new A(`Queue was aborted.`),this.items.length=0,this.close(e)}};function ge(e,{signal:t}={}){return new Promise((n,r)=>{if(t?.aborted){r(t.reason);return}let i=null,a=setTimeout(()=>{i&&t?.removeEventListener(`abort`,i),n()},e);t&&t.addEventListener(`abort`,i=()=>{clearTimeout(a),r(t?.reason)},{once:!0})})}var _e=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g;function ve(e){try{return encodeURIComponent(e)}catch{return encodeURIComponent(e.replace(_e,`�`))}}function ye(e){if(!e.includes(`%`))return e;try{return decodeURIComponent(e)}catch{return e}}function be(e){return e[0]??{}}async function xe(e){return typeof e.bytes==`function`?e.bytes():new Uint8Array(await e.arrayBuffer())}function Se(e){return typeof e==`string`?e:e instanceof ArrayBuffer?new Uint8Array(e):Array.isArray(e)?we(e):e instanceof Uint8Array?e:new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}function Ce(e){return typeof e==`string`?new TextEncoder().encode(e):e instanceof ArrayBuffer?new Uint8Array(e):e instanceof Uint8Array?e:new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}function we(e){let t=e.map(Ce),n=t.reduce((e,t)=>e+t.byteLength,0),r=new Uint8Array(n),i=0;for(let e of t)r.set(e,i),i+=e.byteLength;return r}var Te=`orpc`;function Ee(e){return e instanceof Error&&e.name.includes(`Abort`)}Object.getPrototypeOf(async function*(){}).constructor;function De(e){let t;return()=>{if(t)return t.result;let n=e();return t={result:n},n}}function Oe(e){return`/${e.map(ve).join(`/`)}`}var ke=Symbol.for(`ORPC_TRACER`);function P(){return globalThis[ke]}function Ae(e){let t=P();if(t)return typeof e==`string`?t.startSpan(e):t.startSpan(e.name,e.parent)}function je(e,t){e&&e.recordException(Ee(t)?`info`:`error`,Me(t))}function Me(e){if(e instanceof Error){let t={message:e.message,name:e.name,stack:e.stack};return`code`in e&&(typeof e.code==`string`||typeof e.code==`number`)&&(t.code=e.code),t}return{message:String(e)}}async function Ne(e,t){let n=P();if(!n)return t();let r=typeof e==`string`?e:e.name,i=typeof e==`string`?void 0:e.parent;return n.startActiveSpan(r,i,async e=>{try{return await t(e)}catch(t){throw je(e,t),t}finally{e.end()}})}function Pe(e,t){let n=P();return!e||!n?t():n.withActiveSpan(e,t)}function Fe(e,{runWith:t,mapResult:n,mapError:r,onError:i,onFinish:a}){t??=e=>e();let o;return new ue(async()=>{try{let r;try{r=await t(()=>e.next()),o=r.done}catch(e){throw o=!0,e}return n?await n(r):r}catch(e){throw await i?.(e),r?await r(e):e}},async n=>{try{if(!o)try{await t(async()=>e.return?.())}catch(e){throw await i?.(e),e}}finally{await a?.()}})}function Ie(e,t){let n=De(()=>Ae(e));return Fe(t,{runWith:e=>Pe(n(),e),mapResult(e){return n()?.addEvent(e.done?`completed`:`yielded`),e},onError(e){je(n(),e)},onFinish(){n()?.end()}})}function F(e,...t){return typeof e==`function`?e(...t):e}function Le(e,t){return new Proxy(typeof e==`function`?t:e,{get(n,r){return me(r in t?t:F(e),r)},has(n,r){return Reflect.has(t,r)||Reflect.has(F(e),r)}})}function Re(e){return N(e)?Object.getPrototypeOf(e)?.constructor:null}function*ze(e){if(!N(e))return;let t=Object.getPrototypeOf(e);for(;t!=null;)t.constructor&&(yield t.constructor),t=Object.getPrototypeOf(t)}function Be(e){if(!e||typeof e!=`object`)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||!t||!t.constructor}function Ve(e,t,n){t===`__proto__`?Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!0,configurable:!0}):e[t]=n}function He(e,t){let n={...e};for(let e of t)delete n[e];return n}function Ue(e,t,n){let r=e[t];if(r!==n)return r;let i;if(Array.isArray(r))i=r.slice();else if(Be(r))i={...r};else return r;return Ve(e,t,i),i}var We=(()=>{let e=function(){};return e.prototype=Object.create(null),Object.freeze(e.prototype),e})();function Ge(){let e={};return e.promise=new Promise((t,n)=>{e.resolve=t,e.reject=n}),e}function Ke(e,{runWith:t,mapResult:n,mapError:r,onError:i,onFinish:a}){t??=e=>e();let o=De(()=>e.getReader()),s=De(async()=>a?.());return new ReadableStream({async pull(e){let a;try{let e=await t(()=>o().read());a=n?await n(e):e}catch(t){try{await i?.(t),e.error(r?await r(t):t)}finally{await s()}return}a.done?(e.close(),await s()):e.enqueue(a.value)},async cancel(e){try{try{await t(()=>o().cancel(e))}catch(e){throw await i?.(e),e}}finally{await s()}}})}function qe(e,t){let n=De(()=>Ae(e));return Ke(t,{runWith:e=>Pe(n(),e),mapResult(e){return n()?.addEvent(e.done?`closed`:`enqueued`),e},onError(e){je(n(),e)},onFinish(){n()?.end()}})}function Je(e,t,n){if(!e?.length)return n(t);let r=(t,i)=>{let a=e[i];return a?a({...t,next:(e=t)=>r(e,i+1)}):n(t)};return r(t,0)}function Ye(e){let t=e.length,n=new Map;for(let r=0;r<t;r++){let t=e[r],i=n.get(t.name);i===void 0?n.set(t.name,[r]):i.push(r)}let r=Array.from({length:t},()=>[]);for(let i=0;i<t;i++){let t=e[i];if(t.before!==void 0)for(let e of t.before){let t=n.get(e);if(t!==void 0)for(let e of t)r[e].push(i)}if(t.after!==void 0)for(let e of t.after){let t=n.get(e);if(t!==void 0)for(let e of t)r[i].push(e)}}let i=[],a=new Set;for(;i.length<t;){let t=e.findIndex((e,t)=>!a.has(t)&&r[t].every(e=>a.has(e)));if(t===-1)throw Error(`Circular dependency detected involving plugin "${Xe(e,r,a).name}"`);a.add(t),i.push(e[t])}return i}function Xe(e,t,n){let r=new Set,i=e.findIndex((e,t)=>!n.has(t));for(;!r.has(i);)r.add(i),i=t[i].find(e=>!n.has(e));return e[i]}async function Ze(e,t){if(!e)return t();e.throwIfAborted();let{promise:n,reject:r,resolve:i}=Ge(),a;e.addEventListener(`abort`,a=()=>{r(e.reason),a=void 0});try{return t().then(i,r),await n}finally{a&&e.removeEventListener(`abort`,a)}}var Qe=class extends TypeError{},$e=class extends TypeError{},I=class extends Error{constructor(e,t={}){super(t?.message??`Error Event`,t),this.data=e}},et=/\r\n|\r(?!\n)|\n/,tt=/(?:\r\n|\r(?!\n)|\n){2}/,nt=/(?:\r\n|\r(?!\n)|\n){2}/g,rt=13,it=10,at=32;function ot(e){let t={};for(let n of e.split(et)){if(n===``)continue;let e=n.indexOf(`:`),r=e===-1?``:n.slice(n.charCodeAt(e+1)===at?e+2:e+1);if(e===0){(t.comments??=[]).push(r);continue}switch(e===-1?n:n.slice(0,e)){case`data`:t.data=t.data===void 0?r:`${t.data}
3
- ${r}`;break;case`event`:t.event=r;break;case`id`:t.id=r;break;case`retry`:{let e=Number.parseInt(r,10);e>=0&&e.toString()===r&&(t.retry=e);break}}}return t}var st=class{constructor(e){this.onEvent=e}pending=[];tail=``;discardLeadingLF=!1;feed(e){if(e===``||this.discardLeadingLF&&(this.discardLeadingLF=!1,e.charCodeAt(0)===it&&(e=e.slice(1),e===``)))return;let t=this.tail+e;if(!tt.test(t)){this.pending.push(e),this.tail=t.slice(-3);return}this.pending.push(e);let n=this.pending.length===1?e:this.pending.join(``),r=n.length-t.length,i=[],a=0;for(let e of t.matchAll(nt))i.push(n.slice(a,r+e.index)),a=r+e.index+e[0].length;let o=n.slice(a);this.pending.length=0,this.tail=o.slice(-3),o===``?this.discardLeadingLF=e.charCodeAt(e.length-1)===rt:this.pending.push(o);for(let e of i)this.onEvent(ot(e))}end(){if(this.pending.length!==0)throw new $e(`Event Stream ended before complete`)}},ct=class{readable;writable;constructor(){let e,t=new TransformStream({start(t){e=new st(e=>{t.enqueue(e)})},transform(t){e.feed(t)},flush(){e.end()}});this.readable=t.readable,this.writable=t.writable}},lt=/\r\n|[\n\r]/,ut=/\r\n|[\n\r]/g;function dt(e){return lt.test(e)}function ft(e){if(dt(e))throw new Qe(`Event's id must not contain a carriage return or newline character`)}function pt(e){if(dt(e))throw new Qe(`Event's event must not contain a carriage return or newline character`)}function mt(e){if(!Number.isInteger(e)||e<0)throw new Qe(`Event's retry must be a integer and >= 0`)}function ht(e){if(dt(e))throw new Qe(`Event's comment must not contain a carriage return or newline character`)}function gt(e){return e===void 0?``:`data: ${e.replace(ut,`
4
- data: `)}
5
- `}function _t(e){let t=``;for(let n of e??[])ht(n),t+=`: ${n}
6
- `;return t}function vt(e){let t=``;return t+=_t(e.comments),e.event!==void 0&&(pt(e.event),t+=`event: ${e.event}
7
- `),e.retry!==void 0&&(mt(e.retry),t+=`retry: ${e.retry}
8
- `),e.id!==void 0&&(ft(e.id),t+=`id: ${e.id}
9
- `),t+=gt(e.data),t+=`
10
- `,t}var yt=Symbol.for(`STANDARD_SERVER_EVENT_META`),bt=Symbol.for(`STANDARD_SERVER_EVENT_SOURCE`);function L(e,t){let n;if(t.id!==void 0&&(ft(t.id),n??={},n.id=t.id),t.retry!==void 0&&(mt(t.retry),n??={},n.retry=t.retry),t.comments!==void 0){for(let e of t.comments)ht(e);n??={},n.comments=t.comments}return n?new Proxy(e,{get(e,t,r){return t===bt?e:t===yt?n:me(e,t)}}):e}function xt(e){if(!N(e))return[e,void 0];let t=e[yt];return[e[bt]??e,t]}function St(e){if(N(e))return e[yt]}function Ct(e,t=`inline`){return`${t}; filename="${e.replace(/[^\x20-\x7E]/g,`_`).replace(/[\\"]/g,`\\$&`)}"; filename*=utf-8''${ve(e).replace(/['()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`).replace(/%(7C|60|5E)/g,(e,t)=>String.fromCharCode(Number.parseInt(t,16)))}`}function wt(e){let t=e.match(/(?:^|;)\s*filename\*=([^;]*)/i)?.[1]?.trim(),n=t?.match(/^([^']*)'[^']*'(.*)$/);if(n){let[,e=``,t=``]=n;if(/^(?:utf-8|us-ascii)$/i.test(e))return ye(t)}else if(t)return ye(t);let r=e.match(/(?:^|;)\s*filename=(?:"((?:\\.|[^"\\])*)"|([^";]*))/i);return r?.[1]===void 0?r?.[2]?.trim()||void 0:r[1].replace(/\\(.)/g,`$1`)}function R(e){if(typeof e==`string`||e===void 0)return e;if(e.length!==0)return e.join(`, `)}var Tt=new Set([`json`,`form-data`,`url-search-params`,`event-stream`,`octet-stream`,`file`,`none`]);function Et(e){let t=R(e[`standard-server`]);if(t!==void 0&&Tt.has(t))return t;let n=R(e[`content-type`])?.split(`;`)[0]?.trim().toLowerCase(),r=R(e[`content-length`]),i=R(e[`content-disposition`]),a=i===void 0?void 0:wt(i);return n===void 0&&(r===void 0||r===`0`)?`none`:n===`application/json`?`json`:n===`multipart/form-data`?`form-data`:n===`application/x-www-form-urlencoded`?`url-search-params`:n===`text/event-stream`?`event-stream`:a!==void 0||r!==void 0?`file`:`octet-stream`}function Dt(e,t){let n={...e,...t};for(let r of Object.keys(t)){if(!Object.hasOwn(e,r))continue;let i=e[r],a=t[r];n[r]=i===void 0||a===void 0?i??a:[...k(i),...k(a)]}return n}function Ot(e){let t=e.indexOf(`#`),n=e.indexOf(`?`),r=n!==-1&&(t===-1||n<t),i=r?n:t===-1?e.length:t,a=t===-1?e.length:t;return[e.slice(0,i),r?e.slice(n,a):void 0,t===-1?void 0:e.slice(t)]}function kt(e){return N(e)?Object.values(e).every(e=>e===void 0||typeof e==`string`||Array.isArray(e)&&e.every(e=>typeof e==`string`)):!1}function At(e){return Number.isInteger(e)}var jt={BAD_REQUEST:400,UNAUTHORIZED:401,PAYMENT_REQUIRED:402,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_SUPPORTED:405,NOT_ACCEPTABLE:406,TIMEOUT:408,CONFLICT:409,GONE:410,PRECONDITION_FAILED:412,PAYLOAD_TOO_LARGE:413,UNSUPPORTED_MEDIA_TYPE:415,UNPROCESSABLE_CONTENT:422,PRECONDITION_REQUIRED:428,TOO_MANY_REQUESTS:429,CLIENT_CLOSED_REQUEST:499,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504},Mt,z=class e extends Error{static{let t=Symbol.for(`ORPC_ERROR_CONSTRUCTORS`);globalThis[t]??=new WeakSet,Mt=globalThis[t],Mt.add(e)}name=`ORPCError`;defined=!1;code;data;constructor(e,...t){let n=be(t),r=n.message??e.split(`_`).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(` `);super(r,n),this.code=e,this.data=n.data}toJSON(){return{defined:this.defined,code:this.code,message:this.message,data:this.data}}static[Symbol.hasInstance](e){if(!Mt.has(this))return super[Symbol.hasInstance](e);for(let t of ze(e))if(Mt.has(t))return!0;return!1}},Nt=class extends Error{name=`MalformedResponseError`;response;constructor(e){super(e.message,e),this.response=e.response}};function Pt(e){return e instanceof z?e:new z(`INTERNAL_SERVER_ERROR`,{cause:e})}function Ft(e){if(!Be(e))return!1;let t=[`defined`,`code`,`message`,`data`];return!Object.keys(e).some(e=>!t.includes(e))&&`defined`in e&&typeof e.defined==`boolean`&&`code`in e&&typeof e.code==`string`&&`message`in e&&typeof e.message==`string`}function It(e,t={}){let n=new z(e.code,{...e,...t});return n.defined=e.defined,n}function Lt(e){let t=new z(`MALFORMED_ORPC_RESPONSE`,{message:e.message??Vt(e.response),data:e.response});return t.cause=new Nt({...e,message:t.message}),t}var Rt=1,zt=256;function Bt(e){return e.length>=Rt&&e.length<=zt}function Vt(e){return typeof e.body==`string`&&Bt(e.body)?e.body:Be(e.body)&&typeof e.body.message==`string`&&Bt(e.body.message)?e.body.message:(Object.entries(jt).find(([,t])=>t===e.status)?.[0])?.split(`_`).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(` `)}function Ht(e,{mapResult:t,mapError:n,...r}){return Fe(e,{...r,mapResult:t&&(async e=>{let n=await t(e);if(n.value!==e.value){let t=St(e.value);if(t&&N(n.value))return{done:n.done,value:L(n.value,t)}}return n}),mapError:n&&(async e=>{let t=await n(e);if(t!==e){let n=St(e);if(n&&N(t))return L(t,n)}return t})})}function Ut(e){return TypeError(`Invalid RPC serialized data: ${e}`)}function B(e,t,n){if(!e)throw Ut(`type "${t}" expects ${n}.`)}var Wt={undefined:{condition(e){return e===void 0},serialize(){return null},deserialize(e){B(e===null,`undefined`,`null`)},isTerminal:!0},bigint:{condition(e){return typeof e==`bigint`},serialize(e){return e.toString()},deserialize(e){return B(typeof e==`string`,`bigint`,`a string`),BigInt(e)},isTerminal:!0},date:{condition(e){return e instanceof Date},serialize(e){return Number.isNaN(e.getTime())?null:e.toISOString()},deserialize(e){return B(typeof e==`string`||e===null,`date`,`a string or null`),new Date(e??NaN)},isTerminal:!0},nan:{condition(e){return typeof e==`number`&&Number.isNaN(e)},serialize(){return null},deserialize(e){return B(e===null,`nan`,`null`),NaN},isTerminal:!0},url:{condition(e){return e instanceof URL},serialize(e){return e.toString()},deserialize(e){return B(typeof e==`string`,`url`,`a string`),new URL(e)},isTerminal:!0},set:{condition(e){return e instanceof Set},serialize(e){return Array.from(e)},deserialize(e){return B(Array.isArray(e),`set`,`an array`),new Set(e)}},map:{condition(e){return e instanceof Map},serialize(e){return Array.from(e.entries())},deserialize(e){return B(Array.isArray(e),`map`,`an array`),new Map(e)}}},Gt=class{handlers;inlineBuiltInHandlers;handlerEntries;omitUndefinedProperties;constructor(e={}){this.omitUndefinedProperties=e.omitUndefinedProperties!==!1,this.handlers=Object.assign(new We,Wt);let t=e.handlers;if(t===void 0){this.inlineBuiltInHandlers=!0;return}let n=!0,r=[];for(let e of Object.keys(t)){let i=t[e];this.handlers[e]=i,n&&e in Wt&&(n=!1),n&&i!==void 0&&r.push([e,i])}if(!n){r=[];for(let e of Object.keys(this.handlers)){let t=this.handlers[e];t!==void 0&&r.push([e,t])}}this.inlineBuiltInHandlers=n,this.handlerEntries=r}serialize(e){let t=[],n=[],r=[],i=this.serializeValue(e,[],t,n,r);return t=t.length===0?void 0:t,n.length===0?{json:i,meta:t}:{json:i,meta:t,maps:n,blobs:r}}serializeValue(e,t,n,r,i){if(this.inlineBuiltInHandlers)switch(typeof e){case`string`:case`boolean`:return e;case`number`:return Number.isNaN(e)?(n.push([`nan`,...t]),null):e;case`undefined`:return n.push([`undefined`,...t]),null;case`bigint`:return n.push([`bigint`,...t]),e.toString();case`object`:if(e===null)return e;if(e instanceof Date)return n.push([`date`,...t]),Number.isNaN(e.getTime())?null:e.toISOString();if(e instanceof URL)return n.push([`url`,...t]),e.toString();if(e instanceof Set){let a=this.serializeValue(Array.from(e),t,n,r,i);return n.push([`set`,...t]),a}if(e instanceof Map){let a=this.serializeValue(Array.from(e.entries()),t,n,r,i);return n.push([`map`,...t]),a}}let a=this.handlerEntries;if(a)for(let o=0;o<a.length;o++){let s=a[o],c=s[1];if(c.condition(e)){let a=c.serialize(e);if(c.isTerminal)return n.push([s[0],...t]),a instanceof Blob&&(r.push(t.slice()),i.push(a)),a;let o=this.serializeValue(a,t,n,r,i);return n.push([s[0],...t]),o}}if(e instanceof Blob)return r.push(t.slice()),i.push(e),e;if(Array.isArray(e)){let a=[];for(let o=0;o<e.length;o++)t.push(o),a.push(this.serializeValue(e[o],t,n,r,i)),t.pop();return a}if(Be(e)){let a=new We;for(let o of Object.keys(e)){let s=e[o];(o!==`toJSON`||typeof s!=`function`)&&(s===void 0&&this.omitUndefinedProperties||(t.push(o),a[o]=this.serializeValue(s,t,n,r,i),t.pop()))}return a}return e}deserialize(e){let t={json:e.json};if(e.blobs?.length)for(let n=0;n<e.maps.length;n++){let r=e.blobs[n];if(!(r instanceof Blob))throw Ut(`blob ${n} is not a Blob.`);let i=e.maps[n],a=e,o=t,s=`json`;for(let e=0;e<i.length;e++)if(a=a[s],o=Ue(o,s,a),s=i[e],!Object.hasOwn(o,s))throw Ut(`segment "${s}" does not exist.`);o[s]=r}if(e.meta)for(let n of e.meta){let r=n[0],i=this.handlers[r];if(i===void 0)throw Ut(`type "${r}" is not supported.`);let a=e,o=t,s=`json`;for(let e=1;e<n.length;e++)if(a=a[s],o=Ue(o,s,a),s=n[e],!Object.hasOwn(o,s))throw Ut(`segment "${s}" does not exist.`);o[s]=i.deserialize(o[s])}return t.json}},Kt=class{jsonSerializer;defaultSerializeOptions;constructor(e={}){this.jsonSerializer=new Gt(e),this.defaultSerializeOptions=e.serialize}serialize(e,t={}){if(e===void 0||e instanceof ReadableStream||e instanceof Blob)return e;if(j(e))return Ht(e,{mapResult:e=>e.value===void 0?e:{done:e.done,value:this.serializeValue(e.value,!1)},mapError:e=>new I(this.serializeValue(Pt(e).toJSON(),!1),{cause:e})});let n=t.useFormDataForBlobFields??this.defaultSerializeOptions?.useFormDataForBlobFields??!0;return this.serializeValue(e,n)}serializeValue(e,t){let{json:n,meta:r,maps:i,blobs:a}=this.jsonSerializer.serialize(e);if(!t||!a?.length)return{json:n,meta:r};let o=new FormData;return o.set(`data`,M({json:n,meta:r,maps:i})),a.forEach((e,t)=>{o.set(t.toString(),e)}),o}deserialize(e){return e===void 0||e instanceof ReadableStream||e instanceof Blob?e:j(e)?Ht(e,{mapResult:e=>e.value===void 0?e:{done:e.done,value:this.deserializeValue(e.value)},mapError:e=>{if(!(e instanceof I))return e;let t=this.deserializeValue(e.data);return Ft(t)?It(t,{cause:e}):new I(t,{cause:e})}}):this.deserializeValue(e)}deserializeValue(e){if(!(e instanceof FormData))return this.jsonSerializer.deserialize(e);let t=JSON.parse(e.get(`data`)),n=[];for(let[t,r]of e)r instanceof Blob&&(n[Number(t)]=r);return this.jsonSerializer.deserialize({...t,blobs:n})}},qt=new Set([`then`,`bind`,`call`,`apply`,`valueOf`,`toString`,`toJSON`]);function Jt(e){return{...e,context:e.context??{}}}function Yt(e){return[e[0],Jt(e[1]??{})]}function Xt(e,{path:t=[],...n}={}){let r=(...r)=>{let[i,a]=Yt(r);return Je([...k(n.interceptors),...k(n.scoped?.interceptors)],{...a,input:i,path:t},({path:t,input:n,...r})=>e.call(t,n,r))},i=new Map;return new Proxy(r,{get(r,a){if(typeof a!=`string`||qt.has(a))return Reflect.get(r,a);let o=i.get(a);return o===void 0&&(o=Xt(e,{...n,path:[...t,a],scoped:n.scoped?.[a]}),i.set(a,o)),o}})}function Zt(e){let t=(e?.pipeThrough(new TextDecoderStream).pipeThrough(new ct))?.getReader(),n=!1;return new ue(async()=>{for(;;){if(t===void 0)return{done:!0,value:void 0};let{done:e,value:r}=await t.read();if(e){if(n)throw new A(`Stream was cancelled`);return{done:!0,value:void 0}}switch(r.event){case`message`:{let e=de(r.data);return N(e)&&(e=L(e,r)),{done:!1,value:e}}case`error`:{let e=new I(de(r.data));throw e=L(e,r),e}case`close`:{let e=de(r.data);return N(e)&&(e=L(e,r)),{done:!0,value:e}}}}},async e=>{e.kind===`cancelled`&&(n=!0),await t?.cancel()})}function Qt(e,t={}){let n=t.keepAlive?.enabled??!0,r=t.keepAlive?.interval??15e3,i=t.keepAlive?.comment??``,a=t.initialComment?.enabled??!0,o=t.initialComment?.comment??``,s=t.emptyCloseEventEnabled??!0,c=!1,l;return new ReadableStream({start(e){a&&e.enqueue(vt({comments:[o]}))},async pull(t){try{n&&(l=setInterval(()=>{t.enqueue(vt({comments:[i]}))},r));let a=await e.next();if(clearInterval(l),c)return;let[o,u]=xt(a.value);if(!a.done||o!==void 0||u!==void 0||s){let e=a.done?`close`:`message`;t.enqueue(vt({...u,event:e,data:M(o)}))}a.done&&t.close()}catch(e){if(clearInterval(l),c)return;e instanceof I?(t.enqueue(vt({...St(e),event:`error`,data:M(e.data)})),t.close()):t.error(e)}},async cancel(){c=!0,clearInterval(l),await e.return?.()}}).pipeThrough(new TextEncoderStream)}async function $t(e,t){let n=t?.hint??Et({"standard-server":e.headers.get(`standard-server`)??void 0,"content-type":e.headers.get(`content-type`)??void 0,"content-length":e.headers.get(`content-length`)??void 0,"content-disposition":e.headers.get(`content-disposition`)??void 0});if(n!==`none`){if(e.bodyUsed)throw TypeError(`Failed to read body: body stream already read`);if(n===`json`)return de(await e.text());if(n===`form-data`)return await e.formData();if(n===`url-search-params`){let t=await e.text();return new URLSearchParams(t)}if(n===`event-stream`)return Zt(e.body);if(n===`file`){let t=e.headers.get(`content-disposition`),n=t===null?void 0:wt(t),r=await e.blob();return new File([r],n??`blob`,{type:r.type})}return e.body??new ReadableStream({start(e){e.close()}})}}function en(e,t,n={}){return t={...t},e instanceof ReadableStream?(t[`standard-server`]??=`octet-stream`,t[`content-type`]??=`application/octet-stream`,[e,t]):e instanceof Blob?(t[`standard-server`]??=`file`,t[`content-type`]=e.type,t[`content-disposition`]??=Ct(e instanceof File?e.name??``:`blob`),Number.isFinite(e.size)?(t[`content-length`]=e.size.toString(),[e,t]):[e.stream(),t]):(t[`standard-server`]=void 0,t[`content-length`]=void 0,e===void 0?(t[`content-type`]=void 0,[void 0,t]):e instanceof FormData||e instanceof URLSearchParams?(t[`content-type`]=void 0,[e,t]):j(e)?(t[`content-type`]=`text/event-stream`,[Qt(e,n.eventStream),t]):(t[`content-type`]=`application/json`,[M(e),t]))}function tn(e){let t=Object.create(null);return e.forEach((e,n)=>{Array.isArray(t[n])?t[n].push(e):t[n]===void 0?t[n]=e:t[n]=[t[n],e]}),t}function nn(e){let t=new Headers;for(let n of Object.keys(e)){let r=e[n];if(Array.isArray(r))for(let e of r)t.append(n,e);else r!==void 0&&t.append(n,r)}return t}function rn(e){return{resolveBody:t=>$t(e,{hint:t}),status:e.status,get headers(){let t=tn(e.headers);return Object.defineProperty(this,"headers",{value:t,writable:!0}),t},set headers(e){Object.defineProperty(this,"headers",{value:e,writable:!0})}}}var an=class{name=`~composite`;plugins;constructor(e=[]){this.plugins=Ye(e)}init(e){for(let t of this.plugins)t.init&&(e=t.init(e));return e}},on=class{constructor(e,t,n={}){this.codec=e,this.transport=t,n=new an(n.plugins).init(n),this.interceptors=n.interceptors,this.transportInterceptors=n.transportInterceptors}interceptors;transportInterceptors;call(e,t,n){return Ne(`${Te}.${e.join(`/`)}`,r=>(r?.setAttribute(`rpc.system`,Te),r?.setAttribute(`rpc.method`,e.join(`.`)),P()&&j(t)?t=Le(t,Ie(`consume_async_iterator_object_input`,t)):P()&&t instanceof ReadableStream&&(t=Le(t,qe(`consume_octet_stream_input`,t))),Je(this.interceptors,{...n,path:e,input:t},async({path:e,input:t,...n})=>{let i=P(),a=i?.getActiveSpan()??r,o=await Ne({name:`encode_input`,parent:a},()=>this.codec.encodeInput(t,e,n));if(a&&i?.inject){let e={...o.headers};i.inject(a,e),o={...o,headers:e}}let s=await Je(this.transportInterceptors,{...n,path:e,request:o},({path:e,request:t,...n})=>Ne({name:`send_request`,parent:i?.getActiveSpan()??a},()=>this.transport.send(t,e,n))),c=await Ne({name:`decode_response`,parent:a},()=>this.codec.decodeResponse(s,e,n));if(c.kind===`error`)throw c.error;let l=c.output;return P()&&j(l)?Le(l,Ie(`consume_async_iterator_object_output`,l)):P()&&l instanceof ReadableStream?Le(l,qe(`consume_octet_stream_output`,l)):l})))}},sn=/\/$/,cn=class{baseUrl;maxUrlLength;fallbackMethod;expectedMethod;headers;serializer;constructor(e){this.baseUrl=e.url??`/`,this.maxUrlLength=e.maxUrlLength??2083,this.fallbackMethod=e.fallbackMethod??`POST`,this.expectedMethod=e.method??this.fallbackMethod,this.headers=e.headers??{},this.serializer=e.serializer??new Kt}async encodeInput(e,t,n){let r=ln(await F(this.headers,n,t,e));n.lastEventId!==void 0&&(r=Dt(r,{"last-event-id":n.lastEventId}));let i=await F(this.expectedMethod,n,t,e),[a,o,s]=Ot(await F(this.baseUrl,n,t,e)),c=`${a.replace(sn,``)}${Oe(t)}`,l=this.serializer.serialize(e);if(i===`GET`&&!(l instanceof Blob)&&!(l instanceof ReadableStream)&&!(l instanceof FormData)&&!j(l)){let a=await F(this.maxUrlLength,n,t,e),u=new URLSearchParams(o);u.append(`data`,M(l)??``);let d=`${c}?${u}${s??``}`;if(d.length<=a)return{body:void 0,method:i,headers:r,url:d,signal:n.signal}}return{url:`${c}${o??``}${s??``}`,method:i===`GET`?this.fallbackMethod:i,headers:r,body:l,signal:n.signal}}async decodeResponse(e){let t=e.status<400,n=await e.resolveBody(),r=await(async()=>{try{return this.serializer.deserialize(n)}catch(t){throw Lt({message:`Invalid RPC response format.`,response:{status:e.status,headers:e.headers,body:n},cause:t})}})();return t?{kind:`output`,output:r}:Ft(r)?{kind:`error`,error:It(r)}:{kind:`error`,error:Lt({response:{headers:e.headers,status:e.status,body:n}})}}};function ln(e){return typeof e.forEach==`function`?tn(e):e}var un=De(()=>{try{let e;return new Request(`https://example.com`,{method:`POST`,body:new ReadableStream,get duplex(){return e=`half`,`half`}}),e}catch{return}}),dn=class{origin;fetch;toFetchRequestOptions;constructor(e){this.origin=e.origin,this.fetch=e.fetch??((e,t)=>globalThis.fetch(e,t)),this.toFetchRequestOptions=e.toFetchRequest}async send(e,t,n){let r=await F(this.origin,n,t);r?.endsWith(`/`)&&(r=r.slice(0,-1));let i=`${r??``}${e.url}`,[a,o]=en(e.body,e.headers,this.toFetchRequestOptions),s={body:a,headers:nn(o),method:e.method,signal:n.signal,redirect:`manual`};if(a instanceof ReadableStream){let e=un();e!==void 0&&(s.duplex=e)}return rn(await this.fetch(i,s,n,t))}},fn=class extends on{constructor(e){let t=new cn(e),n=new dn(e);super(t,n,e)}};function V(e,t){return{...e,...t}}function pn(e,t,n){t=k(t),n=k(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 mn=class e{"~orpc";constructor(e){this[`~orpc`]=e}static[Symbol.hasInstance](t){return this===e?Re(t)===e||N(t)&&N(t[`~orpc`])&&N(t[`~orpc`].errorMap)&&N(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 hn(e,t){if(e instanceof mn){let[n,r]=pn(t.meta,t.metaPlugins,e[`~orpc`].metaPlugins);return new mn({...e[`~orpc`],errorMap:V(t.errorMap,e[`~orpc`].errorMap),meta:n,metaPlugins:r})}if(!N(e))return e;let n={};for(let r of Object.keys(e))n[r]=hn(e[r],t);return n}var gn=Symbol.for(`ORPC_HIDDEN_META_PLUGINS`);function H(e){if(N(e))return e[gn]}(class e extends mn{constructor(e){super(e)}static create(){return new e({errorMap:{},meta:{}})}meta(...t){let[n,r]=pn(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:V(this[`~orpc`].errorMap,t)}),r=H(t);return r&&(n=n.meta(...r)),n}input(t){let n=new e({...this[`~orpc`],inputSchemas:[...k(this[`~orpc`].inputSchemas),t]}),r=H(t);return r&&(n=n.meta(...r)),n}output(t){let n=new e({...this[`~orpc`],outputSchemas:[...k(this[`~orpc`].outputSchemas),t]}),r=H(t);return r&&(n=n.meta(...r)),n}router(e){return hn(e,this[`~orpc`])}}).create();var _n=class e{"~orpc";constructor(e){this[`~orpc`]=e}static[Symbol.hasInstance](t){return this===e?Re(t)===e||N(t)&&N(t[`~orpc`])&&N(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 vn(e){return e instanceof _n?e[`~orpc`].loader():Promise.resolve({default:e})}var yn=class e{"~orpc";constructor(e){this[`~orpc`]=e}static[Symbol.hasInstance](t){return this===e?Re(t)===e||t instanceof mn&&Array.isArray(t[`~orpc`].orderedMiddlewares)&&typeof t[`~orpc`].handler==`function`:Function.prototype[Symbol.hasInstance].call(this,t)}};function bn(e,t){if(e instanceof _n){let[n,r]=pn(t.meta,t.metaPlugins,e[`~orpc`].metaPlugins);return new _n({meta:n,metaPlugins:r,async loader(){let{default:n}=await vn(e);return vn(bn(n,t))}})}if(e instanceof yn){let[n,r]=pn(t.meta,t.metaPlugins,e[`~orpc`].metaPlugins);return new yn({...He(t,[`middlewares`,`errorMap`,`meta`,`metaPlugins`]),...e[`~orpc`],meta:n,metaPlugins:r,errorMap:V(t.errorMap,e[`~orpc`].errorMap),orderedMiddlewares:[...t.middlewares.map(e=>({middleware:e,inputSchemasLengthAtUse:0,outputSchemasLengthAtUse:0})),...e[`~orpc`].orderedMiddlewares]})}if(!N(e))return e;let n={};for(let[r,i]of Object.entries(e))n[r]=bn(i,t);return n}function xn({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{}};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 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,`
11
3
  `);let a=p.split(`
12
4
 
13
5
  `);p=a.pop()??``;for(let e of a){let t=e.split(`
14
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(`
15
- `);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 Sn=e=>{switch(e){case`label`:return`.`;case`matrix`:return`;`;case`simple`:return`,`;default:return`&`}},Cn=e=>{switch(e){case`form`:return`,`;case`pipeDelimited`:return`|`;case`spaceDelimited`:return`%20`;default:return`,`}},wn=e=>{switch(e){case`label`:return`.`;case`matrix`:return`;`;case`simple`:return`,`;default:return`&`}},Tn=({allowReserved:e,explode:t,name:n,style:r,value:i})=>{if(!t){let t=(e?i:i.map(e=>encodeURIComponent(e))).join(Cn(r));switch(r){case`label`:return`.${t}`;case`matrix`:return`;${n}=${t}`;case`simple`:return t;default:return`${n}=${t}`}}let a=Sn(r),o=i.map(t=>r===`label`||r===`simple`?e?t:encodeURIComponent(t):En({allowReserved:e,name:n,value:t})).join(a);return r===`label`||r===`matrix`?a+o:o},En=({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)}`},Dn=({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=wn(r),s=Object.entries(i).map(([t,i])=>En({allowReserved:e,name:r===`deepObject`?`${n}[${t}]`:t,value:i})).join(o);return r===`label`||r===`matrix`?o+s:s},On=/\{[^{}]+\}/g,kn=({path:e,url:t})=>{let n=t,r=t.match(On);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,Tn({explode:r,name:i,style:a,value:o}));continue}if(typeof o==`object`){n=n.replace(t,Dn({explode:r,name:i,style:a,value:o,valueOnly:!0}));continue}if(a===`matrix`){n=n.replace(t,`;${En({name:i,value:o})}`);continue}let s=encodeURIComponent(a===`label`?`.${o}`:o);n=n.replace(t,s)}return n},An=({baseUrl:e,path:t,query:n,querySerializer:r,url:i})=>{let a=i.startsWith(`/`)?i:`/${i}`,o=(e??``)+a;t&&(o=kn({path:t,url:o}));let s=n?r(n):``;return s.startsWith(`?`)&&(s=s.substring(1)),s&&(o+=`?${s}`),o};function jn(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 Mn=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},Nn={bodySerializer:e=>JSON.stringify(e,(e,t)=>typeof t==`bigint`?t.toString():t)},Pn=({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=Tn({allowReserved:o.allowReserved,explode:!0,name:i,style:`form`,value:a,...o.array});e&&r.push(e)}else if(typeof a==`object`){let e=Dn({allowReserved:o.allowReserved,explode:!0,name:i,style:`deepObject`,value:a,...o.object});e&&r.push(e)}else{let e=En({allowReserved:o.allowReserved,name:i,value:a});e&&r.push(e)}}return r.join(`&`)},Fn=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`}},In=(e,t)=>t?!!(e.headers.has(t)||e.query?.[t]||e.headers.get(`Cookie`)?.includes(`${t}=`)):!1;async function Ln(e){for(let t of e.security??[]){if(In(e,t.name))continue;let n=await Mn(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 Rn=e=>An({baseUrl:e.baseUrl,path:e.path,query:e.query,querySerializer:typeof e.querySerializer==`function`?e.querySerializer:Pn(e.querySerializer),url:e.url}),zn=(e,t)=>{let n={...e,...t};return n.baseUrl?.endsWith(`/`)&&(n.baseUrl=n.baseUrl.substring(0,n.baseUrl.length-1)),n.headers=Vn(e.headers,t.headers),n},Bn=e=>{let t=[];return e.forEach((e,n)=>{t.push([n,e])}),t},Vn=(...e)=>{let t=new Headers;for(let n of e){if(!n)continue;let e=n instanceof Headers?Bn(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},Hn=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}},Un=()=>({error:new Hn,request:new Hn,response:new Hn}),Wn=Pn({allowReserved:!1,array:{explode:!0,style:`form`},object:{explode:!0,style:`deepObject`}}),Gn={"Content-Type":`application/json`},Kn=(e={})=>({...Nn,headers:Gn,parseAs:`auto`,querySerializer:Wn,...e}),U=((e={})=>{let t=zn(Kn(),e),n=()=>({...t}),r=e=>(t=zn(t,e),n()),i=Un(),a=async e=>{let n={...t,...e,fetch:e.fetch??t.fetch??globalThis.fetch,headers:Vn(t.headers,e.headers),serializedBody:void 0};n.security&&await Ln(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:Rn(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:jn(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`?Fn(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 xn({...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:jn(n),url:r})};return{buildUrl:e=>Rn({...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`)}})(Kn({baseUrl:`https://tailorkit.dev/api/platform`})),qn=e=>(e.client??U).post({url:`/apps/list`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),Jn=e=>(e.client??U).post({url:`/apps/{appId}/lookup`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),Yn=e=>(e.client??U).post({url:`/apps`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),Xn=e=>(e.client??U).delete({url:`/apps/{appId}`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),Zn=e=>(e.client??U).put({url:`/apps/{appId}`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),Qn=e=>(e.client??U).post({url:`/apps/{appId}/deploy`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),$n=e=>(e.client??U).post({url:`/cli-auth/approve`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),er=e=>(e.client??U).post({url:`/cli-auth/deny`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),tr=e=>(e.client??U).post({url:`/cli-auth/poll`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),nr=e=>(e.client??U).post({url:`/cli-auth/start`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),rr=e=>(e.client??U).post({url:`/cli-auth/verify-token`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),ir=e=>(e.client??U).post({url:`/deployments/list`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),ar=e=>(e.client??U).post({url:`/deployments/{deploymentId}/lookup`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),or=e=>(e.client??U).post({url:`/deployments`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),sr=e=>(e.client??U).post({url:`/deployments/{deploymentId}`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),cr=e=>(e.client??U).post({url:`/preview/start`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),lr=e=>(e.client??U).post({url:`/preview/{sessionId}/stop`,...e,headers:{"Content-Type":`application/json`,...e.headers}});Object.entries({$body_:`body`,$headers_:`headers`,$path_:`path`,$query_:`query`});var ur=class e extends yn{meta(...t){let[n,r]=pn(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:V(this[`~orpc`].errorMap,t)}),r=H(t);return r&&(n=n.meta(...r)),n}use(t){let n=new e({...this[`~orpc`],errorMap:V(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 dr(e){let t=((...t)=>e(...t));return t[`~orpc`]=e[`~orpc`],Object.defineProperty(t,"name",{value:e.name}),t.adaptInput=t=>{let n=dr((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=dr(t);return n[`~orpc`]={...t[`~orpc`],errorMap:V(t[`~orpc`]?.errorMap,e)},n},t.use=n=>{let r=dr((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:V(n[`~orpc`]?.errorMap,t[`~orpc`]?.errorMap),metaPlugins:[...k(e[`~orpc`]?.metaPlugins),...k(n[`~orpc`]?.metaPlugins)]},Object.defineProperty(r,"name",{value:`${e.name} + ${n.name}`}),r},t}var fr=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]=pn(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:V(this[`~orpc`].errorMap,t)}),r=H(t);return r&&(n=n.meta(...r)),n}use(t){let n=new e({...this[`~orpc`],errorMap:V(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=dr(t.shift());for(let e of t)n=n.use(e);return n[`~orpc`]={...n[`~orpc`],errorMap:this[`~orpc`].errorMap,metaPlugins:[...k(this[`~orpc`].metaPlugins),...k(e[`~orpc`]?.metaPlugins)]},n}input(t){let n=new e({...this[`~orpc`],inputSchemas:[...k(this[`~orpc`].inputSchemas),t]}),r=H(t);return r&&(n=n.meta(...r)),n}output(t){let n=new e({...this[`~orpc`],outputSchemas:[...k(this[`~orpc`].outputSchemas),t]}),r=H(t);return r&&(n=n.meta(...r)),n}handler(e){let t=new ur({...this[`~orpc`],handler:e}),n=H(e);return n&&(t=t.meta(...n)),t}router(e){return bn(e,{...this[`~orpc`],middlewares:this[`~orpc`].orderedMiddlewares.map(({middleware:e})=>e)})}lazy(e){return new _n({loader:async()=>{let{default:t}=await e();return{default:this.router(t)}},meta:this[`~orpc`].meta,metaPlugins:this[`~orpc`].metaPlugins})}}.create();function pr(e,t){return new ue(async()=>{for(;;){let{json:t}=await e.pull();switch(t.event){case void 0:case`message`:{let e=t.data;return N(e)&&(e=L(e,t)),{value:e,done:!1}}case`error`:throw L(new I(t.data),t);case`close`:{let e=t.data;return N(e)&&(e=L(e,t)),{value:e,done:!0}}}}},t)}var mr=class{constructor(e,t,n){this.iterator=e,this.messageId=t,this.send=n}isDone=!1;async cancel(){this.isDone||(this.isDone=!0,await this.iterator.return?.())}async transmit(){for(;;)try{let e=await this.iterator.next();if(this.isDone)return;e.done&&(this.isDone=!0);try{let[t,n]=xt(e.value);await this.send({kind:`event-stream`,id:this.messageId,json:{...n,event:e.done?`close`:void 0,data:t}})}catch(e){throw await this.cancel(),e}if(this.isDone)return}catch(e){if(e instanceof I){if(!this.isDone){this.isDone=!0;let[t,n]=xt(e);await this.send({kind:`event-stream`,id:this.messageId,json:{...n,event:`error`,data:t.data}})}return}throw this.isDone=!0,e}}};function hr(e,t){return new ReadableStream({async pull(n){try{let{json:r,binary:i}=await e.pull();i&&n.enqueue(i instanceof Uint8Array?i:new Uint8Array(await i.arrayBuffer())),r.close&&(await t({kind:`success`}),n.close())}catch(e){await t({kind:`error`,error:e}),n.error(e)}},async cancel(e){await t({kind:`cancelled`,error:e})}})}var gr=class{constructor(e,t,n){this.messageId=t,this.send=n,this.reader=e.getReader()}isDone=!1;reader;async cancel(){this.isDone||(this.isDone=!0,await this.reader.cancel())}async transmit(){for(;;)try{let e=await this.reader.read();if(this.isDone)return;e.done&&(this.isDone=!0);try{await this.send({json:{close:e.done?!0:void 0},binary:e.value,kind:`octet-stream`,id:this.messageId})}catch(e){throw await this.cancel(),e}if(this.isDone)return}catch(e){throw this.isDone=!0,e}}};function _r(e,t){let n=R(e.json.headers?.[`content-type`]),r=R(e.json.headers?.[`standard-server`]);if(e.json.body===void 0&&e.binary===void 0){if(n===void 0&&r===`event-stream`){let e=new he;return{resolveBody:async()=>pr(e,t),eventStreamMessageQueue:e}}if(n!==void 0){let e=new he;return{resolveBody:async()=>hr(e,t),octetStreamMessageQueue:e}}}return{resolveBody:async()=>{let i;try{if(e.binary){if(r===`form-data`){let t={};return n!==void 0&&(t[`content-type`]=n),await new Response(e.binary,{headers:t}).formData()}let t=R(e.json.headers?.[`content-disposition`]),i=t===void 0?void 0:wt(t);return new File([e.binary],i??`blob`,{type:n??`application/octet-stream`})}if(r===`url-search-params`){if(typeof e.json.body!=`string`)throw TypeError(`Expected body to be a string for url-search-params bodyHint`);return new URLSearchParams(e.json.body)}return e.json.body}catch(e){throw i={value:e},e}finally{await t(i?{kind:`error`,error:i.value}:{kind:`success`})}}}}async function vr(e,t){if(t={...t},e instanceof ReadableStream)return t[`content-type`]??=`application/octet-stream`,{jsonBody:void 0,headers:t,binary:void 0};if(e instanceof Blob)return t[`content-type`]=e.type,t[`content-disposition`]??=Ct(e instanceof File?e.name??``:`blob`),Number.isFinite(e.size)&&(t[`content-length`]=e.size.toString()),{jsonBody:void 0,headers:t,binary:e};if(t[`standard-server`]=void 0,t[`content-type`]=void 0,j(e))return t[`standard-server`]=`event-stream`,{jsonBody:void 0,headers:t,binary:void 0};if(e instanceof FormData){let n=await new Response(e).blob();return t[`standard-server`]=`form-data`,t[`content-type`]=n.type,t[`content-length`]=n.size.toString(),{jsonBody:void 0,headers:t,binary:n}}return e instanceof URLSearchParams?(t[`standard-server`]=`url-search-params`,{jsonBody:e.toString(),headers:t,binary:void 0}):{jsonBody:e,headers:t,binary:void 0}}var yr=class{constructor(e){this.send=e}idGenerator=new ce;requests=new Map;request(e){return new Promise((t,n)=>{let r=e.signal;r?.throwIfAborted();let i=this.idGenerator.generate(),a={resolve:t,reject:n};if(this.requests.set(i,a),r){let e=()=>{this.abortById(i,r.reason).catch(()=>{})};r.addEventListener(`abort`,e),a.removeAbortListener=()=>r.removeEventListener(`abort`,e)}this.transmitRequest(i,a,e)})}async transmitRequest(e,t,n){try{let r=await vr(n.body,n.headers);if(n.signal?.throwIfAborted(),this.requests.get(e)!==t)return;if(await this.send({id:e,kind:`request`,json:{method:n.method===`POST`?void 0:n.method,url:n.url,headers:fe(r.headers)?r.headers:void 0,body:r.jsonBody},binary:r.binary}),j(n.body)){let r=new mr(n.body,e,this.send);this.requests.get(e)===t?(t.eventStreamTransmitter=r,await r.transmit().catch(n=>{if(t.eventStreamTransmitter)return this.abortById(e,n)})):await r.cancel()}else if(n.body instanceof ReadableStream){let r=new gr(n.body,e,this.send);this.requests.get(e)===t?(t.octetStreamTransmitter=r,await r.transmit().catch(n=>{if(t.octetStreamTransmitter)return this.abortById(e,n)})):await r.cancel()}}catch(t){await this.closeById(e,t)}}async message(e){let t=e.id,n=this.requests.get(t);if(!n)return;if(e.kind===`stream/cancel`){let e=Promise.all([n.eventStreamTransmitter?.cancel(),n.octetStreamTransmitter?.cancel()]);n.eventStreamTransmitter=void 0,n.octetStreamTransmitter=void 0,await e;return}if(e.kind===`cancel`){await this.closeById(t,new A(`Server canceled the request`));return}if(e.kind===`event-stream`){n.eventStreamMessageQueue?.push(e);return}if(e.kind===`octet-stream`){n.octetStreamMessageQueue?.push(e);return}if(!n.resolve)return;let r=n.resolve;n.resolve=void 0;try{let i=_r(e,async e=>{e.kind===`cancelled`?await this.abortById(t,e.error):(n.eventStreamMessageQueue||n.octetStreamMessageQueue)&&await this.closeById(t,e.error)});n.eventStreamMessageQueue=i.eventStreamMessageQueue,n.octetStreamMessageQueue=i.octetStreamMessageQueue,r({headers:e.json.headers??{},status:e.json.status??200,resolveBody:i.resolveBody}),n.reject=void 0,!n.eventStreamMessageQueue&&!n.octetStreamMessageQueue&&await this.closeById(t)}catch(e){await this.closeById(t,e)}}async close(e){e??=new A(`Peer was closed`),await Promise.all(Array.from(this.requests.keys()).map(t=>this.closeById(t,e)))}async closeById(e,t){let n=this.requests.get(e);if(!n)return;this.requests.delete(e),(n.reject||n.eventStreamMessageQueue||n.octetStreamMessageQueue)&&(t??=new A(`Request was closed`)),n.reject?.(t),n.resolve=void 0,n.reject=void 0,n.eventStreamMessageQueue?.close(t),n.octetStreamMessageQueue?.close(t),n.eventStreamMessageQueue=void 0,n.octetStreamMessageQueue=void 0;let r=[n.eventStreamTransmitter?.cancel(),n.octetStreamTransmitter?.cancel()];n.eventStreamTransmitter=void 0,n.octetStreamTransmitter=void 0,n.removeAbortListener?.(),n.removeAbortListener=void 0,await Promise.all(r)}async abortById(e,t){let n=this.requests.get(e);if(!n)return;this.requests.delete(e),t??=new A(`Request was aborted`),n.reject?.(t),n.resolve=void 0,n.reject=void 0,n.eventStreamMessageQueue?.abort(t),n.octetStreamMessageQueue?.abort(t),n.eventStreamMessageQueue=void 0,n.octetStreamMessageQueue=void 0;let r=[this.send({id:e,kind:`cancel`}),n.eventStreamTransmitter?.cancel(),n.octetStreamTransmitter?.cancel()];n.eventStreamTransmitter=void 0,n.octetStreamTransmitter=void 0,n.removeAbortListener?.(),n.removeAbortListener=void 0,await Promise.all(r)}};function br(e){return!(!N(e)||typeof e.id!=`string`||typeof e.kind!=`string`||e.binary!==void 0&&!(e.binary instanceof Uint8Array)&&!(e.binary instanceof Blob))}function xr(e){return!(e.kind!==`response`||!N(e.json)||e.json.status!==void 0&&!At(e.json.status)||e.json.headers!==void 0&&!kt(e.json.headers))}function Sr(e){return e.kind===`cancel`&&e.json===void 0&&e.binary===void 0}function Cr(e){return!(e.kind!==`event-stream`||e.binary!==void 0||!N(e.json)||e.json.id!==void 0&&typeof e.json.id!=`string`||e.json.event!==void 0&&e.json.event!==`message`&&e.json.event!==`error`&&e.json.event!==`close`||e.json.retry!==void 0&&!Number.isFinite(e.json.retry)||e.json.comments!==void 0&&!(Array.isArray(e.json.comments)&&e.json.comments.every(e=>typeof e==`string`)))}function wr(e){return e.kind===`octet-stream`&&N(e.json)&&(e.json.close===void 0||typeof e.json.close==`boolean`)}function Tr(e){return e.kind===`stream/cancel`&&e.json===void 0&&e.binary===void 0}function Er(e){return xr(e)||Sr(e)||Cr(e)||wr(e)||Tr(e)}var Dr=255,Or=new TextEncoder,kr=new TextDecoder;async function Ar(e,t={}){if(e.binary===void 0){let n=M(e);return t.prefix?t.prefix+n:n}let n=M({...e,binary:void 0}),r=Or.encode(t.prefix?t.prefix+n:n),i=e.binary instanceof Blob?new Uint8Array(await e.binary.arrayBuffer()):e.binary,a=new Uint8Array(r.length+1+i.length);return a.set(r,0),a[r.length]=Dr,a.set(i,r.length+1),a}function jr(e,t={}){try{if(typeof e==`string`){if(t.prefix){if(!e.startsWith(t.prefix))return{matched:!1};e=e.slice(t.prefix.length)}let n=JSON.parse(e);return br(n)?{matched:!0,message:n}:{matched:!1}}if(t.prefix){let n=Or.encode(t.prefix);for(let t=0;t<n.length;t++)if(e[t]!==n[t])return{matched:!1};e=e.subarray(n.length)}let n=e.indexOf(Dr);if(n===-1){let t=JSON.parse(kr.decode(e));return br(t)?{matched:!0,message:t}:{matched:!1}}let r=e.subarray(0,n),i=e.subarray(n+1),a=JSON.parse(kr.decode(r));return br(a)?(a.binary=i,{matched:!0,message:a}):{matched:!1}}catch{return{matched:!1}}}var Mr=0,Nr=1,Pr=class{connect;reconnectEnabled;reconnectDelay;reconnectMaxAttempt;reconnectOnCloseEnabled;reconnectOnCloseDelay;encodePeerMessageOptions;decodePeerMessageOptions;constructor(e){this.connect=e.connect,this.reconnectEnabled=e.reconnect?.enabled??!1,this.reconnectDelay=e.reconnect?.delay??(e=>e.attempt===1?0:2e3),this.reconnectMaxAttempt=e.reconnect?.maxAttempt??1/0,this.reconnectOnCloseEnabled=this.reconnectEnabled&&(e.reconnect?.onClose?.enabled??!1),this.reconnectOnCloseDelay=e.reconnect?.onClose?.delay??0,this.encodePeerMessageOptions=e.encodePeerMessage,this.decodePeerMessageOptions=e.decodePeerMessage,e.connectOnInit&&this.getConnectedPeer().catch(()=>{})}async send(e,t,n){return(await Ze(e.signal,()=>this.getConnectedPeer())).request(e)}totalAttempt=0;attempt=0;current;async getConnectedPeer(){let e=this.current,t=await e;if(t&&(!this.reconnectEnabled||t.websocket.readyState===Nr))return this.attempt=0,t.peer;if(e!==this.current)return this.getConnectedPeer();if(this.attempt>=this.reconnectMaxAttempt)throw new A(`WebSocket reconnect failed after ${this.attempt} attempt(s)`);return this.current=(async()=>{this.totalAttempt+=1,this.attempt+=1;let e={totalAttempt:this.totalAttempt,attempt:this.attempt};await ge(this.reconnectDelay(e));let t=await this.connect(e),n=new yr(async e=>{let n=await Ar(e,this.encodePeerMessageOptions);return t.send(n)}),r;return t.readyState===Mr&&(r=Ge(),t.addEventListener(`open`,()=>{r?.resolve()})),t.addEventListener(`message`,se(async e=>{let t=jr(e.data instanceof Blob?await xe(e.data):Se(e.data),this.decodePeerMessageOptions);t.matched&&Er(t.message)&&n.message(t.message)})),t.addEventListener(`close`,async e=>{r?.resolve(),this.reconnectOnCloseEnabled&&ge(this.reconnectOnCloseDelay).then(()=>this.getConnectedPeer()).catch(()=>{});let t=new A(`WebSocket closed (code ${e.code}: ${e.reason})`);await n.close(t)}),await r?.promise,r=void 0,{websocket:t,peer:n}})().catch(e=>{if(!this.reconnectEnabled)throw e}),this.getConnectedPeer()}},Fr=class extends on{constructor(e){let t=new cn(e),n=new Pr(e);super(t,n,e)}},Ir=E.string().regex(/^[A-Za-z0-9_-]{1,128}$/u),Lr=E.string().max(349528).regex(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/u),Rr=e=>[...e].some(e=>(e.codePointAt(0)??0)<32),zr=E.object({path:E.string().min(1).max(1024).refine(e=>new TextEncoder().encode(e).byteLength<=1024,{message:`Preview path exceeds 1024 UTF-8 bytes`}),contentType:E.string().min(1).max(255).refine(e=>!/[\r\n]/u.test(e),{message:`Invalid preview content type`}),size:E.number().int().min(0).max(1048576),chunks:E.number().int().min(0).max(4),sha256:E.string().regex(/^[a-f0-9]{64}$/u)}),Br=E.object({files:E.array(zr).max(100)}).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===`..`)||Rr(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`})}),Vr=E.discriminatedUnion(`type`,[E.object({type:E.literal(`begin`),buildId:Ir,revision:E.number().int().positive(),manifest:Br}),E.object({type:E.literal(`chunk`),revision:E.number().int().positive(),fileIndex:E.number().int().min(0).max(99),chunkIndex:E.number().int().min(0).max(3),base64:Lr}),E.object({type:E.literal(`complete`),revision:E.number().int().positive()}),E.object({type:E.literal(`ended`)})]);E.object({sessionId:E.uuid(),expiresAt:E.string().min(1),websocketUrl:E.url(),token:E.string().min(1)});var Hr=E.object({manifest:Br}),Ur=E.object({buildId:Ir,fileIndex:E.number().int().min(0).max(99),chunkIndex:E.number().int().min(0).max(3),base64:Lr}),Wr=E.object({buildId:Ir}),Gr=E.object({accepted:E.literal(!0)}),Kr=E.object({revision:E.number().int().positive()});function qr(e){let t=Xt(new Fr({connect:()=>e}));return{beginBuild:async e=>Wr.parse(await t.beginBuild(Hr.parse(e))),uploadChunk:async e=>Gr.parse(await t.uploadChunk(Ur.parse(e))),commitBuild:async e=>Kr.parse(await t.commitBuild({buildId:Ir.parse(e.buildId)})),heartbeat:async()=>Gr.parse(await t.heartbeat()),subscribe:async()=>{let e=await t.subscribe();return(async function*(){for await(let t of e)yield Vr.parse(t)})()}}}function Jr(e){let t=URL.canParse(e.url)?new URL(e.url):void 0;return Xt(new fn({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}))}var Yr=32,Xr=64,Zr=255,Qr=16,$r=100,ei=16384,ti=512,ni=/^[A-Za-z][A-Za-z0-9_-]{0,63}$/u;function ri(e){if(!ni.test(e))throw TypeError(`TailorKit scope names must start with a letter and contain only letters, numbers, "_", or "-".`);return e}function ii(e){if(!li(e))throw TypeError(`TailorKit scope values must be nonempty plain JSON objects.`);let t=0,n=si(e,0,!0,new Set,()=>{if(t+=1,t>ti)throw TypeError(`TailorKit scope values may contain at most ${ti} JSON values.`)}),r=JSON.stringify(n);if(r===void 0||new TextEncoder().encode(r).byteLength>ei)throw TypeError(`TailorKit scope values may not exceed ${ei} bytes of JSON.`);return n}function ai(e){if(!li(e))throw TypeError(`TailorKit scope identity must contain a name and value.`);if(ci(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 ri(t),{name:t,value:ii(n)}}function oi(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(ri(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 si(e,t,n,r,i){if(i(),e===null||typeof e==`boolean`||typeof e==`string`){if(typeof e==`string`&&e.length>Zr)throw TypeError(`TailorKit scope strings may not exceed ${Zr} 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>Qr)throw TypeError(`TailorKit scope values may be nested at most ${Qr} 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>$r)throw TypeError(`TailorKit scope arrays may contain at most ${$r} 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(si(o.value,t+1,!1,r,i))}return r.delete(e),Object.freeze(a)}if(!li(e))throw TypeError(`TailorKit scope objects must be plain JSON objects.`);let a=ci(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>Yr)throw TypeError(`TailorKit scope objects may contain at most ${Yr} properties.`);let o=Object.fromEntries(a.sort(([e],[t])=>ui(e,t)).map(([e,n])=>[e,si(n,t+1,!1,r,i)]));return r.delete(e),Object.freeze(o)}function ci(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>Xr)throw TypeError(`TailorKit scope property names must be 1 to ${Xr} characters.`);let n=Object.getOwnPropertyDescriptor(e,i);if(!n?.enumerable||!(`value`in n))throw TypeError(t);r.push([i,n.value])}return r}function li(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function ui(e,t){return e<t?-1:+(e>t)}var di=E.string().regex(/^[A-Za-z0-9_-]{43}$/u);E.array(di).max(20),E.enum([`accept`,`cancel`]);var W=fr.$context();function fi(e){if(!e.tailorkit)throw new z(`UNAUTHORIZED`,{message:`Unauthorized.`});return e.tailorkit}function G(e,t){let n=fi(e).scopes,r=t===void 0?Object.keys(n):[t];if(r.length!==1)throw new z(`BAD_REQUEST`,{message:`Choose one TailorKit scope for this operation.`});try{return oi(n,r)[0]}catch(e){throw new z(`BAD_REQUEST`,{message:e instanceof Error?e.message:`Invalid TailorKit scope selection.`})}}function pi(e,t){try{return oi(fi(e).scopes,t)}catch(e){throw new z(`BAD_REQUEST`,{message:e instanceof Error?e.message:`Invalid TailorKit scope selection.`})}}function mi(e){let[t,n]=e.headers.get(`authorization`)?.split(` `)??[];if(t!==`Bearer`||!n)throw new z(`UNAUTHORIZED`,{message:`Missing CLI deploy token.`});return n}var K=W.middleware(async({context:e,next:t})=>{let n=await rr({body:{deployToken:mi(e.request)},client:e.platform,headers:e.platformHeaders}),r=`data`in n?n.data:n;if(!r?.scope)throw new z(`UNAUTHORIZED`,{message:`Invalid CLI deploy token.`});let i;try{let t=ai(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 z(`UNAUTHORIZED`,{message:`Invalid CLI deploy token.`})}return t({context:{tailorkit:{scopes:i}}})}),hi=W.middleware(async({context:e,next:t})=>{let n=await e.authenticate({request:e.request});if(!n)throw new z(`UNAUTHORIZED`,{message:`Unauthorized.`});return t({context:{tailorkit:n}})}),gi=async(e,t)=>{if(e===void 0)return t;let n=await e[`~standard`].validate(t);if(`issues`in n)throw new z(`BAD_REQUEST`,{message:`Invalid TailorKit payload`});return n.value};W.use(hi).input(E.object({input:E.unknown().optional(),path:E.string()})).handler(async({context:e,input:t})=>{let n=e.actions.get(t.path);if(n===void 0)throw new z(`NOT_FOUND`,{message:`Action not found`});let r=await gi(n.definition.input,t.input),i=await n.handler({context:fi(e).actionContext,input:r});return gi(n.definition.output,i)});var _i=E.object({page:E.number().int().min(1).optional(),pageSize:E.number().int().min(1).max(100).optional()}),vi=E.object({description:E.string().nullable(),name:E.string()});W.use(K).input(vi).handler(async({context:e,input:t})=>await Yn({body:{...t,scope:G(e)},client:e.platform,headers:e.platformHeaders})),W.use(K).input(E.object({appId:E.string()})).handler(async({context:e,input:t})=>await Xn({body:{scope:G(e)},client:e.platform,headers:e.platformHeaders,path:{appId:t.appId}})),W.use(K).input(E.object({appId:E.string(),deploymentId:E.string()})).handler(async({context:e,input:t})=>await Qn({body:{deploymentId:t.deploymentId,scope:G(e)},client:e.platform,headers:e.platformHeaders,path:{appId:t.appId}})),W.use(K).input(E.object({appId:E.string(),scopes:E.array(E.string()).optional()})).handler(async({context:e,input:t})=>await Jn({body:{scopes:pi(e,t.scopes)},client:e.platform,headers:e.platformHeaders,path:{appId:t.appId}})),W.use(K).input(_i.extend({scopes:E.array(E.string()).optional()}).optional()).handler(async({context:e,input:t})=>await qn({client:e.platform,headers:e.platformHeaders,body:{page:t?.page,pageSize:t?.pageSize,scopes:pi(e,t?.scopes)}})),W.use(K).input(E.object({appId:E.string()}).extend(vi.shape)).handler(async({context:e,input:t})=>await Zn({body:{description:t.description,name:t.name,scope:G(e)},client:e.platform,headers:e.platformHeaders,path:{appId:t.appId}}));var yi=async e=>{try{return await e}catch(e){throw typeof e==`string`&&e.toLowerCase()===`unauthorized`?new z(`UNAUTHORIZED`,{message:`TailorKit platform rejected the host project key. Check TAILORKIT_PROJECT_KEY.`}):e}};W.use(hi).input(E.object({scope:E.string().min(1),userCode:E.string().min(1)})).handler(async({context:e,input:t})=>await yi($n({body:{scope:G(e,t.scope),userCode:t.userCode},client:e.platform,headers:e.platformHeaders}))),W.use(hi).input(E.object({userCode:E.string().min(1)})).handler(async({context:e,input:t})=>await yi(er({body:{userCode:t.userCode},client:e.platform,headers:e.platformHeaders}))),W.input(E.object({deviceCode:E.string().min(1)})).handler(async({context:e,input:t})=>await yi(tr({body:{deviceCode:t.deviceCode},client:e.platform,headers:e.platformHeaders}))),W.input(E.object({})).handler(async({context:e})=>await yi(nr({body:{},client:e.platform,headers:e.platformHeaders}))),W.input(E.object({})).use(K).handler(({context:e})=>({scope:G(e)}));var bi=E.object({page:E.number().int().min(1).optional(),pageSize:E.number().int().min(1).max(100).optional()}),xi=E.object({checksum:E.string(),contentLength:E.number().int().min(1),contentType:E.literal(`application/javascript`),encoding:E.literal(`utf-8`),objectKey:E.literal(`client.js`)}),Si=xi.extend({objectKey:E.literal(`server.js`)}),Ci=E.object({checksum:E.string(),contentLength:E.number().int().min(1).max(262144),contentType:E.enum([`image/svg+xml`,`image/png`,`image/webp`])}),wi=E.tuple([xi]),Ti=E.object({dark:Ci.optional(),light:Ci.optional()}).optional(),Ei=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}},Di=e=>Ei(e)?.toLowerCase().includes(`not found`)??!1,Oi=e=>{throw Di(e)?new z(`NOT_FOUND`,{message:`App not found.`}):e};W.use(K).input(E.object({appId:E.string(),assets:wi,server:Si.optional(),logos:Ti})).handler(async({context:e,input:t})=>{try{return await or({body:{appId:t.appId,assets:t.assets,server:t.server,logos:t.logos,scope:G(e)},client:e.platform,headers:e.platformHeaders})}catch(e){Oi(e)}}),W.use(K).input(E.object({deploymentId:E.string(),scopes:E.array(E.string()).optional()})).handler(async({context:e,input:t})=>await ar({body:{scopes:pi(e,t.scopes)},client:e.platform,headers:e.platformHeaders,path:{deploymentId:t.deploymentId}})),W.use(K).input(E.object({appId:E.string(),scopes:E.array(E.string()).optional()}).merge(bi)).handler(async({context:e,input:t})=>await ir({client:e.platform,headers:e.platformHeaders,body:{appId:t.appId,page:t.page,pageSize:t.pageSize,scopes:pi(e,t.scopes)}})),W.use(K).input(E.object({deploymentId:E.string(),rollout:E.boolean().optional()})).handler(async({context:e,input:t})=>await sr({body:{scope:G(e),rollout:t.rollout},client:e.platform,headers:e.platformHeaders,path:{deploymentId:t.deploymentId}}));function ki(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&&ki(e.error)||`cause`in e&&ki(e.cause)}W.use(K).input(E.object({appId:E.string().min(1),replaceActive:E.boolean().optional()})).handler(async({context:e,input:t})=>{try{return await cr({body:{appId:t.appId,deployToken:mi(e.request),replaceActive:t.replaceActive},client:e.platform,headers:e.platformHeaders})}catch(e){throw ki(e)?new z(`CONFLICT`,{message:"A preview is already running for this app. Run `pnpm tailorkit preview --replace` to end it and start a new one."}):e}}),W.use(K).input(E.object({sessionId:E.uuid()})).handler(async({context:e,input:t})=>await lr({body:{deployToken:mi(e.request)},client:e.platform,headers:e.platformHeaders,path:{sessionId:t.sessionId}}));var Ai=e=>{let t=new URL(e);return t.hash=``,t.search=``,t.pathname=t.pathname.replace(/\/+$/u,``),t.toString().replace(/\/$/u,``)},ji=E.object({name:E.string().min(1),value:E.record(E.string(),E.unknown())}),Mi=E.record(E.string(),E.string()),Ni=E.preprocess(e=>typeof e==`object`&&e&&!Array.isArray(e)&&!Object.hasOwn(e,`value`)&&Mi.safeParse(e).success?void 0:e,ji.optional()),Pi=T.join(w(),`.tailorkit`,`auth.json`),Fi=18e5,Ii=2e3,Li=E.object({deployToken:E.string().min(1),scope:Ni}),Ri=E.object({deployToken:E.string().min(1),scope:ji}),zi=E.object({scope:ji}),Bi=E.object({hosts:E.record(E.string(),Li).optional()}).passthrough(),Vi=e=>new Promise(t=>setTimeout(t,e)),Hi=e=>{if(e&&typeof e==`object`&&`error`in e&&e.error!==void 0)throw e.error},Ui=async()=>{try{return Bi.parse(JSON.parse(await v(Pi,`utf-8`)))}catch(e){if(e&&typeof e==`object`&&`code`in e&&e.code===`ENOENT`)return{};throw e}},Wi=async e=>{await g(T.dirname(Pi),{recursive:!0}),await C(Pi,`${JSON.stringify(e,null,2)}\n`,{encoding:`utf-8`,mode:384}),await h(Pi,384)},Gi=async e=>{let t=await te(e.configPath,e.cwd);if(t.config.host)return Ai(t.config.host);throw Error(`Missing TailorKit host URL. Set host in tailorkit.config.ts.`)},Ki=(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()},qi=class extends Error{constructor(e){super(`Not logged in for ${e}. Run tailorkit login after checking host in tailorkit.config.ts.`),this.name=`NotLoggedInError`}},Ji=async(e,t)=>{let n=await Ui();await Wi({...n,hosts:{...n.hosts,[e]:t}})},Yi=async e=>{let t=await Ui();if(!t.hosts?.[e])return!1;let{[e]:n,...r}=t.hosts,i={...t,hosts:r};return Object.keys(r).length===0?(await x(Pi,{force:!0}),!0):(await Wi(i),!0)},Xi=async e=>(await Ui()).hosts?.[e],Zi=async(e,t)=>{let n=await Gi(e),r=Jr({url:n}),i=await r.cliAuth.start({});Hi(i);let a=`data`in i?i.data:i,o=new Date(a.expiresAt),s=Date.now()+(e.timeout??Fi);for(t({expiresAt:o,hostUrl:n,userCode:a.userCode});Date.now()<s&&Date.now()<o.getTime();){await Vi(Ii);let e=await r.cliAuth.poll({deviceCode:a.deviceCode});Hi(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=Ri.parse(t);return await Ji(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.`)},Qi=async e=>{let t=await Gi(e),n=await Xi(t);if(!n?.deployToken)throw new qi(t);let r=Jr({headers:{authorization:`Bearer ${n.deployToken}`},url:t}),i;try{let e=await r.cliAuth.verifyToken({});Hi(e),i=zi.parse(`data`in e?e.data:e)}catch(e){throw typeof e==`object`&&e&&`code`in e&&e.code===`UNAUTHORIZED`?new qi(t):e}return await Ji(t,{deployToken:n.deployToken,scope:i.scope}),{hostUrl:t,scope:i.scope}},$i=async e=>{let t=await Gi(e);return{hostUrl:t,removed:await Yi(t)}},ea=1048576,ta=ae(O),na={png:`image/png`,svg:`image/svg+xml`,webp:`image/webp`},ra=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},ia=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}},aa=e=>ia(e)?.toLowerCase().includes(`not found`)??!1,oa=async(e,t)=>{let n=T.join(e,`tailorkit-upload.json`);return t.parse(JSON.parse(await v(n,`utf-8`)))},sa=e=>D(`sha256`).update(e).digest(`hex`),ca=async e=>{try{let t=JSON.parse(await v(T.join(e,`package.json`),`utf-8`));if(typeof t.name==`string`&&t.name.trim())return t.name.trim()}catch{}return T.basename(e)},la=async(e,t)=>{let n=await v(e,`utf-8`),r=` appId: ${JSON.stringify(t)},`;if(/^\s*appId\s*:/mu.test(n)){await C(e,n.replace(/^(\s*)appId\s*:\s*(['"]).*?\2\s*,?/mu,`$1appId: ${JSON.stringify(t)},`),`utf-8`);return}let i=/(export\s+default\s+\{)(\r?\n)/u;if(i.test(n)){await C(e,n.replace(i,`$1$2${r}$2`),`utf-8`);return}let a=/(export\s+default\s+(?:defineTailorKitConfig|defineConfig)\(\s*\{)(\r?\n)/u;if(a.test(n)){await C(e,n.replace(a,`$1$2${r}$2`),`utf-8`);return}let{parseSync:o}=await import(`vite`),{program:s}=o(e,n),c=s.body.find(e=>e.type===`ExportDefaultDeclaration`);if(c?.declaration.type===`Identifier`){let t=c.declaration.name,i=s.body.filter(e=>e.type===`VariableDeclaration`).flatMap(e=>e.declarations).find(e=>e.id.type===`Identifier`&&e.id.name===t)?.init;for(;i?.type===`TSSatisfiesExpression`||i?.type===`TSAsExpression`;)i=i.expression;if(i?.type===`ObjectExpression`){let t=n.slice(i.start),a=/^(\{)(\r?\n)/u;if(a.test(t)){await C(e,n.slice(0,i.start)+t.replace(a,`$1$2${r}$2`),`utf-8`);return}}}throw Error(`Could not write appId to ${e}. Add appId: ${JSON.stringify(t)} manually.`)},ua=async(e,t)=>{if(!e.uploadUrl)return;if(t.byteLength>ea)throw Error(`Deployment asset exceeds ${ea} 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}.`)},da=e=>{for(let t of[`tsconfig.json`,`jsconfig.json`]){let n=T.join(e,t);if(ie(n))return n}},fa=async e=>{let t=da(e.root);if(!t)return;let n=r(T.join(e.root,`package.json`)),i;try{i=T.join(T.dirname(n.resolve(`typescript/package.json`)),`bin/tsc`)}catch{return}let a=T.resolve(e.root,e.config.client?.entry??`src/client.ts`),o=await _(T.join(e.root,`.tailorkit-typecheck-`));try{let n=T.join(o,`tsconfig.json`);await C(n,JSON.stringify({extends:t,compilerOptions:{noEmit:!0,incremental:!1,composite:!1},files:[a,...e.config.server?[T.resolve(e.root,e.config.server.entry??`src/server.ts`)]:[]],include:[]})),await ae(ne)(process.execPath,[i,`--noEmit`,`--project`,n,`--pretty`,`false`],{cwd:e.root,maxBuffer:4194304})}catch(t){let n=t;return{command:`tsc --noEmit ${T.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})}},pa=async e=>{let t=await te(e.configPath,e.cwd),n=t.config.appId,r=!1,i=await Qi(e).catch(t=>{if(t instanceof qi&&e.onLoginRequired)return e.onLoginRequired();throw t}),a=await Xi(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),fa(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=T.resolve(t.root,e.outDir??t.config.build?.outDir??`.tailorkit`),d=await oa(u,s),f=T.join(u,d.assets.client),p=await v(f),m=await ta(p),h=d.assets.server?await v(T.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(T.join(u,t)),r=na[T.extname(t).slice(1)];if(!r)throw Error(`Unsupported ${e} logo format.`);return{content:n,contentType:r,filename:t,variant:e}}));if(p.byteLength>ea)throw Error(`Combined client assets are ${p.byteLength} bytes and cannot exceed ${ea} bytes.`);let y=Jr({headers:{authorization:`Bearer ${a.deployToken}`},url:i.hostUrl}),b=async a=>{let o=await ca(t.root);if(!await e.onMissingAppId?.({appName:o,configPath:t.filepath,hostUrl:i.hostUrl,reason:a}))throw Error(`Deployment cancelled.`);return n=ra(await y.apps.create({description:null,name:o})).id,r=!0,await la(t.filepath,n),n};n||=await b(`missing`);let x=async e=>ra(await y.deployments.create({appId:e,assets:[{checksum:sa(p),contentLength:p.byteLength,contentType:`application/javascript`,encoding:`utf-8`,objectKey:`client.js`}],server:h?{checksum:sa(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:sa(e.content),contentLength:e.content.byteLength,contentType:e.contentType}])):void 0})),S;try{S=await x(n)}catch(e){if(!aa(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?[ua(S.server,h)]:[],ua(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 ua(t,e.content)})]);let C=ra(await y.deployments.publish({deploymentId:S.deployment.id,rollout:!0})),w=await Promise.all(_.map(async e=>({gzipSize:(await ta(e.content)).byteLength,path:e.filename,size:e.content.byteLength}))),ee=[];if(h&&d.assets.server){let e=await ta(h);ee.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},...ee,...w]}};function ma(e,t){return e===`/`||e===t||t.startsWith(`${e}/`)}var ha=E.enum([`object`,`array`,`string`,`number`,`integer`,`boolean`,`null`]),q=E.object({$schema:E.enum([`https://json-schema.org/draft/2020-12/schema`]).optional(),type:E.union([ha,E.array(E.string())]).optional(),properties:E.lazy(()=>E.record(E.string(),q)).optional(),required:E.array(E.string()).optional(),additionalProperties:E.union([E.boolean(),E.lazy(()=>q)]).optional(),enum:E.array(E.unknown()).optional(),const:E.unknown().optional(),items:E.union([E.boolean(),E.lazy(()=>q)]).optional(),prefixItems:E.lazy(()=>E.array(q)).optional(),minItems:E.number().int().nonnegative().optional(),maxItems:E.number().int().nonnegative().optional(),propertyNames:E.lazy(()=>q).optional(),minimum:E.number().optional(),maximum:E.number().optional(),anyOf:E.lazy(()=>E.array(q)).optional(),oneOf:E.lazy(()=>E.array(q)).optional(),allOf:E.lazy(()=>E.array(q)).optional(),not:E.lazy(()=>q).optional()}).strict(),ga=E.object({async:E.boolean().optional(),input:q.optional(),output:q.optional()}),_a=E.object({fields:q.optional(),callbacks:E.record(E.string(),ga),children:E.boolean()}),va=E.record(E.string(),_a),ya=E.string().regex(/^\/.*$/u,{message:`View keys must start with "/".`}),ba=E.object({context:q.optional(),contextOptional:E.boolean().optional()}).strict(),xa=E.record(ya,ba),Sa=E.object({input:E.record(E.string(),E.unknown()).optional(),output:E.record(E.string(),E.unknown()).optional()}),Ca=E.lazy(()=>E.record(E.string(),E.union([Sa,Ca])));E.object({version:E.literal(1),slots:E.record(E.string().min(1),E.object({views:E.array(E.string().startsWith(`/`))})).default({}),actions:Ca.default({}),components:va,views:xa.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 wa=`/* 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 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 */
16
8
 
17
9
  // This file was automatically generated by TailorKit.
18
10
  // Documentation: https://tailorkit.dev/docs
@@ -21,26 +13,26 @@ data: `)}
21
13
  // Exclude this file from linting and formatting to avoid checking generated code.
22
14
 
23
15
  import { createRemoteComponent } from "tailorkit/client";
24
- `,Ta=`Record<string, never>`,Ea=new Set([`Box`,`Flex`,`Grid`,`Inline`]),J=e=>JSON.stringify(e),Y=e=>/^[A-Za-z_$][A-Za-z0-9_$]*$/u.test(e)?e:J(e),Da=e=>typeof e==`string`?J(e):typeof e==`number`||typeof e==`boolean`||e===null?JSON.stringify(e):`unknown`,X=(e,t=0)=>{if(e===void 0)return`unknown`;if(ka(e))return`never`;if(e.const!==void 0)return Da(e.const);if(e.enum!==void 0&&e.enum.length>0)return e.enum.map(Da).join(` | `);if(e.allOf!==void 0&&e.allOf.length>0){let n=e.allOf.map(e=>X(e,t));return[...new Set(n)].map(e=>e.includes(` | `)?`(${e})`:e).join(` & `)}let n=e.anyOf??e.oneOf;if(n!==void 0&&n.length>0){let e=n.filter(e=>!ka(e)).map(e=>X(e,t)).filter(e=>e!==`never`);return e.length===0?`never`:[...new Set(e)].join(` | `)}if(Array.isArray(e.type)){let n=e.type.map(n=>X({...e,type:n},t));return[...new Set(n)].join(` | `)||`never`}let r=e.type;if(r===`null`)return`null`;if(r===`string`)return`string`;if(r===`number`||r===`integer`)return`number`;if(r===`boolean`)return`boolean`;if(r===`array`){let n=typeof e.items==`object`?e.items:void 0;if(e.prefixItems!==void 0){let r=e.prefixItems.map((n,r)=>{let i=X(n,t);return r<(e.minItems??0)?i:`(${i})?`}),i=(e.minItems??0)-e.prefixItems.length;if(i>0&&e.items===!1)return`never`;for(let e=0;e<i;e+=1)r.push(X(n,t));return e.items!==!1&&r.push(`...${Oa(X(n,t))}`),`[${r.join(`, `)}]`}return Oa(e.items===!1?`never`:X(n,t))}return r===`object`?ja(e,t):`unknown`},Oa=e=>`${e.includes(` | `)||e.includes(` & `)?`(${e})`:e}[]`,ka=e=>e.not!==void 0&&Object.keys(e.not).length===0,Aa=e=>{let t=e.properties??{},n=Object.values(t);return(Array.isArray(e.type)?e.type.includes(`object`):e.type===`object`)&&n.length>0&&n.every(ka)},ja=(e,t)=>{let n=e.properties??{},r=Object.entries(n);if(Aa(e))return`never`;let i=new Set(e.required),a=X(e.additionalProperties===!0?void 0:e.additionalProperties||void 0,t),o=[a];if(a!==`unknown`)for(let[e,n]of r)o.push(X(n,t)),i.has(e)||o.push(`undefined`);let s=e.additionalProperties===!1||e.additionalProperties===void 0?void 0:`Record<string, ${[...new Set(o)].join(` | `)}>`;if(r.length===0)return s??Ta;let c=` `.repeat(t),l=` `.repeat(t+2),u=[`{`];for(let[e,n]of r){let r=i.has(e)?``:`?`;u.push(`${l}${Y(e)}${r}: ${X(n,t+2)};`)}u.push(`${c}}`);let d=u.join(`
25
- `);return s===void 0?d:`${d} & ${s}`},Ma=e=>{let t=e.replaceAll(/[^A-Za-z0-9_$]/gu,`_`);return/^[A-Za-z_$]/u.test(t)?t:`_${t}`},Na=e=>`${Ma(e)}Props`,Pa=e=>{let t=Ma(e);return`${t.charAt(0).toUpperCase()}${t.slice(1)}`},Fa=e=>{if(e.fields?.properties!==void 0)return e.fields.properties;let t={};for(let n of e.fieldKeys??[])t[n]={};return t},Ia=(e,t)=>{if(e?.anyOf===void 0||e.anyOf.length!==2)return;let[n,r]=e.anyOf.filter(e=>!ka(e));if(n===void 0||r===void 0)return;let i,a;if(n.type===`object`?(i=r,a=n):r.type===`object`&&(i=n,a=r),i===void 0||a===void 0)return;let o=X(i,t);if(o===`never`)return`never`;let s=Object.values(a.properties??{});if(s.length!==0&&!s.map(e=>X(e,t)).some(e=>e!==o&&e!==`never`))return`Responsive<${o}>`},La=(e,t)=>Ia(e,t)??X(e,t),Ra=e=>{let t={},n=new Map,r=new Set;for(let[i,a]of Object.entries(e))if(Ea.has(i))for(let[e,i]of Object.entries(Fa(a))){let a=Pa(e),o=La(i,0),s=n.get(a);if(s===void 0){n.set(a,o),t[e]=a;continue}s!==o&&r.add(a)}return Object.fromEntries(Object.entries(t).filter(([,e])=>!r.has(e)))},za=(e,t)=>{let n=[`export type Breakpoint = "base" | "sm" | "md" | "lg" | "xl" | "2xl";`,`export type Responsive<TValue> = TValue | Partial<Record<Breakpoint, TValue>>;`],r=new Set;for(let[i,a]of Object.entries(e))if(Ea.has(i))for(let[e,i]of Object.entries(Fa(a))){let a=t[e];a===void 0||r.has(a)||(r.add(a),n.push(`export type ${a} = ${La(i,0)};`))}return n.join(`
26
- `)},Ba=e=>{let t=[`export interface ViewPropsByPath {`];for(let n of Object.keys(e)){let r=Object.entries(e).filter(([e])=>ma(e,n)).filter(([,e])=>e.context!==void 0).map(([,e])=>{let t=X(e.context,4);return e.contextOptional?`Partial<${t}>`:t}).filter(e=>e!==`Record<string, never>`),i=(r.length>1?r.map(e=>`(${e})`).join(` & `):r[0]??`Record<string, never>`).split(`
27
- `);t.push(` ${J(n)}: {`),t.push(` context: ${i[0]}`);for(let e of i.slice(1,-1))t.push(e);let a=i.at(-1);a!==void 0&&i.length>1?t.push(`${a};`):t[t.length-1]=`${t.at(-1)};`,t.push(` };`)}return t.push(`}`),t.join(`
28
- `)},Va=(e,t,n)=>{let r=Na(e),i=Fa(t),a=t.callbacks??{},o=[`export interface ${r} {`];for(let[e,t]of Object.entries(i))o.push(` ${Y(e)}?: ${n[e]??La(t,2)};`);for(let[e,t]of Object.entries(a)){let n=t.input===void 0?``:`input: ${X(t.input,2)}`;o.push(` ${Y(e)}?: (${n}) => void;`)}o.push(`}`),o.push(``);let s=Object.entries(a).map(([e,t])=>`${J(e)}: ${t.input===void 0?0:1}`),c=s.length>0?`,\n callbacks: { ${s.join(`, `)} }`:``;return o.push(`export const ${Ma(e)} = /* @__PURE__ */ createRemoteComponent<${r}, ${t.children===!0}>(${J(e)}, {`),o.push(` children: ${t.children===!0}${c},`),o.push(`});`),o.join(`
29
- `)},Ha=e=>`input`in e||`output`in e,Ua=(e,t=0)=>{let n=` `.repeat(t),r=` `.repeat(t+2),i=[`{`];for(let[n,a]of Object.entries(e))if(Ha(a)){let e=X(a.input,t+2),o=X(a.output,t+2);i.push(`${r}${Y(n)}: (input: ${e}) => Promise<${o}>;`)}else{let e=Ua(a,t+2).split(`
30
- `);i.push(`${r}${Y(n)}: ${e[0]}`),i.push(...e.slice(1,-1)),i.push(`${e.at(-1)};`)}return i.push(`${n}}`),i.join(`
31
- `)},Wa=(e,t=[])=>{let n=[`{`];for(let[r,i]of Object.entries(e)){let e=[...t,r];if(Ha(i))n.push(` ${Y(r)}: async (input: unknown) => {`),n.push(` const response = await fetch(${J(`/api/tailorkit/actions/${e.join(`.`)}`)}, {`),n.push(` body: JSON.stringify(input),`),n.push(` headers: { "content-type": "application/json" },`),n.push(` method: "POST",`),n.push(` });`),n.push(` if (!response.ok) throw new Error(await response.text());`),n.push(` return response.json();`),n.push(` },`);else{let t=Wa(i,e).split(`
32
- `);n.push(` ${Y(r)}: ${t[0]}`),n.push(...t.slice(1).map(e=>` ${e}`)),n.push(`,`)}}return n.push(`}`),n.join(`
33
- `)},Ga=(e,t={})=>{let n=Ua(e.actions??{}),r=e.components??{},i=Ra(r),a=[wa,Ba(e.views??{}),`declare module "tailorkit/client" {
16
+ `,lr=`Record<string, never>`,ur=new Set([`Box`,`Flex`,`Grid`,`Inline`]),K=e=>JSON.stringify(e),q=e=>/^[A-Za-z_$][A-Za-z0-9_$]*$/u.test(e)?e:K(e),dr=e=>typeof e==`string`?K(e):typeof e==`number`||typeof e==`boolean`||e===null?JSON.stringify(e):`unknown`,J=(e,t=0)=>{if(e===void 0)return`unknown`;if(pr(e))return`never`;if(e.const!==void 0)return dr(e.const);if(e.enum!==void 0&&e.enum.length>0)return e.enum.map(dr).join(` | `);if(e.allOf!==void 0&&e.allOf.length>0){let n=e.allOf.map(e=>J(e,t));return[...new Set(n)].map(e=>e.includes(` | `)?`(${e})`:e).join(` & `)}let n=e.anyOf??e.oneOf;if(n!==void 0&&n.length>0){let e=n.filter(e=>!pr(e)).map(e=>J(e,t)).filter(e=>e!==`never`);return e.length===0?`never`:[...new Set(e)].join(` | `)}if(Array.isArray(e.type)){let n=e.type.map(n=>J({...e,type:n},t));return[...new Set(n)].join(` | `)||`never`}let r=e.type;if(r===`null`)return`null`;if(r===`string`)return`string`;if(r===`number`||r===`integer`)return`number`;if(r===`boolean`)return`boolean`;if(r===`array`){let n=typeof e.items==`object`?e.items:void 0;if(e.prefixItems!==void 0){let r=e.prefixItems.map((n,r)=>{let i=J(n,t);return r<(e.minItems??0)?i:`(${i})?`}),i=(e.minItems??0)-e.prefixItems.length;if(i>0&&e.items===!1)return`never`;for(let e=0;e<i;e+=1)r.push(J(n,t));return e.items!==!1&&r.push(`...${fr(J(n,t))}`),`[${r.join(`, `)}]`}return fr(e.items===!1?`never`:J(n,t))}return r===`object`?hr(e,t):`unknown`},fr=e=>`${e.includes(` | `)||e.includes(` & `)?`(${e})`:e}[]`,pr=e=>e.not!==void 0&&Object.keys(e.not).length===0,mr=e=>{let t=e.properties??{},n=Object.values(t);return(Array.isArray(e.type)?e.type.includes(`object`):e.type===`object`)&&n.length>0&&n.every(pr)},hr=(e,t)=>{let n=e.properties??{},r=Object.entries(n);if(mr(e))return`never`;let i=new Set(e.required),a=J(e.additionalProperties===!0?void 0:e.additionalProperties||void 0,t),o=[a];if(a!==`unknown`)for(let[e,n]of r)o.push(J(n,t)),i.has(e)||o.push(`undefined`);let s=e.additionalProperties===!1||e.additionalProperties===void 0?void 0:`Record<string, ${[...new Set(o)].join(` | `)}>`;if(r.length===0)return s??lr;let c=` `.repeat(t),l=` `.repeat(t+2),u=[`{`];for(let[e,n]of r){let r=i.has(e)?``:`?`;u.push(`${l}${q(e)}${r}: ${J(n,t+2)};`)}u.push(`${c}}`);let d=u.join(`
17
+ `);return s===void 0?d:`${d} & ${s}`},gr=e=>{let t=e.replaceAll(/[^A-Za-z0-9_$]/gu,`_`);return/^[A-Za-z_$]/u.test(t)?t:`_${t}`},_r=e=>`${gr(e)}Props`,vr=e=>{let t=gr(e);return`${t.charAt(0).toUpperCase()}${t.slice(1)}`},yr=e=>{if(e.fields?.properties!==void 0)return e.fields.properties;let t={};for(let n of e.fieldKeys??[])t[n]={};return t},br=(e,t)=>{if(e?.anyOf===void 0||e.anyOf.length!==2)return;let[n,r]=e.anyOf.filter(e=>!pr(e));if(n===void 0||r===void 0)return;let i,a;if(n.type===`object`?(i=r,a=n):r.type===`object`&&(i=n,a=r),i===void 0||a===void 0)return;let o=J(i,t);if(o===`never`)return`never`;let s=Object.values(a.properties??{});if(s.length!==0&&!s.map(e=>J(e,t)).some(e=>e!==o&&e!==`never`))return`Responsive<${o}>`},xr=(e,t)=>br(e,t)??J(e,t),Sr=e=>{let t={},n=new Map,r=new Set;for(let[i,a]of Object.entries(e))if(ur.has(i))for(let[e,i]of Object.entries(yr(a))){let a=vr(e),o=xr(i,0),s=n.get(a);if(s===void 0){n.set(a,o),t[e]=a;continue}s!==o&&r.add(a)}return Object.fromEntries(Object.entries(t).filter(([,e])=>!r.has(e)))},Cr=(e,t)=>{let n=[`export type Breakpoint = "base" | "sm" | "md" | "lg" | "xl" | "2xl";`,`export type Responsive<TValue> = TValue | Partial<Record<Breakpoint, TValue>>;`],r=new Set;for(let[i,a]of Object.entries(e))if(ur.has(i))for(let[e,i]of Object.entries(yr(a))){let a=t[e];a===void 0||r.has(a)||(r.add(a),n.push(`export type ${a} = ${xr(i,0)};`))}return n.join(`
18
+ `)},wr=e=>{let t=[`export interface ViewPropsByPath {`];for(let n of Object.keys(e)){let r=Object.entries(e).filter(([e])=>Qn(e,n)).filter(([,e])=>e.context!==void 0).map(([,e])=>{let t=J(e.context,4);return e.contextOptional?`Partial<${t}>`:t}).filter(e=>e!==`Record<string, never>`),i=(r.length>1?r.map(e=>`(${e})`).join(` & `):r[0]??`Record<string, never>`).split(`
19
+ `);t.push(` ${K(n)}: {`),t.push(` context: ${i[0]}`);for(let e of i.slice(1,-1))t.push(e);let a=i.at(-1);a!==void 0&&i.length>1?t.push(`${a};`):t[t.length-1]=`${t.at(-1)};`,t.push(` };`)}return t.push(`}`),t.join(`
20
+ `)},Tr=(e,t,n)=>{let r=_r(e),i=yr(t),a=t.callbacks??{},o=[`export interface ${r} {`];for(let[e,t]of Object.entries(i))o.push(` ${q(e)}?: ${n[e]??xr(t,2)};`);for(let[e,t]of Object.entries(a)){let n=t.input===void 0?``:`input: ${J(t.input,2)}`;o.push(` ${q(e)}?: (${n}) => void;`)}o.push(`}`),o.push(``);let s=Object.entries(a).map(([e,t])=>`${K(e)}: ${t.input===void 0?0:1}`),c=s.length>0?`,\n callbacks: { ${s.join(`, `)} }`:``;return o.push(`export const ${gr(e)} = /* @__PURE__ */ createRemoteComponent<${r}, ${t.children===!0}>(${K(e)}, {`),o.push(` children: ${t.children===!0}${c},`),o.push(`});`),o.join(`
21
+ `)},Er=e=>`input`in e||`output`in e,Dr=(e,t=0)=>{let n=` `.repeat(t),r=` `.repeat(t+2),i=[`{`];for(let[n,a]of Object.entries(e))if(Er(a)){let e=J(a.input,t+2),o=J(a.output,t+2);i.push(`${r}${q(n)}: (input: ${e}) => Promise<${o}>;`)}else{let e=Dr(a,t+2).split(`
22
+ `);i.push(`${r}${q(n)}: ${e[0]}`),i.push(...e.slice(1,-1)),i.push(`${e.at(-1)};`)}return i.push(`${n}}`),i.join(`
23
+ `)},Or=(e,t=[])=>{let n=[`{`];for(let[r,i]of Object.entries(e)){let e=[...t,r];if(Er(i))n.push(` ${q(r)}: async (input: unknown) => {`),n.push(` const response = await fetch(${K(`/api/tailorkit/actions/${e.join(`.`)}`)}, {`),n.push(` body: JSON.stringify(input),`),n.push(` headers: { "content-type": "application/json" },`),n.push(` method: "POST",`),n.push(` });`),n.push(` if (!response.ok) throw new Error(await response.text());`),n.push(` return response.json();`),n.push(` },`);else{let t=Or(i,e).split(`
24
+ `);n.push(` ${q(r)}: ${t[0]}`),n.push(...t.slice(1).map(e=>` ${e}`)),n.push(`,`)}}return n.push(`}`),n.join(`
25
+ `)},kr=(e,t={})=>{let n=Dr(e.actions??{}),r=e.components??{},i=Sr(r),a=[cr,wr(e.views??{}),`declare module "tailorkit/client" {
34
26
  interface TailorKitViews extends ViewPropsByPath {}
35
- interface TailorKitSlots { ${Object.entries(e.slots??{}).map(([e,t])=>`${J(e)}: ${t.views.map(J).join(` | `)||`never`};`).join(` `)} }
27
+ interface TailorKitSlots { ${Object.entries(e.slots??{}).map(([e,t])=>`${K(e)}: ${t.views.map(K).join(` | `)||`never`};`).join(` `)} }
36
28
  }
37
29
 
38
30
  export type ViewPath = keyof ViewPropsByPath & string;
39
31
  export type ViewProps<TPath extends ViewPath> = ViewPropsByPath[TPath];
40
32
  export type TailorKitActions = ${n};
41
- export const actions = ${Wa(e.actions??{})} as TailorKitActions;`,za(r,i)];t.serverModule&&a.splice(1,0,`import { createApi } from "tailorkit/client";\nimport type app from ${J(t.serverModule)};\n\nexport const api = createApi<typeof app.functions>();`);for(let[e,t]of Object.entries(r)){let{children:n}=_a.parse(t);a.push(Va(e,{...t,children:n},i))}return`${a.join(`
33
+ export const actions = ${Or(e.actions??{})} as TailorKitActions;`,Cr(r,i)];t.serverModule&&a.splice(1,0,`import { createApi } from "tailorkit/client";\nimport type app from ${K(t.serverModule)};\ntype AppServerFunctions = typeof app.functions;\ndeclare module "tailorkit/client" {\n interface TailorKitServerFunctions extends AppServerFunctions {}\n}\n\nexport const api = createApi<typeof app.functions>();`);for(let[e,t]of Object.entries(r)){let{children:n}=tr.parse(t);a.push(Tr(e,{...t,children:n},i))}return`${a.join(`
42
34
 
43
- `)}\n`},Ka=(e,t)=>{let n=new URL(e);return n.pathname=`${n.pathname.replace(/\/$/u,``)}/${t.replace(/^\//u,``)}`,n.toString()},qa=async e=>{let t=Ka(e,`schema`),n=await fetch(t);if(!n.ok)throw Error(`Unable to fetch TailorKit schema from ${t}: ${n.statusText}`);return await n.json()},Ja=async(e={})=>{let t=T.resolve(e.cwd??`.`),n=T.resolve(t,e.outFile??T.join(`src`,`tailorkit.gen.ts`)),r=await te(e.configPath,t),i=e.schema??await qa(r.config.host),a=T.resolve(r.root,r.config.server?.entry??`src/server.ts`),o=await S(a).then(e=>e.isFile()).catch(e=>{let t=e.code;if(t===`ENOENT`||t===`ENOTDIR`)return!1;throw e}),s;if(o){let e=T.relative(T.dirname(n),a).replaceAll(T.sep,`/`).replace(/\.tsx?$/u,``);s=e.startsWith(`.`)?e:`./${e}`}let c=Ga(i,{serverModule:s});return await g(T.dirname(n),{recursive:!0}),await C(n,c,`utf-8`),n},Ya=`1.0.0-rc.4-5d5b77c`,Xa=`https://registry.npmjs.org`,Za=5e3,Qa={oxfmt:{fallback:`^0.46.0`,matcher:`^0`,packageName:`oxfmt`},oxlint:{fallback:`^1.61.0`,matcher:`^1`,packageName:`oxlint`},preact:{fallback:`^10.29.1`,matcher:`^10`,packageName:`preact`},tailorkit:{fallback:`latest`,matcher:`^0`,packageName:`tailorkit`},typescript:{fallback:`^6.0.3`,matcher:`^6`,packageName:`typescript`},zod:{fallback:`^4.0.0`,matcher:`^4`,packageName:`zod`}},$a=e=>{let t=/^(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)$/u.exec(e);if(!t?.groups)return;let{major:n,minor:r,patch:i}=t.groups;if(n&&r&&i)return{major:Number.parseInt(n,10),minor:Number.parseInt(r,10),patch:Number.parseInt(i,10),raw:e}},eo=(e,t)=>e.major===t.major?e.minor===t.minor?e.patch-t.patch:e.minor-t.minor:e.major-t.major,to=(e,t)=>{let n=/^\^(?<major>\d+)(?:\.(?<minor>\d+))?/u.exec(t);if(!n?.groups?.major)return!1;let r=Number.parseInt(n.groups.major,10),i=Number.parseInt(n.groups.minor??`0`,10);return e.major===r&&e.minor>=i},Z=async({fallback:e,matcher:t,packageName:n})=>{try{let r=await fetch(`${Xa}/${encodeURIComponent(n)}`,{signal:AbortSignal.timeout(Za)});if(!r.ok)return e;let i=await r.json(),a=Object.keys(i.versions??{}).map($a).filter(e=>e!==void 0).filter(e=>to(e,t)).toSorted(eo).at(-1);return a?`^${a.raw}`:e}catch{return e}},no=async()=>{let[e,t,n,r,i,a]=await Promise.all([Z(Qa.oxfmt),Z(Qa.oxlint),Z(Qa.preact),Z(Qa.tailorkit),Z(Qa.typescript),Z(Qa.zod)]);return{drizzleKit:Ya,drizzleOrm:Ya,oxfmt:e,oxlint:t,preact:n,tailorkit:r,typescript:i,zod:a}},ro=`{
35
+ `)}\n`},Ar=(e,t)=>{let n=new URL(e);return n.pathname=`${n.pathname.replace(/\/$/u,``)}/${t.replace(/^\//u,``)}`,n.toString()},jr=async e=>{let t=Ar(e,`schema`),n=await fetch(t);if(!n.ok)throw Error(`Unable to fetch TailorKit schema from ${t}: ${n.statusText}`);return await n.json()},Mr=async(e={})=>{let t=E.resolve(e.cwd??`.`),n=E.resolve(t,e.outFile??E.join(`src`,`tailorkit.gen.ts`)),r=await ee(e.configPath,t),i=e.schema??await jr(r.config.host),a=E.resolve(r.root,r.config.server?.entry??`src/server.ts`),o=await S(a).then(e=>e.isFile()).catch(e=>{let t=e.code;if(t===`ENOENT`||t===`ENOTDIR`)return!1;throw e}),s;if(o){let e=E.relative(E.dirname(n),a).replaceAll(E.sep,`/`).replace(/\.tsx?$/u,``);s=e.startsWith(`.`)?e:`./${e}`}let c=kr(i,{serverModule:s});return await g(E.dirname(n),{recursive:!0}),await C(n,c,`utf-8`),n},Nr=`1.0.0-rc.4-5d5b77c`,Pr=`https://registry.npmjs.org`,Fr=5e3,Y={oxfmt:{fallback:`^0.46.0`,matcher:`^0`,packageName:`oxfmt`},oxlint:{fallback:`^1.61.0`,matcher:`^1`,packageName:`oxlint`},preact:{fallback:`^10.29.1`,matcher:`^10`,packageName:`preact`},tailorkit:{fallback:`latest`,matcher:`^0`,packageName:`tailorkit`},typescript:{fallback:`^6.0.3`,matcher:`^6`,packageName:`typescript`},zod:{fallback:`^4.0.0`,matcher:`^4`,packageName:`zod`}},Ir=e=>{let t=/^(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)$/u.exec(e);if(!t?.groups)return;let{major:n,minor:r,patch:i}=t.groups;if(n&&r&&i)return{major:Number.parseInt(n,10),minor:Number.parseInt(r,10),patch:Number.parseInt(i,10),raw:e}},Lr=(e,t)=>e.major===t.major?e.minor===t.minor?e.patch-t.patch:e.minor-t.minor:e.major-t.major,Rr=(e,t)=>{let n=/^\^(?<major>\d+)(?:\.(?<minor>\d+))?/u.exec(t);if(!n?.groups?.major)return!1;let r=Number.parseInt(n.groups.major,10),i=Number.parseInt(n.groups.minor??`0`,10);return e.major===r&&e.minor>=i},X=async({fallback:e,matcher:t,packageName:n})=>{try{let r=await fetch(`${Pr}/${encodeURIComponent(n)}`,{signal:AbortSignal.timeout(Fr)});if(!r.ok)return e;let i=await r.json(),a=Object.keys(i.versions??{}).map(Ir).filter(e=>e!==void 0).filter(e=>Rr(e,t)).toSorted(Lr).at(-1);return a?`^${a.raw}`:e}catch{return e}},zr=async()=>{let[e,t,n,r,i,a]=await Promise.all([X(Y.oxfmt),X(Y.oxlint),X(Y.preact),X(Y.tailorkit),X(Y.typescript),X(Y.zod)]);return{drizzleKit:Nr,drizzleOrm:Nr,oxfmt:e,oxlint:t,preact:n,tailorkit:r,typescript:i,zod:a}},Br=`{
44
36
  "name": "{{ packageName }}",
45
37
  "description": "A TailorKit.dev app that embeds in a host app to extend what it can do.",
46
38
  "private": true,
@@ -73,7 +65,7 @@ export const actions = ${Wa(e.actions??{})} as TailorKitActions;`,za(r,i)];t.ser
73
65
  },
74
66
  "type": "module"
75
67
  }
76
- `,io=`{
68
+ `,Vr=`{
77
69
  "compilerOptions": {
78
70
  "allowSyntheticDefaultImports": true,
79
71
  "esModuleInterop": true,
@@ -91,7 +83,7 @@ export const actions = ${Wa(e.actions??{})} as TailorKitActions;`,za(r,i)];t.ser
91
83
  },
92
84
  "include": ["src", "tailorkit.config.ts"]
93
85
  }
94
- `,ao=`import type { TailorKitConfig } from "tailorkit/app/config";
86
+ `,Hr=`import type { TailorKitConfig } from "tailorkit/app/config";
95
87
 
96
88
  const config = {
97
89
  host: "{{ hostUrl }}",
@@ -102,7 +94,7 @@ const config = {
102
94
  } satisfies TailorKitConfig;
103
95
 
104
96
  export default config;
105
- `,oo=`# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
97
+ `,Ur=`# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
106
98
 
107
99
  # TailorKit
108
100
  .tailorkit
@@ -131,17 +123,17 @@ pnpm-debug.log*
131
123
 
132
124
  # typescript
133
125
  *.tsbuildinfo
134
- `,so=`import { defineConfig } from "oxlint";
126
+ `,Wr=`import { defineConfig } from "oxlint";
135
127
 
136
128
  export default defineConfig({
137
129
  ignorePatterns: ["src/tailorkit.gen.ts"],
138
130
  });
139
- `,co=`import { defineConfig } from "oxfmt";
131
+ `,Gr=`import { defineConfig } from "oxfmt";
140
132
 
141
133
  export default defineConfig({
142
134
  ignorePatterns: ["src/tailorkit.gen.ts"],
143
135
  });
144
- `,lo=`import { ClientProvider, defineClient } from "tailorkit/client";
136
+ `,Kr=`import { ClientProvider, defineClient } from "tailorkit/client";
145
137
  import defaultView from "./views/default";
146
138
 
147
139
  const client = defineClient({
@@ -152,7 +144,7 @@ const client = defineClient({
152
144
  });
153
145
 
154
146
  export default client;
155
- `,uo=`import { createView, useQuery } from "tailorkit/client";
147
+ `,qr=`import { createView, useQuery } from "tailorkit/client";
156
148
  import { api{% if useBox %}, Box{% endif %} } from "#tailorkit";
157
149
 
158
150
  const view = createView({{ viewPath }}, {
@@ -166,27 +158,27 @@ function ViewComponent() {
166
158
  }
167
159
 
168
160
  export default view;
169
- `,fo=`import { defineServer } from "tailorkit/server";
161
+ `,Jr=`import { defineServer } from "tailorkit/server";
170
162
  import * as functions from "./functions/greeting";
171
163
 
172
164
  const app = defineServer(functions);
173
165
 
174
166
  export default app;
175
- `,po=`// Define your SQLite tables here using table(), text(), boolean(), etc.
167
+ `,Yr=`// Define your SQLite tables here using table(), text(), boolean(), etc.
176
168
  // Run pnpm db:generate and commit migrations/ when adding or changing tables.
177
169
  export {};
178
- `,mo=`import { tk } from "tailorkit/server";
170
+ `,Xr=`import { tk } from "tailorkit/server";
179
171
  import { z } from "zod";
180
172
 
181
173
  export const greeting = tk.query
182
174
  .input(z.object({ name: z.string() }))
183
175
  .handler(({ input }) => \`Hello, \${input.name}!\`);
184
- `,ho=`<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" viewBox="0 0 24 24">
176
+ `,Zr=`<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" viewBox="0 0 24 24">
185
177
  <path d="M3 6h6v6H3z" style="fill:#f5f5f5" transform="matrix(1.5 0 0 1.5 10.5 -9)"/>
186
178
  <path d="M2 6v12h12v-6H8V6z" style="fill:#f5f5f5" transform="matrix(1.5 0 0 1.5 -3 -3)"/>
187
179
  </svg>
188
- `,go=`<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" viewBox="0 0 24 24">
180
+ `,Qr=`<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" viewBox="0 0 24 24">
189
181
  <path d="M3 6h6v6H3z" style="fill:#262626" transform="matrix(1.5 0 0 1.5 10.5 -9)"/>
190
182
  <path d="M2 6v12h12v-6H8V6z" style="fill:#262626" transform="matrix(1.5 0 0 1.5 -3 -3)"/>
191
183
  </svg>
192
- `,_o=new oe({strictVariables:!0}),vo=(e,t)=>_o.parseAndRender(e,t),yo=e=>g(e,{recursive:!0}).then(()=>{}),bo=async(e,t,n)=>{if(!n&&ie(e))throw Error(`${e} already exists. Use --force to overwrite it.`);await C(e,t,`utf-8`)},xo=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=T.join(t,`src`,`tailorkit.gen.ts`);if(!n&&ie(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 yo(T.join(t,`src`,`views`)),await yo(T.join(t,`src`,`functions`));let b=[{template:ro,dest:`package.json`},{template:io,dest:`tsconfig.json`},{template:ao,dest:`tailorkit.config.ts`},{template:ho,dest:`logo-dark.svg`},{template:go,dest:`logo-light.svg`},{template:oo,dest:`.gitignore`},{template:so,dest:`oxlint.config.ts`,condition:o},{template:co,dest:`oxfmt.config.ts`,condition:r},{template:lo,dest:T.join(`src`,`client.ts`)},{template:uo,dest:T.join(`src`,`views`,`default.tsx`)},{template:fo,dest:T.join(`src`,`server.ts`)},{template:po,dest:T.join(`src`,`schema.ts`)},{template:mo,dest:T.join(`src`,`functions`,`greeting.ts`)}];await Promise.all(b.filter(e=>e.condition!==!1).map(async({template:e,dest:r})=>{let i=await vo(e,y);await bo(T.join(t,r),i,n)})),await Ja({cwd:t,schema:a})},So=[`pnpm`,`yarn`,`npm`,`bun`],Co=e=>So.includes(e),wo=e=>e.trim().toLowerCase().replaceAll(/[^a-z0-9._/-]+/gu,`-`).replaceAll(/^-+|-+$/gu,``),Q=e=>(s(e)&&(i(`Init cancelled.`),process.exit(0)),e),To=(e,t)=>T.resolve(t,e??`.`),Eo=async(e,t)=>{let n=wo(T.basename(t))||`tailorkit-app`;return wo(e===void 0?Q(await f({defaultValue:n,message:`Package name`,placeholder:n,validate:e=>wo(e??``).length===0?`Enter a package name.`:void 0})):e)},Do=async e=>{if(e!==void 0){if(Co(e))return e;throw Error(`--package-manager must be one of: ${So.join(`, `)}.`)}return Q(await u({initialValue:`pnpm`,message:`Package manager`,options:So.map(e=>({label:e,value:e}))}))},Oo=async e=>e===void 0?Q(await a({initialValue:!0,message:`Add linting with oxlint?`})):e,ko=async e=>e===void 0?Q(await a({initialValue:!0,message:`Add formatting with oxfmt?`})):e,Ao=e=>{try{Ai(e??``);return}catch{return`Enter a valid host URL.`}},jo=async e=>{if(e!==void 0){let t=Ao(e);if(t!==void 0)throw Error(t);return Ai(e)}let t=`https://example.com/api/tailorkit`;return Ai(Q(await f({defaultValue:t,message:`Host URL`,placeholder:t,validate:Ao})))},Mo=async e=>e===void 0?Q(await a({initialValue:!0,message:`Install dependencies?`})):e,No=async(e,t)=>t||!ie(e)?t:Q(await a({initialValue:!1,message:`${m.cyan(e)} already exists. Overwrite matching files?`})),Po=(e,t,n)=>new Promise((r,i)=>{let a=re(e,t,{cwd:n,stdio:`inherit`});a.on(`close`,r),a.on(`error`,i)}),Fo=async(e,t)=>{let n=d();n.start(`Installing dependencies with ${t}`);let r=await Po(t,[`install`],e);if(r!==0)throw n.stop(`Install failed.`),Error(`${t} install exited with code ${r}.`);n.stop(`Installed dependencies.`)},Io=async(e,t)=>{let n=d();n.start(`Formatting project`);let r=await Po(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.`)},Lo=async e=>{let t=To(e.directory,e.cwd),n=await Eo(e.name,t),r=T.join(t,n),i=await No(r,e.force??!1),a=await Do(e.packageManager),o=await jo(e.host),s=await Oo(e.linting),c=await ko(e.formatting),l=await Mo(e.install),u=d();u.start(`Fetching host schema`);let f;try{f=await qa(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 no();return u.stop(`Resolved package versions.`),await g(r,{recursive:!0}),await xo({force:i,formatting:c,hostUrl:o,linting:s,packageName:n,packageVersions:p,schema:f,targetDirectory:r}),l&&(await Fo(r,a),c&&await Io(r,a)),r},Ro=262144,zo={".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`},Bo=e=>e instanceof Error?e.message:String(e),Vo=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 Ho(e){let t=await b(e),n=(await y(t,{recursive:!0,withFileTypes:!0})).filter(e=>e.isFile()).toSorted((e,t)=>T.join(e.parentPath,e.name).localeCompare(T.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(T.join(e.parentPath,e.name)),o=T.relative(t,n).replaceAll(T.sep,`/`);if(!o||o.startsWith(`../`)||T.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.`);r.push(s),i.files.push({path:o,contentType:zo[T.extname(o)]??`application/octet-stream`,size:s.length,chunks:Math.ceil(s.length/Ro),sha256:D(`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:D(`sha256`).update(JSON.stringify(i)).digest(`hex`)}}function Uo(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 Wo(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*Ro,(a+1)*Ro).toString(`base64`)});await e.commitBuild({buildId:n})}var Go=E.object({config:E.string().optional(),cwd:E.string().default(`.`),mode:E.string().optional(),outDir:E.string().optional(),replace:E.boolean().optional()}),Ko=e=>{let t=Go.parse(e);return{configPath:t.config,cwd:t.cwd,mode:t.mode,outDir:t.outDir,replace:t.replace}};async function qo(e){let t=await te(e.configPath,e.cwd);if(!t.config.appId)throw Error(`Missing appId. Deploy once before starting a remote preview.`);let n=await Qi(e),r=await Xi(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 Jr({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=Jr({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: ${Bo(e)}`)}},f=T.resolve(t.root,e.outDir??t.config.build?.outDir??`.tailorkit`),p,h;try{p=await b(T.join(f,`client`)),h=await Ho(p)}catch(e){try{await o()}catch(e){c.warn(`Unable to close preview watcher: ${Bo(e)}`)}throw await d(),e}let g,_,v,y=!1,x=!1,S,C,w,ee=0,E=1e3,D=0,ne=()=>{y||(y=!0,process.off(`SIGINT`,O),process.off(`SIGTERM`,O),S&&clearTimeout(S),C&&clearTimeout(C),w&&clearInterval(w),v?.close(),o().catch(e=>{c.warn(`Unable to close preview watcher: ${Bo(e)}`)}),c.warn(`Preview session ended. Start a new preview to continue.`))},re=()=>{y||!_||x||(S&&clearTimeout(S),S=setTimeout(()=>{if(S=void 0,!_||h.fingerprint===g)return;let e=h,t=_,n=D;x=!0,ee=Date.now(),Wo(t,e).then(()=>{n===D&&(g=e.fingerprint)}).catch(e=>{y||c.warn(`Preview upload interrupted: ${Bo(e)}`)}).finally(()=>{n===D&&(x=!1,h.fingerprint!==g&&re())})},Math.max(500,500-(Date.now()-ee))))},ie=Uo(()=>Ho(p),e=>{y||(h=e,re())},e=>{y||c.warn(`Keeping the last successful preview: ${Bo(e)}`)});a&&typeof a==`object`&&`on`in a&&a.on(`event`,e=>{e.code===`BUNDLE_END`&&ie()});let ae=()=>{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`,()=>{D+=1,E=1e3,_=qr(t);let e=()=>void _?.heartbeat().catch(e=>{v!==t||y||(Vo(e)?ne():t.close())});e(),w=setInterval(e,2e4),re()}),t.addEventListener(`close`,()=>{D+=1,x=!1,w&&clearInterval(w),v===t&&(v=void 0,_=void 0),y||(C=setTimeout(ae,E),E=Math.min(E*2,3e4))}),t.addEventListener(`error`,()=>t.close())};ae();let O=()=>{y||(y=!0,process.off(`SIGINT`,O),process.off(`SIGTERM`,O),o().catch(e=>{c.warn(`Unable to close preview watcher: ${Bo(e)}`)}),S&&clearTimeout(S),C&&clearTimeout(C),w&&clearInterval(w),v?.close(),d().finally(()=>process.exit(0)))};process.once(`SIGINT`,O),process.once(`SIGTERM`,O);let oe=new URL(n.hostUrl);oe.pathname=`${oe.pathname.replace(/\/+$/u,``)}/preview/${l.shareId}`,c.info(m.green(`Host preview: ${oe.href}`)),c.info(m.dim(`Uploading built app assets from ${p}`))}var Jo=e=>{let t=ee();return t===`darwin`?{args:[e],command:`open`}:t===`win32`?{args:[`/c`,`start`,``,e],command:`cmd`}:{args:[e],command:`xdg-open`}},Yo=e=>new Promise(t=>{let{args:n,command:r}=Jo(e),i=re(r,n,{detached:!0,stdio:`ignore`,windowsHide:!0});i.once(`error`,()=>{t(!1)}),i.once(`spawn`,()=>{i.unref(),t(!0)})}),$=p(`tailorkit`),Xo=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]}`},Zo=async(e,t=!0)=>{let n=d(),r=!1;try{let i=await Zi(e,({expiresAt:e,hostUrl:i,userCode:a})=>{let o=Ki(i,a);t&&Yo(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 qo(Ko(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 Zo({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 $i({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 Qi({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 pa({configPath:e.config,cwd:String(e.cwd??`.`),mode:e.mode,onLoginRequired:async()=>{t.stop(`Authentication required.`);let n=await Zo({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(`${Xo(e.size)} raw, ${Xo(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 Ja({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 Lo({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)}}),$.help(),$.version(`0.1.0-beta.17`),$.parse();export{};
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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tailorkit/cli",
3
- "version": "0.1.0-beta.17",
3
+ "version": "0.1.0-beta.19",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -8,6 +8,7 @@
8
8
  "directory": "packages/cli"
9
9
  },
10
10
  "bin": {
11
+ "tailor": "./bin/tailorkit.js",
11
12
  "tailorkit": "./bin/tailorkit.js"
12
13
  },
13
14
  "files": [
@@ -22,20 +23,23 @@
22
23
  "access": "public"
23
24
  },
24
25
  "dependencies": {
26
+ "@ai-sdk/tui": "1.0.128",
25
27
  "@clack/prompts": "^1.8.1",
26
- "@tailorkit/app": "0.1.0-beta.17",
27
- "@tailorkit/client-platform": "0.1.0-beta.17",
28
- "@tailorkit/core": "0.1.0-beta.17",
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",
32
+ "ai": "^7.0.127",
29
33
  "cac": "^7.0.0",
30
34
  "jose": "6.2.12",
31
- "liquidjs": "^10.29.0",
35
+ "liquidjs": "^10.30.0",
32
36
  "picocolors": "^1.1.1",
33
37
  "vite": "npm:@voidzero-dev/vite-plus-core@1.0.0",
34
38
  "zod": "^4.6.5"
35
39
  },
36
40
  "devDependencies": {
37
41
  "@tailorkit/config": "0.0.0",
38
- "@types/node": "26.6.3",
42
+ "@types/node": "26.6.4",
39
43
  "typescript": "^7.0.2",
40
44
  "vite-plus": "1.0.0"
41
45
  },