@stacksjs/orm 0.74.56 → 0.74.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +11 -11
- package/package.json +23 -23
package/dist/index.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var Yt=import.meta.require;import"@stacksjs/validation";import{log as re}from"@stacksjs/cli";import{db as Ee,mutationCount as Fe}from"@stacksjs/database/runtime";async function Xt(e,n={}){let{olderThanDays:t=30,column:r="created_at",query:o}=n;try{if(o){let u=Ee.deleteFrom(e);u=o(u);let c=Fe(await u.execute());return re.info(`Pruned ${c} records from ${e}`),c}let a=new Date;a.setDate(a.getDate()-t);let i=await Ee.deleteFrom(e).where(r,"<",a.toISOString()).execute(),s=Fe(i);return re.info(`Pruned ${s} records from ${e} older than ${t} days`),s}catch(a){throw re.error(`Failed to prune ${e}:`,a),a}}async function mi(e,n={}){return Xt(e,n)}function gi(e){if(!e?.prunable)return null;if(typeof e.prunable==="boolean")return{olderThanDays:30,column:"created_at"};return e.prunable}import{createCipheriv as Zt,createDecipheriv as en,createHash as tn,randomBytes as nn}from"crypto";import{log as H}from"@stacksjs/logging";var Ie="enc:",$e="aes-256-gcm",rn=12,z=null;async function je(){if(z)return z;let e=process.env.APP_KEY;if(!e)try{e=(await import("@stacksjs/config").catch(()=>null))?.config?.app?.key}catch{}if(!e)return null;return z=tn("sha256").update(e).digest(),z}function I(e){return typeof e==="string"&&e.startsWith(Ie)}async function oe(e){if(e==null)return e;if(I(e))return e;if(typeof e!=="string")return e;let n=await je();if(!n)return H.warn("[orm] encrypted attribute: APP_KEY not set - storing value in plaintext"),e;let t=nn(rn),r=Zt($e,n,t),o=Buffer.concat([r.update(e,"utf8"),r.final()]),a=r.getAuthTag();return`${Ie}${t.toString("base64")}:${a.toString("base64")}:${o.toString("base64")}`}async function ae(e){if(e==null)return e;if(typeof e!=="string")return e;if(!I(e))return e;try{let n=await je();if(!n)return H.warn("[orm] encrypted attribute: APP_KEY not set - cannot decrypt"),null;let[,t,r,o]=e.split(":");if(!t||!r||!o)return H.warn("[orm] encrypted attribute: malformed envelope, returning null"),null;let a=Buffer.from(t,"base64"),i=Buffer.from(r,"base64"),s=Buffer.from(o,"base64"),u=en($e,n,a);return u.setAuthTag(i),Buffer.concat([u.update(s),u.final()]).toString("utf8")}catch(n){return H.warn("[orm] encrypted attribute: decrypt failed (key rotation? corrupted ciphertext?)",{error:n}),null}}function ie(e){let n=e.attributes;if(!n||typeof n!=="object")return[];let t=[];for(let[r,o]of Object.entries(n))if(o&&typeof o==="object"&&o.encrypted===!0)t.push(r);return t}import{sqlDateTime as on}from"@stacksjs/database/runtime";import{log as B}from"@stacksjs/logging";var an=[/^password$/i,/^password_hash$/i,/^api_key$/i,/_token$/i,/_secret$/i,/^remember_token$/i],Ne="model_audits",ce=null;function sn(e){ce=e}async function se(){if(ce!=null)return ce;try{let e=await import("@stacksjs/router").catch(()=>null);if(!e)return null;let n=e.getCurrentRequest;if(typeof n!=="function")return null;let t=n();if(!t)return null;return(t.user??t._user)?.id??null}catch{return null}}function G(e){if(!e||typeof e!=="object")return null;let n={};for(let[t,r]of Object.entries(e)){if(an.some((o)=>o.test(t)))continue;n[t]=r}return n}function j(e){if(!e||typeof e!=="object")return null;let n=e;if(n._attributes&&typeof n._attributes==="object")return{...n._attributes};return{...e}}function un(e,n){if(!e||!n)return{old:e,next:n};let t={},r={},o=new Set([...Object.keys(e),...Object.keys(n)]);for(let a of o)if(e[a]!==n[a])t[a]=e[a],r[a]=n[a];return{old:t,next:r}}async function ue(e,n=!1){try{let{db:t}=await import("@stacksjs/database/runtime");await t.insertInto(Ne).values({auditable_type:e.auditable_type,auditable_id:e.auditable_id,event:e.event,old_values:e.old_values?JSON.stringify(e.old_values):null,new_values:e.new_values?JSON.stringify(e.new_values):null,user_id:e.user_id,created_at:on()}).executeTakeFirst()}catch(t){if(B.warn(`[orm] audit row write failed for ${e.auditable_type}#${String(e.auditable_id)} (${e.event})`,{error:t}),n)throw t}}function qe(e){return{async audits(n){try{let{db:t}=await import("@stacksjs/database/runtime");return(await t.selectFrom(Ne).selectAll().where("auditable_type","=",e).where("auditable_id","=",n).orderBy("created_at","desc").execute()??[]).map((o)=>({...o,old_values:typeof o.old_values==="string"?Be(o.old_values):o.old_values,new_values:typeof o.new_values==="string"?Be(o.new_values):o.new_values}))}catch(t){return B.warn(`[orm] audits() lookup failed for ${e}#${String(n)}`,{error:t}),[]}}}}function Be(e){try{return JSON.parse(e)}catch{return e}}function Le(e){if(e&&typeof e==="object"&&"transactional"in e)return{transactional:e.transactional===!0};return{transactional:!1}}function Ue(e,n,t="id",r={}){let o=r.transactional===!0,a=e;if(typeof e.audits!=="function")e.audits=qe(n).audits;let i=async(l)=>{if(!o)return await l();let{db:f}=await import("@stacksjs/database/runtime");return await f.transaction(async()=>l())},s=e.create;if(typeof s==="function")e.create=async function(...l){return await i(async()=>{let f=await s.apply(this,l);try{let d=j(f),m=d?.[t];if(m!=null){let p=await se();await ue({auditable_type:n,auditable_id:m,event:"created",old_values:null,new_values:G(d),user_id:p},o)}}catch(d){if(B.warn(`[orm] audit(create) failed for ${n}`,{error:d}),o)throw d}return f})};let u=e.update;if(typeof u==="function")e.update=async function(l,f){return await i(async()=>{let d=a.find,m=typeof d==="function"?j(await d.call(a,l)):null,p=await u.call(this,l,f);try{let y=j(p)??(typeof d==="function"?j(await d.call(a,l)):null),{old:b,next:w}=un(m,y);if(w&&Object.keys(w).length>0){let h=await se();await ue({auditable_type:n,auditable_id:l,event:"updated",old_values:G(b),new_values:G(w),user_id:h},o)}}catch(y){if(B.warn(`[orm] audit(update) failed for ${n}#${String(l)}`,{error:y}),o)throw y}return p})};let c=(l)=>{let f=e[l];if(typeof f!=="function")return;e[l]=async function(d){return await i(async()=>{let m=a.find,p=typeof m==="function"?j(await m.call(a,d)):null,y=await f.call(this,d);try{if(y!==!1&&p){let b=await se();await ue({auditable_type:n,auditable_id:d,event:"deleted",old_values:G(p),new_values:null,user_id:b},o)}}catch(b){if(B.warn(`[orm] audit(${l}) failed for ${n}#${String(d)}`,{error:b}),o)throw b}return y})}};c("delete"),c("softDelete")}import{db as cn,sql as ln,sqlDateTime as le}from"@stacksjs/database/runtime";function A(e,n){if(typeof e!=="number"||!Number.isFinite(e)||e<=0)throw Error(`[orm/commentable] ${n} requires a positive numeric id (received ${String(e)})`)}var N="commentable_upvotes",q="commentables";function dn(e){let n=e;return n.code==="SQLITE_CONSTRAINT_UNIQUE"||n.code==="SQLITE_CONSTRAINT"||n.code==="23505"||n.errno===1062||/unique|duplicate/i.test(n.message??"")}function de(e){let n=cn;return{async comments(t){return A(t,"comments"),await n.selectFrom("commentables").where("commentables_id","=",t).where("commentables_type","=",e).selectAll().execute()},async commentCount(t){let r=await n.selectFrom("commentables").select(ln`count(*) as count`).where("commentables_id","=",t).where("commentables_type","=",e).executeTakeFirst();return Number(r?.count)||0},async addComment(t,r){if(A(t,"addComment"),!r||typeof r.title!=="string"||r.title.trim().length===0)throw Error("[orm/commentable] addComment requires a non-empty comment.title");if(typeof r.body!=="string"||r.body.trim().length===0)throw Error("[orm/commentable] addComment requires a non-empty comment.body");let o=await n.insertInto("commentables").values({...r,commentables_id:t,commentables_type:e,status:"pending",created_at:le(),updated_at:le()}).returningAll().executeTakeFirst();if(o&&typeof o==="object"&&"id"in o)return o;let a=o?.lastInsertRowid;if(a==null)return o;return await n.selectFrom("commentables").where("id","=",Number(a)).selectAll().executeTakeFirst()},async approvedComments(t){return await n.selectFrom("commentables").where("commentables_id","=",t).where("commentables_type","=",e).where("status","=","approved").selectAll().execute()},async pendingComments(t){return await n.selectFrom("commentables").where("commentables_id","=",t).where("commentables_type","=",e).where("status","=","pending").selectAll().execute()},async rejectedComments(t){return await n.selectFrom("commentables").where("commentables_id","=",t).where("commentables_type","=",e).where("status","=","rejected").selectAll().execute()},async upvoteComment(t,r){A(t,"upvoteComment"),A(r,"upvoteComment");let o=()=>n.selectFrom(N).where("upvoteable_id","=",t).where("upvoteable_type","=",q).where("user_id","=",r).selectAll().executeTakeFirst(),a=await o();if(a)return a;try{await n.insertInto(N).values({upvoteable_id:t,upvoteable_type:q,user_id:r,created_at:le()}).execute()}catch(i){if(!dn(i))throw i}return await o()},async removeCommentUpvote(t,r){A(t,"removeCommentUpvote"),A(r,"removeCommentUpvote"),await n.deleteFrom(N).where("upvoteable_id","=",t).where("upvoteable_type","=",q).where("user_id","=",r).execute()},async commentUpvoteCount(t){A(t,"commentUpvoteCount");let r=await n.selectFrom(N).select("count(*) as count").where("upvoteable_id","=",t).where("upvoteable_type","=",q).executeTakeFirst();return Number(r?.count)||0},async hasUpvotedComment(t,r){return A(t,"hasUpvotedComment"),A(r,"hasUpvotedComment"),!!await n.selectFrom(N).where("upvoteable_id","=",t).where("upvoteable_type","=",q).where("user_id","=",r).selectAll().executeTakeFirst()}}}import{db as fn,sql as pn,sqlDateTime as Ke}from"@stacksjs/database/runtime";function fe(e,n){if(typeof e!=="number"||!Number.isFinite(e)||e<=0)throw Error(`[orm/taggable] ${n} requires a positive numeric id (received ${String(e)})`)}function pe(e){let n=fn;return{async tags(t){return fe(t,"tags"),await n.selectFrom("taggables").where("taggable_id","=",t).where("taggable_type","=",e).selectAll().execute()},async tagCount(t){fe(t,"tagCount");let r=await n.selectFrom("taggables").select(pn`count(*) as count`).where("taggable_id","=",t).where("taggable_type","=",e).executeTakeFirst();return Number(r?.count)||0},async addTag(t,r){if(fe(t,"addTag"),!r||typeof r.name!=="string"||r.name.trim().length===0)throw Error("[orm/taggable] addTag requires a non-empty tag.name");return await n.insertInto("taggables").values({...r,taggable_id:t,taggable_type:e,slug:r.name.toLowerCase().replace(/[^a-z0-9]+/g,"-"),is_active:!0,created_at:Ke(),updated_at:Ke()}).execute(),await n.selectFrom("taggables").where("taggable_id","=",t).where("taggable_type","=",e).where("name","=",r.name).selectAll().executeTakeFirst()},async activeTags(t){return await n.selectFrom("taggables").where("taggable_id","=",t).where("taggable_type","=",e).where("is_active","=",!0).selectAll().execute()},async inactiveTags(t){return await n.selectFrom("taggables").where("taggable_id","=",t).where("taggable_type","=",e).where("is_active","=",!1).selectAll().execute()},async removeTag(t,r){await n.deleteFrom("taggables").where("taggable_id","=",t).where("taggable_type","=",e).where("id","=",r).execute()}}}import{db as mn,sqlDateTime as J}from"@stacksjs/database/runtime";function me(e){let n=mn;async function t(r){return(await n.selectFrom("categorizable_models").where("categorizable_id","=",r).where("categorizable_type","=",e).selectAll().execute()).map((a)=>a.category_id)}return{async categories(r){let o=await t(r);if(o.length===0)return[];return await n.selectFrom("categorizables").where("id","in",o).selectAll().execute()},async categoryCount(r){return(await t(r)).length},async addCategory(r,o){let a=()=>n.selectFrom("categorizables").where("name","=",o.name).where("categorizable_type","=",e).selectAll().executeTakeFirst(),i=await a();if(!i)await n.insertInto("categorizables").values({name:o.name,description:o.description,slug:o.name.toLowerCase().replace(/[^a-z0-9]+/g,"-"),categorizable_type:e,is_active:!0,created_at:J(),updated_at:J()}).execute(),i=await a();return await n.insertInto("categorizable_models").values({categorizable_id:r,categorizable_type:e,category_id:i?.id,created_at:J(),updated_at:J()}).execute(),i},async activeCategories(r){let o=await t(r);if(o.length===0)return[];return await n.selectFrom("categorizables").where("id","in",o).where("is_active","=",!0).selectAll().execute()},async inactiveCategories(r){let o=await t(r);if(o.length===0)return[];return await n.selectFrom("categorizables").where("id","in",o).where("is_active","=",!1).selectAll().execute()},async removeCategory(r,o){await n.deleteFrom("categorizable_models").where("categorizable_id","=",r).where("categorizable_type","=",e).where("category_id","=",o).execute()}}}import{db as gn,sqlDateTime as yn}from"@stacksjs/database/runtime";function ge(e,n){let t=gn,r=n?.table||`${e}_likes`,o=n?.foreignKey||`${e.replace(/s$/,"")}_id`;return{async likes(a){return await t.selectFrom(r).where(o,"=",a).selectAll().execute()},async likeCount(a){let i=await t.selectFrom(r).select("count(*) as count").where(o,"=",a).executeTakeFirst();return Number(i?.count)||0},async like(a,i){if(typeof a!=="number"||!Number.isFinite(a)||a<=0)throw Error(`[orm/likeable] like requires a positive numeric id (received ${String(a)})`);if(typeof i!=="number"||!Number.isFinite(i)||i<=0)throw Error(`[orm/likeable] like requires a positive numeric userId (received ${String(i)})`);let s=yn();try{return await t.insertInto(r).values({[o]:a,user_id:i,created_at:s,updated_at:s}).returningAll().executeTakeFirst()}catch(u){let c=u;if(!(c.code==="SQLITE_CONSTRAINT_UNIQUE"||c.code==="SQLITE_CONSTRAINT"||c.code==="23505"||c.errno===1062||/unique|duplicate/i.test(c.message??"")))throw u;let f=await t.selectFrom(r).where(o,"=",a).where("user_id","=",i).selectAll().executeTakeFirst();if(f)return f;throw u}},async unlike(a,i){await t.deleteFrom(r).where(o,"=",a).where("user_id","=",i).execute()},async isLiked(a,i){return!!await t.selectFrom(r).where(o,"=",a).where("user_id","=",i).selectAll().executeTakeFirst()},async likedBy(a){return(await t.selectFrom(r).select([o]).where("user_id","=",a).execute()).map((s)=>Number(s[o])).filter(Boolean)}}}function Ge(e){let n=e;return n?.code==="SQLITE_CONSTRAINT_UNIQUE"||n?.code==="SQLITE_CONSTRAINT"||n?.code==="23505"||n?.errno===1062||/unique|duplicate/i.test(n?.message??"")}function bn(e,n,t){let r=e;if(e instanceof Error&&typeof r.status==="number"&&Number.isInteger(r.status)&&r.status>=400&&r.status<600){let o={error:e.message};if(r.details!==void 0)o.details=r.details;return{status:r.status,body:o}}if(Ge(e))return{status:409,body:{error:`${n} already exists`}};return{status:500,body:{error:`Failed to ${t} ${n}`,detail:String(e)}}}function R(e){let n=!1;for(let r=0;r<e.length;r++){let o=e.charCodeAt(r);if(o>127)return e.replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase();if(o>=65&&o<=90)n=!0}if(!n)return e;let t="";for(let r=0;r<e.length;r++){let o=e.charCodeAt(r);if(o<65||o>90){t+=e[r];continue}let a=r>0?e.charCodeAt(r-1):0,i=r+1<e.length?e.charCodeAt(r+1):0,s=a>=97&&a<=122||a>=48&&a<=57,u=a>=65&&a<=90&&i>=97&&i<=122;if(r>0&&(s||u))t+="_";t+=String.fromCharCode(o+32)}return t}function wn(e){let n={};for(let[t,r]of Object.entries(e))n[R(t)]=r;return n}function Mi(e,n){let t=String(n||"").replace(/^\/+|\/+$/g,""),r=String(e).replace(/^\/+/,"");return`/api/${t?`${t}/`:""}${r}`}function Je(e){if(!e)return null;let n=e.attributes??{};if(Object.prototype.hasOwnProperty.call(n,"teamId")||Object.prototype.hasOwnProperty.call(n,"team_id"))return"team_id";return e.belongsTo?.some((t)=>t==="Team")?"team_id":null}function Ye(e){if(!e)return null;let n=e.attributes??{};if(Object.prototype.hasOwnProperty.call(n,"userId")||Object.prototype.hasOwnProperty.call(n,"user_id"))return"user_id";return e.belongsTo?.some((t)=>t==="User")?"user_id":null}function Di(e){return e?.ownership===!1}function Ei(e,n,t){let r=Object.keys(e).find((a)=>R(a)===R(n));if(Array.isArray(t)){if(r===void 0)return{data:e,error:"Ownership value is required"};if(!t.some((a)=>String(a)===String(e[r])))return{data:e,error:"Ownership value is not available to this caller"};return{data:{...e,[n]:e[r]}}}if(t===null||t===void 0)return{data:e,error:"Caller has no ownership identity"};let o={...e};for(let a of Object.keys(o))if(R(a)===R(n))delete o[a];return o[n]=t,{data:o}}function hn(e){if(!e)return[];let n=Object.entries(e.attributes??{}).filter(([,t])=>t?.fillable===!0).map(([t])=>t);for(let t of e.belongsTo??[]){if(typeof t!=="string"||!t.trim())continue;let r=R(t.trim()).split("_").filter(Boolean);if(r.length===0)continue;let o=`${r[0]}${r.slice(1).map((a)=>`${a[0]?.toUpperCase()}${a.slice(1)}`).join("")}Id`;n.push(o)}return[...new Set(n)]}function kn(e,n){if(!e||n.length===0)return{};let t={},r;for(let o of n){if(o in e){t[o]=e[o];continue}r??=_n(n);let a=r.get(o);if(a!==o&&a in e)t[o]=e[a]}return t}function Tn(e,n){if(e?.name!=="date"||n instanceof Date||typeof n!=="string")return n;let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(n);if(!t)return n;let r=Number(t[1]),o=Number(t[2]),a=Number(t[3]),i=new Date(Date.UTC(r,o-1,a));if(i.getUTCFullYear()!==r||i.getUTCMonth()!==o-1||i.getUTCDate()!==a)return n;return i}var We=new WeakMap,Ve=new WeakMap;function be(e){let n=We.get(e);if(n&&n.length===e.length){let r=!0;for(let o=0;o<e.length;o++)if(n[o]?.field!==e[o]){r=!1;break}if(r)return n}let t=e.map((r)=>({field:r,snake:R(r)}));return We.set(e,t),t}function _n(e){let n=be(e),t=Ve.get(n);if(t)return t;let r=new Map(n.map(({field:o,snake:a})=>[o,a]));return Ve.set(n,r),r}function Fi(e,n){if(!n.length)return e;let t={...e};for(let{field:r,snake:o}of be(n))if(delete t[r],o!==r)delete t[o];return t}function Ii(e,n){if(!e||n.length===0)return e;let t={...e};for(let{field:r,snake:o}of be(n))if(delete t[r],o!==r)delete t[o];return t}var Rn=["id","uuid","created_at","updated_at","deleted_at"];function $i(e,n){let t=new Map;for(let r of[...Object.keys(e??{}),...Rn]){let o=R(r);if(!/^\w+$/.test(o))continue;t.set(r,o),t.set(o,o)}for(let r of n)t.delete(r),t.delete(R(r));return t}function ji(e,n,t){if(!n)return e;let r=e;for(let o of String(n).split(",")){let a=o.trim();if(!a)continue;let i=a.startsWith("-"),s=i?a.slice(1):a;if(!/^\w+$/.test(s))continue;let u=t.get(s);if(!u)continue;r=r.orderBy(u,i?"desc":"asc")}return r}var Sn={string:{get:(e)=>e!=null?String(e):null,set:(e)=>e!=null?String(e):null},number:{get:(e)=>e!=null?Number(e):null,set:(e)=>e!=null?Number(e):null},integer:{get:(e)=>e!=null?Math.trunc(Number(e)):null,set:(e)=>e!=null?Math.trunc(Number(e)):null},float:{get:(e)=>e!=null?Number.parseFloat(String(e)):null,set:(e)=>e!=null?Number.parseFloat(String(e)):null},boolean:{get:(e)=>e===1||e==="1"||e===!0||e==="true",set:(e)=>e===!0||e===1||e==="1"||e==="true"?1:0},json:{get:(e)=>e==null?null:typeof e==="string"?xn(e):e,set:(e)=>e==null?null:typeof e==="string"?e:JSON.stringify(e)},datetime:{get:(e)=>e?new Date(e):null,set:(e)=>e instanceof Date?e.toISOString():e},date:{get:(e)=>e?new Date(e):null,set:(e)=>e instanceof Date?e.toISOString().split("T")[0]:e},array:{get:(e)=>e==null?[]:Array.isArray(e)?e:typeof e==="string"?Pn(e):[],set:(e)=>e==null?null:Array.isArray(e)?JSON.stringify(e):e}},Qe=new WeakMap;function An(e,n){let t=Qe.get(e);if(t&&t.length===n.length){let o=!0;for(let a=0;a<n.length;a++){let i=n[a];if(t[a]?.attr!==i||t[a]?.definition!==e[i]){o=!1;break}}if(o)return t}let r=[];for(let o of n){let a=e[o],i=typeof a==="string"?Sn[a]:a;r.push({attr:o,snake:R(o),definition:a,caster:i})}return Qe.set(e,r),r}function xn(e){try{return JSON.parse(e)}catch{return e}}function Pn(e){try{return JSON.parse(e)}catch{return[]}}function Bi(e,n,t){if(!e||typeof e!=="object"||!n)return e;let r=Object.keys(n);if(r.length===0)return e;let o=An(n,r);if(o.length===0)return e;let a={...e};for(let{attr:i,caster:s,snake:u}of o){if(!s)continue;let c=s[t];if(typeof c!=="function")continue;if(Object.prototype.hasOwnProperty.call(a,i))a[i]=c.call(s,a[i]);if(u!==i&&Object.prototype.hasOwnProperty.call(a,u))a[u]=c.call(s,a[u])}return a}var ze=new WeakMap;function Cn(e){let n=ze.get(e);if(n)return n;let t=[];for(let[r,o]of Object.entries(e)){let a=o?.validation?.rule;if(!a||typeof a.validate!=="function")continue;t.push({definition:o,field:r,hasDefault:o!==null&&typeof o==="object"&&Object.prototype.hasOwnProperty.call(o,"default"),rule:a})}return ze.set(e,t),t}function Xe(e){let n=e?.attributes;if(!n||typeof n!=="object")return!1;for(let t of Object.values(n)){let r=t?.validation?.rule;if(r&&typeof r.validate==="function")return!0}return!1}function Ze(e,n,t){let r=n?.attributes;if(!r||typeof r!=="object")return{valid:!0};let o=Cn(r);if(o.length===0)return{valid:!0};let a={},i=!1;for(let s of o){let{definition:u,field:c,hasDefault:l,rule:f}=s,d=Object.prototype.hasOwnProperty.call(e,c);if(!d&&t==="updating")continue;let m=d?e[c]:l?u.default:void 0,p=Tn(f,m),y=f.validate(p);if(!y?.valid&&Array.isArray(y?.errors)&&y.errors.length>0)i=!0,a[c]=y.errors.map((b)=>u.validation?.message?.[b?.code]??b?.message??"invalid")}return i?{valid:!1,errors:a}:{valid:!0}}function vn(e,n){return`${e}\x00${On(n)}`}function Ni(e){let n=new Map;for(let t of e){let r=vn(String(t.method??""),String(t.path??""));if(!n.has(r))n.set(r,t)}return n}function On(e){return e.replace(/\{[^}]*\}/g,"{}").replace(/:[^/]+/g,"{}")}function ye(e){if(Array.isArray(e))return e.filter((n)=>typeof n==="string"&&n.length>0);return typeof e==="string"&&e?[e]:[]}function qi(e){let n=typeof e==="object"&&e!==null&&"middleware"in e,t=e?.middleware;if(!n)return{read:["auth"],write:["auth"],declared:!1};if(t&&typeof t==="object"&&!Array.isArray(t)){let o=t;return{read:"read"in o?ye(o.read):["auth"],write:"write"in o?ye(o.write):["auth"],declared:!0}}let r=ye(t);return{read:r,write:r,declared:!0}}var He=15,Mn=100;function Li(e){let n=Number.parseInt(e.get("page")||String(1),10),t=Number.isFinite(n)?Math.max(1,n):1,r=Number.parseInt(e.get("per_page")||String(He),10),o=Math.min(Number.isFinite(r)?Math.max(1,r):He,Mn);return{page:t,perPage:o,offset:(t-1)*o}}function Y(e,n){let t=new URL(e.toString());return t.searchParams.set("page",String(n)),`${t.pathname}${t.search}`}function Dn(e,n,t,r,o,a){let i=(n-1)*t,s=r===0,u={page:n,per_page:t,from:s?null:i+1,to:s?null:i+r,has_more_pages:o,prev_page_url:n>1?Y(e,n-1):null,next_page_url:o?Y(e,n+1):null};if(a!==void 0&&!Number.isNaN(a)){let c=Math.max(1,Math.ceil(a/t));u.total=a,u.last_page=c,u.first_page_url=Y(e,1),u.last_page_url=Y(e,c)}return u}function Ui(e,n,t,r,o,a){let{page:i,...s}=Dn(e,n,t,r,o,a);return{current_page:i,...s}}function Ki(e,n){return(n??e??"").toString().trim().toLowerCase()==="warn"?"warn":"deny"}function Wi(e,n){if(e.length===0)return null;let t=[...e].sort().join(", ");if(n==="deny")return`[orm] security.api.rowScoping is 'deny': NOT registering store/update/destroy for ${e.length} model(s) `+`with no row-level scoping \u2014 ${t}. Give a model an \`ownership\` config or a \`team_id\` column to restore its writes.`;return`[orm] ${e.length} model(s) publish mutating routes with no row-level scoping, so an authenticated caller can write any row \u2014 `+`${t}. Scope one with an \`ownership\` config or a \`team_id\` column; intended for public catalog tables. Set \`security.api.rowScoping: 'deny'\` (config/security.ts) to stop generating these routes instead.`}function En(e){if(e?.ownership===!1)return null;if(e?.ownership)return e.ownership;let n=Je(e);if(n)return{field:n,resolve:async(r,o)=>{let{resolveAuthenticatedTeamId:a}=await import("@stacksjs/auth");return a(we(o))}};let t=Ye(e);if(t)return{field:t,resolve:async(r)=>r?.id??null};return null}function we(e){let n=e?.headers?.get?.("authorization"),t=n&&/^Bearer\s+/i.test(n)?n.replace(/^Bearer\s+/i,"").trim():null,r=e?.headers?.get?.("cookie")||"";return{bearerToken:()=>t,cookies:{get:(o)=>{for(let a of r.split(";")){let i=a.indexOf("=");if(i===-1)continue;if(a.slice(0,i).trim()===o)return decodeURIComponent(a.slice(i+1).trim())}return null}}}}function Fn(e="customer_id"){return{field:e,resolve:async(n)=>{let t=n?.id;if(t==null)return null;try{let{Customer:r}=await import("@stacksjs/orm");return(await r.where("user_id",t).first())?.id??null}catch{return null}}}}function In(e="id"){return{field:e,resolve:async(n)=>n?.id??null}}function $n(e="site_id"){return{field:e,resolve:async(n,t)=>{try{let[{resolveAuthenticatedTeamId:r},{Site:o}]=await Promise.all([import("@stacksjs/auth"),import("@stacksjs/orm")]),a=await r(we(t));if(a==null)return[];return(await o.where("team_id",a).get()??[]).map((s)=>s.id).filter((s)=>s!=null)}catch{return[]}}}}function jn(e="id"){return{field:e,resolve:async(n,t)=>{try{let{resolveAuthenticatedTeamId:r}=await import("@stacksjs/auth");return await r(we(t))}catch{return null}}}}function Bn(e,n){return{field:n,resolve:async(t,r)=>{try{let o=await import("@stacksjs/orm"),a=o.models?.[e]??o[e]?.definition??null,i=En(a);if(!i?.field||typeof i.resolve!=="function")return[];let s=await i.resolve(t,r);if(s==null||Array.isArray(s)&&s.length===0)return[];let u=o[e];if(!u)return[];return((Array.isArray(s)?await u.whereIn(i.field,s).get():await u.where(i.field,s).get())??[]).map((l)=>l.id).filter((l)=>l!=null)}catch{return[]}}}}import{getCurrentRequest as Nn}from"@stacksjs/router";var et=new WeakMap;function tt(e){let n=new Map;for(let t of e){let r=t?.id;if(r!==void 0)n.set(r,t)}return n}async function qn(e,n){if(typeof e.find==="function")return e.find(n);let t=await e.findMany?.([n]);return tt(t??[]).get(n)}async function Ln(e,n,t){n.pending=void 0;try{let r=typeof e.findMany==="function"?await e.findMany(t.keys):await Promise.all(t.keys.map((a)=>e.find?.(a))),o=tt(r??[]);for(let a of t.resolvers)a.resolve(o.get(a.key))}catch(r){for(let o of t.resolvers)o.reject(r)}}function Gi(e,n){let t=Nn();if(!t)return qn(e,n);let r=et.get(t);if(!r)r=new WeakMap,et.set(t,r);let o=r.get(e);if(!o)o={cache:new Map},r.set(e,o);let a=o.cache.get(n);if(a)return a.then();let i=o.pending;if(!i){i={keys:[],resolvers:[]},o.pending=i;let c=i,l=o;queueMicrotask(()=>{Ln(e,l,c)})}let s=new Promise((c,l)=>{i.keys.push(n),i.resolvers.push({key:n,resolve:c,reject:l})});o.cache.set(n,s);let u=o.cache;return s.catch(()=>u.delete(n)),s.then()}import{db as Zi}from"@stacksjs/database/runtime";class Un{conditions=[];where(e,...n){let[t,r]=n,o=r===void 0?"=":t,a=r===void 0?t:r;this.addCondition("and","where",e,o,a)}orWhere(e,...n){let[t,r]=n,o=r===void 0?"=":t,a=r===void 0?t:r;this.addCondition("or","where",e,o,a)}whereIn(e,n){this.conditions.push({type:"and",method:"whereIn",column:e,values:n})}whereNotIn(e,n){this.conditions.push({type:"and",method:"whereIn",column:e,values:n,operator:"not in"})}whereNull(e){this.conditions.push({type:"and",method:"whereNull",column:e})}whereNotNull(e){this.conditions.push({type:"and",method:"whereNotNull",column:e})}whereBetween(e,n){this.conditions.push({type:"and",method:"whereBetween",column:e,range:n})}whereExists(e){this.conditions.push({type:"and",method:"whereExists",column:"",callback:e})}addCondition(e,n,t,r,o){this.conditions.push({type:e,method:n,column:t,operator:r,value:o})}getConditions(){return this.conditions}}import{db as he}from"@stacksjs/database/runtime";async function ns(e,n){return await he.transaction(e,n)}async function rs(e){return await he.savepoint(e)}function os(e,n){return he.transactional(e,n)}export*from"@stacksjs/model-meta";import{createModel as or,registerModel as ar}from"@stacksjs/query-builder";import{log as T}from"@stacksjs/logging/runtime";import{snakeCase as V}from"@stacksjs/strings";import{AsyncLocalStorage as Ot}from"async_hooks";import{toCursorPaginator as ir,toPaginator as sr,toSimplePaginator as ur}from"@stacksjs/pagination";function Te(e,n){let t=Se(),r=t?ke(t,"per_page"):void 0,o=t?ke(t,"page"):void 0,a=e!==void 0?Math.max(1,Math.floor(e)):Math.min(100,Math.max(1,r??15)),i=Math.max(1,Math.floor(n??o??1));return{perPage:a,page:i}}function _e(e,n){let t=Se(),r=t?rt(t,"cursor"):void 0,o=t?ke(t,"per_page"):void 0,a=e!==void 0?Math.max(1,Math.floor(e)):Math.min(100,Math.max(1,o??15)),s=nt(n!==void 0?n:r??null);return{perPage:a,cursor:s}}function nt(e){if(e===null||e===void 0)return null;if(Array.isArray(e))return e;if(typeof e==="string"&&e.startsWith("["))try{let n=JSON.parse(e);if(Array.isArray(n))return n}catch{}return e}function Re(e){let n=Se();if(!n)return e;let t=(()=>{try{return new URL(n.url)}catch{return null}})();if(!t)return e;let r=t.pathname;if(e.path=r,"next_cursor"in e)return e.next_page_url=e.next_cursor!==null?v(t,{cursor:e.next_cursor}):null,e.prev_page_url=e.prev_cursor!==null?v(t,{cursor:e.prev_cursor}):null,e;let o=e.current_page;if(e.prev_page_url=o>1?v(t,{page:o-1}):null,"total"in e){let a=e.last_page;e.next_page_url=o<a?v(t,{page:o+1}):null,e.first_page_url=v(t,{page:1}),e.last_page_url=v(t,{page:a})}else e.next_page_url=e.has_more_pages?v(t,{page:o+1}):null;return e}function v(e,n){let t=new URL(e.toString());for(let[r,o]of Object.entries(n))t.searchParams.set(r,String(o));return`${t.pathname}${t.search}`}var D;function Se(){if(D===null)return;if(D===void 0)try{let n=Yt("@stacksjs/router");if(typeof n.getCurrentRequest==="function")D=n.getCurrentRequest;else{D=null;return}}catch{D=null;return}return D()}function ke(e,n){let t=rt(e,n);if(t===void 0)return;let r=Number(t);return Number.isFinite(r)?r:void 0}function rt(e,n){let t=e.query?.[n];if(t===void 0)return;return Array.isArray(t)?t[0]:t}import{createRequire as Kn}from"module";import{db as Wn}from"@stacksjs/database/runtime";var Vn=Kn(import.meta.url);function ot(e){let n=Wn;return{async createStripeUser(t,r){let{manageCustomer:o}=await import("@stacksjs/payments");return await o.createStripeCustomer(t,r)},async updateStripeUser(t,r){let{manageCustomer:o}=await import("@stacksjs/payments");return await o.updateStripeCustomer(t,r)},async deleteStripeUser(t){let{manageCustomer:r}=await import("@stacksjs/payments");return await r.deleteStripeUser(t)},async createOrGetStripeUser(t,r){let{manageCustomer:o}=await import("@stacksjs/payments");return await o.createOrGetStripeUser(t,r)},async retrieveStripeUser(t){let{manageCustomer:r}=await import("@stacksjs/payments");return await r.retrieveStripeUser(t)},async defaultPaymentMethod(t){let{managePaymentMethod:r}=await import("@stacksjs/payments");return await r.retrieveDefaultPaymentMethod(t)},async setDefaultPaymentMethod(t,r){let{managePaymentMethod:o}=await import("@stacksjs/payments");return await o.setDefaultPaymentMethod(t,r)},async addPaymentMethod(t,r){let{managePaymentMethod:o}=await import("@stacksjs/payments");return await o.addPaymentMethod(t,r)},async paymentMethods(t,r){let{managePaymentMethod:o}=await import("@stacksjs/payments");return await o.listPaymentMethods(t,r)},async newSubscription(t,r,o,a={}){let{manageSubscription:i}=await import("@stacksjs/payments"),s=await i.create(t,r,o,a),c=s.latest_invoice?.payment_intent;return{subscription:s,paymentIntent:c}},async updateSubscription(t,r,o,a={}){let{manageSubscription:i}=await import("@stacksjs/payments"),s=await i.update(t,r,o,a),c=s.latest_invoice?.payment_intent;return{subscription:s,paymentIntent:c}},async cancelSubscription(t,r,o={}){let{manageSubscription:a}=await import("@stacksjs/payments");return{subscription:await a.cancel(r,o)}},async activeSubscription(t){let{manageSubscription:r}=await import("@stacksjs/payments"),o=await n.selectFrom("subscriptions").where("user_id","=",t.id).where("provider_status","=","active").selectAll().executeTakeFirst();if(o){let a=await r.retrieve(t,o.provider_id||"");return{subscription:o,providerSubscription:a}}return},async checkout(t,r,o={}){let{manageCheckout:a,manageCustomer:i}=await import("@stacksjs/payments"),s={};if(o.enableTax)s.automatic_tax={enabled:!0},delete o.enableTax;if(o.allowPromotions)s.allow_promotion_codes=!0,delete o.allowPromotions;let l={...{mode:"payment",customer:(await i.createOrGetStripeUser(t,{})).id,line_items:r.map((f)=>({price:f.priceId,quantity:f.quantity||1}))},...s,...o};return await a.create(t,l)},async createSetupIntent(t,r={}){let{manageSetupIntent:o}=await import("@stacksjs/payments");return await o.create(t,r)},async subscriptionHistory(t){let{manageInvoice:r}=await import("@stacksjs/payments");return await r.list(t)},async transactionHistory(t){let{manageTransaction:r}=await import("@stacksjs/payments");return await r.list(t)},async connectAccount(t,r={}){let o=r.accountColumn||"stripe_account_id",a=(t._attributes??t)[o];if(!a)return null;let i=await L();try{return await i.accounts.retrieve(a)}catch{return null}},async createConnectAccount(t,r={}){let o=r.accountColumn||"stripe_account_id",a=t._attributes??t,i=a[o],s=await L();if(!i){let{stacksIdempotencyKey:u}=await import("@stacksjs/payments"),c=r.modelTable||e,l=await s.accounts.create({type:r.type??"express",email:r.email??a.email,country:r.country??"US",capabilities:r.capabilities??{card_payments:{requested:!0},transfers:{requested:!0}}},{idempotencyKey:u("connect.account.create",c,a.id)});return i=l.id,await n.updateTable(c).set({[o]:i}).where("id","=",Number(a.id)).execute(),l}return await s.accounts.retrieve(i)},async connectOnboardLink(t,r){let o=r.accountColumn||"stripe_account_id",i=(t._attributes??t)[o];if(!i)throw Error("connectOnboardLink: model has no Stripe Connect account; call createConnectAccount first");return{url:(await(await L()).accountLinks.create({account:i,refresh_url:r.refreshUrl,return_url:r.returnUrl,type:r.type??"account_onboarding"})).url,accountId:i}},async syncConnectStatus(t,r={}){let o=r.accountColumn||"stripe_account_id",a=r.chargesColumn||"charges_enabled",i=r.payoutsColumn||"payouts_enabled",s=t._attributes??t,u=s[o];if(!u)return{chargesEnabled:!1,payoutsEnabled:!1};let l=await(await L()).accounts.retrieve(u),f=!!l.charges_enabled,d=!!l.payouts_enabled,m=r.modelTable||e;return await n.updateTable(m).set({[a]:f,[i]:d}).where("id","=",Number(s.id)).execute(),{chargesEnabled:f,payoutsEnabled:d}},async chargeWithSplit(t,r){let o=await L(),a=r.accountColumn||"stripe_account_id",i=t._attributes??t,s=r.connectAccountId||i[a],u={amount:r.amountCents,currency:r.currency||"usd",automatic_payment_methods:{enabled:!0},metadata:r.metadata};if(s){if(u.transfer_data={destination:s},r.platformFeeCents)u.application_fee_amount=r.platformFeeCents}let{freshIdempotencyKey:c}=await import("@stacksjs/payments");return await o.paymentIntents.create(u,{idempotencyKey:c("payment_intent.create",i.id,r.amountCents)})}}}function L(){let e=globalThis.process?.env?.STRIPE_SECRET_KEY;if(!e)throw Error("Stripe Connect: STRIPE_SECRET_KEY not configured");let n;try{n=Vn("stripe")}catch{throw Error("Stripe Connect is being used but the `stripe` package is not installed. It is an opt-in dependency - run `bun add stripe` to enable Stripe Connect.")}return new n(e,{apiVersion:"2026-06-24.dahlia"})}function at(){return{async generateTwoFactorForModel(e){let{generateTwoFactorSecret:n}=await import("@stacksjs/auth"),t=n();await e.update({two_factor_secret:t})},async verifyTwoFactorCode(e,n){let t=e.get("two_factor_secret");if(typeof t!=="string")return!1;let{verifyTwoFactorCode:r,RateLimiter:o}=await import("@stacksjs/auth"),a=String(e.id??e.get?.("id")??e.get?.("email")??t),i=`2fa:${a}`;if(await o.isRateLimited(i)){let{HttpError:u}=await import("@stacksjs/error-handling");throw new u(429,"Too many verification attempts. Please try again later.")}if(!await r(n,t))return await o.recordFailedAttempt(i),!1;try{let{cache:u}=await import("@stacksjs/cache"),c=`2fa:used:${a}:${n}`;if(await u.has(c))return await o.recordFailedAttempt(i),!1;await u.set(c,"1",90)}catch{}return await o.resetAttempts(i),!0}}}import{mutationCount as Qn,sqlDateTime as zn}from"@stacksjs/database/runtime";import{log as E}from"@stacksjs/logging";var X="deleted_at";function it(e,n="id"){return{async softDelete(t){let r=zn(),o=e.where(n,t);if(typeof o?.update==="function")return await o.update({[X]:r}),!0;return!1},async restore(t){let r=e.where(n,t).withTrashed();if(typeof r?.update==="function")return await r.update({[X]:null}),!0;return!1},async forceDelete(t){let r=e.where(n,t),o=typeof r?.withTrashed==="function"?r.withTrashed():r;if(typeof o?.delete==="function")return Qn(await o.delete())>0;return!1},withTrashed(){return typeof e.query==="function"?e.query():e},onlyTrashed(){let t=typeof e.query==="function"?e.query():e;if(typeof t?.whereNotNull==="function")return t.whereNotNull(X);return t?.where?.(X,"!=",null)??t}}}function st(e){if(e===!0||e==null)return{};if(typeof e==="object"&&!Array.isArray(e)){let n=e;if(Array.isArray(n.cascade)){let t=n.cascade.filter((r)=>typeof r==="string");return t.length?{cascade:t}:{}}return{}}return{}}function Hn(e,n){let t=e.hasMany??[],r=e.hasOne??[],o=t.some((l)=>Ae(l,n,!0)),a=r.some((l)=>Ae(l,n,!1));if(!o&&!a)return E.warn(`[orm] soft-delete cascade: '${n}' is not a declared hasMany/hasOne relation - skipping`),null;let s=(o?t:r).find((l)=>Ae(l,n,o))??null;if(!s)return null;let c=globalThis[s];if(!c)return E.warn(`[orm] soft-delete cascade: model '${s}' is not yet on globalThis - skipping cascade for '${n}'`),null;return{className:s,model:c}}function Ae(e,n,t){let r=e.toLowerCase();if(n===r)return!0;if(t&&n===`${r}s`)return!0;if(t&&r.endsWith("y")&&n===`${r.slice(0,-1)}ies`)return!0;return!1}async function Gn(e,n,t,r,o){try{let a=t.where;if(typeof a!=="function"){E.warn(`[orm] cascade ${o}: child model has no .where()`);return}if(o==="softDelete"){let i=t.softDelete;if(typeof i==="function"){let u=a.call(t,r,n),c=typeof u?.get==="function"?await u.get():Array.isArray(u)?u:[],l=t.primaryKey||"id";for(let f of c){let d=f?.[l];if(d!=null)await i.call(t,d)}return}let s=a.call(t,r,n);if(typeof s?.delete==="function"){E.debug(`[orm] cascade soft-delete: child has no softDeletes trait, hard-deleting from ${String(t.table??"?")}`),await s.delete();return}}else{let i=t.restore;if(typeof i!=="function"){E.debug("[orm] cascade restore: child has no restore() - nothing to do");return}let s=t.withTrashed,c=(typeof s==="function"?s.call(t):t).where?.(r,n),l=typeof c?.get==="function"?await c.get():[],f=t.primaryKey||"id";for(let d of l){let m=d?.[f];if(m!=null)await i.call(t,m)}}}catch(a){if(E.warn(`[orm] soft-delete cascade ${o} on ${e}#${String(n)} failed`,{error:a}),process.env.STACKS_ORM_CASCADE_SWALLOW!=="true")throw a}}async function U(e,n,t,r){let o=n.cascade;if(!o||o.length===0)return;let a=`${e.name.toLowerCase()}_id`;for(let i of o){let s=Hn(e,i);if(!s)continue;await Gn(s.className,t,s.model,a,r)}}import{sqlDateTime as Xn}from"@stacksjs/database/runtime";import{log as Jn}from"@stacksjs/logging";var Yn=[/^password$/i,/^password_hash$/i,/^api_key$/i,/_token$/i,/_secret$/i,/^remember_token$/i],ut=null;async function ct(){if(ut!=null)return ut;try{let e=await import("@stacksjs/router").catch(()=>null);if(!e)return null;let n=e.getCurrentRequest;if(typeof n!=="function")return null;let t=n();return t?.user?.id??t?._user?.id??null}catch{return null}}async function lt(){try{let n=(await import("@stacksjs/router").catch(()=>null))?.getCurrentRequest;if(typeof n!=="function")return null;let t=n();return typeof t?.ip==="function"?t.ip()??null:null}catch{return null}}function dt(e){if(!e||typeof e!=="object")return null;let n={};for(let[t,r]of Object.entries(e)){if(Yn.some((o)=>o.test(t)))continue;n[t]=r}return n}function ft(e,n,t){Jn.warn(`[orm] ${e} row write failed for ${n}: ${t?.message??String(t)}`)}var Zn="activities";function pt(e){if(!e)return null;if(e===!0)return{};if(typeof e!=="object")return null;let n=e;return{logOnly:Array.isArray(n.logOnly)?n.logOnly:void 0,include:Array.isArray(n.include)?n.include:void 0,exclude:Array.isArray(n.exclude)?n.exclude:void 0}}function er(e,n,t=[]){let r=dt(e);if(!r)return null;let o=new Set(t),a=n.logOnly??n.include,i=new Set(n.exclude??[]),s={};for(let[u,c]of Object.entries(r)){if(o.has(u)||i.has(u))continue;if(a&&!a.includes(u))continue;s[u]=c}return s}function tr(e,n,t){return t==null?`${e} was ${n}`:`${e} ${String(t)} was ${n}`}async function nr(e){try{let{db:n}=await import("@stacksjs/database/runtime");await n.insertInto(Zn).values({type:e.type,description:e.description,subject_type:e.subject_type,subject_id:e.subject_id,causer:e.causer,properties:e.properties?JSON.stringify(e.properties):null,ip_address:e.ip_address,user_id:e.user_id,created_at:Xn()}).executeTakeFirst()}catch(n){ft("activity",`${e.subject_type}#${String(e.subject_id)}`,n)}}async function rr(e){let{attributes:n,event:t,modelName:r,options:o,primaryKey:a}=e,i=n?.[a]??null,s=await ct();await nr({type:`${r.toLowerCase()}.${t}`,description:tr(r,t,i),subject_type:r,subject_id:i,properties:er(n,o,e.hidden),causer:s==null?null:`User:${String(s)}`,user_id:s,ip_address:await lt()})}function xe(e){if(!e||typeof e!=="object")return null;let n=e;if(n.attributes&&typeof n.attributes==="object")return{...n.attributes};if(n._attributes&&typeof n._attributes==="object")return{...n._attributes};return{...e}}function mt(e,n,t,r,o=[]){if(n==="Activity")return;let a=e,i=async(f)=>typeof a.find==="function"?xe(await a.find(f)):null,s=async(f,d)=>{await rr({modelName:n,event:f,attributes:d,primaryKey:t,options:r,hidden:o})},u=e.create;if(typeof u==="function")e.create=async function(...f){let d=await u.apply(this,f);return await s("created",xe(d)),d};let c=e.update;if(typeof c==="function")e.update=async function(f,d){let m=await c.call(this,f,d);return await s("updated",xe(m)??await i(f)),m};let l=e.delete;if(typeof l==="function")e.delete=async function(f){let d=await i(f),m=await l.call(this,f);return await s("deleted",d??{[t]:f}),m}}var ee,Mt=new Ot;function M(){return Mt.getStore()?.suppressed===!0}function O(e){return Promise.resolve(Mt.run({suppressed:!0},e))}var Dt=new Ot;function cr(){return Dt.getStore()?.suppressed===!0}function lr(e){return Promise.resolve(Dt.run({suppressed:!0},e))}var Me=Symbol.for("stacks.orm.modelDefinition");class Et extends Error{status=422;errors;constructor(e,n){let t=Object.keys(n).join(", ");super(`${e} validation failed: ${t}`);this.name="ModelValidationError",this.errors=n}}var gt=new Set,dr=4096,yt=Object.create(null),bt=0;function W(e){let n=yt[e];if(n!==void 0)return n;let t=V(e);if(bt<dr)yt[e]=t,bt++;return t}function fr(e,n){let t=typeof e==="string"?e.slice(0,80):String(e),r=`${typeof e}:${t}`;if(gt.has(r))return;gt.add(r);let o=n instanceof Error?n.message:String(n);console.error(`[orm] JSON cast failed to parse value (returning null): ${o} - value preview: ${JSON.stringify(t)}`)}var pr={string:{get:(e)=>e!=null?String(e):null,set:(e)=>e!=null?String(e):null},number:{get:(e)=>e!=null?Number(e):null,set:(e)=>e!=null?Number(e):null},integer:{get:(e)=>e!=null?Math.trunc(Number(e)):null,set:(e)=>e!=null?Math.trunc(Number(e)):null},float:{get:(e)=>e!=null?Number.parseFloat(String(e)):null,set:(e)=>e!=null?Number.parseFloat(String(e)):null},boolean:{get:(e)=>e===1||e==="1"||e===!0||e==="true",set:(e)=>e===!0||e===1||e==="1"||e==="true"?1:0},json:{get:(e)=>{if(e==null)return null;if(typeof e==="string")try{return JSON.parse(e)}catch(n){return fr(e,n),null}return e},set:(e)=>{if(e==null)return null;return typeof e==="string"?e:JSON.stringify(e)}},datetime:{get:(e)=>e?new Date(e):null,set:(e)=>e instanceof Date?e.toISOString():e},date:{get:(e)=>e?new Date(e):null,set:(e)=>e instanceof Date?e.toISOString().split("T")[0]:e},array:{get:(e)=>{if(e==null)return[];if(Array.isArray(e))return e;if(typeof e==="string")try{return JSON.parse(e)}catch{return[]}return[]},set:(e)=>{if(e==null)return null;return Array.isArray(e)?JSON.stringify(e):e}}};function mr(e){return typeof e==="string"?pr[e]:e}var wt=new WeakMap;function Ft(e){let n=Object.keys(e),t=wt.get(e);if(t&&t.length===n.length){let o=!0;for(let a=0;a<n.length;a++){let i=n[a];if(t[a]?.attr!==i||t[a]?.definition!==e[i]){o=!1;break}}if(o)return t}let r=n.map((o)=>{let a=e[o];return{attr:o,definition:a,caster:mr(a)}});return wt.set(e,r),r}function ht(e,n,t){if(!e||typeof e!=="object")return e;let r={...e};for(let{attr:o,caster:a}of Ft(n))if(o in r)r[o]=a[t].call(a,r[o]);return r}function Z(e){return e==="_attributes"||e==="_original"||e==="_definition"||e==="_hasSaved"||e==="_relations"}var kt=Symbol.for("stacks.modelInstanceProxy"),Tt,_t=new WeakMap,gr={tags:{bag:"_taggable",mode:"id"},tagCount:{bag:"_taggable",mode:"id"},addTag:{bag:"_taggable",mode:"id"},activeTags:{bag:"_taggable",mode:"id"},inactiveTags:{bag:"_taggable",mode:"id"},removeTag:{bag:"_taggable",mode:"id"},categories:{bag:"_categorizable",mode:"id"},categoryCount:{bag:"_categorizable",mode:"id"},addCategory:{bag:"_categorizable",mode:"id"},activeCategories:{bag:"_categorizable",mode:"id"},inactiveCategories:{bag:"_categorizable",mode:"id"},removeCategory:{bag:"_categorizable",mode:"id"},comments:{bag:"_commentable",mode:"id"},commentCount:{bag:"_commentable",mode:"id"},addComment:{bag:"_commentable",mode:"id"},approvedComments:{bag:"_commentable",mode:"id"},pendingComments:{bag:"_commentable",mode:"id"},rejectedComments:{bag:"_commentable",mode:"id"},likes:{bag:"_likeable",mode:"id"},likeCount:{bag:"_likeable",mode:"id"},like:{bag:"_likeable",mode:"id"},unlike:{bag:"_likeable",mode:"id"},isLiked:{bag:"_likeable",mode:"id"},createStripeUser:{bag:"_billable",mode:"model"},updateStripeUser:{bag:"_billable",mode:"model"},deleteStripeUser:{bag:"_billable",mode:"model"},createOrGetStripeUser:{bag:"_billable",mode:"model"},retrieveStripeUser:{bag:"_billable",mode:"model"},defaultPaymentMethod:{bag:"_billable",mode:"model"},setDefaultPaymentMethod:{bag:"_billable",mode:"model"},addPaymentMethod:{bag:"_billable",mode:"model"},paymentMethods:{bag:"_billable",mode:"model"},newSubscription:{bag:"_billable",mode:"model"},updateSubscription:{bag:"_billable",mode:"model"},cancelSubscription:{bag:"_billable",mode:"model"},activeSubscription:{bag:"_billable",mode:"model"},checkout:{bag:"_billable",mode:"model"},createSetupIntent:{bag:"_billable",mode:"model"},subscriptionHistory:{bag:"_billable",mode:"model"},transactionHistory:{bag:"_billable",mode:"model"},connectAccount:{bag:"_billable",mode:"model"},createConnectAccount:{bag:"_billable",mode:"model"},connectOnboardLink:{bag:"_billable",mode:"model"},syncConnectStatus:{bag:"_billable",mode:"model"},chargeWithSplit:{bag:"_billable",mode:"model"},generateTwoFactorForModel:{bag:"_twoFactor",mode:"model"},verifyTwoFactorCode:{bag:"_twoFactor",mode:"model"}};function yr(e,n){if(!e||!n)return null;let t=n.split("."),r=e;for(let o of t){if(r==null||typeof r!=="object")return null;let a=r;if("_attributes"in a&&a._attributes&&typeof a._attributes==="object"){let i=a._attributes;if(o in i){r=i[o];continue}}if(o in a){r=a[o];continue}return null}return r??null}function x(e,n){if(!e||typeof e!=="object")return e;let t=e;if(t[kt])return e;let r=t._attributes;if(!r||typeof r!=="object")return e;if(n){for(let{attr:a,caster:i}of Ft(n))if(Object.hasOwn(r,a))r[a]=i.get.call(i,r[a])}let o=n?_t.get(n):Tt;if(!o)if(o={get(a,i,s){let u=a;if(i===kt)return!0;if(i==="saveAsync")return async function(){let l=u._definition,f=l?.set;if(f&&typeof u.isDirty==="function"){for(let[m,p]of Object.entries(f)){if(typeof p!=="function")continue;if(!u.isDirty(m))continue;let y=p(u._attributes),b=y&&typeof y.then==="function"?await y:y;u._attributes[m]=b}let d=l.set;l.set={};try{return u.save()}finally{l.set=d}}return u.save()};if(i==="save")return function(){let l=u._definition,f=l?.set;if(f&&Object.keys(f).length>0&&typeof u.isDirty==="function"){for(let[m,p]of Object.entries(f)){if(typeof p!=="function")continue;if(!u.isDirty(m))continue;let y=p(u._attributes);if(y&&typeof y.then==="function")throw Error(`Setter for "${m}" returned a Promise - use \`saveAsync()\` instead of \`save()\` when a model has async setters.`);u._attributes[m]=y}let d=l.set;l.set={};try{return u.save()}finally{l.set=d}}return u.save()};if(i==="updateAsync")return async function(l){if(l&&typeof l==="object"&&!Array.isArray(l))for(let[f,d]of Object.entries(l))s[f]=d;return s.saveAsync()};if(i==="saveQuietly")return function(){return O(()=>u.save())};if(i==="saveAsyncQuietly")return function(){return O(()=>s.saveAsync())};if(i==="updateQuietly")return function(l){return O(()=>u.update(l))};if(i==="updateAsyncQuietly")return function(l){return O(()=>s.updateAsync(l))};if(i==="deleteQuietly")return function(){return O(()=>u.delete())};if(i==="toSearchableObject")return function(){let d=u._definition?.traits?.useSearch;if(!d)return null;let m=u._attributes;if(!m)return null;if(d===!0){let h={...m};if(m.id!=null)h.id=String(m.id);return h}let p={},y=d.displayable?.length?d.displayable:[...d.searchable??[],...d.filterable??[],...d.sortable??[],"id"],b=d.denormalize??{},w=u._relations;for(let h of y){let k=V(h),S=m[k]??m[h];if(S!==void 0){p[k]=S;continue}let De=b[h]??b[k];if(De){p[k]=yr(w,De);continue}p[k]=void 0}if(m.id!=null)p.id=String(m.id);return p};if(typeof i==="string"&&!Z(i)){let l=u._attributes;if(l&&Object.hasOwn(l,i))return l[i];let f=u._relations;if(f&&Object.hasOwn(f,i)){let m=f[i];if(Array.isArray(m))return m.map((p)=>x(p,n));return m&&typeof m==="object"?x(m,n):m}let d=gr[i];if(d){let y=u._definition?.__traitMethods?.[d.bag]?.[i];if(typeof y==="function")return d.mode==="model"?(...b)=>y(s,...b):(...b)=>y(u.id,...b)}if(l){let m=W(i);if(m!==i&&Object.hasOwn(l,m))return l[m]}}let c=Reflect.get(u,i,u);return typeof c==="function"?c.bind(u):c},set(a,i,s,u){let c=a;if(typeof i==="string"&&!Z(i)){let{_attributes:l,set:f}=c;if(l&&Object.hasOwn(l,i)){if(typeof f==="function")f.call(c,i,s);else l[i]=s;return!0}if(l){let d=W(i);if(d!==i&&Object.hasOwn(l,d)){if(typeof f==="function")f.call(c,d,s);else l[d]=s;return!0}}if(l&&!(i in c)){if(typeof f==="function")f.call(c,i,s);else l[i]=s;return!0}}return Reflect.set(c,i,s,u)},has(a,i){let s=a;if(typeof i==="string"&&!Z(i)){let u=s._attributes;if(u&&Object.hasOwn(u,i))return!0;let c=s._relations;if(c&&Object.hasOwn(c,i))return!0;if(u){let l=W(i);if(l!==i&&Object.hasOwn(u,l))return!0}}return Reflect.has(s,i)},deleteProperty(a,i){let s=a;if(typeof i==="string"&&!Z(i)){let u=s._attributes;if(u&&Object.hasOwn(u,i))return delete u[i],!0}return Reflect.deleteProperty(s,i)},ownKeys(a){let s=a._attributes;return s?Object.keys(s):[]},getOwnPropertyDescriptor(a,i){let s=a;if(typeof i==="string"){let u=s._attributes;if(u&&Object.hasOwn(u,i))return{configurable:!0,enumerable:!0,value:u[i],writable:!0}}return Object.getOwnPropertyDescriptor(s,i)}},n)_t.set(n,o);else Tt=o;return new Proxy(e,o)}var It=Object.assign(Object.create(null),{get:!0,first:!0,last:!0,firstOrFail:!0,find:!0,findOrFail:!0,all:!0,paginate:!0,simplePaginate:!0,cursorPaginate:!0}),br={paginate:sr,simplePaginate:ur,cursorPaginate:ir},Rt=Symbol.for("stacks.queryBuilderProxy");function St(e,n,t){if(It[n]){if(Array.isArray(e))return e.map((o)=>x(o,t));let r=br[n];if(r&&e&&Array.isArray(e.data)){let o=e.data.map((i)=>x(i,t)),a=r({...e,data:o});return Re(a)}if(e&&Array.isArray(e.data))return{...e,data:e.data.map((o)=>x(o,t))};return x(e,t)}if(e&&typeof e==="object"&&typeof e.get==="function")return $t(e,t);return e}function $t(e,n){if(!e||typeof e!=="object")return e;if(e[Rt])return e;return new Proxy(e,{get(t,r,o){if(r===Rt)return!0;let a=Reflect.get(t,r,o);if(typeof a!=="function")return a;let i=String(r);return function(...s){let u=s;if(i==="paginate"||i==="simplePaginate"){let{perPage:l,page:f}=Te(s[0],s[1]);u=[l,f]}else if(i==="cursorPaginate"){let{perPage:l,cursor:f}=_e(s[0],s[1]);u=[l,f,s[2],s[3]]}let c=a.apply(t,u);if(!It[i]&&c===t)return o;if(c&&typeof c.then==="function")return c.then((l)=>St(l,i,n));return St(c,i,n)}}})}function wr(e,n){let t=(i)=>Array.isArray(i)?i.map((s)=>x(s,n)):x(i,n),r=["find","first","last","all","firstOrFail","findOrFail","findMany"];for(let i of r){let s=e[i];if(typeof s!=="function")continue;e[i]=function(...u){let c=s.apply(this,u);if(c&&typeof c.then==="function")return c.then(t);return t(c)}}let o=["create","firstOrCreate","updateOrCreate","make"];for(let i of o){let s=e[i];if(typeof s!=="function")continue;e[i]=function(...u){let c=s.apply(this,u);if(c&&typeof c.then==="function")return c.then(t);return t(c)}}let a=["query","where","orWhere","whereIn","whereNotIn","whereNull","whereNotNull","whereLike","whereBetween","whereNotBetween","orderBy","orderByDesc","select","with","limit","take","skip","latest","oldest"];for(let i of a){let s=e[i];if(typeof s!=="function")continue;e[i]=function(...u){let c=s.apply(this,u);return $t(c,n)}}}class jt extends Error{model;id;constructor(e,n){super(n!=null?`[ORM] ${e} not found for id=${String(n)}`:`[ORM] No matching ${e} row`);this.name="ModelNotFoundError",this.model=e,this.id=n}}class Ce extends Error{model;attribute;reason;constructor(e,n,t){let r=t==="guarded"?`'${n}' is marked guarded`:`'${n}' is not in the fillable allowlist`;super(`[ORM] Mass assignment to ${e} forbidden: ${r}. Use ${e}.forceCreate(...) / .forceUpdate(...) to bypass.`);this.name="MassAssignmentException",this.model=e,this.attribute=n,this.reason=t}}var hr=new Set(["id","created_at","updated_at","deleted_at","uuid"]),At=new WeakMap;function kr(e){let n=At.get(e);if(n)return n;let t=new Set,r=new Set,o=new Set;for(let[i,s]of Object.entries(e)){let u=W(i);if(t.add(u),s?.fillable===!0)r.add(u);if(s?.guarded===!0)o.add(u)}let a={allowed:r.size>0?r:t,guarded:o};return At.set(e,a),a}function K(e,n,t={}){if(t.force)return n;if(!n||typeof n!=="object"||Array.isArray(n))return n;let r=e.attributes;if(!r)return n;let{allowed:o,guarded:a}=kr(r);for(let i in n){if(!Object.hasOwn(n,i))continue;let s=W(i);if(hr.has(s))continue;if(a.has(s))throw new Ce(e.name,i,"guarded");if(s.endsWith("_id"))continue;if(!o.has(s))throw new Ce(e.name,i,"not-fillable")}return n}async function ve(e,n){let t=e.set;if(!t||typeof t!=="object")return n;let r={...n};for(let[o,a]of Object.entries(t)){if(typeof a!=="function"||!(o in r))continue;try{r[o]=await a(r)}catch(i){T.error(`[orm] ${e.name}.set.${o} threw - skipping setter`,i)}}return r}function Tr(e,n){let t=n.primaryKey||"id",r=e.create;function o(c){let l=e.where;if(typeof l!=="function")throw Error(`[ORM] ${n.name}.${c} needs a working where(): the underlying query builder did not expose one`);return l}function a(c){let l=e.find;if(typeof l!=="function")throw Error(`[ORM] ${n.name}.${c} needs a working find(): the underlying query builder did not expose one`);return l}function i(c){let l=e.create;if(typeof l!=="function")throw Error(`[ORM] ${n.name}.${c} cannot create: the underlying query builder did not expose create()`);return l}if(e.update=async function(c,l){if(c==null)throw Error(`[ORM] ${n.name}.update requires an id as the first argument`);if(!l||typeof l!=="object"||Array.isArray(l))throw Error(`[ORM] ${n.name}.update requires a data object as the second argument`);if(Object.keys(l).length===0){T.debug(`[orm] ${n.name}.update called with empty data - short-circuiting and returning current row`);let m=e.find;return typeof m==="function"?await m.call(e,c):null}K(n,l);let f=await ve(n,l);await o("update").call(e,t,c).update(f);let d=e.find;return typeof d==="function"?await d.call(e,c):null},typeof e.forceUpdate!=="function")e.forceUpdate=async function(c,l){if(c==null)throw Error(`[ORM] ${n.name}.forceUpdate requires an id as the first argument`);if(!l||typeof l!=="object"||Array.isArray(l))throw Error(`[ORM] ${n.name}.forceUpdate requires a data object as the second argument`);let f=await ve(n,l);await o("forceUpdate").call(e,t,c).update(f);let d=e.find;return typeof d==="function"?await d.call(e,c):null};if(typeof e.forceCreate!=="function")e.forceCreate=async function(c){if(!c||typeof c!=="object"||Array.isArray(c))throw Error(`[ORM] ${n.name}.forceCreate requires a data object`);let l=e.make;if(typeof l==="function"){let f=await l.call(e);if(f&&typeof f.forceFill==="function"&&typeof f.save==="function")return f.forceFill(c),await f.save()??f}if(typeof r!=="function")throw Error(`[ORM] ${n.name}.forceCreate cannot create: the underlying query builder did not expose create()`);return await r.call(e,c)};if(e.delete=async function(c){if(c==null)throw Error(`[ORM] ${n.name}.delete requires an id as the first argument`);if(!await a("delete").call(e,c))return!1;return await o("delete").call(e,t,c).delete(),!0},typeof e.findOrFail!=="function")e.findOrFail=async function(c){let l=await a("findOrFail").call(e,c);if(l==null)throw new jt(n.name,c);return l};if(typeof e.exists!=="function")e.exists=async function(c){if(c==null)return!1;let l=o("exists").call(e,t,c);if(typeof l.count==="function"){let d=await l.count();return Number(d)>0}let f=e.find;return typeof f==="function"?await f.call(e,c)!=null:!1};if(typeof e.firstOrCreate!=="function")e.firstOrCreate=async function(c,l={}){if(!c||typeof c!=="object"||Array.isArray(c))throw Error(`[ORM] ${n.name}.firstOrCreate requires a where-attrs object`);let f=o("firstOrCreate").call(e,c),d=typeof f.first==="function"?await f.first():await f;if(d)return d;let m={...c,...l};return K(n,m),await i("firstOrCreate").call(e,m)};if(typeof e.updateOrCreate!=="function")e.updateOrCreate=async function(c,l){if(!c||typeof c!=="object"||Array.isArray(c))throw Error(`[ORM] ${n.name}.updateOrCreate requires a where-attrs object`);if(!l||typeof l!=="object"||Array.isArray(l))throw Error(`[ORM] ${n.name}.updateOrCreate requires a values object`);let f=o("updateOrCreate").call(e,c),d=typeof f.first==="function"?await f.first():await f;if(d){K(n,l);let p=d[t];await o("updateOrCreate").call(e,t,p).update(l);let y=e.find;return typeof y==="function"?await y.call(e,p):{...d,...l}}let m={...c,...l};return K(n,m),await i("updateOrCreate").call(e,m)};if(typeof e.count!=="function")e.count=async function(){let c=e;if(typeof c.query==="function"){let d=c.query();if(typeof d?.count==="function"){let m=await d.count();return Number(m)||0}}let{all:l,get:f}=e;if(typeof l==="function")return(await l.call(e)||[]).length;if(typeof f==="function")return(await f.call(e)||[]).length;return 0};if(typeof e.pluck!=="function")e.pluck=async function(c){if(!c||typeof c!=="string")throw Error(`[ORM] ${n.name}.pluck requires a column name`);let l=e.all;return((typeof l==="function"?await l.call(e):[])||[]).map((d)=>d?.[c])};if(typeof e.whereIn!=="function")e.whereIn=async function(c,l){if(!c||typeof c!=="string")throw Error(`[ORM] ${n.name}.whereIn requires a column name`);if(!Array.isArray(l))throw Error(`[ORM] ${n.name}.whereIn requires an array of values`);if(l.length===0)return[];let f=e.where;if(typeof f!=="function")return[];let d=f.call(e,c,"in",l);if(d&&typeof d.get==="function")return await d.get();return await d};let s=[["latest","desc"],["oldest","asc"]];for(let[c,l]of s)if(typeof e[c]!=="function")e[c]=async function(f="created_at"){let d=e,m=typeof d.query==="function"?d.query():d;if(typeof m?.orderBy==="function"){let w=m.orderBy(f,l);if(typeof w.first==="function")return await w.first();if(typeof w.get==="function")return(await w.get())?.[0]??null}let p=e.all;if(typeof p!=="function")return null;return[...await p.call(e)||[]].sort((w,h)=>{let k=w?.[f],S=h?.[f];if(k===S)return 0;return(k>S?1:-1)*(l==="desc"?-1:1)})[0]??null};let u=Lt(n.traits?.useSearch,n);if(u){let c=u.index??n.table??V(`${n.name}s`);if(typeof e.search!=="function")e.search=function(l,f){return Sr(e,c,l,f,u.searchable)};if(typeof e.makeAllSearchable!=="function")e.makeAllSearchable=async function(l=500){let f=e.all;if(typeof f!=="function")throw Error(`[ORM] ${n.name}.makeAllSearchable cannot run: the underlying query builder did not expose all()`);let{useSearchEngine:d}=await import("@stacksjs/search-engine"),m=d(),p=0,y=e.query;if(typeof y==="function")try{let h=y.call(e);if(h&&typeof h.chunk==="function")return await h.chunk(l,async(k)=>{let S=await Oe(k,u);if(S.length>0)await m.addDocuments(c,S);p+=S.length}),p}catch{}let b=await f.call(e)||[],w=await Oe(b,u);if(w.length>0)await m.addDocuments(c,w);return w.length};if(typeof e.removeAllFromSearch!=="function")e.removeAllFromSearch=async function(){let{useSearchEngine:l}=await import("@stacksjs/search-engine"),f=l();if(typeof f.deleteAllDocuments==="function"){await f.deleteAllDocuments(c);return}let d=e.all,m=typeof d==="function"?await d.call(e)||[]:[],p=l();for(let y of m){let b=y?.id??y?._attributes?.id;if(b!=null)await p.deleteDocument(c,Number(b))}}}}async function Oe(e,n){if(e.length===0)return[];if(typeof n.shapeMany==="function"){let r=await n.shapeMany(e);if(!Array.isArray(r)||r.length!==e.length)throw TypeError(`[orm/search] shapeMany returned ${Array.isArray(r)?r.length:typeof r} documents for ${e.length} rows. It must return one document per row, in order, or documents are indexed under the wrong ids.`);return r.filter(Boolean)}return(await Promise.all(e.map((r)=>Rr(r,n)))).filter(Boolean)}function Bt(e){let n=new Set,t=e.attributes??{};for(let[r,o]of Object.entries(t))if(o?.hidden)n.add(r);return n}function _r(e,n){if(!e||n.size===0)return e;let t={};for(let[r,o]of Object.entries(e))if(!n.has(r))t[r]=o;return t}async function Rr(e,n){if(typeof n.shape==="function")try{return await n.shape(e)}catch{return}let t=e?.toSearchableObject?.();if(t!==void 0)return t;return _r(e?._attributes??(typeof e?.toJSON==="function"?e.toJSON():null),n.hidden??new Set)}function Sr(e,n,t,r,o){let a=o&&o.length>0?{query_by:[...o].join(",")}:{},i={q:t,...a,...r??{}},s={with(u){return i={...i,...u},s},where(u){return i={...i,filter:u},s},async get(){let{useSearchEngine:u}=await import("@stacksjs/search-engine");return(await u().search(n,i))?.hits??[]},async paginate(u,c=1){let{useSearchEngine:l}=await import("@stacksjs/search-engine"),d=await l().search(n,{...i,limit:u,offset:(c-1)*u});return{hits:d.hits??[],total:Number(d.estimatedTotalHits??d.nbHits??d.total??0),page:c,perPage:u}},async raw(){let{useSearchEngine:u}=await import("@stacksjs/search-engine");return await u().search(n,i)}};return s}function Nt(e){let n=V(e);return n===e?[e]:[e,n]}async function Pe(e,n){if(!e||typeof e!=="object")return;let t=e._attributes??e;for(let r of n)for(let o of Nt(r)){if(!(o in t))continue;let a=t[o];if(!I(a))continue;t[o]=await ae(a)}}function Ar(e,n){if(n.length===0)return;let t=async(s)=>{if(Array.isArray(s)){for(let u of s)await Pe(u,n);return s}if(s&&typeof s==="object"&&Array.isArray(s.data)){for(let u of s.data)await Pe(u,n);return s}if(s)await Pe(s,n);return s},r=["find","first","last","all","firstOrFail","findOrFail","findMany"];for(let s of r){let u=e[s];if(typeof u!=="function")continue;e[s]=async function(...c){let l=await u.apply(this,c);return await t(l)}}let o=["create","firstOrCreate","updateOrCreate","make"];for(let s of o){let u=e[s];if(typeof u!=="function")continue;e[s]=async function(...c){let l=await u.apply(this,c);return await t(l)}}for(let s of["update","forceUpdate"]){let u=e[s];if(typeof u!=="function")continue;e[s]=async function(c,l){let f=await u.call(this,c,l);return await t(f)}}let a=["first","firstOrFail","get","all","find","findOrFail","last","paginate","simplePaginate"],i=(s)=>{if(!s||typeof s!=="object")return s;let u=s;if(u.__stacksEncryptedReads)return s;for(let c of a){let l=u[c];if(typeof l!=="function")continue;u[c]=async function(...f){return await t(await l.apply(this,f))}}for(let c of["where","whereIn","whereNull","whereNotNull","orWhere","orderBy","orderByDesc","limit","offset","with"]){let l=u[c];if(typeof l!=="function")continue;u[c]=function(...f){return i(l.apply(this,f))}}return Object.defineProperty(u,"__stacksEncryptedReads",{value:!0,enumerable:!1}),s};for(let s of["where","whereIn","whereNull","whereNotNull","orderBy","orderByDesc","limit","query"]){let u=e[s];if(typeof u!=="function")continue;e[s]=function(...c){return i(u.apply(this,c))}}}function xr(e,n){if(n.length===0)return;let t=async(o)=>{if(!o||typeof o!=="object"||Array.isArray(o))return o;let a={...o};for(let i of n)for(let s of Nt(i))if(s in a)a[s]=await oe(a[s]);return a},r=["create","firstOrCreate","updateOrCreate","forceCreate"];for(let o of r){let a=e[o];if(typeof a!=="function")continue;e[o]=async function(...i){if(i[0]=await t(i[0]),i[1])i[1]=await t(i[1]);return await a.apply(this,i)}}for(let o of["update","forceUpdate"]){let a=e[o];if(typeof a!=="function")continue;e[o]=async function(i,s){let u=await t(s);return await a.call(this,i,u)}}}function Pr(e,n){let t=e.create;if(typeof t==="function")e.create=async function(r,...o){K(n,r);let a=await ve(n,r);return await t.call(this,a,...o)};for(let r of["firstOrCreate","updateOrCreate"]){let o=e[r];if(typeof o!=="function")continue}}function Cr(e,n){if(!Xe(n))return;let t=String(n?.name??e.name??"Model"),r=(i,s)=>{if(cr())return;if(!i||typeof i!=="object"||Array.isArray(i))return;let u=Ze(i,n,s);if(!u.valid)throw new Et(t,u.errors)},o=e.create;if(typeof o==="function")e.create=async function(i,...s){return r(i,"creating"),await o.call(this,i,...s)};let a=e.update;if(typeof a==="function")e.update=async function(i,s,...u){return r(s,"updating"),await a.call(this,i,s,...u)}}function vr(e,n){let t=["create","firstOrCreate","updateOrCreate"];for(let o of t){let a=e[o];if(typeof a==="function")e[o]=async function(...i){if(T.debug(`[orm] ${o.charAt(0).toUpperCase()+o.slice(1)} ${String(e.name||"unknown")}`,i[0]),i[0]&&typeof i[0]==="object"&&!Array.isArray(i[0]))i[0]=ht(i[0],n,"set");return await a.apply(this,i)}}let r=e.update;if(typeof r==="function")e.update=async function(o,a){let i=a&&typeof a==="object"&&!Array.isArray(a)?ht(a,n,"set"):a;return await r.call(this,o,i)}}var xt=new Set(["useUuid","useTimestamps","timestampable","useSoftDeletes","softDeletable","useApi","useAuth","authenticatable","useSearch","searchable","useSeeder","seedable","useSocials","billable","observe","useAudit","useActivityLog","prunable","sharding","likeable","taggable","categorizable","commentable","commentables","broadcastOn","broadcastWith"]);function qt(e){T.debug(`[orm] Defining model: ${e.name} (table: ${e.table})`);for(let y of Object.keys(e.traits??{}))if(!xt.has(y))T.warn(`[orm] Model '${e.name}' declares an unknown trait '${y}'. It does nothing. Known traits: ${[...xt].sort().join(", ")}.`);let n=Or(e),t=Dr(e),r=Mr(n,t),o=Er(e);e.__traitMethods=o;let a=e.traits;if((a?.useAuth||a?.authenticatable)&&e.name!=="PersonalAccessToken"){let y=e.morphMany;if(!y||!("tokenable"in y))e.morphMany={...y??{},tokenable:"PersonalAccessToken"}}let i=r?{...e,hooks:{...e.hooks,...r}}:e,u=or(i);if(wr(u,e.casts),Tr(u,i),Pr(u,i),e.casts&&Object.keys(e.casts).length>0)vr(u,e.casts);let c=ie(e);if(c.length>0)xr(u,c),Ar(u,c);let l=e.traits?.useSoftDeletes;if(l)Fr(u,i,l);let f=e.traits?.useAudit;if(f){let y=Le(f);Ue(u,e.name,e.primaryKey||"id",y)}let d=pt(e.traits?.useActivityLog);if(d)mt(u,e.name,e.primaryKey||"id",d,[...Bt(e)]);Cr(u,i);let m=u;m.withoutValidation=function(y){return lr(y)},m.withoutEvents=function(y){return O(y)};for(let y of["create","update","firstOrCreate","updateOrCreate","forceCreate","forceUpdate","delete","forceDelete","softDelete","restore"]){let b=u[y];if(typeof b!=="function")continue;let w=`${y}Quietly`;if(typeof u[w]==="function")continue;u[w]=function(...h){return O(()=>b.apply(u,h))}}let p=Object.assign(u,o,{...e,getDefinition:()=>e,_isStacksModel:!0});return ar(e.name,p),Object.defineProperty(p,Me,{value:e,enumerable:!1,configurable:!0}),p}function Or(e){let n=e.traits?.observe;if(!n)return;let t=e.name.toLowerCase(),r=(d)=>{let m=d?.attributes;if(!m||typeof m!=="object")return d;let p=e.primaryKey||"id",y={...m};if(y[p]===void 0&&d[p]!==void 0)y[p]=d[p];return y},o=async(d,m)=>{if(M())return;try{let{dispatch:p}=ee??=await import("@stacksjs/events");await p(d,m)}catch(p){if(p&&typeof p==="object"&&"code"in p&&p.code==="MODULE_NOT_FOUND")return;if(console.error(`[ORM] Event '${d}' handler error:`,p),process.env.STACKS_ORM_EVENT_ERRORS!=="swallow")throw p}},a=e.traits?.broadcastOn,i=e.traits?.broadcastWith,s=typeof a==="function"&&typeof i==="function",u=async(d,m)=>{if(!s)return;if(M())return;try{let p=a(m),y=Array.isArray(p)?p:[p],b=i(m),h=(await import("@stacksjs/realtime").catch(()=>null))?.broadcast;if(typeof h!=="function")return;for(let k of y){if(typeof k!=="string"||k.length===0)continue;await h(k,d,b)}}catch(p){if(p&&typeof p==="object"&&"code"in p&&p.code==="MODULE_NOT_FOUND")return;if(console.error(`[ORM] Broadcast '${d}' handler error:`,p),process.env.STACKS_ORM_BROADCAST_ERRORS==="throw")throw p}},c=async(d,m)=>{if(M())return!0;let p;try{p=ee??=await import("@stacksjs/events");let{dispatchAndCollect:y}=p,b=await y(d,m);if(b.some((h)=>h.ok&&h.value===!1))return!1;let w=b.find((h)=>!h.ok);if(w&&!w.ok)throw w.error}catch(y){if(!p&&y&&typeof y==="object"&&"code"in y&&y.code==="MODULE_NOT_FOUND")return!0;if(console.error(`[ORM] Before-event '${d}' handler error:`,y),process.env.STACKS_ORM_EVENT_ERRORS!=="swallow")throw y}return!0},l=n===!0?["create","update","delete"]:Array.isArray(n)?n:[],f={};if(l.includes("create"))f.beforeCreate=async(d)=>{if(T.debug(`[orm] Create ${t}`,d),!await c(`${t}:saving`,d))throw Error(`[ORM] ${t}:saving event cancelled the operation`);if(!await c(`${t}:creating`,d))throw Error(`[ORM] ${t}:creating event cancelled the operation`)},f.afterCreate=async(d)=>{let m=r(d);await o(`${t}:created`,m),await o(`${t}:saved`,m),await u(`${t}:created`,d)};if(l.includes("update"))f.beforeUpdate=async(d)=>{if(T.debug(`[orm] Update ${t}#${d?.id??"unknown"}`,d),!await c(`${t}:saving`,d))throw Error(`[ORM] ${t}:saving event cancelled the operation`);if(!await c(`${t}:updating`,d))throw Error(`[ORM] ${t}:updating event cancelled the operation`)},f.afterUpdate=async(d)=>{let m=r(d);await o(`${t}:updated`,m),await o(`${t}:saved`,m),await u(`${t}:updated`,d)};if(l.includes("delete"))f.beforeDelete=async(d)=>{if(T.debug(`[orm] Delete ${t}#${d?.id??"unknown"}`),!await c(`${t}:deleting`,d))throw Error(`[ORM] ${t}:deleting event cancelled the operation`)},f.afterDelete=async(d)=>{await o(`${t}:deleted`,r(d)),await u(`${t}:deleted`,d)};return f}function Mr(...e){let n={},t=new Set;for(let r of e){if(!r)continue;for(let o of Object.keys(r))t.add(o)}for(let r of t){let o=e.map((a)=>a?.[r]).filter((a)=>typeof a==="function");if(!o.length)continue;n[r]=async(...a)=>{for(let i of o)await i(...a)}}return Object.keys(n).length?n:void 0}function Lt(e,n){if(!e)return null;let t=e===!0?{}:typeof e==="object"?{...e}:null;if(!t)return null;if(n)t.hidden=Bt(n);return t}function Dr(e){let n=Lt(e.traits?.useSearch,e);if(!n)return;let t=n,r=t.index??e.table??V(`${e.name}s`);async function o(s){if(typeof t.shapeMany==="function")try{let[l]=await Oe([s],t);return l}catch(l){T.warn(`[orm/search] shapeMany() threw for ${e.name}: ${l.message}`);return}if(typeof t.shape==="function")try{return await t.shape(s)}catch(l){T.warn(`[orm/search] shape() threw for ${e.name}: ${l.message}`);return}let c=x(s).toSearchableObject?.();if(c!==void 0)return c;return s?._attributes??(typeof s?.toJSON==="function"?s.toJSON():null)}let a=async(s)=>{if(M())return;let u=await o(s);if(!u)return;if(n.queueable){try{let{Jobs:c}=await import("@stacksjs/queue");await c.dispatch("SyncSearchIndexJob",{index:r,op:"upsert",doc:u})}catch(c){T.warn(`[orm/search] queue dispatch failed for ${e.name}; falling back to inline: ${c.message}`),await Ct(r,u,e.name)}return}await Ct(r,u,e.name)};return{afterCreate:a,afterUpdate:a,afterDelete:async(s)=>{if(M())return;let u=s?.id??s?._attributes?.id;if(u==null)return;if(n.queueable){try{let{Jobs:c}=await import("@stacksjs/queue");await c.dispatch("SyncSearchIndexJob",{index:r,op:"delete",id:Number(u)})}catch(c){T.warn(`[orm/search] queue dispatch failed for ${e.name}#${u}; falling back to inline: ${c.message}`),await vt(r,Number(u),e.name)}return}await vt(r,Number(u),e.name)}}}var Pt=new Map;function Ut(e,n){let t=Pt.get(e)??0;if(Pt.set(e,t+1),t===0)T.warn(`[orm/search] ${n}`);else if(t===9)T.warn(`[orm/search] ${e} is still failing; further identical warnings suppressed for this process.`)}async function Ct(e,n,t){try{let{useSearchEngine:r}=await import("@stacksjs/search-engine");await r().addDocument(e,n)}catch(r){Ut(`index:${t}`,`Failed to index ${t}: ${r.message}`)}}async function vt(e,n,t){try{let{useSearchEngine:r}=await import("@stacksjs/search-engine");await r().deleteDocument(e,n)}catch(r){Ut(`remove:${t}`,`Failed to remove ${t}#${n}: ${r.message}`)}}function Er(e){let n={},{table:t,traits:r}=e;if(!r)return n;if(r.taggable)n._taggable=pe(t);if(r.categorizable)n._categorizable=me(t);if(r.commentable)n._commentable=de(t);if(r.billable)n._billable=ot(t);if(r.likeable){let a=typeof r.likeable==="object"?r.likeable:void 0;n._likeable=ge(t,a)}let o=r.useAuth||r.authenticatable;if(typeof o==="object"&&o&&"useTwoFactor"in o&&o.useTwoFactor)n._twoFactor=at();return n}function Fr(e,n,t){let r=it(e,n.primaryKey||"id"),o=st(t),a=n,i=n.name.toLowerCase(),s=n.traits?.observe!=null&&n.traits?.observe!==!1,u=async(m)=>{if(!s||M())return!0;try{let{dispatchAsync:p}=ee??=await import("@stacksjs/events"),y=await p(`${i}:restoring`,{id:m});if(Array.isArray(y)&&y.some((b)=>b===!1))return!1}catch(p){if(p?.code!=="MODULE_NOT_FOUND")console.error(`[ORM] Before-event '${i}:restoring' handler error:`,p)}return!0},c=async(m)=>{if(!s||M())return;try{let{dispatch:p}=ee??=await import("@stacksjs/events");await p(`${i}:restored`,{id:m})}catch(p){if(p?.code!=="MODULE_NOT_FOUND")console.error(`[ORM] Event '${i}:restored' handler error:`,p)}},l=process.env.STACKS_ORM_CASCADE_SWALLOW!=="true",f=async(m)=>{if(!o.cascade?.length||!l){let y=await r.softDelete(m);if(y&&o.cascade?.length)await U(a,o,m,"softDelete");return y}let{db:p}=await import("@stacksjs/database/runtime");return await p.transaction(async()=>{let y=await r.softDelete(m);if(y)await U(a,o,m,"softDelete");return y})},d=async(m)=>{if(!await u(m))return!1;if(!o.cascade?.length||!l){let w=await r.restore(m);if(w){if(o.cascade?.length)await U(a,o,m,"restore");await c(m)}return w}let{db:y}=await import("@stacksjs/database/runtime"),b=await y.transaction(async()=>{let w=await r.restore(m);if(w)await U(a,o,m,"restore");return w});if(b)await c(m);return b};e.softDelete=f,e.restore=d,e.forceDelete=r.forceDelete,e.withTrashed=r.withTrashed,e.onlyTrashed=r.onlyTrashed,e.delete=f}function Ir(e){if(e==null)return e;if(Array.isArray(e))return e.map((t)=>Ir(t));if(typeof e!=="object")return e;let n=e;if(typeof n.toJSON==="function")return n.toJSON();if(n._attributes&&typeof n._attributes==="object")return n._attributes;return e}var $r=["belongsTo","hasOne","hasMany","belongsToMany","morphMany","morphOne"],jr=["traits","dashboard"];function Br(e){let n=e?.[Me];if(n&&typeof n==="object")return n;if(e&&typeof e==="object"&&"name"in e&&"attributes"in e)return e;throw TypeError("extendModel() expects a model created by defineModel(), or a model definition. Import the framework model itself rather than its table name.")}function Nr(e,n){let t=Array.isArray(e)?e:[],r=Array.isArray(n)?n:[];if(!t.length&&!r.length)return;return[...new Set([...t,...r])]}function qr(e){if(!e)return 0;return Object.values(e).reduce((n,t)=>{let r=Number(t?.order);return Number.isFinite(r)&&r>n?r:n},0)}function Lr(e,n){let t={...e,...n},r=e.attributes??{},o=n.attributes??{};if(n.attributes){let a=qr(r),i=Object.fromEntries(Object.entries(o).map(([s,u])=>{let c=!(s in r),l=Number.isFinite(Number(u?.order));if(c&&!l)return[s,{...u,order:++a}];return[s,u]}));t.attributes={...r,...i}}for(let a of $r){let i=Nr(e[a],n[a]);if(i)t[a]=i}for(let a of jr){let i=e[a],s=n[a];if(i&&s&&typeof i==="object"&&typeof s==="object")t[a]={...i,...s}}return t}function Bs(e,n){return qt(Lr(Br(e),n))}import Gr from"process";import{log as Jr}from"@stacksjs/logging";import{path as _}from"@stacksjs/path";import{fs as Q}from"@stacksjs/storage";import{Database as Ur}from"bun:sqlite";import{existsSync as Kr,readdirSync as Wr,readFileSync as Vr}from"fs";function Qr(e){return e.startsWith("sqlite_")||e.startsWith("_qb_tmp_")}function zr(e,n){let t=e.toUpperCase();if(t.includes("BOOL"))return n==="postgres"?"boolean":"number";if(t.includes("DATE")||t.includes("TIME"))return"string";if(t.includes("INT"))return"number";if(t.includes("CHAR")||t.includes("CLOB")||t.includes("TEXT"))return"string";if(t.includes("REAL")||t.includes("FLOA")||t.includes("DOUB")||t.includes("NUMERIC")||t.includes("DEC"))return"number";if(t.includes("BLOB"))return"Uint8Array";return"unknown"}function Hr(e,n){try{return e.exec(n),{ok:!0}}catch(t){if(/CREATE\s+TRIGGER/i.test(n))return{ok:!1,error:t.message};let r=0;for(let o of n.split(/;\s*$/m)){if(!o.trim())continue;try{e.exec(o),r++}catch{}}return r>0?{ok:!0}:{ok:!1,error:t.message}}}function Kt(e,n="sqlite"){let t=[];if(!Kr(e))return{tables:[],errors:t};let r;try{r=Wr(e).filter((a)=>a.endsWith(".sql")).sort()}catch(a){return{tables:[],errors:[{file:e,error:a.message}]}}let o=new Ur(":memory:");try{for(let s of r){let u=`${e}/${s}`,c;try{c=Vr(u,"utf-8")}catch(f){t.push({file:u,error:f.message});continue}let l=Hr(o,c);if(!l.ok)t.push({file:u,error:l.error??"could not be applied"})}let a=o.query("SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name").all().map((s)=>s.name).filter((s)=>!Qr(s)),i=[];for(let s of a){let u=o.query(`PRAGMA table_info("${s.replace(/"/g,'""')}")`).all();if(u.length===0)continue;let c={};for(let l of u){let f=zr(l.type??"",n),d=l.notnull===0&&l.pk===0;c[l.name]=d&&f!=="unknown"?`${f} | null`:f}i.push({table:s,columns:c})}return{tables:i,errors:t}}finally{o.close()}}function Yr(e){if(e)return e;let n=String(Gr.env.DB_CONNECTION??"").toLowerCase();return n==="postgres"||n==="mysql"?n:"sqlite"}function te(e){return e==="postgres"?"boolean":"number"}function P(e){return e.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").toLowerCase()}function Xr(e,n){let t=e.default;if(typeof t==="boolean")return te(n);if(typeof t==="number")return"number";if(typeof t==="string")return"string";return"unknown"}function Zr(e){let n=e.validation;if(!n||typeof n!=="object")return null;let t=n.rule;return t&&typeof t==="object"?t:null}function eo(e){if(!e||String(e.name??"")!=="enum")return null;let t=(Array.isArray(e.allowedValues)?e.allowedValues:[]).filter((r)=>typeof r==="string"||typeof r==="number").map((r)=>typeof r==="number"?String(r):JSON.stringify(r));return t.length>0?t.join(" | "):null}function to(e,n){let t=Zr(e),r=eo(t);if(r!==null)return e.nullable===!0?`${r} | null`:r;let o=typeof e.type==="string"?e.type.toLowerCase():String(t?.name??"").toLowerCase(),a=(()=>{switch(o){case"string":case"text":case"longtext":case"mediumtext":case"tinytext":case"char":case"varchar":case"enum":case"uuid":case"date":case"datetime":case"timestamp":case"timestamptz":case"password":case"time":case"year":return"string";case"number":case"integer":case"int":case"tinyint":case"smallint":case"mediumint":case"float":case"double":case"decimal":case"numeric":return"number";case"bigint":return"number | bigint";case"boolean":case"bool":return te(n);case"json":case"jsonb":return"unknown";case"binary":case"blob":case"bytea":return"Uint8Array";case"unix":return"number";case"array":return"unknown[]";case"object":return"Record<string, unknown>";default:return Xr(e,n)}})();return e.nullable===!0?`${a} | null`:a}function no(e){let n={},t=e.belongsTo;if(!t)return n;let r=Array.isArray(t)?t:Object.values(t);for(let o of r){if(typeof o==="string"){n[`${P(o)}_id`]="number";continue}if(o&&typeof o==="object"){let a=o;if(typeof a.foreignKey==="string"){n[a.foreignKey]="number";continue}if(typeof a.model==="string")n[`${P(a.model)}_id`]="number"}}return n}function ro(e,n){let[t,r]=[P(e),P(n)].sort();return`${t}_${r}`}function oo(e,n){let t=e.default,r=typeof t==="string"?"string":typeof t==="number"?"number":typeof t==="boolean"?te(n):t instanceof Date?"string":"unknown";return e.nullable?`${r} | null`:r}function ao(e,n,t){let r=n.belongsToMany;if(!r)return[];let o=[],a=Array.isArray(r)?r:Object.values(r);for(let i of a){let s,u,c,l,f={},d=!0;if(typeof i==="string")s=i;else if(i&&typeof i==="object"&&"model"in i){let w=i;if(s=w.model,"pivotTable"in w||"firstForeignKey"in w||"secondForeignKey"in w)u=w.pivotTable,c=w.firstForeignKey,l=w.secondForeignKey;else{let h=i;u=h.table,c=h.foreignKey,l=h.relatedKey,f=h.pivot?.columns??{},d=Boolean(h.pivot?.timestamps)}}else continue;let m=u??ro(e,s),p=c??`${P(e)}_id`,y=l??`${P(s)}_id`,b={id:"number",[p]:"number",[y]:"number"};for(let[w,h]of Object.entries(f))b[w]=oo(h,t);if(d)b.created_at="string",b.updated_at="string | null";o.push({table:m,columns:b})}return o}function io(e){return{email_verified_at:"string | null",password_changed_at:"string | null",two_factor_secret:"string | null",two_factor_enabled:`${te(e)} | null`,two_factor_last_used_step:"number | null",stripe_id:"string | null"}}function so(e,n){let t={id:"number"},r=e.traits??{};if(r.useUuid)t.uuid="string";if((r.useTimestamps??r.timestampable)!==!1)t.created_at="string",t.updated_at="string | null";if(r.useSoftDeletes??r.softDeletable)t.deleted_at="string | null";if((e.table??"")==="users"||e.name==="User")Object.assign(t,io(n));return t}function uo(e,n){let t={},r=e.attributes??{};for(let[o,a]of Object.entries(r))t[P(o)]=to(a,n);return t}function Wt(e,n,t=2){let r=" ".repeat(t),o=" ".repeat(t+1),a=Object.entries(n).map(([s,u])=>`${o}${s}: ${u}`).join(`
|
|
3
|
-
`),
|
|
2
|
+
var Xt=import.meta.require;import"@stacksjs/validation";import{log as oe}from"@stacksjs/cli";import{db as Ie,mutationCount as $e}from"@stacksjs/database/runtime";async function Zt(e,n={}){let{olderThanDays:t=30,column:r="created_at",query:o}=n;try{if(o){let u=Ie.deleteFrom(e);u=o(u);let c=$e(await u.execute());return oe.info(`Pruned ${c} records from ${e}`),c}let i=new Date;i.setDate(i.getDate()-t);let a=await Ie.deleteFrom(e).where(r,"<",i.toISOString()).execute(),s=$e(a);return oe.info(`Pruned ${s} records from ${e} older than ${t} days`),s}catch(i){throw oe.error(`Failed to prune ${e}:`,i),i}}async function ga(e,n={}){return Zt(e,n)}function ya(e){if(!e?.prunable)return null;if(typeof e.prunable==="boolean")return{olderThanDays:30,column:"created_at"};return e.prunable}import{createCipheriv as en,createDecipheriv as tn,createHash as nn,randomBytes as rn}from"crypto";import{log as H}from"@stacksjs/logging";var je="enc:",Be="aes-256-gcm",on=12,z=null;async function Ne(){if(z)return z;let e=process.env.APP_KEY;if(!e)try{e=(await import("@stacksjs/config").catch(()=>null))?.config?.app?.key}catch{}if(!e)return null;return z=nn("sha256").update(e).digest(),z}function I(e){return typeof e==="string"&&e.startsWith(je)}async function ie(e){if(e==null)return e;if(I(e))return e;if(typeof e!=="string")return e;let n=await Ne();if(!n)return H.warn("[orm] encrypted attribute: APP_KEY not set - storing value in plaintext"),e;let t=rn(on),r=en(Be,n,t),o=Buffer.concat([r.update(e,"utf8"),r.final()]),i=r.getAuthTag();return`${je}${t.toString("base64")}:${i.toString("base64")}:${o.toString("base64")}`}async function ae(e){if(e==null)return e;if(typeof e!=="string")return e;if(!I(e))return e;try{let n=await Ne();if(!n)return H.warn("[orm] encrypted attribute: APP_KEY not set - cannot decrypt"),null;let[,t,r,o]=e.split(":");if(!t||!r||!o)return H.warn("[orm] encrypted attribute: malformed envelope, returning null"),null;let i=Buffer.from(t,"base64"),a=Buffer.from(r,"base64"),s=Buffer.from(o,"base64"),u=tn(Be,n,i);return u.setAuthTag(a),Buffer.concat([u.update(s),u.final()]).toString("utf8")}catch(n){return H.warn("[orm] encrypted attribute: decrypt failed (key rotation? corrupted ciphertext?)",{error:n}),null}}function se(e){let n=e.attributes;if(!n||typeof n!=="object")return[];let t=[];for(let[r,o]of Object.entries(n))if(o&&typeof o==="object"&&o.encrypted===!0)t.push(r);return t}import{sqlDateTime as an}from"@stacksjs/database/runtime";import{log as B}from"@stacksjs/logging";var sn=[/^password$/i,/^password_hash$/i,/^api_key$/i,/_token$/i,/_secret$/i,/^remember_token$/i],Le="model_audits",le=null;function un(e){le=e}async function ue(){if(le!=null)return le;try{let e=await import("@stacksjs/router").catch(()=>null);if(!e)return null;let n=e.getCurrentRequest;if(typeof n!=="function")return null;let t=n();if(!t)return null;return(t.user??t._user)?.id??null}catch{return null}}function G(e){if(!e||typeof e!=="object")return null;let n={};for(let[t,r]of Object.entries(e)){if(sn.some((o)=>o.test(t)))continue;n[t]=r}return n}function j(e){if(!e||typeof e!=="object")return null;let n=e;if(n._attributes&&typeof n._attributes==="object")return{...n._attributes};return{...e}}function cn(e,n){if(!e||!n)return{old:e,next:n};let t={},r={},o=new Set([...Object.keys(e),...Object.keys(n)]);for(let i of o)if(e[i]!==n[i])t[i]=e[i],r[i]=n[i];return{old:t,next:r}}async function ce(e,n=!1){try{let{db:t}=await import("@stacksjs/database/runtime");await t.insertInto(Le).values({auditable_type:e.auditable_type,auditable_id:e.auditable_id,event:e.event,old_values:e.old_values?JSON.stringify(e.old_values):null,new_values:e.new_values?JSON.stringify(e.new_values):null,user_id:e.user_id,created_at:an()}).executeTakeFirst()}catch(t){if(B.warn(`[orm] audit row write failed for ${e.auditable_type}#${String(e.auditable_id)} (${e.event})`,{error:t}),n)throw t}}function Ue(e){return{async audits(n){try{let{db:t}=await import("@stacksjs/database/runtime");return(await t.selectFrom(Le).selectAll().where("auditable_type","=",e).where("auditable_id","=",n).orderBy("created_at","desc").execute()??[]).map((o)=>({...o,old_values:typeof o.old_values==="string"?qe(o.old_values):o.old_values,new_values:typeof o.new_values==="string"?qe(o.new_values):o.new_values}))}catch(t){return B.warn(`[orm] audits() lookup failed for ${e}#${String(n)}`,{error:t}),[]}}}}function qe(e){try{return JSON.parse(e)}catch{return e}}function Ke(e){if(e&&typeof e==="object"&&"transactional"in e)return{transactional:e.transactional===!0};return{transactional:!1}}function We(e,n,t="id",r={}){let o=r.transactional===!0,i=e;if(typeof e.audits!=="function")e.audits=Ue(n).audits;let a=async(l)=>{if(!o)return await l();let{db:f}=await import("@stacksjs/database/runtime");return await f.transaction(async()=>l())},s=e.create;if(typeof s==="function")e.create=async function(...l){return await a(async()=>{let f=await s.apply(this,l);try{let d=j(f),m=d?.[t];if(m!=null){let p=await ue();await ce({auditable_type:n,auditable_id:m,event:"created",old_values:null,new_values:G(d),user_id:p},o)}}catch(d){if(B.warn(`[orm] audit(create) failed for ${n}`,{error:d}),o)throw d}return f})};let u=e.update;if(typeof u==="function")e.update=async function(l,f){return await a(async()=>{let d=i.find,m=typeof d==="function"?j(await d.call(i,l)):null,p=await u.call(this,l,f);try{let y=j(p)??(typeof d==="function"?j(await d.call(i,l)):null),{old:b,next:w}=cn(m,y);if(w&&Object.keys(w).length>0){let h=await ue();await ce({auditable_type:n,auditable_id:l,event:"updated",old_values:G(b),new_values:G(w),user_id:h},o)}}catch(y){if(B.warn(`[orm] audit(update) failed for ${n}#${String(l)}`,{error:y}),o)throw y}return p})};let c=(l)=>{let f=e[l];if(typeof f!=="function")return;e[l]=async function(d){return await a(async()=>{let m=i.find,p=typeof m==="function"?j(await m.call(i,d)):null,y=await f.call(this,d);try{if(y!==!1&&p){let b=await ue();await ce({auditable_type:n,auditable_id:d,event:"deleted",old_values:G(p),new_values:null,user_id:b},o)}}catch(b){if(B.warn(`[orm] audit(${l}) failed for ${n}#${String(d)}`,{error:b}),o)throw b}return y})}};c("delete"),c("softDelete")}import{db as ln,sql as dn,sqlDateTime as de}from"@stacksjs/database/runtime";function A(e,n){if(typeof e!=="number"||!Number.isFinite(e)||e<=0)throw Error(`[orm/commentable] ${n} requires a positive numeric id (received ${String(e)})`)}var N="commentable_upvotes",q="commentables";function fn(e){let n=e;return n.code==="SQLITE_CONSTRAINT_UNIQUE"||n.code==="SQLITE_CONSTRAINT"||n.code==="23505"||n.errno===1062||/unique|duplicate/i.test(n.message??"")}function fe(e){let n=ln;return{async comments(t){return A(t,"comments"),await n.selectFrom("commentables").where("commentables_id","=",t).where("commentables_type","=",e).selectAll().execute()},async commentCount(t){let r=await n.selectFrom("commentables").select(dn`count(*) as count`).where("commentables_id","=",t).where("commentables_type","=",e).executeTakeFirst();return Number(r?.count)||0},async addComment(t,r){if(A(t,"addComment"),!r||typeof r.title!=="string"||r.title.trim().length===0)throw Error("[orm/commentable] addComment requires a non-empty comment.title");if(typeof r.body!=="string"||r.body.trim().length===0)throw Error("[orm/commentable] addComment requires a non-empty comment.body");let o=await n.insertInto("commentables").values({...r,commentables_id:t,commentables_type:e,status:"pending",created_at:de(),updated_at:de()}).returningAll().executeTakeFirst();if(o&&typeof o==="object"&&"id"in o)return o;let i=o?.lastInsertRowid;if(i==null)return o;return await n.selectFrom("commentables").where("id","=",Number(i)).selectAll().executeTakeFirst()},async approvedComments(t){return await n.selectFrom("commentables").where("commentables_id","=",t).where("commentables_type","=",e).where("status","=","approved").selectAll().execute()},async pendingComments(t){return await n.selectFrom("commentables").where("commentables_id","=",t).where("commentables_type","=",e).where("status","=","pending").selectAll().execute()},async rejectedComments(t){return await n.selectFrom("commentables").where("commentables_id","=",t).where("commentables_type","=",e).where("status","=","rejected").selectAll().execute()},async upvoteComment(t,r){A(t,"upvoteComment"),A(r,"upvoteComment");let o=()=>n.selectFrom(N).where("upvoteable_id","=",t).where("upvoteable_type","=",q).where("user_id","=",r).selectAll().executeTakeFirst(),i=await o();if(i)return i;try{await n.insertInto(N).values({upvoteable_id:t,upvoteable_type:q,user_id:r,created_at:de()}).execute()}catch(a){if(!fn(a))throw a}return await o()},async removeCommentUpvote(t,r){A(t,"removeCommentUpvote"),A(r,"removeCommentUpvote"),await n.deleteFrom(N).where("upvoteable_id","=",t).where("upvoteable_type","=",q).where("user_id","=",r).execute()},async commentUpvoteCount(t){A(t,"commentUpvoteCount");let r=await n.selectFrom(N).select("count(*) as count").where("upvoteable_id","=",t).where("upvoteable_type","=",q).executeTakeFirst();return Number(r?.count)||0},async hasUpvotedComment(t,r){return A(t,"hasUpvotedComment"),A(r,"hasUpvotedComment"),!!await n.selectFrom(N).where("upvoteable_id","=",t).where("upvoteable_type","=",q).where("user_id","=",r).selectAll().executeTakeFirst()}}}import{db as pn,sql as mn,sqlDateTime as Ve}from"@stacksjs/database/runtime";function pe(e,n){if(typeof e!=="number"||!Number.isFinite(e)||e<=0)throw Error(`[orm/taggable] ${n} requires a positive numeric id (received ${String(e)})`)}function me(e){let n=pn;return{async tags(t){return pe(t,"tags"),await n.selectFrom("taggables").where("taggable_id","=",t).where("taggable_type","=",e).selectAll().execute()},async tagCount(t){pe(t,"tagCount");let r=await n.selectFrom("taggables").select(mn`count(*) as count`).where("taggable_id","=",t).where("taggable_type","=",e).executeTakeFirst();return Number(r?.count)||0},async addTag(t,r){if(pe(t,"addTag"),!r||typeof r.name!=="string"||r.name.trim().length===0)throw Error("[orm/taggable] addTag requires a non-empty tag.name");return await n.insertInto("taggables").values({...r,taggable_id:t,taggable_type:e,slug:r.name.toLowerCase().replace(/[^a-z0-9]+/g,"-"),is_active:!0,created_at:Ve(),updated_at:Ve()}).execute(),await n.selectFrom("taggables").where("taggable_id","=",t).where("taggable_type","=",e).where("name","=",r.name).selectAll().executeTakeFirst()},async activeTags(t){return await n.selectFrom("taggables").where("taggable_id","=",t).where("taggable_type","=",e).where("is_active","=",!0).selectAll().execute()},async inactiveTags(t){return await n.selectFrom("taggables").where("taggable_id","=",t).where("taggable_type","=",e).where("is_active","=",!1).selectAll().execute()},async removeTag(t,r){await n.deleteFrom("taggables").where("taggable_id","=",t).where("taggable_type","=",e).where("id","=",r).execute()}}}import{db as gn,sqlDateTime as J}from"@stacksjs/database/runtime";function ge(e){let n=gn;async function t(r){return(await n.selectFrom("categorizable_models").where("categorizable_id","=",r).where("categorizable_type","=",e).selectAll().execute()).map((i)=>i.category_id)}return{async categories(r){let o=await t(r);if(o.length===0)return[];return await n.selectFrom("categorizables").where("id","in",o).selectAll().execute()},async categoryCount(r){return(await t(r)).length},async addCategory(r,o){let i=()=>n.selectFrom("categorizables").where("name","=",o.name).where("categorizable_type","=",e).selectAll().executeTakeFirst(),a=await i();if(!a)await n.insertInto("categorizables").values({name:o.name,description:o.description,slug:o.name.toLowerCase().replace(/[^a-z0-9]+/g,"-"),categorizable_type:e,is_active:!0,created_at:J(),updated_at:J()}).execute(),a=await i();return await n.insertInto("categorizable_models").values({categorizable_id:r,categorizable_type:e,category_id:a?.id,created_at:J(),updated_at:J()}).execute(),a},async activeCategories(r){let o=await t(r);if(o.length===0)return[];return await n.selectFrom("categorizables").where("id","in",o).where("is_active","=",!0).selectAll().execute()},async inactiveCategories(r){let o=await t(r);if(o.length===0)return[];return await n.selectFrom("categorizables").where("id","in",o).where("is_active","=",!1).selectAll().execute()},async removeCategory(r,o){await n.deleteFrom("categorizable_models").where("categorizable_id","=",r).where("categorizable_type","=",e).where("category_id","=",o).execute()}}}import{db as yn,sqlDateTime as bn}from"@stacksjs/database/runtime";function ye(e,n){let t=yn,r=n?.table||`${e}_likes`,o=n?.foreignKey||`${e.replace(/s$/,"")}_id`;return{async likes(i){return await t.selectFrom(r).where(o,"=",i).selectAll().execute()},async likeCount(i){let a=await t.selectFrom(r).select("count(*) as count").where(o,"=",i).executeTakeFirst();return Number(a?.count)||0},async like(i,a){if(typeof i!=="number"||!Number.isFinite(i)||i<=0)throw Error(`[orm/likeable] like requires a positive numeric id (received ${String(i)})`);if(typeof a!=="number"||!Number.isFinite(a)||a<=0)throw Error(`[orm/likeable] like requires a positive numeric userId (received ${String(a)})`);let s=bn();try{return await t.insertInto(r).values({[o]:i,user_id:a,created_at:s,updated_at:s}).returningAll().executeTakeFirst()}catch(u){let c=u;if(!(c.code==="SQLITE_CONSTRAINT_UNIQUE"||c.code==="SQLITE_CONSTRAINT"||c.code==="23505"||c.errno===1062||/unique|duplicate/i.test(c.message??"")))throw u;let f=await t.selectFrom(r).where(o,"=",i).where("user_id","=",a).selectAll().executeTakeFirst();if(f)return f;throw u}},async unlike(i,a){await t.deleteFrom(r).where(o,"=",i).where("user_id","=",a).execute()},async isLiked(i,a){return!!await t.selectFrom(r).where(o,"=",i).where("user_id","=",a).selectAll().executeTakeFirst()},async likedBy(i){return(await t.selectFrom(r).select([o]).where("user_id","=",i).execute()).map((s)=>Number(s[o])).filter(Boolean)}}}function Ye(e){let n=e;return n?.code==="SQLITE_CONSTRAINT_UNIQUE"||n?.code==="SQLITE_CONSTRAINT"||n?.code==="23505"||n?.errno===1062||/unique|duplicate/i.test(n?.message??"")}function wn(e,n,t){let r=e;if(e instanceof Error&&typeof r.status==="number"&&Number.isInteger(r.status)&&r.status>=400&&r.status<600){let o={error:e.message};if(r.details!==void 0)o.details=r.details;return{status:r.status,body:o}}if(Ye(e))return{status:409,body:{error:`${n} already exists`}};return{status:500,body:{error:`Failed to ${t} ${n}`,detail:String(e)}}}function R(e){let n=!1;for(let r=0;r<e.length;r++){let o=e.charCodeAt(r);if(o>127)return e.replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase();if(o>=65&&o<=90)n=!0}if(!n)return e;let t="";for(let r=0;r<e.length;r++){let o=e.charCodeAt(r);if(o<65||o>90){t+=e[r];continue}let i=r>0?e.charCodeAt(r-1):0,a=r+1<e.length?e.charCodeAt(r+1):0,s=i>=97&&i<=122||i>=48&&i<=57,u=i>=65&&i<=90&&a>=97&&a<=122;if(r>0&&(s||u))t+="_";t+=String.fromCharCode(o+32)}return t}function hn(e){let n={};for(let[t,r]of Object.entries(e))n[R(t)]=r;return n}function Da(e,n){let t=String(n||"").replace(/^\/+|\/+$/g,""),r=String(e).replace(/^\/+/,"");return`/api/${t?`${t}/`:""}${r}`}function Xe(e){if(!e)return null;let n=e.attributes??{};if(Object.prototype.hasOwnProperty.call(n,"teamId")||Object.prototype.hasOwnProperty.call(n,"team_id"))return"team_id";return e.belongsTo?.some((t)=>t==="Team")?"team_id":null}function Ze(e){if(!e)return null;let n=e.attributes??{};if(Object.prototype.hasOwnProperty.call(n,"userId")||Object.prototype.hasOwnProperty.call(n,"user_id"))return"user_id";return e.belongsTo?.some((t)=>t==="User")?"user_id":null}function Ea(e){return e?.ownership===!1}function Fa(e,n,t){let r=Object.keys(e).find((i)=>R(i)===R(n));if(Array.isArray(t)){if(r===void 0)return{data:e,error:"Ownership value is required"};if(!t.some((i)=>String(i)===String(e[r])))return{data:e,error:"Ownership value is not available to this caller"};return{data:{...e,[n]:e[r]}}}if(t===null||t===void 0)return{data:e,error:"Caller has no ownership identity"};let o={...e};for(let i of Object.keys(o))if(R(i)===R(n))delete o[i];return o[n]=t,{data:o}}function kn(e){if(!e)return[];let n=Object.entries(e.attributes??{}).filter(([,t])=>t?.fillable===!0).map(([t])=>t);for(let t of e.belongsTo??[]){if(typeof t!=="string"||!t.trim())continue;let r=R(t.trim()).split("_").filter(Boolean);if(r.length===0)continue;let o=`${r[0]}${r.slice(1).map((i)=>`${i[0]?.toUpperCase()}${i.slice(1)}`).join("")}Id`;n.push(o)}return[...new Set(n)]}function Tn(e,n){if(!e||n.length===0)return{};let t={},r;for(let o of n){if(o in e){t[o]=e[o];continue}r??=Rn(n);let i=r.get(o);if(i!==o&&i in e)t[o]=e[i]}return t}function _n(e,n){if(e?.name!=="date"||n instanceof Date||typeof n!=="string")return n;let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(n);if(!t)return n;let r=Number(t[1]),o=Number(t[2]),i=Number(t[3]),a=new Date(Date.UTC(r,o-1,i));if(a.getUTCFullYear()!==r||a.getUTCMonth()!==o-1||a.getUTCDate()!==i)return n;return a}var Qe=new WeakMap,ze=new WeakMap;function we(e){let n=Qe.get(e);if(n&&n.length===e.length){let r=!0;for(let o=0;o<e.length;o++)if(n[o]?.field!==e[o]){r=!1;break}if(r)return n}let t=e.map((r)=>({field:r,snake:R(r)}));return Qe.set(e,t),t}function Rn(e){let n=we(e),t=ze.get(n);if(t)return t;let r=new Map(n.map(({field:o,snake:i})=>[o,i]));return ze.set(n,r),r}function Ia(e,n){if(!n.length)return e;let t={...e};for(let{field:r,snake:o}of we(n))if(delete t[r],o!==r)delete t[o];return t}function $a(e,n){if(!e||n.length===0)return e;let t={...e};for(let{field:r,snake:o}of we(n))if(delete t[r],o!==r)delete t[o];return t}var Sn=["id","uuid","created_at","updated_at","deleted_at"];function ja(e,n){let t=new Map;for(let r of[...Object.keys(e??{}),...Sn]){let o=R(r);if(!/^\w+$/.test(o))continue;t.set(r,o),t.set(o,o)}for(let r of n)t.delete(r),t.delete(R(r));return t}function Ba(e,n,t){if(!n)return e;let r=e;for(let o of String(n).split(",")){let i=o.trim();if(!i)continue;let a=i.startsWith("-"),s=a?i.slice(1):i;if(!/^\w+$/.test(s))continue;let u=t.get(s);if(!u)continue;r=r.orderBy(u,a?"desc":"asc")}return r}var An={string:{get:(e)=>e!=null?String(e):null,set:(e)=>e!=null?String(e):null},number:{get:(e)=>e!=null?Number(e):null,set:(e)=>e!=null?Number(e):null},integer:{get:(e)=>e!=null?Math.trunc(Number(e)):null,set:(e)=>e!=null?Math.trunc(Number(e)):null},float:{get:(e)=>e!=null?Number.parseFloat(String(e)):null,set:(e)=>e!=null?Number.parseFloat(String(e)):null},boolean:{get:(e)=>e===1||e==="1"||e===!0||e==="true",set:(e)=>e===!0||e===1||e==="1"||e==="true"?1:0},json:{get:(e)=>e==null?null:typeof e==="string"?Pn(e):e,set:(e)=>e==null?null:typeof e==="string"?e:JSON.stringify(e)},datetime:{get:(e)=>e?new Date(e):null,set:(e)=>e instanceof Date?e.toISOString():e},date:{get:(e)=>e?new Date(e):null,set:(e)=>e instanceof Date?e.toISOString().split("T")[0]:e},array:{get:(e)=>e==null?[]:Array.isArray(e)?e:typeof e==="string"?Cn(e):[],set:(e)=>e==null?null:Array.isArray(e)?JSON.stringify(e):e}},He=new WeakMap;function xn(e,n){let t=He.get(e);if(t&&t.length===n.length){let o=!0;for(let i=0;i<n.length;i++){let a=n[i];if(t[i]?.attr!==a||t[i]?.definition!==e[a]){o=!1;break}}if(o)return t}let r=[];for(let o of n){let i=e[o],a=typeof i==="string"?An[i]:i;r.push({attr:o,snake:R(o),definition:i,caster:a})}return He.set(e,r),r}function Pn(e){try{return JSON.parse(e)}catch{return e}}function Cn(e){try{return JSON.parse(e)}catch{return[]}}function Na(e,n,t){if(!e||typeof e!=="object"||!n)return e;let r=Object.keys(n);if(r.length===0)return e;let o=xn(n,r);if(o.length===0)return e;let i={...e};for(let{attr:a,caster:s,snake:u}of o){if(!s)continue;let c=s[t];if(typeof c!=="function")continue;if(Object.prototype.hasOwnProperty.call(i,a))i[a]=c.call(s,i[a]);if(u!==a&&Object.prototype.hasOwnProperty.call(i,u))i[u]=c.call(s,i[u])}return i}var Ge=new WeakMap;function vn(e){let n=Ge.get(e);if(n)return n;let t=[];for(let[r,o]of Object.entries(e)){let i=o?.validation?.rule;if(!i||typeof i.validate!=="function")continue;t.push({definition:o,field:r,hasDefault:o!==null&&typeof o==="object"&&Object.prototype.hasOwnProperty.call(o,"default"),rule:i})}return Ge.set(e,t),t}function et(e){let n=e?.attributes;if(!n||typeof n!=="object")return!1;for(let t of Object.values(n)){let r=t?.validation?.rule;if(r&&typeof r.validate==="function")return!0}return!1}function tt(e,n,t){let r=n?.attributes;if(!r||typeof r!=="object")return{valid:!0};let o=vn(r);if(o.length===0)return{valid:!0};let i={},a=!1;for(let s of o){let{definition:u,field:c,hasDefault:l,rule:f}=s,d=Object.prototype.hasOwnProperty.call(e,c);if(!d&&t==="updating")continue;let m=d?e[c]:l?u.default:void 0,p=_n(f,m),y=f.validate(p);if(!y?.valid&&Array.isArray(y?.errors)&&y.errors.length>0)a=!0,i[c]=y.errors.map((b)=>u.validation?.message?.[b?.code]??b?.message??"invalid")}return a?{valid:!1,errors:i}:{valid:!0}}function On(e,n){return`${e}\x00${Mn(n)}`}function qa(e){let n=new Map;for(let t of e){let r=On(String(t.method??""),String(t.path??""));if(!n.has(r))n.set(r,t)}return n}function Mn(e){return e.replace(/\{[^}]*\}/g,"{}").replace(/:[^/]+/g,"{}")}function be(e){if(Array.isArray(e))return e.filter((n)=>typeof n==="string"&&n.length>0);return typeof e==="string"&&e?[e]:[]}function La(e){let n=typeof e==="object"&&e!==null&&"middleware"in e,t=e?.middleware;if(!n)return{read:["auth"],write:["auth"],declared:!1};if(t&&typeof t==="object"&&!Array.isArray(t)){let o=t;return{read:"read"in o?be(o.read):["auth"],write:"write"in o?be(o.write):["auth"],declared:!0}}let r=be(t);return{read:r,write:r,declared:!0}}var Je=15,Dn=100;function Ua(e){let n=Number.parseInt(e.get("page")||String(1),10),t=Number.isFinite(n)?Math.max(1,n):1,r=Number.parseInt(e.get("per_page")||String(Je),10),o=Math.min(Number.isFinite(r)?Math.max(1,r):Je,Dn);return{page:t,perPage:o,offset:(t-1)*o}}function Y(e,n){let t=new URL(e.toString());return t.searchParams.set("page",String(n)),`${t.pathname}${t.search}`}function En(e,n,t,r,o,i){let a=(n-1)*t,s=r===0,u={page:n,per_page:t,from:s?null:a+1,to:s?null:a+r,has_more_pages:o,prev_page_url:n>1?Y(e,n-1):null,next_page_url:o?Y(e,n+1):null};if(i!==void 0&&!Number.isNaN(i)){let c=Math.max(1,Math.ceil(i/t));u.total=i,u.last_page=c,u.first_page_url=Y(e,1),u.last_page_url=Y(e,c)}return u}function Ka(e,n,t,r,o,i){let{page:a,...s}=En(e,n,t,r,o,i);return{current_page:a,...s}}function Wa(e,n){return(n??e??"").toString().trim().toLowerCase()==="warn"?"warn":"deny"}function Va(e,n){if(e.length===0)return null;let t=[...e].sort().join(", ");if(n==="deny")return`[orm] security.api.rowScoping is 'deny': NOT registering store/update/destroy for ${e.length} model(s) `+`with no row-level scoping \u2014 ${t}. Give a model an \`ownership\` config or a \`team_id\` column to restore its writes.`;return`[orm] ${e.length} model(s) publish mutating routes with no row-level scoping, so an authenticated caller can write any row \u2014 `+`${t}. Scope one with an \`ownership\` config or a \`team_id\` column; intended for public catalog tables. Set \`security.api.rowScoping: 'deny'\` (config/security.ts) to stop generating these routes instead.`}function Fn(e){if(e?.ownership===!1)return null;if(e?.ownership)return e.ownership;let n=Xe(e);if(n)return{field:n,resolve:async(r,o)=>{let{resolveAuthenticatedTeamId:i}=await import("@stacksjs/auth");return i(he(o))}};let t=Ze(e);if(t)return{field:t,resolve:async(r)=>r?.id??null};return null}function he(e){let n=e?.headers?.get?.("authorization"),t=n&&/^Bearer\s+/i.test(n)?n.replace(/^Bearer\s+/i,"").trim():null,r=e?.headers?.get?.("cookie")||"";return{bearerToken:()=>t,cookies:{get:(o)=>{for(let i of r.split(";")){let a=i.indexOf("=");if(a===-1)continue;if(i.slice(0,a).trim()===o)return decodeURIComponent(i.slice(a+1).trim())}return null}}}}function In(e="customer_id"){return{field:e,resolve:async(n)=>{let t=n?.id;if(t==null)return null;try{let{Customer:r}=await import("@stacksjs/orm");return(await r.where("user_id",t).first())?.id??null}catch{return null}}}}function $n(e="id"){return{field:e,resolve:async(n)=>n?.id??null}}function jn(e="site_id"){return{field:e,resolve:async(n,t)=>{try{let[{resolveAuthenticatedTeamId:r},{Site:o}]=await Promise.all([import("@stacksjs/auth"),import("@stacksjs/orm")]),i=await r(he(t));if(i==null)return[];return(await o.where("team_id",i).get()??[]).map((s)=>s.id).filter((s)=>s!=null)}catch{return[]}}}}function Bn(e="id"){return{field:e,resolve:async(n,t)=>{try{let{resolveAuthenticatedTeamId:r}=await import("@stacksjs/auth");return await r(he(t))}catch{return null}}}}function Nn(e,n){return{field:n,resolve:async(t,r)=>{try{let o=await import("@stacksjs/orm"),i=o.models?.[e]??o[e]?.definition??null,a=Fn(i);if(!a?.field||typeof a.resolve!=="function")return[];let s=await a.resolve(t,r);if(s==null||Array.isArray(s)&&s.length===0)return[];let u=o[e];if(!u)return[];return((Array.isArray(s)?await u.whereIn(a.field,s).get():await u.where(a.field,s).get())??[]).map((l)=>l.id).filter((l)=>l!=null)}catch{return[]}}}}import{getCurrentRequest as qn}from"@stacksjs/router";var nt=new WeakMap;function rt(e){let n=new Map;for(let t of e){let r=t?.id;if(r!==void 0)n.set(r,t)}return n}async function Ln(e,n){if(typeof e.find==="function")return e.find(n);let t=await e.findMany?.([n]);return rt(t??[]).get(n)}async function Un(e,n,t){n.pending=void 0;try{let r=typeof e.findMany==="function"?await e.findMany(t.keys):await Promise.all(t.keys.map((i)=>e.find?.(i))),o=rt(r??[]);for(let i of t.resolvers)i.resolve(o.get(i.key))}catch(r){for(let o of t.resolvers)o.reject(r)}}function Ja(e,n){let t=qn();if(!t)return Ln(e,n);let r=nt.get(t);if(!r)r=new WeakMap,nt.set(t,r);let o=r.get(e);if(!o)o={cache:new Map},r.set(e,o);let i=o.cache.get(n);if(i)return i.then();let a=o.pending;if(!a){a={keys:[],resolvers:[]},o.pending=a;let c=a,l=o;queueMicrotask(()=>{Un(e,l,c)})}let s=new Promise((c,l)=>{a.keys.push(n),a.resolvers.push({key:n,resolve:c,reject:l})});o.cache.set(n,s);let u=o.cache;return s.catch(()=>u.delete(n)),s.then()}import{db as es}from"@stacksjs/database/runtime";class Kn{conditions=[];where(e,...n){let[t,r]=n,o=r===void 0?"=":t,i=r===void 0?t:r;this.addCondition("and","where",e,o,i)}orWhere(e,...n){let[t,r]=n,o=r===void 0?"=":t,i=r===void 0?t:r;this.addCondition("or","where",e,o,i)}whereIn(e,n){this.conditions.push({type:"and",method:"whereIn",column:e,values:n})}whereNotIn(e,n){this.conditions.push({type:"and",method:"whereIn",column:e,values:n,operator:"not in"})}whereNull(e){this.conditions.push({type:"and",method:"whereNull",column:e})}whereNotNull(e){this.conditions.push({type:"and",method:"whereNotNull",column:e})}whereBetween(e,n){this.conditions.push({type:"and",method:"whereBetween",column:e,range:n})}whereExists(e){this.conditions.push({type:"and",method:"whereExists",column:"",callback:e})}addCondition(e,n,t,r,o){this.conditions.push({type:e,method:n,column:t,operator:r,value:o})}getConditions(){return this.conditions}}import{db as ke}from"@stacksjs/database/runtime";async function rs(e,n){return await ke.transaction(e,n)}async function os(e){return await ke.savepoint(e)}function is(e,n){return ke.transactional(e,n)}export*from"@stacksjs/model-meta";import{createModel as ir,registerModel as ar}from"@stacksjs/query-builder";import{log as T}from"@stacksjs/logging/runtime";import{snakeCase as V}from"@stacksjs/strings";import{AsyncLocalStorage as Mt}from"async_hooks";import{toCursorPaginator as sr,toPaginator as ur,toSimplePaginator as cr}from"@stacksjs/pagination";function _e(e,n){let t=Ae(),r=t?Te(t,"per_page"):void 0,o=t?Te(t,"page"):void 0,i=e!==void 0?Math.max(1,Math.floor(e)):Math.min(100,Math.max(1,r??15)),a=Math.max(1,Math.floor(n??o??1));return{perPage:i,page:a}}function Re(e,n){let t=Ae(),r=t?it(t,"cursor"):void 0,o=t?Te(t,"per_page"):void 0,i=e!==void 0?Math.max(1,Math.floor(e)):Math.min(100,Math.max(1,o??15)),s=ot(n!==void 0?n:r??null);return{perPage:i,cursor:s}}function ot(e){if(e===null||e===void 0)return null;if(Array.isArray(e))return e;if(typeof e==="string"&&e.startsWith("["))try{let n=JSON.parse(e);if(Array.isArray(n))return n}catch{}return e}function Se(e){let n=Ae();if(!n)return e;let t=(()=>{try{return new URL(n.url)}catch{return null}})();if(!t)return e;let r=t.pathname;if(e.path=r,"next_cursor"in e)return e.next_page_url=e.next_cursor!==null?v(t,{cursor:e.next_cursor}):null,e.prev_page_url=e.prev_cursor!==null?v(t,{cursor:e.prev_cursor}):null,e;let o=e.current_page;if(e.prev_page_url=o>1?v(t,{page:o-1}):null,"total"in e){let i=e.last_page;e.next_page_url=o<i?v(t,{page:o+1}):null,e.first_page_url=v(t,{page:1}),e.last_page_url=v(t,{page:i})}else e.next_page_url=e.has_more_pages?v(t,{page:o+1}):null;return e}function v(e,n){let t=new URL(e.toString());for(let[r,o]of Object.entries(n))t.searchParams.set(r,String(o));return`${t.pathname}${t.search}`}var D;function Ae(){if(D===null)return;if(D===void 0)try{let n=Xt("@stacksjs/router");if(typeof n.getCurrentRequest==="function")D=n.getCurrentRequest;else{D=null;return}}catch{D=null;return}return D()}function Te(e,n){let t=it(e,n);if(t===void 0)return;let r=Number(t);return Number.isFinite(r)?r:void 0}function it(e,n){let t=e.query?.[n];if(t===void 0)return;return Array.isArray(t)?t[0]:t}import{createRequire as Wn}from"module";import{db as Vn}from"@stacksjs/database/runtime";var Qn=Wn(import.meta.url);function at(e){let n=Vn;return{async createStripeUser(t,r){let{manageCustomer:o}=await import("@stacksjs/payments");return await o.createStripeCustomer(t,r)},async updateStripeUser(t,r){let{manageCustomer:o}=await import("@stacksjs/payments");return await o.updateStripeCustomer(t,r)},async deleteStripeUser(t){let{manageCustomer:r}=await import("@stacksjs/payments");return await r.deleteStripeUser(t)},async createOrGetStripeUser(t,r){let{manageCustomer:o}=await import("@stacksjs/payments");return await o.createOrGetStripeUser(t,r)},async retrieveStripeUser(t){let{manageCustomer:r}=await import("@stacksjs/payments");return await r.retrieveStripeUser(t)},async defaultPaymentMethod(t){let{managePaymentMethod:r}=await import("@stacksjs/payments");return await r.retrieveDefaultPaymentMethod(t)},async setDefaultPaymentMethod(t,r){let{managePaymentMethod:o}=await import("@stacksjs/payments");return await o.setDefaultPaymentMethod(t,r)},async addPaymentMethod(t,r){let{managePaymentMethod:o}=await import("@stacksjs/payments");return await o.addPaymentMethod(t,r)},async paymentMethods(t,r){let{managePaymentMethod:o}=await import("@stacksjs/payments");return await o.listPaymentMethods(t,r)},async newSubscription(t,r,o,i={}){let{manageSubscription:a}=await import("@stacksjs/payments"),s=await a.create(t,r,o,i),c=s.latest_invoice?.payment_intent;return{subscription:s,paymentIntent:c}},async updateSubscription(t,r,o,i={}){let{manageSubscription:a}=await import("@stacksjs/payments"),s=await a.update(t,r,o,i),c=s.latest_invoice?.payment_intent;return{subscription:s,paymentIntent:c}},async cancelSubscription(t,r,o={}){let{manageSubscription:i}=await import("@stacksjs/payments");return{subscription:await i.cancel(r,o)}},async activeSubscription(t){let{manageSubscription:r}=await import("@stacksjs/payments"),o=await n.selectFrom("subscriptions").where("user_id","=",t.id).where("provider_status","=","active").selectAll().executeTakeFirst();if(o){let i=await r.retrieve(t,o.provider_id||"");return{subscription:o,providerSubscription:i}}return},async checkout(t,r,o={}){let{manageCheckout:i,manageCustomer:a}=await import("@stacksjs/payments"),s={};if(o.enableTax)s.automatic_tax={enabled:!0},delete o.enableTax;if(o.allowPromotions)s.allow_promotion_codes=!0,delete o.allowPromotions;let l={...{mode:"payment",customer:(await a.createOrGetStripeUser(t,{})).id,line_items:r.map((f)=>({price:f.priceId,quantity:f.quantity||1}))},...s,...o};return await i.create(t,l)},async createSetupIntent(t,r={}){let{manageSetupIntent:o}=await import("@stacksjs/payments");return await o.create(t,r)},async subscriptionHistory(t){let{manageInvoice:r}=await import("@stacksjs/payments");return await r.list(t)},async transactionHistory(t){let{manageTransaction:r}=await import("@stacksjs/payments");return await r.list(t)},async connectAccount(t,r={}){let o=r.accountColumn||"stripe_account_id",i=(t._attributes??t)[o];if(!i)return null;let a=await L();try{return await a.accounts.retrieve(i)}catch{return null}},async createConnectAccount(t,r={}){let o=r.accountColumn||"stripe_account_id",i=t._attributes??t,a=i[o],s=await L();if(!a){let{stacksIdempotencyKey:u}=await import("@stacksjs/payments"),c=r.modelTable||e,l=await s.accounts.create({type:r.type??"express",email:r.email??i.email,country:r.country??"US",capabilities:r.capabilities??{card_payments:{requested:!0},transfers:{requested:!0}}},{idempotencyKey:u("connect.account.create",c,i.id)});return a=l.id,await n.updateTable(c).set({[o]:a}).where("id","=",Number(i.id)).execute(),l}return await s.accounts.retrieve(a)},async connectOnboardLink(t,r){let o=r.accountColumn||"stripe_account_id",a=(t._attributes??t)[o];if(!a)throw Error("connectOnboardLink: model has no Stripe Connect account; call createConnectAccount first");return{url:(await(await L()).accountLinks.create({account:a,refresh_url:r.refreshUrl,return_url:r.returnUrl,type:r.type??"account_onboarding"})).url,accountId:a}},async syncConnectStatus(t,r={}){let o=r.accountColumn||"stripe_account_id",i=r.chargesColumn||"charges_enabled",a=r.payoutsColumn||"payouts_enabled",s=t._attributes??t,u=s[o];if(!u)return{chargesEnabled:!1,payoutsEnabled:!1};let l=await(await L()).accounts.retrieve(u),f=!!l.charges_enabled,d=!!l.payouts_enabled,m=r.modelTable||e;return await n.updateTable(m).set({[i]:f,[a]:d}).where("id","=",Number(s.id)).execute(),{chargesEnabled:f,payoutsEnabled:d}},async chargeWithSplit(t,r){let o=await L(),i=r.accountColumn||"stripe_account_id",a=t._attributes??t,s=r.connectAccountId||a[i],u={amount:r.amountCents,currency:r.currency||"usd",automatic_payment_methods:{enabled:!0},metadata:r.metadata};if(s){if(u.transfer_data={destination:s},r.platformFeeCents)u.application_fee_amount=r.platformFeeCents}let{freshIdempotencyKey:c}=await import("@stacksjs/payments");return await o.paymentIntents.create(u,{idempotencyKey:c("payment_intent.create",a.id,r.amountCents)})}}}function L(){let e=globalThis.process?.env?.STRIPE_SECRET_KEY;if(!e)throw Error("Stripe Connect: STRIPE_SECRET_KEY not configured");let n;try{n=Qn("stripe")}catch{throw Error("Stripe Connect is being used but the `stripe` package is not installed. It is an opt-in dependency - run `bun add stripe` to enable Stripe Connect.")}return new n(e,{apiVersion:"2026-06-24.dahlia"})}function st(){return{async generateTwoFactorForModel(e){let{generateTwoFactorSecret:n}=await import("@stacksjs/auth"),t=n();await e.update({two_factor_secret:t})},async verifyTwoFactorCode(e,n){let t=e.get("two_factor_secret");if(typeof t!=="string")return!1;let{verifyTwoFactorCode:r,RateLimiter:o}=await import("@stacksjs/auth"),i=String(e.id??e.get?.("id")??e.get?.("email")??t),a=`2fa:${i}`;if(await o.isRateLimited(a)){let{HttpError:u}=await import("@stacksjs/error-handling");throw new u(429,"Too many verification attempts. Please try again later.")}if(!await r(n,t))return await o.recordFailedAttempt(a),!1;try{let{cache:u}=await import("@stacksjs/cache"),c=`2fa:used:${i}:${n}`;if(await u.has(c))return await o.recordFailedAttempt(a),!1;await u.set(c,"1",90)}catch{}return await o.resetAttempts(a),!0}}}import{mutationCount as zn,sqlDateTime as Hn}from"@stacksjs/database/runtime";import{log as E}from"@stacksjs/logging";var X="deleted_at";function ut(e,n="id"){return{async softDelete(t){let r=Hn(),o=e.where(n,t);if(typeof o?.update==="function")return await o.update({[X]:r}),!0;return!1},async restore(t){let r=e.where(n,t).withTrashed();if(typeof r?.update==="function")return await r.update({[X]:null}),!0;return!1},async forceDelete(t){let r=e.where(n,t),o=typeof r?.withTrashed==="function"?r.withTrashed():r;if(typeof o?.delete==="function")return zn(await o.delete())>0;return!1},withTrashed(){return typeof e.query==="function"?e.query():e},onlyTrashed(){let t=typeof e.query==="function"?e.query():e;if(typeof t?.whereNotNull==="function")return t.whereNotNull(X);return t?.where?.(X,"!=",null)??t}}}function ct(e){if(e===!0||e==null)return{};if(typeof e==="object"&&!Array.isArray(e)){let n=e;if(Array.isArray(n.cascade)){let t=n.cascade.filter((r)=>typeof r==="string");return t.length?{cascade:t}:{}}return{}}return{}}function Gn(e,n){let t=e.hasMany??[],r=e.hasOne??[],o=t.some((l)=>xe(l,n,!0)),i=r.some((l)=>xe(l,n,!1));if(!o&&!i)return E.warn(`[orm] soft-delete cascade: '${n}' is not a declared hasMany/hasOne relation - skipping`),null;let s=(o?t:r).find((l)=>xe(l,n,o))??null;if(!s)return null;let c=globalThis[s];if(!c)return E.warn(`[orm] soft-delete cascade: model '${s}' is not yet on globalThis - skipping cascade for '${n}'`),null;return{className:s,model:c}}function xe(e,n,t){let r=e.toLowerCase();if(n===r)return!0;if(t&&n===`${r}s`)return!0;if(t&&r.endsWith("y")&&n===`${r.slice(0,-1)}ies`)return!0;return!1}async function Jn(e,n,t,r,o){try{let i=t.where;if(typeof i!=="function"){E.warn(`[orm] cascade ${o}: child model has no .where()`);return}if(o==="softDelete"){let a=t.softDelete;if(typeof a==="function"){let u=i.call(t,r,n),c=typeof u?.get==="function"?await u.get():Array.isArray(u)?u:[],l=t.primaryKey||"id";for(let f of c){let d=f?.[l];if(d!=null)await a.call(t,d)}return}let s=i.call(t,r,n);if(typeof s?.delete==="function"){E.debug(`[orm] cascade soft-delete: child has no softDeletes trait, hard-deleting from ${String(t.table??"?")}`),await s.delete();return}}else{let a=t.restore;if(typeof a!=="function"){E.debug("[orm] cascade restore: child has no restore() - nothing to do");return}let s=t.withTrashed,c=(typeof s==="function"?s.call(t):t).where?.(r,n),l=typeof c?.get==="function"?await c.get():[],f=t.primaryKey||"id";for(let d of l){let m=d?.[f];if(m!=null)await a.call(t,m)}}}catch(i){if(E.warn(`[orm] soft-delete cascade ${o} on ${e}#${String(n)} failed`,{error:i}),process.env.STACKS_ORM_CASCADE_SWALLOW!=="true")throw i}}async function U(e,n,t,r){let o=n.cascade;if(!o||o.length===0)return;let i=`${e.name.toLowerCase()}_id`;for(let a of o){let s=Gn(e,a);if(!s)continue;await Jn(s.className,t,s.model,i,r)}}import{sqlDateTime as Zn}from"@stacksjs/database/runtime";import{log as Yn}from"@stacksjs/logging";var Xn=[/^password$/i,/^password_hash$/i,/^api_key$/i,/_token$/i,/_secret$/i,/^remember_token$/i],lt=null;async function dt(){if(lt!=null)return lt;try{let e=await import("@stacksjs/router").catch(()=>null);if(!e)return null;let n=e.getCurrentRequest;if(typeof n!=="function")return null;let t=n();return t?.user?.id??t?._user?.id??null}catch{return null}}async function ft(){try{let n=(await import("@stacksjs/router").catch(()=>null))?.getCurrentRequest;if(typeof n!=="function")return null;let t=n();return typeof t?.ip==="function"?t.ip()??null:null}catch{return null}}function pt(e){if(!e||typeof e!=="object")return null;let n={};for(let[t,r]of Object.entries(e)){if(Xn.some((o)=>o.test(t)))continue;n[t]=r}return n}function mt(e,n,t){Yn.warn(`[orm] ${e} row write failed for ${n}: ${t?.message??String(t)}`)}var er="activities";function gt(e){if(!e)return null;if(e===!0)return{};if(typeof e!=="object")return null;let n=e;return{logOnly:Array.isArray(n.logOnly)?n.logOnly:void 0,include:Array.isArray(n.include)?n.include:void 0,exclude:Array.isArray(n.exclude)?n.exclude:void 0}}function tr(e,n,t=[]){let r=pt(e);if(!r)return null;let o=new Set(t),i=n.logOnly??n.include,a=new Set(n.exclude??[]),s={};for(let[u,c]of Object.entries(r)){if(o.has(u)||a.has(u))continue;if(i&&!i.includes(u))continue;s[u]=c}return s}function nr(e,n,t){return t==null?`${e} was ${n}`:`${e} ${String(t)} was ${n}`}async function rr(e){try{let{db:n}=await import("@stacksjs/database/runtime");await n.insertInto(er).values({type:e.type,description:e.description,subject_type:e.subject_type,subject_id:e.subject_id,causer:e.causer,properties:e.properties?JSON.stringify(e.properties):null,ip_address:e.ip_address,user_id:e.user_id,created_at:Zn()}).executeTakeFirst()}catch(n){mt("activity",`${e.subject_type}#${String(e.subject_id)}`,n)}}async function or(e){let{attributes:n,event:t,modelName:r,options:o,primaryKey:i}=e,a=n?.[i]??null,s=await dt();await rr({type:`${r.toLowerCase()}.${t}`,description:nr(r,t,a),subject_type:r,subject_id:a,properties:tr(n,o,e.hidden),causer:s==null?null:`User:${String(s)}`,user_id:s,ip_address:await ft()})}function Pe(e){if(!e||typeof e!=="object")return null;let n=e;if(n.attributes&&typeof n.attributes==="object")return{...n.attributes};if(n._attributes&&typeof n._attributes==="object")return{...n._attributes};return{...e}}function yt(e,n,t,r,o=[]){if(n==="Activity")return;let i=e,a=async(f)=>typeof i.find==="function"?Pe(await i.find(f)):null,s=async(f,d)=>{await or({modelName:n,event:f,attributes:d,primaryKey:t,options:r,hidden:o})},u=e.create;if(typeof u==="function")e.create=async function(...f){let d=await u.apply(this,f);return await s("created",Pe(d)),d};let c=e.update;if(typeof c==="function")e.update=async function(f,d){let m=await c.call(this,f,d);return await s("updated",Pe(m)??await a(f)),m};let l=e.delete;if(typeof l==="function")e.delete=async function(f){let d=await a(f),m=await l.call(this,f);return await s("deleted",d??{[t]:f}),m}}var te,Dt=new Mt;function M(){return Dt.getStore()?.suppressed===!0}function O(e){return Promise.resolve(Dt.run({suppressed:!0},e))}var Et=new Mt;function lr(){return Et.getStore()?.suppressed===!0}function dr(e){return Promise.resolve(Et.run({suppressed:!0},e))}var Ee=Symbol.for("stacks.orm.modelDefinition");class Ft extends Error{status=422;errors;constructor(e,n){let t=Object.keys(n).join(", ");super(`${e} validation failed: ${t}`);this.name="ModelValidationError",this.errors=n}}var bt=new Set,fr=4096,wt=Object.create(null),ht=0;function W(e){let n=wt[e];if(n!==void 0)return n;let t=V(e);if(ht<fr)wt[e]=t,ht++;return t}function pr(e,n){let t=typeof e==="string"?e.slice(0,80):String(e),r=`${typeof e}:${t}`;if(bt.has(r))return;bt.add(r);let o=n instanceof Error?n.message:String(n);console.error(`[orm] JSON cast failed to parse value (returning null): ${o} - value preview: ${JSON.stringify(t)}`)}var mr={string:{get:(e)=>e!=null?String(e):null,set:(e)=>e!=null?String(e):null},number:{get:(e)=>e!=null?Number(e):null,set:(e)=>e!=null?Number(e):null},integer:{get:(e)=>e!=null?Math.trunc(Number(e)):null,set:(e)=>e!=null?Math.trunc(Number(e)):null},float:{get:(e)=>e!=null?Number.parseFloat(String(e)):null,set:(e)=>e!=null?Number.parseFloat(String(e)):null},boolean:{get:(e)=>e===1||e==="1"||e===!0||e==="true",set:(e)=>e===!0||e===1||e==="1"||e==="true"?1:0},json:{get:(e)=>{if(e==null)return null;if(typeof e==="string")try{return JSON.parse(e)}catch(n){return pr(e,n),null}return e},set:(e)=>{if(e==null)return null;return typeof e==="string"?e:JSON.stringify(e)}},datetime:{get:(e)=>e?new Date(e):null,set:(e)=>e instanceof Date?e.toISOString():e},date:{get:(e)=>e?new Date(e):null,set:(e)=>e instanceof Date?e.toISOString().split("T")[0]:e},array:{get:(e)=>{if(e==null)return[];if(Array.isArray(e))return e;if(typeof e==="string")try{return JSON.parse(e)}catch{return[]}return[]},set:(e)=>{if(e==null)return null;return Array.isArray(e)?JSON.stringify(e):e}}};function gr(e){return typeof e==="string"?mr[e]:e}var kt=new WeakMap;function It(e){let n=Object.keys(e),t=kt.get(e);if(t&&t.length===n.length){let o=!0;for(let i=0;i<n.length;i++){let a=n[i];if(t[i]?.attr!==a||t[i]?.definition!==e[a]){o=!1;break}}if(o)return t}let r=n.map((o)=>{let i=e[o];return{attr:o,definition:i,caster:gr(i)}});return kt.set(e,r),r}function Tt(e,n,t){if(!e||typeof e!=="object")return e;let r={...e};for(let{attr:o,caster:i}of It(n))if(o in r)r[o]=i[t].call(i,r[o]);return r}function Z(e){return e==="_attributes"||e==="_original"||e==="_definition"||e==="_hasSaved"||e==="_relations"}var ve=Symbol.for("stacks.modelInstanceProxy"),_t,Rt=new WeakMap,yr={tags:{bag:"_taggable",mode:"id"},tagCount:{bag:"_taggable",mode:"id"},addTag:{bag:"_taggable",mode:"id"},activeTags:{bag:"_taggable",mode:"id"},inactiveTags:{bag:"_taggable",mode:"id"},removeTag:{bag:"_taggable",mode:"id"},categories:{bag:"_categorizable",mode:"id"},categoryCount:{bag:"_categorizable",mode:"id"},addCategory:{bag:"_categorizable",mode:"id"},activeCategories:{bag:"_categorizable",mode:"id"},inactiveCategories:{bag:"_categorizable",mode:"id"},removeCategory:{bag:"_categorizable",mode:"id"},comments:{bag:"_commentable",mode:"id"},commentCount:{bag:"_commentable",mode:"id"},addComment:{bag:"_commentable",mode:"id"},approvedComments:{bag:"_commentable",mode:"id"},pendingComments:{bag:"_commentable",mode:"id"},rejectedComments:{bag:"_commentable",mode:"id"},likes:{bag:"_likeable",mode:"id"},likeCount:{bag:"_likeable",mode:"id"},like:{bag:"_likeable",mode:"id"},unlike:{bag:"_likeable",mode:"id"},isLiked:{bag:"_likeable",mode:"id"},createStripeUser:{bag:"_billable",mode:"model"},updateStripeUser:{bag:"_billable",mode:"model"},deleteStripeUser:{bag:"_billable",mode:"model"},createOrGetStripeUser:{bag:"_billable",mode:"model"},retrieveStripeUser:{bag:"_billable",mode:"model"},defaultPaymentMethod:{bag:"_billable",mode:"model"},setDefaultPaymentMethod:{bag:"_billable",mode:"model"},addPaymentMethod:{bag:"_billable",mode:"model"},paymentMethods:{bag:"_billable",mode:"model"},newSubscription:{bag:"_billable",mode:"model"},updateSubscription:{bag:"_billable",mode:"model"},cancelSubscription:{bag:"_billable",mode:"model"},activeSubscription:{bag:"_billable",mode:"model"},checkout:{bag:"_billable",mode:"model"},createSetupIntent:{bag:"_billable",mode:"model"},subscriptionHistory:{bag:"_billable",mode:"model"},transactionHistory:{bag:"_billable",mode:"model"},connectAccount:{bag:"_billable",mode:"model"},createConnectAccount:{bag:"_billable",mode:"model"},connectOnboardLink:{bag:"_billable",mode:"model"},syncConnectStatus:{bag:"_billable",mode:"model"},chargeWithSplit:{bag:"_billable",mode:"model"},generateTwoFactorForModel:{bag:"_twoFactor",mode:"model"},verifyTwoFactorCode:{bag:"_twoFactor",mode:"model"}};function br(e,n){if(!e||!n)return null;let t=n.split("."),r=e;for(let o of t){if(r==null||typeof r!=="object")return null;let i=r;if("_attributes"in i&&i._attributes&&typeof i._attributes==="object"){let a=i._attributes;if(o in a){r=a[o];continue}}if(o in i){r=i[o];continue}return null}return r??null}function ee(e,n,t){if(e&&typeof e.then==="function")return e.then((r)=>r===n?t:r);return e===n?t:e}function x(e,n){if(!e||typeof e!=="object")return e;let t=e;if(t[ve])return e;let r=t._attributes;if(!r||typeof r!=="object")return e;if(n){for(let{attr:i,caster:a}of It(n))if(Object.hasOwn(r,i))r[i]=a.get.call(a,r[i])}let o=n?Rt.get(n):_t;if(!o)if(o={get(i,a,s){let u=i;if(a===ve)return!0;if(a==="saveAsync")return async function(){let l=u._definition,f=l?.set;if(f&&typeof u.isDirty==="function"){for(let[m,p]of Object.entries(f)){if(typeof p!=="function")continue;if(!u.isDirty(m))continue;let y=p(u._attributes),b=y&&typeof y.then==="function"?await y:y;u._attributes[m]=b}let d=l.set;l.set={};try{return ee(u.save(),i,s)}finally{l.set=d}}return ee(u.save(),i,s)};if(a==="save")return function(){let l=u._definition,f=l?.set;if(f&&Object.keys(f).length>0&&typeof u.isDirty==="function"){for(let[m,p]of Object.entries(f)){if(typeof p!=="function")continue;if(!u.isDirty(m))continue;let y=p(u._attributes);if(y&&typeof y.then==="function")throw Error(`Setter for "${m}" returned a Promise - use \`saveAsync()\` instead of \`save()\` when a model has async setters.`);u._attributes[m]=y}let d=l.set;l.set={};try{return ee(u.save(),i,s)}finally{l.set=d}}return ee(u.save(),i,s)};if(a==="updateAsync")return async function(l){if(l&&typeof l==="object"&&!Array.isArray(l))for(let[f,d]of Object.entries(l))s[f]=d;return s.saveAsync()};if(a==="saveQuietly")return function(){return O(()=>u.save())};if(a==="saveAsyncQuietly")return function(){return O(()=>s.saveAsync())};if(a==="updateQuietly")return function(l){return O(()=>u.update(l))};if(a==="updateAsyncQuietly")return function(l){return O(()=>s.updateAsync(l))};if(a==="deleteQuietly")return function(){return O(()=>u.delete())};if(a==="toSearchableObject")return function(){let d=u._definition?.traits?.useSearch;if(!d)return null;let m=u._attributes;if(!m)return null;if(d===!0){let h={...m};if(m.id!=null)h.id=String(m.id);return h}let p={},y=d.displayable?.length?d.displayable:[...d.searchable??[],...d.filterable??[],...d.sortable??[],"id"],b=d.denormalize??{},w=u._relations;for(let h of y){let k=V(h),S=m[k]??m[h];if(S!==void 0){p[k]=S;continue}let Fe=b[h]??b[k];if(Fe){p[k]=br(w,Fe);continue}p[k]=void 0}if(m.id!=null)p.id=String(m.id);return p};if(typeof a==="string"&&!Z(a)){let l=u._attributes;if(l&&Object.hasOwn(l,a))return l[a];let f=u._relations;if(f&&Object.hasOwn(f,a)){let m=f[a];if(Array.isArray(m))return m.map((p)=>x(p,n));return m&&typeof m==="object"?x(m,n):m}let d=yr[a];if(d){let y=u._definition?.__traitMethods?.[d.bag]?.[a];if(typeof y==="function")return d.mode==="model"?(...b)=>y(s,...b):(...b)=>y(u.id,...b)}if(l){let m=W(a);if(m!==a&&Object.hasOwn(l,m))return l[m]}}let c=Reflect.get(u,a,u);return typeof c==="function"?c.bind(u):c},set(i,a,s,u){let c=i;if(typeof a==="string"&&!Z(a)){let{_attributes:l,set:f}=c;if(l&&Object.hasOwn(l,a)){if(typeof f==="function")f.call(c,a,s);else l[a]=s;return!0}if(l){let d=W(a);if(d!==a&&Object.hasOwn(l,d)){if(typeof f==="function")f.call(c,d,s);else l[d]=s;return!0}}if(l&&!(a in c)){if(typeof f==="function")f.call(c,a,s);else l[a]=s;return!0}}return Reflect.set(c,a,s,u)},has(i,a){let s=i;if(typeof a==="string"&&!Z(a)){let u=s._attributes;if(u&&Object.hasOwn(u,a))return!0;let c=s._relations;if(c&&Object.hasOwn(c,a))return!0;if(u){let l=W(a);if(l!==a&&Object.hasOwn(u,l))return!0}}return Reflect.has(s,a)},deleteProperty(i,a){let s=i;if(typeof a==="string"&&!Z(a)){let u=s._attributes;if(u&&Object.hasOwn(u,a))return delete u[a],!0}return Reflect.deleteProperty(s,a)},ownKeys(i){let s=i._attributes;return s?Object.keys(s):[]},getOwnPropertyDescriptor(i,a){let s=i;if(typeof a==="string"){let u=s._attributes;if(u&&Object.hasOwn(u,a))return{configurable:!0,enumerable:!0,value:u[a],writable:!0}}return Object.getOwnPropertyDescriptor(s,a)}},n)Rt.set(n,o);else _t=o;return new Proxy(e,o)}var $t=Object.assign(Object.create(null),{get:!0,first:!0,last:!0,firstOrFail:!0,find:!0,findOrFail:!0,all:!0,paginate:!0,simplePaginate:!0,cursorPaginate:!0}),wr={paginate:ur,simplePaginate:cr,cursorPaginate:sr},St=Symbol.for("stacks.queryBuilderProxy");function At(e,n,t){if($t[n]){if(Array.isArray(e))return e.map((o)=>x(o,t));let r=wr[n];if(r&&e&&Array.isArray(e.data)){let o=e.data.map((a)=>x(a,t)),i=r({...e,data:o});return Se(i)}if(e&&Array.isArray(e.data))return{...e,data:e.data.map((o)=>x(o,t))};return x(e,t)}if(e&&typeof e==="object"&&typeof e.get==="function")return jt(e,t);return e}function jt(e,n){if(!e||typeof e!=="object")return e;if(e[St])return e;return new Proxy(e,{get(t,r,o){if(r===St)return!0;let i=Reflect.get(t,r,o);if(typeof i!=="function")return i;let a=String(r);return function(...s){let u=s;if(a==="paginate"||a==="simplePaginate"){let{perPage:l,page:f}=_e(s[0],s[1]);u=[l,f]}else if(a==="cursorPaginate"){let{perPage:l,cursor:f}=Re(s[0],s[1]);u=[l,f,s[2],s[3]]}let c=i.apply(t,u);if(!$t[a]&&c===t)return o;if(c&&typeof c.then==="function")return c.then((l)=>At(l,a,n));return At(c,a,n)}}})}function hr(e,n){let t=(a)=>Array.isArray(a)?a.map((s)=>x(s,n)):x(a,n),r=["find","first","last","all","firstOrFail","findOrFail","findMany"];for(let a of r){let s=e[a];if(typeof s!=="function")continue;e[a]=function(...u){let c=s.apply(this,u);if(c&&typeof c.then==="function")return c.then(t);return t(c)}}let o=["create","firstOrCreate","updateOrCreate","make"];for(let a of o){let s=e[a];if(typeof s!=="function")continue;e[a]=function(...u){let c=s.apply(this,u);if(c&&typeof c.then==="function")return c.then(t);return t(c)}}let i=["query","where","orWhere","whereIn","whereNotIn","whereNull","whereNotNull","whereLike","whereBetween","whereNotBetween","orderBy","orderByDesc","select","with","limit","take","skip","latest","oldest"];for(let a of i){let s=e[a];if(typeof s!=="function")continue;e[a]=function(...u){let c=s.apply(this,u);return jt(c,n)}}}class Bt extends Error{model;id;constructor(e,n){super(n!=null?`[ORM] ${e} not found for id=${String(n)}`:`[ORM] No matching ${e} row`);this.name="ModelNotFoundError",this.model=e,this.id=n}}class Oe extends Error{model;attribute;reason;constructor(e,n,t){let r=t==="guarded"?`'${n}' is marked guarded`:`'${n}' is not in the fillable allowlist`;super(`[ORM] Mass assignment to ${e} forbidden: ${r}. Use ${e}.forceCreate(...) / .forceUpdate(...) to bypass.`);this.name="MassAssignmentException",this.model=e,this.attribute=n,this.reason=t}}var kr=new Set(["id","created_at","updated_at","deleted_at","uuid"]),xt=new WeakMap;function Tr(e){let n=xt.get(e);if(n)return n;let t=new Set,r=new Set,o=new Set;for(let[a,s]of Object.entries(e)){let u=W(a);if(t.add(u),s?.fillable===!0)r.add(u);if(s?.guarded===!0)o.add(u)}let i={allowed:r.size>0?r:t,guarded:o};return xt.set(e,i),i}function K(e,n,t={}){if(t.force)return n;if(!n||typeof n!=="object"||Array.isArray(n))return n;let r=e.attributes;if(!r)return n;let{allowed:o,guarded:i}=Tr(r);for(let a in n){if(!Object.hasOwn(n,a))continue;let s=W(a);if(kr.has(s))continue;if(i.has(s))throw new Oe(e.name,a,"guarded");if(s.endsWith("_id"))continue;if(!o.has(s))throw new Oe(e.name,a,"not-fillable")}return n}async function Me(e,n){let t=e.set;if(!t||typeof t!=="object")return n;let r={...n};for(let[o,i]of Object.entries(t)){if(typeof i!=="function"||!(o in r))continue;try{r[o]=await i(r)}catch(a){T.error(`[orm] ${e.name}.set.${o} threw - skipping setter`,a)}}return r}function _r(e,n){let t=n.primaryKey||"id",r=e.create;function o(c){let l=e.where;if(typeof l!=="function")throw Error(`[ORM] ${n.name}.${c} needs a working where(): the underlying query builder did not expose one`);return l}function i(c){let l=e.find;if(typeof l!=="function")throw Error(`[ORM] ${n.name}.${c} needs a working find(): the underlying query builder did not expose one`);return l}function a(c){let l=e.create;if(typeof l!=="function")throw Error(`[ORM] ${n.name}.${c} cannot create: the underlying query builder did not expose create()`);return l}if(e.update=async function(c,l){if(c==null)throw Error(`[ORM] ${n.name}.update requires an id as the first argument`);if(!l||typeof l!=="object"||Array.isArray(l))throw Error(`[ORM] ${n.name}.update requires a data object as the second argument`);if(Object.keys(l).length===0){T.debug(`[orm] ${n.name}.update called with empty data - short-circuiting and returning current row`);let m=e.find;return typeof m==="function"?await m.call(e,c):null}K(n,l);let f=await Me(n,l);await o("update").call(e,t,c).update(f);let d=e.find;return typeof d==="function"?await d.call(e,c):null},typeof e.forceUpdate!=="function")e.forceUpdate=async function(c,l){if(c==null)throw Error(`[ORM] ${n.name}.forceUpdate requires an id as the first argument`);if(!l||typeof l!=="object"||Array.isArray(l))throw Error(`[ORM] ${n.name}.forceUpdate requires a data object as the second argument`);let f=await Me(n,l);await o("forceUpdate").call(e,t,c).update(f);let d=e.find;return typeof d==="function"?await d.call(e,c):null};if(typeof e.forceCreate!=="function")e.forceCreate=async function(c){if(!c||typeof c!=="object"||Array.isArray(c))throw Error(`[ORM] ${n.name}.forceCreate requires a data object`);let l=e.make;if(typeof l==="function"){let f=await l.call(e);if(f&&typeof f.forceFill==="function"&&typeof f.save==="function"){f.forceFill(c);let d=await f.save();return d&&typeof d==="object"&&d!==f&&!d[ve]?f:d??f}}if(typeof r!=="function")throw Error(`[ORM] ${n.name}.forceCreate cannot create: the underlying query builder did not expose create()`);return await r.call(e,c)};if(e.delete=async function(c){if(c==null)throw Error(`[ORM] ${n.name}.delete requires an id as the first argument`);if(!await i("delete").call(e,c))return!1;return await o("delete").call(e,t,c).delete(),!0},typeof e.findOrFail!=="function")e.findOrFail=async function(c){let l=await i("findOrFail").call(e,c);if(l==null)throw new Bt(n.name,c);return l};if(typeof e.exists!=="function")e.exists=async function(c){if(c==null)return!1;let l=o("exists").call(e,t,c);if(typeof l.count==="function"){let d=await l.count();return Number(d)>0}let f=e.find;return typeof f==="function"?await f.call(e,c)!=null:!1};if(typeof e.firstOrCreate!=="function")e.firstOrCreate=async function(c,l={}){if(!c||typeof c!=="object"||Array.isArray(c))throw Error(`[ORM] ${n.name}.firstOrCreate requires a where-attrs object`);let f=o("firstOrCreate").call(e,c),d=typeof f.first==="function"?await f.first():await f;if(d)return d;let m={...c,...l};return K(n,m),await a("firstOrCreate").call(e,m)};if(typeof e.updateOrCreate!=="function")e.updateOrCreate=async function(c,l){if(!c||typeof c!=="object"||Array.isArray(c))throw Error(`[ORM] ${n.name}.updateOrCreate requires a where-attrs object`);if(!l||typeof l!=="object"||Array.isArray(l))throw Error(`[ORM] ${n.name}.updateOrCreate requires a values object`);let f=o("updateOrCreate").call(e,c),d=typeof f.first==="function"?await f.first():await f;if(d){K(n,l);let p=d[t];await o("updateOrCreate").call(e,t,p).update(l);let y=e.find;return typeof y==="function"?await y.call(e,p):{...d,...l}}let m={...c,...l};return K(n,m),await a("updateOrCreate").call(e,m)};if(typeof e.count!=="function")e.count=async function(){let c=e;if(typeof c.query==="function"){let d=c.query();if(typeof d?.count==="function"){let m=await d.count();return Number(m)||0}}let{all:l,get:f}=e;if(typeof l==="function")return(await l.call(e)||[]).length;if(typeof f==="function")return(await f.call(e)||[]).length;return 0};if(typeof e.pluck!=="function")e.pluck=async function(c){if(!c||typeof c!=="string")throw Error(`[ORM] ${n.name}.pluck requires a column name`);let l=e.all;return((typeof l==="function"?await l.call(e):[])||[]).map((d)=>d?.[c])};if(typeof e.whereIn!=="function")e.whereIn=async function(c,l){if(!c||typeof c!=="string")throw Error(`[ORM] ${n.name}.whereIn requires a column name`);if(!Array.isArray(l))throw Error(`[ORM] ${n.name}.whereIn requires an array of values`);if(l.length===0)return[];let f=e.where;if(typeof f!=="function")return[];let d=f.call(e,c,"in",l);if(d&&typeof d.get==="function")return await d.get();return await d};let s=[["latest","desc"],["oldest","asc"]];for(let[c,l]of s)if(typeof e[c]!=="function")e[c]=async function(f="created_at"){let d=e,m=typeof d.query==="function"?d.query():d;if(typeof m?.orderBy==="function"){let w=m.orderBy(f,l);if(typeof w.first==="function")return await w.first();if(typeof w.get==="function")return(await w.get())?.[0]??null}let p=e.all;if(typeof p!=="function")return null;return[...await p.call(e)||[]].sort((w,h)=>{let k=w?.[f],S=h?.[f];if(k===S)return 0;return(k>S?1:-1)*(l==="desc"?-1:1)})[0]??null};let u=Ut(n.traits?.useSearch,n);if(u){let c=u.index??n.table??V(`${n.name}s`);if(typeof e.search!=="function")e.search=function(l,f){return Ar(e,c,l,f,u.searchable)};if(typeof e.makeAllSearchable!=="function")e.makeAllSearchable=async function(l=500){let f=e.all;if(typeof f!=="function")throw Error(`[ORM] ${n.name}.makeAllSearchable cannot run: the underlying query builder did not expose all()`);let{useSearchEngine:d}=await import("@stacksjs/search-engine"),m=d(),p=0,y=e.query;if(typeof y==="function")try{let h=y.call(e);if(h&&typeof h.chunk==="function")return await h.chunk(l,async(k)=>{let S=await De(k,u);if(S.length>0)await m.addDocuments(c,S);p+=S.length}),p}catch{}let b=await f.call(e)||[],w=await De(b,u);if(w.length>0)await m.addDocuments(c,w);return w.length};if(typeof e.removeAllFromSearch!=="function")e.removeAllFromSearch=async function(){let{useSearchEngine:l}=await import("@stacksjs/search-engine"),f=l();if(typeof f.deleteAllDocuments==="function"){await f.deleteAllDocuments(c);return}let d=e.all,m=typeof d==="function"?await d.call(e)||[]:[],p=l();for(let y of m){let b=y?.id??y?._attributes?.id;if(b!=null)await p.deleteDocument(c,Number(b))}}}}async function De(e,n){if(e.length===0)return[];if(typeof n.shapeMany==="function"){let r=await n.shapeMany(e);if(!Array.isArray(r)||r.length!==e.length)throw TypeError(`[orm/search] shapeMany returned ${Array.isArray(r)?r.length:typeof r} documents for ${e.length} rows. It must return one document per row, in order, or documents are indexed under the wrong ids.`);return r.filter(Boolean)}return(await Promise.all(e.map((r)=>Sr(r,n)))).filter(Boolean)}function Nt(e){let n=new Set,t=e.attributes??{};for(let[r,o]of Object.entries(t))if(o?.hidden)n.add(r);return n}function Rr(e,n){if(!e||n.size===0)return e;let t={};for(let[r,o]of Object.entries(e))if(!n.has(r))t[r]=o;return t}async function Sr(e,n){if(typeof n.shape==="function")try{return await n.shape(e)}catch{return}let t=e?.toSearchableObject?.();if(t!==void 0)return t;return Rr(e?._attributes??(typeof e?.toJSON==="function"?e.toJSON():null),n.hidden??new Set)}function Ar(e,n,t,r,o){let i=o&&o.length>0?{query_by:[...o].join(",")}:{},a={q:t,...i,...r??{}},s={with(u){return a={...a,...u},s},where(u){return a={...a,filter:u},s},async get(){let{useSearchEngine:u}=await import("@stacksjs/search-engine");return(await u().search(n,a))?.hits??[]},async paginate(u,c=1){let{useSearchEngine:l}=await import("@stacksjs/search-engine"),d=await l().search(n,{...a,limit:u,offset:(c-1)*u});return{hits:d.hits??[],total:Number(d.estimatedTotalHits??d.nbHits??d.total??0),page:c,perPage:u}},async raw(){let{useSearchEngine:u}=await import("@stacksjs/search-engine");return await u().search(n,a)}};return s}function qt(e){let n=V(e);return n===e?[e]:[e,n]}async function Ce(e,n){if(!e||typeof e!=="object")return;let t=e._attributes??e;for(let r of n)for(let o of qt(r)){if(!(o in t))continue;let i=t[o];if(!I(i))continue;t[o]=await ae(i)}}function xr(e,n){if(n.length===0)return;let t=async(s)=>{if(Array.isArray(s)){for(let u of s)await Ce(u,n);return s}if(s&&typeof s==="object"&&Array.isArray(s.data)){for(let u of s.data)await Ce(u,n);return s}if(s)await Ce(s,n);return s},r=["find","first","last","all","firstOrFail","findOrFail","findMany"];for(let s of r){let u=e[s];if(typeof u!=="function")continue;e[s]=async function(...c){let l=await u.apply(this,c);return await t(l)}}let o=["create","firstOrCreate","updateOrCreate","make"];for(let s of o){let u=e[s];if(typeof u!=="function")continue;e[s]=async function(...c){let l=await u.apply(this,c);return await t(l)}}for(let s of["update","forceUpdate"]){let u=e[s];if(typeof u!=="function")continue;e[s]=async function(c,l){let f=await u.call(this,c,l);return await t(f)}}let i=["first","firstOrFail","get","all","find","findOrFail","last","paginate","simplePaginate"],a=(s)=>{if(!s||typeof s!=="object")return s;let u=s;if(u.__stacksEncryptedReads)return s;for(let c of i){let l=u[c];if(typeof l!=="function")continue;u[c]=async function(...f){return await t(await l.apply(this,f))}}for(let c of["where","whereIn","whereNull","whereNotNull","orWhere","orderBy","orderByDesc","limit","offset","with"]){let l=u[c];if(typeof l!=="function")continue;u[c]=function(...f){return a(l.apply(this,f))}}return Object.defineProperty(u,"__stacksEncryptedReads",{value:!0,enumerable:!1}),s};for(let s of["where","whereIn","whereNull","whereNotNull","orderBy","orderByDesc","limit","query"]){let u=e[s];if(typeof u!=="function")continue;e[s]=function(...c){return a(u.apply(this,c))}}}function Pr(e,n){if(n.length===0)return;let t=async(o)=>{if(!o||typeof o!=="object"||Array.isArray(o))return o;let i={...o};for(let a of n)for(let s of qt(a))if(s in i)i[s]=await ie(i[s]);return i},r=["create","firstOrCreate","updateOrCreate","forceCreate"];for(let o of r){let i=e[o];if(typeof i!=="function")continue;e[o]=async function(...a){if(a[0]=await t(a[0]),a[1])a[1]=await t(a[1]);return await i.apply(this,a)}}for(let o of["update","forceUpdate"]){let i=e[o];if(typeof i!=="function")continue;e[o]=async function(a,s){let u=await t(s);return await i.call(this,a,u)}}}function Cr(e,n){let t=e.create;if(typeof t==="function")e.create=async function(r,...o){K(n,r);let i=await Me(n,r);return await t.call(this,i,...o)};for(let r of["firstOrCreate","updateOrCreate"]){let o=e[r];if(typeof o!=="function")continue}}function vr(e,n){if(!et(n))return;let t=String(n?.name??e.name??"Model"),r=(a,s)=>{if(lr())return;if(!a||typeof a!=="object"||Array.isArray(a))return;let u=tt(a,n,s);if(!u.valid)throw new Ft(t,u.errors)},o=e.create;if(typeof o==="function")e.create=async function(a,...s){return r(a,"creating"),await o.call(this,a,...s)};let i=e.update;if(typeof i==="function")e.update=async function(a,s,...u){return r(s,"updating"),await i.call(this,a,s,...u)}}function Or(e,n){let t=["create","firstOrCreate","updateOrCreate"];for(let o of t){let i=e[o];if(typeof i==="function")e[o]=async function(...a){if(T.debug(`[orm] ${o.charAt(0).toUpperCase()+o.slice(1)} ${String(e.name||"unknown")}`,a[0]),a[0]&&typeof a[0]==="object"&&!Array.isArray(a[0]))a[0]=Tt(a[0],n,"set");return await i.apply(this,a)}}let r=e.update;if(typeof r==="function")e.update=async function(o,i){let a=i&&typeof i==="object"&&!Array.isArray(i)?Tt(i,n,"set"):i;return await r.call(this,o,a)}}var Pt=new Set(["useUuid","useTimestamps","timestampable","useSoftDeletes","softDeletable","useApi","useAuth","authenticatable","useSearch","searchable","useSeeder","seedable","useSocials","billable","observe","useAudit","useActivityLog","prunable","sharding","likeable","taggable","categorizable","commentable","commentables","broadcastOn","broadcastWith"]);function Lt(e){T.debug(`[orm] Defining model: ${e.name} (table: ${e.table})`);for(let y of Object.keys(e.traits??{}))if(!Pt.has(y))T.warn(`[orm] Model '${e.name}' declares an unknown trait '${y}'. It does nothing. Known traits: ${[...Pt].sort().join(", ")}.`);let n=Mr(e),t=Er(e),r=Dr(n,t),o=Fr(e);e.__traitMethods=o;let i=e.traits;if((i?.useAuth||i?.authenticatable)&&e.name!=="PersonalAccessToken"){let y=e.morphMany;if(!y||!("tokenable"in y))e.morphMany={...y??{},tokenable:"PersonalAccessToken"}}let a=r?{...e,hooks:{...e.hooks,...r}}:e,u=ir(a);if(hr(u,e.casts),_r(u,a),Cr(u,a),e.casts&&Object.keys(e.casts).length>0)Or(u,e.casts);let c=se(e);if(c.length>0)Pr(u,c),xr(u,c);let l=e.traits?.useSoftDeletes;if(l)Ir(u,a,l);let f=e.traits?.useAudit;if(f){let y=Ke(f);We(u,e.name,e.primaryKey||"id",y)}let d=gt(e.traits?.useActivityLog);if(d)yt(u,e.name,e.primaryKey||"id",d,[...Nt(e)]);vr(u,a);let m=u;m.withoutValidation=function(y){return dr(y)},m.withoutEvents=function(y){return O(y)};for(let y of["create","update","firstOrCreate","updateOrCreate","forceCreate","forceUpdate","delete","forceDelete","softDelete","restore"]){let b=u[y];if(typeof b!=="function")continue;let w=`${y}Quietly`;if(typeof u[w]==="function")continue;u[w]=function(...h){return O(()=>b.apply(u,h))}}let p=Object.assign(u,o,{...e,getDefinition:()=>e,_isStacksModel:!0});return ar(e.name,p),Object.defineProperty(p,Ee,{value:e,enumerable:!1,configurable:!0}),p}function Mr(e){let n=e.traits?.observe;if(!n)return;let t=e.name.toLowerCase(),r=(d)=>{let m=d?.attributes;if(!m||typeof m!=="object")return d;let p=e.primaryKey||"id",y={...m};if(y[p]===void 0&&d[p]!==void 0)y[p]=d[p];return y},o=async(d,m)=>{if(M())return;try{let{dispatch:p}=te??=await import("@stacksjs/events");await p(d,m)}catch(p){if(p&&typeof p==="object"&&"code"in p&&p.code==="MODULE_NOT_FOUND")return;if(console.error(`[ORM] Event '${d}' handler error:`,p),process.env.STACKS_ORM_EVENT_ERRORS!=="swallow")throw p}},i=e.traits?.broadcastOn,a=e.traits?.broadcastWith,s=typeof i==="function"&&typeof a==="function",u=async(d,m)=>{if(!s)return;if(M())return;try{let p=i(m),y=Array.isArray(p)?p:[p],b=a(m),h=(await import("@stacksjs/realtime").catch(()=>null))?.broadcast;if(typeof h!=="function")return;for(let k of y){if(typeof k!=="string"||k.length===0)continue;await h(k,d,b)}}catch(p){if(p&&typeof p==="object"&&"code"in p&&p.code==="MODULE_NOT_FOUND")return;if(console.error(`[ORM] Broadcast '${d}' handler error:`,p),process.env.STACKS_ORM_BROADCAST_ERRORS==="throw")throw p}},c=async(d,m)=>{if(M())return!0;let p;try{p=te??=await import("@stacksjs/events");let{dispatchAndCollect:y}=p,b=await y(d,m);if(b.some((h)=>h.ok&&h.value===!1))return!1;let w=b.find((h)=>!h.ok);if(w&&!w.ok)throw w.error}catch(y){if(!p&&y&&typeof y==="object"&&"code"in y&&y.code==="MODULE_NOT_FOUND")return!0;if(console.error(`[ORM] Before-event '${d}' handler error:`,y),process.env.STACKS_ORM_EVENT_ERRORS!=="swallow")throw y}return!0},l=n===!0?["create","update","delete"]:Array.isArray(n)?n:[],f={};if(l.includes("create"))f.beforeCreate=async(d)=>{if(T.debug(`[orm] Create ${t}`,d),!await c(`${t}:saving`,d))throw Error(`[ORM] ${t}:saving event cancelled the operation`);if(!await c(`${t}:creating`,d))throw Error(`[ORM] ${t}:creating event cancelled the operation`)},f.afterCreate=async(d)=>{let m=r(d);await o(`${t}:created`,m),await o(`${t}:saved`,m),await u(`${t}:created`,d)};if(l.includes("update"))f.beforeUpdate=async(d)=>{if(T.debug(`[orm] Update ${t}#${d?.id??"unknown"}`,d),!await c(`${t}:saving`,d))throw Error(`[ORM] ${t}:saving event cancelled the operation`);if(!await c(`${t}:updating`,d))throw Error(`[ORM] ${t}:updating event cancelled the operation`)},f.afterUpdate=async(d)=>{let m=r(d);await o(`${t}:updated`,m),await o(`${t}:saved`,m),await u(`${t}:updated`,d)};if(l.includes("delete"))f.beforeDelete=async(d)=>{if(T.debug(`[orm] Delete ${t}#${d?.id??"unknown"}`),!await c(`${t}:deleting`,d))throw Error(`[ORM] ${t}:deleting event cancelled the operation`)},f.afterDelete=async(d)=>{await o(`${t}:deleted`,r(d)),await u(`${t}:deleted`,d)};return f}function Dr(...e){let n={},t=new Set;for(let r of e){if(!r)continue;for(let o of Object.keys(r))t.add(o)}for(let r of t){let o=e.map((i)=>i?.[r]).filter((i)=>typeof i==="function");if(!o.length)continue;n[r]=async(...i)=>{for(let a of o)await a(...i)}}return Object.keys(n).length?n:void 0}function Ut(e,n){if(!e)return null;let t=e===!0?{}:typeof e==="object"?{...e}:null;if(!t)return null;if(n)t.hidden=Nt(n);return t}function Er(e){let n=Ut(e.traits?.useSearch,e);if(!n)return;let t=n,r=t.index??e.table??V(`${e.name}s`);async function o(s){if(typeof t.shapeMany==="function")try{let[l]=await De([s],t);return l}catch(l){T.warn(`[orm/search] shapeMany() threw for ${e.name}: ${l.message}`);return}if(typeof t.shape==="function")try{return await t.shape(s)}catch(l){T.warn(`[orm/search] shape() threw for ${e.name}: ${l.message}`);return}let c=x(s).toSearchableObject?.();if(c!==void 0)return c;return s?._attributes??(typeof s?.toJSON==="function"?s.toJSON():null)}let i=async(s)=>{if(M())return;let u=await o(s);if(!u)return;if(n.queueable){try{let{Jobs:c}=await import("@stacksjs/queue");await c.dispatch("SyncSearchIndexJob",{index:r,op:"upsert",doc:u})}catch(c){T.warn(`[orm/search] queue dispatch failed for ${e.name}; falling back to inline: ${c.message}`),await vt(r,u,e.name)}return}await vt(r,u,e.name)};return{afterCreate:i,afterUpdate:i,afterDelete:async(s)=>{if(M())return;let u=s?.id??s?._attributes?.id;if(u==null)return;if(n.queueable){try{let{Jobs:c}=await import("@stacksjs/queue");await c.dispatch("SyncSearchIndexJob",{index:r,op:"delete",id:Number(u)})}catch(c){T.warn(`[orm/search] queue dispatch failed for ${e.name}#${u}; falling back to inline: ${c.message}`),await Ot(r,Number(u),e.name)}return}await Ot(r,Number(u),e.name)}}}var Ct=new Map;function Kt(e,n){let t=Ct.get(e)??0;if(Ct.set(e,t+1),t===0)T.warn(`[orm/search] ${n}`);else if(t===9)T.warn(`[orm/search] ${e} is still failing; further identical warnings suppressed for this process.`)}async function vt(e,n,t){try{let{useSearchEngine:r}=await import("@stacksjs/search-engine");await r().addDocument(e,n)}catch(r){Kt(`index:${t}`,`Failed to index ${t}: ${r.message}`)}}async function Ot(e,n,t){try{let{useSearchEngine:r}=await import("@stacksjs/search-engine");await r().deleteDocument(e,n)}catch(r){Kt(`remove:${t}`,`Failed to remove ${t}#${n}: ${r.message}`)}}function Fr(e){let n={},{table:t,traits:r}=e;if(!r)return n;if(r.taggable)n._taggable=me(t);if(r.categorizable)n._categorizable=ge(t);if(r.commentable)n._commentable=fe(t);if(r.billable)n._billable=at(t);if(r.likeable){let i=typeof r.likeable==="object"?r.likeable:void 0;n._likeable=ye(t,i)}let o=r.useAuth||r.authenticatable;if(typeof o==="object"&&o&&"useTwoFactor"in o&&o.useTwoFactor)n._twoFactor=st();return n}function Ir(e,n,t){let r=ut(e,n.primaryKey||"id"),o=ct(t),i=n,a=n.name.toLowerCase(),s=n.traits?.observe!=null&&n.traits?.observe!==!1,u=async(m)=>{if(!s||M())return!0;try{let{dispatchAsync:p}=te??=await import("@stacksjs/events"),y=await p(`${a}:restoring`,{id:m});if(Array.isArray(y)&&y.some((b)=>b===!1))return!1}catch(p){if(p?.code!=="MODULE_NOT_FOUND")console.error(`[ORM] Before-event '${a}:restoring' handler error:`,p)}return!0},c=async(m)=>{if(!s||M())return;try{let{dispatch:p}=te??=await import("@stacksjs/events");await p(`${a}:restored`,{id:m})}catch(p){if(p?.code!=="MODULE_NOT_FOUND")console.error(`[ORM] Event '${a}:restored' handler error:`,p)}},l=process.env.STACKS_ORM_CASCADE_SWALLOW!=="true",f=async(m)=>{if(!o.cascade?.length||!l){let y=await r.softDelete(m);if(y&&o.cascade?.length)await U(i,o,m,"softDelete");return y}let{db:p}=await import("@stacksjs/database/runtime");return await p.transaction(async()=>{let y=await r.softDelete(m);if(y)await U(i,o,m,"softDelete");return y})},d=async(m)=>{if(!await u(m))return!1;if(!o.cascade?.length||!l){let w=await r.restore(m);if(w){if(o.cascade?.length)await U(i,o,m,"restore");await c(m)}return w}let{db:y}=await import("@stacksjs/database/runtime"),b=await y.transaction(async()=>{let w=await r.restore(m);if(w)await U(i,o,m,"restore");return w});if(b)await c(m);return b};e.softDelete=f,e.restore=d,e.forceDelete=r.forceDelete,e.withTrashed=r.withTrashed,e.onlyTrashed=r.onlyTrashed,e.delete=f}function $r(e){if(e==null)return e;if(Array.isArray(e))return e.map((t)=>$r(t));if(typeof e!=="object")return e;let n=e;if(typeof n.toJSON==="function")return n.toJSON();if(n._attributes&&typeof n._attributes==="object")return n._attributes;return e}var jr=["belongsTo","hasOne","hasMany","belongsToMany","morphMany","morphOne"],Br=["traits","dashboard"];function Nr(e){let n=e?.[Ee];if(n&&typeof n==="object")return n;if(e&&typeof e==="object"&&"name"in e&&"attributes"in e)return e;throw TypeError("extendModel() expects a model created by defineModel(), or a model definition. Import the framework model itself rather than its table name.")}function qr(e,n){let t=Array.isArray(e)?e:[],r=Array.isArray(n)?n:[];if(!t.length&&!r.length)return;return[...new Set([...t,...r])]}function Lr(e){if(!e)return 0;return Object.values(e).reduce((n,t)=>{let r=Number(t?.order);return Number.isFinite(r)&&r>n?r:n},0)}function Ur(e,n){let t={...e,...n},r=e.attributes??{},o=n.attributes??{};if(n.attributes){let i=Lr(r),a=Object.fromEntries(Object.entries(o).map(([s,u])=>{let c=!(s in r),l=Number.isFinite(Number(u?.order));if(c&&!l)return[s,{...u,order:++i}];return[s,u]}));t.attributes={...r,...a}}for(let i of jr){let a=qr(e[i],n[i]);if(a)t[i]=a}for(let i of Br){let a=e[i],s=n[i];if(a&&s&&typeof a==="object"&&typeof s==="object")t[i]={...a,...s}}return t}function Ns(e,n){return Lt(Ur(Nr(e),n))}import Jr from"process";import{log as Yr}from"@stacksjs/logging";import{path as _}from"@stacksjs/path";import{fs as Q}from"@stacksjs/storage";import{Database as Kr}from"bun:sqlite";import{existsSync as Wr,readdirSync as Vr,readFileSync as Qr}from"fs";function zr(e){return e.startsWith("sqlite_")||e.startsWith("_qb_tmp_")}function Hr(e,n){let t=e.toUpperCase();if(t.includes("BOOL"))return n==="postgres"?"boolean":"number";if(t.includes("DATE")||t.includes("TIME"))return"string";if(t.includes("INT"))return"number";if(t.includes("CHAR")||t.includes("CLOB")||t.includes("TEXT"))return"string";if(t.includes("REAL")||t.includes("FLOA")||t.includes("DOUB")||t.includes("NUMERIC")||t.includes("DEC"))return"number";if(t.includes("BLOB"))return"Uint8Array";return"unknown"}function Gr(e,n){try{return e.exec(n),{ok:!0}}catch(t){if(/CREATE\s+TRIGGER/i.test(n))return{ok:!1,error:t.message};let r=0;for(let o of n.split(/;\s*$/m)){if(!o.trim())continue;try{e.exec(o),r++}catch{}}return r>0?{ok:!0}:{ok:!1,error:t.message}}}function Wt(e,n="sqlite"){let t=[];if(!Wr(e))return{tables:[],errors:t};let r;try{r=Vr(e).filter((i)=>i.endsWith(".sql")).sort()}catch(i){return{tables:[],errors:[{file:e,error:i.message}]}}let o=new Kr(":memory:");try{for(let s of r){let u=`${e}/${s}`,c;try{c=Qr(u,"utf-8")}catch(f){t.push({file:u,error:f.message});continue}let l=Gr(o,c);if(!l.ok)t.push({file:u,error:l.error??"could not be applied"})}let i=o.query("SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name").all().map((s)=>s.name).filter((s)=>!zr(s)),a=[];for(let s of i){let u=o.query(`PRAGMA table_info("${s.replace(/"/g,'""')}")`).all();if(u.length===0)continue;let c={};for(let l of u){let f=Hr(l.type??"",n),d=l.notnull===0&&l.pk===0;c[l.name]=d&&f!=="unknown"?`${f} | null`:f}a.push({table:s,columns:c})}return{tables:a,errors:t}}finally{o.close()}}function Xr(e){if(e)return e;let n=String(Jr.env.DB_CONNECTION??"").toLowerCase();return n==="postgres"||n==="mysql"?n:"sqlite"}function ne(e){return e==="postgres"?"boolean":"number"}function P(e){return e.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").toLowerCase()}function Zr(e,n){let t=e.default;if(typeof t==="boolean")return ne(n);if(typeof t==="number")return"number";if(typeof t==="string")return"string";return"unknown"}function eo(e){let n=e.validation;if(!n||typeof n!=="object")return null;let t=n.rule;return t&&typeof t==="object"?t:null}function to(e){if(!e||String(e.name??"")!=="enum")return null;let t=(Array.isArray(e.allowedValues)?e.allowedValues:[]).filter((r)=>typeof r==="string"||typeof r==="number").map((r)=>typeof r==="number"?String(r):JSON.stringify(r));return t.length>0?t.join(" | "):null}function no(e,n){let t=eo(e),r=to(t);if(r!==null)return e.nullable===!0?`${r} | null`:r;let o=typeof e.type==="string"?e.type.toLowerCase():String(t?.name??"").toLowerCase(),i=(()=>{switch(o){case"string":case"text":case"longtext":case"mediumtext":case"tinytext":case"char":case"varchar":case"enum":case"uuid":case"date":case"datetime":case"timestamp":case"timestamptz":case"password":case"time":case"year":return"string";case"number":case"integer":case"int":case"tinyint":case"smallint":case"mediumint":case"float":case"double":case"decimal":case"numeric":return"number";case"bigint":return"number | bigint";case"boolean":case"bool":return ne(n);case"json":case"jsonb":return"unknown";case"binary":case"blob":case"bytea":return"Uint8Array";case"unix":return"number";case"array":return"unknown[]";case"object":return"Record<string, unknown>";default:return Zr(e,n)}})();return e.nullable===!0?`${i} | null`:i}function ro(e){let n={},t=e.belongsTo;if(!t)return n;let r=Array.isArray(t)?t:Object.values(t);for(let o of r){if(typeof o==="string"){n[`${P(o)}_id`]="number";continue}if(o&&typeof o==="object"){let i=o;if(typeof i.foreignKey==="string"){n[i.foreignKey]="number";continue}if(typeof i.model==="string")n[`${P(i.model)}_id`]="number"}}return n}function oo(e,n){let[t,r]=[P(e),P(n)].sort();return`${t}_${r}`}function io(e,n){let t=e.default,r=typeof t==="string"?"string":typeof t==="number"?"number":typeof t==="boolean"?ne(n):t instanceof Date?"string":"unknown";return e.nullable?`${r} | null`:r}function ao(e,n,t){let r=n.belongsToMany;if(!r)return[];let o=[],i=Array.isArray(r)?r:Object.values(r);for(let a of i){let s,u,c,l,f={},d=!0;if(typeof a==="string")s=a;else if(a&&typeof a==="object"&&"model"in a){let w=a;if(s=w.model,"pivotTable"in w||"firstForeignKey"in w||"secondForeignKey"in w)u=w.pivotTable,c=w.firstForeignKey,l=w.secondForeignKey;else{let h=a;u=h.table,c=h.foreignKey,l=h.relatedKey,f=h.pivot?.columns??{},d=Boolean(h.pivot?.timestamps)}}else continue;let m=u??oo(e,s),p=c??`${P(e)}_id`,y=l??`${P(s)}_id`,b={id:"number",[p]:"number",[y]:"number"};for(let[w,h]of Object.entries(f))b[w]=io(h,t);if(d)b.created_at="string",b.updated_at="string | null";o.push({table:m,columns:b})}return o}function so(e){return{email_verified_at:"string | null",password_changed_at:"string | null",two_factor_secret:"string | null",two_factor_enabled:`${ne(e)} | null`,two_factor_last_used_step:"number | null",stripe_id:"string | null"}}function uo(e,n){let t={id:"number"},r=e.traits??{};if(r.useUuid)t.uuid="string";if((r.useTimestamps??r.timestampable)!==!1)t.created_at="string",t.updated_at="string | null";if(r.useSoftDeletes??r.softDeletable)t.deleted_at="string | null";if((e.table??"")==="users"||e.name==="User")Object.assign(t,so(n));return t}function co(e,n){let t={},r=e.attributes??{};for(let[o,i]of Object.entries(r))t[P(o)]=no(i,n);return t}function Vt(e,n,t=2){let r=" ".repeat(t),o=" ".repeat(t+1),i=Object.entries(n).map(([s,u])=>`${o}${s}: ${u}`).join(`
|
|
3
|
+
`),a=/^[A-Z_a-z]\w*$/.test(e)?e:`'${e}'`;return`${r}${a}: {
|
|
4
4
|
${o}// columns
|
|
5
|
-
${
|
|
6
|
-
${r}}`}var
|
|
5
|
+
${i}
|
|
6
|
+
${r}}`}var lo=`/* eslint-disable */
|
|
7
7
|
// AUTO-GENERATED by \`buddy generate:db-types\` \u2014 do not edit.
|
|
8
8
|
// Regenerate after adding/removing a model or changing its attributes.
|
|
9
9
|
// See stacksjs/stacks#1923.
|
|
10
10
|
|
|
11
11
|
declare module '@stacksjs/database' {
|
|
12
12
|
interface DatabaseSchema {
|
|
13
|
-
`,
|
|
13
|
+
`,fo=` }
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
export {}
|
|
17
|
-
`,
|
|
18
|
-
`;function
|
|
19
|
-
`),m=`${
|
|
20
|
-
${
|
|
21
|
-
`);return`${
|
|
22
|
-
${Qt(n)}`}import{isCursorPaginator as Au,isPaginator as xu,isSimplePaginator as Pu,toCursorPaginator as Cu,toPaginator as vu,toSimplePaginator as Ou}from"@stacksjs/pagination";import{configureOrm as yo}from"@stacksjs/query-builder";function bo(){try{let e=process.env.DB_DATABASE_PATH||"database/stacks.sqlite";if((process.env.DB_CONNECTION||"sqlite")==="sqlite")yo({database:e})}catch{}}bo();async function Ht(e){for(let n=0;;n++){let t=await import(e);try{return t.default}catch(r){if(n<5&&r instanceof ReferenceError&&/before initialization/.test(r.message)){await new Promise((o)=>setTimeout(o,0));continue}throw r}}}async function ne(e,n=[""]){let{path:t}=await import("@stacksjs/path"),r=t.userModelsPath(`${e}.ts`);try{if(await Bun.file(r).exists())return await Ht(r)}catch(o){console.error(`[orm] Failed to import userland model ${e} from ${r} - falling back to framework default. Reason:`,o)}for(let o of n){let a=o?`${o}/`:"",i=t.frameworkPath(`defaults/app/Models/${a}${e}.ts`);try{if(await Bun.file(i).exists())return await Ht(i)}catch(s){console.error(`[orm] Failed to import framework default model ${e} from ${i} - trying next subdir. Reason:`,s)}}return null}var C={},Gt=()=>{},Ys=new Promise((e)=>{Gt=e});function g(e){return new Proxy(function(){},{get(n,t){if(t==="then")return;let r=C[e];if(r==null)return;let o=r[t];return typeof o==="function"?o.bind(r):o},set(n,t,r){let o=C[e];if(o==null)return!1;return o[t]=r,!0},has(n,t){let r=C[e];return r==null?!1:(t in r)},apply(n,t,r){let o=C[e];if(o==null||typeof o!=="function")return;return o.apply(t,r)}})}var wo=g("User"),ho=g("Job"),ko=g("FailedJob"),To=[["Referral",[""],"auth"],["ReferralCode",[""],"auth"],["Team",[""],"auth"],["TeamInvitation",[""],"auth"],["TeamMember",[""],"auth"],["SocialAccount",[""],"auth"],["Subscriber",[""],"auth"],["SubscriberEmail",[""],"auth"],["Subscription",[""],"auth"],["Categorizable",["Content"],"cms"],["Post",["Content"],"cms"],["Page",["Content"],"cms"],["PageRevision",["Content"],"cms"],["Redirect",["Content"],"cms"],["Menu",["Content"],"cms"],["MenuItem",["Content"],"cms"],["Author",["Content"],"cms"],["Comment",[""],"cms"],["Tag",[""],"cms"],["Site",[""],"auth"],["SiteDomain",[""],"auth"],["MagicLinkToken",[""],"auth"],["SmsOptOut",[""],"auth"],["Form",["Forms"],"forms"],["FormField",["Forms"],"forms"],["FormSubmission",["Forms"],"forms"],["Activity",[""],"dashboard"],["Board",[""],"dashboard"],["BoardColumn",[""],"dashboard"],["Card",[""],"dashboard"],["CardComment",[""],"dashboard"],["Deployment",[""],"dashboard"],["Label",[""],"dashboard"],["Release",[""],"dashboard"],["Notification",[""],"dashboard"],["NotificationDelivery",[""],"dashboard"],["PersonalAccessToken",[""],"dashboard"],["MailPreference",[""],"dashboard"],["Log",[""],"dashboard"],["Request",[""],"dashboard"],["AnalyticsEvent",[""],"dashboard"],["QueryLog",[""],"dashboard"],["StorageItem",[""],"dashboard"],["StorageItemTask",[""],"dashboard"],["Error",[""],"monitoring"],["Websocket",["realtime"],"realtime"],["Campaign",[""],"marketing"],["CampaignSend",[""],"marketing"],["EmailList",[""],"marketing"],["EmailListSubscriber",[""],"marketing"],["EmailIdempotency",[""],"marketing"],["EmailSuppression",[""],"marketing"],["EmailWebhookEvent",[""],"marketing"],["SocialPost",[""],"marketing"],["Automation",[""],"marketing"],["AutomationRun",[""],"marketing"],["CampaignVariant",[""],"marketing"],["CommunicationSuppression",[""],"marketing"],["ConsentEvent",[""],"marketing"],["SenderDomain",[""],"marketing"],["UsageEvent",[""],"marketing"],["PaymentMethod",[""],"commerce"],["PaymentProduct",[""],"commerce"],["PaymentTransaction",[""],"commerce"],["Order",["commerce"],"commerce"],["OrderIdempotency",["commerce"],"commerce"],["OrderItem",["commerce"],"commerce"],["Cart",["commerce"],"commerce"],["CartItem",["commerce"],"commerce"],["Customer",["commerce"],"commerce"],["Product",["commerce"],"commerce"],["ProductVariant",["commerce"],"commerce"],["ProductUnit",["commerce"],"commerce"],["Manufacturer",["commerce"],"commerce"],["Category",["commerce"],"commerce"],["Coupon",["commerce"],"commerce"],["GiftCard",["commerce"],"commerce"],["LicenseKey",["commerce"],"commerce"],["Review",["commerce"],"commerce"],["Receipt",["commerce"],"commerce"],["PrintDevice",["commerce"],"commerce"],["ShippingMethod",["commerce"],"commerce"],["ShippingRate",["commerce"],"commerce"],["ShippingZone",["commerce"],"commerce"],["DeliveryRoute",["commerce"],"commerce"],["DeliveryStop",["commerce"],"commerce"],["DigitalDelivery",["commerce"],"commerce"],["Courier",["commerce"],"commerce"],["CourierPing",["commerce"],"commerce"],["TaxRate",["commerce"],"commerce"],["WaitlistProduct",["commerce"],"commerce"],["WaitlistRestaurant",["commerce"],"commerce"],["Auction",["commerce"],"commerce"],["AuctionItem",["commerce"],"commerce"],["Bid",["commerce"],"commerce"],["Pledge",["commerce"],"commerce"],["LoyaltyPoint",["commerce"],"commerce"],["LoyaltyReward",["commerce"],"commerce"],["Payment",["commerce"],"commerce"],["Transaction",["commerce"],"commerce"]];queueMicrotask(async()=>{try{let{feature:e}=await import("@stacksjs/config"),n=await ne("User");if(n)C.User=n;if(e("queue")){let t=await ne("Job");if(t)C.Job=t;let r=await ne("FailedJob");if(r)C.FailedJob=r}for(let[t,r,o]of To){if(!e(o))continue;let a=await ne(t,r);if(a)C[t]=a}}catch(e){console.error("[orm] deferred model load failed:",e)}finally{Gt()}});var _o=g("Activity"),Ro=g("AnalyticsEvent"),So=g("Automation"),Ao=g("AutomationRun"),xo=g("Auction"),Po=g("CampaignVariant"),Co=g("CommunicationSuppression"),vo=g("ConsentEvent"),Oo=g("SenderDomain"),Mo=g("UsageEvent"),Do=g("AuctionItem"),Eo=g("Author"),Fo=g("Bid"),Io=g("Board"),$o=g("BoardColumn"),jo=g("Campaign"),Bo=g("Card"),No=g("CardComment"),qo=g("Cart"),Lo=g("CartItem"),Uo=g("Category"),Ko=g("Comment"),Wo=g("Coupon"),Vo=g("Customer"),Qo=g("DeliveryRoute"),zo=g("DeliveryStop"),Ho=g("Deployment"),Go=g("DigitalDelivery"),Jo=g("Courier"),Yo=g("CourierPing"),Xo=g("CampaignSend"),Zo=g("EmailList"),ea=g("EmailListSubscriber"),ta=g("Form"),na=g("FormField"),ra=g("FormSubmission"),oa=g("MagicLinkToken"),aa=g("Menu"),ia=g("MenuItem"),sa=g("PageRevision"),ua=g("Pledge"),ca=g("Redirect"),la=g("Site"),da=g("SiteDomain"),fa=g("SmsOptOut"),Xs=g("StorageItem"),Zs=g("StorageItemTask"),pa=g("EmailIdempotency"),ma=g("EmailSuppression"),ga=g("EmailWebhookEvent"),ya=g("Error"),ba=g("GiftCard"),wa=g("Label"),ha=g("LicenseKey"),ka=g("Log"),Ta=g("LoyaltyPoint"),_a=g("LoyaltyReward"),Ra=g("MailPreference"),Sa=g("Manufacturer"),Aa=g("Notification"),xa=g("NotificationDelivery"),Pa=g("Order"),Ca=g("OrderIdempotency"),eu=g("PersonalAccessToken"),va=g("OrderItem"),Oa=g("Page"),Ma=g("Payment"),Da=g("PaymentMethod"),Ea=g("PaymentProduct"),Fa=g("PaymentTransaction"),Ia=g("Post"),$a=g("Categorizable"),ja=g("PrintDevice"),Ba=g("Product"),Na=g("ProductUnit"),qa=g("ProductVariant"),La=g("QueryLog"),Ua=g("Receipt"),tu=g("Referral"),nu=g("ReferralCode"),Ka=g("Release"),Wa=g("Request"),Va=g("Review"),Qa=g("ShippingMethod"),za=g("ShippingRate"),Ha=g("ShippingZone"),Ga=g("SocialPost"),Ja=g("SocialAccount"),Ya=g("Subscriber"),Xa=g("SubscriberEmail"),Za=g("Subscription"),ei=g("Tag"),ti=g("TaxRate"),ni=g("Team"),ri=g("TeamInvitation"),oi=g("TeamMember"),ai=g("Transaction"),ii=g("WaitlistProduct"),si=g("WaitlistRestaurant"),ui=g("Websocket"),Jt={User:wo,Job:ho,FailedJob:ko,Activity:_o,AnalyticsEvent:Ro,Automation:So,AutomationRun:Ao,Auction:xo,AuctionItem:Do,Author:Eo,Bid:Fo,Board:Io,BoardColumn:$o,Campaign:jo,CampaignSend:Xo,CampaignVariant:Po,Card:Bo,CardComment:No,Cart:qo,CartItem:Lo,Categorizable:$a,Category:Uo,Comment:Ko,Coupon:Wo,Customer:Vo,CommunicationSuppression:Co,ConsentEvent:vo,DeliveryRoute:Qo,DeliveryStop:zo,Deployment:Ho,DigitalDelivery:Go,Courier:Jo,CourierPing:Yo,EmailList:Zo,EmailListSubscriber:ea,EmailIdempotency:pa,EmailSuppression:ma,EmailWebhookEvent:ga,ErrorModel:ya,Form:ta,FormField:na,FormSubmission:ra,GiftCard:ba,Label:wa,LicenseKey:ha,Log:ka,LoyaltyPoint:Ta,LoyaltyReward:_a,MailPreference:Ra,Manufacturer:Sa,Notification:Aa,MagicLinkToken:oa,Menu:aa,MenuItem:ia,NotificationDelivery:xa,Order:Pa,OrderIdempotency:Ca,OrderItem:va,Page:Oa,PageRevision:sa,Payment:Ma,PaymentMethod:Da,PaymentProduct:Ea,PaymentTransaction:Fa,Pledge:ua,Post:Ia,PrintDevice:ja,Product:Ba,ProductUnit:Na,ProductVariant:qa,QueryLog:La,Receipt:Ua,Release:Ka,Request:Wa,Review:Va,ShippingMethod:Qa,Redirect:ca,SenderDomain:Oo,ShippingRate:za,ShippingZone:Ha,Site:la,SiteDomain:da,SmsOptOut:fa,SocialAccount:Ja,SocialPost:Ga,Subscriber:Ya,SubscriberEmail:Xa,Subscription:Za,Tag:ei,TaxRate:ti,Team:ni,TeamInvitation:ri,TeamMember:oi,Transaction:ai,UsageEvent:Mo,WaitlistProduct:ii,WaitlistRestaurant:si,Websocket:ui},F=globalThis;for(let[e,n]of Object.entries(Jt))if(n&&F[e]===void 0)F[e]=n;var ru=Object.keys(Jt);async function ci(e){if(!e)return[];try{if(typeof e.all==="function"){let n=await e.all();return Array.isArray(n)?n:[]}if(typeof e.get==="function"){let n=await e.get();return Array.isArray(n)?n:[]}}catch{}return[]}function li(e,n,t=""){if(!e)return t;try{if(typeof e.get==="function"){let o=e.get(n);if(o!==void 0&&o!==null)return o}}catch{}let r=e?.[n];return r!==void 0&&r!==null?r:t}if(F.safeAll===void 0)F.safeAll=ci;if(F.safeGet===void 0)F.safeGet=li;export{_o as Activity,Ro as AnalyticsEvent,xo as Auction,Do as AuctionItem,Eo as Author,So as Automation,Ao as AutomationRun,Fo as Bid,Io as Board,$o as BoardColumn,jo as Campaign,Xo as CampaignSend,Po as CampaignVariant,Bo as Card,No as CardComment,qo as Cart,Lo as CartItem,$a as Categorizable,Uo as Category,Ko as Comment,Co as CommunicationSuppression,vo as ConsentEvent,Wo as Coupon,Jo as Courier,Yo as CourierPing,Vo as Customer,Qo as DeliveryRoute,zo as DeliveryStop,Ho as Deployment,Go as DigitalDelivery,pa as EmailIdempotency,Zo as EmailList,ea as EmailListSubscriber,ma as EmailSuppression,ga as EmailWebhookEvent,ya as ErrorModel,ko as FailedJob,ta as Form,na as FormField,ra as FormSubmission,ba as GiftCard,ho as Job,wa as Label,ha as LicenseKey,ka as Log,Ta as LoyaltyPoint,_a as LoyaltyReward,Me as MODEL_DEFINITION,oa as MagicLinkToken,Ra as MailPreference,Sa as Manufacturer,Ce as MassAssignmentException,aa as Menu,ia as MenuItem,jt as ModelNotFoundError,Et as ModelValidationError,Aa as Notification,xa as NotificationDelivery,Pa as Order,Ca as OrderIdempotency,va as OrderItem,Oa as Page,sa as PageRevision,Ma as Payment,Da as PaymentMethod,Ea as PaymentProduct,Fa as PaymentTransaction,eu as PersonalAccessToken,ua as Pledge,Ia as Post,ja as PrintDevice,Ba as Product,Na as ProductUnit,qa as ProductVariant,La as QueryLog,Ua as Receipt,ca as Redirect,tu as Referral,nu as ReferralCode,Ka as Release,Wa as Request,Va as Review,Oo as SenderDomain,Qa as ShippingMethod,za as ShippingRate,Ha as ShippingZone,la as Site,da as SiteDomain,fa as SmsOptOut,Ja as SocialAccount,Ga as SocialPost,Xs as StorageItem,Zs as StorageItemTask,Un as SubqueryBuilder,Ya as Subscriber,Xa as SubscriberEmail,Za as Subscription,ei as Tag,ti as TaxRate,ni as Team,ri as TeamInvitation,oi as TeamMember,ai as Transaction,Mo as UsageEvent,wo as User,ii as WaitlistProduct,si as WaitlistRestaurant,ui as Websocket,Gi as batchLoad,mo as buildDatabaseSchema,ie as collectEncryptedAttributes,qe as createAuditMethods,me as createCategorizableMethods,de as createCommentableMethods,ge as createLikeableMethods,pe as createTaggableMethods,Fn as customerOwnership,Zi as db,ae as decryptValue,qt as defineModel,oe as encryptValue,Re as enrichPaginatorUrls,Bs as extendModel,kn as filterFillable,gi as getPrunableConfig,hn as getWritableFields,Au as isCursorPaginator,I as isEncrypted,xu as isPaginator,Pu as isSimplePaginator,Ge as isUniqueViolation,bn as mapWriteError,mi as massPrunable,Lr as mergeModelDefinition,ru as modelGlobalNames,Ys as ormReady,Bn as parentOwnership,nt as parseCursor,Oe as projectDocumentsFromTrait,Xt as prunable,go as renderDatabaseTypeFile,_e as resolveCursorArgs,Te as resolvePageArgs,rs as savepoint,In as selfOwnership,sn as setAuditUser,$n as siteOwnership,jn as teamMembershipOwnership,Ir as toAttrs,Cu as toCursorPaginator,vu as toPaginator,Ou as toSimplePaginator,wn as toSnakeCaseKeys,ns as transaction,os as transactional,O as withoutEvents,lr as withoutValidation};
|
|
17
|
+
`,po="/* eslint-disable */\n// AUTO-GENERATED by `buddy generate:db-types --framework` \u2014 do not edit.\n//\n// The shapes of the tables the framework itself ships, so framework code gets\n// real rows from `db.selectFrom(...)` without asserting them. An application's\n// own tables (and its overrides of these) live in `DatabaseSchema`, which takes\n// precedence - see `RowOf` in `./utils`.\n\nexport interface FrameworkSchema {\n",mo=`}
|
|
18
|
+
`;function Qt(e){return e==="framework"?po:lo}function zt(e){return e==="framework"?mo:fo}async function Ht(e,n,t=[]){let r=[];if(!Q.existsSync(e))return r;let o=Q.readdirSync(e,{withFileTypes:!0});for(let i of o){let a=_.join(e,i.name);if(i.isDirectory()){if(n){let s=await Ht(a,!0,t);r.push(...s)}continue}if(!i.name.endsWith(".ts"))continue;if(i.name.startsWith("_")||i.name.startsWith("index"))continue;try{let s=await(_.isAbsolute(a)?import(a):import(_.resolve(a))),u=s.default||s;if(u?.name&&(u.attributes||u.table))r.push({filePath:a,model:u})}catch(s){t.push({file:a,error:s.message})}}return r}async function go(e={}){let n=Xr(e.dialect),t=e.modelsDir??_.userModelsPath(),r=e.defaultsDir??_.frameworkPath("defaults/app/Models"),o=e.outFile??_.projectPath("database/types.d.ts"),i=[],a=[];for(let[p,y]of[[t,!1],[r,!0]])try{let b=await Ht(p,y,i);a.push(...b)}catch(b){i.push({file:p,error:b.message})}let s=new Map;for(let p of a)s.set(p.model.name??_.basename(p.filePath).replace(/\.ts$/,""),p);for(let p of a)if(p.filePath.startsWith(t))s.set(p.model.name??_.basename(p.filePath).replace(/\.ts$/,""),p);let u=[];for(let[p,{model:y}]of s){let b=y.table??`${P(p)}s`,w={...uo(y,n),...co(y,n),...ro(y)};u.push({table:b,model:p,columns:w})}let c=new Map;for(let[p,{model:y}]of s)for(let b of ao(p,y,n)){if(c.has(b.table))continue;c.set(b.table,{table:b.table,model:`(${b.table} pivot)`,columns:b.columns})}if(u.push(...c.values()),e.migrationsDir!==!1){let p=e.migrationsDir??_.resolve(_.dirname(o),"migrations"),y=new Set(u.map((w)=>w.table)),b=Wt(p,n);for(let w of b.tables){if(y.has(w.table))continue;y.add(w.table),u.push({table:w.table,model:`(${w.table} migration)`,columns:w.columns})}i.push(...b.errors)}u.sort((p,y)=>p.table.localeCompare(y.table));let l=e.target??"app",f=l==="framework"?1:2,d=u.map((p)=>Vt(p.table,p.columns,f)).join(`
|
|
19
|
+
`),m=`${Qt(l)}${d}
|
|
20
|
+
${zt(l)}`;if(!e.dryRun){let p=_.dirname(o);if(!Q.existsSync(p))Q.mkdirSync(p,{recursive:!0});Q.writeFileSync(o,m,"utf-8"),Yr.success(`[generate:db-types] wrote ${u.length} table(s) to ${o}`)}return{outFile:o,tables:u,errors:i,content:m}}function yo(e,n="app"){let t=[...e].sort((r,o)=>r.table.localeCompare(o.table)).map((r)=>Vt(r.table,r.columns,n==="framework"?1:2)).join(`
|
|
21
|
+
`);return`${Qt(n)}${t}
|
|
22
|
+
${zt(n)}`}import{isCursorPaginator as xu,isPaginator as Pu,isSimplePaginator as Cu,toCursorPaginator as vu,toPaginator as Ou,toSimplePaginator as Mu}from"@stacksjs/pagination";import{configureOrm as bo}from"@stacksjs/query-builder";function wo(){try{let e=process.env.DB_DATABASE_PATH||"database/stacks.sqlite";if((process.env.DB_CONNECTION||"sqlite")==="sqlite")bo({database:e})}catch{}}wo();async function Gt(e){for(let n=0;;n++){let t=await import(e);try{return t.default}catch(r){if(n<5&&r instanceof ReferenceError&&/before initialization/.test(r.message)){await new Promise((o)=>setTimeout(o,0));continue}throw r}}}async function re(e,n=[""]){let{path:t}=await import("@stacksjs/path"),r=t.userModelsPath(`${e}.ts`);try{if(await Bun.file(r).exists())return await Gt(r)}catch(o){console.error(`[orm] Failed to import userland model ${e} from ${r} - falling back to framework default. Reason:`,o)}for(let o of n){let i=o?`${o}/`:"",a=t.frameworkPath(`defaults/app/Models/${i}${e}.ts`);try{if(await Bun.file(a).exists())return await Gt(a)}catch(s){console.error(`[orm] Failed to import framework default model ${e} from ${a} - trying next subdir. Reason:`,s)}}return null}var C={},Jt=()=>{},Xs=new Promise((e)=>{Jt=e});function g(e){return new Proxy(function(){},{get(n,t){if(t==="then")return;let r=C[e];if(r==null)return;let o=r[t];return typeof o==="function"?o.bind(r):o},set(n,t,r){let o=C[e];if(o==null)return!1;return o[t]=r,!0},has(n,t){let r=C[e];return r==null?!1:(t in r)},apply(n,t,r){let o=C[e];if(o==null||typeof o!=="function")return;return o.apply(t,r)}})}var ho=g("User"),ko=g("Job"),To=g("FailedJob"),_o=[["Referral",[""],"auth"],["ReferralCode",[""],"auth"],["Team",[""],"auth"],["TeamInvitation",[""],"auth"],["TeamMember",[""],"auth"],["SocialAccount",[""],"auth"],["Subscriber",[""],"auth"],["SubscriberEmail",[""],"auth"],["Subscription",[""],"auth"],["Categorizable",["Content"],"cms"],["Post",["Content"],"cms"],["Page",["Content"],"cms"],["PageRevision",["Content"],"cms"],["Redirect",["Content"],"cms"],["Menu",["Content"],"cms"],["MenuItem",["Content"],"cms"],["Author",["Content"],"cms"],["Comment",[""],"cms"],["Tag",[""],"cms"],["Site",[""],"auth"],["SiteDomain",[""],"auth"],["MagicLinkToken",[""],"auth"],["SmsOptOut",[""],"auth"],["Form",["Forms"],"forms"],["FormField",["Forms"],"forms"],["FormSubmission",["Forms"],"forms"],["Activity",[""],"dashboard"],["Board",[""],"dashboard"],["BoardColumn",[""],"dashboard"],["Card",[""],"dashboard"],["CardComment",[""],"dashboard"],["Deployment",[""],"dashboard"],["Label",[""],"dashboard"],["Release",[""],"dashboard"],["Notification",[""],"dashboard"],["NotificationDelivery",[""],"dashboard"],["PersonalAccessToken",[""],"dashboard"],["MailPreference",[""],"dashboard"],["Log",[""],"dashboard"],["Request",[""],"dashboard"],["AnalyticsEvent",[""],"dashboard"],["QueryLog",[""],"dashboard"],["StorageItem",[""],"dashboard"],["StorageItemTask",[""],"dashboard"],["Error",[""],"monitoring"],["Websocket",["realtime"],"realtime"],["Campaign",[""],"marketing"],["CampaignSend",[""],"marketing"],["EmailList",[""],"marketing"],["EmailListSubscriber",[""],"marketing"],["EmailIdempotency",[""],"marketing"],["EmailSuppression",[""],"marketing"],["EmailWebhookEvent",[""],"marketing"],["SocialPost",[""],"marketing"],["Automation",[""],"marketing"],["AutomationRun",[""],"marketing"],["CampaignVariant",[""],"marketing"],["CommunicationSuppression",[""],"marketing"],["ConsentEvent",[""],"marketing"],["SenderDomain",[""],"marketing"],["UsageEvent",[""],"marketing"],["PaymentMethod",[""],"commerce"],["PaymentProduct",[""],"commerce"],["PaymentTransaction",[""],"commerce"],["Order",["commerce"],"commerce"],["OrderIdempotency",["commerce"],"commerce"],["OrderItem",["commerce"],"commerce"],["Cart",["commerce"],"commerce"],["CartItem",["commerce"],"commerce"],["Customer",["commerce"],"commerce"],["Product",["commerce"],"commerce"],["ProductVariant",["commerce"],"commerce"],["ProductUnit",["commerce"],"commerce"],["Manufacturer",["commerce"],"commerce"],["Category",["commerce"],"commerce"],["Coupon",["commerce"],"commerce"],["GiftCard",["commerce"],"commerce"],["LicenseKey",["commerce"],"commerce"],["Review",["commerce"],"commerce"],["Receipt",["commerce"],"commerce"],["PrintDevice",["commerce"],"commerce"],["ShippingMethod",["commerce"],"commerce"],["ShippingRate",["commerce"],"commerce"],["ShippingZone",["commerce"],"commerce"],["DeliveryRoute",["commerce"],"commerce"],["DeliveryStop",["commerce"],"commerce"],["DigitalDelivery",["commerce"],"commerce"],["Courier",["commerce"],"commerce"],["CourierPing",["commerce"],"commerce"],["TaxRate",["commerce"],"commerce"],["WaitlistProduct",["commerce"],"commerce"],["WaitlistRestaurant",["commerce"],"commerce"],["Auction",["commerce"],"commerce"],["AuctionItem",["commerce"],"commerce"],["Bid",["commerce"],"commerce"],["Pledge",["commerce"],"commerce"],["LoyaltyPoint",["commerce"],"commerce"],["LoyaltyReward",["commerce"],"commerce"],["Payment",["commerce"],"commerce"],["Transaction",["commerce"],"commerce"]];queueMicrotask(async()=>{try{let{feature:e}=await import("@stacksjs/config"),n=await re("User");if(n)C.User=n;if(e("queue")){let t=await re("Job");if(t)C.Job=t;let r=await re("FailedJob");if(r)C.FailedJob=r}for(let[t,r,o]of _o){if(!e(o))continue;let i=await re(t,r);if(i)C[t]=i}}catch(e){console.error("[orm] deferred model load failed:",e)}finally{Jt()}});var Ro=g("Activity"),So=g("AnalyticsEvent"),Ao=g("Automation"),xo=g("AutomationRun"),Po=g("Auction"),Co=g("CampaignVariant"),vo=g("CommunicationSuppression"),Oo=g("ConsentEvent"),Mo=g("SenderDomain"),Do=g("UsageEvent"),Eo=g("AuctionItem"),Fo=g("Author"),Io=g("Bid"),$o=g("Board"),jo=g("BoardColumn"),Bo=g("Campaign"),No=g("Card"),qo=g("CardComment"),Lo=g("Cart"),Uo=g("CartItem"),Ko=g("Category"),Wo=g("Comment"),Vo=g("Coupon"),Qo=g("Customer"),zo=g("DeliveryRoute"),Ho=g("DeliveryStop"),Go=g("Deployment"),Jo=g("DigitalDelivery"),Yo=g("Courier"),Xo=g("CourierPing"),Zo=g("CampaignSend"),ei=g("EmailList"),ti=g("EmailListSubscriber"),ni=g("Form"),ri=g("FormField"),oi=g("FormSubmission"),ii=g("MagicLinkToken"),ai=g("Menu"),si=g("MenuItem"),ui=g("PageRevision"),ci=g("Pledge"),li=g("Redirect"),di=g("Site"),fi=g("SiteDomain"),pi=g("SmsOptOut"),Zs=g("StorageItem"),eu=g("StorageItemTask"),mi=g("EmailIdempotency"),gi=g("EmailSuppression"),yi=g("EmailWebhookEvent"),bi=g("Error"),wi=g("GiftCard"),hi=g("Label"),ki=g("LicenseKey"),Ti=g("Log"),_i=g("LoyaltyPoint"),Ri=g("LoyaltyReward"),Si=g("MailPreference"),Ai=g("Manufacturer"),xi=g("Notification"),Pi=g("NotificationDelivery"),Ci=g("Order"),vi=g("OrderIdempotency"),tu=g("PersonalAccessToken"),Oi=g("OrderItem"),Mi=g("Page"),Di=g("Payment"),Ei=g("PaymentMethod"),Fi=g("PaymentProduct"),Ii=g("PaymentTransaction"),$i=g("Post"),ji=g("Categorizable"),Bi=g("PrintDevice"),Ni=g("Product"),qi=g("ProductUnit"),Li=g("ProductVariant"),Ui=g("QueryLog"),Ki=g("Receipt"),nu=g("Referral"),ru=g("ReferralCode"),Wi=g("Release"),Vi=g("Request"),Qi=g("Review"),zi=g("ShippingMethod"),Hi=g("ShippingRate"),Gi=g("ShippingZone"),Ji=g("SocialPost"),Yi=g("SocialAccount"),Xi=g("Subscriber"),Zi=g("SubscriberEmail"),ea=g("Subscription"),ta=g("Tag"),na=g("TaxRate"),ra=g("Team"),oa=g("TeamInvitation"),ia=g("TeamMember"),aa=g("Transaction"),sa=g("WaitlistProduct"),ua=g("WaitlistRestaurant"),ca=g("Websocket"),Yt={User:ho,Job:ko,FailedJob:To,Activity:Ro,AnalyticsEvent:So,Automation:Ao,AutomationRun:xo,Auction:Po,AuctionItem:Eo,Author:Fo,Bid:Io,Board:$o,BoardColumn:jo,Campaign:Bo,CampaignSend:Zo,CampaignVariant:Co,Card:No,CardComment:qo,Cart:Lo,CartItem:Uo,Categorizable:ji,Category:Ko,Comment:Wo,Coupon:Vo,Customer:Qo,CommunicationSuppression:vo,ConsentEvent:Oo,DeliveryRoute:zo,DeliveryStop:Ho,Deployment:Go,DigitalDelivery:Jo,Courier:Yo,CourierPing:Xo,EmailList:ei,EmailListSubscriber:ti,EmailIdempotency:mi,EmailSuppression:gi,EmailWebhookEvent:yi,ErrorModel:bi,Form:ni,FormField:ri,FormSubmission:oi,GiftCard:wi,Label:hi,LicenseKey:ki,Log:Ti,LoyaltyPoint:_i,LoyaltyReward:Ri,MailPreference:Si,Manufacturer:Ai,Notification:xi,MagicLinkToken:ii,Menu:ai,MenuItem:si,NotificationDelivery:Pi,Order:Ci,OrderIdempotency:vi,OrderItem:Oi,Page:Mi,PageRevision:ui,Payment:Di,PaymentMethod:Ei,PaymentProduct:Fi,PaymentTransaction:Ii,Pledge:ci,Post:$i,PrintDevice:Bi,Product:Ni,ProductUnit:qi,ProductVariant:Li,QueryLog:Ui,Receipt:Ki,Release:Wi,Request:Vi,Review:Qi,ShippingMethod:zi,Redirect:li,SenderDomain:Mo,ShippingRate:Hi,ShippingZone:Gi,Site:di,SiteDomain:fi,SmsOptOut:pi,SocialAccount:Yi,SocialPost:Ji,Subscriber:Xi,SubscriberEmail:Zi,Subscription:ea,Tag:ta,TaxRate:na,Team:ra,TeamInvitation:oa,TeamMember:ia,Transaction:aa,UsageEvent:Do,WaitlistProduct:sa,WaitlistRestaurant:ua,Websocket:ca},F=globalThis;for(let[e,n]of Object.entries(Yt))if(n&&F[e]===void 0)F[e]=n;var ou=Object.keys(Yt);async function la(e){if(!e)return[];try{if(typeof e.all==="function"){let n=await e.all();return Array.isArray(n)?n:[]}if(typeof e.get==="function"){let n=await e.get();return Array.isArray(n)?n:[]}}catch{}return[]}function da(e,n,t=""){if(!e)return t;try{if(typeof e.get==="function"){let o=e.get(n);if(o!==void 0&&o!==null)return o}}catch{}let r=e?.[n];return r!==void 0&&r!==null?r:t}if(F.safeAll===void 0)F.safeAll=la;if(F.safeGet===void 0)F.safeGet=da;export{Ro as Activity,So as AnalyticsEvent,Po as Auction,Eo as AuctionItem,Fo as Author,Ao as Automation,xo as AutomationRun,Io as Bid,$o as Board,jo as BoardColumn,Bo as Campaign,Zo as CampaignSend,Co as CampaignVariant,No as Card,qo as CardComment,Lo as Cart,Uo as CartItem,ji as Categorizable,Ko as Category,Wo as Comment,vo as CommunicationSuppression,Oo as ConsentEvent,Vo as Coupon,Yo as Courier,Xo as CourierPing,Qo as Customer,zo as DeliveryRoute,Ho as DeliveryStop,Go as Deployment,Jo as DigitalDelivery,mi as EmailIdempotency,ei as EmailList,ti as EmailListSubscriber,gi as EmailSuppression,yi as EmailWebhookEvent,bi as ErrorModel,To as FailedJob,ni as Form,ri as FormField,oi as FormSubmission,wi as GiftCard,ko as Job,hi as Label,ki as LicenseKey,Ti as Log,_i as LoyaltyPoint,Ri as LoyaltyReward,Ee as MODEL_DEFINITION,ii as MagicLinkToken,Si as MailPreference,Ai as Manufacturer,Oe as MassAssignmentException,ai as Menu,si as MenuItem,Bt as ModelNotFoundError,Ft as ModelValidationError,xi as Notification,Pi as NotificationDelivery,Ci as Order,vi as OrderIdempotency,Oi as OrderItem,Mi as Page,ui as PageRevision,Di as Payment,Ei as PaymentMethod,Fi as PaymentProduct,Ii as PaymentTransaction,tu as PersonalAccessToken,ci as Pledge,$i as Post,Bi as PrintDevice,Ni as Product,qi as ProductUnit,Li as ProductVariant,Ui as QueryLog,Ki as Receipt,li as Redirect,nu as Referral,ru as ReferralCode,Wi as Release,Vi as Request,Qi as Review,Mo as SenderDomain,zi as ShippingMethod,Hi as ShippingRate,Gi as ShippingZone,di as Site,fi as SiteDomain,pi as SmsOptOut,Yi as SocialAccount,Ji as SocialPost,Zs as StorageItem,eu as StorageItemTask,Kn as SubqueryBuilder,Xi as Subscriber,Zi as SubscriberEmail,ea as Subscription,ta as Tag,na as TaxRate,ra as Team,oa as TeamInvitation,ia as TeamMember,aa as Transaction,Do as UsageEvent,ho as User,sa as WaitlistProduct,ua as WaitlistRestaurant,ca as Websocket,Ja as batchLoad,go as buildDatabaseSchema,se as collectEncryptedAttributes,Ue as createAuditMethods,ge as createCategorizableMethods,fe as createCommentableMethods,ye as createLikeableMethods,me as createTaggableMethods,In as customerOwnership,es as db,ae as decryptValue,Lt as defineModel,ie as encryptValue,Se as enrichPaginatorUrls,Ns as extendModel,Tn as filterFillable,ya as getPrunableConfig,kn as getWritableFields,xu as isCursorPaginator,I as isEncrypted,Pu as isPaginator,Cu as isSimplePaginator,Ye as isUniqueViolation,wn as mapWriteError,ga as massPrunable,Ur as mergeModelDefinition,ou as modelGlobalNames,Xs as ormReady,Nn as parentOwnership,ot as parseCursor,De as projectDocumentsFromTrait,Zt as prunable,yo as renderDatabaseTypeFile,Re as resolveCursorArgs,_e as resolvePageArgs,os as savepoint,$n as selfOwnership,un as setAuditUser,jn as siteOwnership,Bn as teamMembershipOwnership,$r as toAttrs,vu as toCursorPaginator,Ou as toPaginator,Mu as toSimplePaginator,hn as toSnakeCaseKeys,rs as transaction,is as transactional,O as withoutEvents,dr as withoutValidation};
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@stacksjs/orm",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.74.
|
|
5
|
+
"version": "0.74.57",
|
|
6
6
|
"description": "The Stacks ORM integration",
|
|
7
7
|
"author": "Chris Breuer",
|
|
8
8
|
"contributors": [
|
|
@@ -63,31 +63,31 @@
|
|
|
63
63
|
"prepublishOnly": "bun run build"
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
|
-
"@stacksjs/cache": "0.74.
|
|
67
|
-
"@stacksjs/cli": "0.74.
|
|
68
|
-
"@stacksjs/config": "0.74.
|
|
69
|
-
"@stacksjs/database": "0.74.
|
|
70
|
-
"@stacksjs/env": "0.74.
|
|
71
|
-
"@stacksjs/error-handling": "0.74.
|
|
72
|
-
"@stacksjs/events": "0.74.
|
|
73
|
-
"@stacksjs/logging": "0.74.
|
|
74
|
-
"@stacksjs/model-meta": "0.74.
|
|
75
|
-
"@stacksjs/pagination": "0.74.
|
|
76
|
-
"@stacksjs/path": "0.74.
|
|
77
|
-
"@stacksjs/query-builder": "0.74.
|
|
78
|
-
"@stacksjs/realtime": "0.74.
|
|
79
|
-
"@stacksjs/router": "0.74.
|
|
80
|
-
"@stacksjs/storage": "0.74.
|
|
81
|
-
"@stacksjs/strings": "0.74.
|
|
66
|
+
"@stacksjs/cache": "0.74.57",
|
|
67
|
+
"@stacksjs/cli": "0.74.57",
|
|
68
|
+
"@stacksjs/config": "0.74.57",
|
|
69
|
+
"@stacksjs/database": "0.74.57",
|
|
70
|
+
"@stacksjs/env": "0.74.57",
|
|
71
|
+
"@stacksjs/error-handling": "0.74.57",
|
|
72
|
+
"@stacksjs/events": "0.74.57",
|
|
73
|
+
"@stacksjs/logging": "0.74.57",
|
|
74
|
+
"@stacksjs/model-meta": "0.74.57",
|
|
75
|
+
"@stacksjs/pagination": "0.74.57",
|
|
76
|
+
"@stacksjs/path": "0.74.57",
|
|
77
|
+
"@stacksjs/query-builder": "0.74.57",
|
|
78
|
+
"@stacksjs/realtime": "0.74.57",
|
|
79
|
+
"@stacksjs/router": "0.74.57",
|
|
80
|
+
"@stacksjs/storage": "0.74.57",
|
|
81
|
+
"@stacksjs/strings": "0.74.57",
|
|
82
82
|
"@stacksjs/ts-validation": "^0.5.6",
|
|
83
|
-
"@stacksjs/validation": "0.74.
|
|
83
|
+
"@stacksjs/validation": "0.74.57",
|
|
84
84
|
"bun-query-builder": "^0.2.70"
|
|
85
85
|
},
|
|
86
86
|
"peerDependencies": {
|
|
87
|
-
"@stacksjs/auth": "0.74.
|
|
88
|
-
"@stacksjs/payments": "0.74.
|
|
89
|
-
"@stacksjs/queue": "0.74.
|
|
90
|
-
"@stacksjs/search-engine": "0.74.
|
|
87
|
+
"@stacksjs/auth": "0.74.57",
|
|
88
|
+
"@stacksjs/payments": "0.74.57",
|
|
89
|
+
"@stacksjs/queue": "0.74.57",
|
|
90
|
+
"@stacksjs/search-engine": "0.74.57",
|
|
91
91
|
"stripe": "22.3.2"
|
|
92
92
|
},
|
|
93
93
|
"peerDependenciesMeta": {
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
}
|
|
109
109
|
},
|
|
110
110
|
"devDependencies": {
|
|
111
|
-
"@stacksjs/types": "0.74.
|
|
111
|
+
"@stacksjs/types": "0.74.57",
|
|
112
112
|
"better-dx": "^0.2.24",
|
|
113
113
|
"stripe": "22.3.2"
|
|
114
114
|
}
|