@ez4/database 0.6.0 → 0.8.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.
package/dist/library.cjs CHANGED
@@ -1,66 +1,67 @@
1
- "use strict";var C=Object.defineProperty;var ce=Object.getOwnPropertyDescriptor;var ue=Object.getOwnPropertyNames;var be=Object.prototype.hasOwnProperty;var fe=(e,t)=>{for(var r in t)C(e,r,{get:t[r],enumerable:!0})},Te=(e,t,r,a)=>{if(t&&
2
- typeof t=="object"||typeof t=="function")for(let o of ue(t))!be.call(e,o)&&o!==r&&
3
- C(e,o,{get:()=>t[o],enumerable:!(a=ce(t,o))||a.enumerable});return e};var de=e=>Te(C({},"__esModule",{value:!0}),e);var De={};fe(De,{IncompleteHandlerError:()=>A,IncompleteServiceError:()=>x,IncompleteStreamError:()=>j,
4
- IncompleteTableError:()=>g,IncorrectIndexesTypeError:()=>M,IncorrectSchemaTypeError:()=>D,
5
- IncorrectStreamTypeError:()=>P,InvalidIndexReferenceError:()=>I,InvalidIndexTypeError:()=>h,
6
- InvalidIndexesTypeError:()=>S,InvalidSchemaTypeError:()=>v,InvalidStreamTypeError:()=>E,
7
- ServiceType:()=>k,getDatabaseServices:()=>F,getDatabaseTable:()=>q,getTableSchema:()=>N,
8
- isDatabaseService:()=>ye,registerTriggers:()=>ve});module.exports=de(De);var pe=require("@ez4/common/library"),me=require("@ez4/schema/library"),le=require("@ez4/project/library");var c=require("@ez4/common/library"),se=require("@ez4/reflection");var k="@ez4/database",ye=e=>e.type===k;var V=require("@ez4/common/library"),x=class extends V.IncompleteTypeError{constructor(t,r){
1
+ "use strict";var C=Object.defineProperty;var de=Object.getOwnPropertyDescriptor;var be=Object.getOwnPropertyNames;var fe=Object.prototype.hasOwnProperty;var Te=(e,t)=>{for(var r in t)C(e,r,{get:t[r],enumerable:!0})},ue=(e,t,r,a)=>{if(t&&
2
+ typeof t=="object"||typeof t=="function")for(let o of be(t))!fe.call(e,o)&&o!==r&&
3
+ C(e,o,{get:()=>t[o],enumerable:!(a=de(t,o))||a.enumerable});return e};var ye=e=>ue(C({},"__esModule",{value:!0}),e);var Pe={};Te(Pe,{IncompleteHandlerError:()=>k,IncompleteServiceError:()=>x,IncompleteStreamError:()=>P,
4
+ IncompleteTableError:()=>g,IncorrectIndexesTypeError:()=>I,IncorrectSchemaTypeError:()=>D,
5
+ IncorrectStreamTypeError:()=>E,InvalidIndexReferenceError:()=>h,InvalidIndexTypeError:()=>M,
6
+ InvalidIndexesTypeError:()=>S,InvalidSchemaTypeError:()=>v,InvalidStreamTypeError:()=>j,
7
+ ServiceType:()=>A,getDatabaseServices:()=>V,getDatabaseTable:()=>F,getTableSchema:()=>R,
8
+ isDatabaseService:()=>xe,registerTriggers:()=>De});module.exports=ye(Pe);var me=require("@ez4/common/library"),le=require("@ez4/schema/library"),ce=require("@ez4/project/library");var l=require("@ez4/common/library"),se=require("@ez4/reflection");var A="@ez4/database",xe=e=>e.type===A;var U=require("@ez4/common/library"),x=class extends U.IncompleteTypeError{constructor(t,r){
9
9
  super("Incomplete database service",t,r)}};var p=require("@ez4/common/library"),w=require("@ez4/reflection"),z=e=>(0,p.isClassDeclaration)(
10
- e)&&(0,p.hasHeritageType)(e,"Database.Service"),U=e=>(0,p.isModelDeclaration)(e)&&
11
- (0,p.hasHeritageType)(e,"Database.Table"),$=e=>(0,w.isTypeCallback)(e)||(0,w.isTypeFunction)(
12
- e),_=e=>(0,p.hasHeritageType)(e,"Database.Indexes"),B=e=>(0,p.hasHeritageType)(e,
13
- "Database.Schema"),G=e=>(0,p.hasHeritageType)(e,"Database.Stream");var d=require("@ez4/common/library"),y=require("@ez4/reflection");var J=require("@ez4/common/library"),g=class extends J.IncompleteTypeError{constructor(t,r){
14
- super("Incomplete database table",t,r)}};var u=require("@ez4/common/library"),S=class extends u.InvalidTypeError{constructor(t){
15
- super("Invalid table indexes type",void 0,"Database.Indexes",t)}},M=class extends u.IncorrectTypeError{constructor(r,a){
10
+ e)&&(0,p.hasHeritageType)(e,"Database.Service"),_=e=>(0,p.isModelDeclaration)(e)&&
11
+ (0,p.hasHeritageType)(e,"Database.Table"),q=e=>(0,w.isTypeCallback)(e)||(0,w.isTypeFunction)(
12
+ e),B=e=>(0,p.hasHeritageType)(e,"Database.Indexes"),G=e=>(0,p.hasHeritageType)(e,
13
+ "Database.Schema"),J=e=>(0,p.hasHeritageType)(e,"Database.Stream");var u=require("@ez4/common/library"),y=require("@ez4/reflection");var K=require("@ez4/common/library"),g=class extends K.IncompleteTypeError{constructor(t,r){
14
+ super("Incomplete database table",t,r)}};var d=require("@ez4/common/library"),S=class extends d.InvalidTypeError{constructor(t){
15
+ super("Invalid table indexes type",void 0,"Database.Indexes",t)}},I=class extends d.IncorrectTypeError{constructor(r,a){
16
16
  super("Incorrect table indexes type",r,"Database.Indexes",a);this.schemaType=r}},
17
- h=class extends u.TypeError{constructor(r,a){super(`Invalid index type, ${r} mus\
18
- t follow one of the Index options.`,a);this.indexName=r}},I=class extends u.TypeError{constructor(r,a){
19
- super(`Invalid index reference, ${r} must be valid column.`,a);this.indexName=r}};var R=require("@ez4/reflection"),Q=require("@ez4/common/library"),H=require("@ez4/schema/library");var O=require("@ez4/common/library"),v=class extends O.InvalidTypeError{constructor(t){
17
+ M=class extends d.TypeError{constructor(r,a){super(`Invalid index type, ${r} mus\
18
+ t follow one of the Index options.`,a);this.indexName=r}},h=class extends d.TypeError{constructor(r,a){
19
+ super(`Invalid index reference, ${r} must be valid column.`,a);this.indexName=r}};var N=require("@ez4/reflection"),W=require("@ez4/common/library"),H=require("@ez4/schema/library");var O=require("@ez4/common/library"),v=class extends O.InvalidTypeError{constructor(t){
20
20
  super("Invalid table schema type",void 0,"Database.Schema",t)}},D=class extends O.IncorrectTypeError{constructor(r,a){
21
- super("Incorrect table schema type",r,"Database.Schema",a);this.schemaType=r}};var N=(e,t,r,a)=>{if(!(0,R.isTypeReference)(e))return K(e,t,r,a);let o=r[e.path];
22
- return o?K(o,t,r,a):null},K=(e,t,r,a)=>(0,R.isTypeObject)(e)?(0,H.getObjectSchema)(
23
- e,r):(0,Q.isModelDeclaration)(e)?B(e)?(0,H.getObjectSchema)(e,r):(a.push(new D(e.
24
- name,e.file)),null):(a.push(new v(t.file)),null);var l=require("@ez4/common/library"),b=require("@ez4/reflection");var Y=(e,t,r,a)=>{if(!(0,b.isTypeReference)(e))return W(e,t,a);let o=r[e.path];return o?
25
- W(o,t,a):null},W=(e,t,r)=>(0,b.isTypeObject)(e)?X(e,(0,l.getObjectMembers)(e),r):
26
- (0,l.isModelDeclaration)(e)?_(e)?X(e,(0,l.getModelMembers)(e),r):(r.push(new M(e.
27
- name,e.file)),null):(r.push(new S(t.file)),null),X=(e,t,r)=>{let a={};for(let o of t){
28
- if(!(0,b.isModelProperty)(o)||o.inherited)continue;let n=o.name,i=(0,l.getPropertyString)(
29
- o);switch(i){case"primary":case"regular":case"unique":case"ttl":a[n]=i;break;default:
30
- return r.push(new h(n,e.file)),null}}return a};var m=require("@ez4/common/library"),T=require("@ez4/reflection");var f=require("@ez4/common/library"),j=class extends f.IncompleteTypeError{constructor(t,r){
31
- super("Incomplete table stream",t,r)}},E=class extends f.InvalidTypeError{constructor(t){
32
- super("Invalid table stream type",void 0,"Database.Stream",t)}},P=class extends f.IncorrectTypeError{constructor(r,a){
33
- super("Incorrect table stream type",r,"Database.Stream",a);this.streamType=r}};var Z=require("@ez4/common/library"),A=class extends Z.IncompleteTypeError{constructor(t,r){
34
- super("Incomplete stream handler",t,r)}};var L=(e,t,r)=>{if(!$(e))return null;let a={},o=new Set(["name","file","change"]);
21
+ super("Incorrect table schema type",r,"Database.Schema",a);this.schemaType=r}};var R=(e,t,r,a)=>{if(!(0,N.isTypeReference)(e))return Q(e,t,r,a);let o=r[e.path];
22
+ return o?Q(o,t,r,a):null},Q=(e,t,r,a)=>(0,N.isTypeObject)(e)?(0,H.getObjectSchema)(
23
+ e,r):(0,W.isModelDeclaration)(e)?G(e)?(0,H.getObjectSchema)(e,r):(a.push(new D(e.
24
+ name,e.file)),null):(a.push(new v(t.file)),null);var c=require("@ez4/common/library"),b=require("@ez4/reflection");var Z=(e,t,r,a)=>{if(!(0,b.isTypeReference)(e))return X(e,t,a);let o=r[e.path];return o?
25
+ X(o,t,a):null},X=(e,t,r)=>(0,b.isTypeObject)(e)?Y(e,(0,c.getObjectMembers)(e),r):
26
+ (0,c.isModelDeclaration)(e)?B(e)?Y(e,(0,c.getModelMembers)(e),r):(r.push(new I(e.
27
+ name,e.file)),null):(r.push(new S(t.file)),null),Y=(e,t,r)=>{let a={};for(let o of t){
28
+ if(!(0,b.isModelProperty)(o)||o.inherited)continue;let s=o.name,i=(0,c.getPropertyString)(
29
+ o);switch(i){case"primary":case"secondary":case"ttl":a[s]=i;break;default:return r.
30
+ push(new M(s,e.file)),null}}return a};var m=require("@ez4/common/library"),T=require("@ez4/reflection");var f=require("@ez4/common/library"),P=class extends f.IncompleteTypeError{constructor(t,r){
31
+ super("Incomplete table stream",t,r)}},j=class extends f.InvalidTypeError{constructor(t){
32
+ super("Invalid table stream type",void 0,"Database.Stream",t)}},E=class extends f.IncorrectTypeError{constructor(r,a){
33
+ super("Incorrect table stream type",r,"Database.Stream",a);this.streamType=r}};var L=require("@ez4/common/library"),k=class extends L.IncompleteTypeError{constructor(t,r){
34
+ super("Incomplete stream handler",t,r)}};var ee=(e,t,r)=>{if(!q(e))return null;let a={},o=new Set(["name","file","change"]);
35
35
  return e.description&&(a.description=e.description),(a.name=e.name)&&o.delete("n\
36
36
  ame"),(a.file=e.file)&&o.delete("file"),e.parameters&&o.delete("change"),o.size===
37
- 0&&xe(a)?a:(r.push(new A([...o],e.file)),null)},xe=e=>!!e.name&&!!e.file;var te=(e,t,r,a)=>{if(!(0,T.isTypeReference)(e))return ee(e,t,r,a);let o=r[e.path];
38
- return o?ee(o,t,r,a):null},ge=e=>!!e.handler,ee=(e,t,r,a)=>(0,T.isTypeObject)(e)?
39
- re(e,(0,m.getObjectMembers)(e),r,a):(0,m.isModelDeclaration)(e)?G(e)?re(e,(0,m.getModelMembers)(
40
- e),r,a):(a.push(new P(e.name,e.file)),null):(a.push(new E(t.file)),null),re=(e,t,r,a)=>{
41
- let o={},n=new Set(["handler"]);for(let i of t)if(!(!(0,T.isModelProperty)(i)||i.
42
- inherited))switch(i.name){case"handler":o.handler=L(i.value,r,a);break;case"time\
43
- out":case"memory":{let s=(0,m.getPropertyNumber)(i);s!=null&&(o[i.name]=s);break}case"\
44
- variables":o.variables=(0,m.getLinkedVariableList)(i,a);break}return ge(o)?o:(a.
45
- push(new j([...n],e.file)),null)};var q=(e,t,r)=>{if(!(0,y.isTypeReference)(e))return ae(e,t,r);let a=t[e.path];return a?
46
- ae(a,t,r):null},Se=e=>!!e.name&&!!e.schema&&!!e.indexes,ae=(e,t,r)=>U(e)?oe(e,(0,d.getModelMembers)(
47
- e),t,r):(0,y.isTypeObject)(e)?oe(e,(0,d.getObjectMembers)(e),t,r):null,oe=(e,t,r,a)=>{
48
- let o={},n=new Set(["name","schema","indexes"]);for(let s of t)if(!(!(0,y.isModelProperty)(
49
- s)||s.inherited))switch(s.name){case"name":(o.name=(0,d.getPropertyString)(s))&&
50
- n.delete(s.name);break;case"indexes":{(o.indexes=Y(s.value,e,r,a))&&n.delete(s.name);
51
- break}case"schema":{(o.schema=N(s.value,e,r,a))&&n.delete(s.name);break}case"str\
52
- eam":{o.stream=te(s.value,e,r,a);break}}if(!Se(o))return a.push(new g([...n],e.file)),
37
+ 0&&ge(a)?a:(r.push(new k([...o],e.file)),null)},ge=e=>!!e.name&&!!e.file;var ae=(e,t,r,a)=>{if(!(0,T.isTypeReference)(e))return re(e,t,r,a);let o=r[e.path];
38
+ return o?re(o,t,r,a):null},Se=e=>!!e.handler,re=(e,t,r,a)=>(0,T.isTypeObject)(e)?
39
+ te(e,(0,m.getObjectMembers)(e),r,a):(0,m.isModelDeclaration)(e)?J(e)?te(e,(0,m.getModelMembers)(
40
+ e),r,a):(a.push(new E(e.name,e.file)),null):(a.push(new j(t.file)),null),te=(e,t,r,a)=>{
41
+ let o={},s=new Set(["handler"]);for(let i of t)if(!(!(0,T.isModelProperty)(i)||i.
42
+ inherited))switch(i.name){case"handler":o.handler=ee(i.value,r,a);break;case"tim\
43
+ eout":case"memory":{let n=(0,m.getPropertyNumber)(i);n!=null&&(o[i.name]=n);break}case"\
44
+ variables":o.variables=(0,m.getLinkedVariableList)(i,a);break}return Se(o)?o:(a.
45
+ push(new P([...s],e.file)),null)};var F=(e,t,r)=>{if(!(0,y.isTypeReference)(e))return oe(e,t,r);let a=t[e.path];return a?
46
+ oe(a,t,r):null},Ie=e=>!!e.name&&!!e.schema&&!!e.indexes,oe=(e,t,r)=>_(e)?ne(e,(0,u.getModelMembers)(
47
+ e),t,r):(0,y.isTypeObject)(e)?ne(e,(0,u.getObjectMembers)(e),t,r):null,ne=(e,t,r,a)=>{
48
+ let o={},s=new Set(["name","schema","indexes"]);for(let n of t)if(!(!(0,y.isModelProperty)(
49
+ n)||n.inherited))switch(n.name){case"name":(o.name=(0,u.getPropertyString)(n))&&
50
+ s.delete(n.name);break;case"indexes":{(o.indexes=Z(n.value,e,r,a))&&s.delete(n.name);
51
+ break}case"schema":{(o.schema=R(n.value,e,r,a))&&s.delete(n.name);break}case"str\
52
+ eam":{o.stream=ae(n.value,e,r,a);break}}if(!Ie(o))return a.push(new g([...s],e.file)),
53
53
  null;let i=Me(e,o.indexes,o.schema);return i.length?(a.push(...i),null):o},Me=(e,t,r)=>{
54
- let a=r.properties,o=[];for(let n in t)for(let i of n.split(":"))a[i]||o.push(new I(
55
- n,e.file));return o};var F=e=>{let t={},r=[];for(let a in e){let o=e[a];if(!z(o))continue;let n={type:k},
56
- i=new Set(["tables"]);n.name=o.name;for(let s of(0,c.getModelMembers)(o))if(!(!(0,se.isModelProperty)(
57
- s)||s.inherited))switch(s.name){case"tables":(n.tables=Ie(s,e,r))&&i.delete(s.name);
58
- break;case"variables":n.variables=(0,c.getLinkedVariableList)(s,r);break;case"se\
59
- rvices":n.services=(0,c.getLinkedServiceList)(s,e,r);break}if(!he(n)){r.push(new x(
60
- [...i],o.file));continue}t[o.name]=n}return{services:t,errors:r}},he=e=>!!e.name&&
61
- !!e.tables,Ie=(e,t,r)=>{let a=(0,c.getPropertyTuple)(e)??[],o=[];for(let n of a){
62
- let i=q(n,t,r);i&&o.push(i)}return o};var ne=e=>z(e)?e.name:null;var ie=!1,ve=()=>{ie||((0,pe.registerTriggers)(),(0,me.registerTriggers)(),(0,le.createTrigger)(
63
- "@ez4/database",{"metadata:getServices":F,"metadata:getLinkedService":ne}),ie=!0)};0&&(module.exports={IncompleteHandlerError,IncompleteServiceError,IncompleteStreamError,
54
+ let a=r.properties,o=[];for(let s in t)for(let i of s.split(":"))a[i]||o.push(new h(
55
+ s,e.file));return o};var V=e=>{let t={},r=[];for(let a in e){let o=e[a];if(!z(o))continue;let s={type:A},
56
+ i=new Set(["engine","tables"]);s.name=o.name;for(let n of(0,l.getModelMembers)(o))
57
+ if(!(!(0,se.isModelProperty)(n)||n.inherited))switch(n.name){case"engine":{let $=(0,l.getPropertyString)(
58
+ n);$&&(s[n.name]=$,i.delete(n.name));break}case"tables":(s.tables=ve(n,e,r))&&i.
59
+ delete(n.name);break;case"variables":s.variables=(0,l.getLinkedVariableList)(n,r);
60
+ break;case"services":s.services=(0,l.getLinkedServiceList)(n,e,r);break}if(!he(s)){
61
+ r.push(new x([...i],o.file));continue}t[o.name]=s}return{services:t,errors:r}},he=e=>!!e.
62
+ name&&!!e.tables,ve=(e,t,r)=>{let a=(0,l.getPropertyTuple)(e)??[],o=[];for(let s of a){
63
+ let i=F(s,t,r);i&&o.push(i)}return o};var ie=e=>z(e)?e.name:null;var pe=!1,De=()=>{pe||((0,me.registerTriggers)(),(0,le.registerTriggers)(),(0,ce.createTrigger)(
64
+ "@ez4/database",{"metadata:getServices":V,"metadata:getLinkedService":ie}),pe=!0)};0&&(module.exports={IncompleteHandlerError,IncompleteServiceError,IncompleteStreamError,
64
65
  IncompleteTableError,IncorrectIndexesTypeError,IncorrectSchemaTypeError,IncorrectStreamTypeError,
65
66
  InvalidIndexReferenceError,InvalidIndexTypeError,InvalidIndexesTypeError,InvalidSchemaTypeError,
66
67
  InvalidStreamTypeError,ServiceType,getDatabaseServices,getDatabaseTable,getTableSchema,
package/dist/library.mjs CHANGED
@@ -1,62 +1,63 @@
1
- import{registerTriggers as Ve}from"@ez4/common/library";import{registerTriggers as Ue}from"@ez4/schema/library";
2
- import{createTrigger as $e}from"@ez4/project/library";import{getLinkedServiceList as Oe,getLinkedVariableList as Re,getModelMembers as Ce,
3
- getPropertyTuple as He}from"@ez4/common/library";import{isModelProperty as Ne}from"@ez4/reflection";var h="@ez4/database",_e=e=>e.type===h;import{IncompleteTypeError as G}from"@ez4/common/library";var m=class extends G{constructor(t,r){
4
- super("Incomplete database service",t,r)}};import{hasHeritageType as p,isClassDeclaration as J,isModelDeclaration as K}from"@ez4/common/library";
5
- import{isTypeCallback as Q,isTypeFunction as W}from"@ez4/reflection";var l=e=>J(
6
- e)&&p(e,"Database.Service"),I=e=>K(e)&&p(e,"Database.Table"),v=e=>Q(e)||W(e),D=e=>p(
7
- e,"Database.Indexes"),j=e=>p(e,"Database.Schema"),E=e=>p(e,"Database.Stream");import{getModelMembers as De,getObjectMembers as je,getPropertyString as Ee}from"@ez4/common/library";
8
- import{isModelProperty as Pe,isTypeObject as Ae,isTypeReference as ke}from"@ez4/reflection";import{IncompleteTypeError as X}from"@ez4/common/library";var c=class extends X{constructor(t,r){
9
- super("Incomplete database table",t,r)}};import{IncorrectTypeError as Y,InvalidTypeError as Z,TypeError as P}from"@ez4/common/library";
10
- var u=class extends Z{constructor(t){super("Invalid table indexes type",void 0,"\
11
- Database.Indexes",t)}},b=class extends Y{constructor(r,a){super("Incorrect table\
12
- indexes type",r,"Database.Indexes",a);this.schemaType=r}},f=class extends P{constructor(r,a){
1
+ import{registerTriggers as _e}from"@ez4/common/library";import{registerTriggers as qe}from"@ez4/schema/library";
2
+ import{createTrigger as Be}from"@ez4/project/library";import{getLinkedServiceList as Ne,getLinkedVariableList as Ce,getPropertyString as He,
3
+ getPropertyTuple as Re,getModelMembers as Fe}from"@ez4/common/library";import{isModelProperty as Ve}from"@ez4/reflection";var M="@ez4/database",Ge=e=>e.type===M;import{IncompleteTypeError as J}from"@ez4/common/library";var m=class extends J{constructor(t,r){
4
+ super("Incomplete database service",t,r)}};import{hasHeritageType as p,isClassDeclaration as K,isModelDeclaration as Q}from"@ez4/common/library";
5
+ import{isTypeCallback as W,isTypeFunction as X}from"@ez4/reflection";var l=e=>K(
6
+ e)&&p(e,"Database.Service"),v=e=>Q(e)&&p(e,"Database.Table"),D=e=>W(e)||X(e),P=e=>p(
7
+ e,"Database.Indexes"),j=e=>p(e,"Database.Schema"),E=e=>p(e,"Database.Stream");import{getModelMembers as Pe,getObjectMembers as je,getPropertyString as Ee}from"@ez4/common/library";
8
+ import{isModelProperty as ke,isTypeObject as Ae,isTypeReference as we}from"@ez4/reflection";import{IncompleteTypeError as Y}from"@ez4/common/library";var c=class extends Y{constructor(t,r){
9
+ super("Incomplete database table",t,r)}};import{IncorrectTypeError as Z,InvalidTypeError as L,TypeError as k}from"@ez4/common/library";
10
+ var d=class extends L{constructor(t){super("Invalid table indexes type",void 0,"\
11
+ Database.Indexes",t)}},b=class extends Z{constructor(r,a){super("Incorrect table\
12
+ indexes type",r,"Database.Indexes",a);this.schemaType=r}},f=class extends k{constructor(r,a){
13
13
  super(`Invalid index type, ${r} must follow one of the Index options.`,a);this.indexName=
14
- r}},T=class extends P{constructor(r,a){super(`Invalid index reference, ${r} must\
15
- be valid column.`,a);this.indexName=r}};import{isTypeObject as re,isTypeReference as te}from"@ez4/reflection";import{isModelDeclaration as ae}from"@ez4/common/library";
16
- import{getObjectSchema as A}from"@ez4/schema/library";import{IncorrectTypeError as L,InvalidTypeError as ee}from"@ez4/common/library";
17
- var d=class extends ee{constructor(t){super("Invalid table schema type",void 0,"\
18
- Database.Schema",t)}},y=class extends L{constructor(r,a){super("Incorrect table \
19
- schema type",r,"Database.Schema",a);this.schemaType=r}};var w=(e,t,r,a)=>{if(!te(e))return k(e,t,r,a);let o=r[e.path];return o?k(o,t,r,a):
20
- null},k=(e,t,r,a)=>re(e)?A(e,r):ae(e)?j(e)?A(e,r):(a.push(new y(e.name,e.file)),
21
- null):(a.push(new d(t.file)),null);import{isModelDeclaration as oe,getModelMembers as se,getObjectMembers as ne,getPropertyString as ie}from"@ez4/common/library";
22
- import{isModelProperty as pe,isTypeObject as me,isTypeReference as le}from"@ez4/reflection";var R=(e,t,r,a)=>{if(!le(e))return z(e,t,a);let o=r[e.path];return o?z(o,t,a):null},
23
- z=(e,t,r)=>me(e)?O(e,ne(e),r):oe(e)?D(e)?O(e,se(e),r):(r.push(new b(e.name,e.file)),
24
- null):(r.push(new u(t.file)),null),O=(e,t,r)=>{let a={};for(let o of t){if(!pe(o)||
25
- o.inherited)continue;let n=o.name,i=ie(o);switch(i){case"primary":case"regular":case"\
26
- unique":case"ttl":a[n]=i;break;default:return r.push(new f(n,e.file)),null}}return a};import{getLinkedVariableList as de,getModelMembers as ye,getObjectMembers as xe,
27
- getPropertyNumber as ge,isModelDeclaration as Se}from"@ez4/common/library";import{
28
- isModelProperty as Me,isTypeObject as he,isTypeReference as Ie}from"@ez4/reflection";import{IncompleteTypeError as ce,IncorrectTypeError as ue,InvalidTypeError as be}from"@ez4/common/library";
29
- var x=class extends ce{constructor(t,r){super("Incomplete table stream",t,r)}},g=class extends be{constructor(t){
30
- super("Invalid table stream type",void 0,"Database.Stream",t)}},S=class extends ue{constructor(r,a){
31
- super("Incorrect table stream type",r,"Database.Stream",a);this.streamType=r}};import{IncompleteTypeError as fe}from"@ez4/common/library";var M=class extends fe{constructor(t,r){
32
- super("Incomplete stream handler",t,r)}};var C=(e,t,r)=>{if(!v(e))return null;let a={},o=new Set(["name","file","change"]);
14
+ r}},T=class extends k{constructor(r,a){super(`Invalid index reference, ${r} must\
15
+ be valid column.`,a);this.indexName=r}};import{isTypeObject as te,isTypeReference as ae}from"@ez4/reflection";import{isModelDeclaration as oe}from"@ez4/common/library";
16
+ import{getObjectSchema as A}from"@ez4/schema/library";import{IncorrectTypeError as ee,InvalidTypeError as re}from"@ez4/common/library";
17
+ var u=class extends re{constructor(t){super("Invalid table schema type",void 0,"\
18
+ Database.Schema",t)}},y=class extends ee{constructor(r,a){super("Incorrect table\
19
+ schema type",r,"Database.Schema",a);this.schemaType=r}};var z=(e,t,r,a)=>{if(!ae(e))return w(e,t,r,a);let o=r[e.path];return o?w(o,t,r,a):
20
+ null},w=(e,t,r,a)=>te(e)?A(e,r):oe(e)?j(e)?A(e,r):(a.push(new y(e.name,e.file)),
21
+ null):(a.push(new u(t.file)),null);import{isModelDeclaration as ne,getModelMembers as se,getObjectMembers as ie,getPropertyString as pe}from"@ez4/common/library";
22
+ import{isModelProperty as me,isTypeObject as le,isTypeReference as ce}from"@ez4/reflection";var C=(e,t,r,a)=>{if(!ce(e))return O(e,t,a);let o=r[e.path];return o?O(o,t,a):null},
23
+ O=(e,t,r)=>le(e)?N(e,ie(e),r):ne(e)?P(e)?N(e,se(e),r):(r.push(new b(e.name,e.file)),
24
+ null):(r.push(new d(t.file)),null),N=(e,t,r)=>{let a={};for(let o of t){if(!me(o)||
25
+ o.inherited)continue;let s=o.name,i=pe(o);switch(i){case"primary":case"secondary":case"\
26
+ ttl":a[s]=i;break;default:return r.push(new f(s,e.file)),null}}return a};import{getLinkedVariableList as ye,getModelMembers as xe,getObjectMembers as ge,
27
+ getPropertyNumber as Se,isModelDeclaration as Ie}from"@ez4/common/library";import{
28
+ isModelProperty as Me,isTypeObject as he,isTypeReference as ve}from"@ez4/reflection";import{IncompleteTypeError as de,IncorrectTypeError as be,InvalidTypeError as fe}from"@ez4/common/library";
29
+ var x=class extends de{constructor(t,r){super("Incomplete table stream",t,r)}},g=class extends fe{constructor(t){
30
+ super("Invalid table stream type",void 0,"Database.Stream",t)}},S=class extends be{constructor(r,a){
31
+ super("Incorrect table stream type",r,"Database.Stream",a);this.streamType=r}};import{IncompleteTypeError as Te}from"@ez4/common/library";var I=class extends Te{constructor(t,r){
32
+ super("Incomplete stream handler",t,r)}};var H=(e,t,r)=>{if(!D(e))return null;let a={},o=new Set(["name","file","change"]);
33
33
  return e.description&&(a.description=e.description),(a.name=e.name)&&o.delete("n\
34
34
  ame"),(a.file=e.file)&&o.delete("file"),e.parameters&&o.delete("change"),o.size===
35
- 0&&Te(a)?a:(r.push(new M([...o],e.file)),null)},Te=e=>!!e.name&&!!e.file;var q=(e,t,r,a)=>{if(!Ie(e))return H(e,t,r,a);let o=r[e.path];return o?H(o,t,r,a):
36
- null},ve=e=>!!e.handler,H=(e,t,r,a)=>he(e)?N(e,xe(e),r,a):Se(e)?E(e)?N(e,ye(e),r,
37
- a):(a.push(new S(e.name,e.file)),null):(a.push(new g(t.file)),null),N=(e,t,r,a)=>{
38
- let o={},n=new Set(["handler"]);for(let i of t)if(!(!Me(i)||i.inherited))switch(i.
39
- name){case"handler":o.handler=C(i.value,r,a);break;case"timeout":case"memory":{let s=ge(
40
- i);s!=null&&(o[i.name]=s);break}case"variables":o.variables=de(i,a);break}return ve(
41
- o)?o:(a.push(new x([...n],e.file)),null)};var U=(e,t,r)=>{if(!ke(e))return F(e,t,r);let a=t[e.path];return a?F(a,t,r):null},
42
- we=e=>!!e.name&&!!e.schema&&!!e.indexes,F=(e,t,r)=>I(e)?V(e,De(e),t,r):Ae(e)?V(e,
43
- je(e),t,r):null,V=(e,t,r,a)=>{let o={},n=new Set(["name","schema","indexes"]);for(let s of t)
44
- if(!(!Pe(s)||s.inherited))switch(s.name){case"name":(o.name=Ee(s))&&n.delete(s.name);
45
- break;case"indexes":{(o.indexes=R(s.value,e,r,a))&&n.delete(s.name);break}case"s\
46
- chema":{(o.schema=w(s.value,e,r,a))&&n.delete(s.name);break}case"stream":{o.stream=
47
- q(s.value,e,r,a);break}}if(!we(o))return a.push(new c([...n],e.file)),null;let i=ze(
48
- e,o.indexes,o.schema);return i.length?(a.push(...i),null):o},ze=(e,t,r)=>{let a=r.
49
- properties,o=[];for(let n in t)for(let i of n.split(":"))a[i]||o.push(new T(n,e.
50
- file));return o};var $=e=>{let t={},r=[];for(let a in e){let o=e[a];if(!l(o))continue;let n={type:h},
51
- i=new Set(["tables"]);n.name=o.name;for(let s of Ce(o))if(!(!Ne(s)||s.inherited))
52
- switch(s.name){case"tables":(n.tables=Fe(s,e,r))&&i.delete(s.name);break;case"va\
53
- riables":n.variables=Re(s,r);break;case"services":n.services=Oe(s,e,r);break}if(!qe(
54
- n)){r.push(new m([...i],o.file));continue}t[o.name]=n}return{services:t,errors:r}},
55
- qe=e=>!!e.name&&!!e.tables,Fe=(e,t,r)=>{let a=He(e)??[],o=[];for(let n of a){let i=U(
56
- n,t,r);i&&o.push(i)}return o};var _=e=>l(e)?e.name:null;var B=!1,Zr=()=>{B||(Ve(),Ue(),$e("@ez4/database",{"metadata:getServices":$,"met\
57
- adata:getLinkedService":_}),B=!0)};export{M as IncompleteHandlerError,m as IncompleteServiceError,x as IncompleteStreamError,
35
+ 0&&ue(a)?a:(r.push(new I([...o],e.file)),null)},ue=e=>!!e.name&&!!e.file;var V=(e,t,r,a)=>{if(!ve(e))return R(e,t,r,a);let o=r[e.path];return o?R(o,t,r,a):
36
+ null},De=e=>!!e.handler,R=(e,t,r,a)=>he(e)?F(e,ge(e),r,a):Ie(e)?E(e)?F(e,xe(e),r,
37
+ a):(a.push(new S(e.name,e.file)),null):(a.push(new g(t.file)),null),F=(e,t,r,a)=>{
38
+ let o={},s=new Set(["handler"]);for(let i of t)if(!(!Me(i)||i.inherited))switch(i.
39
+ name){case"handler":o.handler=H(i.value,r,a);break;case"timeout":case"memory":{let n=Se(
40
+ i);n!=null&&(o[i.name]=n);break}case"variables":o.variables=ye(i,a);break}return De(
41
+ o)?o:(a.push(new x([...s],e.file)),null)};var _=(e,t,r)=>{if(!we(e))return $(e,t,r);let a=t[e.path];return a?$(a,t,r):null},
42
+ ze=e=>!!e.name&&!!e.schema&&!!e.indexes,$=(e,t,r)=>v(e)?U(e,Pe(e),t,r):Ae(e)?U(e,
43
+ je(e),t,r):null,U=(e,t,r,a)=>{let o={},s=new Set(["name","schema","indexes"]);for(let n of t)
44
+ if(!(!ke(n)||n.inherited))switch(n.name){case"name":(o.name=Ee(n))&&s.delete(n.name);
45
+ break;case"indexes":{(o.indexes=C(n.value,e,r,a))&&s.delete(n.name);break}case"s\
46
+ chema":{(o.schema=z(n.value,e,r,a))&&s.delete(n.name);break}case"stream":{o.stream=
47
+ V(n.value,e,r,a);break}}if(!ze(o))return a.push(new c([...s],e.file)),null;let i=Oe(
48
+ e,o.indexes,o.schema);return i.length?(a.push(...i),null):o},Oe=(e,t,r)=>{let a=r.
49
+ properties,o=[];for(let s in t)for(let i of s.split(":"))a[i]||o.push(new T(s,e.
50
+ file));return o};var q=e=>{let t={},r=[];for(let a in e){let o=e[a];if(!l(o))continue;let s={type:M},
51
+ i=new Set(["engine","tables"]);s.name=o.name;for(let n of Fe(o))if(!(!Ve(n)||n.inherited))
52
+ switch(n.name){case"engine":{let h=He(n);h&&(s[n.name]=h,i.delete(n.name));break}case"\
53
+ tables":(s.tables=Ue(n,e,r))&&i.delete(n.name);break;case"variables":s.variables=
54
+ Ce(n,r);break;case"services":s.services=Ne(n,e,r);break}if(!$e(s)){r.push(new m(
55
+ [...i],o.file));continue}t[o.name]=s}return{services:t,errors:r}},$e=e=>!!e.name&&
56
+ !!e.tables,Ue=(e,t,r)=>{let a=Re(e)??[],o=[];for(let s of a){let i=_(s,t,r);i&&o.
57
+ push(i)}return o};var B=e=>l(e)?e.name:null;var G=!1,et=()=>{G||(_e(),qe(),Be("@ez4/database",{"metadata:getServices":q,"met\
58
+ adata:getLinkedService":B}),G=!0)};export{I as IncompleteHandlerError,m as IncompleteServiceError,x as IncompleteStreamError,
58
59
  c as IncompleteTableError,b as IncorrectIndexesTypeError,y as IncorrectSchemaTypeError,
59
60
  S as IncorrectStreamTypeError,T as InvalidIndexReferenceError,f as InvalidIndexTypeError,
60
- u as InvalidIndexesTypeError,d as InvalidSchemaTypeError,g as InvalidStreamTypeError,
61
- h as ServiceType,$ as getDatabaseServices,U as getDatabaseTable,w as getTableSchema,
62
- _e as isDatabaseService,Zr as registerTriggers};
61
+ d as InvalidIndexesTypeError,u as InvalidSchemaTypeError,g as InvalidStreamTypeError,
62
+ M as ServiceType,q as getDatabaseServices,_ as getDatabaseTable,z as getTableSchema,
63
+ Ge as isDatabaseService,et as registerTriggers};
package/dist/main.cjs CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var s=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var d=(r,t)=>{for(var n in t)s(r,n,{get:t[n],enumerable:!0})},y=(r,t,n,a)=>{if(t&&
2
- typeof t=="object"||typeof t=="function")for(let e of T(t))!x.call(r,e)&&e!==n&&
3
- s(r,e,{get:()=>t[e],enumerable:!(a=i(t,e))||a.enumerable});return r};var c=r=>y(s({},"__esModule",{value:!0}),r);var l={};d(l,{Database:()=>o,Index:()=>m,StreamType:()=>p});module.exports=c(l);var o;(r=>{})(o||={});var m=(e=>(e.Primary="primary",e.Regular="regular",e.Unique="unique",e.TTL="ttl",
4
- e))(m||{});var p=(a=>(a.Insert="insert",a.Update="update",a.Delete="delete",a))(p||{});0&&(module.exports={Database,Index,StreamType});
1
+ "use strict";var s=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var y=(r,t)=>{for(var a in t)s(r,a,{get:t[a],enumerable:!0})},c=(r,t,a,e)=>{if(t&&
2
+ typeof t=="object"||typeof t=="function")for(let n of i(t))!T.call(r,n)&&n!==a&&
3
+ s(r,n,{get:()=>t[n],enumerable:!(e=d(t,n))||e.enumerable});return r};var I=r=>c(s({},"__esModule",{value:!0}),r);var l={};y(l,{Database:()=>x,Index:()=>m,Order:()=>o,StreamType:()=>p});module.exports=
4
+ I(l);var o=(a=>(a.Asc="asc",a.Desc="desc",a))(o||{});var m=(e=>(e.Primary="primary",e.Secondary="secondary",e.TTL="ttl",e))(m||{});var p=(e=>(e.Insert="insert",e.Update="update",e.Delete="delete",e))(p||{});var x;(r=>{})(x||={});0&&(module.exports={Database,Index,Order,StreamType});
package/dist/main.d.ts CHANGED
@@ -1,6 +1,8 @@
1
- export * from './services/query.js';
2
1
  export * from './services/client.js';
3
- export * from './services/database.js';
2
+ export * from './services/transaction.js';
3
+ export * from './services/query.js';
4
+ export * from './services/order.js';
4
5
  export * from './services/indexes.js';
5
6
  export * from './services/schemas.js';
6
7
  export * from './services/streams.js';
8
+ export * from './services/database.js';
package/dist/main.mjs CHANGED
@@ -1,2 +1 @@
1
- var r;(s=>{})(r||={});var a=(e=>(e.Primary="primary",e.Regular="regular",e.Unique="unique",e.TTL="ttl",
2
- e))(a||{});var n=(t=>(t.Insert="insert",t.Update="update",t.Delete="delete",t))(n||{});export{r as Database,a as Index,n as StreamType};
1
+ var r=(t=>(t.Asc="asc",t.Desc="desc",t))(r||{});var a=(e=>(e.Primary="primary",e.Secondary="secondary",e.TTL="ttl",e))(a||{});var n=(e=>(e.Insert="insert",e.Update="update",e.Delete="delete",e))(n||{});var s;(o=>{})(s||={});export{s as Database,a as Index,r as Order,n as StreamType};
@@ -1,6 +1,7 @@
1
- import type { TableIndexes } from './indexes.js';
1
+ import type { Indexes, TableIndexes } from './indexes.js';
2
2
  import type { TableSchemas } from './schemas.js';
3
3
  import type { Database } from './database.js';
4
+ import type { Transaction } from './transaction.js';
4
5
  import type { Query } from './query.js';
5
6
  /**
6
7
  * Database client.
@@ -14,24 +15,30 @@ export type Client<T extends Database.Service<any>> = ClientTables<T> & {
14
15
  * @returns Returns the results for the given query.
15
16
  */
16
17
  rawQuery(query: string, values?: unknown[]): Promise<Record<string, unknown>[]>;
18
+ /**
19
+ * Prepare and execute the given transaction.
20
+ *
21
+ * @param operations Transaction operations.
22
+ */
23
+ transaction<O extends Transaction.WriteOperations<T>>(operations: O): Promise<void>;
17
24
  };
18
25
  /**
19
26
  * Client tables.
20
27
  */
21
28
  export type ClientTables<T extends Database.Service<any>> = {
22
- [P in keyof TableSchemas<T>]: TableSchemas<T>[P] extends Database.Schema ? Table<TableSchemas<T>[P], P extends keyof TableIndexes<T> ? TableIndexes<T>[P] extends string ? TableIndexes<T>[P] : never : never> : never;
29
+ [P in keyof TableSchemas<T>]: TableSchemas<T>[P] extends Database.Schema ? Table<TableSchemas<T>[P], P extends keyof TableIndexes<T> ? TableIndexes<T>[P] extends Indexes ? TableIndexes<T>[P] : {} : {}> : never;
23
30
  };
24
31
  /**
25
32
  * Client table.
26
33
  */
27
- export interface Table<T extends Database.Schema, I extends string | never> {
34
+ export interface Table<T extends Database.Schema, I extends Indexes> {
28
35
  insertOne(query: Query.InsertOneInput<T>): Promise<Query.InsertOneResult>;
29
- updateOne<S extends Query.SelectInput<T>>(query: Query.UpdateOneInput<T, S, I>): Promise<Query.UpdateOneResult<T, S>>;
30
36
  findOne<S extends Query.SelectInput<T>>(query: Query.FindOneInput<T, S, I>): Promise<Query.FindOneResult<T, S>>;
37
+ updateOne<S extends Query.SelectInput<T>>(query: Query.UpdateOneInput<T, S, I>): Promise<Query.UpdateOneResult<T, S>>;
31
38
  upsertOne<S extends Query.SelectInput<T>>(query: Query.UpsertOneInput<T, S, I>): Promise<Query.UpsertOneResult<T, S>>;
32
39
  deleteOne<S extends Query.SelectInput<T>>(query: Query.DeleteOneInput<T, S, I>): Promise<Query.DeleteOneResult<T, S>>;
33
40
  insertMany(query: Query.InsertManyInput<T>): Promise<Query.InsertManyResult>;
41
+ findMany<S extends Query.SelectInput<T>>(query: Query.FindManyInput<T, S, I>): Promise<Query.FindManyResult<T, S>>;
34
42
  updateMany<S extends Query.SelectInput<T>>(query: Query.UpdateManyInput<T, S>): Promise<Query.UpdateManyResult<T, S>>;
35
- findMany<S extends Query.SelectInput<T>>(query: Query.FindManyInput<T, S>): Promise<Query.FindManyResult<T, S>>;
36
43
  deleteMany<S extends Query.SelectInput<T>>(query: Query.DeleteManyInput<T, S>): Promise<Query.DeleteManyResult<T, S>>;
37
44
  }
@@ -69,7 +69,12 @@ export declare namespace Database {
69
69
  */
70
70
  abstract class Service<T extends Schema[] = [Schema]> implements Service.Provider {
71
71
  /**
72
- * All service tables.
72
+ * Determines which database engine to use.
73
+ * Check the provider package to know all the possible values.
74
+ */
75
+ abstract engine: string;
76
+ /**
77
+ * Describe all available tables for the service.
73
78
  */
74
79
  abstract tables: TableTypes<T>[];
75
80
  /**
@@ -6,36 +6,54 @@ import type { Database } from './database.js';
6
6
  */
7
7
  export declare const enum Index {
8
8
  Primary = "primary",
9
- Regular = "regular",
10
- Unique = "unique",
9
+ Secondary = "secondary",
11
10
  TTL = "ttl"
12
11
  }
12
+ /**
13
+ * An object containing only indexes.
14
+ */
15
+ export type Indexes = {
16
+ [name: string]: Index;
17
+ };
13
18
  /**
14
19
  * Given an index name `T`, it produces the decomposed index names.
15
20
  */
16
21
  export type DecomposeIndexName<T> = T extends `${infer L}:${infer R}` ? L | DecomposeIndexName<R> : T;
17
22
  /**
18
- * Given an index object `T`, it produces an index object containing only unique indexes.
23
+ * Given an index object `T`, it produces another object containing only primary indexes.
19
24
  */
20
- export type UniqueIndexes<T> = {
21
- [P in keyof T as T[P] extends Index.Primary | Index.Unique ? P : never]: T[P];
25
+ export type PrimaryIndexes<T> = {
26
+ [P in keyof T as T[P] extends Index.Primary ? P : never]: T[P];
27
+ };
28
+ /**
29
+ * Given an index object `T`, it produces another object containing only secondary indexes.
30
+ */
31
+ export type SecondaryIndexes<T> = {
32
+ [P in keyof T as T[P] extends Index.Secondary ? P : never]: T[P];
22
33
  };
23
34
  /**
24
35
  * Given a database service `T`, it produces an object containing all tables with indexes.
25
36
  */
26
37
  export type TableIndexes<T extends Database.Service<any>> = MergeIndexes<DatabaseTables<T>>;
27
38
  /**
28
- * Given a list of tables with indexes `T`, it produces an object containing all primary
29
- * indexes mapped by table name.
39
+ * Given a list of tables with indexes `T`, it produces another object containing all the
40
+ * table indexes mapped by table name.
30
41
  */
31
42
  type MergeIndexes<T extends Database.Table[]> = IsArrayEmpty<T> extends true ? {} : TableIndex<T[0]> & MergeIndexes<ArrayRest<T>>;
32
43
  /**
33
- * Given a database table `T`, it produces an object containing all the primary index names.
44
+ * Given a database table `T`, it produces another object containing all its index names.
34
45
  */
35
46
  type TableIndex<T> = T extends {
36
47
  name: infer N;
37
48
  indexes: infer I;
38
49
  } ? N extends string ? {
39
- [P in N]: DecomposeIndexName<keyof UniqueIndexes<I>>;
50
+ [P in N]: IndexProperties<Index.Secondary, DecomposeIndexName<keyof SecondaryIndexes<I>>> | IndexProperties<Index.Primary, DecomposeIndexName<keyof PrimaryIndexes<I>>>;
40
51
  } : {} : {};
52
+ /**
53
+ * Given a union of indexes `U`, it produces another object containing the index type `T`
54
+ * for each index within the union.
55
+ */
56
+ type IndexProperties<T extends Index, U extends string> = U extends never ? {} : {
57
+ [P in U]: T;
58
+ };
41
59
  export {};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Query order.
3
+ */
4
+ export declare const enum Order {
5
+ Asc = "asc",
6
+ Desc = "desc"
7
+ }
@@ -1,25 +1,30 @@
1
1
  import type { AnyObject, PartialProperties, PartialObject, DeepPartial } from '@ez4/utils';
2
+ import type { Indexes, PrimaryIndexes } from './indexes.js';
2
3
  import type { Database } from './database.js';
4
+ import type { Order } from './order.js';
5
+ /**
6
+ * Query builder types.
7
+ */
3
8
  export declare namespace Query {
4
9
  type InsertOneInput<T extends Database.Schema> = {
5
10
  data: T;
6
11
  };
7
- type UpdateOneInput<T extends Database.Schema, S extends Database.Schema, I extends string | never> = {
12
+ type UpdateOneInput<T extends Database.Schema, S extends Database.Schema, I extends Indexes> = {
8
13
  select?: S;
9
14
  data: DeepPartial<T>;
10
15
  where: WhereInput<T, I>;
11
16
  };
12
- type FindOneInput<T extends Database.Schema, S extends Database.Schema, I extends string | never> = {
17
+ type FindOneInput<T extends Database.Schema, S extends Database.Schema, I extends Indexes> = {
13
18
  select: S;
14
19
  where: WhereInput<T, I>;
15
20
  };
16
- type UpsertOneInput<T extends Database.Schema, S extends Database.Schema, I extends string | never> = {
21
+ type UpsertOneInput<T extends Database.Schema, S extends Database.Schema, I extends Indexes> = {
17
22
  select?: S;
18
23
  insert: T;
19
24
  update: DeepPartial<T>;
20
25
  where: WhereInput<T, I>;
21
26
  };
22
- type DeleteOneInput<T extends Database.Schema, S extends Database.Schema, I extends string | never> = {
27
+ type DeleteOneInput<T extends Database.Schema, S extends Database.Schema, I extends Indexes> = {
23
28
  select?: S;
24
29
  where: WhereInput<T, I>;
25
30
  };
@@ -32,9 +37,10 @@ export declare namespace Query {
32
37
  where?: WhereInput<T>;
33
38
  limit?: number;
34
39
  };
35
- type FindManyInput<T extends Database.Schema, S extends Database.Schema> = {
40
+ type FindManyInput<T extends Database.Schema, S extends Database.Schema, I extends Indexes> = {
36
41
  select: S;
37
42
  where?: WhereInput<T>;
43
+ order?: OrderInput<I>;
38
44
  cursor?: number | string;
39
45
  limit?: number;
40
46
  };
@@ -57,21 +63,24 @@ export declare namespace Query {
57
63
  type DeleteManyResult<T extends Database.Schema, S extends AnyObject> = Record<T, S>[];
58
64
  type Record<T extends Database.Schema, S extends AnyObject> = PartialObject<T, S, false>;
59
65
  type SelectInput<T extends Database.Schema> = PartialProperties<T>;
60
- type WhereInput<T extends Database.Schema, I extends string | never = never> = WhereFields<T, I> & WhereNot<T, I> & WhereAnd<T, I> & WhereOr<T, I>;
61
- type WhereRequiredFields<T extends Database.Schema, I extends string | never> = {
62
- [P in I]: P extends keyof T ? T[P] extends AnyObject ? WhereFields<T[P], I> : T[P] | WhereOperations<T[P]> : never;
66
+ type OrderInput<I extends Indexes> = {
67
+ [P in keyof I]?: Order;
63
68
  };
64
- type WhereOptionalFields<T extends Database.Schema, I extends string | never> = {
69
+ type WhereInput<T extends Database.Schema, I extends Indexes = never> = WhereFields<T, I> & WhereNot<T, I> & WhereAnd<T, I> & WhereOr<T, I>;
70
+ type WhereRequiredFields<T extends Database.Schema, I extends Indexes> = {
71
+ [P in keyof PrimaryIndexes<I>]: P extends keyof T ? T[P] extends AnyObject ? WhereFields<T[P], I> : T[P] | WhereOperations<T[P]> : never;
72
+ };
73
+ type WhereOptionalFields<T extends Database.Schema, I extends Indexes> = {
65
74
  [P in Exclude<keyof T, I>]?: T[P] extends AnyObject ? WhereFields<T[P], I> : T[P] | WhereOperations<T[P]>;
66
75
  };
67
- type WhereFields<T extends Database.Schema, I extends string | never> = WhereRequiredFields<T, I> & WhereOptionalFields<T, I>;
68
- type WhereNot<T extends Database.Schema, I extends string | never> = {
76
+ type WhereFields<T extends Database.Schema, I extends Indexes> = WhereRequiredFields<T, I> & WhereOptionalFields<T, I>;
77
+ type WhereNot<T extends Database.Schema, I extends Indexes> = {
69
78
  NOT?: WhereInput<T, I> | WhereAnd<T, I> | WhereOr<T, I>;
70
79
  };
71
- type WhereAnd<T extends Database.Schema, I extends string | never> = {
80
+ type WhereAnd<T extends Database.Schema, I extends Indexes> = {
72
81
  AND?: (WhereInput<T, I> | WhereOr<T, I> | WhereNot<T, I>)[];
73
82
  };
74
- type WhereOr<T extends Database.Schema, I extends string | never> = {
83
+ type WhereOr<T extends Database.Schema, I extends Indexes> = {
75
84
  OR?: (WhereInput<T, I> | WhereAnd<T, I> | WhereNot<T, I>)[];
76
85
  };
77
86
  type WhereOperations<T> = WhereNegate<T> | WhereEqual<T> | WhereGreaterThan<T> | WhereGreaterThanOrEqual<T> | WhereLessThan<T> | WhereLessThanOrEqual<T> | WhereIn<T> | WhereBetween<T> | WhereIsMissing | WhereIsNull | WhereStartsWith | WhereContains;
@@ -0,0 +1,27 @@
1
+ import type { Indexes, TableIndexes } from './indexes.js';
2
+ import type { TableSchemas } from './schemas.js';
3
+ import type { Database } from './database.js';
4
+ import type { Query } from './query.js';
5
+ /**
6
+ * Transaction builder types.
7
+ */
8
+ export declare namespace Transaction {
9
+ /**
10
+ * Write operations.
11
+ */
12
+ export type WriteOperations<T extends Database.Service<any>> = {
13
+ [P in keyof TableSchemas<T>]?: TableSchemas<T>[P] extends Database.Schema ? {
14
+ [alias: string]: InsertOperation<TableSchemas<T>[P]> | UpdateOperation<TableSchemas<T>[P], P extends keyof TableIndexes<T> ? TableIndexes<T>[P] extends Indexes ? TableIndexes<T>[P] : never : never> | DeleteOperation<TableSchemas<T>[P], P extends keyof TableIndexes<T> ? TableIndexes<T>[P] extends Indexes ? TableIndexes<T>[P] : never : never>;
15
+ } : never;
16
+ };
17
+ type InsertOperation<T extends Database.Schema> = {
18
+ insert: Query.InsertOneInput<T>;
19
+ };
20
+ type UpdateOperation<T extends Database.Schema, I extends Indexes> = {
21
+ update: Omit<Query.UpdateOneInput<T, Query.SelectInput<T>, I>, 'select'>;
22
+ };
23
+ type DeleteOperation<T extends Database.Schema, I extends Indexes> = {
24
+ delete: Omit<Query.DeleteOneInput<T, Query.SelectInput<T>, I>, 'select'>;
25
+ };
26
+ export {};
27
+ }
@@ -4,6 +4,7 @@ export declare const ServiceType = "@ez4/database";
4
4
  export type DatabaseService = ServiceMetadata & {
5
5
  type: typeof ServiceType;
6
6
  name: string;
7
+ engine: string;
7
8
  tables: DatabaseTable[];
8
9
  };
9
10
  export declare const isDatabaseService: (service: ServiceMetadata) => service is DatabaseService;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ez4/database",
3
3
  "description": "EZ4: Components to build database services",
4
- "version": "0.6.0",
4
+ "version": "0.8.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -42,12 +42,12 @@
42
42
  "live:publish": "npm run test && npm publish --access public"
43
43
  },
44
44
  "peerDependencies": {
45
- "@ez4/project": "^0.6.0"
45
+ "@ez4/project": "^0.8.0"
46
46
  },
47
47
  "dependencies": {
48
- "@ez4/common": "^0.6.0",
49
- "@ez4/reflection": "^0.6.0",
50
- "@ez4/schema": "^0.6.0",
51
- "@ez4/utils": "^0.6.0"
48
+ "@ez4/common": "^0.8.0",
49
+ "@ez4/reflection": "^0.8.0",
50
+ "@ez4/schema": "^0.8.0",
51
+ "@ez4/utils": "^0.8.0"
52
52
  }
53
53
  }