@cleverbrush/knex-schema 3.1.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v}from"./chunk-V4TH6K42.js";export{b as COMPOSITE_PRIMARY_KEY_BRAND,u as EXTRA_TYPE_BRAND,v as METHOD_LITERAL_BRAND,c as POLYMORPHIC_TYPE_BRAND,a as PRIMARY_KEY_BRAND,o as any,f as applyVariantsToSchema,l as array,i as boolean,j as date,d as dbExtension,e as ddlExtension,n as func,p as getColumnName,t as getPolymorphicVariantSchemas,r as getProjections,q as getTableName,s as getVariants,h as number,k as object,g as string,m as union};
2
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,13 @@
1
- export { buildColumnMap, resolveColumnRef, resolvePropertyKey } from './columns.js';
2
- export { any, array, boolean, date, dbExtension, func, getColumnName, getTableName, number, object, string, union } from './extension.js';
1
+ export type { PrimaryKeyColumns, RowVersionColumn, RowVersionStrategy } from './columns.js';
2
+ export { buildColumnMap, getPrimaryKeyColumns, getRowVersionColumn, resolveColumnRef, resolvePropertyKey } from './columns.js';
3
+ export { generateCreatePolymorphicTables, generateCreateTable, generateCreateTableSource } from './ddl.js';
4
+ export type { EntityPropSelector, EntityRelationKeys, EntityRelations, EntitySchema, EntityVariantUnion, RelationInfo, SchemaProps, UnwrapNavSchema, VariantBranch, WithRelation } from './entity.js';
5
+ export { defineEntity, Entity } from './entity.js';
6
+ export { any, array, boolean, COMPOSITE_PRIMARY_KEY_BRAND, date, dbExtension, ddlExtension, EXTRA_TYPE_BRAND, func, getColumnName, getPolymorphicVariantSchemas, getProjections, getTableName, getVariants, METHOD_LITERAL_BRAND, number, object, POLYMORPHIC_TYPE_BRAND, PRIMARY_KEY_BRAND, string, union } from './extension.js';
3
7
  export { clearRow, MAPPERS, mapObject, mapValue } from './mappers.js';
8
+ export { applyDiff, diffSchema, entitySchemaToTableState, generateMigration, generateMigrationsForContext, introspectDatabase, isDiffEmpty, tableExistsInDb } from './migration.js';
9
+ export { rawQuery } from './raw.js';
4
10
  export type { BoundQuery } from './SchemaQueryBuilder.js';
5
11
  export { createQuery, query, SchemaQueryBuilder } from './SchemaQueryBuilder.js';
