@stacksjs/orm 0.75.0 → 0.75.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +3 -0
- package/dist/index.js +9 -9
- package/dist/traits/commentable.d.ts +11 -0
- package/package.json +23 -23
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import '@stacksjs/validation';
|
|
2
2
|
export type { PrunableOptions } from './utils/prunable';
|
|
3
|
+
export type { AddCommentOptions, NewComment } from './traits/commentable';
|
|
3
4
|
export type { BillableMethods } from './traits/billable';
|
|
4
5
|
export type { AuditHelpers } from './traits/audit';
|
|
5
6
|
// Re-export soft-delete option types so user code can `satisfies SoftDeleteOptions`.
|
|
@@ -248,6 +249,8 @@ export declare interface CommentablesTable {
|
|
|
248
249
|
commentables_id: number
|
|
249
250
|
commentables_type: string
|
|
250
251
|
user_id: number | null
|
|
252
|
+
author_name?: string | null
|
|
253
|
+
author_email?: string | null
|
|
251
254
|
created_at?: string
|
|
252
255
|
updated_at?: string | null
|
|
253
256
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var en=import.meta.require;import"@stacksjs/validation";import{log as ae}from"@stacksjs/cli";import{db as je,mutationCount as Be}from"@stacksjs/database/runtime";async function tn(e,n={}){let{olderThanDays:t=30,column:r="created_at",query:o}=n;try{if(o){let u=je.deleteFrom(e);u=o(u);let c=Be(await u.execute());return ae.info(`Pruned ${c} records from ${e}`),c}let a=new Date;a.setDate(a.getDate()-t);let i=await je.deleteFrom(e).where(r,"<",a.toISOString()).execute(),s=Be(i);return ae.info(`Pruned ${s} records from ${e} older than ${t} days`),s}catch(a){throw ae.error(`Failed to prune ${e}:`,a),a}}async function hi(e,n={}){return tn(e,n)}function ki(e){if(!e?.prunable)return null;if(typeof e.prunable==="boolean")return{olderThanDays:30,column:"created_at"};return e.prunable}import{createCipheriv as nn,createDecipheriv as rn,createHash as on,randomBytes as an}from"crypto";import{log as H}from"@stacksjs/logging";var Ne="enc:",qe="aes-256-gcm",sn=12,z=null;async function Le(){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=on("sha256").update(e).digest(),z}function I(e){return typeof e==="string"&&e.startsWith(Ne)}async function ie(e){if(e==null)return e;if(I(e))return e;if(typeof e!=="string")return e;let n=await Le();if(!n)return H.warn("[orm] encrypted attribute: APP_KEY not set - storing value in plaintext"),e;let t=an(sn),r=nn(qe,n,t),o=Buffer.concat([r.update(e,"utf8"),r.final()]),a=r.getAuthTag();return`${Ne}${t.toString("base64")}:${a.toString("base64")}:${o.toString("base64")}`}async function se(e){if(e==null)return e;if(typeof e!=="string")return e;if(!I(e))return e;try{let n=await Le();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=rn(qe,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 ue(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 un}from"@stacksjs/database/runtime";import{log as B}from"@stacksjs/logging";var cn=[/^password$/i,/^password_hash$/i,/^api_key$/i,/_token$/i,/_secret$/i,/^remember_token$/i],Ke="model_audits",de=null;function ln(e){de=e}async function ce(){if(de!=null)return de;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(cn.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 dn(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 le(e,n=!1){try{let{db:t}=await import("@stacksjs/database/runtime");await t.insertInto(Ke).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:un()}).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 We(e){return{async audits(n){try{let{db:t}=await import("@stacksjs/database/runtime");return(await t.selectFrom(Ke).selectAll().where("auditable_type","=",e).where("auditable_id","=",n).orderBy("created_at","desc").execute()??[]).map((o)=>({...o,old_values:typeof o.old_values==="string"?Ue(o.old_values):o.old_values,new_values:typeof o.new_values==="string"?Ue(o.new_values):o.new_values}))}catch(t){return B.warn(`[orm] audits() lookup failed for ${e}#${String(n)}`,{error:t}),[]}}}}function Ue(e){try{return JSON.parse(e)}catch{return e}}function Ve(e){if(e&&typeof e==="object"&&"transactional"in e)return{transactional:e.transactional===!0};return{transactional:!1}}function Qe(e,n,t="id",r={}){let o=r.transactional===!0,a=e;if(typeof e.audits!=="function")e.audits=We(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 ce();await le({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:w,next:b}=dn(m,y);if(b&&Object.keys(b).length>0){let h=await ce();await le({auditable_type:n,auditable_id:l,event:"updated",old_values:G(w),new_values:G(b),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 w=await ce();await le({auditable_type:n,auditable_id:d,event:"deleted",old_values:G(p),new_values:null,user_id:w},o)}}catch(w){if(B.warn(`[orm] audit(${l}) failed for ${n}#${String(d)}`,{error:w}),o)throw w}return y})}};c("delete"),c("softDelete")}import{db as fn,sql as pn,sqlDateTime as fe}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 mn(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 pe(e){let n=fn;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(pn`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:fe(),updated_at:fe()}).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:fe()}).execute()}catch(i){if(!mn(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 gn,sql as yn,sqlDateTime as ze}from"@stacksjs/database/runtime";function me(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 ge(e){let n=gn;return{async tags(t){return me(t,"tags"),await n.selectFrom("taggables").where("taggable_id","=",t).where("taggable_type","=",e).selectAll().execute()},async tagCount(t){me(t,"tagCount");let r=await n.selectFrom("taggables").select(yn`count(*) as count`).where("taggable_id","=",t).where("taggable_type","=",e).executeTakeFirst();return Number(r?.count)||0},async addTag(t,r){if(me(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:ze(),updated_at:ze()}).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 wn,sqlDateTime as J}from"@stacksjs/database/runtime";function ye(e){let n=wn;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 bn,sqlDateTime as hn}from"@stacksjs/database/runtime";function we(e,n){let t=bn,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=hn();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)}}}import{createRequire as kn}from"module";import{db as Tn}from"@stacksjs/database/runtime";var _n=kn(import.meta.url);class be extends Error{constructor(e){super(`No subscription ${e} belongs to this user`);this.name="SubscriptionNotOwnedError"}}function He(e){let n=Tn;return{async syncStripeCustomerDetails(t,r){let{manageCustomer:o}=await import("@stacksjs/payments");return await o.syncStripeCustomerDetails(t,r)},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 typeof r==="string"?await o.setUserDefaultPayment(t,r):await o.setDefaultPaymentMethod(t,r)},async deletePaymentMethod(t,r){let{managePaymentMethod:o}=await import("@stacksjs/payments");return await o.deletePaymentMethod(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={}){if(!await n.selectFrom("subscriptions").where("provider_id","=",r).where("user_id","=",t.id).select(["id"]).executeTakeFirst())throw new be(r);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 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 createPayment(t,r,o={}){let{manageCharge:a}=await import("@stacksjs/payments");return await a.createPayment(t,r,o)},async storeTransaction(t,r,o){let{manageTransaction:a}=await import("@stacksjs/payments");return await a.store(t,r,o)},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)})}}}var Rn={syncStripeCustomerDetails:!0,createStripeUser:!0,updateStripeUser:!0,deleteStripeUser:!0,createOrGetStripeUser:!0,retrieveStripeUser:!0,defaultPaymentMethod:!0,setDefaultPaymentMethod:!0,deletePaymentMethod:!0,addPaymentMethod:!0,paymentMethods:!0,newSubscription:!0,updateSubscription:!0,cancelSubscription:!0,activeSubscription:!0,checkout:!0,createSetupIntent:!0,createPayment:!0,storeTransaction:!0,subscriptionHistory:!0,transactionHistory:!0,connectAccount:!0,createConnectAccount:!0,connectOnboardLink:!0,syncConnectStatus:!0,chargeWithSplit:!0},Y=Object.freeze(Object.keys(Rn));function Sn(e){return Y.every((n)=>typeof Reflect.get(e,n)==="function")}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=_n("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 et(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 An(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(et(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 Pn(e){let n={};for(let[t,r]of Object.entries(e))n[R(t)]=r;return n}function Ni(e,n){let t=String(n||"").replace(/^\/+|\/+$/g,""),r=String(e).replace(/^\/+/,"");return`/api/${t?`${t}/`:""}${r}`}function tt(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 nt(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 qi(e){return e?.ownership===!1}function Li(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 xn(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 Cn(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??=vn(n);let a=r.get(o);if(a!==o&&a in e)t[o]=e[a]}return t}function On(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 Ge=new WeakMap,Je=new WeakMap;function ke(e){let n=Ge.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 Ge.set(e,t),t}function vn(e){let n=ke(e),t=Je.get(n);if(t)return t;let r=new Map(n.map(({field:o,snake:a})=>[o,a]));return Je.set(n,r),r}function Ui(e,n){if(!n.length)return e;let t={...e};for(let{field:r,snake:o}of ke(n))if(delete t[r],o!==r)delete t[o];return t}function Ki(e,n){if(!e||n.length===0)return e;let t={...e};for(let{field:r,snake:o}of ke(n))if(delete t[r],o!==r)delete t[o];return t}var Mn=["id","uuid","created_at","updated_at","deleted_at"];function Wi(e,n){let t=new Map;for(let r of[...Object.keys(e??{}),...Mn]){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 Vi(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 Dn={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"?Fn(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"?In(e):[],set:(e)=>e==null?null:Array.isArray(e)?JSON.stringify(e):e}},Ye=new WeakMap;function En(e,n){let t=Ye.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"?Dn[a]:a;r.push({attr:o,snake:R(o),definition:a,caster:i})}return Ye.set(e,r),r}function Fn(e){try{return JSON.parse(e)}catch{return e}}function In(e){try{return JSON.parse(e)}catch{return[]}}function Qi(e,n,t){if(!e||typeof e!=="object"||!n)return e;let r=Object.keys(n);if(r.length===0)return e;let o=En(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 Xe=new WeakMap;function $n(e){let n=Xe.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 Xe.set(e,t),t}function rt(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 ot(e,n,t){let r=n?.attributes;if(!r||typeof r!=="object")return{valid:!0};let o=$n(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=On(f,m),y=f.validate(p);if(!y?.valid&&Array.isArray(y?.errors)&&y.errors.length>0)i=!0,a[c]=y.errors.map((w)=>u.validation?.message?.[w?.code]??w?.message??"invalid")}return i?{valid:!1,errors:a}:{valid:!0}}function jn(e,n){return`${e}\x00${Bn(n)}`}function zi(e){let n=new Map;for(let t of e){let r=jn(String(t.method??""),String(t.path??""));if(!n.has(r))n.set(r,t)}return n}function Bn(e){return e.replace(/\{[^}]*\}/g,"{}").replace(/:[^/]+/g,"{}")}function he(e){if(Array.isArray(e))return e.filter((n)=>typeof n==="string"&&n.length>0);return typeof e==="string"&&e?[e]:[]}function Hi(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?he(o.read):["auth"],write:"write"in o?he(o.write):["auth"],declared:!0}}let r=he(t);return{read:r,write:r,declared:!0}}var Ze=15,Nn=100;function Gi(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(Ze),10),o=Math.min(Number.isFinite(r)?Math.max(1,r):Ze,Nn);return{page:t,perPage:o,offset:(t-1)*o}}function X(e,n){let t=new URL(e.toString());return t.searchParams.set("page",String(n)),`${t.pathname}${t.search}`}function qn(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?X(e,n-1):null,next_page_url:o?X(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=X(e,1),u.last_page_url=X(e,c)}return u}function Ji(e,n,t,r,o,a){let{page:i,...s}=qn(e,n,t,r,o,a);return{current_page:i,...s}}function Yi(e,n){return(n??e??"").toString().trim().toLowerCase()==="warn"?"warn":"deny"}function Xi(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 Ln(e){if(e?.ownership===!1)return null;if(e?.ownership)return e.ownership;let n=tt(e);if(n)return{field:n,resolve:async(r,o)=>{let{resolveAuthenticatedTeamId:a}=await import("@stacksjs/auth");return a(Te(o))}};let t=nt(e);if(t)return{field:t,resolve:async(r)=>r?.id??null};return null}function Te(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 Un(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 Kn(e="id"){return{field:e,resolve:async(n)=>n?.id??null}}function Wn(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(Te(t));if(a==null)return[];return(await o.where("team_id",a).get()??[]).map((s)=>s.id).filter((s)=>s!=null)}catch{return[]}}}}function Vn(e="id"){return{field:e,resolve:async(n,t)=>{try{let{resolveAuthenticatedTeamId:r}=await import("@stacksjs/auth");return await r(Te(t))}catch{return null}}}}function Qn(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=Ln(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 zn}from"@stacksjs/router";var at=new WeakMap;function it(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 Hn(e,n){if(typeof e.find==="function")return e.find(n);let t=await e.findMany?.([n]);return it(t??[]).get(n)}async function Gn(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=it(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 rs(e,n){let t=zn();if(!t)return Hn(e,n);let r=at.get(t);if(!r)r=new WeakMap,at.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(()=>{Gn(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 ss}from"@stacksjs/database/runtime";class Jn{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 _e}from"@stacksjs/database/runtime";async function ls(e,n){return await _e.transaction(e,n)}async function ds(e){return await _e.savepoint(e)}function fs(e,n){return _e.transactional(e,n)}export*from"@stacksjs/model-meta";import{createModel as cr,registerModel as lr}from"@stacksjs/query-builder";import{log as T}from"@stacksjs/logging/runtime";import{snakeCase as V}from"@stacksjs/strings";import{AsyncLocalStorage as Et}from"async_hooks";import{toCursorPaginator as dr,toPaginator as fr,toSimplePaginator as pr}from"@stacksjs/pagination";function Se(e,n){let t=xe(),r=t?Re(t,"per_page"):void 0,o=t?Re(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 Ae(e,n){let t=xe(),r=t?ut(t,"cursor"):void 0,o=t?Re(t,"per_page"):void 0,a=e!==void 0?Math.max(1,Math.floor(e)):Math.min(100,Math.max(1,o??15)),s=st(n!==void 0?n:r??null);return{perPage:a,cursor:s}}function st(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 Pe(e){let n=xe();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?O(t,{cursor:e.next_cursor}):null,e.prev_page_url=e.prev_cursor!==null?O(t,{cursor:e.prev_cursor}):null,e;let o=e.current_page;if(e.prev_page_url=o>1?O(t,{page:o-1}):null,"total"in e){let a=e.last_page;e.next_page_url=o<a?O(t,{page:o+1}):null,e.first_page_url=O(t,{page:1}),e.last_page_url=O(t,{page:a})}else e.next_page_url=e.has_more_pages?O(t,{page:o+1}):null;return e}function O(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 xe(){if(D===null)return;if(D===void 0)try{let n=en("@stacksjs/router");if(typeof n.getCurrentRequest==="function")D=n.getCurrentRequest;else{D=null;return}}catch{D=null;return}return D()}function Re(e,n){let t=ut(e,n);if(t===void 0)return;let r=Number(t);return Number.isFinite(r)?r:void 0}function ut(e,n){let t=e.query?.[n];if(t===void 0)return;return Array.isArray(t)?t[0]:t}function ct(){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 Yn,sqlDateTime as Xn}from"@stacksjs/database/runtime";import{log as E}from"@stacksjs/logging";var Z="deleted_at";function lt(e,n="id"){return{async softDelete(t){let r=Xn(),o=e.where(n,t);if(typeof o?.update==="function")return await o.update({[Z]:r}),!0;return!1},async restore(t){let r=e.where(n,t).withTrashed();if(typeof r?.update==="function")return await r.update({[Z]: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 Yn(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(Z);return t?.where?.(Z,"!=",null)??t}}}function dt(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 Zn(e,n){let t=e.hasMany??[],r=e.hasOne??[],o=t.some((l)=>Ce(l,n,!0)),a=r.some((l)=>Ce(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)=>Ce(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 Ce(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 er(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=Zn(e,i);if(!s)continue;await er(s.className,t,s.model,a,r)}}import{sqlDateTime as rr}from"@stacksjs/database/runtime";import{log as tr}from"@stacksjs/logging";var nr=[/^password$/i,/^password_hash$/i,/^api_key$/i,/_token$/i,/_secret$/i,/^remember_token$/i],ft=null;async function pt(){if(ft!=null)return ft;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 mt(){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 gt(e){if(!e||typeof e!=="object")return null;let n={};for(let[t,r]of Object.entries(e)){if(nr.some((o)=>o.test(t)))continue;n[t]=r}return n}function yt(e,n,t){tr.warn(`[orm] ${e} row write failed for ${n}: ${t?.message??String(t)}`)}var or="activities";function wt(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 ar(e,n,t=[]){let r=gt(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 ir(e,n,t){return t==null?`${e} was ${n}`:`${e} ${String(t)} was ${n}`}async function sr(e){try{let{db:n}=await import("@stacksjs/database/runtime");await n.insertInto(or).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:rr()}).executeTakeFirst()}catch(n){yt("activity",`${e.subject_type}#${String(e.subject_id)}`,n)}}async function ur(e){let{attributes:n,event:t,modelName:r,options:o,primaryKey:a}=e,i=n?.[a]??null,s=await pt();await sr({type:`${r.toLowerCase()}.${t}`,description:ir(r,t,i),subject_type:r,subject_id:i,properties:ar(n,o,e.hidden),causer:s==null?null:`User:${String(s)}`,user_id:s,ip_address:await mt()})}function Oe(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 bt(e,n,t,r,o=[]){if(n==="Activity")return;let a=e,i=async(f)=>typeof a.find==="function"?Oe(await a.find(f)):null,s=async(f,d)=>{await ur({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",Oe(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",Oe(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 ne,Ft=new Et;function M(){return Ft.getStore()?.suppressed===!0}function v(e){return Promise.resolve(Ft.run({suppressed:!0},e))}var It=new Et;function mr(){return It.getStore()?.suppressed===!0}function gr(e){return Promise.resolve(It.run({suppressed:!0},e))}var Ie=Symbol.for("stacks.orm.modelDefinition");class $t 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 ht=new Set,yr=4096,kt=Object.create(null),Tt=0;function W(e){let n=kt[e];if(n!==void 0)return n;let t=V(e);if(Tt<yr)kt[e]=t,Tt++;return t}function wr(e,n){let t=typeof e==="string"?e.slice(0,80):String(e),r=`${typeof e}:${t}`;if(ht.has(r))return;ht.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 br={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 wr(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 hr(e){return typeof e==="string"?br[e]:e}var _t=new WeakMap;function jt(e){let n=Object.keys(e),t=_t.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:hr(a)}});return _t.set(e,r),r}function Rt(e,n,t){if(!e||typeof e!=="object")return e;let r={...e};for(let{attr:o,caster:a}of jt(n))if(o in r)r[o]=a[t].call(a,r[o]);return r}function ee(e){return e==="_attributes"||e==="_original"||e==="_definition"||e==="_hasSaved"||e==="_relations"}var Me=Symbol.for("stacks.modelInstanceProxy"),St,At=new WeakMap,kr={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"},...Object.fromEntries(Y.map((e)=>[e,{bag:"_billable",mode:"model"}])),generateTwoFactorForModel:{bag:"_twoFactor",mode:"model"},verifyTwoFactorCode:{bag:"_twoFactor",mode:"model"}};function Tr(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 te(e,n,t){if(e&&typeof e.then==="function")return e.then((r)=>r===n?t:r);return e===n?t:e}function P(e,n){if(!e||typeof e!=="object")return e;let t=e;if(t[Me])return e;let r=t._attributes;if(!r||typeof r!=="object")return e;if(n){for(let{attr:a,caster:i}of jt(n))if(Object.hasOwn(r,a))r[a]=i.get.call(i,r[a])}let o=n?At.get(n):St;if(!o)if(o={get(a,i,s){let u=a;if(i===Me)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),w=y&&typeof y.then==="function"?await y:y;u._attributes[m]=w}let d=l.set;l.set={};try{return te(u.save(),a,s)}finally{l.set=d}}return te(u.save(),a,s)};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 te(u.save(),a,s)}finally{l.set=d}}return te(u.save(),a,s)};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 v(()=>u.save())};if(i==="saveAsyncQuietly")return function(){return v(()=>s.saveAsync())};if(i==="updateQuietly")return function(l){return v(()=>u.update(l))};if(i==="updateAsyncQuietly")return function(l){return v(()=>s.updateAsync(l))};if(i==="deleteQuietly")return function(){return v(()=>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"],w=d.denormalize??{},b=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 $e=w[h]??w[k];if($e){p[k]=Tr(b,$e);continue}p[k]=void 0}if(m.id!=null)p.id=String(m.id);return p};if(typeof i==="string"&&!ee(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)=>P(p,n));return m&&typeof m==="object"?P(m,n):m}let d=kr[i];if(d){let y=u._definition?.__traitMethods?.[d.bag]?.[i];if(typeof y==="function")return d.mode==="model"?(...w)=>y(s,...w):(...w)=>y(u.id,...w)}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"&&!ee(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"&&!ee(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"&&!ee(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)At.set(n,o);else St=o;return new Proxy(e,o)}var Bt=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}),_r={paginate:fr,simplePaginate:pr,cursorPaginate:dr},Pt=Symbol.for("stacks.queryBuilderProxy");function xt(e,n,t){if(Bt[n]){if(Array.isArray(e))return e.map((o)=>P(o,t));let r=_r[n];if(r&&e&&Array.isArray(e.data)){let o=e.data.map((i)=>P(i,t)),a=r({...e,data:o});return Pe(a)}if(e&&Array.isArray(e.data))return{...e,data:e.data.map((o)=>P(o,t))};return P(e,t)}if(e&&typeof e==="object"&&typeof e.get==="function")return Nt(e,t);return e}function Nt(e,n){if(!e||typeof e!=="object")return e;if(e[Pt])return e;return new Proxy(e,{get(t,r,o){if(r===Pt)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}=Se(s[0],s[1]);u=[l,f]}else if(i==="cursorPaginate"){let{perPage:l,cursor:f}=Ae(s[0],s[1]);u=[l,f,s[2],s[3]]}let c=a.apply(t,u);if(!Bt[i]&&c===t)return o;if(c&&typeof c.then==="function")return c.then((l)=>xt(l,i,n));return xt(c,i,n)}}})}function Rr(e,n){let t=(i)=>Array.isArray(i)?i.map((s)=>P(s,n)):P(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 Nt(c,n)}}}class qt 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 De 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 Sr=new Set(["id","created_at","updated_at","deleted_at","uuid"]),Ct=new WeakMap;function Ar(e){let n=Ct.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 Ct.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}=Ar(r);for(let i in n){if(!Object.hasOwn(n,i))continue;let s=W(i);if(Sr.has(s))continue;if(a.has(s))throw new De(e.name,i,"guarded");if(s.endsWith("_id"))continue;if(!o.has(s))throw new De(e.name,i,"not-fillable")}return n}async function Ee(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 Pr(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 Ee(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 Ee(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[Me]?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 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 qt(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 b=m.orderBy(f,l);if(typeof b.first==="function")return await b.first();if(typeof b.get==="function")return(await b.get())?.[0]??null}let p=e.all;if(typeof p!=="function")return null;return[...await p.call(e)||[]].sort((b,h)=>{let k=b?.[f],S=h?.[f];if(k===S)return 0;return(k>S?1:-1)*(l==="desc"?-1:1)})[0]??null};let u=Wt(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 Or(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 Fe(k,u);if(S.length>0)await m.addDocuments(c,S);p+=S.length}),p}catch{}let w=await f.call(e)||[],b=await Fe(w,u);if(b.length>0)await m.addDocuments(c,b);return b.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 w=y?.id??y?._attributes?.id;if(w!=null)await p.deleteDocument(c,Number(w))}}}}async function Fe(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)=>Cr(r,n)))).filter(Boolean)}function Lt(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 xr(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 Cr(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 xr(e?._attributes??(typeof e?.toJSON==="function"?e.toJSON():null),n.hidden??new Set)}function Or(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 Ut(e){let n=V(e);return n===e?[e]:[e,n]}async function ve(e,n){if(!e||typeof e!=="object")return;let t=e._attributes??e;for(let r of n)for(let o of Ut(r)){if(!(o in t))continue;let a=t[o];if(!I(a))continue;t[o]=await se(a)}}function vr(e,n){if(n.length===0)return;let t=async(s)=>{if(Array.isArray(s)){for(let u of s)await ve(u,n);return s}if(s&&typeof s==="object"&&Array.isArray(s.data)){for(let u of s.data)await ve(u,n);return s}if(s)await ve(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 Mr(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 Ut(i))if(s in a)a[s]=await ie(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 Dr(e,n){let t=e.create;if(typeof t==="function")e.create=async function(r,...o){K(n,r);let a=await Ee(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 Er(e,n){if(!rt(n))return;let t=String(n?.name??e.name??"Model"),r=(i,s)=>{if(mr())return;if(!i||typeof i!=="object"||Array.isArray(i))return;let u=ot(i,n,s);if(!u.valid)throw new $t(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 Fr(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]=Rt(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)?Rt(a,n,"set"):a;return await r.call(this,o,i)}}var Ot=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 Kt(e){T.debug(`[orm] Defining model: ${e.name} (table: ${e.table})`);for(let y of Object.keys(e.traits??{}))if(!Ot.has(y))T.warn(`[orm] Model '${e.name}' declares an unknown trait '${y}'. It does nothing. Known traits: ${[...Ot].sort().join(", ")}.`);let n=Ir(e),t=jr(e),r=$r(n,t),o=Br(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=cr(i);if(Rr(u,e.casts),Pr(u,i),Dr(u,i),e.casts&&Object.keys(e.casts).length>0)Fr(u,e.casts);let c=ue(e);if(c.length>0)Mr(u,c),vr(u,c);let l=e.traits?.useSoftDeletes;if(l)Nr(u,i,l);let f=e.traits?.useAudit;if(f){let y=Ve(f);Qe(u,e.name,e.primaryKey||"id",y)}let d=wt(e.traits?.useActivityLog);if(d)bt(u,e.name,e.primaryKey||"id",d,[...Lt(e)]);Er(u,i);let m=u;m.withoutValidation=function(y){return gr(y)},m.withoutEvents=function(y){return v(y)};for(let y of["create","update","firstOrCreate","updateOrCreate","forceCreate","forceUpdate","delete","forceDelete","softDelete","restore"]){let w=u[y];if(typeof w!=="function")continue;let b=`${y}Quietly`;if(typeof u[b]==="function")continue;u[b]=function(...h){return v(()=>w.apply(u,h))}}let p=Object.assign(u,o,{...e,getDefinition:()=>e,_isStacksModel:!0});return lr(e.name,p),Object.defineProperty(p,Ie,{value:e,enumerable:!1,configurable:!0}),p}function Ir(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}=ne??=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],w=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,w)}}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=ne??=await import("@stacksjs/events");let{dispatchAndCollect:y}=p,w=await y(d,m);if(w.some((h)=>h.ok&&h.value===!1))return!1;let b=w.find((h)=>!h.ok);if(b&&!b.ok)throw b.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 $r(...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 Wt(e,n){if(!e)return null;let t=e===!0?{}:typeof e==="object"?{...e}:null;if(!t)return null;if(n)t.hidden=Lt(n);return t}function jr(e){let n=Wt(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 Fe([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=P(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 Mt(r,u,e.name)}return}await Mt(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 Dt(r,Number(u),e.name)}return}await Dt(r,Number(u),e.name)}}}var vt=new Map;function Vt(e,n){let t=vt.get(e)??0;if(vt.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 Mt(e,n,t){try{let{useSearchEngine:r}=await import("@stacksjs/search-engine");await r().addDocument(e,n)}catch(r){Vt(`index:${t}`,`Failed to index ${t}: ${r.message}`)}}async function Dt(e,n,t){try{let{useSearchEngine:r}=await import("@stacksjs/search-engine");await r().deleteDocument(e,n)}catch(r){Vt(`remove:${t}`,`Failed to remove ${t}#${n}: ${r.message}`)}}function Br(e){let n={},{table:t,traits:r}=e;if(!r)return n;if(r.taggable)n._taggable=ge(t);if(r.categorizable)n._categorizable=ye(t);if(r.commentable)n._commentable=pe(t);if(r.billable)n._billable=He(t);if(r.likeable){let a=typeof r.likeable==="object"?r.likeable:void 0;n._likeable=we(t,a)}let o=r.useAuth||r.authenticatable;if(typeof o==="object"&&o&&"useTwoFactor"in o&&o.useTwoFactor)n._twoFactor=ct();return n}function Nr(e,n,t){let r=lt(e,n.primaryKey||"id"),o=dt(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}=ne??=await import("@stacksjs/events"),y=await p(`${i}:restoring`,{id:m});if(Array.isArray(y)&&y.some((w)=>w===!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}=ne??=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 b=await r.restore(m);if(b){if(o.cascade?.length)await U(a,o,m,"restore");await c(m)}return b}let{db:y}=await import("@stacksjs/database/runtime"),w=await y.transaction(async()=>{let b=await r.restore(m);if(b)await U(a,o,m,"restore");return b});if(w)await c(m);return w};e.softDelete=f,e.restore=d,e.forceDelete=r.forceDelete,e.withTrashed=r.withTrashed,e.onlyTrashed=r.onlyTrashed,e.delete=f}function qr(e){if(e==null)return e;if(Array.isArray(e))return e.map((t)=>qr(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 Lr=["belongsTo","hasOne","hasMany","belongsToMany","morphMany","morphOne"],Ur=["traits","dashboard"];function Kr(e){let n=e?.[Ie];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 Wr(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 Vr(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 Qr(e,n){let t={...e,...n},r=e.attributes??{},o=n.attributes??{};if(n.attributes){let a=Vr(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 Lr){let i=Wr(e[a],n[a]);if(i)t[a]=i}for(let a of Ur){let i=e[a],s=n[a];if(i&&s&&typeof i==="object"&&typeof s==="object")t[a]={...i,...s}}return t}function Ks(e,n){return Kt(Qr(Kr(e),n))}import eo from"process";import{log as to}from"@stacksjs/logging";import{path as _}from"@stacksjs/path";import{fs as Q}from"@stacksjs/storage";import{Database as zr}from"bun:sqlite";import{existsSync as Hr,readdirSync as Gr,readFileSync as Jr}from"fs";function Yr(e){return e.startsWith("sqlite_")||e.startsWith("_qb_tmp_")}function Xr(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 Zr(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 Qt(e,n="sqlite"){let t=[];if(!Hr(e))return{tables:[],errors:t};let r;try{r=Gr(e).filter((a)=>a.endsWith(".sql")).sort()}catch(a){return{tables:[],errors:[{file:e,error:a.message}]}}let o=new zr(":memory:");try{for(let s of r){let u=`${e}/${s}`,c;try{c=Jr(u,"utf-8")}catch(f){t.push({file:u,error:f.message});continue}let l=Zr(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)=>!Yr(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=Xr(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 no(e){if(e)return e;let n=String(eo.env.DB_CONNECTION??"").toLowerCase();return n==="postgres"||n==="mysql"?n:"sqlite"}function re(e){return e==="postgres"?"boolean":"number"}function x(e){return e.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").toLowerCase()}function ro(e,n){let t=e.default;if(typeof t==="boolean")return re(n);if(typeof t==="number")return"number";if(typeof t==="string")return"string";return"unknown"}function oo(e){let n=e.validation;if(!n||typeof n!=="object")return null;let t=n.rule;return t&&typeof t==="object"?t:null}function ao(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 io(e,n){let t=oo(e),r=ao(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 re(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 ro(e,n)}})();return e.nullable===!0?`${a} | null`:a}function so(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[`${x(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[`${x(a.model)}_id`]="number"}}return n}function uo(e,n){let[t,r]=[x(e),x(n)].sort();return`${t}_${r}`}function co(e,n){let t=e.default,r=typeof t==="string"?"string":typeof t==="number"?"number":typeof t==="boolean"?re(n):t instanceof Date?"string":"unknown";return e.nullable?`${r} | null`:r}function lo(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 b=i;if(s=b.model,"pivotTable"in b||"firstForeignKey"in b||"secondForeignKey"in b)u=b.pivotTable,c=b.firstForeignKey,l=b.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??uo(e,s),p=c??`${x(e)}_id`,y=l??`${x(s)}_id`,w={id:"number",[p]:"number",[y]:"number"};for(let[b,h]of Object.entries(f))w[b]=co(h,t);if(d)w.created_at="string",w.updated_at="string | null";o.push({table:m,columns:w})}return o}function fo(e){return{email_verified_at:"string | null",password_changed_at:"string | null",two_factor_secret:"string | null",two_factor_enabled:`${re(e)} | null`,two_factor_last_used_step:"number | null",stripe_id:"string | null"}}function po(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,fo(n));return t}function mo(e,n){let t={},r=e.attributes??{};for(let[o,a]of Object.entries(r))t[x(o)]=io(a,n);return t}function zt(e,n,t=2){let r=" ".repeat(t),o=" ".repeat(t+1),a=Object.entries(n).map(([s,u])=>`${o}${s}: ${u}`).join(`
|
|
2
|
+
var tn=import.meta.require;import"@stacksjs/validation";import{log as ae}from"@stacksjs/cli";import{db as je,mutationCount as Be}from"@stacksjs/database/runtime";async function nn(e,n={}){let{olderThanDays:t=30,column:r="created_at",query:o}=n;try{if(o){let u=je.deleteFrom(e);u=o(u);let c=Be(await u.execute());return ae.info(`Pruned ${c} records from ${e}`),c}let a=new Date;a.setDate(a.getDate()-t);let i=await je.deleteFrom(e).where(r,"<",a.toISOString()).execute(),s=Be(i);return ae.info(`Pruned ${s} records from ${e} older than ${t} days`),s}catch(a){throw ae.error(`Failed to prune ${e}:`,a),a}}async function ki(e,n={}){return nn(e,n)}function Ti(e){if(!e?.prunable)return null;if(typeof e.prunable==="boolean")return{olderThanDays:30,column:"created_at"};return e.prunable}import{createCipheriv as rn,createDecipheriv as on,createHash as an,randomBytes as sn}from"crypto";import{log as H}from"@stacksjs/logging";var Ne="enc:",qe="aes-256-gcm",un=12,z=null;async function Le(){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=an("sha256").update(e).digest(),z}function I(e){return typeof e==="string"&&e.startsWith(Ne)}async function ie(e){if(e==null)return e;if(I(e))return e;if(typeof e!=="string")return e;let n=await Le();if(!n)return H.warn("[orm] encrypted attribute: APP_KEY not set - storing value in plaintext"),e;let t=sn(un),r=rn(qe,n,t),o=Buffer.concat([r.update(e,"utf8"),r.final()]),a=r.getAuthTag();return`${Ne}${t.toString("base64")}:${a.toString("base64")}:${o.toString("base64")}`}async function se(e){if(e==null)return e;if(typeof e!=="string")return e;if(!I(e))return e;try{let n=await Le();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=on(qe,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 ue(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 cn}from"@stacksjs/database/runtime";import{log as B}from"@stacksjs/logging";var ln=[/^password$/i,/^password_hash$/i,/^api_key$/i,/_token$/i,/_secret$/i,/^remember_token$/i],Ke="model_audits",de=null;function dn(e){de=e}async function ce(){if(de!=null)return de;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(ln.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 fn(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 le(e,n=!1){try{let{db:t}=await import("@stacksjs/database/runtime");await t.insertInto(Ke).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:cn()}).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 We(e){return{async audits(n){try{let{db:t}=await import("@stacksjs/database/runtime");return(await t.selectFrom(Ke).selectAll().where("auditable_type","=",e).where("auditable_id","=",n).orderBy("created_at","desc").execute()??[]).map((o)=>({...o,old_values:typeof o.old_values==="string"?Ue(o.old_values):o.old_values,new_values:typeof o.new_values==="string"?Ue(o.new_values):o.new_values}))}catch(t){return B.warn(`[orm] audits() lookup failed for ${e}#${String(n)}`,{error:t}),[]}}}}function Ue(e){try{return JSON.parse(e)}catch{return e}}function Ve(e){if(e&&typeof e==="object"&&"transactional"in e)return{transactional:e.transactional===!0};return{transactional:!1}}function Qe(e,n,t="id",r={}){let o=r.transactional===!0,a=e;if(typeof e.audits!=="function")e.audits=We(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 ce();await le({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:w,next:b}=fn(m,y);if(b&&Object.keys(b).length>0){let h=await ce();await le({auditable_type:n,auditable_id:l,event:"updated",old_values:G(w),new_values:G(b),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 w=await ce();await le({auditable_type:n,auditable_id:d,event:"deleted",old_values:G(p),new_values:null,user_id:w},o)}}catch(w){if(B.warn(`[orm] audit(${l}) failed for ${n}#${String(d)}`,{error:w}),o)throw w}return y})}};c("delete"),c("softDelete")}import{db as pn,sql as mn,sqlDateTime as fe}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 gn(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??"")}var ze=["pending","approved"];function pe(e){let n=pn;return{async comments(t){return A(t,"comments"),await n.selectFrom("commentables").where("commentables_id","=",t).where("commentables_type","=",e).selectAll().orderBy("id","asc").execute()},async commentCount(t){let r=await n.selectFrom("commentables").select(mn`count(*) as count`).where("commentables_id","=",t).where("commentables_type","=",e).executeTakeFirst();return Number(r?.count)||0},async addComment(t,r,o={}){if(A(t,"addComment"),!r||typeof r.body!=="string"||r.body.trim().length===0)throw Error("[orm/commentable] addComment requires a non-empty comment.body");if(r.title!=null&&typeof r.title!=="string")throw Error("[orm/commentable] addComment requires comment.title to be a string when given");let a=o.status??"pending";if(!ze.includes(a))throw Error(`[orm/commentable] addComment status must be one of ${ze.join(", ")} (received ${String(a)})`);let i={title:r.title?.trim()??"",body:r.body,commentables_id:t,commentables_type:e,status:a,approved_at:a==="approved"?Date.now():null,created_at:fe(),updated_at:fe()};for(let c of["author_name","author_email","user_id"])if(r[c]!=null)i[c]=r[c];let s=await n.insertInto("commentables").values(i).returningAll().executeTakeFirst();if(s&&typeof s==="object"&&"id"in s)return s;let u=s?.lastInsertRowid;if(u==null)return s;return await n.selectFrom("commentables").where("id","=",Number(u)).selectAll().executeTakeFirst()},async approvedComments(t){return await n.selectFrom("commentables").where("commentables_id","=",t).where("commentables_type","=",e).where("status","=","approved").selectAll().orderBy("id","asc").execute()},async pendingComments(t){return await n.selectFrom("commentables").where("commentables_id","=",t).where("commentables_type","=",e).where("status","=","pending").selectAll().orderBy("id","asc").execute()},async rejectedComments(t){return await n.selectFrom("commentables").where("commentables_id","=",t).where("commentables_type","=",e).where("status","=","rejected").selectAll().orderBy("id","asc").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:fe()}).execute()}catch(i){if(!gn(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 yn,sql as wn,sqlDateTime as He}from"@stacksjs/database/runtime";function me(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 ge(e){let n=yn;return{async tags(t){return me(t,"tags"),await n.selectFrom("taggables").where("taggable_id","=",t).where("taggable_type","=",e).selectAll().execute()},async tagCount(t){me(t,"tagCount");let r=await n.selectFrom("taggables").select(wn`count(*) as count`).where("taggable_id","=",t).where("taggable_type","=",e).executeTakeFirst();return Number(r?.count)||0},async addTag(t,r){if(me(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:He(),updated_at:He()}).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 bn,sqlDateTime as J}from"@stacksjs/database/runtime";function ye(e){let n=bn;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 hn,sqlDateTime as kn}from"@stacksjs/database/runtime";function we(e,n){let t=hn,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=kn();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)}}}import{createRequire as Tn}from"module";import{db as _n}from"@stacksjs/database/runtime";var Rn=Tn(import.meta.url);class be extends Error{constructor(e){super(`No subscription ${e} belongs to this user`);this.name="SubscriptionNotOwnedError"}}function Ge(e){let n=_n;return{async syncStripeCustomerDetails(t,r){let{manageCustomer:o}=await import("@stacksjs/payments");return await o.syncStripeCustomerDetails(t,r)},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 typeof r==="string"?await o.setUserDefaultPayment(t,r):await o.setDefaultPaymentMethod(t,r)},async deletePaymentMethod(t,r){let{managePaymentMethod:o}=await import("@stacksjs/payments");return await o.deletePaymentMethod(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={}){if(!await n.selectFrom("subscriptions").where("provider_id","=",r).where("user_id","=",t.id).select(["id"]).executeTakeFirst())throw new be(r);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 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 createPayment(t,r,o={}){let{manageCharge:a}=await import("@stacksjs/payments");return await a.createPayment(t,r,o)},async storeTransaction(t,r,o){let{manageTransaction:a}=await import("@stacksjs/payments");return await a.store(t,r,o)},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)})}}}var Sn={syncStripeCustomerDetails:!0,createStripeUser:!0,updateStripeUser:!0,deleteStripeUser:!0,createOrGetStripeUser:!0,retrieveStripeUser:!0,defaultPaymentMethod:!0,setDefaultPaymentMethod:!0,deletePaymentMethod:!0,addPaymentMethod:!0,paymentMethods:!0,newSubscription:!0,updateSubscription:!0,cancelSubscription:!0,activeSubscription:!0,checkout:!0,createSetupIntent:!0,createPayment:!0,storeTransaction:!0,subscriptionHistory:!0,transactionHistory:!0,connectAccount:!0,createConnectAccount:!0,connectOnboardLink:!0,syncConnectStatus:!0,chargeWithSplit:!0},Y=Object.freeze(Object.keys(Sn));function An(e){return Y.every((n)=>typeof Reflect.get(e,n)==="function")}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=Rn("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 tt(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 Pn(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(tt(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 xn(e){let n={};for(let[t,r]of Object.entries(e))n[R(t)]=r;return n}function qi(e,n){let t=String(n||"").replace(/^\/+|\/+$/g,""),r=String(e).replace(/^\/+/,"");return`/api/${t?`${t}/`:""}${r}`}function nt(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 rt(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 Li(e){return e?.ownership===!1}function Ui(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 Cn(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 vn(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??=Mn(n);let a=r.get(o);if(a!==o&&a in e)t[o]=e[a]}return t}function On(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 Je=new WeakMap,Ye=new WeakMap;function ke(e){let n=Je.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 Je.set(e,t),t}function Mn(e){let n=ke(e),t=Ye.get(n);if(t)return t;let r=new Map(n.map(({field:o,snake:a})=>[o,a]));return Ye.set(n,r),r}function Ki(e,n){if(!n.length)return e;let t={...e};for(let{field:r,snake:o}of ke(n))if(delete t[r],o!==r)delete t[o];return t}function Wi(e,n){if(!e||n.length===0)return e;let t={...e};for(let{field:r,snake:o}of ke(n))if(delete t[r],o!==r)delete t[o];return t}var Dn=["id","uuid","created_at","updated_at","deleted_at"];function Vi(e,n){let t=new Map;for(let r of[...Object.keys(e??{}),...Dn]){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 Qi(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 En={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"?In(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"?$n(e):[],set:(e)=>e==null?null:Array.isArray(e)?JSON.stringify(e):e}},Xe=new WeakMap;function Fn(e,n){let t=Xe.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"?En[a]:a;r.push({attr:o,snake:R(o),definition:a,caster:i})}return Xe.set(e,r),r}function In(e){try{return JSON.parse(e)}catch{return e}}function $n(e){try{return JSON.parse(e)}catch{return[]}}function zi(e,n,t){if(!e||typeof e!=="object"||!n)return e;let r=Object.keys(n);if(r.length===0)return e;let o=Fn(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 jn(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 ot(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 at(e,n,t){let r=n?.attributes;if(!r||typeof r!=="object")return{valid:!0};let o=jn(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=On(f,m),y=f.validate(p);if(!y?.valid&&Array.isArray(y?.errors)&&y.errors.length>0)i=!0,a[c]=y.errors.map((w)=>u.validation?.message?.[w?.code]??w?.message??"invalid")}return i?{valid:!1,errors:a}:{valid:!0}}function Bn(e,n){return`${e}\x00${Nn(n)}`}function Hi(e){let n=new Map;for(let t of e){let r=Bn(String(t.method??""),String(t.path??""));if(!n.has(r))n.set(r,t)}return n}function Nn(e){return e.replace(/\{[^}]*\}/g,"{}").replace(/:[^/]+/g,"{}")}function he(e){if(Array.isArray(e))return e.filter((n)=>typeof n==="string"&&n.length>0);return typeof e==="string"&&e?[e]:[]}function Gi(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?he(o.read):["auth"],write:"write"in o?he(o.write):["auth"],declared:!0}}let r=he(t);return{read:r,write:r,declared:!0}}var et=15,qn=100;function Ji(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(et),10),o=Math.min(Number.isFinite(r)?Math.max(1,r):et,qn);return{page:t,perPage:o,offset:(t-1)*o}}function X(e,n){let t=new URL(e.toString());return t.searchParams.set("page",String(n)),`${t.pathname}${t.search}`}function Ln(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?X(e,n-1):null,next_page_url:o?X(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=X(e,1),u.last_page_url=X(e,c)}return u}function Yi(e,n,t,r,o,a){let{page:i,...s}=Ln(e,n,t,r,o,a);return{current_page:i,...s}}function Xi(e,n){return(n??e??"").toString().trim().toLowerCase()==="warn"?"warn":"deny"}function Zi(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 Un(e){if(e?.ownership===!1)return null;if(e?.ownership)return e.ownership;let n=nt(e);if(n)return{field:n,resolve:async(r,o)=>{let{resolveAuthenticatedTeamId:a}=await import("@stacksjs/auth");return a(Te(o))}};let t=rt(e);if(t)return{field:t,resolve:async(r)=>r?.id??null};return null}function Te(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 Kn(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 Wn(e="id"){return{field:e,resolve:async(n)=>n?.id??null}}function Vn(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(Te(t));if(a==null)return[];return(await o.where("team_id",a).get()??[]).map((s)=>s.id).filter((s)=>s!=null)}catch{return[]}}}}function Qn(e="id"){return{field:e,resolve:async(n,t)=>{try{let{resolveAuthenticatedTeamId:r}=await import("@stacksjs/auth");return await r(Te(t))}catch{return null}}}}function zn(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=Un(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 Hn}from"@stacksjs/router";var it=new WeakMap;function st(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 Gn(e,n){if(typeof e.find==="function")return e.find(n);let t=await e.findMany?.([n]);return st(t??[]).get(n)}async function Jn(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=st(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 os(e,n){let t=Hn();if(!t)return Gn(e,n);let r=it.get(t);if(!r)r=new WeakMap,it.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(()=>{Jn(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 us}from"@stacksjs/database/runtime";class Yn{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 _e}from"@stacksjs/database/runtime";async function ds(e,n){return await _e.transaction(e,n)}async function fs(e){return await _e.savepoint(e)}function ps(e,n){return _e.transactional(e,n)}export*from"@stacksjs/model-meta";import{createModel as lr,registerModel as dr}from"@stacksjs/query-builder";import{log as T}from"@stacksjs/logging/runtime";import{snakeCase as V}from"@stacksjs/strings";import{AsyncLocalStorage as Ft}from"async_hooks";import{toCursorPaginator as fr,toPaginator as pr,toSimplePaginator as mr}from"@stacksjs/pagination";function Se(e,n){let t=xe(),r=t?Re(t,"per_page"):void 0,o=t?Re(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 Ae(e,n){let t=xe(),r=t?ct(t,"cursor"):void 0,o=t?Re(t,"per_page"):void 0,a=e!==void 0?Math.max(1,Math.floor(e)):Math.min(100,Math.max(1,o??15)),s=ut(n!==void 0?n:r??null);return{perPage:a,cursor:s}}function ut(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 Pe(e){let n=xe();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 xe(){if(D===null)return;if(D===void 0)try{let n=tn("@stacksjs/router");if(typeof n.getCurrentRequest==="function")D=n.getCurrentRequest;else{D=null;return}}catch{D=null;return}return D()}function Re(e,n){let t=ct(e,n);if(t===void 0)return;let r=Number(t);return Number.isFinite(r)?r:void 0}function ct(e,n){let t=e.query?.[n];if(t===void 0)return;return Array.isArray(t)?t[0]:t}function lt(){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 Xn,sqlDateTime as Zn}from"@stacksjs/database/runtime";import{log as E}from"@stacksjs/logging";var Z="deleted_at";function dt(e,n="id"){return{async softDelete(t){let r=Zn(),o=e.where(n,t);if(typeof o?.update==="function")return await o.update({[Z]:r}),!0;return!1},async restore(t){let r=e.where(n,t).withTrashed();if(typeof r?.update==="function")return await r.update({[Z]: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 Xn(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(Z);return t?.where?.(Z,"!=",null)??t}}}function ft(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 er(e,n){let t=e.hasMany??[],r=e.hasOne??[],o=t.some((l)=>Ce(l,n,!0)),a=r.some((l)=>Ce(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)=>Ce(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 Ce(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 tr(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=er(e,i);if(!s)continue;await tr(s.className,t,s.model,a,r)}}import{sqlDateTime as or}from"@stacksjs/database/runtime";import{log as nr}from"@stacksjs/logging";var rr=[/^password$/i,/^password_hash$/i,/^api_key$/i,/_token$/i,/_secret$/i,/^remember_token$/i],pt=null;async function mt(){if(pt!=null)return pt;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 gt(){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 yt(e){if(!e||typeof e!=="object")return null;let n={};for(let[t,r]of Object.entries(e)){if(rr.some((o)=>o.test(t)))continue;n[t]=r}return n}function wt(e,n,t){nr.warn(`[orm] ${e} row write failed for ${n}: ${t?.message??String(t)}`)}var ar="activities";function bt(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 ir(e,n,t=[]){let r=yt(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 sr(e,n,t){return t==null?`${e} was ${n}`:`${e} ${String(t)} was ${n}`}async function ur(e){try{let{db:n}=await import("@stacksjs/database/runtime");await n.insertInto(ar).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:or()}).executeTakeFirst()}catch(n){wt("activity",`${e.subject_type}#${String(e.subject_id)}`,n)}}async function cr(e){let{attributes:n,event:t,modelName:r,options:o,primaryKey:a}=e,i=n?.[a]??null,s=await mt();await ur({type:`${r.toLowerCase()}.${t}`,description:sr(r,t,i),subject_type:r,subject_id:i,properties:ir(n,o,e.hidden),causer:s==null?null:`User:${String(s)}`,user_id:s,ip_address:await gt()})}function ve(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 ht(e,n,t,r,o=[]){if(n==="Activity")return;let a=e,i=async(f)=>typeof a.find==="function"?ve(await a.find(f)):null,s=async(f,d)=>{await cr({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",ve(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",ve(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 ne,It=new Ft;function M(){return It.getStore()?.suppressed===!0}function O(e){return Promise.resolve(It.run({suppressed:!0},e))}var $t=new Ft;function gr(){return $t.getStore()?.suppressed===!0}function yr(e){return Promise.resolve($t.run({suppressed:!0},e))}var Ie=Symbol.for("stacks.orm.modelDefinition");class jt 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 kt=new Set,wr=4096,Tt=Object.create(null),_t=0;function W(e){let n=Tt[e];if(n!==void 0)return n;let t=V(e);if(_t<wr)Tt[e]=t,_t++;return t}function br(e,n){let t=typeof e==="string"?e.slice(0,80):String(e),r=`${typeof e}:${t}`;if(kt.has(r))return;kt.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 hr={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 br(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 kr(e){return typeof e==="string"?hr[e]:e}var Rt=new WeakMap;function Bt(e){let n=Object.keys(e),t=Rt.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:kr(a)}});return Rt.set(e,r),r}function St(e,n,t){if(!e||typeof e!=="object")return e;let r={...e};for(let{attr:o,caster:a}of Bt(n))if(o in r)r[o]=a[t].call(a,r[o]);return r}function ee(e){return e==="_attributes"||e==="_original"||e==="_definition"||e==="_hasSaved"||e==="_relations"}var Me=Symbol.for("stacks.modelInstanceProxy"),At,Pt=new WeakMap,Tr={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"},...Object.fromEntries(Y.map((e)=>[e,{bag:"_billable",mode:"model"}])),generateTwoFactorForModel:{bag:"_twoFactor",mode:"model"},verifyTwoFactorCode:{bag:"_twoFactor",mode:"model"}};function _r(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 te(e,n,t){if(e&&typeof e.then==="function")return e.then((r)=>r===n?t:r);return e===n?t:e}function P(e,n){if(!e||typeof e!=="object")return e;let t=e;if(t[Me])return e;let r=t._attributes;if(!r||typeof r!=="object")return e;if(n){for(let{attr:a,caster:i}of Bt(n))if(Object.hasOwn(r,a))r[a]=i.get.call(i,r[a])}let o=n?Pt.get(n):At;if(!o)if(o={get(a,i,s){let u=a;if(i===Me)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),w=y&&typeof y.then==="function"?await y:y;u._attributes[m]=w}let d=l.set;l.set={};try{return te(u.save(),a,s)}finally{l.set=d}}return te(u.save(),a,s)};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 te(u.save(),a,s)}finally{l.set=d}}return te(u.save(),a,s)};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"],w=d.denormalize??{},b=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 $e=w[h]??w[k];if($e){p[k]=_r(b,$e);continue}p[k]=void 0}if(m.id!=null)p.id=String(m.id);return p};if(typeof i==="string"&&!ee(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)=>P(p,n));return m&&typeof m==="object"?P(m,n):m}let d=Tr[i];if(d){let y=u._definition?.__traitMethods?.[d.bag]?.[i];if(typeof y==="function")return d.mode==="model"?(...w)=>y(s,...w):(...w)=>y(u.id,...w)}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"&&!ee(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"&&!ee(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"&&!ee(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)Pt.set(n,o);else At=o;return new Proxy(e,o)}var Nt=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}),Rr={paginate:pr,simplePaginate:mr,cursorPaginate:fr},xt=Symbol.for("stacks.queryBuilderProxy");function Ct(e,n,t){if(Nt[n]){if(Array.isArray(e))return e.map((o)=>P(o,t));let r=Rr[n];if(r&&e&&Array.isArray(e.data)){let o=e.data.map((i)=>P(i,t)),a=r({...e,data:o});return Pe(a)}if(e&&Array.isArray(e.data))return{...e,data:e.data.map((o)=>P(o,t))};return P(e,t)}if(e&&typeof e==="object"&&typeof e.get==="function")return qt(e,t);return e}function qt(e,n){if(!e||typeof e!=="object")return e;if(e[xt])return e;return new Proxy(e,{get(t,r,o){if(r===xt)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}=Se(s[0],s[1]);u=[l,f]}else if(i==="cursorPaginate"){let{perPage:l,cursor:f}=Ae(s[0],s[1]);u=[l,f,s[2],s[3]]}let c=a.apply(t,u);if(!Nt[i]&&c===t)return o;if(c&&typeof c.then==="function")return c.then((l)=>Ct(l,i,n));return Ct(c,i,n)}}})}function Sr(e,n){let t=(i)=>Array.isArray(i)?i.map((s)=>P(s,n)):P(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 qt(c,n)}}}class Lt 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 De 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 Ar=new Set(["id","created_at","updated_at","deleted_at","uuid"]),vt=new WeakMap;function Pr(e){let n=vt.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 vt.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}=Pr(r);for(let i in n){if(!Object.hasOwn(n,i))continue;let s=W(i);if(Ar.has(s))continue;if(a.has(s))throw new De(e.name,i,"guarded");if(s.endsWith("_id"))continue;if(!o.has(s))throw new De(e.name,i,"not-fillable")}return n}async function Ee(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 xr(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 Ee(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 Ee(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[Me]?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 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 Lt(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 b=m.orderBy(f,l);if(typeof b.first==="function")return await b.first();if(typeof b.get==="function")return(await b.get())?.[0]??null}let p=e.all;if(typeof p!=="function")return null;return[...await p.call(e)||[]].sort((b,h)=>{let k=b?.[f],S=h?.[f];if(k===S)return 0;return(k>S?1:-1)*(l==="desc"?-1:1)})[0]??null};let u=Vt(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 Or(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 Fe(k,u);if(S.length>0)await m.addDocuments(c,S);p+=S.length}),p}catch{}let w=await f.call(e)||[],b=await Fe(w,u);if(b.length>0)await m.addDocuments(c,b);return b.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 w=y?.id??y?._attributes?.id;if(w!=null)await p.deleteDocument(c,Number(w))}}}}async function Fe(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)=>vr(r,n)))).filter(Boolean)}function Ut(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 Cr(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 vr(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 Cr(e?._attributes??(typeof e?.toJSON==="function"?e.toJSON():null),n.hidden??new Set)}function Or(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 Kt(e){let n=V(e);return n===e?[e]:[e,n]}async function Oe(e,n){if(!e||typeof e!=="object")return;let t=e._attributes??e;for(let r of n)for(let o of Kt(r)){if(!(o in t))continue;let a=t[o];if(!I(a))continue;t[o]=await se(a)}}function Mr(e,n){if(n.length===0)return;let t=async(s)=>{if(Array.isArray(s)){for(let u of s)await Oe(u,n);return s}if(s&&typeof s==="object"&&Array.isArray(s.data)){for(let u of s.data)await Oe(u,n);return s}if(s)await Oe(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 Dr(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 Kt(i))if(s in a)a[s]=await ie(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 Er(e,n){let t=e.create;if(typeof t==="function")e.create=async function(r,...o){K(n,r);let a=await Ee(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 Fr(e,n){if(!ot(n))return;let t=String(n?.name??e.name??"Model"),r=(i,s)=>{if(gr())return;if(!i||typeof i!=="object"||Array.isArray(i))return;let u=at(i,n,s);if(!u.valid)throw new jt(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 Ir(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]=St(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)?St(a,n,"set"):a;return await r.call(this,o,i)}}var Ot=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 Wt(e){T.debug(`[orm] Defining model: ${e.name} (table: ${e.table})`);for(let y of Object.keys(e.traits??{}))if(!Ot.has(y))T.warn(`[orm] Model '${e.name}' declares an unknown trait '${y}'. It does nothing. Known traits: ${[...Ot].sort().join(", ")}.`);let n=$r(e),t=Br(e),r=jr(n,t),o=Nr(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=lr(i);if(Sr(u,e.casts),xr(u,i),Er(u,i),e.casts&&Object.keys(e.casts).length>0)Ir(u,e.casts);let c=ue(e);if(c.length>0)Dr(u,c),Mr(u,c);let l=e.traits?.useSoftDeletes;if(l)qr(u,i,l);let f=e.traits?.useAudit;if(f){let y=Ve(f);Qe(u,e.name,e.primaryKey||"id",y)}let d=bt(e.traits?.useActivityLog);if(d)ht(u,e.name,e.primaryKey||"id",d,[...Ut(e)]);Fr(u,i);let m=u;m.withoutValidation=function(y){return yr(y)},m.withoutEvents=function(y){return O(y)};for(let y of["create","update","firstOrCreate","updateOrCreate","forceCreate","forceUpdate","delete","forceDelete","softDelete","restore"]){let w=u[y];if(typeof w!=="function")continue;let b=`${y}Quietly`;if(typeof u[b]==="function")continue;u[b]=function(...h){return O(()=>w.apply(u,h))}}let p=Object.assign(u,o,{...e,getDefinition:()=>e,_isStacksModel:!0});return dr(e.name,p),Object.defineProperty(p,Ie,{value:e,enumerable:!1,configurable:!0}),p}function $r(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}=ne??=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],w=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,w)}}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=ne??=await import("@stacksjs/events");let{dispatchAndCollect:y}=p,w=await y(d,m);if(w.some((h)=>h.ok&&h.value===!1))return!1;let b=w.find((h)=>!h.ok);if(b&&!b.ok)throw b.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 jr(...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 Vt(e,n){if(!e)return null;let t=e===!0?{}:typeof e==="object"?{...e}:null;if(!t)return null;if(n)t.hidden=Ut(n);return t}function Br(e){let n=Vt(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 Fe([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=P(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 Dt(r,u,e.name)}return}await Dt(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 Et(r,Number(u),e.name)}return}await Et(r,Number(u),e.name)}}}var Mt=new Map;function Qt(e,n){let t=Mt.get(e)??0;if(Mt.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 Dt(e,n,t){try{let{useSearchEngine:r}=await import("@stacksjs/search-engine");await r().addDocument(e,n)}catch(r){Qt(`index:${t}`,`Failed to index ${t}: ${r.message}`)}}async function Et(e,n,t){try{let{useSearchEngine:r}=await import("@stacksjs/search-engine");await r().deleteDocument(e,n)}catch(r){Qt(`remove:${t}`,`Failed to remove ${t}#${n}: ${r.message}`)}}function Nr(e){let n={},{table:t,traits:r}=e;if(!r)return n;if(r.taggable)n._taggable=ge(t);if(r.categorizable)n._categorizable=ye(t);if(r.commentable)n._commentable=pe(t);if(r.billable)n._billable=Ge(t);if(r.likeable){let a=typeof r.likeable==="object"?r.likeable:void 0;n._likeable=we(t,a)}let o=r.useAuth||r.authenticatable;if(typeof o==="object"&&o&&"useTwoFactor"in o&&o.useTwoFactor)n._twoFactor=lt();return n}function qr(e,n,t){let r=dt(e,n.primaryKey||"id"),o=ft(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}=ne??=await import("@stacksjs/events"),y=await p(`${i}:restoring`,{id:m});if(Array.isArray(y)&&y.some((w)=>w===!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}=ne??=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 b=await r.restore(m);if(b){if(o.cascade?.length)await U(a,o,m,"restore");await c(m)}return b}let{db:y}=await import("@stacksjs/database/runtime"),w=await y.transaction(async()=>{let b=await r.restore(m);if(b)await U(a,o,m,"restore");return b});if(w)await c(m);return w};e.softDelete=f,e.restore=d,e.forceDelete=r.forceDelete,e.withTrashed=r.withTrashed,e.onlyTrashed=r.onlyTrashed,e.delete=f}function Lr(e){if(e==null)return e;if(Array.isArray(e))return e.map((t)=>Lr(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 Ur=["belongsTo","hasOne","hasMany","belongsToMany","morphMany","morphOne"],Kr=["traits","dashboard"];function Wr(e){let n=e?.[Ie];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 Vr(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 zr(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 Ur){let i=Vr(e[a],n[a]);if(i)t[a]=i}for(let a of Kr){let i=e[a],s=n[a];if(i&&s&&typeof i==="object"&&typeof s==="object")t[a]={...i,...s}}return t}function Ws(e,n){return Wt(zr(Wr(e),n))}import to from"process";import{log as no}from"@stacksjs/logging";import{path as _}from"@stacksjs/path";import{fs as Q}from"@stacksjs/storage";import{Database as Hr}from"bun:sqlite";import{existsSync as Gr,readdirSync as Jr,readFileSync as Yr}from"fs";function Xr(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 eo(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 zt(e,n="sqlite"){let t=[];if(!Gr(e))return{tables:[],errors:t};let r;try{r=Jr(e).filter((a)=>a.endsWith(".sql")).sort()}catch(a){return{tables:[],errors:[{file:e,error:a.message}]}}let o=new Hr(":memory:");try{for(let s of r){let u=`${e}/${s}`,c;try{c=Yr(u,"utf-8")}catch(f){t.push({file:u,error:f.message});continue}let l=eo(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)=>!Xr(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 ro(e){if(e)return e;let n=String(to.env.DB_CONNECTION??"").toLowerCase();return n==="postgres"||n==="mysql"?n:"sqlite"}function re(e){return e==="postgres"?"boolean":"number"}function x(e){return e.replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").toLowerCase()}function oo(e,n){let t=e.default;if(typeof t==="boolean")return re(n);if(typeof t==="number")return"number";if(typeof t==="string")return"string";return"unknown"}function ao(e){let n=e.validation;if(!n||typeof n!=="object")return null;let t=n.rule;return t&&typeof t==="object"?t:null}function io(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 so(e,n){let t=ao(e),r=io(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 re(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 oo(e,n)}})();return e.nullable===!0?`${a} | null`:a}function uo(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[`${x(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[`${x(a.model)}_id`]="number"}}return n}function co(e,n){let[t,r]=[x(e),x(n)].sort();return`${t}_${r}`}function lo(e,n){let t=e.default,r=typeof t==="string"?"string":typeof t==="number"?"number":typeof t==="boolean"?re(n):t instanceof Date?"string":"unknown";return e.nullable?`${r} | null`:r}function fo(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 b=i;if(s=b.model,"pivotTable"in b||"firstForeignKey"in b||"secondForeignKey"in b)u=b.pivotTable,c=b.firstForeignKey,l=b.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??co(e,s),p=c??`${x(e)}_id`,y=l??`${x(s)}_id`,w={id:"number",[p]:"number",[y]:"number"};for(let[b,h]of Object.entries(f))w[b]=lo(h,t);if(d)w.created_at="string",w.updated_at="string | null";o.push({table:m,columns:w})}return o}function po(e){return{email_verified_at:"string | null",password_changed_at:"string | null",two_factor_secret:"string | null",two_factor_enabled:`${re(e)} | null`,two_factor_last_used_step:"number | null",stripe_id:"string | null"}}function mo(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,po(n));return t}function go(e,n){let t={},r=e.attributes??{};for(let[o,a]of Object.entries(r))t[x(o)]=so(a,n);return t}function Ht(e,n,t=2){let r=" ".repeat(t),o=" ".repeat(t+1),a=Object.entries(n).map(([s,u])=>`${o}${s}: ${u}`).join(`
|
|
3
3
|
`),i=/^[A-Z_a-z]\w*$/.test(e)?e:`'${e}'`;return`${r}${i}: {
|
|
4
4
|
${o}// columns
|
|
5
5
|
${a}
|
|
6
|
-
${r}}`}var
|
|
6
|
+
${r}}`}var yo=`/* 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
|
+
`,wo=` }
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
export {}
|
|
17
|
-
`,
|
|
18
|
-
`;function
|
|
19
|
-
`),m=`${
|
|
20
|
-
${
|
|
21
|
-
`);return`${
|
|
22
|
-
${Gt(n)}`}import{isCursorPaginator as Mu,isPaginator as Du,isSimplePaginator as Eu,toCursorPaginator as Fu,toPaginator as Iu,toSimplePaginator as $u}from"@stacksjs/pagination";import{configureOrm as To}from"@stacksjs/query-builder";function _o(){try{let e=process.env.DB_DATABASE_PATH||"database/stacks.sqlite";if((process.env.DB_CONNECTION||"sqlite")==="sqlite")To({database:e})}catch{}}_o();async function Yt(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 oe(e,n=[""]){let{path:t}=await import("@stacksjs/path"),r=t.userModelsPath(`${e}.ts`);try{if(await Bun.file(r).exists())return await Yt(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 Yt(i)}catch(s){console.error(`[orm] Failed to import framework default model ${e} from ${i} - trying next subdir. Reason:`,s)}}return null}var C={},Xt=()=>{},nu=new Promise((e)=>{Xt=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 Ro=g("User"),So=g("Job"),Ao=g("FailedJob"),Po=[["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 oe("User");if(n)C.User=n;if(e("queue")){let t=await oe("Job");if(t)C.Job=t;let r=await oe("FailedJob");if(r)C.FailedJob=r}for(let[t,r,o]of Po){if(!e(o))continue;let a=await oe(t,r);if(a)C[t]=a}}catch(e){console.error("[orm] deferred model load failed:",e)}finally{Xt()}});var xo=g("Activity"),Co=g("AnalyticsEvent"),Oo=g("Automation"),vo=g("AutomationRun"),Mo=g("Auction"),Do=g("CampaignVariant"),Eo=g("CommunicationSuppression"),Fo=g("ConsentEvent"),Io=g("SenderDomain"),$o=g("UsageEvent"),jo=g("AuctionItem"),Bo=g("Author"),No=g("Bid"),qo=g("Board"),Lo=g("BoardColumn"),Uo=g("Campaign"),Ko=g("Card"),Wo=g("CardComment"),Vo=g("Cart"),Qo=g("CartItem"),zo=g("Category"),Ho=g("Comment"),Go=g("Coupon"),Jo=g("Customer"),Yo=g("DeliveryRoute"),Xo=g("DeliveryStop"),Zo=g("Deployment"),ea=g("DigitalDelivery"),ta=g("Courier"),na=g("CourierPing"),ra=g("CampaignSend"),oa=g("EmailList"),aa=g("EmailListSubscriber"),ia=g("Form"),sa=g("FormField"),ua=g("FormSubmission"),ca=g("MagicLinkToken"),la=g("Menu"),da=g("MenuItem"),fa=g("PageRevision"),pa=g("Pledge"),ma=g("Redirect"),ga=g("Site"),ya=g("SiteDomain"),wa=g("SmsOptOut"),ru=g("StorageItem"),ou=g("StorageItemTask"),ba=g("EmailIdempotency"),ha=g("EmailSuppression"),ka=g("EmailWebhookEvent"),Ta=g("Error"),_a=g("GiftCard"),Ra=g("Label"),Sa=g("LicenseKey"),Aa=g("Log"),Pa=g("LoyaltyPoint"),xa=g("LoyaltyReward"),Ca=g("MailPreference"),Oa=g("Manufacturer"),va=g("Notification"),Ma=g("NotificationDelivery"),Da=g("Order"),Ea=g("OrderIdempotency"),au=g("PersonalAccessToken"),Fa=g("OrderItem"),Ia=g("Page"),$a=g("Payment"),ja=g("PaymentMethod"),Ba=g("PaymentProduct"),Na=g("PaymentTransaction"),qa=g("Post"),La=g("Categorizable"),Ua=g("PrintDevice"),Ka=g("Product"),Wa=g("ProductUnit"),Va=g("ProductVariant"),Qa=g("QueryLog"),za=g("Receipt"),iu=g("Referral"),su=g("ReferralCode"),Ha=g("Release"),Ga=g("Request"),Ja=g("Review"),Ya=g("ShippingMethod"),Xa=g("ShippingRate"),Za=g("ShippingZone"),ei=g("SocialPost"),ti=g("SocialAccount"),ni=g("Subscriber"),ri=g("SubscriberEmail"),oi=g("Subscription"),ai=g("Tag"),ii=g("TaxRate"),si=g("Team"),ui=g("TeamInvitation"),ci=g("TeamMember"),li=g("Transaction"),di=g("WaitlistProduct"),fi=g("WaitlistRestaurant"),pi=g("Websocket"),Zt={User:Ro,Job:So,FailedJob:Ao,Activity:xo,AnalyticsEvent:Co,Automation:Oo,AutomationRun:vo,Auction:Mo,AuctionItem:jo,Author:Bo,Bid:No,Board:qo,BoardColumn:Lo,Campaign:Uo,CampaignSend:ra,CampaignVariant:Do,Card:Ko,CardComment:Wo,Cart:Vo,CartItem:Qo,Categorizable:La,Category:zo,Comment:Ho,Coupon:Go,Customer:Jo,CommunicationSuppression:Eo,ConsentEvent:Fo,DeliveryRoute:Yo,DeliveryStop:Xo,Deployment:Zo,DigitalDelivery:ea,Courier:ta,CourierPing:na,EmailList:oa,EmailListSubscriber:aa,EmailIdempotency:ba,EmailSuppression:ha,EmailWebhookEvent:ka,ErrorModel:Ta,Form:ia,FormField:sa,FormSubmission:ua,GiftCard:_a,Label:Ra,LicenseKey:Sa,Log:Aa,LoyaltyPoint:Pa,LoyaltyReward:xa,MailPreference:Ca,Manufacturer:Oa,Notification:va,MagicLinkToken:ca,Menu:la,MenuItem:da,NotificationDelivery:Ma,Order:Da,OrderIdempotency:Ea,OrderItem:Fa,Page:Ia,PageRevision:fa,Payment:$a,PaymentMethod:ja,PaymentProduct:Ba,PaymentTransaction:Na,Pledge:pa,Post:qa,PrintDevice:Ua,Product:Ka,ProductUnit:Wa,ProductVariant:Va,QueryLog:Qa,Receipt:za,Release:Ha,Request:Ga,Review:Ja,ShippingMethod:Ya,Redirect:ma,SenderDomain:Io,ShippingRate:Xa,ShippingZone:Za,Site:ga,SiteDomain:ya,SmsOptOut:wa,SocialAccount:ti,SocialPost:ei,Subscriber:ni,SubscriberEmail:ri,Subscription:oi,Tag:ai,TaxRate:ii,Team:si,TeamInvitation:ui,TeamMember:ci,Transaction:li,UsageEvent:$o,WaitlistProduct:di,WaitlistRestaurant:fi,Websocket:pi},F=globalThis;for(let[e,n]of Object.entries(Zt))if(n&&F[e]===void 0)F[e]=n;var uu=Object.keys(Zt);async function mi(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 gi(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=mi;if(F.safeGet===void 0)F.safeGet=gi;export{xo as Activity,Co as AnalyticsEvent,Mo as Auction,jo as AuctionItem,Bo as Author,Oo as Automation,vo as AutomationRun,Y as BILLABLE_INSTANCE_METHODS,No as Bid,qo as Board,Lo as BoardColumn,Uo as Campaign,ra as CampaignSend,Do as CampaignVariant,Ko as Card,Wo as CardComment,Vo as Cart,Qo as CartItem,La as Categorizable,zo as Category,Ho as Comment,Eo as CommunicationSuppression,Fo as ConsentEvent,Go as Coupon,ta as Courier,na as CourierPing,Jo as Customer,Yo as DeliveryRoute,Xo as DeliveryStop,Zo as Deployment,ea as DigitalDelivery,ba as EmailIdempotency,oa as EmailList,aa as EmailListSubscriber,ha as EmailSuppression,ka as EmailWebhookEvent,Ta as ErrorModel,Ao as FailedJob,ia as Form,sa as FormField,ua as FormSubmission,_a as GiftCard,So as Job,Ra as Label,Sa as LicenseKey,Aa as Log,Pa as LoyaltyPoint,xa as LoyaltyReward,Ie as MODEL_DEFINITION,ca as MagicLinkToken,Ca as MailPreference,Oa as Manufacturer,De as MassAssignmentException,la as Menu,da as MenuItem,qt as ModelNotFoundError,$t as ModelValidationError,va as Notification,Ma as NotificationDelivery,Da as Order,Ea as OrderIdempotency,Fa as OrderItem,Ia as Page,fa as PageRevision,$a as Payment,ja as PaymentMethod,Ba as PaymentProduct,Na as PaymentTransaction,au as PersonalAccessToken,pa as Pledge,qa as Post,Ua as PrintDevice,Ka as Product,Wa as ProductUnit,Va as ProductVariant,Qa as QueryLog,za as Receipt,ma as Redirect,iu as Referral,su as ReferralCode,Ha as Release,Ga as Request,Ja as Review,Io as SenderDomain,Ya as ShippingMethod,Xa as ShippingRate,Za as ShippingZone,ga as Site,ya as SiteDomain,wa as SmsOptOut,ti as SocialAccount,ei as SocialPost,ru as StorageItem,ou as StorageItemTask,Jn as SubqueryBuilder,ni as Subscriber,ri as SubscriberEmail,oi as Subscription,be as SubscriptionNotOwnedError,ai as Tag,ii as TaxRate,si as Team,ui as TeamInvitation,ci as TeamMember,li as Transaction,$o as UsageEvent,Ro as User,di as WaitlistProduct,fi as WaitlistRestaurant,pi as Websocket,rs as batchLoad,ho as buildDatabaseSchema,ue as collectEncryptedAttributes,We as createAuditMethods,ye as createCategorizableMethods,pe as createCommentableMethods,we as createLikeableMethods,ge as createTaggableMethods,Un as customerOwnership,ss as db,se as decryptValue,Kt as defineModel,ie as encryptValue,Pe as enrichPaginatorUrls,Ks as extendModel,Cn as filterFillable,ki as getPrunableConfig,xn as getWritableFields,Sn as isBillable,Mu as isCursorPaginator,I as isEncrypted,Du as isPaginator,Eu as isSimplePaginator,et as isUniqueViolation,An as mapWriteError,hi as massPrunable,Qr as mergeModelDefinition,uu as modelGlobalNames,nu as ormReady,Qn as parentOwnership,st as parseCursor,Fe as projectDocumentsFromTrait,tn as prunable,ko as renderDatabaseTypeFile,Ae as resolveCursorArgs,Se as resolvePageArgs,ds as savepoint,Kn as selfOwnership,ln as setAuditUser,Wn as siteOwnership,Vn as teamMembershipOwnership,qr as toAttrs,Fu as toCursorPaginator,Iu as toPaginator,$u as toSimplePaginator,Pn as toSnakeCaseKeys,ls as transaction,fs as transactional,v as withoutEvents,gr as withoutValidation};
|
|
17
|
+
`,bo="/* 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",ho=`}
|
|
18
|
+
`;function Gt(e){return e==="framework"?bo:yo}function Jt(e){return e==="framework"?ho:wo}async function Yt(e,n,t=[]){let r=[];if(!Q.existsSync(e))return r;let o=Q.readdirSync(e,{withFileTypes:!0});for(let a of o){let i=_.join(e,a.name);if(a.isDirectory()){if(n){let s=await Yt(i,!0,t);r.push(...s)}continue}if(!a.name.endsWith(".ts"))continue;if(a.name.startsWith("_")||a.name.startsWith("index"))continue;try{let s=await(_.isAbsolute(i)?import(i):import(_.resolve(i))),u=s.default||s;if(u?.name&&(u.attributes||u.table))r.push({filePath:i,model:u})}catch(s){t.push({file:i,error:s.message})}}return r}async function ko(e={}){let n=ro(e.dialect),t=e.modelsDir??_.userModelsPath(),r=e.defaultsDir??_.frameworkPath("defaults/app/Models"),o=e.outFile??_.projectPath("database/types.d.ts"),a=[],i=[];for(let[p,y]of[[t,!1],[r,!0]])try{let w=await Yt(p,y,a);i.push(...w)}catch(w){a.push({file:p,error:w.message})}let s=new Map;for(let p of i)s.set(p.model.name??_.basename(p.filePath).replace(/\.ts$/,""),p);for(let p of i)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 w=y.table??`${x(p)}s`,b={...mo(y,n),...go(y,n),...uo(y)};u.push({table:w,model:p,columns:b})}let c=new Map;for(let[p,{model:y}]of s)for(let w of fo(p,y,n)){if(c.has(w.table))continue;c.set(w.table,{table:w.table,model:`(${w.table} pivot)`,columns:w.columns})}if(u.push(...c.values()),e.migrationsDir!==!1){let p=e.migrationsDir??_.resolve(_.dirname(o),"migrations"),y=new Set(u.map((b)=>b.table)),w=zt(p,n);for(let b of w.tables){if(y.has(b.table))continue;y.add(b.table),u.push({table:b.table,model:`(${b.table} migration)`,columns:b.columns})}a.push(...w.errors)}u.sort((p,y)=>p.table.localeCompare(y.table));let l=e.target??"app",f=l==="framework"?1:2,d=u.map((p)=>Ht(p.table,p.columns,f)).join(`
|
|
19
|
+
`),m=`${Gt(l)}${d}
|
|
20
|
+
${Jt(l)}`;if(!e.dryRun){let p=_.dirname(o);if(!Q.existsSync(p))Q.mkdirSync(p,{recursive:!0});Q.writeFileSync(o,m,"utf-8"),no.success(`[generate:db-types] wrote ${u.length} table(s) to ${o}`)}return{outFile:o,tables:u,errors:a,content:m}}function To(e,n="app"){let t=[...e].sort((r,o)=>r.table.localeCompare(o.table)).map((r)=>Ht(r.table,r.columns,n==="framework"?1:2)).join(`
|
|
21
|
+
`);return`${Gt(n)}${t}
|
|
22
|
+
${Jt(n)}`}import{isCursorPaginator as Du,isPaginator as Eu,isSimplePaginator as Fu,toCursorPaginator as Iu,toPaginator as $u,toSimplePaginator as ju}from"@stacksjs/pagination";import{configureOrm as _o}from"@stacksjs/query-builder";function Ro(){try{let e=process.env.DB_DATABASE_PATH||"database/stacks.sqlite";if((process.env.DB_CONNECTION||"sqlite")==="sqlite")_o({database:e})}catch{}}Ro();async function Xt(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 oe(e,n=[""]){let{path:t}=await import("@stacksjs/path"),r=t.userModelsPath(`${e}.ts`);try{if(await Bun.file(r).exists())return await Xt(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 Xt(i)}catch(s){console.error(`[orm] Failed to import framework default model ${e} from ${i} - trying next subdir. Reason:`,s)}}return null}var C={},Zt=()=>{},ru=new Promise((e)=>{Zt=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 So=g("User"),Ao=g("Job"),Po=g("FailedJob"),xo=[["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 oe("User");if(n)C.User=n;if(e("queue")){let t=await oe("Job");if(t)C.Job=t;let r=await oe("FailedJob");if(r)C.FailedJob=r}for(let[t,r,o]of xo){if(!e(o))continue;let a=await oe(t,r);if(a)C[t]=a}}catch(e){console.error("[orm] deferred model load failed:",e)}finally{Zt()}});var Co=g("Activity"),vo=g("AnalyticsEvent"),Oo=g("Automation"),Mo=g("AutomationRun"),Do=g("Auction"),Eo=g("CampaignVariant"),Fo=g("CommunicationSuppression"),Io=g("ConsentEvent"),$o=g("SenderDomain"),jo=g("UsageEvent"),Bo=g("AuctionItem"),No=g("Author"),qo=g("Bid"),Lo=g("Board"),Uo=g("BoardColumn"),Ko=g("Campaign"),Wo=g("Card"),Vo=g("CardComment"),Qo=g("Cart"),zo=g("CartItem"),Ho=g("Category"),Go=g("Comment"),Jo=g("Coupon"),Yo=g("Customer"),Xo=g("DeliveryRoute"),Zo=g("DeliveryStop"),ea=g("Deployment"),ta=g("DigitalDelivery"),na=g("Courier"),ra=g("CourierPing"),oa=g("CampaignSend"),aa=g("EmailList"),ia=g("EmailListSubscriber"),sa=g("Form"),ua=g("FormField"),ca=g("FormSubmission"),la=g("MagicLinkToken"),da=g("Menu"),fa=g("MenuItem"),pa=g("PageRevision"),ma=g("Pledge"),ga=g("Redirect"),ya=g("Site"),wa=g("SiteDomain"),ba=g("SmsOptOut"),ou=g("StorageItem"),au=g("StorageItemTask"),ha=g("EmailIdempotency"),ka=g("EmailSuppression"),Ta=g("EmailWebhookEvent"),_a=g("Error"),Ra=g("GiftCard"),Sa=g("Label"),Aa=g("LicenseKey"),Pa=g("Log"),xa=g("LoyaltyPoint"),Ca=g("LoyaltyReward"),va=g("MailPreference"),Oa=g("Manufacturer"),Ma=g("Notification"),Da=g("NotificationDelivery"),Ea=g("Order"),Fa=g("OrderIdempotency"),iu=g("PersonalAccessToken"),Ia=g("OrderItem"),$a=g("Page"),ja=g("Payment"),Ba=g("PaymentMethod"),Na=g("PaymentProduct"),qa=g("PaymentTransaction"),La=g("Post"),Ua=g("Categorizable"),Ka=g("PrintDevice"),Wa=g("Product"),Va=g("ProductUnit"),Qa=g("ProductVariant"),za=g("QueryLog"),Ha=g("Receipt"),su=g("Referral"),uu=g("ReferralCode"),Ga=g("Release"),Ja=g("Request"),Ya=g("Review"),Xa=g("ShippingMethod"),Za=g("ShippingRate"),ei=g("ShippingZone"),ti=g("SocialPost"),ni=g("SocialAccount"),ri=g("Subscriber"),oi=g("SubscriberEmail"),ai=g("Subscription"),ii=g("Tag"),si=g("TaxRate"),ui=g("Team"),ci=g("TeamInvitation"),li=g("TeamMember"),di=g("Transaction"),fi=g("WaitlistProduct"),pi=g("WaitlistRestaurant"),mi=g("Websocket"),en={User:So,Job:Ao,FailedJob:Po,Activity:Co,AnalyticsEvent:vo,Automation:Oo,AutomationRun:Mo,Auction:Do,AuctionItem:Bo,Author:No,Bid:qo,Board:Lo,BoardColumn:Uo,Campaign:Ko,CampaignSend:oa,CampaignVariant:Eo,Card:Wo,CardComment:Vo,Cart:Qo,CartItem:zo,Categorizable:Ua,Category:Ho,Comment:Go,Coupon:Jo,Customer:Yo,CommunicationSuppression:Fo,ConsentEvent:Io,DeliveryRoute:Xo,DeliveryStop:Zo,Deployment:ea,DigitalDelivery:ta,Courier:na,CourierPing:ra,EmailList:aa,EmailListSubscriber:ia,EmailIdempotency:ha,EmailSuppression:ka,EmailWebhookEvent:Ta,ErrorModel:_a,Form:sa,FormField:ua,FormSubmission:ca,GiftCard:Ra,Label:Sa,LicenseKey:Aa,Log:Pa,LoyaltyPoint:xa,LoyaltyReward:Ca,MailPreference:va,Manufacturer:Oa,Notification:Ma,MagicLinkToken:la,Menu:da,MenuItem:fa,NotificationDelivery:Da,Order:Ea,OrderIdempotency:Fa,OrderItem:Ia,Page:$a,PageRevision:pa,Payment:ja,PaymentMethod:Ba,PaymentProduct:Na,PaymentTransaction:qa,Pledge:ma,Post:La,PrintDevice:Ka,Product:Wa,ProductUnit:Va,ProductVariant:Qa,QueryLog:za,Receipt:Ha,Release:Ga,Request:Ja,Review:Ya,ShippingMethod:Xa,Redirect:ga,SenderDomain:$o,ShippingRate:Za,ShippingZone:ei,Site:ya,SiteDomain:wa,SmsOptOut:ba,SocialAccount:ni,SocialPost:ti,Subscriber:ri,SubscriberEmail:oi,Subscription:ai,Tag:ii,TaxRate:si,Team:ui,TeamInvitation:ci,TeamMember:li,Transaction:di,UsageEvent:jo,WaitlistProduct:fi,WaitlistRestaurant:pi,Websocket:mi},F=globalThis;for(let[e,n]of Object.entries(en))if(n&&F[e]===void 0)F[e]=n;var cu=Object.keys(en);async function gi(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 yi(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=gi;if(F.safeGet===void 0)F.safeGet=yi;export{Co as Activity,vo as AnalyticsEvent,Do as Auction,Bo as AuctionItem,No as Author,Oo as Automation,Mo as AutomationRun,Y as BILLABLE_INSTANCE_METHODS,qo as Bid,Lo as Board,Uo as BoardColumn,Ko as Campaign,oa as CampaignSend,Eo as CampaignVariant,Wo as Card,Vo as CardComment,Qo as Cart,zo as CartItem,Ua as Categorizable,Ho as Category,Go as Comment,Fo as CommunicationSuppression,Io as ConsentEvent,Jo as Coupon,na as Courier,ra as CourierPing,Yo as Customer,Xo as DeliveryRoute,Zo as DeliveryStop,ea as Deployment,ta as DigitalDelivery,ha as EmailIdempotency,aa as EmailList,ia as EmailListSubscriber,ka as EmailSuppression,Ta as EmailWebhookEvent,_a as ErrorModel,Po as FailedJob,sa as Form,ua as FormField,ca as FormSubmission,Ra as GiftCard,Ao as Job,Sa as Label,Aa as LicenseKey,Pa as Log,xa as LoyaltyPoint,Ca as LoyaltyReward,Ie as MODEL_DEFINITION,la as MagicLinkToken,va as MailPreference,Oa as Manufacturer,De as MassAssignmentException,da as Menu,fa as MenuItem,Lt as ModelNotFoundError,jt as ModelValidationError,Ma as Notification,Da as NotificationDelivery,Ea as Order,Fa as OrderIdempotency,Ia as OrderItem,$a as Page,pa as PageRevision,ja as Payment,Ba as PaymentMethod,Na as PaymentProduct,qa as PaymentTransaction,iu as PersonalAccessToken,ma as Pledge,La as Post,Ka as PrintDevice,Wa as Product,Va as ProductUnit,Qa as ProductVariant,za as QueryLog,Ha as Receipt,ga as Redirect,su as Referral,uu as ReferralCode,Ga as Release,Ja as Request,Ya as Review,$o as SenderDomain,Xa as ShippingMethod,Za as ShippingRate,ei as ShippingZone,ya as Site,wa as SiteDomain,ba as SmsOptOut,ni as SocialAccount,ti as SocialPost,ou as StorageItem,au as StorageItemTask,Yn as SubqueryBuilder,ri as Subscriber,oi as SubscriberEmail,ai as Subscription,be as SubscriptionNotOwnedError,ii as Tag,si as TaxRate,ui as Team,ci as TeamInvitation,li as TeamMember,di as Transaction,jo as UsageEvent,So as User,fi as WaitlistProduct,pi as WaitlistRestaurant,mi as Websocket,os as batchLoad,ko as buildDatabaseSchema,ue as collectEncryptedAttributes,We as createAuditMethods,ye as createCategorizableMethods,pe as createCommentableMethods,we as createLikeableMethods,ge as createTaggableMethods,Kn as customerOwnership,us as db,se as decryptValue,Wt as defineModel,ie as encryptValue,Pe as enrichPaginatorUrls,Ws as extendModel,vn as filterFillable,Ti as getPrunableConfig,Cn as getWritableFields,An as isBillable,Du as isCursorPaginator,I as isEncrypted,Eu as isPaginator,Fu as isSimplePaginator,tt as isUniqueViolation,Pn as mapWriteError,ki as massPrunable,zr as mergeModelDefinition,cu as modelGlobalNames,ru as ormReady,zn as parentOwnership,ut as parseCursor,Fe as projectDocumentsFromTrait,nn as prunable,To as renderDatabaseTypeFile,Ae as resolveCursorArgs,Se as resolvePageArgs,fs as savepoint,Wn as selfOwnership,dn as setAuditUser,Vn as siteOwnership,Qn as teamMembershipOwnership,Lr as toAttrs,Iu as toCursorPaginator,$u as toPaginator,ju as toSimplePaginator,xn as toSnakeCaseKeys,ds as transaction,ps as transactional,O as withoutEvents,yr as withoutValidation};
|
|
@@ -1 +1,12 @@
|
|
|
1
1
|
export declare function createCommentableMethods(tableName: string): void;
|
|
2
|
+
/** The fields a caller may set on a new comment. */
|
|
3
|
+
export declare interface NewComment {
|
|
4
|
+
body: string
|
|
5
|
+
title?: string | null
|
|
6
|
+
author_name?: string | null
|
|
7
|
+
author_email?: string | null
|
|
8
|
+
user_id?: number | null
|
|
9
|
+
}
|
|
10
|
+
export declare interface AddCommentOptions {
|
|
11
|
+
status?: 'pending' | 'approved'
|
|
12
|
+
}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@stacksjs/orm",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.75.
|
|
5
|
+
"version": "0.75.1",
|
|
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.75.
|
|
67
|
-
"@stacksjs/cli": "0.75.
|
|
68
|
-
"@stacksjs/config": "0.75.
|
|
69
|
-
"@stacksjs/database": "0.75.
|
|
70
|
-
"@stacksjs/env": "0.75.
|
|
71
|
-
"@stacksjs/error-handling": "0.75.
|
|
72
|
-
"@stacksjs/events": "0.75.
|
|
73
|
-
"@stacksjs/logging": "0.75.
|
|
74
|
-
"@stacksjs/model-meta": "0.75.
|
|
75
|
-
"@stacksjs/pagination": "0.75.
|
|
76
|
-
"@stacksjs/path": "0.75.
|
|
77
|
-
"@stacksjs/query-builder": "0.75.
|
|
78
|
-
"@stacksjs/realtime": "0.75.
|
|
79
|
-
"@stacksjs/router": "0.75.
|
|
80
|
-
"@stacksjs/storage": "0.75.
|
|
81
|
-
"@stacksjs/strings": "0.75.
|
|
66
|
+
"@stacksjs/cache": "0.75.1",
|
|
67
|
+
"@stacksjs/cli": "0.75.1",
|
|
68
|
+
"@stacksjs/config": "0.75.1",
|
|
69
|
+
"@stacksjs/database": "0.75.1",
|
|
70
|
+
"@stacksjs/env": "0.75.1",
|
|
71
|
+
"@stacksjs/error-handling": "0.75.1",
|
|
72
|
+
"@stacksjs/events": "0.75.1",
|
|
73
|
+
"@stacksjs/logging": "0.75.1",
|
|
74
|
+
"@stacksjs/model-meta": "0.75.1",
|
|
75
|
+
"@stacksjs/pagination": "0.75.1",
|
|
76
|
+
"@stacksjs/path": "0.75.1",
|
|
77
|
+
"@stacksjs/query-builder": "0.75.1",
|
|
78
|
+
"@stacksjs/realtime": "0.75.1",
|
|
79
|
+
"@stacksjs/router": "0.75.1",
|
|
80
|
+
"@stacksjs/storage": "0.75.1",
|
|
81
|
+
"@stacksjs/strings": "0.75.1",
|
|
82
82
|
"@stacksjs/ts-validation": "^0.5.6",
|
|
83
|
-
"@stacksjs/validation": "0.75.
|
|
83
|
+
"@stacksjs/validation": "0.75.1",
|
|
84
84
|
"bun-query-builder": "^0.2.70"
|
|
85
85
|
},
|
|
86
86
|
"peerDependencies": {
|
|
87
|
-
"@stacksjs/auth": "0.75.
|
|
88
|
-
"@stacksjs/payments": "0.75.
|
|
89
|
-
"@stacksjs/queue": "0.75.
|
|
90
|
-
"@stacksjs/search-engine": "0.75.
|
|
87
|
+
"@stacksjs/auth": "0.75.1",
|
|
88
|
+
"@stacksjs/payments": "0.75.1",
|
|
89
|
+
"@stacksjs/queue": "0.75.1",
|
|
90
|
+
"@stacksjs/search-engine": "0.75.1",
|
|
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.75.
|
|
111
|
+
"@stacksjs/types": "0.75.1",
|
|
112
112
|
"better-dx": "^0.2.24",
|
|
113
113
|
"stripe": "22.3.2"
|
|
114
114
|
}
|