@ez4/pgmigration 0.42.0 → 0.43.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.mjs CHANGED
@@ -1,134 +1,154 @@
1
- var te=Object.defineProperty;var m=(n,p)=>te(n,"name",{value:p,configurable:!0});import{SqlBuilder as V}from"@ez4/pgsql";import{deepEqual as F,deepCompareObject as ne,isAnyObject as L}from"@ez4/utils";
2
- import{isTableMetadata as G}from"@ez4/pgclient/library";import{isAnySchema as J}from"@ez4/schema";var H=m((n,p)=>ne(n,p,{onRename:m((f,y)=>!L(f)||!L(y)?!1:G(f)&&G(y)?re(f.schema,
3
- y.schema):J(f)&&J(y)?oe(f,y):!1,"onRename")}),"getTableRepositoryChanges"),re=m(
4
- (n,p)=>F(Object.keys(n.properties),Object.keys(p.properties)),"canRenameTable"),
5
- oe=m((n,p)=>F(n,p,{depth:1,include:{type:!0,definitions:!0,nullable:!0,format:!0}}),
6
- "canRenameColumn");import{isEnumSchema as W,isScalarSchema as X,SchemaType as $}from"@ez4/schema";import{
7
- isNotNullish as Y}from"@ez4/utils";var q=m((n,p)=>{let[f]=n.select().rawColumn("1").from("pg_constraint").where({conname:n.
8
- rawString(p)}).build();return f},"getCheckConstraintQuery"),K=m((n,p,f)=>{let[y]=n.
9
- select().rawColumn("1").where({NOT:{exists:n.select().from(n.rawValue("informati\
10
- on_schema.columns")).rawColumn("1").where({column_name:n.rawString(f),table_name:n.
11
- rawString(p)})}}).build();return y},"getCheckColumnQuery");import{toSnakeCase as se}from"@ez4/utils";var z=m((n,p)=>`${v(n,p)}_pk`,"getPrimaryKeyName"),D=m((n,p)=>`${v(n,p)}_uk`,"ge\
12
- tUniqueKeyName"),U=m((n,p)=>`${v(n,p)}_sk`,"getSecondaryKeyName"),T=m((n,p)=>`${v(
13
- n,p)}_fk`,"getRelationName"),C=m((n,p)=>`${v(n,p)}_ck`,"getConstraintName"),v=m(
14
- (n,p)=>`${n}_${se(p.replaceAll(":","_"))}`,"getName");var O;(c=>{c.prepareCreate=m((e,t,s)=>{let l=[];for(let r in s){let i=s[r];if(W(
15
- i)||X(i)&&Y(i.definitions?.value)){let a=C(t,r);l.push({check:q(e,a),query:g(e,t,
16
- a,r,i).build()})}}return l},"prepareCreate"),c.prepareUpdate=m((e,t,s,l,r)=>{let i=[];
17
- for(let a in r){let{update:h,create:x,remove:S}=r[a];if(S||h){let b=l.properties[a];
18
- if(o(b)){let R=C(t,a);i.push({query:u(e,t,R).build()})}}if(x||h){let b=s.properties[a];
19
- if(o(b)){let R=C(t,a);i.push({check:q(e,R),query:g(e,t,R,a,b).build()})}}}return i},
20
- "prepareUpdate"),c.prepareRenameTable=m((e,t,s,l)=>{let r=[];for(let i in l){let a=l[i];
21
- if(o(a)){let h=C(t,i),x=C(s,i),S=e.table(s).alter().existing().constraint(h).rename(
22
- x);r.push({check:q(e,x),query:S.build()})}}return r},"prepareRenameTable"),c.prepareRenameColumns=
23
- m((e,t,s,l)=>{let r=[];for(let i in l){let a=l[i],h=s[a];if(o(h)){let x=C(t,i),S=C(
24
- t,a),b=e.table(t).alter().existing().constraint(x).rename(S);r.push({check:q(e,S),
25
- query:b.build()})}}return r},"prepareRenameColumns"),c.prepareDelete=m((e,t,s)=>{
26
- let l=[];for(let r in s){let i=s[r];if(o(i)){let a=C(t,r);l.push({query:u(e,t,a).
27
- build()})}}return l},"prepareDelete");let o=m(e=>W(e)||X(e)&&Y(e.definitions?.value),
28
- "isConstrainedSchema"),u=m((e,t,s)=>e.table(t).alter().existing().constraint(s).
29
- drop().existing(),"getDeleteQuery"),g=m((e,t,s,l,r)=>{let i=e.table(t).alter().existing().
30
- constraint(s);switch(r.type){case $.Enum:{let a=r.options.map(({value:h})=>`${h}`);
31
- i.check({[l]:{isIn:a}});break}case $.Boolean:case $.Number:case $.String:{i.check(
32
- {[l]:{equal:r.definitions?.value}});break}}return i},"getCreateQuery")})(O||={});import{getTableName as ie}from"@ez4/pgclient/library";import{isNullishSchema as ae}from"@ez4/schema";
33
- import{Index as Z}from"@ez4/database";var B;(g=>{g.prepareCreate=m((c,e,t,s)=>{let l=[];for(let r in s){let i=s[r];if(d(
34
- i))continue;let{[i.targetColumn]:a}=t.properties,h=T(e,r),x=!!ae(a);l.push({check:q(
35
- c,h),query:u(c,e,h,i,x).build()})}return l},"prepareCreate"),g.prepareUpdate=m((c,e,t,s)=>{
36
- let l=[];for(let r in t){let i=t[r];if(d(i))continue;let a=s[i.targetColumn]?.update,
37
- h=a?.optional??a?.nullable;if(h===void 0)continue;let x=T(e,r);l.push({query:o(c,
38
- e,x).build()},{query:u(c,e,x,i,h).build()})}return l},"prepareUpdate"),g.prepareRename=
39
- m((c,e,t,s)=>{let l=[];for(let r in s){let i=s[r];if(d(i))continue;let a=T(e,r),
40
- h=T(t,r),x=c.table(t).alter().existing().constraint(a).rename(h);l.push({check:q(
41
- c,h),query:x.build()})}return l},"prepareRename"),g.prepareDelete=m((c,e,t)=>{let s=[];
42
- for(let l in t){let r=t[l];if(d(r))continue;let i=T(e,l);s.push({query:o(c,e,i).
43
- build()})}return s},"prepareDelete");let d=m(c=>{let{sourceIndex:e,targetIndex:t}=c;
44
- return!e||e===Z.Secondary||t===Z.Primary},"isNotRealRelation"),o=m((c,e,t)=>c.table(
45
- e).alter().existing().constraint(t).drop().existing(),"getDeleteQuery"),u=m((c,e,t,s,l)=>{
46
- let{sourceTable:r,sourceColumn:i,targetColumn:a}=s,h=ie(r),x=c.table(e).alter().
47
- existing().constraint(t).foreign(a,h,[i]);return l?x.delete().null():x.delete().
48
- cascade(),x.update().cascade(),x},"getCreateQuery")})(B||={});import{SchemaType as Q}from"@ez4/schema";import{Index as N}from"@ez4/database";var j;(o=>{o.prepareCreate=m((u,g,c,e,t)=>{let s={constraints:[],indexes:[]};for(let l in e){
49
- let{columns:r,type:i}=e[l];switch(i){default:throw new Error("Unsupported index \
50
- type.");case N.Primary:{let a=z(g,l),h=u.table(g).alter().existing().constraint(
51
- a).primary(r);s.constraints.push({check:q(u,a),query:h.build()});break}case N.Unique:{
52
- let a=D(g,l),h=u.table(g).alter().existing().constraint(a).unique(r);s.constraints.
53
- push({check:q(u,a),query:h.build()});break}case N.Secondary:{let a=U(g,l),h=d(r,
54
- c),x=u.index(a).create(g,r).type(h).missing();t&&x.concurrent(),s.indexes.push({
55
- query:x.build()});break}}}return s},"prepareCreate"),o.prepareUpdate=m((u,g,c,e,t,s,l)=>{
56
- let r={constraints:[],indexes:[]};for(let i in s){let{update:a,create:h,remove:x}=s[i];
57
- if(x||a){let S=(0,o.prepareDelete)(u,g,{[i]:e[i]});r.constraints.push(...S.constraints),
58
- r.indexes.push(...S.indexes)}if(h||a){let S=(0,o.prepareCreate)(u,g,c,{[i]:t[i]},
59
- l);r.constraints.push(...S.constraints),r.indexes.push(...S.indexes)}}return r},
60
- "prepareUpdate"),o.prepareRename=m((u,g,c,e)=>{let t={constraints:[],indexes:[]};
61
- for(let s in e){let{type:l}=e[s];switch(l){default:throw new Error("Unsupported \
62
- index type.");case N.Primary:{let r=z(g,s),i=z(c,s),a=u.table(c).alter().existing().
63
- constraint(r).rename(i);t.constraints.push({check:q(u,i),query:a.build()});break}case N.
64
- Unique:{let r=D(g,s),i=D(c,s),a=u.table(c).alter().existing().constraint(r).rename(
65
- i);t.constraints.push({check:q(u,i),query:a.build()});break}case N.Secondary:{let r=U(
66
- g,s),i=U(c,s),a=u.index(r).rename(i).existing();t.indexes.push({query:a.build()});
67
- break}}}return t},"prepareRename"),o.prepareDelete=m((u,g,c)=>{let e={constraints:[],
68
- indexes:[]};for(let t in c){let{type:s}=c[t];switch(s){default:throw new Error("\
69
- Unsupported index type.");case N.Primary:{let l=z(g,t),r=u.table(g).alter().existing().
70
- constraint(l).drop().existing();e.constraints.push({query:r.build()});break}case N.
71
- Unique:{let l=D(g,t),r=u.table(g).alter().existing().constraint(l).drop().existing();
72
- e.constraints.push({query:r.build()});break}case N.Secondary:{let l=U(g,t),r=u.index(
73
- l).drop().existing().concurrent();e.indexes.push({query:r.build()});break}}}return e},
74
- "prepareDelete");let d=m((u,g)=>{if(u.length===1){let[c]=u;switch(g.properties[c]?.
75
- type){case Q.Object:case Q.Union:case Q.Array:case Q.Tuple:return"GIN"}}return"B\
76
- TREE"},"getIndexType")})(j||={});import{Index as ee}from"@ez4/database";import{isArraySchema as ce,isEnumSchema as me,isObjectSchema as pe,isScalarSchema as ue,
77
- isStringSchema as le,isTupleSchema as de,SchemaType as P}from"@ez4/schema";import{
78
- isAnyNumber as ge}from"@ez4/utils";var M=m(n=>!!(n.nullable||n.optional),"isOptionalColumn"),I=m((n,p)=>{if(ue(n)||
79
- pe(n)||ce(n)||de(n)){let{definitions:f}=n;switch(typeof f?.default){case"boolean":case"\
80
- number":return`${f.default}`;case"string":return`'${f.default}'`;case"object":return`\
81
- '${JSON.stringify(f.default)}'`}}if(me(n)){let{definitions:f}=n;if(f?.default)return`\
82
- '${f.default}'`}if(le(n)&&p)switch(n.format){case"date-time":case"date":case"tim\
83
- e":return"now()";case"uuid":return"gen_random_uuid()"}if(M(n))return"null"},"get\
84
- ColumnDefault"),_=m((n,p)=>{switch(n.type){case P.Array:case P.Object:case P.Reference:case P.
85
- Union:case P.Tuple:return"jsonb";case P.Boolean:return"boolean";case P.Enum:return"\
86
- text";case P.Number:return fe(n,p);case P.String:return ye(n)}},"getColumnType"),
87
- fe=m((n,p)=>n.format==="integer"?p?"bigserial":"bigint":"decimal","getColumNumbe\
88
- rType"),ye=m(n=>{switch(n.format){case"uuid":case"time":case"date":return n.format;case"\
89
- date-time":return"timestamptz";default:let p=n.definitions?.maxLength;return ge(
90
- p)?`varchar(${p})`:"text"}},"getColumnTextType");var A;(d=>(d.prepareCreate=m((o,u,g,c)=>{let e=o.table(u).alter().existing();for(let t in c){
91
- let s=c[t],r=g[t]?.type===ee.Primary,i=!M(s),a=_(s,r),h=I(s,r);e.add(t,a,i,h).missing()}
92
- return{query:e.build()}},"prepareCreate"),d.prepareUpdate=m((o,u,g,c,e)=>{let t=[];
93
- for(let s in e){let{create:l,update:r,nested:i,remove:a}=e[s],h=g.properties[s],
94
- S=c[s]?.type===ee.Primary,b=o.table(u).alter().existing().column(s);if(l){let R=l.
95
- definitions?.default,k=l?.nullable;R!==void 0&&b.default(I(h,S)),k!==void 0&&b.optional(
96
- k)}if(r||i){let R=i?.definitions?.update?.default,k=r?.nullable;r?.type!==void 0&&
97
- b.type(_(h,S)),R!==void 0&&b.default(I(h,S)),k!==void 0&&b.optional(k)}if(a){let R=a.
98
- definitions?.default,k=a?.nullable;R!==void 0&&b.default(null),k!==void 0&&b.optional(
99
- k)}b.empty||t.push({check:K(o,u,s),query:b.build()})}return t},"prepareUpdate"),
100
- d.prepareRename=m((o,u,g)=>{let c=[];for(let e in g){let t=g[e],s=o.table(u).alter().
101
- existing().rename(e,t);c.push({check:K(o,u,e),query:s.build()})}return c},"prepa\
102
- reRename"),d.prepareDelete=m((o,u,g)=>{let c=o.table(u).alter().existing();for(let e in g)
103
- c.drop(e).existing();return{query:c.build()}},"prepareDelete")))(A||={});import{Index as he}from"@ez4/database";var E;(y=>(y.prepareCreate=m((d,o,u,g)=>{let c=d.table(o).create().missing();for(let e in u.
104
- properties){let t=u.properties[e],l=g[e]?.type===he.Primary,r=!M(t),i=_(t,l),a=I(
105
- t,l);c.column(e,i,r,a).missing()}return{query:c.build()}},"prepareCreate"),y.prepareRename=
106
- m((d,o,u)=>({query:d.table(o).rename(u).existing().build()}),"prepareRename"),y.
107
- prepareDelete=m((d,o)=>({query:d.table(o).drop().existing().cascade().build()}),
108
- "prepareDelete")))(E||={});var xe=m(n=>{let p=new V,f={tables:[],constraints:[],relations:[],indexes:[]};for(let y in n){
109
- let{name:d,schema:o,indexes:u,relations:g}=n[y];f.tables.push(E.prepareCreate(p,
110
- d,o,u)),f.constraints.push(...O.prepareCreate(p,d,o.properties)),f.relations.push(
111
- ...B.prepareCreate(p,d,o,g)),w(f,j.prepareCreate(p,d,o,u,!1))}return f},"getCrea\
112
- teQueries"),ht=m((n,p)=>{let f=H(n,p),y=new V,d={tables:[],constraints:[],relations:[],
113
- indexes:[]};if(f.create&&w(d,xe(f.create)),f.rename)for(let o in f.rename){let u=f.
114
- rename[o],g=n[u].indexes,c=n[u].relations,e=n[u].schema;d.tables.push(E.prepareRename(
115
- y,o,u)),d.constraints.push(...O.prepareRenameTable(y,o,u,e.properties)),d.relations.
116
- push(...B.prepareRename(y,o,u,c)),w(d,j.prepareRename(y,o,u,g))}if(f.nested)for(let o in f.
117
- nested){let{nested:u}=f.nested[o];if(!u)continue;let{schema:g,relations:c,indexes:e}=u,
118
- t=g?.nested?.properties,s=n[o].relations,l=p[o].indexes,r=n[o].indexes,i=p[o].schema,
119
- a=n[o].schema;t?.create&&(d.tables.push(A.prepareCreate(y,o,r,t.create)),d.constraints.
120
- push(...O.prepareCreate(y,o,t.create))),t?.nested&&(d.tables.push(...A.prepareUpdate(
121
- y,o,a,r,t.nested)),d.constraints.push(...O.prepareUpdate(y,o,a,i,t.nested)),d.relations.
122
- push(...B.prepareUpdate(y,o,s,t.nested))),t?.rename&&(d.tables.push(...A.prepareRename(
123
- y,o,t.rename)),d.constraints.push(...O.prepareRenameColumns(y,o,a.properties,t.rename))),
124
- t?.remove&&(d.tables.push(A.prepareDelete(y,o,t.remove)),d.constraints.push(...O.
125
- prepareDelete(y,o,t.remove))),e?.create&&w(d,j.prepareCreate(y,o,a,e.create,!0)),
126
- e?.nested&&w(d,j.prepareUpdate(y,o,a,l,r,e.nested,!0)),e?.remove&&w(d,j.prepareDelete(
127
- y,o,e.remove)),c?.create&&d.relations.push(...B.prepareCreate(y,o,a,c.create)),c?.
128
- remove&&d.relations.push(...B.prepareDelete(y,o,c.remove))}return f.remove&&w(d,
129
- Se(f.remove)),d},"getUpdateQueries"),Se=m(n=>{let p=new V,f={tables:[],constraints:[],
130
- relations:[],indexes:[]};for(let y in n){let{name:d}=n[y];f.tables.push(E.prepareDelete(
131
- p,d))}return f},"getDeleteQueries"),w=m((n,p)=>{p.indexes&&n.indexes.push(...p.indexes),
132
- p.constraints&&n.constraints.push(...p.constraints),p.relations&&n.relations.push(
133
- ...p.relations),p.tables&&n.tables.push(...p.tables)},"combineQueries");export{xe as getCreateQueries,Se as getDeleteQueries,ht as getUpdateQueries};
1
+ var ce=Object.defineProperty;var i=(e,c)=>ce(e,"name",{value:c,configurable:!0});import{SqlBuilder as W}from"@ez4/pgsql";import{deepEqual as te,deepCompareObject as me,isAnyObject as X,toSnakeCase as Y}from"@ez4/utils";
2
+ import{isTableMetadata as Z}from"@ez4/pgclient/library";import{isAnySchema as ee}from"@ez4/schema";var ne=i((e,c)=>me(e,c,{depth:5,onSimilarName:i((y,h)=>{let g=new Set(Y(y).split(
3
+ "_")),u=new Set(Y(h).split("_"));for(let f of u)if(f.length>1&&g.has(f))return!0;
4
+ return!1},"onSimilarName"),onRename:i((y,h)=>!X(y)||!X(h)?!1:Z(y)&&Z(h)?pe(y.schema,
5
+ h.schema):ee(y)&&ee(h)?ue(y,h):!1,"onRename")}),"getTableRepositoryChanges"),pe=i(
6
+ (e,c)=>te(Object.keys(e.properties),Object.keys(c.properties)),"canRenameTable"),
7
+ ue=i((e,c)=>te(e,c,{depth:1,include:{type:!0,definitions:!0,nullable:!0,format:!0}}),
8
+ "canRenameColumn");import{isEnumSchema as re,isScalarSchema as oe,SchemaType as v}from"@ez4/schema";
9
+ import{isNotNullish as E}from"@ez4/utils";var R=i((e,c)=>{let[y]=e.select().rawColumn("1").from("pg_constraint").where({conname:e.
10
+ rawString(c)}).build();return y},"getCheckConstraintQuery"),F=i((e,c,y)=>{let[h]=e.
11
+ select().rawColumn("1").where({NOT:{exists:e.select().from(e.rawValue("informati\
12
+ on_schema.columns")).rawColumn("1").where({column_name:e.rawString(y),table_name:e.
13
+ rawString(c)})}}).build();return h},"getCheckColumnQuery"),H=i((e,c)=>{let[y]=e.
14
+ select().rawColumn("1").from("pg_constraint").where({convalidated:e.rawValue("tr\
15
+ ue"),conname:e.rawString(c)}).build();return y},"getCheckConstraintValidatedQuer\
16
+ y");import{toSnakeCase as le}from"@ez4/utils";var D=i((e,c)=>`${Q(e,c)}_pk`,"getPrimaryKeyName"),U=i((e,c)=>`${Q(e,c)}_uk`,"ge\
17
+ tUniqueKeyName"),_=i((e,c)=>`${Q(e,c)}_sk`,"getSecondaryKeyName"),A=i((e,c)=>`${Q(
18
+ e,c)}_fk`,"getRelationName"),N=i((e,c)=>`${Q(e,c)}_ck`,"getConstraintName"),Q=i(
19
+ (e,c)=>`${e}_${le(c.replaceAll(":","_"))}`,"getName");var O;(o=>{o.prepareCreate=i((t,m,s)=>{let p={constraints:[],validations:[]};for(let a in s){
20
+ let l=s[a];if(re(l)||oe(l)&&E(l.definitions?.value)){let x=N(m,a);p.constraints.
21
+ push({check:R(t,x),query:d(t,m,x,a,l).build()}),p.validations.push({check:H(t,x),
22
+ query:f(t,m,x).build(),name:x})}}return p},"prepareCreate"),o.prepareUpdate=i((t,m,s,p,a)=>{
23
+ let l={constraints:[],validations:[]};for(let x in a){let{update:S,create:q,remove:C,
24
+ nested:b}=a[x],M=[];if(C||S||b){let L=p.properties[x],J={...C,...S,...b};if(r(L,
25
+ J)){let B=N(m,x);M.push({query:u(t,m,B).build()})}}if(q||S||b){let L=s.properties[x],
26
+ J={...q,...S,...b};if(r(L,J)){let B=N(m,x),ae=M.length;M.push({...!ae&&{check:R(
27
+ t,B)},query:d(t,m,B,x,L).build()}),l.validations.push({check:H(t,B),query:f(t,m,
28
+ B).build(),name:B})}}l.constraints.push(...M)}return l},"prepareUpdate"),o.prepareRenameTable=
29
+ i((t,m,s,p)=>{let a=[];for(let l in p){let x=p[l];if(n(x)){let S=N(m,l),q=N(s,l),
30
+ C=t.table(s).alter().existing().constraint(S).rename(q);a.push({check:R(t,q),query:C.
31
+ build()})}}return a},"prepareRenameTable"),o.prepareRenameColumns=i((t,m,s,p)=>{
32
+ let a=[];for(let l in p){let x=p[l],S=s[x];if(n(S)){let q=N(m,l),C=N(m,x),b=t.table(
33
+ m).alter().existing().constraint(q).rename(C);a.push({check:R(t,C),query:b.build()})}}
34
+ return a},"prepareRenameColumns"),o.prepareDelete=i((t,m,s)=>{let p=[];for(let a in s){
35
+ let l=s[a];if(n(l)){let x=N(m,a);p.push({query:u(t,m,x).build()})}}return p},"pr\
36
+ epareDelete");let u=i((t,m,s)=>t.table(m).alter().existing().constraint(s).drop().
37
+ existing(),"getDeleteQuery"),f=i((t,m,s)=>t.table(m).alter().existing().constraint(
38
+ s).validate(),"getValidationQuery"),d=i((t,m,s,p,a)=>{let l=t.table(m).alter().existing().
39
+ constraint(s);switch(a.type){case v.Enum:{let x=a.options.map(({value:q})=>`${q}`);
40
+ l.check({[p]:{isIn:x}}).validate(!1);break}case v.Boolean:case v.Number:case v.String:{
41
+ l.check({[p]:{equal:a.definitions?.value}}).validate(!1);break}}return l},"getCr\
42
+ eateQuery"),n=i(t=>re(t)||oe(t)&&E(t.definitions?.value),"isConstrainedSchema"),
43
+ r=i((t,m)=>{switch(t.type){case v.Boolean:case v.Number:case v.String:return E(m.
44
+ definitions?.value)||E(m.definitions?.update?.value);case v.Enum:return E(m.options)}
45
+ return!1},"isConstrainedChange")})(O||={});import{getTableName as de}from"@ez4/pgclient/library";import{isNullishSchema as ge}from"@ez4/schema";
46
+ import{Index as se}from"@ez4/database";var j;(d=>{d.prepareCreate=i((n,r,o,t)=>{let m=[];for(let s in t){let p=t[s];if(g(
47
+ p))continue;let{[p.targetColumn]:a}=o.properties,l=A(r,s),x=!!ge(a);m.push({check:R(
48
+ n,l),query:f(n,r,l,p,x).build()})}return m},"prepareCreate"),d.prepareUpdate=i((n,r,o,t)=>{
49
+ let m=[];for(let s in o){let p=o[s];if(g(p))continue;let a=t[p.targetColumn]?.update,
50
+ l=a?.optional??a?.nullable;if(l===void 0)continue;let x=A(r,s);m.push({query:u(n,
51
+ r,x).build()},{query:f(n,r,x,p,l).build()})}return m},"prepareUpdate"),d.prepareRename=
52
+ i((n,r,o,t)=>{let m=[];for(let s in t){let p=t[s];if(g(p))continue;let a=A(r,s),
53
+ l=A(o,s),x=n.table(o).alter().existing().constraint(a).rename(l);m.push({check:R(
54
+ n,l),query:x.build()})}return m},"prepareRename"),d.prepareDelete=i((n,r,o)=>{let t=[];
55
+ for(let m in o){let s=o[m];if(g(s))continue;let p=A(r,m);t.push({query:u(n,r,p).
56
+ build()})}return t},"prepareDelete");let g=i(n=>{let{sourceIndex:r,targetIndex:o}=n;
57
+ return!r||r===se.Secondary||o===se.Primary},"isNotRealRelation"),u=i((n,r,o)=>n.
58
+ table(r).alter().existing().constraint(o).drop().existing(),"getDeleteQuery"),f=i(
59
+ (n,r,o,t,m)=>{let{sourceTable:s,sourceColumn:p,targetColumn:a}=t,l=de(s),x=n.table(
60
+ r).alter().existing().constraint(o),S=x.foreign(a,l,[p]).validate(!1);return m?S.
61
+ delete().null():S.delete().cascade(),S.update().cascade(),x},"getCreateQuery")})(
62
+ j||={});import{SchemaType as G}from"@ez4/schema";import{Index as w}from"@ez4/database";var T;(f=>{f.prepareCreate=i((d,n,r,o)=>{let t={constraints:[],validations:[],indexes:[]};
63
+ for(let m in o){let{columns:s,type:p,name:a}=o[m];switch(p){default:throw new Error(
64
+ "Unsupported index type.");case w.Primary:{let l=D(n,a);t.constraints.push({check:R(
65
+ d,l),query:d.table(n).alter().existing().constraint(l).primary(s).build()});break}case w.
66
+ Unique:{let l=U(n,a),x=u(s,r);t.indexes.push({query:d.index(l).create(n,s).type(
67
+ x).unique().concurrent().missing().build()}),t.validations.push({query:(0,f.getValidationQuery)(
68
+ d,l),name:l});break}case w.Secondary:{let l=_(n,a),x=u(s,r);t.indexes.push({query:d.
69
+ index(l).create(n,s).type(x).concurrent().missing().build()}),t.validations.push(
70
+ {query:(0,f.getValidationQuery)(d,l),name:l});break}}}return t},"prepareCreate"),
71
+ f.prepareUpdate=i((d,n,r,o,t,m)=>{let s={constraints:[],validations:[],indexes:[]};
72
+ for(let p in m){let{update:a,create:l,remove:x}=m[p];if(x||a){let S=(0,f.prepareDelete)(
73
+ d,n,{[p]:o[p]});s.constraints.push(...S.constraints),s.indexes.push(...S.indexes)}
74
+ if(l||a){let S=(0,f.prepareCreate)(d,n,r,{[p]:t[p]});s.constraints.push(...S.constraints),
75
+ s.indexes.push(...S.indexes)}}return s},"prepareUpdate"),f.prepareRename=i((d,n,r,o)=>{
76
+ let t={validations:[],constraints:[],indexes:[]};for(let m in o){let{type:s,name:p}=o[m];
77
+ switch(s){default:throw new Error("Unsupported index type.");case w.Primary:{let a=D(
78
+ n,p),l=D(r,p);t.constraints.push({check:R(d,l),query:d.table(r).alter().existing().
79
+ constraint(a).rename(l).build()});break}case w.Unique:{let a=U(n,p),l=U(r,p);t.indexes.
80
+ push({query:d.index(a).rename(l).existing().build()});break}case w.Secondary:{let a=_(
81
+ n,p),l=_(r,p);t.indexes.push({query:d.index(a).rename(l).existing().build()});break}}}
82
+ return t},"prepareRename"),f.prepareDelete=i((d,n,r)=>{let o={validations:[],constraints:[],
83
+ indexes:[]};for(let t in r){let{type:m,name:s}=r[t];switch(m){default:throw new Error(
84
+ "Unsupported index type.");case w.Primary:{let p=D(n,s),a=d.table(n).alter().existing().
85
+ constraint(p).drop().existing();o.constraints.push({query:a.build()});break}case w.
86
+ Unique:{let p=U(n,s),a=d.index(p).drop().existing().concurrent();o.indexes.push(
87
+ {query:a.build()});break}case w.Secondary:{let p=_(n,s),a=d.index(p).drop().existing().
88
+ concurrent();o.indexes.push({query:a.build()});break}}}return o},"prepareDelete"),
89
+ f.getValidationQuery=i((d,n)=>{let[r]=d.select().rawColumn("1").from("pg_index").
90
+ where({indexrelid:d.rawValue(`${d.rawString(n).build()}::regclass`),indisvalid:d.
91
+ rawValue("false"),indisready:d.rawValue("true")}).build();return r},"getValidati\
92
+ onQuery");let u=i((d,n)=>{if(d.length===1){let[r]=d;switch(n.properties[r]?.type){case G.
93
+ Object:case G.Union:case G.Array:case G.Tuple:return"GIN"}}return"BTREE"},"getIn\
94
+ dexType")})(T||={});import{Index as ie}from"@ez4/database";import{isArraySchema as fe,isEnumSchema as ye,isObjectSchema as he,isScalarSchema as xe,
95
+ isStringSchema as Se,isTupleSchema as qe,SchemaType as k}from"@ez4/schema";import{
96
+ isAnyNumber as be}from"@ez4/utils";var $=i(e=>!!(e.nullable||e.optional),"isOptionalColumn"),I=i((e,c)=>{if(xe(e)||
97
+ he(e)||fe(e)||qe(e)){let{definitions:y}=e;switch(typeof y?.default){case"boolean":case"\
98
+ number":return`${y.default}`;case"string":return`'${y.default}'`;case"object":return`\
99
+ '${JSON.stringify(y.default)}'`}}if(ye(e)){let{definitions:y}=e;if(y?.default)return`\
100
+ '${y.default}'`}if(Se(e)&&c)switch(e.format){case"date-time":case"date":case"tim\
101
+ e":return"now()";case"uuid":return"gen_random_uuid()"}if($(e))return"null"},"get\
102
+ ColumnDefault"),V=i((e,c)=>{switch(e.type){case k.Array:case k.Object:case k.Reference:case k.
103
+ Union:case k.Tuple:return"jsonb";case k.Boolean:return"boolean";case k.Enum:return"\
104
+ text";case k.Number:return Ce(e,c);case k.String:return Re(e)}},"getColumnType"),
105
+ Ce=i((e,c)=>e.format==="integer"?c?"bigserial":"bigint":"decimal","getColumNumbe\
106
+ rType"),Re=i(e=>{switch(e.format){case"uuid":case"time":case"date":return e.format;case"\
107
+ date-time":return"timestamptz";default:let c=e.definitions?.maxLength;return be(
108
+ c)?`varchar(${c})`:"text"}},"getColumnTextType");var z;(g=>(g.prepareCreate=i((u,f,d,n)=>{let r=u.table(f).alter().existing();for(let o in n){
109
+ let t=n[o],s=d[o]?.type===ie.Primary,p=!$(t),a=V(t,s),l=I(t,s);r.add(o,a,p,l).missing()}
110
+ return{query:r.build()}},"prepareCreate"),g.prepareUpdate=i((u,f,d,n,r)=>{let o=[];
111
+ for(let t in r){let{create:m,update:s,nested:p,remove:a}=r[t],l=d.properties[t],
112
+ S=n[t]?.type===ie.Primary,q=u.table(f).alter().existing().column(t);if(m){let C=m.
113
+ definitions?.default,b=m?.nullable;C!==void 0&&q.default(I(l,S)),!S&&b!==void 0&&
114
+ q.optional(b)}if(s||p){let C=p?.definitions?.update?.default,b=s?.nullable;s?.type!==
115
+ void 0&&q.type(V(l,S)),C!==void 0&&q.default(I(l,S)),!S&&b!==void 0&&q.optional(
116
+ b)}if(a){let C=a.definitions?.default,b=a?.nullable;C!==void 0&&q.default(null),
117
+ !S&&b!==void 0&&q.optional(b)}q.empty||o.push({check:F(u,f,t),query:q.build()})}
118
+ return o},"prepareUpdate"),g.prepareRename=i((u,f,d)=>{let n=[];for(let r in d){
119
+ let o=d[r],t=u.table(f).alter().existing().rename(r,o);n.push({check:F(u,f,r),query:t.
120
+ build()})}return n},"prepareRename"),g.prepareDelete=i((u,f,d)=>{let n=u.table(f).
121
+ alter().existing();for(let r in d)n.drop(r).existing();return{query:n.build()}},
122
+ "prepareDelete")))(z||={});import{Index as Pe}from"@ez4/database";var K;(h=>(h.prepareCreate=i((g,u,f,d)=>{let n=g.table(u).create().missing();for(let r in f.
123
+ properties){let o=f.properties[r],m=d[r]?.type===Pe.Primary,s=!$(o),p=V(o,m),a=I(
124
+ o,m);n.column(r,p,s,a).missing()}return{query:n.build()}},"prepareCreate"),h.prepareRename=
125
+ i((g,u,f)=>({query:g.table(u).rename(f).existing().build()}),"prepareRename"),h.
126
+ prepareDelete=i((g,u)=>({query:g.table(u).drop().existing().cascade().build()}),
127
+ "prepareDelete")))(K||={});var Ne=i(e=>{let c=new W,y={tables:[],constraints:[],validations:[],relations:[],
128
+ indexes:[]};for(let h in e){let{name:g,schema:u,indexes:f,relations:d}=e[h];y.tables.
129
+ push(K.prepareCreate(c,g,u,f)),y.relations.push(...j.prepareCreate(c,g,u,d)),P(y,
130
+ O.prepareCreate(c,g,u.properties)),P(y,T.prepareCreate(c,g,u,f))}return y},"getC\
131
+ reateQueries"),Rt=i((e,c)=>{let y=ne(e,c),h=new W,g={tables:[],constraints:[],validations:[],
132
+ relations:[],indexes:[]};if(y.create&&P(g,Ne(y.create)),y.rename)for(let u in y.
133
+ rename){let f=y.rename[u],d=e[f].indexes,n=e[f].relations,r=e[f].schema;g.tables.
134
+ push(K.prepareRename(h,u,f)),g.constraints.push(...O.prepareRenameTable(h,u,f,r.
135
+ properties)),g.relations.push(...j.prepareRename(h,u,f,n)),P(g,T.prepareRename(h,
136
+ u,f,d))}if(y.nested)for(let u in y.nested){let{nested:f}=y.nested[u];if(!f)continue;
137
+ let{schema:d,relations:n,indexes:r}=f,o=d?.nested?.properties,t=e[u].relations,m=c[u].
138
+ indexes,s=e[u].indexes,p=c[u].schema,a=e[u].schema;o?.create&&(g.tables.push(z.prepareCreate(
139
+ h,u,s,o.create)),P(g,O.prepareCreate(h,u,o.create))),o?.nested&&(g.tables.push(...z.
140
+ prepareUpdate(h,u,a,s,o.nested)),P(g,O.prepareUpdate(h,u,a,p,o.nested)),g.relations.
141
+ push(...j.prepareUpdate(h,u,t,o.nested))),o?.rename&&(g.tables.push(...z.prepareRename(
142
+ h,u,o.rename)),g.constraints.push(...O.prepareRenameColumns(h,u,a.properties,o.rename))),
143
+ o?.remove&&(g.tables.push(z.prepareDelete(h,u,o.remove)),g.constraints.push(...O.
144
+ prepareDelete(h,u,o.remove))),r?.create&&P(g,T.prepareCreate(h,u,a,r.create)),r?.
145
+ nested&&P(g,T.prepareUpdate(h,u,a,m,s,r.nested)),r?.remove&&P(g,T.prepareDelete(
146
+ h,u,r.remove)),n?.create&&g.relations.push(...j.prepareCreate(h,u,a,n.create)),n?.
147
+ remove&&g.relations.push(...j.prepareDelete(h,u,n.remove))}return y.remove&&P(g,
148
+ we(y.remove)),g},"getUpdateQueries"),we=i(e=>{let c=new W,y={tables:[],constraints:[],
149
+ validations:[],relations:[],indexes:[]};for(let h in e){let{name:g}=e[h];y.tables.
150
+ push(K.prepareDelete(c,g))}return y},"getDeleteQueries"),P=i((e,c)=>{c.tables&&e.
151
+ tables.push(...c.tables),c.constraints&&e.constraints.push(...c.constraints),c.validations&&
152
+ e.validations.push(...c.validations),c.relations&&e.relations.push(...c.relations),
153
+ c.indexes&&e.indexes.push(...c.indexes)},"combineQueries");export{Ne as getCreateQueries,we as getDeleteQueries,Rt as getUpdateQueries};
134
154
  //# sourceMappingURL=main.mjs.map
@@ -1,18 +1,11 @@
1
1
  import type { AnySchema, ObjectSchema, ObjectSchemaProperties } from '@ez4/schema';
2
2
  import type { ObjectComparison } from '@ez4/utils';
3
3
  import type { SqlBuilder } from '@ez4/pgsql';
4
+ import type { PgMigrationQueries } from '../types/query';
5
+ type ConstraintMigrationQueries = Pick<PgMigrationQueries, 'constraints' | 'validations'>;
4
6
  export declare namespace ConstraintQuery {
5
- const prepareCreate: (builder: SqlBuilder, table: string, columns: Record<string, AnySchema>) => {
6
- check: string;
7
- query: string;
8
- }[];
9
- const prepareUpdate: (builder: SqlBuilder, table: string, targetSchema: ObjectSchema, sourceSchema: ObjectSchema, changes: Record<string, ObjectComparison>) => ({
10
- query: string;
11
- check?: undefined;
12
- } | {
13
- check: string;
14
- query: string;
15
- })[];
7
+ const prepareCreate: (builder: SqlBuilder, table: string, columns: Record<string, AnySchema>) => ConstraintMigrationQueries;
8
+ const prepareUpdate: (builder: SqlBuilder, table: string, targetSchema: ObjectSchema, sourceSchema: ObjectSchema, changes: Record<string, ObjectComparison>) => ConstraintMigrationQueries;
16
9
  const prepareRenameTable: (builder: SqlBuilder, fromTable: string, toTable: string, columns: Record<string, AnySchema>) => {
17
10
  check: string;
18
11
  query: string;
@@ -25,3 +18,4 @@ export declare namespace ConstraintQuery {
25
18
  query: string;
26
19
  }[];
27
20
  }
21
+ export {};
@@ -3,11 +3,12 @@ import type { ObjectComparison } from '@ez4/utils';
3
3
  import type { ObjectSchema } from '@ez4/schema';
4
4
  import type { SqlBuilder } from '@ez4/pgsql';
5
5
  import type { PgMigrationQueries } from '../types/query';
6
- type IndexMigrationQueries = Pick<PgMigrationQueries, 'constraints' | 'indexes'>;
6
+ type IndexMigrationQueries = Pick<PgMigrationQueries, 'constraints' | 'validations' | 'indexes'>;
7
7
  export declare namespace IndexQueries {
8
- const prepareCreate: (builder: SqlBuilder, table: string, schema: ObjectSchema, indexes: PgIndexRepository, concurrent: boolean) => IndexMigrationQueries;
9
- const prepareUpdate: (builder: SqlBuilder, table: string, schema: ObjectSchema, sourceIndexes: PgIndexRepository, targetIndexes: PgIndexRepository, changes: Record<string, ObjectComparison>, concurrent: boolean) => IndexMigrationQueries;
8
+ const prepareCreate: (builder: SqlBuilder, table: string, schema: ObjectSchema, indexes: PgIndexRepository) => IndexMigrationQueries;
9
+ const prepareUpdate: (builder: SqlBuilder, table: string, schema: ObjectSchema, sourceIndexes: PgIndexRepository, targetIndexes: PgIndexRepository, changes: Record<string, ObjectComparison>) => IndexMigrationQueries;
10
10
  const prepareRename: (builder: SqlBuilder, fromTable: string, toTable: string, indexes: PgIndexRepository) => IndexMigrationQueries;
11
11
  const prepareDelete: (builder: SqlBuilder, table: string, indexes: PgIndexRepository) => IndexMigrationQueries;
12
+ const getValidationQuery: (builder: SqlBuilder, name: string) => string;
12
13
  }
13
14
  export {};
@@ -2,9 +2,15 @@ export type PgMigrationStatement = {
2
2
  check?: string;
3
3
  query: string;
4
4
  };
5
+ export type PgValidationStatement = {
6
+ name: string;
7
+ check?: string;
8
+ query: string;
9
+ };
5
10
  export type PgMigrationQueries = {
6
11
  tables: PgMigrationStatement[];
7
12
  constraints: PgMigrationStatement[];
13
+ validations: PgValidationStatement[];
8
14
  relations: PgMigrationStatement[];
9
15
  indexes: PgMigrationStatement[];
10
16
  };
@@ -2,3 +2,4 @@ import type { SqlBuilder } from '@ez4/pgsql';
2
2
  export declare const getCheckDatabaseQuery: (builder: SqlBuilder, database: string) => string;
3
3
  export declare const getCheckConstraintQuery: (builder: SqlBuilder, name: string) => string;
4
4
  export declare const getCheckColumnQuery: (builder: SqlBuilder, table: string, column: string) => string;
5
+ export declare const getCheckConstraintValidatedQuery: (builder: SqlBuilder, name: string) => string;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ez4/pgmigration",
3
3
  "description": "EZ4: A PostgreSQL migration library",
4
- "version": "0.42.0",
4
+ "version": "0.43.1",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -43,10 +43,10 @@
43
43
  "live:publish": "npm run build && npm publish --access public"
44
44
  },
45
45
  "dependencies": {
46
- "@ez4/database": "^0.42.0",
47
- "@ez4/pgsql": "^0.42.0",
48
- "@ez4/pgclient": "^0.42.0",
49
- "@ez4/schema": "^0.42.0",
50
- "@ez4/utils": "^0.42.0"
46
+ "@ez4/database": "^0.43.0",
47
+ "@ez4/pgsql": "^0.43.0",
48
+ "@ez4/pgclient": "^0.43.0",
49
+ "@ez4/schema": "^0.43.0",
50
+ "@ez4/utils": "^0.43.0"
51
51
  }
52
52
  }