6
- export type { ColumnRef, InsertType, JoinManySpec, JoinOneSpec, SchemaKeys, ValidatedJoinManySpec, ValidatedJoinOneSpec, ValidatedSpec, WithJoinedMany, WithJoinedOne } from './types.js';
12
+ export { entitiesToSnapshot, loadSnapshot, writeSnapshot } from './snapshot.js';
13
+ export type { AddColumnDiff, AddForeignKeyDiff, AddIndexDiff, AlterColumnDiff, ColumnRef, CursorPaginationResult, DatabaseCheckInfo, DatabaseColumnInfo, DatabaseForeignKeyInfo, DatabaseIndexInfo, DatabaseTableState, InsertType, JoinManySpec, JoinOneSpec, MigrationDiff, PaginationResult, PrimaryKeyOf, PrimaryKeyValueOf, RelationSpec, ResolvedVariantConfig, ResolvedVariantSpec, SchemaKeys, SchemaSnapshot, SelectProjection, SelectSelector, ValidatedJoinManySpec, ValidatedJoinOneSpec, ValidatedSpec, VariantStorageType, WithJoinedMany, WithJoinedOne } from './types.js';
package/dist/index.js CHANGED
@@ -1,2 +1,61 @@
1
- import{ObjectSchemaBuilder as K,SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR as f}from"@cleverbrush/schema";import{arrayExtensions as J,defineExtension as O,numberExtensions as F,stringExtensions as q,withExtensions as $}from"@cleverbrush/schema";function y(r){return this.withExtension("columnName",r)}function A(r){return this.withExtension("tableName",r)}var L=O({string:{hasColumnName(r){return y.call(this,r)}},number:{hasColumnName(r){return y.call(this,r)}},boolean:{hasColumnName(r){return y.call(this,r)}},date:{hasColumnName(r){return y.call(this,r)}},any:{hasColumnName(r){return y.call(this,r)}},func:{hasColumnName(r){return y.call(this,r)}},array:{hasColumnName(r){return y.call(this,r)}},union:{hasColumnName(r){return y.call(this,r)}},generic:{hasColumnName(r){return y.call(this,r)}},object:{hasTableName(r){return A.call(this,r)}}}),h=$(q,F,J,L),V=h.string,D=h.number,U=h.boolean,Y=h.date,G=h.object,H=h.array,z=h.union,X=h.func,Z=h.any;function w(r,e){let n=r.getExtension("columnName");return typeof n=="string"?n:e}function g(r){let e=r.getExtension("tableName");if(typeof e!="string")throw new Error('Schema does not have a table name. Use .hasTableName("table_name") to set one.');return e}var N=new WeakMap;function d(r){let e=N.get(r);if(e)return e;let t=r.introspect().properties??{},a=new Map,o=new Map;for(let s of Object.keys(t)){let l=t[s],u=w(l,s);a.set(s,u),o.set(u,s)}let i={propToCol:a,colToProp:o};return N.set(r,i),i}function m(r,e,n){if(typeof r=="string"){if(!r)throw new Error(`${n} must be a non-empty string`);let{propToCol:t}=d(e);return t.get(r)??r}if(typeof r=="function"){let t=K.getPropertiesFor(e),a=r(t);if(!a||typeof a!="object"||!(f in a))throw new Error(`${n} accessor must return a valid property descriptor`);let o=a[f],s=e.introspect().properties??{};for(let l of Object.keys(s)){let u=t[l];if(u&&u[f]===o){let{propToCol:c}=d(e);return c.get(l)??l}}throw new Error(`${n} accessor did not match any property in the schema`)}throw new Error(`${n} must be a string or a property descriptor accessor function`)}function ee(r,e,n){if(typeof r=="string"){if(!r)throw new Error(`${n} must be a non-empty string`);return r}if(typeof r=="function"){let t=K.getPropertiesFor(e),a=r(t);if(!a||typeof a!="object"||!(f in a))throw new Error(`${n} accessor must return a valid property descriptor`);let o=a[f],s=e.introspect().properties??{};for(let l of Object.keys(s)){let u=t[l];if(u&&u[f]===o)return l}throw new Error(`${n} accessor did not match any property in the schema`)}throw new Error(`${n} must be a string or a property descriptor accessor function`)}var p={date_from_json:r=>r&&new Date(Date.parse(r))};function v(r,e){if(typeof r=="string"){if(typeof p[r]!="function")throw new Error(`unknown mapper "${r}"`);return p[r](e)}if(typeof r=="function")return r(e);throw new Error("couldn't map value")}function b(r,e){if(!e)throw new Error("mappers should be an object");if(!r||typeof r!="object"||r===null)return r;let n={};for(let t of Object.keys(r))n[t]=e[t]?v(e[t],r[t]):r[t];return n}function x(r,e,n){for(let t of e){let a=t.as;t.mappers&&typeof r[a]<"u"&&r[a]!==null&&(r[a]=b(r[a],t.mappers))}for(let t of n){let a=t.as;if(Array.isArray(r[a]))for(let o=0;o<r[a].length;o++)r[a][o]&&t.mappers&&(r[a][o]=b(r[a][o],t.mappers))}return r}import{ObjectSchemaBuilder as ne,SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR as re}from"@cleverbrush/schema";function j(r,e){if(r.foreignQuery)return"toKnexQuery"in r.foreignQuery?r.foreignQuery.toKnexQuery():r.foreignQuery;let n=g(r.foreignSchema);return e(n)}function _(r,e,n){let t=m(r.localColumn,e,"localColumn"),a=m(r.foreignColumn,r.foreignSchema,"foreignColumn");if(typeof r.as!="string"||!r.as)throw new Error("as must be a non-empty string");let o=j(r,n),i=r.required!==!1;return r.mappers!==void 0&&M(r.mappers),{localColumn:t,foreignColumn:a,as:r.as,required:i,foreignQuery:o,mappers:r.mappers}}function E(r,e,n){let t=m(r.localColumn,e,"localColumn"),a=m(r.foreignColumn,r.foreignSchema,"foreignColumn");if(typeof r.as!="string"||!r.as)throw new Error("as must be a non-empty string");let o=j(r,n);r.mappers!==void 0&&M(r.mappers);let i=Number.isFinite(r.limit)&&r.limit>0?r.limit:null,s=Number.isFinite(r.offset)&&r.offset>0?r.offset:null,l=r.orderBy?{column:m(r.orderBy.column,r.foreignSchema,"orderBy.column"),direction:r.orderBy.direction??"asc"}:null;return{localColumn:t,foreignColumn:a,as:r.as,foreignQuery:o,limit:i,offset:s,orderBy:l,mappers:r.mappers}}function M(r){if(typeof r!="object"||r===null)throw new Error("mappers must be an object");for(let e of Object.keys(r)){let n=r[e];if(typeof n=="string"){if(typeof p[n]!="function")throw new Error(`mapper for "${e}": unknown built-in mapper name "${n}"`)}else if(typeof n!="function")throw new Error(`mapper for "${e}" must be a function or a built-in mapper name`)}}function C(r){let e=new Set;for(let n of r){if(e.has(n.as))throw new Error(`duplicate field name: ${n.as}`);e.add(n.as)}}var T=class r{#o;#e;#i;#t=[];#l;#a=null;constructor(e,n,t){this.#o=e,this.#i=n,this.#l=g(n),this.#e=t??e(this.#l)}#r(e,n="column"){return m(e,this.#i,n)}joinOne(e){let n=_(e,this.#i,this.#o);return this.#t.push({type:"one",...n}),C(this.#t),this}joinMany(e){let n=E(e,this.#i,this.#o);return this.#t.push({type:"many",...n}),C(this.#t),this}where(e,...n){if(typeof e=="function"&&!this.#h(e))this.#e.where(e,...n);else if(typeof e=="object"&&e!==null&&!("toSQL"in e)){let t=this.#y(e);this.#e.where(t,...n)}else{let t=this.#n(e);this.#e.where(t,...n)}return this}andWhere(e,...n){if(typeof e=="function"&&!this.#h(e))this.#e.andWhere(e,...n);else if(typeof e=="object"&&e!==null&&!("toSQL"in e)){let t=this.#y(e);this.#e.andWhere(t,...n)}else{let t=this.#n(e);this.#e.andWhere(t,...n)}return this}orWhere(e,...n){if(typeof e=="function"&&!this.#h(e))this.#e.orWhere(e,...n);else if(typeof e=="object"&&e!==null&&!("toSQL"in e)){let t=this.#y(e);this.#e.orWhere(t,...n)}else{let t=this.#n(e);this.#e.orWhere(t,...n)}return this}whereNot(e,...n){if(typeof e=="function"&&!this.#h(e))this.#e.whereNot(e,...n);else if(typeof e=="object"&&e!==null&&!("toSQL"in e)){let t=this.#y(e);this.#e.whereNot(t,...n)}else{let t=this.#n(e);this.#e.whereNot(t,...n)}return this}whereIn(e,n){return this.#e.whereIn(this.#r(e,"whereIn"),n),this}whereNotIn(e,n){return this.#e.whereNotIn(this.#r(e,"whereNotIn"),n),this}orWhereIn(e,n){return this.#e.orWhereIn(this.#r(e,"orWhereIn"),n),this}orWhereNotIn(e,n){return this.#e.orWhereNotIn(this.#r(e,"orWhereNotIn"),n),this}whereNull(e){return this.#e.whereNull(this.#r(e,"whereNull")),this}whereNotNull(e){return this.#e.whereNotNull(this.#r(e,"whereNotNull")),this}orWhereNull(e){return this.#e.orWhereNull(this.#r(e,"orWhereNull")),this}orWhereNotNull(e){return this.#e.orWhereNotNull(this.#r(e,"orWhereNotNull")),this}whereBetween(e,n){return this.#e.whereBetween(this.#r(e,"whereBetween"),n),this}whereNotBetween(e,n){return this.#e.whereNotBetween(this.#r(e,"whereNotBetween"),n),this}whereLike(e,n){return this.#e.whereLike(this.#r(e,"whereLike"),n),this}whereILike(e,n){return this.#e.whereILike(this.#r(e,"whereILike"),n),this}whereRaw(e,...n){return this.#e.whereRaw(e,...n),this}whereExists(e){return this.#e.whereExists(e),this}orderBy(e,n){let t=this.#n(e);return this.#e.orderBy(t,n),this}orderByRaw(e,...n){return this.#e.orderByRaw(e,...n),this}groupBy(...e){let n=e.map(t=>this.#n(t));return this.#e.groupBy(...n),this}groupByRaw(e,...n){return this.#e.groupByRaw(e,...n),this}having(e,n,t){let a=this.#n(e);return this.#e.having(a,n,t),this}havingRaw(e,...n){return this.#e.havingRaw(e,...n),this}limit(e){return this.#e.limit(e),this}offset(e){return this.#e.offset(e),this}select(...e){let n=e.map(t=>this.#n(t));this.#e.select(...n),this.#a??=[];for(let t of n)typeof t=="string"&&this.#a.push(t);return this}distinct(...e){let n=e.map(t=>this.#n(t));return this.#e.distinct(...n),this}count(e){return e?this.#e.count(this.#n(e)):this.#e.count(),this}countDistinct(e){return e?this.#e.countDistinct(this.#n(e)):this.#e.countDistinct(),this}min(e){return this.#e.min(this.#n(e)),this}max(e){return this.#e.max(this.#n(e)),this}sum(e){return this.#e.sum(this.#n(e)),this}avg(e){return this.#e.avg(this.#n(e)),this}async insert(e){let n=this.#c(e),[t]=await this.#o(this.#l).insert(n).returning("*");return this.#u(t)}async insertMany(e){let n=e.map(a=>this.#c(a));return(await this.#o(this.#l).insert(n).returning("*")).map(a=>this.#u(a))}async update(e){let n=this.#c(e);return(await this.#e.update(n).returning("*")).map(a=>this.#u(a))}async delete(){return this.#e.delete()}apply(e){return e(this.#e),this}transacting(e){let n=new r(e,this.#i,this.#e.clone().transacting(e));for(let t of this.#t)n.#t.push({...t,foreignQuery:t.foreignQuery.clone().transacting(e)});return n.#a=this.#a?[...this.#a]:null,n}#s(){if(this.#t.length===0)return this.#e;let e=this.#o,n=this.#t,t=[...new Set(n.map(s=>s.localColumn))],a=this.#e,o=[];if(this.#a!==null){let s=new Set(this.#a);if(o=t.filter(l=>!s.has(l)),o.length>0){a=this.#e.clone();for(let l of o)a.column(l)}}let i=e.queryBuilder().with("originalQuery",a);if(o.length>0&&this.#a!==null)for(let s of this.#a)i.select(e.raw(":originalQuery:.:col: as :col:",{originalQuery:"originalQuery",col:s}));else i.select("originalQuery.*");i.from(e.raw(":originalQuery:",{originalQuery:"originalQuery"}));for(let s=0;s<n.length;s++){let l=n[s],u=`eagerRelation${s}`;l.type==="one"?this.#f(i,l,u):this.#d(i,l,u,s)}return i}#f(e,n,t){let a=this.#o,o=n.foreignQuery,i=o._single?.table;if(!i)throw new Error(`Could not determine table name from foreignQuery for "${n.as}". Make sure foreignQuery is created via knex("tableName").`);e.select(a.raw(":relationAlias:.:as:->0 as :as:",{relationAlias:t,as:n.as}));let s=a.from(o.as(i)).select(a.raw(":foreignTable:.:foreignColumn:",{foreignTable:i,foreignColumn:n.foreignColumn})).select(a.raw("jsonb_agg(:foreignTable:) as :as:",{foreignTable:i,as:n.as})).groupByRaw(":foreignTable:.:foreignColumn:",{foreignTable:i,foreignColumn:n.foreignColumn}).as(t),l=n.required?"join":"leftJoin";e[l](s,function(){this.on(a.raw(":relationAlias:.:foreignColumn: = :originalQuery:.:localColumn:",{originalQuery:"originalQuery",relationAlias:t,foreignColumn:n.foreignColumn,localColumn:n.localColumn}))})}#d(e,n,t,a){let o=this.#o,i=`withFilter${a}`,s=n.limit!==null&&n.limit>0||n.offset!==null&&n.offset>0,l=n.orderBy?n.orderBy.column:n.foreignColumn,u=n.orderBy?n.orderBy.direction:"asc";s?e.with(i,o.from(n.foreignQuery.clone().whereIn(n.foreignColumn,o.from(o.raw(":originalQuery:",{originalQuery:"originalQuery"})).distinct(n.localColumn)).as(`__wf_inner_${a}`)).select(`__wf_inner_${a}.*`).select(o.raw(`row_number() over(partition by :foreignColumn: order by :orderByColumn: ${u}) as "__rn__"`,{foreignColumn:n.foreignColumn,orderByColumn:l}))):e.with(i,n.foreignQuery.clone().whereIn(n.foreignColumn,o.from(o.raw(":originalQuery:",{originalQuery:"originalQuery"})).distinct(n.localColumn)));let c=o.from(i);if(s){let S=n.limit!==null&&n.limit>0,W=n.offset!==null&&n.offset>0,Q=n.offset??0,P=Q+(n.limit??0),I=S&&W?'"__rn__" > :offset and "__rn__" <= :limit':S?'"__rn__" <= :limit':'"__rn__" > :offset';c.whereRaw(I,{limit:P,offset:Q}),c.select(o.raw(":foreignColumn:",{foreignColumn:n.foreignColumn})),c.select(o.raw(`coalesce(jsonb_agg(to_jsonb(:filterName:) - '__rn__' order by "__rn__"), '[]'::jsonb) as :as:`,{filterName:i,as:n.as}))}else{c.select(o.raw(":foreignColumn:",{foreignColumn:n.foreignColumn}));let S=n.orderBy?`jsonb_agg(:filterName: order by :filterName:.:orderByColumn: ${u})`:"jsonb_agg(:filterName:)";c.select(o.raw(`coalesce(${S}, '[]'::jsonb) as :as:`,n.orderBy?{filterName:i,orderByColumn:l,as:n.as}:{filterName:i,as:n.as}))}c.groupByRaw(":foreignColumn:",{foreignColumn:n.foreignColumn});let k=c.as(t);e.select(o.raw("coalesce(:relationAlias:.:as:, '[]'::jsonb) as :as:",{relationAlias:t,as:n.as})),e.leftJoin(k,function(){this.on(o.raw(":relationAlias:.:foreignColumn: = :originalQuery:.:localColumn:",{relationAlias:t,foreignColumn:n.foreignColumn,originalQuery:"originalQuery",localColumn:n.localColumn}))})}#u(e){if(!e)return e;let{colToProp:n}=d(this.#i),t={};for(let[a,o]of Object.entries(e)){let i=n.get(a);i?t[i]=o:t[a]=o}return t}#m(e){let n=this.#t.filter(o=>o.type==="one"),t=this.#t.filter(o=>o.type==="many"),a=x(e,n,t);return this.#u(a)}#c(e){let{propToCol:n}=d(this.#i),t={};for(let[a,o]of Object.entries(e)){let i=n.get(a);i?t[i]=o:t[a]=o}return t}#y(e){return this.#c(e)}#n(e){return typeof e=="string"?this.#r(e,"column"):typeof e=="function"?this.#r(e,"column"):e}#h(e){try{let n=ne.getPropertiesFor(this.#i),t=e(n);if(t&&typeof t=="object"&&re in t)return!0}catch{}return!1}toQuery(){return this.#s().toQuery()}toKnexQuery(){return this.#s()}toString(){return this.#s().toString()}async execute(){let n=await this.#s();return n?Array.isArray(n)?n.map(t=>this.#m(t)):[this.#m(n)]:[]}async first(){let n=await this.#s().first();if(n)return this.#m(n)}then(e,n){return this.execute().then(e,n)}};function R(r,e,n){return new T(r,e,n)}function B(r){function e(n,t){return t?R(r,n,t):R(r,n)}return e.withTransaction=n=>B(n),e.transaction=n=>r.transaction(t=>n(B(t))),e}export{p as MAPPERS,T as SchemaQueryBuilder,Z as any,H as array,U as boolean,d as buildColumnMap,x as clearRow,B as createQuery,Y as date,L as dbExtension,X as func,w as getColumnName,g as getTableName,b as mapObject,v as mapValue,D as number,G as object,R as query,m as resolveColumnRef,ee as resolvePropertyKey,V as string,z as union};
1
+ import{a as Un,b as Wn,c as Jn,d as Yn,e as Hn,f as Ne,g as zn,h as Gn,i as Xn,j as Zn,k as et,l as nt,m as tt,n as at,o as ot,p as K,q as C,r as re,s as se,t as _,u as rt,v as st}from"./chunk-V4TH6K42.js";import{ObjectSchemaBuilder as Ie,SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR as W}from"@cleverbrush/schema";var Qe=new WeakMap;function R(e){let n=Qe.get(e);if(n)return n;let a=e.introspect().properties??{},o=new Map,r=new Map;for(let s of Object.keys(a)){let c=a[s],l=K(c,s);o.set(s,l),r.set(l,s)}let i={propToCol:o,colToProp:r};return Qe.set(e,i),i}function Ke(e,n,t){if(t.length===1)return e.raw("??->>?",[n,t[0]]);let a=`{${t.join(",")}}`;return e.raw("??#>>?",[n,a])}function Q(e,n,t,a){if(typeof e=="string"){if(!e)throw new Error(`${t} must be a non-empty string`);if(e.includes(".")){let[i,...s]=e.split("."),{propToCol:c}=R(n),l=c.get(i)??i;if(!a)throw new Error(`${t}: a Knex instance is required to resolve nested JSON path '${e}'`);return Ke(a,l,s)}let{propToCol:o}=R(n);return o.get(e)??e}if(typeof e=="function"){let o=Ie.getPropertiesFor(n),r=e(o);if(!r||typeof r!="object"||!(W in r))throw new Error(`${t} accessor must return a valid property descriptor`);let s=r[W].toJsonPointer();if(!s)throw new Error(`${t} accessor returned the root descriptor`);let c=s.slice(1).split("/").map(h=>h.replace(/~1/g,"/").replace(/~0/g,"~"));if(c.length===0)throw new Error(`${t} accessor returned the root descriptor`);let[l,...y]=c,{propToCol:u}=R(n),f=u.get(l)??l;if(y.length===0)return f;if(!a)throw new Error(`${t}: a Knex instance is required to resolve nested JSON path '${s}'`);return Ke(a,f,y)}throw new Error(`${t} must be a string or a property descriptor accessor function`)}function ie(e,n,t){if(typeof e=="string"){if(!e)throw new Error(`${t} must be a non-empty string`);return e}if(typeof e=="function"){let a=Ie.getPropertiesFor(n),o=e(a);if(!o||typeof o!="object"||!(W in o))throw new Error(`${t} accessor must return a valid property descriptor`);let i=o[W].toJsonPointer();if(!i)throw new Error(`${t} accessor returned the root descriptor`);return i.slice(1).split("/")[0].replace(/~1/g,"/").replace(/~0/g,"~")}throw new Error(`${t} must be a string or a property descriptor accessor function`)}function J(e){let n=e.introspect(),t=n.properties??{},a=n.extensions??{},{propToCol:o,colToProp:r}=R(e),i=a.compositePrimaryKey;if(i&&i.length>0){let s=[],c=[];for(let l of i)o.has(l)?(s.push(l),c.push(o.get(l))):r.has(l)?(c.push(l),s.push(r.get(l))):(s.push(l),c.push(l));return{propertyKeys:s,columnNames:c}}for(let[s,c]of Object.entries(t))if((c.introspect?.().extensions??{}).primaryKey)return{propertyKeys:[s],columnNames:[o.get(s)??s]};return{propertyKeys:[],columnNames:[]}}function it(e){let t=e.introspect().properties??{},{propToCol:a}=R(e);for(let[o,r]of Object.entries(t)){let s=(r.introspect?.()?.extensions??{}).rowVersion;if(s)return{propertyKey:o,columnName:a.get(o)??o,strategy:s.strategy??"increment"}}return null}function ct(e,n,t,a){if(a.columnType)return e.specificType(n,a.columnType);switch(t.type){case"string":{let o=a.maxLength??t.maxLength??void 0;return o?e.string(n,o):e.string(n)}case"number":return t.isInteger!==!1?e.integer(n):e.float(n);case"boolean":return e.boolean(n);case"date":return e.timestamp(n);case"object":return e.specificType(n,"jsonb");default:return e.specificType(n,"text")}}function lt(e,n,t){return n==="now"?e.defaultTo(t.fn.now()):n==="auto_increment"?e:typeof n=="object"&&n!==null&&n.raw?e.defaultTo(t.raw(n.raw)):e.defaultTo(n)}function ce(e){let n=C(e),t=e.introspect(),a=t.extensions??{},o=new Set;return a.timestamps&&(o.add(a.timestamps.createdAt),o.add(a.timestamps.updatedAt)),a.softDelete&&o.add(a.softDelete.column),r=>{let i=r.schema.createTable(n,c=>{let l=t.properties??{};for(let[y,u]of Object.entries(l)){let f=K(u,y),h=u.introspect(),d=h.extensions??{};if(h.type==="array"&&!d.columnType||o.has(f))continue;let m;if(d.primaryKey?.autoIncrement?m=c.increments(f):m=ct(c,f,h,d),d.primaryKey&&!d.primaryKey.autoIncrement&&(m=m.primary()),d.unique&&(m=m.unique(typeof d.unique=="string"?{indexName:d.unique}:void 0)),d.index&&(m=m.index(typeof d.index=="string"?d.index:void 0)),d.defaultTo!==void 0&&(m=lt(m,d.defaultTo,r)),h.isRequired&&!d.primaryKey?.autoIncrement?m=m.notNullable():h.isRequired||(m=m.nullable()),d.references){let g=m.references(d.references.column).inTable(d.references.table);d.onDelete&&g.onDelete(d.onDelete),d.onUpdate&&g.onUpdate(d.onUpdate)}d.check&&c.check(d.check)}for(let y of a.indexes??[])y.unique?c.unique(y.columns,{indexName:y.name??void 0}):c.index(y.columns,y.name??void 0);for(let y of a.uniques??[])c.unique(y.columns,{indexName:y.name??void 0});for(let y of a.checks??[])c.check(y);a.compositePrimaryKey&&c.primary(a.compositePrimaryKey);for(let y of a.rawColumns??[])c.specificType(y.name,y.definition);a.timestamps&&(c.timestamp(a.timestamps.createdAt).defaultTo(r.fn.now()).notNullable(),c.timestamp(a.timestamps.updatedAt).defaultTo(r.fn.now()).notNullable()),a.softDelete&&c.timestamp(a.softDelete.column).nullable()}),s=a.rawIndexes??[];return s.length>0?i.then(async()=>{for(let c of s)await r.raw(c)}):i}}function le(e){let n=C(e),t=e.introspect(),a=t.extensions??{},o=t.properties??{},r=[],i=new Set;a.timestamps&&(i.add(a.timestamps.createdAt),i.add(a.timestamps.updatedAt)),a.softDelete&&i.add(a.softDelete.column);for(let[u,f]of Object.entries(o)){let h=K(f,u),d=f.introspect(),m=d.extensions??{};if((d.type==="object"||d.type==="array")&&!m.columnType||i.has(h))continue;let g;m.primaryKey?.autoIncrement?g=` table.increments('${h}')`:g=` ${yt(h,d,m)}`,m.primaryKey&&!m.primaryKey.autoIncrement&&(g+=".primary()"),m.unique&&(typeof m.unique=="string"?g+=`.unique({ indexName: '${m.unique}' })`:g+=".unique()"),m.index&&(typeof m.index=="string"?g+=`.index('${m.index}')`:g+=".index()"),m.defaultTo!==void 0&&(g+=`.defaultTo(${ut(m.defaultTo)})`),d.isRequired&&!m.primaryKey?.autoIncrement?g+=".notNullable()":d.isRequired||(g+=".nullable()"),m.references&&(g+=`.references('${m.references.column}').inTable('${m.references.table}')`,m.onDelete&&(g+=`.onDelete('${m.onDelete}')`),m.onUpdate&&(g+=`.onUpdate('${m.onUpdate}')`)),r.push(g+";"),m.check&&r.push(` table.check(${JSON.stringify(m.check)});`)}for(let u of a.indexes??[]){let f=JSON.stringify(u.columns);u.unique?r.push(` table.unique(${f}${u.name?`, { indexName: '${u.name}' }`:""});`):r.push(` table.index(${f}${u.name?`, '${u.name}'`:""});`)}for(let u of a.uniques??[]){let f=JSON.stringify(u.columns);r.push(` table.unique(${f}${u.name?`, { indexName: '${u.name}' }`:""});`)}for(let u of a.checks??[])r.push(` table.check(${JSON.stringify(u)});`);a.compositePrimaryKey&&r.push(` table.primary(${JSON.stringify(a.compositePrimaryKey)});`);for(let u of a.rawColumns??[])r.push(` table.specificType('${u.name}', '${u.definition}');`);a.timestamps&&(r.push(` table.timestamp('${a.timestamps.createdAt}').notNullable().defaultTo(knex.fn.now());`),r.push(` table.timestamp('${a.timestamps.updatedAt}').notNullable().defaultTo(knex.fn.now());`)),a.softDelete&&r.push(` table.timestamp('${a.softDelete.column}').nullable();`);let c=(a.rawIndexes??[]).map(u=>` await knex.raw(${JSON.stringify(u)});`),l=` await knex.schema.createTable('${n}', (table) => {
2
+ ${r.join(`
3
+ `)}
4
+ });`+(c.length>0?`
5
+ `+c.join(`
6
+ `):""),y=` await knex.schema.dropTableIfExists('${n}');`;return{up:l,down:y}}function yt(e,n,t){if(t.columnType)return`table.specificType('${e}', '${t.columnType}')`;switch(n.type){case"string":{let a=t.maxLength??n.maxLength??void 0;return a?`table.string('${e}', ${a})`:`table.string('${e}')`}case"number":return n.isInteger!==!1?`table.integer('${e}')`:`table.float('${e}')`;case"boolean":return`table.boolean('${e}')`;case"date":return`table.timestamp('${e}')`;case"object":return`table.specificType('${e}', 'jsonb')`;default:return`table.specificType('${e}', 'text')`}}function ut(e){return e==="now"?"knex.fn.now()":typeof e=="object"&&e!==null&&e.raw?`knex.raw('${String(e.raw).replace(/'/g,"\\'")}')`:typeof e=="string"?`'${e.replace(/'/g,"\\'")}'`:String(e)}function mt(e){let n=[ce(e)],t=_(e);for(let a of t)a.getExtension("tableName")&&n.push(ce(a));return n}import{ObjectSchemaBuilder as ye,SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR as Y}from"@cleverbrush/schema";var H=class e{schema;constructor(n){this.schema=n}_addRelation(n){let t=this.schema.getExtension?.("relations")??[],a=this.schema.withExtension("relations",[...t,n]);return new e(a)}hasOne(n,t,a,o){let r=this._resolvePropName(n,this.schema),i=this._resolveForeignSchema(r),s=this._resolvePropName(a,i);return this._addRelation({type:"hasOne",name:r,schema:i,foreignKey:s,optional:o?.optional})}hasMany(n,t,a){let o=this._resolvePropName(n,this.schema),r=this._resolveForeignSchema(o),i=this._resolvePropName(a,r);return this._addRelation({type:"hasMany",name:o,schema:r,foreignKey:i})}belongsTo(n,t,a,o){let r=this._resolvePropName(n,this.schema),i=this._resolveForeignSchema(r),s=this._resolvePropName(t,this.schema);return this._addRelation({type:"belongsTo",name:r,schema:i,foreignKey:s,optional:o?.optional})}belongsToMany(n,t){let a=this._resolvePropName(n,this.schema),o=this._resolveForeignSchema(a);return this._addRelation({type:"belongsToMany",name:a,schema:o,through:t})}discriminator(n){let t=typeof n=="string"?n:this._resolvePropName(n,this.schema),a=new e(this.schema);return a._variantBuilder={discKey:t,variants:{}},a}ctiVariant(n,t,a,o){let r=this._variantBuilder;if(!r)throw new Error("ctiVariant: call `.discriminator(...)` first to begin a polymorphic builder chain");let i=pt(t.schema,a),s={...r.variants,[n]:{schema:t.schema,storage:"cti",foreignKeyColumn:i,allowOrphan:o?.allowOrphan,relations:[...ve(t),...Pe(t.schema,o?.relations)]}};return this._withVariantBuilder(r.discKey,s)}stiVariant(n,t,a){let o=this._variantBuilder;if(!o)throw new Error("stiVariant: call `.discriminator(...)` first to begin a polymorphic builder chain");let r=t instanceof e,i=r?t.schema:t,s={...o.variants,[n]:{schema:i,storage:"sti",enforceCheck:a?.enforceCheck,relations:[...r?ve(t):[],...Pe(i,a?.relations)]}};return this._withVariantBuilder(o.discKey,s)}_withVariantBuilder(n,t){let a=Ne(this.schema,n,t),o=this.schema.getExtension?.("relations")??[];o.length&&(a=a.withExtension("relations",o));let r=new e(a);return r._variantBuilder={discKey:n,variants:t},r}_resolvePropName(n,t){let a=ye.getPropertiesFor(t),o=n(a);if(!o||typeof o!="object"||!(Y in o))throw new Error("Entity relation selector must return a property descriptor, e.g. `t => t.author`.");let r=o[Y];if(typeof r.propertyName!="string")throw new Error("Entity relation selector must return a top-level property descriptor.");return r.propertyName}_resolveForeignSchema(n){let a=(this.schema.introspect?.()?.properties??{})[n];if(!a)throw new Error(`Entity.relation: navigation property "${n}" not found on schema`);let o=a.introspect?.()??a;return o.type==="array"&&o.elementSchema?o.elementSchema:(o.type==="object"||a.constructor?.name==="ObjectSchemaBuilder",a)}};function ve(e){let n=e.schema.getExtension?.("relations")??[];if(n.length===0)return[];let{propToCol:t}=R(e.schema);return n.map(a=>{let o=typeof a.foreignKey=="string"?a.foreignKey:void 0,r=o?t.get(o)??o:void 0;return{name:a.name,type:a.type,schema:a.schema,foreignKey:r,through:a.through}})}function pt(e,n){let t=ye.getPropertiesFor(e),o=n(t)?.[Y];if(!o?.propertyName)throw new Error("ctiVariant: foreignKey accessor must return a top-level property descriptor on the variant schema");let r=o.propertyName,s=(e.introspect?.()?.properties??{})[r];if(!s)throw new Error(`ctiVariant: foreignKey property "${r}" not found on variant schema`);return K(s,r)}function Pe(e,n){if(!n)return[];let{propToCol:t}=R(e),a=[],o=ye.getPropertiesFor(e);for(let[r,i]of Object.entries(n)){let s;if(i.foreignKey){let y=i.foreignKey(o)?.[Y];if(!y?.propertyName)throw new Error(`variant relation "${r}": foreignKey accessor must return a top-level property descriptor on the variant schema`);let u=y.propertyName;s=t.get(u)??u}let c=i.entity?i.entity.schema:i.schema;a.push({name:r,type:i.type,schema:c,foreignKey:s,through:i.through})}return a}function ft(e){return new H(e)}var D={date_from_json:e=>e&&new Date(Date.parse(e))};function ke(e,n){if(typeof e=="string"){if(typeof D[e]!="function")throw new Error(`unknown mapper "${e}"`);return D[e](n)}if(typeof e=="function")return e(n);throw new Error("couldn't map value")}function ue(e,n){if(!n)throw new Error("mappers should be an object");if(!e||typeof e!="object"||e===null)return e;let t={};for(let a of Object.keys(e))t[a]=n[a]?ke(n[a],e[a]):e[a];return t}function me(e,n,t){for(let a of n){let o=a.as;a.mappers&&typeof e[o]<"u"&&e[o]!==null&&(e[o]=ue(e[o],a.mappers))}for(let a of t){let o=a.as;if(Array.isArray(e[o]))for(let r=0;r<e[o].length;r++)e[o][r]&&a.mappers&&(e[o][r]=ue(e[o][r],a.mappers))}return e}function ht(e,n,t,a){let o={};for(let c of e)o[c.column_name]={name:c.column_name,type:c.data_type,nullable:c.is_nullable==="YES",defaultValue:c.column_default??null,maxLength:c.character_maximum_length??null,numericPrecision:c.numeric_precision??null};let r=n.map(c=>({name:c.indexname,columns:Array.isArray(c.columns)?c.columns:[],unique:(c.indexdef??"").toUpperCase().includes("UNIQUE"),definition:c.indexdef??""})),i=t.map(c=>({constraintName:c.constraint_name,columnName:c.column_name,foreignTable:c.foreign_table,foreignColumn:c.foreign_column,deleteRule:c.delete_rule,updateRule:c.update_rule})),s=a.map(c=>({name:c.conname,definition:c.definition}));return{columns:o,indexes:r,foreignKeys:i,checks:s}}async function dt(e,n){let[t,a,o,r]=await Promise.all([e.raw(`SELECT column_name, data_type, is_nullable, column_default,
7
+ character_maximum_length, numeric_precision
8
+ FROM information_schema.columns
9
+ WHERE table_name = ? AND table_schema = 'public'
10
+ ORDER BY ordinal_position`,[n]),e.raw(`SELECT indexname, indexdef,
11
+ array_agg(a.attname ORDER BY array_position(ix.indkey, a.attnum)) as columns
12
+ FROM pg_indexes
13
+ JOIN pg_class t ON t.relname = ?
14
+ JOIN pg_index ix ON ix.indrelid = t.oid
15
+ JOIN pg_class i ON i.oid = ix.indexrelid AND i.relname = pg_indexes.indexname
16
+ JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(ix.indkey)
17
+ WHERE pg_indexes.tablename = ?
18
+ GROUP BY indexname, indexdef`,[n,n]),e.raw(`SELECT tc.constraint_name, kcu.column_name,
19
+ ccu.table_name AS foreign_table, ccu.column_name AS foreign_column,
20
+ rc.delete_rule, rc.update_rule
21
+ FROM information_schema.table_constraints tc
22
+ JOIN information_schema.key_column_usage kcu USING (constraint_name, table_schema)
23
+ JOIN information_schema.constraint_column_usage ccu USING (constraint_name, table_schema)
24
+ JOIN information_schema.referential_constraints rc USING (constraint_name, constraint_schema)
25
+ WHERE tc.table_name = ? AND tc.constraint_type = 'FOREIGN KEY'`,[n]),e.raw(`SELECT conname, pg_get_constraintdef(oid) as definition
26
+ FROM pg_constraint
27
+ WHERE conrelid = ?::regclass AND contype = 'c'`,[n])]);return ht(t.rows,a.rows,o.rows,r.rows)}function Ee(e,n){if(n.columnType)return n.columnType;if(n.primaryKey?.autoIncrement)return"integer";switch(e.type){case"string":return"character varying";case"number":return e.isInteger!==!1?"integer":"double precision";case"boolean":return"boolean";case"date":return"timestamp without time zone";default:return"text"}}function V(e){let n=C(e),t=e.introspect(),a=t.properties??{},o=t.extensions??{},r={},i=[],s=[],c=[];for(let[l,y]of Object.entries(a)){let u=K(y,l),f=y.introspect(),h=f.extensions??{};(f.type==="object"||f.type==="array")&&!h.columnType||(r[u]={name:u,type:Ee(f,h),nullable:!f.isRequired,defaultValue:h.defaultTo??null,maxLength:h.maxLength??f.maxLength??null,numericPrecision:null},h.references&&s.push({constraintName:`${n}_${u}_foreign`,columnName:u,foreignTable:h.references.table,foreignColumn:h.references.column,deleteRule:(h.onDelete??"NO ACTION").toUpperCase(),updateRule:(h.onUpdate??"NO ACTION").toUpperCase()}))}if(o.timestamps){let l=o.timestamps,y=l.createdAt??"created_at",u=l.updatedAt??"updated_at";r[y]={name:y,type:"timestamp without time zone",nullable:!1,defaultValue:"now",maxLength:null,numericPrecision:null},r[u]={name:u,type:"timestamp without time zone",nullable:!1,defaultValue:"now",maxLength:null,numericPrecision:null}}if(o.softDelete){let l=o.softDelete.column??"deleted_at";r[l]={name:l,type:"timestamp without time zone",nullable:!0,defaultValue:null,maxLength:null,numericPrecision:null}}for(let l of o.indexes??[]){let y=l.name??`idx_${l.columns.join("_")}`;i.push({name:y,columns:l.columns,unique:l.unique??!1,definition:""})}for(let l of o.uniques??[]){let y=l.name??`unq_${l.columns.join("_")}`;i.push({name:y,columns:l.columns,unique:!0,definition:""})}return{columns:r,indexes:i,foreignKeys:s,checks:c}}function je(e,n){let t=e.introspect(),a=t.properties??{},o=t.extensions??{},r=[],i=[],s=[],c=[],l=[],y=[],u=[],f=new Set;o.timestamps&&(f.add(o.timestamps.createdAt),f.add(o.timestamps.updatedAt));let h=new Set;for(let[m,g]of Object.entries(a)){let x=K(g,m),T=g.introspect(),w=T.extensions??{};if((T.type==="object"||T.type==="array")&&!w.columnType)continue;h.add(x);let B=n.columns[x];if(!B)r.push({name:x,type:Ee(T,w),nullable:!T.isRequired,defaultValue:w.defaultTo,references:w.references,onDelete:w.onDelete,onUpdate:w.onUpdate});else{let v={},U=!T.isRequired;if(B.nullable!==U&&(v.nullable={from:B.nullable,to:U}),!f.has(x)&&!w.primaryKey?.autoIncrement){let Ce=B.defaultValue??null,Be=w.defaultTo??null;Ce!==Be&&(v.defaultValue={from:Ce,to:Be})}Object.keys(v).length>0&&s.push({name:x,changes:v})}w.references&&(n.foreignKeys.find(U=>U.columnName===x)||y.push({column:x,foreignTable:w.references.table,foreignColumn:w.references.column,onDelete:w.onDelete,onUpdate:w.onUpdate}))}o.timestamps&&(h.add(o.timestamps.createdAt),h.add(o.timestamps.updatedAt)),o.softDelete&&h.add(o.softDelete.column);for(let m of Object.keys(n.columns))h.has(m)||i.push(m);let d=new Set;for(let m of o.indexes??[]){let g=m.name??`idx_${m.columns.join("_")}`;d.add(g),n.indexes.find(T=>T.name===g)||c.push({columns:m.columns,name:m.name,unique:m.unique})}for(let m of o.uniques??[]){let g=m.name??`unq_${m.columns.join("_")}`;d.add(g),n.indexes.find(T=>T.name===g)||c.push({columns:m.columns,name:m.name,unique:!0})}for(let m of n.foreignKeys){let g=Object.entries(a).find(([x,T])=>K(T,x)===m.columnName);g&&(g[1].introspect().extensions??{}).references||u.push(m.constraintName)}return{addColumns:r,dropColumns:i,alterColumns:s,addIndexes:c,dropIndexes:l,addForeignKeys:y,dropForeignKeys:u}}function gt(e,n){let{up:t,down:a}=_e(e,n),o=`import type { Knex } from 'knex';
28
+
29
+ export async function up(knex: Knex): Promise<void> {
30
+ ${t}
31
+ }
32
+
33
+ export async function down(knex: Knex): Promise<void> {
34
+ ${a}
35
+ }
36
+ `;return{up:t,down:a,full:o}}async function St(e,n){return e.schema.hasTable(n)}function pe(e){return e.addColumns.length===0&&e.dropColumns.length===0&&e.alterColumns.length===0&&e.addIndexes.length===0&&e.dropIndexes.length===0&&e.addForeignKeys.length===0&&e.dropForeignKeys.length===0}async function xt(e,n,t){if(pe(n))return;for(let o of n.dropForeignKeys)await e.raw("ALTER TABLE ?? DROP CONSTRAINT ??",[t,o]);(n.addColumns.length>0||n.dropColumns.length>0||n.alterColumns.length>0||n.addIndexes.length>0||n.dropIndexes.length>0||n.addForeignKeys.length>0)&&await e.schema.alterTable(t,o=>{for(let r of n.addColumns){let i=Rt(o,r.name,r.type);if(r.nullable?i=i.nullable():i=i.notNullable(),r.defaultValue!==void 0&&(r.defaultValue==="now"?i=i.defaultTo(e.fn.now()):typeof r.defaultValue=="object"&&r.defaultValue!==null&&r.defaultValue.raw?i=i.defaultTo(e.raw(r.defaultValue.raw)):i=i.defaultTo(r.defaultValue)),r.references){let s=i.references(r.references.column).inTable(r.references.table);r.onDelete&&s.onDelete(r.onDelete),r.onUpdate&&s.onUpdate(r.onUpdate)}}for(let r of n.dropColumns)o.dropColumn(r);for(let r of n.alterColumns)for(let[i,s]of Object.entries(r.changes))i==="nullable"?s.to?o.setNullable(r.name):o.dropNullable(r.name):i==="defaultValue"&&s.to===null&&o.dropColumn(r.name);for(let r of n.addIndexes)r.unique?o.unique(r.columns,r.name?{indexName:r.name}:void 0):o.index(r.columns,r.name);for(let r of n.dropIndexes)o.dropIndex([],r);for(let r of n.addForeignKeys){let i=o.foreign(r.column).references(r.foreignColumn).inTable(r.foreignTable);r.onDelete&&(i=i.onDelete(r.onDelete)),r.onUpdate&&(i=i.onUpdate(r.onUpdate))}})}function Tt(e,n){let t=[];for(let m of e){let g=m.schema,x=C(g);t.push({schema:g,tableName:x});for(let T of _(g)){let w=T.getExtension("tableName");w&&t.push({schema:T,tableName:w})}}let a=new Set,o=t.filter(m=>a.has(m.tableName)?!1:(a.add(m.tableName),!0)),r=bt(o),i=[],s=[],c=new Set(r.map(m=>m.tableName));for(let{schema:m,tableName:g}of r){let x=n.tables[g];if(x){let T=je(m,x);if(!pe(T)){let{up:w,down:B}=_e(T,g);i.push(w),s.push(B)}}else{let{up:T,down:w}=le(m);i.push(T),s.push(w)}}for(let m of Object.keys(n.tables))if(!c.has(m)){let g=n.tables[m],{up:x,down:T}=wt(m,g);i.push(x),s.unshift(T)}let l=i.length===0,y=i.join(`
37
+
38
+ `),u=[...s].reverse().join(`
39
+
40
+ `),f=`import type { Knex } from 'knex';
41
+
42
+ export async function up(knex: Knex): Promise<void> {
43
+ ${l?" // No changes needed":y}
44
+ }
45
+
46
+ export async function down(knex: Knex): Promise<void> {
47
+ ${l?" // No changes needed":u}
48
+ }
49
+ `,h={};for(let{schema:m,tableName:g}of r)h[g]=V(m);return{up:y,down:u,full:f,isEmpty:l,nextSnapshot:{version:1,tables:h}}}function wt(e,n){let t=` // TODO: review destructive change \u2014 dropped table '${e}'
50
+ await knex.schema.dropTableIfExists(${JSON.stringify(e)});`,a=[];for(let[r,i]of Object.entries(n.columns)){let s=` table.specificType(${JSON.stringify(r)}, ${JSON.stringify(i.type)})`;i.nullable?s+=".nullable()":s+=".notNullable()",i.defaultValue!==null&&i.defaultValue!==void 0&&(s+=`.defaultTo(${JSON.stringify(i.defaultValue)})`),a.push(s+";")}for(let r of n.foreignKeys)a.push(` table.foreign(${JSON.stringify(r.columnName)}).references(${JSON.stringify(r.foreignColumn)}).inTable(${JSON.stringify(r.foreignTable)}).onDelete(${JSON.stringify(r.deleteRule)}).onUpdate(${JSON.stringify(r.updateRule)});`);for(let r of n.indexes)r.unique?a.push(` table.unique(${JSON.stringify(r.columns)}, { indexName: ${JSON.stringify(r.name)} });`):a.push(` table.index(${JSON.stringify(r.columns)}, ${JSON.stringify(r.name)});`);let o=` await knex.schema.createTable(${JSON.stringify(e)}, (table) => {
51
+ `+a.join(`
52
+ `)+`
53
+ });`;return{up:t,down:o}}function _e(e,n){let t=[],a=[];for(let s of e.addColumns){let l=` ${s.type.includes(" ")?`table.specificType('${s.name}', '${s.type}')`:`table.${Ct(s.type)}('${s.name}')`}`;s.nullable?l+=".nullable()":l+=".notNullable()",s.defaultValue!==void 0&&(l+=`.defaultTo(${Bt(s.defaultValue)})`),l+=";",t.push(l),a.push(` table.dropColumn('${s.name}');`)}for(let s of e.dropColumns)t.push(` table.dropColumn('${s}');`),a.push(` // TODO: recreate column '${s}' with original definition`);for(let s of e.alterColumns)for(let[c,l]of Object.entries(s.changes))if(c==="nullable")l.to?(t.push(` table.setNullable('${s.name}');`),a.push(` table.dropNullable('${s.name}');`)):(t.push(` table.dropNullable('${s.name}');`),a.push(` table.setNullable('${s.name}');`));else if(c==="defaultValue"){let y=l.to,u=l.from;y===null?(t.push(` table.timestamp('${s.name}').alter(); // DROP DEFAULT`),a.push(` table.timestamp('${s.name}').defaultTo(knex.fn.now()).alter();`)):(t.push(` table.timestamp('${s.name}').notNullable().defaultTo(knex.fn.now()).alter();`),a.push(u===null?` table.timestamp('${s.name}').notNullable().alter();`:` table.timestamp('${s.name}').notNullable().defaultTo(knex.fn.now()).alter();`))}for(let s of e.addIndexes){let c=JSON.stringify(s.columns);s.unique?(t.push(` table.unique(${c}${s.name?`, { indexName: '${s.name}' }`:""});`),a.push(` table.dropUnique(${c}${s.name?`, '${s.name}'`:""});`)):(t.push(` table.index(${c}${s.name?`, '${s.name}'`:""});`),a.push(` table.dropIndex([]${s.name?`, '${s.name}'`:""});`))}for(let s of e.dropIndexes)t.push(` table.dropIndex([], '${s}');`),a.push(` // TODO: recreate index '${s}' with original definition`);for(let s of e.addForeignKeys){let c=` table.foreign('${s.column}').references('${s.foreignColumn}').inTable('${s.foreignTable}')`;s.onDelete&&(c+=`.onDelete('${s.onDelete}')`),s.onUpdate&&(c+=`.onUpdate('${s.onUpdate}')`),c+=";",t.push(c),a.push(` table.dropForeign('${s.column}');`)}for(let s of e.dropForeignKeys)t.push(` // TODO: drop foreign key constraint '${s}'`);let o=t.length===0,r=o?" // No changes needed":` await knex.schema.alterTable('${n}', (table) => {
54
+ ${t.join(`
55
+ `)}
56
+ });`,i=o?" // No changes needed":` await knex.schema.alterTable('${n}', (table) => {
57
+ ${a.join(`
58
+ `)}
59
+ });`;return{up:r,down:i}}function Rt(e,n,t){switch(t){case"integer":return e.integer(n);case"character varying":return e.string(n);case"text":return e.text(n);case"boolean":return e.boolean(n);case"timestamp without time zone":case"timestamp":return e.timestamp(n);case"double precision":case"float":return e.float(n);case"jsonb":case"json":return e.specificType(n,"jsonb");case"uuid":return e.uuid(n);default:return e.specificType(n,t)}}function bt(e){let n=new Set(e.map(y=>y.tableName)),t=new Map;for(let{schema:y,tableName:u}of e){let f=new Set,h=y.introspect().properties??{};for(let[,d]of Object.entries(h)){let m=d.introspect?.()?.extensions??{};m.references?.table&&n.has(m.references.table)&&f.add(m.references.table)}t.set(u,f)}let a=new Map,o=new Map;for(let{tableName:y}of e)a.set(y,0),o.set(y,[]);for(let{tableName:y}of e)for(let u of t.get(y)??[])o.get(u).push(y),a.set(y,(a.get(y)??0)+1);let r=[];for(let[y,u]of a)u===0&&r.push(y);let i=[];for(;r.length>0;){let y=r.shift();i.push(y);for(let u of o.get(y)??[]){let f=a.get(u)-1;a.set(u,f),f===0&&r.push(u)}}let s=new Set(i),c=e.filter(y=>!s.has(y.tableName)),l=new Map(e.map(y=>[y.tableName,y]));return[...i.map(y=>l.get(y)),...c]}function Ct(e){switch(e){case"integer":return"integer";case"character varying":return"string";case"text":return"text";case"boolean":return"boolean";case"timestamp without time zone":case"timestamp":return"timestamp";case"double precision":case"float":return"float";case"jsonb":case"json":return"jsonb";case"uuid":return"uuid";default:return`specificType('${e}')`}}function Bt(e){return e==="now"?"knex.fn.now()":typeof e=="object"&&e!==null&&e.raw?`knex.raw('${e.raw.replace(/'/g,"\\'")}')`:typeof e=="string"?`'${e.replace(/'/g,"\\'")}'`:String(e)}async function Nt(e,n,t,a){let o;if(typeof t=="string"){let i=await e.raw(t,a??[]);o=i.rows??i}else o=await t;if(!o||!Array.isArray(o))return[];let{colToProp:r}=R(n);return o.map(i=>{let s={};for(let[c,l]of Object.entries(i)){let y=r.get(c);s[y??c]=l}return s})}import{ObjectSchemaBuilder as _t,SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR as Ae}from"@cleverbrush/schema";import{ObjectSchemaBuilder as Qt,SYMBOL_SCHEMA_PROPERTY_DESCRIPTOR as Kt}from"@cleverbrush/schema";var $e=new WeakMap;function p(e){let n=$e.get(e);if(!n)throw new Error("SchemaQueryBuilder state not found \u2014 builder was not properly initialized");return n}function Oe(e,n){$e.set(e,n)}function b(e,n,t="column"){let a=p(e);return Q(n,a.localSchema,t,a.knex)}function S(e){p(e).cachedBuiltQuery=null}function z(e){return p(e).localSchema.getExtension?.("softDelete")??null}function It(e){let t=p(e).localSchema.getExtension?.("defaultScope");return typeof t=="function"?t:null}function $(e){return p(e).localSchema.getExtension?.("timestamps")??null}var fe=new Set(["=","!=","<>","<",">","<=",">=","like","not like","ilike","not ilike","in","not in","is","is not"]);function j(e){let n=p(e);if(n.variantConfig!==void 0)return n.variantConfig;let t=se(n.localSchema);if(!t)return n.variantConfig=null,null;let{propToCol:a}=R(n.localSchema),o=a.get(t.discriminatorKey)??t.discriminatorKey;return n.variantConfig={...t,discriminatorColumn:o},n.variantConfig}function vt(e,n,t){let a=p(e),o=a.knex,r=a.tableName,i=P(e,a.localSchema),s=t.discriminatorColumn,c=n.clone().select(`${r}.*`);for(let[l,y]of Object.entries(t.variants))if(!(a.enabledVariants!==null&&!a.enabledVariants.has(l))&&y.storage==="cti"){let u=`__v_${l}`,f=y.tableName,h=y.foreignKey;c.leftJoin(`${f} as ${u}`,o.raw("?? = ?? AND ?? = ?",[`${u}.${h}`,`${r}.${i}`,`${r}.${s}`,l]));let{propToCol:d}=R(y.schema),g=y.schema.introspect().properties??{};for(let x of Object.keys(g)){let T=d.get(x)??x;c.select(o.raw("?? as ??",[`${u}.${T}`,`${u}__${T}`]))}}for(let l of a.variantRelationIncludes){let y=t.variants[l.variantKey];if(!y)continue;let u=y.relations.find(m=>m.name===l.relationName);if(!u)continue;let f=X(e,u.schema),h=C(f),d=`__v_${l.variantKey}__rel_${l.relationName}`;if(u.type==="belongsTo"||u.type==="hasOne"){let m,g;u.type==="belongsTo"?(m=u.foreignKey??(()=>{throw new Error(`includeVariant: relation "${l.relationName}" on variant "${l.variantKey}" requires foreignKey`)})(),g=P(e,f)):(m=P(e,a.localSchema),g=u.foreignKey??(()=>{throw new Error(`includeVariant: relation "${l.relationName}" on variant "${l.variantKey}" requires foreignKey`)})());let x,T=`__v_${l.variantKey}`;y.storage==="cti"?u.type==="belongsTo"?x=`${d}.${g} = ${T}.${m} AND ${r}.${s} = '${l.variantKey}'`:x=`${d}.${g} = ${r}.${m} AND ${r}.${s} = '${l.variantKey}'`:u.type==="belongsTo"?x=`${d}.${g} = ${r}.${m} AND ${r}.${s} = '${l.variantKey}'`:x=`${d}.${g} = ${r}.${m} AND ${r}.${s} = '${l.variantKey}'`;let w=a.knex(h),B=Pt(e,f,d,h,l.customize);c.leftJoin(o.raw("?? as ??",[h,d]),o.raw(x));for(let v of B)c.select(v)}}for(let l of a.variantWhereFilters){let y=`${r}.${s}`;c.where(function(){this.where(y,l.key).andWhere(l.qualifiedColumn,l.op,l.value).orWhere(y,"!=",l.key)})}return a.enabledVariants!==null&&c.whereIn(`${r}.${s}`,[...a.enabledVariants]),c}var G=null;function De(e){G=e}function L(){return G}function Pt(e,n,t,a,o){let r=p(e),i=r.knex,{propToCol:s}=R(n),l=n.introspect().properties??{},y;if(o){let u=new G(r.knex,n,r.knex(a));o(u);let h=p(u).explicitSelects;h&&h.length>0?y=h:y=Object.keys(l).map(d=>s.get(d)??d)}else y=Object.keys(l).map(u=>s.get(u)??u);return y.map(u=>i.raw("?? as ??",[`${t}.${u}`,`${t}__${u}`]))}function kt(e,n,t){let a=p(e),{colToProp:o}=R(a.localSchema),r={};for(let[c,l]of Object.entries(n)){if(c.startsWith("__v_"))continue;let y=o.get(c);y?r[y]=l:r[c]=l}let i=t.discriminatorKey,s=r[i];if(s!=null){let c=t.variants[s];if(c)if(c.storage==="cti"){let{colToProp:l}=R(c.schema),u=`${`__v_${s}`}__`,f=c.foreignKey;if(f){let h=`${u}${f}`;if(!c.allowOrphan&&n[h]==null)throw new Error(`Polymorphic orphan: "${i}" = "${s}" but no matching row found in variant table "${c.tableName}". Set allowOrphan: true on this variant to suppress.`)}for(let[h,d]of Object.entries(n)){if(!h.startsWith(u))continue;let m=h.slice(u.length);if(m===f)continue;let g=l.get(m)??m;r[g]=d}}else{let{colToProp:l}=R(c.schema);for(let[y,u]of Object.entries(n)){if(y.startsWith("__v_")||o.has(y))continue;let f=l.get(y);f&&(r[f]=u)}}}if(a.variantRelationIncludes.length>0&&s!=null){let c=t.variants[s];if(c)for(let l of a.variantRelationIncludes){if(l.variantKey!==s)continue;let y=c.relations.find(u=>u.name===l.relationName);if(y&&(y.type==="belongsTo"||y.type==="hasOne")){let f=`${`__v_${s}__rel_${l.relationName}`}__`,h=X(e,y.schema),{colToProp:d}=R(h),m={},g=!1;for(let[x,T]of Object.entries(n)){if(!x.startsWith(f))continue;let w=x.slice(f.length),B=d.get(w)??w;m[B]=T,T!=null&&(g=!0)}r[l.relationName]=g?m:null}}}return r}function X(e,n){return typeof n=="function"?n():n}function P(e,n){let t=J(n);return t.columnNames.length>0?t.columnNames[0]:"id"}function Ve(e){let n=p(e),t=J(n.localSchema);if(t.columnNames.length===0)throw new Error("No primary key declared on this schema. Use `.primaryKey()` on a column or `.hasPrimaryKey([...])` on the schema.");return t}function he(e){let n=p(e),t=n.baseQuery,a=!1,o=z(e);if(o&&n.onlyDeleted?(a||(t=t.clone(),a=!0),t.whereNotNull(o.column)):o&&!n.includeDeleted&&(a||(t=t.clone(),a=!0),t.whereNull(o.column)),!n.skipDefaultScope){let r=It(e);if(r){a||(t=t.clone(),a=!0);let i=new G(n.knex,n.localSchema,t),s=p(i);s.skipDefaultScope=!0,r(i)}}return t}function Et(e,n,t,a){let r=p(e).knex,i=t.foreignQuery,s=i._single?.table;if(!s)throw new Error(`Could not determine table name from foreignQuery for "${t.as}". Make sure foreignQuery is created via knex("tableName").`);n.select(r.raw(":relationAlias:.:as:->0 as :as:",{relationAlias:a,as:t.as}));let c=r.from(i.as(s)).select(r.raw(":foreignTable:.:foreignColumn:",{foreignTable:s,foreignColumn:t.foreignColumn})).select(r.raw("jsonb_agg(:foreignTable:) as :as:",{foreignTable:s,as:t.as})).groupByRaw(":foreignTable:.:foreignColumn:",{foreignTable:s,foreignColumn:t.foreignColumn}).as(a),l=t.required?"join":"leftJoin";n[l](c,function(){this.on(r.raw(":relationAlias:.:foreignColumn: = :originalQuery:.:localColumn:",{originalQuery:"originalQuery",relationAlias:a,foreignColumn:t.foreignColumn,localColumn:t.localColumn}))})}function jt(e,n,t,a,o){let i=p(e).knex,s=`withFilter${o}`,c=t.limit!==null&&t.limit>0||t.offset!==null&&t.offset>0,l=t.orderBy?t.orderBy.column:t.foreignColumn,y=t.orderBy?t.orderBy.direction:"asc";c?n.with(s,i.from(t.foreignQuery.clone().whereIn(t.foreignColumn,i.from(i.raw(":originalQuery:",{originalQuery:"originalQuery"})).distinct(t.localColumn).as(`__wf_inner_${o}`)).as(`__wf_inner_${o}`)).select(`__wf_inner_${o}.*`).select(i.raw(`row_number() over(partition by :foreignColumn: order by :orderByColumn: ${y}) as "__rn__"`,{foreignColumn:t.foreignColumn,orderByColumn:l}))):n.with(s,t.foreignQuery.clone().whereIn(t.foreignColumn,i.from(i.raw(":originalQuery:",{originalQuery:"originalQuery"})).distinct(t.localColumn)));let u=i.from(s);if(c){let h=t.limit!==null&&t.limit>0,d=t.offset!==null&&t.offset>0,m=t.offset??0,g=m+(t.limit??0),x=h&&d?'"__rn__" > :offset and "__rn__" <= :limit':h?'"__rn__" <= :limit':'"__rn__" > :offset';u.whereRaw(x,{limit:g,offset:m}),u.select(i.raw(":foreignColumn:",{foreignColumn:t.foreignColumn})),u.select(i.raw(`coalesce(jsonb_agg(to_jsonb(:filterName:) - '__rn__' order by "__rn__"), '[]'::jsonb) as :as:`,{filterName:s,as:t.as}))}else{u.select(i.raw(":foreignColumn:",{foreignColumn:t.foreignColumn}));let h=t.orderBy?`jsonb_agg(:filterName: order by :filterName:.:orderByColumn: ${y})`:"jsonb_agg(:filterName:)";u.select(i.raw(`coalesce(${h}, '[]'::jsonb) as :as:`,t.orderBy?{filterName:s,orderByColumn:l,as:t.as}:{filterName:s,as:t.as}))}u.groupByRaw(":foreignColumn:",{foreignColumn:t.foreignColumn});let f=u.as(a);n.select(i.raw("coalesce(:relationAlias:.:as:, '[]'::jsonb) as :as:",{relationAlias:a,as:t.as})),n.leftJoin(f,function(){this.on(i.raw(":relationAlias:.:foreignColumn: = :originalQuery:.:localColumn:",{relationAlias:a,foreignColumn:t.foreignColumn,originalQuery:"originalQuery",localColumn:t.localColumn}))})}function de(e){let n=p(e),t=he(e),a=j(e),o=a?vt(e,t,a):t;if(n.specs.length===0)return o;let r=n.knex,i=n.specs,s=[...new Set(i.map(u=>u.localColumn))],c=o,l=[];if(n.explicitSelects!==null){let u=new Set(n.explicitSelects);if(l=s.filter(f=>!u.has(f)),l.length>0){c=o.clone();for(let f of l)c.column(f)}}let y=r.queryBuilder().with("originalQuery",c);if(l.length>0&&n.explicitSelects!==null)for(let u of n.explicitSelects)y.select(r.raw(":originalQuery:.:col: as :col:",{originalQuery:"originalQuery",col:u}));else y.select("originalQuery.*");y.from(r.raw(":originalQuery:",{originalQuery:"originalQuery"}));for(let u=0;u<i.length;u++){let f=i[u],h=`eagerRelation${u}`;f.type==="one"?Et(e,y,f,h):jt(e,y,f,h,u)}return y}function O(e){let n=p(e);return n.cachedBuiltQuery||(n.cachedBuiltQuery=de(e)),n.cachedBuiltQuery}function I(e,n){if(!n)return n;let t=j(e);if(t)return kt(e,n,t);let a=p(e),{colToProp:o}=R(a.localSchema),r={};for(let[i,s]of Object.entries(n)){let c=o.get(i);c?r[c]=s:r[i]=s}return r}function A(e,n){let t=p(e),a=t.specs.filter(i=>i.type==="one"),o=t.specs.filter(i=>i.type==="many"),r=me(n,a,o);return I(e,r)}function k(e,n){let t=p(e),{propToCol:a}=R(t.localSchema),o={};for(let[r,i]of Object.entries(n)){let s=a.get(r);s?o[s]=i:o[r]=i}return o}function M(e,n){return k(e,n)}function N(e,n){return typeof n=="string"||typeof n=="function"?b(e,n,"column"):n}function F(e,n){let t=p(e);try{let a=Qt.getPropertiesFor(t.localSchema),o=n(a);if(o&&typeof o=="object"&&Kt in o)return!0}catch{}return!1}function E(e,n){let t=p(e);if(t.selectionMode==="projection")throw new Error(`Cannot call .${n}() after .projected('${t.appliedProjection}'). Choose one column-selection mode per query.`)}function Le(e,n){let t=p(e);if(t.selectionMode==="select")throw new Error(`Cannot call .${n}() after .select(). Choose one column-selection mode per query.`);if(t.selectionMode==="aggregate")throw new Error(`Cannot call .${n}() after an aggregate method. Choose one column-selection mode per query.`);if(t.selectionMode==="projection")throw new Error(`Cannot call .${n}() after .projected('${t.appliedProjection}'). Choose one column-selection mode per query.`)}function Me(e,...n){let t=p(e);if(n.length===1&&typeof n[0]=="function"){let o=n[0],r=_t.getPropertiesFor(t.localSchema),i=o(r);if(i&&typeof i=="object"&&!(Ae in i)){S(e),E(e,"select"),t.selectionMode="projection",t.appliedProjection="<inline>";let s={};t.explicitSelects??=[];for(let[c,l]of Object.entries(i)){if(!l||typeof l!="object"||!(Ae in l))throw new Error(`select(selector): value for alias "${c}" must be a property descriptor (e.g. \`t.someProp\`).`);let y=b(e,(()=>l),`select(selector).${c}`);s[c]=y,t.explicitSelects.push(y)}return t.baseQuery.select(s),e}}S(e),E(e,"select"),t.selectionMode="select";let a=n.map(o=>N(e,o));t.baseQuery.select(...a),t.explicitSelects??=[];for(let o of a)typeof o=="string"&&t.explicitSelects.push(o);return e}function Fe(e,...n){S(e);let t=n.map(a=>N(e,a));return p(e).baseQuery.distinct(...t),e}function qe(e,n){let t=p(e);return S(e),E(e,"count"),t.selectionMode="aggregate",n?t.baseQuery.count(N(e,n)):t.baseQuery.count(),e}function Ue(e,n){let t=p(e);return S(e),E(e,"countDistinct"),t.selectionMode="aggregate",n?t.baseQuery.countDistinct(N(e,n)):t.baseQuery.countDistinct(),e}function We(e,n){let t=p(e);return S(e),E(e,"min"),t.selectionMode="aggregate",t.baseQuery.min(N(e,n)),e}function Je(e,n){let t=p(e);return S(e),E(e,"max"),t.selectionMode="aggregate",t.baseQuery.max(N(e,n)),e}function Ye(e,n){let t=p(e);return S(e),E(e,"sum"),t.selectionMode="aggregate",t.baseQuery.sum(N(e,n)),e}function He(e,n){let t=p(e);return S(e),E(e,"avg"),t.selectionMode="aggregate",t.baseQuery.avg(N(e,n)),e}function ze(e,n,t){let a=p(e);return S(e),t?a.baseQuery.select(a.knex.raw(n,t)):a.baseQuery.select(a.knex.raw(n)),e}function Ge(e,n){let t=p(e);if(Le(e,"projected"),t.selectionMode==="projection")throw new Error(`Cannot call .projected('${n}') \u2014 .projected('${t.appliedProjection}') was already applied. Only one projection per query.`);let o=re(t.localSchema)[n];if(!o)throw new Error(`Unknown projection "${n}" on schema for table "${t.tableName}"`);let{propToCol:r}=R(t.localSchema),i=o.keys.map(s=>r.get(s)??s);t.baseQuery.select(...i),t.explicitSelects??=[];for(let s of i)t.explicitSelects.push(s);return t.selectionMode="projection",t.appliedProjection=n,S(e),e}function Xe(e,n){let t=p(e);S(e);let o=t.localSchema.getExtension?.("scopes")?.[n];if(!o)throw new Error(`Unknown scope "${n}" on schema for table "${t.tableName}"`);return o(e),e}function Ze(e){let n=p(e);return S(e),n.skipDefaultScope=!0,n.includeDeleted=!0,e}var ge=class{#n;#e;#t;constructor(n,t,a,o){this.#n=n,this.#e=t,this.#t=o}async merge(n,t){return this.#a(n,"merge",t)}async ignore(n){return this.#a(n,"ignore")}async#a(n,t,a){let o=C(this.#e),r=this.#e.getExtension?.("timestamps")??null,i=this.#e.getExtension?.("beforeInsert")??[],s={...n};for(let d of i)s=await d(s)??s;let{propToCol:c}=R(this.#e),l={};for(let[d,m]of Object.entries(s))l[c.get(d)??d]=m;r&&(l[r.createdAt]=this.#n.fn.now(),l[r.updatedAt]=this.#n.fn.now());let y=this.#n(o).insert(l).onConflict(this.#t);if(t==="ignore")y=y.ignore();else{let d;if(a){d={};for(let[m,g]of Object.entries(a))d[c.get(m)??m]=g}else d={...l},r&&(delete d[r.createdAt],d[r.updatedAt]=this.#n.fn.now());y=y.merge(d)}let u=await y.returning("*");if(!u||u.length===0)return;let{colToProp:f}=R(this.#e),h={};for(let[d,m]of Object.entries(u[0]))h[f.get(d)??d]=m;return h}};async function en(e,n){let t=p(e),a={...n},o=t.localSchema.getExtension?.("beforeInsert")??[];for(let y of o)a=await y(a)??a;let r=k(e,a),i=$(e);i&&(r[i.createdAt]=t.knex.fn.now(),r[i.updatedAt]=t.knex.fn.now());let[s]=await t.knex(t.tableName).insert(r).returning("*"),c=I(e,s),l=t.localSchema.getExtension?.("afterInsert")??[];for(let y of l)await y(c);return c}async function nn(e,n){let t=p(e),a=$(e),o=t.localSchema.getExtension?.("beforeInsert")??[],r=[];for(let l of n){let y={...l};for(let f of o)y=await f(y)??y;let u=k(e,y);a&&(u[a.createdAt]=t.knex.fn.now(),u[a.updatedAt]=t.knex.fn.now()),r.push(u)}let s=(await t.knex(t.tableName).insert(r).returning("*")).map(l=>I(e,l)),c=t.localSchema.getExtension?.("afterInsert")??[];for(let l of s)for(let y of c)await y(l);return s}function tn(e,...n){let t=p(e),a=n.map(o=>b(e,o,"onConflict"));return new ge(t.knex,t.localSchema,e,a)}async function an(e,n,t){let a=p(e),o=t.conflictColumns.map(s=>b(e,s,"upsert")),r=a.knex(a.tableName).insert(k(e,n)).onConflict(o);if(t.updateColumns&&t.updateColumns.length>0){let s=t.updateColumns.map(c=>b(e,c,"upsert"));r.merge(s)}else r.merge();let[i]=await r.returning("*");return I(e,i)}async function Se(e,n,t){if(n.length===0)return[];let a=p(e),o=t?.chunkSize??500,r=Object.keys(n[0]).length||1,i=Math.max(1,Math.floor(6e4/Math.max(1,r))),s=Math.max(1,Math.min(o,i)),c=$(e),l=a.localSchema.getExtension?.("beforeInsert")??[],y=a.localSchema.getExtension?.("afterInsert")??[],u=t?.onConflict&&t.conflictColumns?t.conflictColumns.map(h=>b(e,h,"bulkInsert.onConflict")):null;if(t?.onConflict&&(!u||u.length===0))throw new Error("bulkInsert: `conflictColumns` is required when `onConflict` is set.");let f=[];for(let h=0;h<n.length;h+=s){let d=n.slice(h,h+s),m=[];for(let T of d){let w={...T};for(let v of l)w=await v(w)??w;let B=k(e,w);c&&(B[c.createdAt]=a.knex.fn.now(),B[c.updatedAt]=a.knex.fn.now()),m.push(B)}let g=a.knex(a.tableName).insert(m);if(u)if(g=g.onConflict(u),t.onConflict==="ignore")g=g.ignore();else{let T=new Set;for(let w of m)for(let B of Object.keys(w))T.add(B);for(let w of u)T.delete(w);c&&(T.delete(c.createdAt),T.add(c.updatedAt)),g=g.merge(Array.from(T))}let x=await g.returning("*");for(let T of x){let w=I(e,T);for(let B of y)await B(w);f.push(w)}}return f}async function on(e,n,t){return Se(e,n,{chunkSize:t.chunkSize,onConflict:"merge",conflictColumns:t.conflictColumns})}async function rn(e){let n=p(e),t=n.localSchema.getExtension?.("beforeDelete")??[];for(let o of t)await o(e);let a=z(e);return a?n.baseQuery.update({[a.column]:n.knex.fn.now()}):n.baseQuery.delete()}function sn(e){let n=p(e);return S(e),n.includeDeleted=!0,e}function cn(e){let n=p(e);return S(e),n.onlyDeleted=!0,n.includeDeleted=!0,e}async function ln(e){let n=p(e),t=n.localSchema.getExtension?.("beforeDelete")??[];for(let a of t)await a(e);return n.baseQuery.delete()}async function yn(e){let n=p(e),t=z(e);if(!t)throw new Error("Schema does not have soft delete enabled. Use .softDelete() on the schema.");return(await n.baseQuery.update({[t.column]:null}).returning("*")).map(o=>I(e,o))}function un(e,n){if(e.foreignQuery)return"toKnexQuery"in e.foreignQuery?e.foreignQuery.toKnexQuery():e.foreignQuery;let t=C(e.foreignSchema);return n(t)}function mn(e,n,t){let a=Q(e.localColumn,n,"localColumn"),o=Q(e.foreignColumn,e.foreignSchema,"foreignColumn");if(typeof e.as!="string"||!e.as)throw new Error("as must be a non-empty string");let r=un(e,t),i=e.required!==!1;return e.mappers!==void 0&&fn(e.mappers),{localColumn:a,foreignColumn:o,as:e.as,required:i,foreignQuery:r,mappers:e.mappers}}function pn(e,n,t){let a=Q(e.localColumn,n,"localColumn"),o=Q(e.foreignColumn,e.foreignSchema,"foreignColumn");if(typeof e.as!="string"||!e.as)throw new Error("as must be a non-empty string");let r=un(e,t);e.mappers!==void 0&&fn(e.mappers);let i=Number.isFinite(e.limit)&&e.limit>0?e.limit:null,s=Number.isFinite(e.offset)&&e.offset>0?e.offset:null,c=e.orderBy?{column:Q(e.orderBy.column,e.foreignSchema,"orderBy.column"),direction:e.orderBy.direction??"asc"}:null;return{localColumn:a,foreignColumn:o,as:e.as,foreignQuery:r,limit:i,offset:s,orderBy:c,mappers:e.mappers}}function fn(e){if(typeof e!="object"||e===null)throw new Error("mappers must be an object");for(let n of Object.keys(e)){let t=e[n];if(typeof t=="string"){if(typeof D[t]!="function")throw new Error(`mapper for "${n}": unknown built-in mapper name "${t}"`)}else if(typeof t!="function")throw new Error(`mapper for "${n}" must be a function or a built-in mapper name`)}}function xe(e){let n=new Set;for(let t of e){if(n.has(t.as))throw new Error(`duplicate field name: ${t.as}`);n.add(t.as)}}function Z(e,n){let t=p(e),a=mn(n,t.localSchema,t.knex);return t.specs.push({type:"one",...a}),xe(t.specs),S(e),e}function ee(e,n){let t=p(e),a=pn(n,t.localSchema,t.knex);return t.specs.push({type:"many",...a}),xe(t.specs),S(e),e}function hn(e,n,t){let a=p(e);S(e);let r=(a.localSchema.getExtension?.("relations")??[]).find(c=>c.name===n);if(!r){let c=j(e);if(c){let l=[];for(let[y,u]of Object.entries(c.variants))u.relations.some(f=>f.name===n)&&l.push({variantKey:y});if(l.length===1)return Te(e,l[0].variantKey,n,t);if(l.length>1)throw new Error(`Ambiguous relation "${n}" \u2014 found on variants: ${l.map(y=>y.variantKey).join(", ")}. Use .includeVariant(key, name) to be explicit.`)}throw new Error(`Unknown relation "${n}" on schema for table "${a.tableName}"`)}let i=X(e,r.schema),s=C(i);switch(r.type){case"belongsTo":{let c=Q(r.foreignKey,a.localSchema,"foreignKey"),l=P(e,i),y=a.knex(s);if(t){let u=L(),f=new u(a.knex,i,y);t(f)}Z(e,{foreignSchema:i,localColumn:c,foreignColumn:l,as:n,foreignQuery:y});break}case"hasOne":{let c=P(e,a.localSchema),l=Q(r.foreignKey,i,"foreignKey"),y=a.knex(s);if(t){let u=L(),f=new u(a.knex,i,y);t(f)}Z(e,{foreignSchema:i,localColumn:c,foreignColumn:l,as:n,required:!1,foreignQuery:y});break}case"hasMany":{let c=P(e,a.localSchema),l=Q(r.foreignKey,i,"foreignKey"),y=a.knex(s);if(t){let u=L(),f=new u(a.knex,i,y);t(f)}ee(e,{foreignSchema:i,localColumn:c,foreignColumn:l,as:n,foreignQuery:y});break}case"belongsToMany":{let c=r.through,l=P(e,a.localSchema),y=a.knex(s).join(c.table,`${c.table}.${c.foreignKey}`,`${s}.${P(e,i)}`).select(`${s}.*`,`${c.table}.${c.localKey}`);if(t){let u=L(),f=new u(a.knex,i,y);t(f)}ee(e,{foreignSchema:i,localColumn:l,foreignColumn:c.localKey,as:n,foreignQuery:y});break}}return e}function Te(e,n,t,a){let o=p(e);S(e);let r=j(e);if(!r)throw new Error(`includeVariant: schema for table "${o.tableName}" is not polymorphic (no .withVariants() config found)`);let i=r.variants[n];if(!i)throw new Error(`includeVariant: unknown variant key "${n}" on schema for table "${o.tableName}"`);if(!i.relations.find(c=>c.name===t))throw new Error(`includeVariant: unknown relation "${t}" on variant "${n}" of table "${o.tableName}"`);return o.variantRelationIncludes.push({variantKey:n,relationName:t,customize:a}),e}function ne(e,n,...t){let a=p(e);if(S(e),typeof n=="function"&&!F(e,n))a.baseQuery.where(n,...t);else if(typeof n=="object"&&n!==null&&!("toSQL"in n)){let o=M(e,n);a.baseQuery.where(o,...t)}else{let o=N(e,n);a.baseQuery.where(o,...t)}return e}function dn(e,n,...t){let a=p(e);if(S(e),typeof n=="function"&&!F(e,n))a.baseQuery.andWhere(n,...t);else if(typeof n=="object"&&n!==null&&!("toSQL"in n)){let o=M(e,n);a.baseQuery.andWhere(o,...t)}else{let o=N(e,n);a.baseQuery.andWhere(o,...t)}return e}function gn(e,n,...t){let a=p(e);if(S(e),typeof n=="function"&&!F(e,n))a.baseQuery.orWhere(n,...t);else if(typeof n=="object"&&n!==null&&!("toSQL"in n)){let o=M(e,n);a.baseQuery.orWhere(o,...t)}else{let o=N(e,n);a.baseQuery.orWhere(o,...t)}return e}function Sn(e,n,...t){let a=p(e);if(S(e),typeof n=="function"&&!F(e,n))a.baseQuery.whereNot(n,...t);else if(typeof n=="object"&&n!==null&&!("toSQL"in n)){let o=M(e,n);a.baseQuery.whereNot(o,...t)}else{let o=N(e,n);a.baseQuery.whereNot(o,...t)}return e}function xn(e,n,t){let a=p(e);return S(e),a.baseQuery.whereIn(b(e,n,"whereIn"),t),e}function Tn(e,n,t){let a=p(e);return S(e),a.baseQuery.whereNotIn(b(e,n,"whereNotIn"),t),e}function wn(e,n,t){let a=p(e);return S(e),a.baseQuery.orWhereIn(b(e,n,"orWhereIn"),t),e}function Rn(e,n,t){let a=p(e);return S(e),a.baseQuery.orWhereNotIn(b(e,n,"orWhereNotIn"),t),e}function bn(e,n){let t=p(e);return S(e),t.baseQuery.whereNull(b(e,n,"whereNull")),e}function Cn(e,n){let t=p(e);return S(e),t.baseQuery.whereNotNull(b(e,n,"whereNotNull")),e}function Bn(e,n){let t=p(e);return S(e),t.baseQuery.orWhereNull(b(e,n,"orWhereNull")),e}function Nn(e,n){let t=p(e);return S(e),t.baseQuery.orWhereNotNull(b(e,n,"orWhereNotNull")),e}function Qn(e,n,t){let a=p(e);return S(e),a.baseQuery.whereBetween(b(e,n,"whereBetween"),t),e}function Kn(e,n,t){let a=p(e);return S(e),a.baseQuery.whereNotBetween(b(e,n,"whereNotBetween"),t),e}function In(e,n,t){let a=p(e);return S(e),a.baseQuery.whereLike(b(e,n,"whereLike"),t),e}function vn(e,n,t){let a=p(e);return S(e),a.baseQuery.whereILike(b(e,n,"whereILike"),t),e}function Pn(e,n,...t){let a=p(e);return S(e),a.baseQuery.whereRaw(n,...t),e}function kn(e,n){let t=p(e);return S(e),t.baseQuery.whereExists(n),e}function En(e,n){let t=p(e);return S(e),t.baseQuery.whereNotExists(n),e}function jn(e,n,t,a,o){let r=p(e);S(e);let i=r.knex.client?.config?.client;if(i!=="pg"&&i!=="postgresql"&&i!=="postgres")throw new Error(`whereJsonPath() is only supported on PostgreSQL (got client: "${i??"unknown"}")`);let s=b(e,n,"whereJsonPath"),c=a??"=";if(c==="@?"||c==="@@"){let l=c==="@?"?"@\\?":"@@";r.baseQuery.whereRaw(`?? ${l} ?`,[s,t])}else{let l=t.startsWith("$")?t:`$.${t.replace(/\./g,".")}`;r.baseQuery.whereRaw(`jsonb_path_query_first(??, ?) ${c} ?::jsonb`,[s,l,JSON.stringify(o)])}return e}function te(e,n,t){let a=p(e);S(e);let o=N(e,n);return a.baseQuery.orderBy(o,t),e}function _n(e,n,...t){let a=p(e);return S(e),a.baseQuery.orderByRaw(n,...t),e}function $n(e,...n){let t=p(e);S(e);let a=n.map(o=>N(e,o));return t.baseQuery.groupBy(...a),e}function On(e,n,...t){let a=p(e);return S(e),a.baseQuery.groupByRaw(n,...t),e}function Dn(e,n,t,a){let o=p(e);S(e);let r=N(e,n);return o.baseQuery.having(r,t,a),e}function Vn(e,n,...t){let a=p(e);return S(e),a.baseQuery.havingRaw(n,...t),e}function ae(e,n){let t=p(e);return S(e),t.baseQuery.limit(n),e}function we(e,n){let t=p(e);return S(e),t.baseQuery.offset(n),e}async function Ln(e,n){let{page:t,pageSize:a}=n,o=p(e),i=await he(e).clone().clearSelect().clearOrder().count("* as count").first(),s=Number(i?.count??0);ae(e,a),we(e,(t-1)*a);let c=await oe(e),l=Math.ceil(s/a);return{data:c,total:s,page:t,pageSize:a,totalPages:l,hasNextPage:t<l,hasPreviousPage:t>1}}async function An(e,n){let t=n.direction??"desc",a=n.column??"id",o=p(e);n.cursor!=null&&ne(e,a,t==="desc"?"<":">",n.cursor),te(e,a,t),ae(e,n.limit+1);let r=await oe(e),i=r.length>n.limit,s=i?r.slice(0,n.limit):r,c=typeof a=="string"?a:ie(a,o.localSchema,"cursor"),l=i&&s.length>0?String(s[s.length-1][c]):null;return{data:s,nextCursor:l,hasMore:i}}async function oe(e){let t=await O(e);return t?Array.isArray(t)?t.map(a=>A(e,a)):[A(e,t)]:[]}async function Mn(e,n){let t=p(e),a={...n},o=t.localSchema.getExtension?.("beforeUpdate")??[];for(let c of o)a=await c(a)??a;let r=k(e,a),i=$(e);return i&&(r[i.updatedAt]=t.knex.fn.now()),(await t.baseQuery.update(r).returning("*")).map(c=>I(e,c))}async function Fn(e,n){if(n.length===0)return 0;let t=p(e),a=Ve(e),{propToCol:o}=R(t.localSchema),r=t.localSchema.getExtension?.("beforeUpdate")??[],i=$(e),s=[];for(let f of n){let h={...f.set};for(let x of r)h=await x(h)??h;let d=k(e,h);i&&(d[i.updatedAt]=t.knex.fn.now());let m=f.where,g=[];for(let x of a.propertyKeys){let T=x in m?m[x]:m[o.get(x)??x];if(T===void 0)throw new Error(`bulkUpdate: each \`where\` clause must include the entity's primary key (missing "${x}").`);g.push(T)}s.push({pkValues:g,set:d})}let c=new Set;for(let f of s)for(let h of Object.keys(f.set))c.add(h);if(c.size===0)return 0;let l=t.knex,y={};for(let f of c){let h=[],d=[];for(let m of s)if(f in m.set)if(a.columnNames.length===1)h.push("WHEN ?? = ? THEN ?"),d.push(a.columnNames[0],m.pkValues[0],m.set[f]);else{let g=a.columnNames.map(()=>"?? = ?").join(" AND ");h.push(`WHEN ${g} THEN ?`);for(let x=0;x<a.columnNames.length;x++)d.push(a.columnNames[x],m.pkValues[x]);d.push(m.set[f])}h.length!==0&&(y[f]=l.raw(`CASE ${h.join(" ")} ELSE ?? END`,[...d,f]))}let u=l(t.tableName).update(y);return a.columnNames.length===1?u=u.whereIn(a.columnNames[0],s.map(f=>f.pkValues[0])):u=u.where(function(){for(let f of s)this.orWhere(function(){for(let h=0;h<a.columnNames.length;h++)this.andWhere(a.columnNames[h],f.pkValues[h])})}),await u}var q=class e{constructor(n,t,a){let o=C(t);Oe(this,{knex:n,baseQuery:a??n(o),localSchema:t,specs:[],tableName:o,explicitSelects:null,selectionMode:null,appliedProjection:null,includeDeleted:!1,onlyDeleted:!1,skipDefaultScope:!1,variantConfig:void 0,enabledVariants:null,variantWhereFilters:[],variantRelationIncludes:[],cachedBuiltQuery:null})}select(...n){return Me(this,...n)}distinct(...n){return Fe(this,...n)}count(n){return qe(this,n)}countDistinct(n){return Ue(this,n)}min(n){return We(this,n)}max(n){return Je(this,n)}sum(n){return Ye(this,n)}avg(n){return He(this,n)}selectRaw(n,t){return ze(this,n,t)}projected(n){return Ge(this,n)}scoped(n){return Xe(this,n)}unscoped(){return Ze(this)}where(n,...t){return ne(this,n,...t)}andWhere(n,...t){return dn(this,n,...t)}orWhere(n,...t){return gn(this,n,...t)}whereNot(n,...t){return Sn(this,n,...t)}whereIn(n,t){return xn(this,n,t)}whereNotIn(n,t){return Tn(this,n,t)}orWhereIn(n,t){return wn(this,n,t)}orWhereNotIn(n,t){return Rn(this,n,t)}whereNull(n){return bn(this,n)}whereNotNull(n){return Cn(this,n)}orWhereNull(n){return Bn(this,n)}orWhereNotNull(n){return Nn(this,n)}whereBetween(n,t){return Qn(this,n,t)}whereNotBetween(n,t){return Kn(this,n,t)}whereLike(n,t){return In(this,n,t)}whereILike(n,t){return vn(this,n,t)}whereRaw(n,...t){return Pn(this,n,...t)}whereExists(n){return kn(this,n)}whereNotExists(n){return En(this,n)}whereJsonPath(n,t,a,o){return jn(this,n,t,a,o)}orderBy(n,t){return te(this,n,t)}orderByRaw(n,...t){return _n(this,n,...t)}groupBy(...n){return $n(this,...n)}groupByRaw(n,...t){return On(this,n,...t)}having(n,t,a){return Dn(this,n,t,a)}havingRaw(n,...t){return Vn(this,n,...t)}limit(n){return ae(this,n)}offset(n){return we(this,n)}async paginate(n){return Ln(this,n)}async paginateAfter(n){return An(this,n)}async insert(n){return en(this,n)}async insertMany(n){return nn(this,n)}onConflict(...n){return tn(this,...n)}async upsert(n,t){return an(this,n,t)}async bulkInsert(n,t){return Se(this,n,t)}async bulkUpsert(n,t){return on(this,n,t)}async update(n){return Mn(this,n)}async bulkUpdate(n){return Fn(this,n)}async delete(){return rn(this)}withDeleted(){return sn(this)}onlyDeleted(){return cn(this)}async hardDelete(){return ln(this)}async restore(){return yn(this)}joinOne(n){return Z(this,n)}joinMany(n){return ee(this,n)}include(n,t){return hn(this,n,t)}includeVariant(n,t,a){return Te(this,n,t,a)}whereVariant(n,t,a,o){let r=p(this),i=j(this);if(!i)throw new Error("whereVariant() can only be used on a polymorphic schema (created with .withVariants())");let s=i.variants[n];if(!s)throw new Error(`whereVariant: unknown variant key "${n}". Valid keys: ${Object.keys(i.variants).join(", ")}`);let c=a.toLowerCase();if(!fe.has(c))throw new Error(`whereVariant: operator "${a}" is not allowed. Allowed operators: ${[...fe].join(", ")}`);let{propToCol:l}=R(s.schema),y=l.get(t)??t,u;return s.storage==="cti"?u=`__v_${n}.${y}`:u=`${r.tableName}.${y}`,r.variantWhereFilters.push({key:n,qualifiedColumn:u,op:c,value:o}),S(this),this}selectVariants(n){let t=p(this);if(!j(this))throw new Error("selectVariants() can only be used on a polymorphic schema (created with .withVariants())");return t.enabledVariants=new Set(n),S(this),this}apply(n){let t=p(this);return S(this),n(t.baseQuery),this}transacting(n){let t=p(this),a=new e(n,t.localSchema,t.baseQuery.clone().transacting(n)),o=p(a);for(let r of t.specs)o.specs.push({...r,foreignQuery:r.foreignQuery.clone().transacting(n)});return o.explicitSelects=t.explicitSelects?[...t.explicitSelects]:null,o.selectionMode=t.selectionMode,o.appliedProjection=t.appliedProjection,o.includeDeleted=t.includeDeleted,o.onlyDeleted=t.onlyDeleted,o.skipDefaultScope=t.skipDefaultScope,o.variantConfig=t.variantConfig,o.enabledVariants=t.enabledVariants!==null?new Set(t.enabledVariants):null,o.variantWhereFilters=[...t.variantWhereFilters],o.variantRelationIncludes=[...t.variantRelationIncludes],a}toQuery(){return O(this).toQuery()}toKnexQuery(){return O(this)}toString(){return O(this).toString()}async execute(){return oe(this)}async first(){let t=await O(this).first();if(t)return A(this,t)}async pluck(n){let t=p(this),a=b(this,n,"pluck");return(await de(this).select(a)).map(r=>r[a]??r[n])}then(n,t){return this.execute().then(n,t)}};De(q);function Re(e,n,t){return new q(e,n,t)}function be(e){function n(t,a){return a?Re(e,t,a):Re(e,t)}return n.withTransaction=t=>be(t),n.transaction=t=>e.transaction(a=>t(be(a))),n}import{readFileSync as $t,renameSync as Ot,writeFileSync as Dt}from"fs";import{resolve as qn}from"path";function Vt(e){let n={};for(let t of e){let a=t.schema,o=C(a);n[o]||(n[o]=V(a));for(let r of _(a)){let i=r.getExtension("tableName");i&&!n[i]&&(n[i]=V(r))}}return{version:1,tables:n}}function Lt(e){try{let n=$t(qn(e),"utf-8"),t=JSON.parse(n);return t.version!==1||t.tables==null||typeof t.tables!="object"?{version:1,tables:{}}:t}catch{return{version:1,tables:{}}}}function At(e,n){let t=qn(e),a=t+".tmp";Dt(a,JSON.stringify(Mt(n),null,2)+`
60
+ `,"utf-8"),Ot(a,t)}function Mt(e){let n={};for(let t of Object.keys(e.tables).sort()){let a=e.tables[t];n[t]={columns:Object.fromEntries(Object.entries(a.columns).sort(([o],[r])=>o.localeCompare(r))),indexes:[...a.indexes].sort((o,r)=>o.name.localeCompare(r.name)),foreignKeys:[...a.foreignKeys].sort((o,r)=>o.constraintName.localeCompare(r.constraintName)),checks:[...a.checks].sort((o,r)=>o.name.localeCompare(r.name))}}return{version:1,tables:n}}export{Wn as COMPOSITE_PRIMARY_KEY_BRAND,rt as EXTRA_TYPE_BRAND,H as Entity,D as MAPPERS,st as METHOD_LITERAL_BRAND,Jn as POLYMORPHIC_TYPE_BRAND,Un as PRIMARY_KEY_BRAND,q as SchemaQueryBuilder,ot as any,xt as applyDiff,nt as array,Xn as boolean,R as buildColumnMap,me as clearRow,be as createQuery,Zn as date,Yn as dbExtension,Hn as ddlExtension,ft as defineEntity,je as diffSchema,Vt as entitiesToSnapshot,V as entitySchemaToTableState,at as func,mt as generateCreatePolymorphicTables,ce as generateCreateTable,le as generateCreateTableSource,gt as generateMigration,Tt as generateMigrationsForContext,K as getColumnName,_ as getPolymorphicVariantSchemas,J as getPrimaryKeyColumns,re as getProjections,it as getRowVersionColumn,C as getTableName,se as getVariants,dt as introspectDatabase,pe as isDiffEmpty,Lt as loadSnapshot,ue as mapObject,ke as mapValue,Gn as number,et as object,Re as query,Nt as rawQuery,Q as resolveColumnRef,ie as resolvePropertyKey,zn as string,St as tableExistsInDb,tt as union,At as writeSnapshot};
2
61
  //# sourceMappingURL=index.js.map