@ez4/database 0.2.1 → 0.3.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/README.md +12 -0
- package/dist/library.cjs +57 -57
- package/dist/library.mjs +48 -48
- package/dist/main.cjs +4 -4
- package/dist/main.d.ts +3 -2
- package/dist/main.mjs +2 -2
- package/dist/services/client.d.ts +19 -105
- package/dist/services/database.d.ts +2 -2
- package/dist/services/helpers.d.ts +1 -19
- package/dist/services/indexes.d.ts +32 -0
- package/dist/services/query.d.ts +115 -0
- package/dist/services/schemas.d.ts +22 -0
- package/dist/services/streams.d.ts +34 -0
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
1
|
# EZ4: Database
|
|
2
2
|
|
|
3
3
|
It uses the power of [reflection](../reflection/) to provide an API which determines how to build and connect database components.
|
|
4
|
+
|
|
5
|
+
## Getting started
|
|
6
|
+
|
|
7
|
+
#### Install
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
npm install @ez4/database -D
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## License
|
|
14
|
+
|
|
15
|
+
MIT License
|
package/dist/library.cjs
CHANGED
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
typeof t=="object"||typeof t=="function")for(let
|
|
3
|
-
|
|
4
|
-
IncompleteTableError:()=>
|
|
5
|
-
InvalidIndexReferenceError:()=>h,InvalidIndexTypeError:()=>M,InvalidIndexesTypeError:()=>
|
|
6
|
-
InvalidSchemaTypeError:()=>v,ServiceType:()=>E,getDatabaseServices:()=>
|
|
7
|
-
getTableSchema:()=>
|
|
8
|
-
fe(ve);var ne=require("@ez4/common/library"),ie=require("@ez4/schema/library"),pe=require("@ez4/project/library");var c=require("@ez4/common/library"),
|
|
9
|
-
super("Incomplete database service",t,r)}};var T=require("@ez4/common/library"),d=require("@ez4/reflection");var
|
|
10
|
-
super("Incomplete database table",t,r)}};var u=require("@ez4/common/library"),
|
|
11
|
-
super("Invalid table indexes type",void 0,"Database.Indexes",t)}},
|
|
12
|
-
super("Incorrect table indexes type",r,"Database.Indexes",
|
|
13
|
-
M=class extends u.TypeError{constructor(r,
|
|
14
|
-
t follow one of the Index options.`,
|
|
15
|
-
super(`Invalid index reference, ${r} must be valid column.`,
|
|
16
|
-
e)&&(0,p.hasHeritageType)(e,"Database.Service"),
|
|
1
|
+
"use strict";var w=Object.defineProperty;var me=Object.getOwnPropertyDescriptor;var le=Object.getOwnPropertyNames;var ce=Object.prototype.hasOwnProperty;var ue=(e,t)=>{for(var r in t)w(e,r,{get:t[r],enumerable:!0})},be=(e,t,r,a)=>{if(t&&
|
|
2
|
+
typeof t=="object"||typeof t=="function")for(let o of le(t))!ce.call(e,o)&&o!==r&&
|
|
3
|
+
w(e,o,{get:()=>t[o],enumerable:!(a=me(t,o))||a.enumerable});return e};var fe=e=>be(w({},"__esModule",{value:!0}),e);var ve={};ue(ve,{IncompleteHandlerError:()=>j,IncompleteServiceError:()=>y,IncompleteStreamError:()=>D,
|
|
4
|
+
IncompleteTableError:()=>x,IncorrectIndexesTypeError:()=>S,IncorrectSchemaTypeError:()=>I,
|
|
5
|
+
InvalidIndexReferenceError:()=>h,InvalidIndexTypeError:()=>M,InvalidIndexesTypeError:()=>g,
|
|
6
|
+
InvalidSchemaTypeError:()=>v,ServiceType:()=>E,getDatabaseServices:()=>H,getDatabaseTable:()=>C,
|
|
7
|
+
getTableSchema:()=>R,isDatabaseService:()=>Te,registerTriggers:()=>he});module.exports=
|
|
8
|
+
fe(ve);var ne=require("@ez4/common/library"),ie=require("@ez4/schema/library"),pe=require("@ez4/project/library");var c=require("@ez4/common/library"),oe=require("@ez4/reflection");var E="@ez4/database",Te=e=>e.type===E;var q=require("@ez4/common/library"),y=class extends q.IncompleteTypeError{constructor(t,r){
|
|
9
|
+
super("Incomplete database service",t,r)}};var T=require("@ez4/common/library"),d=require("@ez4/reflection");var F=require("@ez4/common/library"),x=class extends F.IncompleteTypeError{constructor(t,r){
|
|
10
|
+
super("Incomplete database table",t,r)}};var u=require("@ez4/common/library"),g=class extends u.InvalidTypeError{constructor(t){
|
|
11
|
+
super("Invalid table indexes type",void 0,"Database.Indexes",t)}},S=class extends u.IncorrectTypeError{constructor(r,a){
|
|
12
|
+
super("Incorrect table indexes type",r,"Database.Indexes",a);this.schemaType=r}},
|
|
13
|
+
M=class extends u.TypeError{constructor(r,a){super(`Invalid index type, ${r} mus\
|
|
14
|
+
t follow one of the Index options.`,a);this.indexName=r}},h=class extends u.TypeError{constructor(r,a){
|
|
15
|
+
super(`Invalid index reference, ${r} must be valid column.`,a);this.indexName=r}};var p=require("@ez4/common/library"),A=require("@ez4/reflection"),P=e=>(0,p.isClassDeclaration)(
|
|
16
|
+
e)&&(0,p.hasHeritageType)(e,"Database.Service"),V=e=>(0,p.isModelDeclaration)(e)&&
|
|
17
17
|
(0,p.hasHeritageType)(e,"Database.Table"),U=e=>(0,p.hasHeritageType)(e,"Database\
|
|
18
18
|
.Schema"),$=e=>(0,p.hasHeritageType)(e,"Database.Indexes"),_=e=>(0,p.isModelDeclaration)(
|
|
19
|
-
e)&&(0,p.hasHeritageType)(e,"Database.Stream"),B=e=>(0,
|
|
20
|
-
e);var
|
|
21
|
-
super("Invalid table schema type",void 0,"Database.Schema",t)}},I=class extends
|
|
22
|
-
super("Incorrect table schema type",r,"Database.Schema",
|
|
23
|
-
return
|
|
24
|
-
e,r):(0,J.isModelDeclaration)(e)?U(e)?(0,z.getObjectSchema)(e,r):(
|
|
25
|
-
name,e.file)),null):(
|
|
26
|
-
K(
|
|
27
|
-
(0,m.isModelDeclaration)(e)?$(e)?Q(e,(0,m.getModelMembers)(e),r):(r.push(new
|
|
28
|
-
name,e.file)),null):(r.push(new
|
|
29
|
-
if(!(0,b.isModelProperty)(
|
|
30
|
-
switch(i){case"primary":case"regular":case"unique":case"ttl":
|
|
31
|
-
return r.push(new M(s,e.file)),null}}return
|
|
19
|
+
e)&&(0,p.hasHeritageType)(e,"Database.Stream"),B=e=>(0,A.isTypeCallback)(e)||(0,A.isTypeFunction)(
|
|
20
|
+
e);var O=require("@ez4/reflection"),J=require("@ez4/common/library"),z=require("@ez4/schema/library");var k=require("@ez4/common/library"),v=class extends k.InvalidTypeError{constructor(t){
|
|
21
|
+
super("Invalid table schema type",void 0,"Database.Schema",t)}},I=class extends k.IncorrectTypeError{constructor(r,a){
|
|
22
|
+
super("Incorrect table schema type",r,"Database.Schema",a);this.schemaType=r}};var R=(e,t,r,a)=>{if(!(0,O.isTypeReference)(e))return G(e,t,r,a);let o=r[e.path];
|
|
23
|
+
return o?G(o,t,r,a):null},G=(e,t,r,a)=>(0,O.isTypeObject)(e)?(0,z.getObjectSchema)(
|
|
24
|
+
e,r):(0,J.isModelDeclaration)(e)?U(e)?(0,z.getObjectSchema)(e,r):(a.push(new I(e.
|
|
25
|
+
name,e.file)),null):(a.push(new v(t.file)),null);var m=require("@ez4/common/library"),b=require("@ez4/reflection");var W=(e,t,r,a)=>{if(!(0,b.isTypeReference)(e))return K(e,t,a);let o=r[e.path];return o?
|
|
26
|
+
K(o,t,a):null},K=(e,t,r)=>(0,b.isTypeObject)(e)?Q(e,(0,m.getObjectMembers)(e),r):
|
|
27
|
+
(0,m.isModelDeclaration)(e)?$(e)?Q(e,(0,m.getModelMembers)(e),r):(r.push(new S(e.
|
|
28
|
+
name,e.file)),null):(r.push(new g(t.file)),null),Q=(e,t,r)=>{let a={};for(let o of t){
|
|
29
|
+
if(!(0,b.isModelProperty)(o))continue;let s=o.name,i=(0,m.getPropertyString)(o);
|
|
30
|
+
switch(i){case"primary":case"regular":case"unique":case"ttl":a[s]=i;break;default:
|
|
31
|
+
return r.push(new M(s,e.file)),null}}return a};var l=require("@ez4/common/library"),f=require("@ez4/reflection");var X=require("@ez4/common/library"),D=class extends X.IncompleteTypeError{constructor(t,r){
|
|
32
32
|
super("Incomplete table stream",t,r)}};var Y=require("@ez4/common/library"),j=class extends Y.IncompleteTypeError{constructor(t,r){
|
|
33
|
-
super("Incomplete stream handler",t,r)}};var Z=(e,t,r)=>{if(!B(e))return null;let
|
|
34
|
-
return e.description&&(
|
|
35
|
-
ame"),(
|
|
36
|
-
0&&de(
|
|
37
|
-
L(
|
|
38
|
-
r):(0,f.isTypeObject)(e)?ee(e,(0,l.getObjectMembers)(e),t,r):null,ee=(e,t,r,
|
|
39
|
-
let
|
|
40
|
-
name){case"timeout":case"memory":{let n=(0,l.getPropertyNumber)(i);n!=null&&(
|
|
41
|
-
name]=n);break}case"handler":
|
|
42
|
-
(0,l.getLinkedVariables)(i,
|
|
43
|
-
null)};var
|
|
44
|
-
te(
|
|
45
|
-
e),t,r):(0,d.isTypeObject)(e)?
|
|
46
|
-
let
|
|
47
|
-
n))switch(n.name){case"name":(
|
|
48
|
-
break;case"schema":{(
|
|
49
|
-
exes":{(
|
|
50
|
-
re(n.value,r,
|
|
51
|
-
e,
|
|
52
|
-
properties,
|
|
53
|
-
file));return
|
|
54
|
-
i=new Set(["tables"]);s.name=
|
|
33
|
+
super("Incomplete stream handler",t,r)}};var Z=(e,t,r)=>{if(!B(e))return null;let a={},o=new Set(["name","file","change"]);
|
|
34
|
+
return e.description&&(a.description=e.description),(a.name=e.name)&&o.delete("n\
|
|
35
|
+
ame"),(a.file=e.file)&&o.delete("file"),e.parameters&&o.delete("change"),o.size===
|
|
36
|
+
0&&de(a)?a:(r.push(new j([...o],e.file)),null)},de=e=>!!e.name&&!!e.file;var re=(e,t,r)=>{if(!(0,f.isTypeReference)(e))return L(e,t,r);let a=t[e.path];return a?
|
|
37
|
+
L(a,t,r):null},ye=e=>!!e.handler,L=(e,t,r)=>_(e)?ee(e,(0,l.getModelMembers)(e),t,
|
|
38
|
+
r):(0,f.isTypeObject)(e)?ee(e,(0,l.getObjectMembers)(e),t,r):null,ee=(e,t,r,a)=>{
|
|
39
|
+
let o={},s=new Set(["handler"]);for(let i of t)if((0,f.isModelProperty)(i))switch(i.
|
|
40
|
+
name){case"timeout":case"memory":{let n=(0,l.getPropertyNumber)(i);n!=null&&(o[i.
|
|
41
|
+
name]=n);break}case"handler":o.handler=Z(i.value,r,a);break;case"variables":o.variables=
|
|
42
|
+
(0,l.getLinkedVariables)(i,a);break}return ye(o)?o:(a.push(new D([...s],e.file)),
|
|
43
|
+
null)};var C=(e,t,r)=>{if(!(0,d.isTypeReference)(e))return te(e,t,r);let a=t[e.path];return a?
|
|
44
|
+
te(a,t,r):null},xe=e=>!!e.name&&!!e.schema&&!!e.indexes,te=(e,t,r)=>V(e)?ae(e,(0,T.getModelMembers)(
|
|
45
|
+
e),t,r):(0,d.isTypeObject)(e)?ae(e,(0,T.getObjectMembers)(e),t,r):null,ae=(e,t,r,a)=>{
|
|
46
|
+
let o={},s=new Set(["name","schema","indexes"]);for(let n of t)if((0,d.isModelProperty)(
|
|
47
|
+
n))switch(n.name){case"name":(o.name=(0,T.getPropertyString)(n))&&s.delete(n.name);
|
|
48
|
+
break;case"schema":{(o.schema=R(n.value,e,r,a))&&s.delete(n.name);break}case"ind\
|
|
49
|
+
exes":{(o.indexes=W(n.value,e,r,a))&&s.delete(n.name);break}case"stream":{o.stream=
|
|
50
|
+
re(n.value,r,a);break}}if(!xe(o))return a.push(new x([...s],e.file)),null;let i=ge(
|
|
51
|
+
e,o.indexes,o.schema);return i.length?(a.push(...i),null):o},ge=(e,t,r)=>{let a=r.
|
|
52
|
+
properties,o=[];for(let s in t)for(let i of s.split(":"))a[i]||o.push(new h(s,e.
|
|
53
|
+
file));return o};var H=e=>{let t={},r=[];for(let a in e){let o=e[a];if(!P(o))continue;let s={type:E},
|
|
54
|
+
i=new Set(["tables"]);s.name=o.name;for(let n of(0,c.getModelMembers)(o))if((0,oe.isModelProperty)(
|
|
55
55
|
n))switch(n.name){case"tables":(s.tables=Me(n,e,r))&&i.delete(n.name);break;case"\
|
|
56
56
|
variables":s.variables=(0,c.getLinkedVariables)(n,r);break;case"services":s.services=
|
|
57
|
-
(0,c.getLinkedServices)(n,e,r);break}if(!
|
|
58
|
-
t[
|
|
59
|
-
let
|
|
60
|
-
i)}return
|
|
61
|
-
"@ez4/database",{"metadata:getServices":
|
|
62
|
-
|
|
57
|
+
(0,c.getLinkedServices)(n,e,r);break}if(!Se(s)){r.push(new y([...i],o.file));continue}
|
|
58
|
+
t[o.name]=s}return{services:t,errors:r}},Se=e=>!!e.name&&!!e.tables,Me=(e,t,r)=>{
|
|
59
|
+
let a=(0,c.getPropertyTuple)(e)??[],o=[];for(let s of a){let i=C(s,t,r);i&&o.push(
|
|
60
|
+
i)}return o};var se=e=>P(e)?e.name:null;var N=!1,he=()=>(N||((0,ne.registerTriggers)(),(0,ie.registerTriggers)(),(0,pe.createTrigger)(
|
|
61
|
+
"@ez4/database",{"metadata:getServices":H,"metadata:getLinkedService":se}),N=!0),
|
|
62
|
+
N);0&&(module.exports={IncompleteHandlerError,IncompleteServiceError,IncompleteStreamError,
|
|
63
63
|
IncompleteTableError,IncorrectIndexesTypeError,IncorrectSchemaTypeError,InvalidIndexReferenceError,
|
|
64
64
|
InvalidIndexTypeError,InvalidIndexesTypeError,InvalidSchemaTypeError,ServiceType,
|
|
65
65
|
getDatabaseServices,getDatabaseTable,getTableSchema,isDatabaseService,registerTriggers});
|
package/dist/library.mjs
CHANGED
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
import{registerTriggers as
|
|
2
|
-
import{createTrigger as
|
|
3
|
-
import{isModelProperty as
|
|
4
|
-
super("Incomplete database service",t,r)}};import{getModelMembers as
|
|
1
|
+
import{registerTriggers as Ce}from"@ez4/common/library";import{registerTriggers as He}from"@ez4/schema/library";
|
|
2
|
+
import{createTrigger as Ne}from"@ez4/project/library";import{getLinkedServices as Ae,getLinkedVariables as Pe,getModelMembers as ke,getPropertyTuple as Oe}from"@ez4/common/library";
|
|
3
|
+
import{isModelProperty as we}from"@ez4/reflection";var S="@ez4/database",qe=e=>e.type===S;import{IncompleteTypeError as B}from"@ez4/common/library";var m=class extends B{constructor(t,r){
|
|
4
|
+
super("Incomplete database service",t,r)}};import{getModelMembers as Se,getObjectMembers as Me,getPropertyString as he}from"@ez4/common/library";
|
|
5
5
|
import{isModelProperty as ve,isTypeObject as Ie,isTypeReference as De}from"@ez4/reflection";import{IncompleteTypeError as G}from"@ez4/common/library";var l=class extends G{constructor(t,r){
|
|
6
6
|
super("Incomplete database table",t,r)}};import{IncorrectTypeError as J,InvalidTypeError as K,TypeError as h}from"@ez4/common/library";
|
|
7
7
|
var c=class extends K{constructor(t){super("Invalid table indexes type",void 0,"\
|
|
8
|
-
Database.Indexes",t)}},u=class extends J{constructor(r,
|
|
9
|
-
indexes type",r,"Database.Indexes",
|
|
10
|
-
super(`Invalid index type, ${r} must follow one of the Index options.`,
|
|
11
|
-
r}},f=class extends h{constructor(r,
|
|
12
|
-
be valid column.`,
|
|
8
|
+
Database.Indexes",t)}},u=class extends J{constructor(r,a){super("Incorrect table\
|
|
9
|
+
indexes type",r,"Database.Indexes",a);this.schemaType=r}},b=class extends h{constructor(r,a){
|
|
10
|
+
super(`Invalid index type, ${r} must follow one of the Index options.`,a);this.indexName=
|
|
11
|
+
r}},f=class extends h{constructor(r,a){super(`Invalid index reference, ${r} must\
|
|
12
|
+
be valid column.`,a);this.indexName=r}};import{hasHeritageType as p,isClassDeclaration as Q,isModelDeclaration as v}from"@ez4/common/library";
|
|
13
13
|
import{isTypeCallback as W,isTypeFunction as X}from"@ez4/reflection";var T=e=>Q(
|
|
14
14
|
e)&&p(e,"Database.Service"),I=e=>v(e)&&p(e,"Database.Table"),D=e=>p(e,"Database.\
|
|
15
|
-
Schema"),j=e=>p(e,"Database.Indexes"),E=e=>v(e)&&p(e,"Database.Stream"),
|
|
15
|
+
Schema"),j=e=>p(e,"Database.Indexes"),E=e=>v(e)&&p(e,"Database.Stream"),A=e=>W(e)||
|
|
16
16
|
X(e);import{isTypeObject as L,isTypeReference as ee}from"@ez4/reflection";import{isModelDeclaration as re}from"@ez4/common/library";
|
|
17
|
-
import{getObjectSchema as
|
|
18
|
-
super("Invalid table schema type",void 0,"Database.Schema",t)}},y=class extends Y{constructor(r,
|
|
19
|
-
super("Incorrect table schema type",r,"Database.Schema",
|
|
20
|
-
null},
|
|
21
|
-
(
|
|
22
|
-
import{isModelProperty as ne,isTypeObject as ie,isTypeReference as pe}from"@ez4/reflection";var
|
|
23
|
-
|
|
24
|
-
null):(r.push(new c(t.file)),null),z=(e,t,r)=>{let
|
|
25
|
-
continue;let s=
|
|
26
|
-
ttl":
|
|
27
|
-
import{isModelProperty as de,isTypeObject as ye,isTypeReference as
|
|
28
|
-
super("Incomplete table stream",t,r)}};import{IncompleteTypeError as le}from"@ez4/common/library";var
|
|
29
|
-
super("Incomplete stream handler",t,r)}};var
|
|
30
|
-
return e.description&&(
|
|
31
|
-
ame"),(
|
|
32
|
-
0&&ce(
|
|
33
|
-
|
|
34
|
-
let
|
|
35
|
-
out":case"memory":{let n=Te(i);n!=null&&(
|
|
36
|
-
|
|
37
|
-
push(new
|
|
38
|
-
je=e=>!!e.name&&!!e.schema&&!!e.indexes,
|
|
39
|
-
Me(e),t,r):null,
|
|
40
|
-
if(ve(n))switch(n.name){case"name":(
|
|
41
|
-
chema":{(
|
|
42
|
-
|
|
43
|
-
break}}if(!je(
|
|
44
|
-
schema);return i.length?(
|
|
45
|
-
for(let s in t)for(let i of s.split(":"))
|
|
46
|
-
i=new Set(["tables"]);s.name=
|
|
47
|
-
tables":(s.tables=
|
|
48
|
-
|
|
49
|
-
[...i],
|
|
50
|
-
!!e.tables,
|
|
51
|
-
push(i)}return
|
|
52
|
-
adata:getLinkedService":_}),M=!0),M);export{
|
|
17
|
+
import{getObjectSchema as P}from"@ez4/schema/library";import{IncorrectTypeError as Y,InvalidTypeError as Z}from"@ez4/common/library";var d=class extends Z{constructor(t){
|
|
18
|
+
super("Invalid table schema type",void 0,"Database.Schema",t)}},y=class extends Y{constructor(r,a){
|
|
19
|
+
super("Incorrect table schema type",r,"Database.Schema",a);this.schemaType=r}};var O=(e,t,r,a)=>{if(!ee(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)=>L(e)?P(e,r):re(e)?D(e)?P(e,r):(a.push(new y(e.name,e.file)),null):
|
|
21
|
+
(a.push(new d(t.file)),null);import{isModelDeclaration as te,getModelMembers as ae,getObjectMembers as oe,getPropertyString as se}from"@ez4/common/library";
|
|
22
|
+
import{isModelProperty as ne,isTypeObject as ie,isTypeReference as pe}from"@ez4/reflection";var R=(e,t,r,a)=>{if(!pe(e))return w(e,t,a);let o=r[e.path];return o?w(o,t,a):null},
|
|
23
|
+
w=(e,t,r)=>ie(e)?z(e,oe(e),r):te(e)?j(e)?z(e,ae(e),r):(r.push(new u(e.name,e.file)),
|
|
24
|
+
null):(r.push(new c(t.file)),null),z=(e,t,r)=>{let a={};for(let o of t){if(!ne(o))
|
|
25
|
+
continue;let s=o.name,i=se(o);switch(i){case"primary":case"regular":case"unique":case"\
|
|
26
|
+
ttl":a[s]=i;break;default:return r.push(new b(s,e.file)),null}}return a};import{getLinkedVariables as ue,getModelMembers as be,getObjectMembers as fe,getPropertyNumber as Te}from"@ez4/common/library";
|
|
27
|
+
import{isModelProperty as de,isTypeObject as ye,isTypeReference as xe}from"@ez4/reflection";import{IncompleteTypeError as me}from"@ez4/common/library";var x=class extends me{constructor(t,r){
|
|
28
|
+
super("Incomplete table stream",t,r)}};import{IncompleteTypeError as le}from"@ez4/common/library";var g=class extends le{constructor(t,r){
|
|
29
|
+
super("Incomplete stream handler",t,r)}};var C=(e,t,r)=>{if(!A(e))return null;let a={},o=new Set(["name","file","change"]);
|
|
30
|
+
return e.description&&(a.description=e.description),(a.name=e.name)&&o.delete("n\
|
|
31
|
+
ame"),(a.file=e.file)&&o.delete("file"),e.parameters&&o.delete("change"),o.size===
|
|
32
|
+
0&&ce(a)?a:(r.push(new g([...o],e.file)),null)},ce=e=>!!e.name&&!!e.file;var q=(e,t,r)=>{if(!xe(e))return H(e,t,r);let a=t[e.path];return a?H(a,t,r):null},
|
|
33
|
+
ge=e=>!!e.handler,H=(e,t,r)=>E(e)?N(e,be(e),t,r):ye(e)?N(e,fe(e),t,r):null,N=(e,t,r,a)=>{
|
|
34
|
+
let o={},s=new Set(["handler"]);for(let i of t)if(de(i))switch(i.name){case"time\
|
|
35
|
+
out":case"memory":{let n=Te(i);n!=null&&(o[i.name]=n);break}case"handler":o.handler=
|
|
36
|
+
C(i.value,r,a);break;case"variables":o.variables=ue(i,a);break}return ge(o)?o:(a.
|
|
37
|
+
push(new x([...s],e.file)),null)};var U=(e,t,r)=>{if(!De(e))return F(e,t,r);let a=t[e.path];return a?F(a,t,r):null},
|
|
38
|
+
je=e=>!!e.name&&!!e.schema&&!!e.indexes,F=(e,t,r)=>I(e)?V(e,Se(e),t,r):Ie(e)?V(e,
|
|
39
|
+
Me(e),t,r):null,V=(e,t,r,a)=>{let o={},s=new Set(["name","schema","indexes"]);for(let n of t)
|
|
40
|
+
if(ve(n))switch(n.name){case"name":(o.name=he(n))&&s.delete(n.name);break;case"s\
|
|
41
|
+
chema":{(o.schema=O(n.value,e,r,a))&&s.delete(n.name);break}case"indexes":{(o.indexes=
|
|
42
|
+
R(n.value,e,r,a))&&s.delete(n.name);break}case"stream":{o.stream=q(n.value,r,a);
|
|
43
|
+
break}}if(!je(o))return a.push(new l([...s],e.file)),null;let i=Ee(e,o.indexes,o.
|
|
44
|
+
schema);return i.length?(a.push(...i),null):o},Ee=(e,t,r)=>{let a=r.properties,o=[];
|
|
45
|
+
for(let s in t)for(let i of s.split(":"))a[i]||o.push(new f(s,e.file));return o};var $=e=>{let t={},r=[];for(let a in e){let o=e[a];if(!T(o))continue;let s={type:S},
|
|
46
|
+
i=new Set(["tables"]);s.name=o.name;for(let n of ke(o))if(we(n))switch(n.name){case"\
|
|
47
|
+
tables":(s.tables=Re(n,e,r))&&i.delete(n.name);break;case"variables":s.variables=
|
|
48
|
+
Pe(n,r);break;case"services":s.services=Ae(n,e,r);break}if(!ze(s)){r.push(new m(
|
|
49
|
+
[...i],o.file));continue}t[o.name]=s}return{services:t,errors:r}},ze=e=>!!e.name&&
|
|
50
|
+
!!e.tables,Re=(e,t,r)=>{let a=Oe(e)??[],o=[];for(let s of a){let i=U(s,t,r);i&&o.
|
|
51
|
+
push(i)}return o};var _=e=>T(e)?e.name:null;var M=!1,Kr=()=>(M||(Ce(),He(),Ne("@ez4/database",{"metadata:getServices":$,"met\
|
|
52
|
+
adata:getLinkedService":_}),M=!0),M);export{g as IncompleteHandlerError,m as IncompleteServiceError,x as IncompleteStreamError,
|
|
53
53
|
l as IncompleteTableError,u as IncorrectIndexesTypeError,y as IncorrectSchemaTypeError,
|
|
54
54
|
f as InvalidIndexReferenceError,b as InvalidIndexTypeError,c as InvalidIndexesTypeError,
|
|
55
|
-
d as InvalidSchemaTypeError,
|
|
56
|
-
|
|
55
|
+
d as InvalidSchemaTypeError,S as ServiceType,$ as getDatabaseServices,U as getDatabaseTable,
|
|
56
|
+
O as getTableSchema,qe as isDatabaseService,Kr as registerTriggers};
|
package/dist/main.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
typeof t=="object"||typeof t=="function")for(let e of
|
|
3
|
-
|
|
4
|
-
e))(
|
|
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});
|
package/dist/main.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
export * from './services/query.js';
|
|
1
2
|
export * from './services/client.js';
|
|
2
|
-
export * from './services/helpers.js';
|
|
3
3
|
export * from './services/database.js';
|
|
4
4
|
export * from './services/indexes.js';
|
|
5
|
-
export * from './services/
|
|
5
|
+
export * from './services/schemas.js';
|
|
6
|
+
export * from './services/streams.js';
|
package/dist/main.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var r;(
|
|
2
|
-
e))(a||{});var
|
|
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,6 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { TableSchemas } from './
|
|
1
|
+
import type { TableIndexes } from './indexes.js';
|
|
2
|
+
import type { TableSchemas } from './schemas.js';
|
|
3
3
|
import type { Database } from './database.js';
|
|
4
|
+
import type { Query } from './query.js';
|
|
4
5
|
/**
|
|
5
6
|
* Database client.
|
|
6
7
|
*/
|
|
@@ -14,110 +15,23 @@ export type Client<T extends Database.Service<any>> = ClientTables<T> & {
|
|
|
14
15
|
*/
|
|
15
16
|
rawQuery(query: string, values?: unknown[]): Promise<Record<string, unknown>[]>;
|
|
16
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* Client tables.
|
|
20
|
+
*/
|
|
17
21
|
export type ClientTables<T extends Database.Service<any>> = {
|
|
18
|
-
[P in keyof TableSchemas<T>]: TableSchemas<T>[P] extends Database.Schema ? Table<TableSchemas<T>[P]> : never;
|
|
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;
|
|
19
23
|
};
|
|
20
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Client table.
|
|
26
|
+
*/
|
|
27
|
+
export interface Table<T extends Database.Schema, I extends string | never> {
|
|
21
28
|
insertOne(query: Query.InsertOneInput<T>): Promise<Query.InsertOneResult>;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
data: T;
|
|
31
|
-
};
|
|
32
|
-
type FindOneInput<T extends Database.Schema, S extends Database.Schema> = {
|
|
33
|
-
select: S;
|
|
34
|
-
where: WhereInput<T>;
|
|
35
|
-
};
|
|
36
|
-
type UpsertOneInput<T extends Database.Schema, S extends Database.Schema> = {
|
|
37
|
-
select?: S;
|
|
38
|
-
insert: T;
|
|
39
|
-
update: DeepPartial<T>;
|
|
40
|
-
where: WhereInput<T>;
|
|
41
|
-
};
|
|
42
|
-
type UpdateManyInput<T extends Database.Schema, S extends Database.Schema> = {
|
|
43
|
-
select?: S;
|
|
44
|
-
data: DeepPartial<T>;
|
|
45
|
-
where?: WhereInput<T>;
|
|
46
|
-
cursor?: number | string;
|
|
47
|
-
limit?: number;
|
|
48
|
-
};
|
|
49
|
-
type FindManyInput<T extends Database.Schema, S extends Database.Schema> = {
|
|
50
|
-
select: S;
|
|
51
|
-
where?: WhereInput<T>;
|
|
52
|
-
cursor?: number | string;
|
|
53
|
-
limit?: number;
|
|
54
|
-
};
|
|
55
|
-
type DeleteManyInput<T extends Database.Schema, S extends Database.Schema> = {
|
|
56
|
-
select?: S;
|
|
57
|
-
where?: WhereInput<T>;
|
|
58
|
-
cursor?: number | string;
|
|
59
|
-
limit?: number;
|
|
60
|
-
};
|
|
61
|
-
type InsertOneResult = void;
|
|
62
|
-
type FindOneResult<T extends Database.Schema, S extends AnyObject> = Record<T, S> | undefined;
|
|
63
|
-
type UpsertOneResult<T extends Database.Schema, S extends AnyObject> = FindOneResult<T, S> | undefined;
|
|
64
|
-
type UpdateManyResult<T extends Database.Schema, S extends AnyObject> = Record<T, S>[];
|
|
65
|
-
type FindManyResult<T extends Database.Schema, S extends AnyObject> = {
|
|
66
|
-
records: Record<T, S>[];
|
|
67
|
-
cursor?: number | string;
|
|
68
|
-
};
|
|
69
|
-
type DeleteManyResult<T extends Database.Schema, S extends AnyObject> = Record<T, S>[];
|
|
70
|
-
type Record<T extends Database.Schema, S extends AnyObject> = PartialObject<T, S, false>;
|
|
71
|
-
type SelectInput<T extends Database.Schema> = PartialProperties<T>;
|
|
72
|
-
type WhereInput<T extends Database.Schema> = WhereFields<T> & WhereNot<T> & WhereAnd<T> & WhereOr<T>;
|
|
73
|
-
type WhereFields<T extends Database.Schema> = {
|
|
74
|
-
[P in keyof T]?: T[P] extends AnyObject ? WhereFields<T[P]> : T[P] | WhereOperations<T[P]>;
|
|
75
|
-
};
|
|
76
|
-
type WhereNot<T extends Database.Schema> = {
|
|
77
|
-
NOT?: WhereInput<T> | WhereAnd<T> | WhereOr<T>;
|
|
78
|
-
};
|
|
79
|
-
type WhereAnd<T extends Database.Schema> = {
|
|
80
|
-
AND?: (WhereInput<T> | WhereOr<T> | WhereNot<T>)[];
|
|
81
|
-
};
|
|
82
|
-
type WhereOr<T extends Database.Schema> = {
|
|
83
|
-
OR?: (WhereInput<T> | WhereAnd<T> | WhereNot<T>)[];
|
|
84
|
-
};
|
|
85
|
-
type WhereOperations<T> = WhereNegate<T> | WhereEqual<T> | WhereGreaterThan<T> | WhereGreaterThanOrEqual<T> | WhereLessThan<T> | WhereLessThanOrEqual<T> | WhereIn<T> | WhereBetween<T> | WhereIsMissing | WhereIsNull | WhereStartsWith | WhereContains;
|
|
86
|
-
type WhereOperators = keyof (WhereNegate<any> & WhereEqual<any> & WhereGreaterThan<any> & WhereGreaterThanOrEqual<any> & WhereLessThan<any> & WhereLessThanOrEqual<any> & WhereIn<any> & WhereBetween<any> & WhereIsMissing & WhereIsNull & WhereStartsWith & WhereContains);
|
|
87
|
-
type WhereNegate<T> = {
|
|
88
|
-
not: T | WhereOperations<T>;
|
|
89
|
-
};
|
|
90
|
-
type WhereEqual<T> = {
|
|
91
|
-
equal: T;
|
|
92
|
-
};
|
|
93
|
-
type WhereGreaterThan<T> = {
|
|
94
|
-
gt: T;
|
|
95
|
-
};
|
|
96
|
-
type WhereGreaterThanOrEqual<T> = {
|
|
97
|
-
gte: T;
|
|
98
|
-
};
|
|
99
|
-
type WhereLessThan<T> = {
|
|
100
|
-
lt: T;
|
|
101
|
-
};
|
|
102
|
-
type WhereLessThanOrEqual<T> = {
|
|
103
|
-
lte: T;
|
|
104
|
-
};
|
|
105
|
-
type WhereIn<T> = {
|
|
106
|
-
isIn: T[];
|
|
107
|
-
};
|
|
108
|
-
type WhereBetween<T> = {
|
|
109
|
-
isBetween: [T, T];
|
|
110
|
-
};
|
|
111
|
-
type WhereIsMissing = {
|
|
112
|
-
isMissing: boolean;
|
|
113
|
-
};
|
|
114
|
-
type WhereIsNull = {
|
|
115
|
-
isNull: boolean;
|
|
116
|
-
};
|
|
117
|
-
type WhereStartsWith = {
|
|
118
|
-
startsWith: string;
|
|
119
|
-
};
|
|
120
|
-
type WhereContains = {
|
|
121
|
-
contains: string;
|
|
122
|
-
};
|
|
29
|
+
updateOne<S extends Query.SelectInput<T>>(query: Query.UpdateOneInput<T, S, I>): Promise<Query.UpdateOneResult<T, S>>;
|
|
30
|
+
findOne<S extends Query.SelectInput<T>>(query: Query.FindOneInput<T, S, I>): Promise<Query.FindOneResult<T, S>>;
|
|
31
|
+
upsertOne<S extends Query.SelectInput<T>>(query: Query.UpsertOneInput<T, S, I>): Promise<Query.UpsertOneResult<T, S>>;
|
|
32
|
+
deleteOne<S extends Query.SelectInput<T>>(query: Query.DeleteOneInput<T, S, I>): Promise<Query.DeleteOneResult<T, S>>;
|
|
33
|
+
insertMany(query: Query.InsertManyInput<T>): Promise<Query.InsertManyResult>;
|
|
34
|
+
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
|
+
deleteMany<S extends Query.SelectInput<T>>(query: Query.DeleteManyInput<T, S>): Promise<Query.DeleteManyResult<T, S>>;
|
|
123
37
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Service } from '@ez4/common';
|
|
2
2
|
import type { LinkedVariables } from '@ez4/project/library';
|
|
3
|
+
import type { StreamChange } from './streams.js';
|
|
3
4
|
import type { TableTypes } from './helpers.js';
|
|
4
|
-
import type { StreamChange } from './stream.js';
|
|
5
|
-
import type { Index } from './indexes.js';
|
|
6
5
|
import type { Client } from './client.js';
|
|
6
|
+
import type { Index } from './indexes.js';
|
|
7
7
|
/**
|
|
8
8
|
* Provide all contracts for a self-managed database service.
|
|
9
9
|
*/
|
|
@@ -4,27 +4,9 @@ import type { Database } from './database.js';
|
|
|
4
4
|
* Given an array of schemas `T`, it returns an union of `Database.Table` for each schema.
|
|
5
5
|
*/
|
|
6
6
|
export type TableTypes<T extends Database.Schema[]> = IsAny<T> extends true ? any : IsArrayEmpty<T> extends true ? Database.Table<Database.Schema> : Database.Table<T[0]> | TableTypes<ArrayRest<T>>;
|
|
7
|
-
/**
|
|
8
|
-
* Given a database service `T`, it returns a map containing all its tables and schemas.
|
|
9
|
-
*/
|
|
10
|
-
export type TableSchemas<T extends Database.Service<any>> = MergeTables<ServiceTables<T>>;
|
|
11
7
|
/**
|
|
12
8
|
* Given a database service `T`, it returns all its table types.
|
|
13
9
|
*/
|
|
14
|
-
type
|
|
10
|
+
export type DatabaseTables<T> = T extends {
|
|
15
11
|
tables: infer U;
|
|
16
12
|
} ? U : [];
|
|
17
|
-
/**
|
|
18
|
-
* Given a list of database tables `T`, it returns an object containing all table names and schemas.
|
|
19
|
-
*/
|
|
20
|
-
type MergeTables<T extends Database.Table[]> = IsArrayEmpty<T> extends true ? {} : TableRecord<T[0]> & MergeTables<ArrayRest<T>>;
|
|
21
|
-
/**
|
|
22
|
-
* Given a database table `T`, it returns a table record containing its `name` and `schema`.
|
|
23
|
-
*/
|
|
24
|
-
type TableRecord<T> = T extends {
|
|
25
|
-
name: infer N;
|
|
26
|
-
schema: infer S;
|
|
27
|
-
} ? N extends string ? {
|
|
28
|
-
[P in N]: S;
|
|
29
|
-
} : {} : {};
|
|
30
|
-
export {};
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import type { ArrayRest, IsArrayEmpty } from '@ez4/utils';
|
|
2
|
+
import type { DatabaseTables } from './helpers.js';
|
|
3
|
+
import type { Database } from './database.js';
|
|
1
4
|
/**
|
|
2
5
|
* All supported index types.
|
|
3
6
|
*/
|
|
@@ -7,3 +10,32 @@ export declare const enum Index {
|
|
|
7
10
|
Unique = "unique",
|
|
8
11
|
TTL = "ttl"
|
|
9
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Given an index name `T`, it produces the decomposed index names.
|
|
15
|
+
*/
|
|
16
|
+
export type DecomposeIndexName<T> = T extends `${infer L}:${infer R}` ? L | DecomposeIndexName<R> : T;
|
|
17
|
+
/**
|
|
18
|
+
* Given an index object `T`, it produces an index object containing only unique indexes.
|
|
19
|
+
*/
|
|
20
|
+
export type UniqueIndexes<T> = {
|
|
21
|
+
[P in keyof T as T[P] extends Index.Primary | Index.Unique ? P : never]: T[P];
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Given a database service `T`, it produces an object containing all tables with indexes.
|
|
25
|
+
*/
|
|
26
|
+
export type TableIndexes<T extends Database.Service<any>> = MergeIndexes<DatabaseTables<T>>;
|
|
27
|
+
/**
|
|
28
|
+
* Given a list of tables with indexes `T`, it produces an object containing all primary
|
|
29
|
+
* indexes mapped by table name.
|
|
30
|
+
*/
|
|
31
|
+
type MergeIndexes<T extends Database.Table[]> = IsArrayEmpty<T> extends true ? {} : TableIndex<T[0]> & MergeIndexes<ArrayRest<T>>;
|
|
32
|
+
/**
|
|
33
|
+
* Given a database table `T`, it produces an object containing all the primary index names.
|
|
34
|
+
*/
|
|
35
|
+
type TableIndex<T> = T extends {
|
|
36
|
+
name: infer N;
|
|
37
|
+
indexes: infer I;
|
|
38
|
+
} ? N extends string ? {
|
|
39
|
+
[P in N]: DecomposeIndexName<keyof UniqueIndexes<I>>;
|
|
40
|
+
} : {} : {};
|
|
41
|
+
export {};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import type { AnyObject, PartialProperties, PartialObject, DeepPartial } from '@ez4/utils';
|
|
2
|
+
import type { Database } from './database.js';
|
|
3
|
+
export declare namespace Query {
|
|
4
|
+
type InsertOneInput<T extends Database.Schema> = {
|
|
5
|
+
data: T;
|
|
6
|
+
};
|
|
7
|
+
type UpdateOneInput<T extends Database.Schema, S extends Database.Schema, I extends string | never> = {
|
|
8
|
+
select?: S;
|
|
9
|
+
data: DeepPartial<T>;
|
|
10
|
+
where: WhereInput<T, I>;
|
|
11
|
+
};
|
|
12
|
+
type FindOneInput<T extends Database.Schema, S extends Database.Schema, I extends string | never> = {
|
|
13
|
+
select: S;
|
|
14
|
+
where: WhereInput<T, I>;
|
|
15
|
+
};
|
|
16
|
+
type UpsertOneInput<T extends Database.Schema, S extends Database.Schema, I extends string | never> = {
|
|
17
|
+
select?: S;
|
|
18
|
+
insert: T;
|
|
19
|
+
update: DeepPartial<T>;
|
|
20
|
+
where: WhereInput<T, I>;
|
|
21
|
+
};
|
|
22
|
+
type DeleteOneInput<T extends Database.Schema, S extends Database.Schema, I extends string | never> = {
|
|
23
|
+
select?: S;
|
|
24
|
+
where: WhereInput<T, I>;
|
|
25
|
+
};
|
|
26
|
+
type InsertManyInput<T extends Database.Schema> = {
|
|
27
|
+
data: T[];
|
|
28
|
+
};
|
|
29
|
+
type UpdateManyInput<T extends Database.Schema, S extends Database.Schema> = {
|
|
30
|
+
select?: S;
|
|
31
|
+
data: DeepPartial<T>;
|
|
32
|
+
where?: WhereInput<T>;
|
|
33
|
+
limit?: number;
|
|
34
|
+
};
|
|
35
|
+
type FindManyInput<T extends Database.Schema, S extends Database.Schema> = {
|
|
36
|
+
select: S;
|
|
37
|
+
where?: WhereInput<T>;
|
|
38
|
+
cursor?: number | string;
|
|
39
|
+
limit?: number;
|
|
40
|
+
};
|
|
41
|
+
type DeleteManyInput<T extends Database.Schema, S extends Database.Schema> = {
|
|
42
|
+
select?: S;
|
|
43
|
+
where?: WhereInput<T>;
|
|
44
|
+
limit?: number;
|
|
45
|
+
};
|
|
46
|
+
type InsertOneResult = void;
|
|
47
|
+
type UpdateOneResult<T extends Database.Schema, S extends AnyObject> = FindOneResult<T, S> | undefined;
|
|
48
|
+
type FindOneResult<T extends Database.Schema, S extends AnyObject> = Record<T, S> | undefined;
|
|
49
|
+
type UpsertOneResult<T extends Database.Schema, S extends AnyObject> = FindOneResult<T, S> | undefined;
|
|
50
|
+
type DeleteOneResult<T extends Database.Schema, S extends AnyObject> = FindOneResult<T, S> | undefined;
|
|
51
|
+
type InsertManyResult = void;
|
|
52
|
+
type UpdateManyResult<T extends Database.Schema, S extends AnyObject> = Record<T, S>[];
|
|
53
|
+
type FindManyResult<T extends Database.Schema, S extends AnyObject> = {
|
|
54
|
+
records: Record<T, S>[];
|
|
55
|
+
cursor?: number | string;
|
|
56
|
+
};
|
|
57
|
+
type DeleteManyResult<T extends Database.Schema, S extends AnyObject> = Record<T, S>[];
|
|
58
|
+
type Record<T extends Database.Schema, S extends AnyObject> = PartialObject<T, S, false>;
|
|
59
|
+
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;
|
|
63
|
+
};
|
|
64
|
+
type WhereOptionalFields<T extends Database.Schema, I extends string | never> = {
|
|
65
|
+
[P in Exclude<keyof T, I>]?: T[P] extends AnyObject ? WhereFields<T[P], I> : T[P] | WhereOperations<T[P]>;
|
|
66
|
+
};
|
|
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> = {
|
|
69
|
+
NOT?: WhereInput<T, I> | WhereAnd<T, I> | WhereOr<T, I>;
|
|
70
|
+
};
|
|
71
|
+
type WhereAnd<T extends Database.Schema, I extends string | never> = {
|
|
72
|
+
AND?: (WhereInput<T, I> | WhereOr<T, I> | WhereNot<T, I>)[];
|
|
73
|
+
};
|
|
74
|
+
type WhereOr<T extends Database.Schema, I extends string | never> = {
|
|
75
|
+
OR?: (WhereInput<T, I> | WhereAnd<T, I> | WhereNot<T, I>)[];
|
|
76
|
+
};
|
|
77
|
+
type WhereOperations<T> = WhereNegate<T> | WhereEqual<T> | WhereGreaterThan<T> | WhereGreaterThanOrEqual<T> | WhereLessThan<T> | WhereLessThanOrEqual<T> | WhereIn<T> | WhereBetween<T> | WhereIsMissing | WhereIsNull | WhereStartsWith | WhereContains;
|
|
78
|
+
type WhereOperators = keyof (WhereNegate<any> & WhereEqual<any> & WhereGreaterThan<any> & WhereGreaterThanOrEqual<any> & WhereLessThan<any> & WhereLessThanOrEqual<any> & WhereIn<any> & WhereBetween<any> & WhereIsMissing & WhereIsNull & WhereStartsWith & WhereContains);
|
|
79
|
+
type WhereNegate<T> = {
|
|
80
|
+
not: T | WhereOperations<T>;
|
|
81
|
+
};
|
|
82
|
+
type WhereEqual<T> = {
|
|
83
|
+
equal: T;
|
|
84
|
+
};
|
|
85
|
+
type WhereGreaterThan<T> = {
|
|
86
|
+
gt: T;
|
|
87
|
+
};
|
|
88
|
+
type WhereGreaterThanOrEqual<T> = {
|
|
89
|
+
gte: T;
|
|
90
|
+
};
|
|
91
|
+
type WhereLessThan<T> = {
|
|
92
|
+
lt: T;
|
|
93
|
+
};
|
|
94
|
+
type WhereLessThanOrEqual<T> = {
|
|
95
|
+
lte: T;
|
|
96
|
+
};
|
|
97
|
+
type WhereIn<T> = {
|
|
98
|
+
isIn: T[];
|
|
99
|
+
};
|
|
100
|
+
type WhereBetween<T> = {
|
|
101
|
+
isBetween: [T, T];
|
|
102
|
+
};
|
|
103
|
+
type WhereIsMissing = {
|
|
104
|
+
isMissing: boolean;
|
|
105
|
+
};
|
|
106
|
+
type WhereIsNull = {
|
|
107
|
+
isNull: boolean;
|
|
108
|
+
};
|
|
109
|
+
type WhereStartsWith = {
|
|
110
|
+
startsWith: string;
|
|
111
|
+
};
|
|
112
|
+
type WhereContains = {
|
|
113
|
+
contains: string;
|
|
114
|
+
};
|
|
115
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ArrayRest, IsArrayEmpty } from '@ez4/utils';
|
|
2
|
+
import type { DatabaseTables } from './helpers.js';
|
|
3
|
+
import type { Database } from './database.js';
|
|
4
|
+
/**
|
|
5
|
+
* Given a database service `T`, it produces an object containing all tables with schemas.
|
|
6
|
+
*/
|
|
7
|
+
export type TableSchemas<T extends Database.Service<any>> = MergeTables<DatabaseTables<T>>;
|
|
8
|
+
/**
|
|
9
|
+
* Given a list of tables with schema `T`, it produces an object containing all schemas
|
|
10
|
+
* mapped by table name.
|
|
11
|
+
*/
|
|
12
|
+
type MergeTables<T extends Database.Table[]> = IsArrayEmpty<T> extends true ? {} : TableSchema<T[0]> & MergeTables<ArrayRest<T>>;
|
|
13
|
+
/**
|
|
14
|
+
* Given a database table `T`, it produces an object containing the `schema`.
|
|
15
|
+
*/
|
|
16
|
+
type TableSchema<T> = T extends {
|
|
17
|
+
name: infer N;
|
|
18
|
+
schema: infer S;
|
|
19
|
+
} ? N extends string ? {
|
|
20
|
+
[P in N]: S;
|
|
21
|
+
} : {} : {};
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream change for `insert`, `update` or `delete` operations.
|
|
3
|
+
*/
|
|
4
|
+
export type StreamChange<T> = StreamInsertChange<T> | StreamUpdateChange<T> | StreamDeleteChange<T>;
|
|
5
|
+
/**
|
|
6
|
+
* Stream change for an `insert` operation.
|
|
7
|
+
*/
|
|
8
|
+
export type StreamInsertChange<T> = {
|
|
9
|
+
type: StreamType.Insert;
|
|
10
|
+
record: T;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Stream change for an `update` operation.
|
|
14
|
+
*/
|
|
15
|
+
export type StreamUpdateChange<T> = {
|
|
16
|
+
type: StreamType.Update;
|
|
17
|
+
oldRecord: T;
|
|
18
|
+
newRecord: T;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Stream change for an `delete` operation.
|
|
22
|
+
*/
|
|
23
|
+
export type StreamDeleteChange<T> = {
|
|
24
|
+
type: StreamType.Delete;
|
|
25
|
+
record: T;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Stream change types.
|
|
29
|
+
*/
|
|
30
|
+
export declare const enum StreamType {
|
|
31
|
+
Insert = "insert",
|
|
32
|
+
Update = "update",
|
|
33
|
+
Delete = "delete"
|
|
34
|
+
}
|
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.
|
|
4
|
+
"version": "0.3.0",
|
|
5
5
|
"author": "Silas B.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
"live:publish": "npm run test && npm publish --access public"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@ez4/common": "^0.
|
|
35
|
-
"@ez4/project": "^0.
|
|
36
|
-
"@ez4/reflection": "^0.
|
|
37
|
-
"@ez4/schema": "^0.
|
|
38
|
-
"@ez4/utils": "^0.
|
|
34
|
+
"@ez4/common": "^0.3.0",
|
|
35
|
+
"@ez4/project": "^0.3.0",
|
|
36
|
+
"@ez4/reflection": "^0.3.0",
|
|
37
|
+
"@ez4/schema": "^0.3.0",
|
|
38
|
+
"@ez4/utils": "^0.3.0"
|
|
39
39
|
}
|
|
40
40
|
}
|