UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

1 lines 184 kB
import{constants_default as e,logger_default as t,lucid_error_default as n,permission_groups_default as r,tidy_zod_errors_default as i,translations_default as a}from"./errors-RyYO6qM6.js";import{service_wrapper_default as o}from"./service-wrapper-Duby87GY.js";import{choose_accept_header_format_default as s,create_media_url_default as c,formatters_default as l,generate_key_default as u,generate_process_key_default as d,get_file_metadata_default as f}from"./formatters-CNwZ581Q.js";import{build_table_name_default as p,collectionTableParts as m,prefix_generated_column_name_default as h}from"./build-table-name-yLR81YJn.js";import g from"zod/v4";import _ from"lodash.merge";import{add as v,addMilliseconds as y,format as ee,getHours as te,subDays as ne}from"date-fns";import re from"mime-types";import b,{randomBytes as ie}from"node:crypto";import ae,{dirname as oe}from"node:path";import{deleteCookie as x,getCookie as S,setCookie as C}from"hono/cookie";import{sign as se,verify as w}from"hono/jwt";import{sql as T}from"kysely";import{scrypt as E}from"@noble/hashes/scrypt.js";import{fileURLToPath as ce,pathToFileURL as le}from"node:url";import{PassThrough as ue}from"node:stream";import{scrypt as de}from"@noble/hashes/scrypt";import{randomBytes as fe}from"@noble/hashes/utils.js";const pe=e=>e.filter((e,t,n)=>t===n.findIndex(t=>t.localeCode===e.localeCode));var me=pe;const he=e=>{let t=[];for(let n of e){let e=me(n.translations);for(let r of e)t.push({...r,key:n.key})}return t};var ge=he;const _e=e=>{let t=e.flatMap(e=>e.map(e=>e.localeCode));return Array.from(new Set(t))};var ve=_e;const ye=e=>e.some(e=>e!==void 0&&e.length>0);var be=ye;const xe=t=>(x(t,e.cookies.accessToken,{path:`/`}),{error:void 0,data:void 0});var Se=xe;const Ce=async t=>{try{let n=t.get(`config`),r=S(t,e.cookies.accessToken);if(!r)return{error:{type:`authorisation`,code:`authorisation`,message:a(`not_authorised_to_perform_action`)},data:void 0};let i=await w(r,n.keys.accessTokenSecret);return{error:void 0,data:i}}catch(e){return{error:{type:`authorisation`,code:`authorisation`,message:a(`not_authorised_to_perform_action`)},data:void 0}}};var we=Ce;const Te=async(t,n)=>{try{let r=t.get(`config`),i=await $.user.getSingle({db:r.db.client,config:r,services:$},{userId:n});if(i.error)return i;let a=Date.now(),o=ie(8).toString(`hex`),s=await se({id:i.data.id,username:i.data.username,email:i.data.email,permissions:i.data.permissions,superAdmin:i.data.superAdmin??!1,exp:Math.floor(a/1e3)+e.accessTokenExpiration,iat:Math.floor(a/1e3),nonce:o},r.keys.accessTokenSecret);return C(t,e.cookies.accessToken,s,{maxAge:e.accessTokenExpiration,httpOnly:!0,secure:t.req.url.startsWith(`https://`),sameSite:`strict`,path:`/`}),{error:void 0,data:void 0}}catch(e){return{error:{type:`authorisation`},data:void 0}}};var Ee=Te,De={generateToken:Ee,verifyToken:we,clearToken:Se},Oe=class{constructor(e,t,n){this.db=e,this.dbAdapter=t,this.tableName=n}formatData(e,t){let n={},r=t.dynamicColumns===void 0?this.columnFormats:{...this.columnFormats,...t.dynamicColumns};for(let[t,i]of Object.entries(e)){let e=r[t];n[t]=e?this.dbAdapter.formatInsertValue(e,i):i}return n}createValidationSchema(e){let t=e.schema||this.tableSchema,n;return n=e.selectAll?t:Array.isArray(e.select)&&e.select.length>0?t.pick(e.select.reduce((e,t)=>(e[t]=!0,e),{})):t.partial(),this.wrapSchemaForMode(n,e.mode)}wrapSchemaForMode(e,t){switch(t){case`count`:return g.object({count:g.union([g.number(),g.string()])}).optional();case`multiple-count`:return g.tuple([g.array(e),g.object({count:g.union([g.number(),g.string()])}).optional()]);case`multiple`:return g.array(e);case`single`:return e}}mergeSchema(e){return e?this.tableSchema.merge(e.shape):this.tableSchema}async validateResponse(n,r){let o=n.response;if(r?.enabled!==!0)return o;if(o.data===void 0||o.data===null)return{error:{...r.defaultError,status:r.defaultError?.status??404},data:void 0};let s=this.createValidationSchema(r);if(!s)return o;let c=await s.safeParseAsync(o.data);if(!c.success){let o=i(c.error);return t.error({message:o,scope:e.logScopes.query,data:{table:n.meta.tableName,method:n.meta.method,executionTime:n.meta.executionTime}}),{data:void 0,error:{...r?.defaultError,message:r?.defaultError?.message??a(`validation_error`),type:r?.defaultError?.type??`validation`,status:r?.defaultError?.status??400}}}return{data:o.data,error:void 0}}async executeQuery(n,r){let i=process.hrtime();try{let a=await n(),o=process.hrtime(i),s=(o[0]*1e3+o[1]/1e6).toFixed(2);return t.debug({message:`Query execution completed`,scope:e.logScopes.query,data:{table:r?.tableName??this.tableName,method:r.method,executionTime:`${s}ms`}}),{response:{data:a,error:void 0},meta:{method:r.method,executionTime:`${s}ms`,tableName:r?.tableName??this.tableName}}}catch(n){let o=process.hrtime(i),s=(o[0]*1e3+o[1]/1e6).toFixed(2);return t.error({message:`Query execution failed`,scope:e.logScopes.query,data:{table:r?.tableName??this.tableName,method:r.method,executionTime:`${s}ms`,errorMessage:n instanceof Error?n.message:a(`an_unknown_error_occurred`)}}),{response:{data:void 0,error:{message:n instanceof Error?n.message:a(`an_unknown_error_occurred`),status:500}},meta:{method:r.method,executionTime:`${s}ms`,tableName:r?.tableName??this.tableName}}}}},ke=Oe;const Ae=(e,t)=>{if(t?.[e])return t[e]};var je=Ae;const Me=(e,t,n)=>t.operator===void 0?Array.isArray(t.value)?`in`:n?.[e]||`=`:t.operator;var Ne=Me;const Pe=(e,t)=>{let n=e.main,r=e.count,i=Object.entries(t.queryParams.filter||{});for(let[e,a]of i){let i=je(e,t.meta?.tableKeys?.filters);if(!i)continue;let o=Ne(e,a,t.meta?.operators);n=n.where(i,o,a.value),r&&(r=r.where(i,o,a.value))}if(t.queryParams.sort)for(let e of t.queryParams.sort){let r=je(e.key,t.meta?.tableKeys?.sorts);if(!r)continue;n=n.orderBy(r,e.value)}return t.queryParams.perPage!==void 0&&t.queryParams.page!==void 0&&t.queryParams.perPage!==-1&&(n=n.limit(t.queryParams.perPage).offset((t.queryParams.page-1)*t.queryParams.perPage)),{main:n,count:r}};var Fe=Pe;const Ie=(e,t)=>{let n=e;for(let{key:e,operator:r,value:i}of t)n=n.where(e,r,i);return n};var Le=Ie;const Re=(e,t)=>{let n=e;for(let{key:e,operator:r,value:i}of t)n=n.where(e,r,i);return n};var ze=Re;const Be=(e,t)=>{let n=e;for(let{key:e,operator:r,value:i}of t)n=n.where(e,r,i);return n};var Ve=Be,D={main:Fe,delete:Le,select:Ve,update:ze},He=class extends ke{async count(e){let t=this.db.selectFrom(this.tableName).select(T`count(*)`.as(`count`));e.where!==void 0&&e.where.length>0&&(t=D.select(t,e.where));let n=await this.executeQuery(()=>t.executeTakeFirst(),{method:`count`});return n.response.error?n.response:this.validateResponse(n,{...e.validation,mode:`count`})}async selectSingle(e){let t=this.db.selectFrom(this.tableName).select(e.select);t=D.select(t,e.where);let n=await this.executeQuery(()=>t.executeTakeFirst(),{method:`selectSingle`});return n.response.error?n.response:this.validateResponse(n,{...e.validation,mode:`single`,select:e.select})}async selectMultiple(e){let t=this.db.selectFrom(this.tableName).select(e.select);if(e.where&&(t=D.select(t,e.where)),e.orderBy)for(let n of e.orderBy)t=t.orderBy(n.column,n.direction);e.limit&&(t=t.limit(e.limit)),e.offset&&(t=t.offset(e.offset));let n=await this.executeQuery(()=>t.execute(),{method:`selectMultiple`});return n.response.error?n.response:this.validateResponse(n,{...e.validation,mode:`multiple`,select:e.select})}async selectMultipleFiltered(e){let t=await this.executeQuery(async()=>{let t=this.db.selectFrom(this.tableName).select(e.select),n=this.db.selectFrom(this.tableName).select(T`count(*)`.as(`count`)),{main:r,count:i}=D.main({main:t,count:n},{queryParams:e.queryParams,meta:this.queryConfig}),[a,o]=await Promise.all([r.execute(),i?.executeTakeFirst()]);return[a,o]},{method:`selectMultipleFiltered`});return t.response.error?t.response:this.validateResponse(t,{...e.validation,mode:`multiple-count`,select:e.select})}async deleteSingle(e){let t=this.db.deleteFrom(this.tableName);e.returnAll!==!0&&e.returning&&e.returning.length>0&&(t=t.returning(e.returning)),e.returnAll&&(t=t.returningAll()),t=D.delete(t,e.where);let n=await this.executeQuery(()=>t.executeTakeFirst(),{method:`deleteSingle`});return n.response.error?n.response:this.validateResponse(n,{...e.validation,mode:`single`,select:e.returning,selectAll:e.returnAll})}async deleteMultiple(e){let t=this.db.deleteFrom(this.tableName);e.returnAll!==!0&&e.returning&&e.returning.length>0&&(t=t.returning(e.returning)),e.returnAll&&(t=t.returningAll()),t=D.delete(t,e.where);let n=await this.executeQuery(()=>t.execute(),{method:`deleteMultiple`});return n.response.error?n.response:this.validateResponse(n,{...e.validation,mode:`multiple`,select:e.returning,selectAll:e.returnAll})}async createSingle(e){let t=this.db.insertInto(this.tableName).values(this.formatData(e.data,{type:`insert`}));e.returnAll!==!0&&e.returning&&e.returning.length>0&&(t=t.returning(e.returning)),e.returnAll&&(t=t.returningAll());let n=await this.executeQuery(()=>t.executeTakeFirst(),{method:`createSingle`});return n.response.error?n.response:this.validateResponse(n,{...e.validation,mode:`single`,select:e.returning,selectAll:e.returnAll})}async createMultiple(e){let t=this.db.insertInto(this.tableName).values(e.data.map(e=>this.formatData(e,{type:`insert`})));e.returnAll!==!0&&e.returning&&e.returning.length>0&&(t=t.returning(e.returning)),e.returnAll&&(t=t.returningAll());let n=await this.executeQuery(()=>t.execute(),{method:`createMultiple`});return n.response.error?n.response:this.validateResponse(n,{...e.validation,mode:`multiple`,select:e.returning,selectAll:e.returnAll})}async updateSingle(e){let t=this.db.updateTable(this.tableName).set(this.formatData(e.data,{type:`update`})).$if(e.returnAll!==!0&&e.returning!==void 0&&e.returning.length>0,t=>t.returning(e.returning)).$if(e.returnAll??!1,e=>e.returningAll());t=D.update(t,e.where);let n=await this.executeQuery(()=>t.executeTakeFirst(),{method:`updateSingle`});return n.response.error?n.response:this.validateResponse(n,{...e.validation,mode:`single`,select:e.returning,selectAll:e.returnAll})}},O=He,Ue=class extends O{constructor(e,t){super(e,t,`lucid_user_tokens`)}tableSchema=g.object({id:g.number(),user_id:g.number(),token_type:g.union([g.literal(`password_reset`),g.literal(`refresh`)]),token:g.string(),created_at:g.union([g.string(),g.date()]).nullable(),expiry_date:g.union([g.string(),g.date()])});columnFormats={id:this.dbAdapter.getDataType(`primary`),user_id:this.dbAdapter.getDataType(`integer`),token_type:this.dbAdapter.getDataType(`varchar`,255),token:this.dbAdapter.getDataType(`varchar`,255),created_at:this.dbAdapter.getDataType(`timestamp`),expiry_date:this.dbAdapter.getDataType(`timestamp`)};queryConfig=void 0},We=class extends O{constructor(e,t){super(e,t,`lucid_emails`)}tableSchema=g.object({id:g.number(),email_hash:g.string(),from_address:g.string(),from_name:g.string(),to_address:g.string(),subject:g.string(),cc:g.string().nullable(),bcc:g.string().nullable(),delivery_status:g.union([g.literal(`pending`),g.literal(`delivered`),g.literal(`failed`)]),template:g.string(),data:g.record(g.string(),g.unknown()).nullable(),strategy_identifier:g.string(),strategy_data:g.record(g.string(),g.unknown()).nullable(),type:g.string(),sent_count:g.number(),error_count:g.number(),last_error_message:g.string().nullable(),last_attempt_at:g.union([g.string(),g.date()]).nullable(),last_success_at:g.union([g.string(),g.date()]).nullable(),created_at:g.union([g.string(),g.date()]).nullable()});columnFormats={id:this.dbAdapter.getDataType(`primary`),email_hash:this.dbAdapter.getDataType(`char`,64),from_address:this.dbAdapter.getDataType(`text`),from_name:this.dbAdapter.getDataType(`text`),to_address:this.dbAdapter.getDataType(`text`),subject:this.dbAdapter.getDataType(`text`),cc:this.dbAdapter.getDataType(`text`),bcc:this.dbAdapter.getDataType(`text`),delivery_status:this.dbAdapter.getDataType(`text`),template:this.dbAdapter.getDataType(`text`),data:this.dbAdapter.getDataType(`json`),strategy_identifier:this.dbAdapter.getDataType(`text`),strategy_data:this.dbAdapter.getDataType(`json`),type:this.dbAdapter.getDataType(`text`),sent_count:this.dbAdapter.getDataType(`integer`),error_count:this.dbAdapter.getDataType(`integer`),last_error_message:this.dbAdapter.getDataType(`text`),last_attempt_at:this.dbAdapter.getDataType(`timestamp`),last_success_at:this.dbAdapter.getDataType(`timestamp`),created_at:this.dbAdapter.getDataType(`timestamp`)};queryConfig={tableKeys:{filters:{toAddress:`to_address`,subject:`subject`,deliveryStatus:`delivery_status`,type:`type`,template:`template`},sorts:{lastAttemptAt:`last_attempt_at`,lastSuccessAt:`last_success_at`,createdAt:`created_at`,sentCount:`sent_count`,errorCount:`error_count`}},operators:{subject:this.dbAdapter.config.fuzzOperator,template:this.dbAdapter.config.fuzzOperator}}},Ge=class extends O{constructor(e,t){super(e,t,`lucid_locales`)}tableSchema=g.object({code:g.string(),is_deleted:g.union([g.literal(this.dbAdapter.config.defaults.boolean.true),g.literal(this.dbAdapter.config.defaults.boolean.false)]),is_deleted_at:g.union([g.string(),g.date()]).nullable(),created_at:g.union([g.string(),g.date()]).nullable(),updated_at:g.union([g.string(),g.date()]).nullable()});columnFormats={code:this.dbAdapter.getDataType(`text`),is_deleted:this.dbAdapter.getDataType(`boolean`),is_deleted_at:this.dbAdapter.getDataType(`timestamp`),created_at:this.dbAdapter.getDataType(`timestamp`),updated_at:this.dbAdapter.getDataType(`timestamp`)};queryConfig={tableKeys:{filters:{code:`code`,isDeleted:`is_deleted`},sorts:{code:`code`,isDeleted:`is_deleted`,isDeletedAt:`is_deleted_at`,createdAt:`created_at`,updatedAt:`updated_at`}},operators:{code:this.dbAdapter.config.fuzzOperator}}},Ke=class extends O{constructor(e,t){super(e,t,`lucid_media`)}tableSchema=g.object({id:g.number(),key:g.string(),e_tag:g.string().nullable(),public:g.union([g.literal(this.dbAdapter.config.defaults.boolean.true),g.literal(this.dbAdapter.config.defaults.boolean.false)]),type:g.string(),mime_type:g.string(),file_extension:g.string(),file_size:g.number(),width:g.number().nullable(),height:g.number().nullable(),blur_hash:g.string().nullable(),average_colour:g.string().nullable(),is_dark:g.union([g.literal(this.dbAdapter.config.defaults.boolean.true),g.literal(this.dbAdapter.config.defaults.boolean.false)]).nullable(),is_light:g.union([g.literal(this.dbAdapter.config.defaults.boolean.true),g.literal(this.dbAdapter.config.defaults.boolean.false)]).nullable(),title_translation_key_id:g.number().nullable(),alt_translation_key_id:g.number().nullable(),title_translations:g.array(g.object({value:g.string().nullable(),locale_code:g.string().nullable()})).optional(),alt_translations:g.array(g.object({value:g.string().nullable(),locale_code:g.string().nullable()})).optional(),custom_meta:g.string().nullable(),created_at:g.union([g.string(),g.date()]).nullable(),updated_at:g.union([g.string(),g.date()]).nullable()});columnFormats={id:this.dbAdapter.getDataType(`primary`),key:this.dbAdapter.getDataType(`text`),e_tag:this.dbAdapter.getDataType(`text`),public:this.dbAdapter.getDataType(`boolean`),type:this.dbAdapter.getDataType(`text`),mime_type:this.dbAdapter.getDataType(`text`),file_extension:this.dbAdapter.getDataType(`text`),file_size:this.dbAdapter.getDataType(`integer`),width:this.dbAdapter.getDataType(`integer`),height:this.dbAdapter.getDataType(`integer`),blur_hash:this.dbAdapter.getDataType(`text`),average_colour:this.dbAdapter.getDataType(`text`),is_dark:this.dbAdapter.getDataType(`boolean`),is_light:this.dbAdapter.getDataType(`boolean`),title_translation_key_id:this.dbAdapter.getDataType(`integer`),alt_translation_key_id:this.dbAdapter.getDataType(`integer`),custom_meta:this.dbAdapter.getDataType(`text`),created_at:this.dbAdapter.getDataType(`timestamp`),updated_at:this.dbAdapter.getDataType(`timestamp`)};queryConfig={tableKeys:{filters:{key:`key`,mimeType:`mime_type`,type:`type`,extension:`file_extension`},sorts:{createdAt:`created_at`,updatedAt:`updated_at`,fileSize:`file_size`,width:`width`,height:`height`,mimeType:`mime_type`,extension:`file_extension`}}};async selectSingleById(e){let t=this.db.selectFrom(`lucid_media`).select(e=>[`id`,`key`,`e_tag`,`type`,`mime_type`,`file_extension`,`file_size`,`width`,`height`,`title_translation_key_id`,`alt_translation_key_id`,`created_at`,`updated_at`,`blur_hash`,`average_colour`,`is_dark`,`is_light`,this.dbAdapter.jsonArrayFrom(e.selectFrom(`lucid_translations`).select([`lucid_translations.value`,`lucid_translations.locale_code`]).where(`lucid_translations.value`,`is not`,null).whereRef(`lucid_translations.translation_key_id`,`=`,`lucid_media.title_translation_key_id`)).as(`title_translations`),this.dbAdapter.jsonArrayFrom(e.selectFrom(`lucid_translations`).select([`lucid_translations.value`,`lucid_translations.locale_code`]).where(`lucid_translations.value`,`is not`,null).whereRef(`lucid_translations.translation_key_id`,`=`,`lucid_media.alt_translation_key_id`)).as(`alt_translations`)]).where(`public`,`=`,this.dbAdapter.getDefault(`boolean`,`true`)).where(`id`,`=`,e.id),n=await this.executeQuery(()=>t.executeTakeFirst(),{method:`selectSingleById`});return n.response.error?n.response:this.validateResponse(n,{...e.validation,mode:`single`,select:[`id`,`key`,`e_tag`,`type`,`mime_type`,`file_extension`,`file_size`,`width`,`height`,`title_translation_key_id`,`alt_translation_key_id`,`created_at`,`updated_at`,`blur_hash`,`average_colour`,`is_dark`,`is_light`,`title_translations`,`alt_translations`]})}async selectMultipleByIds(e){let t=this.db.selectFrom(`lucid_media`).select(e=>[`id`,`key`,`e_tag`,`type`,`mime_type`,`file_extension`,`file_size`,`width`,`height`,`title_translation_key_id`,`alt_translation_key_id`,`created_at`,`updated_at`,`blur_hash`,`average_colour`,`is_dark`,`is_light`,this.dbAdapter.jsonArrayFrom(e.selectFrom(`lucid_translations`).select([`lucid_translations.value`,`lucid_translations.locale_code`]).where(`lucid_translations.value`,`is not`,null).whereRef(`lucid_translations.translation_key_id`,`=`,`lucid_media.title_translation_key_id`)).as(`title_translations`),this.dbAdapter.jsonArrayFrom(e.selectFrom(`lucid_translations`).select([`lucid_translations.value`,`lucid_translations.locale_code`]).where(`lucid_translations.value`,`is not`,null).whereRef(`lucid_translations.translation_key_id`,`=`,`lucid_media.alt_translation_key_id`)).as(`alt_translations`)]).where(`public`,`=`,this.dbAdapter.getDefault(`boolean`,`true`)).where(`id`,`in`,e.ids),n=await this.executeQuery(()=>t.execute(),{method:`selectMultipleByIds`});return n.response.error?n.response:this.validateResponse(n,{...e.validation,mode:`multiple`,select:[`id`,`key`,`e_tag`,`type`,`mime_type`,`file_extension`,`file_size`,`width`,`height`,`title_translation_key_id`,`alt_translation_key_id`,`created_at`,`updated_at`,`blur_hash`,`average_colour`,`is_dark`,`is_light`,`title_translations`,`alt_translations`]})}async selectMultipleFilteredFixed(e){let t=await this.executeQuery(async()=>{let t=this.db.selectFrom(`lucid_media`).select(e=>[`lucid_media.id`,`lucid_media.key`,`lucid_media.e_tag`,`lucid_media.type`,`lucid_media.mime_type`,`lucid_media.file_extension`,`lucid_media.file_size`,`lucid_media.width`,`lucid_media.height`,`lucid_media.blur_hash`,`lucid_media.average_colour`,`lucid_media.is_dark`,`lucid_media.is_light`,`lucid_media.title_translation_key_id`,`lucid_media.alt_translation_key_id`,`lucid_media.created_at`,`lucid_media.updated_at`,this.dbAdapter.jsonArrayFrom(e.selectFrom(`lucid_translations`).select([`lucid_translations.value`,`lucid_translations.locale_code`]).where(`lucid_translations.value`,`is not`,null).whereRef(`lucid_translations.translation_key_id`,`=`,`lucid_media.title_translation_key_id`)).as(`title_translations`),this.dbAdapter.jsonArrayFrom(e.selectFrom(`lucid_translations`).select([`lucid_translations.value`,`lucid_translations.locale_code`]).where(`lucid_translations.value`,`is not`,null).whereRef(`lucid_translations.translation_key_id`,`=`,`lucid_media.alt_translation_key_id`)).as(`alt_translations`)]).leftJoin(`lucid_translations as title_translations`,t=>t.onRef(`title_translations.translation_key_id`,`=`,`lucid_media.title_translation_key_id`).on(`title_translations.locale_code`,`=`,e.localeCode)).leftJoin(`lucid_translations as alt_translations`,t=>t.onRef(`alt_translations.translation_key_id`,`=`,`lucid_media.alt_translation_key_id`).on(`alt_translations.locale_code`,`=`,e.localeCode)).select([`title_translations.value as title_translation_value`,`alt_translations.value as alt_translation_value`]).groupBy([`lucid_media.id`,`title_translations.value`,`alt_translations.value`]).where(`public`,`=`,this.dbAdapter.getDefault(`boolean`,`true`)),n=this.db.selectFrom(`lucid_media`).select(T`count(distinct lucid_media.id)`.as(`count`)).leftJoin(`lucid_translations as title_translations`,t=>t.onRef(`title_translations.translation_key_id`,`=`,`lucid_media.title_translation_key_id`).on(`title_translations.locale_code`,`=`,e.localeCode)).leftJoin(`lucid_translations as alt_translations`,t=>t.onRef(`alt_translations.translation_key_id`,`=`,`lucid_media.alt_translation_key_id`).on(`alt_translations.locale_code`,`=`,e.localeCode)).where(`public`,`=`,this.dbAdapter.getDefault(`boolean`,`true`)),{main:r,count:i}=D.main({main:t,count:n},{queryParams:e.queryParams,meta:{tableKeys:{filters:{title:`title_translations.value`,...this.queryConfig.tableKeys.filters},sorts:{title:`title_translations.value`,...this.queryConfig.tableKeys.sorts}},operators:{title:this.dbAdapter.config.fuzzOperator}}}),[a,o]=await Promise.all([r.execute(),i?.executeTakeFirst()]);return[a,o]},{method:`selectMultipleFilteredFixed`});return t.response.error?t.response:this.validateResponse(t,{...e.validation,mode:`multiple-count`,select:[`id`,`key`,`e_tag`,`type`,`mime_type`,`file_extension`,`file_size`,`width`,`height`,`title_translation_key_id`,`alt_translation_key_id`,`created_at`,`updated_at`,`blur_hash`,`average_colour`,`is_dark`,`is_light`,`title_translations`,`alt_translations`]})}},qe=class extends O{constructor(e,t){super(e,t,`lucid_media_awaiting_sync`)}tableSchema=g.object({key:g.string(),timestamp:g.union([g.string(),g.date()])});columnFormats={key:this.dbAdapter.getDataType(`text`),timestamp:this.dbAdapter.getDataType(`timestamp`)};queryConfig=void 0},Je=class extends O{constructor(e,t){super(e,t,`lucid_options`)}tableSchema=g.object({name:g.literal(`media_storage_used`),value_int:g.number().nullable(),value_text:g.string().nullable(),value_bool:g.union([g.literal(this.dbAdapter.config.defaults.boolean.true),g.literal(this.dbAdapter.config.defaults.boolean.false)]).nullable()});columnFormats={name:this.dbAdapter.getDataType(`text`),value_int:this.dbAdapter.getDataType(`integer`),value_text:this.dbAdapter.getDataType(`text`),value_bool:this.dbAdapter.getDataType(`boolean`)};queryConfig=void 0},Ye=class extends O{constructor(e,t){super(e,t,`lucid_processed_images`)}tableSchema=g.object({key:g.string(),media_key:g.string(),file_size:g.number()});columnFormats={key:this.dbAdapter.getDataType(`text`),media_key:this.dbAdapter.getDataType(`text`),file_size:this.dbAdapter.getDataType(`integer`)};queryConfig=void 0},Xe=class extends O{constructor(e,t){super(e,t,`lucid_role_permissions`)}tableSchema=g.object({id:g.number(),role_id:g.number(),permission:g.string(),created_at:g.union([g.string(),g.date()]).nullable(),updated_at:g.union([g.string(),g.date()]).nullable()});columnFormats={id:this.dbAdapter.getDataType(`primary`),role_id:this.dbAdapter.getDataType(`integer`),permission:this.dbAdapter.getDataType(`text`),created_at:this.dbAdapter.getDataType(`timestamp`),updated_at:this.dbAdapter.getDataType(`timestamp`)};queryConfig=void 0},Ze=class extends O{constructor(e,t){super(e,t,`lucid_roles`)}tableSchema=g.object({id:g.number(),name:g.string(),description:g.string().nullable(),permissions:g.array(g.object({id:g.number(),role_id:g.number(),permission:g.string()})).optional(),updated_at:g.union([g.string(),g.date()]).nullable(),created_at:g.union([g.string(),g.date()]).nullable()});columnFormats={id:this.dbAdapter.getDataType(`primary`),name:this.dbAdapter.getDataType(`text`),description:this.dbAdapter.getDataType(`text`),updated_at:this.dbAdapter.getDataType(`timestamp`),created_at:this.dbAdapter.getDataType(`timestamp`)};queryConfig={tableKeys:{filters:{name:`name`,roleIds:`id`},sorts:{name:`name`,createdAt:`created_at`}},operators:{name:this.dbAdapter.config.fuzzOperator}};async selectSingleById(e){let t=this.db.selectFrom(`lucid_roles`).select(e=>[`id`,`name`,`created_at`,`updated_at`,`description`,this.dbAdapter.jsonArrayFrom(e.selectFrom(`lucid_role_permissions`).select([`lucid_role_permissions.id`,`lucid_role_permissions.permission`,`lucid_role_permissions.role_id`]).whereRef(`lucid_role_permissions.role_id`,`=`,`lucid_roles.id`)).as(`permissions`)]).where(`id`,`=`,e.id),n=await this.executeQuery(()=>t.executeTakeFirst(),{method:`selectSingleById`});return n.response.error?n.response:this.validateResponse(n,{...e.validation,mode:`single`,select:[`id`,`name`,`created_at`,`updated_at`,`description`,`permissions`]})}async selectMultipleFilteredFixed(e){let t=await this.executeQuery(async()=>{let t=this.db.selectFrom(`lucid_roles`).select([`id`,`name`,`created_at`,`updated_at`,`description`]).$if(e.queryParams.include?.includes(`permissions`)||!1,e=>e.select(e=>[this.dbAdapter.jsonArrayFrom(e.selectFrom(`lucid_role_permissions`).select([`lucid_role_permissions.id`,`lucid_role_permissions.permission`,`lucid_role_permissions.role_id`]).whereRef(`lucid_role_permissions.role_id`,`=`,`lucid_roles.id`)).as(`permissions`)])),n=this.db.selectFrom(`lucid_roles`).select(T`count(*)`.as(`count`)),{main:r,count:i}=D.main({main:t,count:n},{queryParams:e.queryParams,meta:this.queryConfig}),[a,o]=await Promise.all([r.execute(),i?.executeTakeFirst()]);return[a,o]},{method:`selectMultipleFilteredFixed`});return t.response.error?t.response:this.validateResponse(t,{...e.validation,mode:`multiple-count`,select:[`id`,`name`,`created_at`,`updated_at`,`description`,`permissions`]})}},Qe=class extends O{constructor(e,t){super(e,t,`lucid_translation_keys`)}tableSchema=g.object({id:g.number(),created_at:g.union([g.string(),g.date()])});columnFormats={id:this.dbAdapter.getDataType(`primary`),created_at:this.dbAdapter.getDataType(`timestamp`)};queryConfig=void 0},$e=class extends O{constructor(e,t){super(e,t,`lucid_translations`)}tableSchema=g.object({id:g.number(),translation_key_id:g.number(),locale_code:g.string(),value:g.string().nullable()});columnFormats={id:this.dbAdapter.getDataType(`primary`),translation_key_id:this.dbAdapter.getDataType(`integer`),locale_code:this.dbAdapter.getDataType(`text`),value:this.dbAdapter.getDataType(`text`)};queryConfig=void 0;async upsertMultiple(e){let t=this.db.insertInto(`lucid_translations`).values(e.data.map(e=>this.formatData(e,{type:`insert`}))).onConflict(e=>e.columns([`translation_key_id`,`locale_code`]).doUpdateSet(e=>({value:e.ref(`excluded.value`)}))).$if(e.returnAll!==!0&&e.returning!==void 0&&e.returning.length>0,t=>t.returning(e.returning)).$if(e.returnAll??!1,e=>e.returningAll());t=D.update(t,e.where);let n=await this.executeQuery(()=>t.execute(),{method:`upsertMultiple`});return n.response.error?n.response:this.validateResponse(n,{...e.validation,mode:`multiple`,select:e.returning,selectAll:e.returnAll})}},et=class extends O{constructor(e,t){super(e,t,`lucid_user_roles`)}tableSchema=g.object({id:g.number(),user_id:g.number(),role_id:g.number(),updated_at:g.union([g.string(),g.date()]).nullable(),created_at:g.union([g.string(),g.date()]).nullable()});columnFormats={id:this.dbAdapter.getDataType(`primary`),user_id:this.dbAdapter.getDataType(`integer`),role_id:this.dbAdapter.getDataType(`integer`),updated_at:this.dbAdapter.getDataType(`timestamp`),created_at:this.dbAdapter.getDataType(`timestamp`)};queryConfig=void 0},tt=class extends O{constructor(e,t){super(e,t,`lucid_users`)}tableSchema=g.object({id:g.number(),super_admin:g.union([g.literal(this.dbAdapter.config.defaults.boolean.true),g.literal(this.dbAdapter.config.defaults.boolean.false)]),email:g.email(),username:g.string(),first_name:g.string().nullable(),last_name:g.string().nullable(),password:g.string().nullable(),secret:g.string(),triggered_password_reset:g.union([g.literal(this.dbAdapter.config.defaults.boolean.true),g.literal(this.dbAdapter.config.defaults.boolean.false)]),is_deleted:g.union([g.literal(this.dbAdapter.config.defaults.boolean.true),g.literal(this.dbAdapter.config.defaults.boolean.false)]),is_deleted_at:g.union([g.string(),g.date()]).nullable(),deleted_by:g.number().nullable(),roles:g.array(g.object({id:g.number(),description:g.string().nullable(),name:g.string(),permissions:g.array(g.object({permission:g.string()})).optional()})).optional(),created_at:g.union([g.string(),g.date()]).nullable(),updated_at:g.union([g.string(),g.date()]).nullable()});columnFormats={id:this.dbAdapter.getDataType(`primary`),super_admin:this.dbAdapter.getDataType(`boolean`),email:this.dbAdapter.getDataType(`text`),username:this.dbAdapter.getDataType(`text`),first_name:this.dbAdapter.getDataType(`text`),last_name:this.dbAdapter.getDataType(`text`),password:this.dbAdapter.getDataType(`text`),secret:this.dbAdapter.getDataType(`text`),triggered_password_reset:this.dbAdapter.getDataType(`boolean`),is_deleted:this.dbAdapter.getDataType(`boolean`),is_deleted_at:this.dbAdapter.getDataType(`timestamp`),deleted_by:this.dbAdapter.getDataType(`integer`),created_at:this.dbAdapter.getDataType(`timestamp`),updated_at:this.dbAdapter.getDataType(`timestamp`)};queryConfig={tableKeys:{filters:{firstName:`lucid_users.first_name`,lastName:`lucid_users.last_name`,email:`lucid_users.email`,username:`lucid_users.username`,roleIds:`lucid_user_roles.role_id`,id:`lucid_users.id`},sorts:{createdAt:`lucid_users.created_at`,updatedAt:`lucid_users.updated_at`,firstName:`lucid_users.first_name`,lastName:`lucid_users.last_name`,email:`lucid_users.email`,username:`lucid_users.username`}},operators:{firstName:this.dbAdapter.config.fuzzOperator,lastName:this.dbAdapter.config.fuzzOperator,email:this.dbAdapter.config.fuzzOperator,username:this.dbAdapter.config.fuzzOperator}};async selectSingleById(e){let t=this.db.selectFrom(`lucid_users`).select(e=>[`email`,`first_name`,`last_name`,`id`,`created_at`,`updated_at`,`username`,`super_admin`,`triggered_password_reset`,this.dbAdapter.jsonArrayFrom(e.selectFrom(`lucid_user_roles`).innerJoin(`lucid_roles`,`lucid_roles.id`,`lucid_user_roles.role_id`).select(e=>[`lucid_roles.id`,`lucid_roles.name`,`lucid_roles.description`,this.dbAdapter.jsonArrayFrom(e.selectFrom(`lucid_role_permissions`).select([`permission`]).whereRef(`role_id`,`=`,`lucid_roles.id`)).as(`permissions`)]).whereRef(`user_id`,`=`,`lucid_users.id`)).as(`roles`)]).where(`id`,`=`,e.id).where(`is_deleted`,`=`,this.dbAdapter.getDefault(`boolean`,`false`)),n=await this.executeQuery(()=>t.executeTakeFirst(),{method:`selectSingleById`});return n.response.error?n.response:this.validateResponse(n,{...e.validation,mode:`single`,select:[`email`,`first_name`,`last_name`,`id`,`created_at`,`updated_at`,`username`,`super_admin`,`triggered_password_reset`,`roles`]})}async selectMultipleByIds(e){let t=this.db.selectFrom(`lucid_users`).select(e=>[`email`,`first_name`,`last_name`,`id`,`created_at`,`updated_at`,`username`,`super_admin`]).where(`id`,`in`,e.ids).where(`is_deleted`,`=`,this.dbAdapter.getDefault(`boolean`,`false`)),n=await this.executeQuery(()=>t.execute(),{method:`selectMultipleByIds`});return n.response.error?n.response:this.validateResponse(n,{...e.validation,mode:`multiple`,select:[`email`,`first_name`,`last_name`,`id`,`created_at`,`updated_at`,`username`,`super_admin`]})}async selectSingleByEmailUsername(e){let t=this.db.selectFrom(`lucid_users`).select(e.select).where(t=>t.or([t(`username`,`=`,e.where.username),t(`email`,`=`,e.where.email)])),n=await this.executeQuery(()=>t.executeTakeFirst(),{method:`selectSingleByEmailUsername`});return n.response.error?n.response:this.validateResponse(n,{...e.validation,mode:`single`,select:e.select})}async selectMultipleFilteredFixed(e){let t=await this.executeQuery(async()=>{let t=this.db.selectFrom(`lucid_users`).select(e=>[`lucid_users.email`,`lucid_users.first_name`,`lucid_users.last_name`,`lucid_users.id`,`lucid_users.created_at`,`lucid_users.updated_at`,`lucid_users.username`,`lucid_users.super_admin`,this.dbAdapter.jsonArrayFrom(e.selectFrom(`lucid_user_roles`).innerJoin(`lucid_roles`,`lucid_roles.id`,`lucid_user_roles.role_id`).select([`lucid_roles.id`,`lucid_roles.name`,`lucid_roles.description`]).whereRef(`user_id`,`=`,`lucid_users.id`)).as(`roles`)]).leftJoin(`lucid_user_roles`,e=>e.onRef(`lucid_user_roles.user_id`,`=`,`lucid_users.id`)).where(`lucid_users.is_deleted`,`=`,this.dbAdapter.getDefault(`boolean`,`false`)).groupBy(`lucid_users.id`),n=this.db.selectFrom(`lucid_users`).select(T`count(distinct lucid_users.id)`.as(`count`)).leftJoin(`lucid_user_roles`,e=>e.onRef(`lucid_user_roles.user_id`,`=`,`lucid_users.id`)).where(`lucid_users.is_deleted`,`=`,this.dbAdapter.getDefault(`boolean`,`false`)),{main:r,count:i}=D.main({main:t,count:n},{queryParams:e.queryParams,meta:this.queryConfig}),[a,o]=await Promise.all([r.execute(),i?.executeTakeFirst()]);return[a,o]},{method:`selectMultipleFilteredFixed`});return t.response.error?t.response:this.validateResponse(t,{...e.validation,mode:`multiple-count`,select:[`email`,`first_name`,`last_name`,`id`,`created_at`,`updated_at`,`username`,`super_admin`,`roles`]})}},nt=class extends O{constructor(e,t){super(e,t,`lucid_client_integrations`)}tableSchema=g.object({id:g.number(),name:g.string(),description:g.string().nullable(),enabled:g.union([g.literal(this.dbAdapter.config.defaults.boolean.true),g.literal(this.dbAdapter.config.defaults.boolean.false)]),key:g.string(),api_key:g.string(),secret:g.string(),created_at:g.union([g.string(),g.date()]).nullable(),updated_at:g.union([g.string(),g.date()]).nullable()});columnFormats={id:this.dbAdapter.getDataType(`primary`),name:this.dbAdapter.getDataType(`text`),description:this.dbAdapter.getDataType(`text`),enabled:this.dbAdapter.getDataType(`boolean`),key:this.dbAdapter.getDataType(`text`),api_key:this.dbAdapter.getDataType(`text`),secret:this.dbAdapter.getDataType(`text`),created_at:this.dbAdapter.getDataType(`timestamp`),updated_at:this.dbAdapter.getDataType(`timestamp`)};queryConfig={tableKeys:{filters:{name:`name`,description:`description`,enabled:`enabled`},sorts:{name:`name`,enabled:`enabled`,createdAt:`created_at`,updatedAt:`updated_at`}},operators:{name:this.dbAdapter.config.fuzzOperator,description:this.dbAdapter.config.fuzzOperator}}},rt=class extends O{constructor(e,t){super(e,t,`lucid_collections`)}tableSchema=g.object({key:g.string(),is_deleted:g.union([g.literal(this.dbAdapter.config.defaults.boolean.true),g.literal(this.dbAdapter.config.defaults.boolean.false)]),is_deleted_at:g.union([g.string(),g.date()]).nullable(),created_at:g.union([g.string(),g.date()]).nullable()});columnFormats={key:this.dbAdapter.getDataType(`text`),is_deleted:this.dbAdapter.getDataType(`boolean`),is_deleted_at:this.dbAdapter.getDataType(`timestamp`),created_at:this.dbAdapter.getDataType(`timestamp`)};queryConfig={tableKeys:{filters:{isDeleted:`is_deleted`,key:`key`},sorts:{key:`key`,isDeleted:`is_deleted`,isDeletedAt:`is_deleted_at`,createdAt:`created_at`}},operators:{key:this.dbAdapter.config.fuzzOperator}}},it=class extends O{constructor(e,t){super(e,t,`lucid_collection_migrations`)}tableSchema=g.object({id:g.number(),collection_key:g.string(),migration_plans:g.unknown(),created_at:g.union([g.string(),g.date()]).nullable()});columnFormats={id:this.dbAdapter.getDataType(`primary`),collection_key:this.dbAdapter.getDataType(`text`),migration_plans:this.dbAdapter.getDataType(`json`),created_at:this.dbAdapter.getDataType(`timestamp`)};queryConfig=void 0},at=class extends ke{async selectSingle(e,t){let n=this.db.selectFrom(t.tableName).select(e.select);n=D.select(n,e.where);let r=await this.executeQuery(()=>n.executeTakeFirst(),{method:`selectSingle`,tableName:t.tableName});return r.response.error?r.response:this.validateResponse(r,{...e.validation,mode:`single`,select:e.select,schema:this.mergeSchema(t.schema)})}async selectMultiple(e,t){let n=this.db.selectFrom(t.tableName).select(e.select);if(e.where&&(n=D.select(n,e.where)),e.orderBy)for(let t of e.orderBy)n=n.orderBy(t.column,t.direction);e.limit&&(n=n.limit(e.limit)),e.offset&&(n=n.offset(e.offset));let r=await this.executeQuery(()=>n.execute(),{method:`selectMultiple`,tableName:t.tableName});return r.response.error?r.response:this.validateResponse(r,{...e.validation,mode:`multiple`,select:e.select,schema:this.mergeSchema(t.schema)})}async createSingle(e,t){let n=this.db.insertInto(t.tableName).values(this.formatData(e.data,{type:`insert`,dynamicColumns:t.columns}));e.returnAll!==!0&&e.returning&&e.returning.length>0&&(n=n.returning(e.returning)),e.returnAll&&(n=n.returningAll());let r=await this.executeQuery(()=>n.executeTakeFirst(),{method:`createSingle`,tableName:t.tableName});return r.response.error?r.response:this.validateResponse(r,{...e.validation,mode:`single`,select:e.returning,selectAll:e.returnAll,schema:this.mergeSchema(t.schema)})}async createMultiple(e,t){let n=this.db.insertInto(t.tableName).values(e.data.map(e=>this.formatData(e,{type:`insert`,dynamicColumns:t.columns})));e.returnAll!==!0&&e.returning&&e.returning.length>0&&(n=n.returning(e.returning)),e.returnAll&&(n=n.returningAll());let r=await this.executeQuery(()=>n.execute(),{method:`createMultiple`,tableName:t.tableName});return r.response.error?r.response:this.validateResponse(r,{...e.validation,mode:`multiple`,select:e.returning,selectAll:e.returnAll,schema:this.mergeSchema(t.schema)})}async updateSingle(e,t){let n=this.db.updateTable(t.tableName).set(this.formatData(e.data,{type:`update`,dynamicColumns:t.columns})).$if(e.returnAll!==!0&&e.returning!==void 0&&e.returning.length>0,t=>t.returning(e.returning)).$if(e.returnAll??!1,e=>e.returningAll());n=D.update(n,e.where);let r=await this.executeQuery(()=>n.executeTakeFirst(),{method:`updateSingle`,tableName:t.tableName});return r.response.error?r.response:this.validateResponse(r,{...e.validation,mode:`single`,select:e.returning,selectAll:e.returnAll,schema:this.mergeSchema(t.schema)})}async updateMultiple(e,t){let n=this.db.updateTable(t.tableName).set(e.data.map(e=>this.formatData(e,{type:`update`,dynamicColumns:t.columns}))).$if(e.returnAll!==!0&&e.returning!==void 0&&e.returning.length>0,t=>t.returning(e.returning)).$if(e.returnAll??!1,e=>e.returningAll());n=D.update(n,e.where);let r=await this.executeQuery(()=>n.execute(),{method:`updateMultiple`,tableName:t.tableName});return r.response.error?r.response:this.validateResponse(r,{...e.validation,mode:`multiple`,select:e.returning,selectAll:e.returnAll,schema:this.mergeSchema(t.schema)})}async deleteSingle(e,t){let n=this.db.deleteFrom(t.tableName).$if(e.returnAll!==!0&&e.returning!==void 0&&e.returning.length>0,t=>t.returning(e.returning)).$if(e.returnAll??!1,e=>e.returningAll());n=D.delete(n,e.where);let r=await this.executeQuery(()=>n.executeTakeFirst(),{method:`deleteSingle`,tableName:t.tableName});return r.response.error?r.response:this.validateResponse(r,{...e.validation,mode:`single`,select:e.returning,selectAll:e.returnAll,schema:this.mergeSchema(t.schema)})}},ot=at;const st=g.union([g.literal(`draft`),g.literal(`revision`),g.literal(`published`)]),ct=g.object({id:g.number().meta({description:`The document version ID`,example:1}),versionType:g.enum([`published`,`draft`,`revision`]).meta({description:`The version type`,example:`draft`}),promotedFrom:g.number().nullable().meta({description:`ID of the version this was promoted from, if applicable`,example:122}),createdAt:g.string().nullable().meta({description:`Timestamp when this version was created`,example:`2025-04-20T14:30:00Z`}),createdBy:g.number().nullable().meta({description:`User ID who created this version`,example:1}),document:g.object({id:g.number().nullable().meta({description:`The document's ID`,example:42}),collectionKey:g.string().nullable().meta({description:`The collection this document belongs to`,example:`pages`}),createdBy:g.number().nullable().meta({description:`User ID who created the document`,example:1}),createdAt:g.string().nullable().meta({description:`Timestamp when the document was created`,example:`2025-03-15T09:22:10Z`}),updatedAt:g.string().nullable().meta({description:`Timestamp when the document was last updated`,example:`2025-04-18T11:45:30Z`}),updatedBy:g.number().nullable().meta({description:`User ID who last updated the document`,example:2})}),bricks:g.object({fixed:g.array(g.object({brickKey:g.string().nullable().meta({description:`The identifier key for this brick`,example:`seo`})})),builder:g.array(g.object({brickKey:g.string().nullable().meta({description:`The identifier key for this brick`,example:`hero`})}))})});var lt=class extends ot{constructor(e,t){super(e,t,`lucid_document__collection-key`)}tableSchema=g.object({is_deleted:g.union([g.literal(this.dbAdapter.config.defaults.boolean.true),g.literal(this.dbAdapter.config.defaults.boolean.false)]),is_deleted_at:g.union([g.string(),g.date()]).optional(),deleted_by:g.number().nullable(),id:g.number(),collection_key:g.string(),created_by:g.number().nullable(),created_at:g.union([g.string(),g.date()]).nullable(),updated_by:g.number().nullable(),updated_at:g.union([g.string(),g.date()]).nullable(),versions:g.array(g.object({id:g.number(),type:st,created_by:g.number().nullable(),created_at:g.union([g.string(),g.date()]),updated_by:g.number().nullable(),updated_at:g.union([g.string(),g.date()]).nullable()})),cb_user_id:g.number().nullable(),cb_user_email:g.email().nullable(),cb_user_first_name:g.string().nullable(),cb_user_last_name:g.string().nullable(),cb_user_username:g.string().nullable(),ub_user_id:g.number().nullable(),ub_user_email:g.email().nullable(),ub_user_first_name:g.string().nullable(),ub_user_last_name:g.string().nullable(),ub_user_username:g.string().nullable()});columnFormats={id:this.dbAdapter.getDataType(`primary`),collection_key:this.dbAdapter.getDataType(`text`),is_deleted:this.dbAdapter.getDataType(`boolean`),is_deleted_at:this.dbAdapter.getDataType(`timestamp`),deleted_by:this.dbAdapter.getDataType(`integer`),created_by:this.dbAdapter.getDataType(`integer`),created_at:this.dbAdapter.getDataType(`timestamp`),updated_by:this.dbAdapter.getDataType(`integer`),updated_at:this.dbAdapter.getDataType(`timestamp`)};queryConfig=void 0;async upsertSingle(e,t){let n=this.db.insertInto(t.tableName).values(this.formatData(e.data,{type:`insert`,dynamicColumns:t.columns})).onConflict(e=>e.column(`id`).doUpdateSet(e=>({is_deleted:e.ref(`excluded.is_deleted`),is_deleted_at:e.ref(`excluded.is_deleted_at`),deleted_by:e.ref(`excluded.deleted_by`),updated_at:e.ref(`excluded.updated_at`)}))).$if(e.returnAll!==!0&&e.returning!==void 0&&e.returning.length>0,t=>t.returning(e.returning)).$if(e.returnAll??!1,e=>e.returningAll()),r=await this.executeQuery(()=>n.executeTakeFirst(),{method:`upsertSingle`,tableName:t.tableName});return r.response.error?r.response:this.validateResponse(r,{...e.validation,mode:`single`,select:e.returning,selectAll:e.returnAll,schema:this.mergeSchema(t.schema)})}async upsertMultiple(e,t){let n=this.db.insertInto(t.tableName).values(e.data.map(e=>this.formatData(e,{type:`insert`,dynamicColumns:t.columns}))).onConflict(e=>e.column(`id`).doUpdateSet(e=>({is_deleted:e.ref(`excluded.is_deleted`),is_deleted_at:e.ref(`excluded.is_deleted_at`),deleted_by:e.ref(`excluded.deleted_by`),updated_at:e.ref(`excluded.updated_at`)}))).$if(e.returnAll!==!0&&e.returning!==void 0&&e.returning.length>0,t=>t.returning(e.returning)).$if(e.returnAll??!1,e=>e.returningAll()),r=await this.executeQuery(()=>n.executeTakeFirst(),{method:`upsertMultiple`,tableName:t.tableName});return r.response.error?r.response:this.validateResponse(r,{...e.validation,mode:`multiple`,select:e.returning,selectAll:e.returnAll,schema:this.mergeSchema(t.schema)})}async selectSingleById(e,t){let n=this.db.selectFrom(t.tableName).select([`${t.tableName}.id`,`${t.tableName}.collection_key`,`${t.tableName}.created_by`,`${t.tableName}.created_at`,`${t.tableName}.updated_at`,`${t.tableName}.updated_by`]).select([n=>this.dbAdapter.jsonArrayFrom(n.selectFrom(e.tables.versions).select([`${e.tables.versions}.id`,`${e.tables.versions}.type`,`${e.tables.versions}.promoted_from`,`${e.tables.versions}.created_at`,`${e.tables.versions}.created_by`,`${e.tables.versions}.updated_at`,`${e.tables.versions}.updated_by`]).whereRef(`${e.tables.versions}.document_id`,`=`,`${t.tableName}.id`).where(t=>t.or([t(`${e.tables.versions}.type`,`=`,`draft`),t(`${e.tables.versions}.type`,`=`,`published`)]))).as(`versions`)]).$if(e.status!==void 0,n=>n.leftJoin(e.tables.versions,n=>n.onRef(`${e.tables.versions}.document_id`,`=`,`${t.tableName}.id`).on(`${e.tables.versions}.type`,`=`,e.status)).select([`${e.tables.versions}.id as version_id`,`${e.tables.versions}.type as version_type`,`${e.tables.versions}.created_at as version_created_at`,`${e.tables.versions}.created_by as version_created_by`,`${e.tables.versions}.updated_at as version_updated_at`,`${e.tables.versions}.updated_by as version_updated_by`])).$if(e.versionId!==void 0,n=>n.leftJoin(e.tables.versions,n=>n.onRef(`${e.tables.versions}.document_id`,`=`,`${t.tableName}.id`).on(`${e.tables.versions}.id`,`=`,e.versionId)).select([`${e.tables.versions}.id as version_id`,`${e.tables.versions}.type as version_type`,`${e.tables.versions}.created_at as version_created_at`,`${e.tables.versions}.created_by as version_created_by`,`${e.tables.versions}.updated_at as version_updated_at`,`${e.tables.versions}.updated_by as version_updated_by`])).leftJoin(`lucid_users as cb_user`,`cb_user.id`,`${t.tableName}.created_by`).leftJoin(`lucid_users as ub_user`,`ub_user.id`,`${t.tableName}.updated_by`).select([`cb_user.id as cb_user_id`,`cb_user.email as cb_user_email`,`cb_user.first_name as cb_user_first_name`,`cb_user.last_name as cb_user_last_name`,`cb_user.username as cb_user_username`,`ub_user.id as ub_user_id`,`ub_user.email as ub_user_email`,`ub_user.first_name as ub_user_first_name`,`ub_user.last_name as ub_user_last_name`,`ub_user.username as ub_user_username`]).where(`${t.tableName}.id`,`=`,e.id).where(`${t.tableName}.is_deleted`,`=`,this.dbAdapter.getDefault(`boolean`,`false`)),r=await this.executeQuery(()=>n.executeTakeFirst(),{method:`selectSingleById`,tableName:t.tableName});return r.response.error?r.response:this.validateResponse(r,{...e.validation,mode:`single`,schema:this.mergeSchema(t.schema)})}async selectMultipleFiltered(e,t){let n=async()=>{let n=this.db.selectFrom(t.tableName).leftJoin(e.tables.versions,`${e.tables.versions}.document_id`,`${t.tableName}.id`).select([`${t.tableName}.id`,`${t.tableName}.collection_key`,`${t.tableName}.created_by`,`${t.tableName}.created_at`,`${t.tableName}.updated_at`,`${t.tableName}.updated_by`]).select([n=>this.dbAdapter.jsonArrayFrom(n.selectFrom(e.tables.versions).select(t=>[`${e.tables.versions}.id`,`${e.tables.versions}.type`,`${e.tables.versions}.promoted_from`,`${e.tables.versions}.created_at`,`${e.tables.versions}.created_by`,`${e.tables.versions}.updated_at`,`${e.tables.versions}.updated_by`]).whereRef(`${e.tables.versions}.document_id`,`=`,`${t.tableName}.id`).where(t=>t.or([t(`${e.tables.versions}.type`,`=`,`draft`),t(`${e.tables.versions}.type`,`=`,`published`)]))).as(`versions`),this.dbAdapter.jsonArrayFrom(this.db.selectFrom(e.tables.documentFields).innerJoin(e.tables.versions,`${e.tables.versions}.id`,`${e.tables.documentFields}.document_version_id`).where(`${e.tables.versions}.document_id`,`=`,T.ref(`${t.tableName}.id`)).where(`${e.tables.versions}.type`,`=`,e.status).select(e.documentFieldsTableSchema?.columns.map(t=>`${e.tables.documentFields}.${t.name}`)||[])).as(e.tables.documentFields)]).select([`${e.tables.versions}.id as version_id`,`${e.tables.versions}.type as version_type`]).where(`${t.tableName}.is_deleted`,`=`,this.dbAdapter.getDefault(`boolean`,`false`)).where(`${e.tables.versions}.type`,`=`,e.status),r=this.db.selectFrom(t.tableName).leftJoin(e.tables.versions,`${e.tables.versions}.document_id`,`${t.tableName}.id`).select(e=>T`count(distinct ${T.ref(`${t.tableName}.id`)})`.as(`count`)).where(`${t.tableName}.is_deleted`,`=`,this.dbAdapter.getDefault(`boolean`,`false`)).where(`${e.tables.versions}.type`,`=`,e.status);n=this.applyBrickFiltersToQuery(n,e.brickFilters,t.tableName),r=this.applyBrickFiltersToQuery(r,e.brickFilters,t.tableName);let{main:i,count:a}=D.main({main:n,count:r},{queryParams:{filter:e.documentFilters,sort:e.query.sort,page:e.query.page,perPage:e.query.perPage},meta:{tableKeys:{filters:{id:`${t.tableName}.id`,collectionKey:`${t.tableName}.collection_key`,createdBy:`${t.tableName}.created_by`,updatedBy:`${t.tableName}.updated_by`,createdAt:`${t.tableName}.created_at`,updatedAt:`${t.tableName}.updated_at`},sorts:{createdAt:`${t.tableName}.created_at`,updatedAt:`${t.tableName}.updated_at`}}}}),[o,s]=await Promise.all([i.execute(),a?.executeTakeFirst()]);return[o,s]},r=await this.executeQuery(n,{method:`selectMultipleFiltered`,tableName:t.tableName});return r.response.error?r.response:this.validateResponse(r,{mode:`multiple-count`,schema:this.mergeSchema(t.schema)})}async selectSingleFiltered(e,t){let n=async()=>{let n=this.db.selectFrom(t.tableName).leftJoin(e.tables.versions,`${e.tables.versions}.document_id`,`${t.tableName}.id`).select([`${t.tableName}.id`,`${t.tableName}.collection_key`,`${t.tableName}.created_by`,`${t.tableName}.created_at`,`${t.tableName}.updated_at`,`${t.tableName}.updated_by`]).select([n=>this.dbAdapter.jsonArrayFrom(n.selectFrom(e.tables.versions).select(t=>[`${e.tables.versions}.id`,`${e.tables.versi