@ez4/database 0.35.0 → 0.37.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 CHANGED
@@ -1,15 +1,132 @@
1
1
  # EZ4: Database
2
2
 
3
- It uses the power of [reflection](../reflection/) to provide an API which determines how to build and connect database components.
3
+ It uses the power of [reflection](../../foundation/reflection/) to provide a contract that determines how to build and connect database components.
4
4
 
5
5
  ## Getting started
6
6
 
7
7
  #### Install
8
8
 
9
9
  ```sh
10
- npm install @ez4/database -D
10
+ npm install @ez4/database @ez4/local-database @ez4/aws-aurora -D
11
11
  ```
12
12
 
13
+ > You can use `@ez4/aws-dynamodb` instead of `@ez4/aws-aurora` for NoSQL database.
14
+
15
+ #### Create database
16
+
17
+ ```ts
18
+ // file: db.ts
19
+ import type { Environment, Service } from '@ez4/common';
20
+ import type { Database } from '@ez4/database';
21
+
22
+ // MyDb message
23
+ type MyTableSchema = {
24
+ foo: string;
25
+ bar: number;
26
+ };
27
+
28
+ // MyDb declaration
29
+ export declare class MyDb extends Database.Service {
30
+ client: Client<Db>;
31
+
32
+ engine: PostgresEngine;
33
+
34
+ tables: [
35
+ Database.UseTable<{
36
+ name: 'my_table';
37
+ schema: MyTableSchema;
38
+ indexes: {
39
+ foo: Index.Primary;
40
+ };
41
+ }>
42
+ ];
43
+ }
44
+ ```
45
+
46
+ #### Use database
47
+
48
+ ```ts
49
+ // file: handler.ts
50
+ import type { Service } from '@ez4/common';
51
+ import type { MyDb } from './db';
52
+
53
+ // Any other handler that has injected MyDb service
54
+ export async function anyHandler(_request: any, context: Service.Context<DummyService>) {
55
+ const { MyDb } = context;
56
+
57
+ // Insert one record
58
+ await MyDb.my_table.insertOne({
59
+ data: {
60
+ foo: 'foo',
61
+ bar: 123
62
+ }
63
+ });
64
+
65
+ // Find one record
66
+ const result = await MyDb.my_table.findOne({
67
+ select: {
68
+ bar: true
69
+ },
70
+ where: {
71
+ foo: 'foo'
72
+ }
73
+ });
74
+ }
75
+ ```
76
+
77
+ ## Database properties
78
+
79
+ #### Service
80
+
81
+ | Name | Type | Description |
82
+ | ----------- | ------------------------- | ------------------------------------------------ |
83
+ | scalability | Database.UseScalability<> | Scalability configuration. |
84
+ | tables | Database.UseTable<> | Describe all available tables for the service. |
85
+ | engine | object | Determines which database engine to use. |
86
+ | variables | object | Environment variables associated to all streams. |
87
+ | services | object | Injected services associated to all streams. |
88
+
89
+ > Use type helpers for `scalability` and `tables` properties.
90
+
91
+ #### Tables
92
+
93
+ | Name | Type | Description |
94
+ | --------- | ------------------------- | --------------------------- |
95
+ | stream | Database.UseTableStream<> | Table stream configuration. |
96
+ | name | string | Table name. |
97
+ | schema | object | Table schema. |
98
+ | relations | object | Table relations. |
99
+ | indexes | object | Table indexes. |
100
+
101
+ #### Streams (DynamoDB)
102
+
103
+ | Name | Type | Description |
104
+ | ------------ | -------- | ------------------------------------------------ |
105
+ | listener | function | Life-cycle listener function for the stream. |
106
+ | handler | function | Entry-point handler function for the stream. |
107
+ | variables | object | Environment variables associated to the stream. |
108
+ | logRetention | integer | Log retention (in days) for the handler. |
109
+ | memory | integer | Memory available (in megabytes) for the handler. |
110
+ | timeout | integer | Max execution time (in seconds) for the route. |
111
+
112
+ > Streams is a DynamoDB feature, thus unavailable for Aurora Postgres.
113
+
114
+ ## Examples
115
+
116
+ - [Get started with Aurora RDS](../../examples/hello-aws-aurora)
117
+ - [Get started with DynamoDB](../../examples/hello-aws-dynamodb)
118
+ - [Aurora RDS CRUDL](../../examples/aws-aurora-crudl)
119
+ - [DynamoDB CRUDL](../../examples/aws-dynamodb-crudl)
120
+ - [DynamoDB streams](../../examples/aws-dynamodb-streams)
121
+ - [Schedule manager](../../examples/aws-schedule-manager)
122
+ - [Storage manager](../../examples/aws-storage-manager)
123
+
124
+ ## Providers
125
+
126
+ - [Local provider](../../providers/local/local-database)
127
+ - [AWS Aurora provider](../../providers/aws/aws-aurora)
128
+ - [AWS DynamoDB provider](../../providers/aws/aws-dynamodb)
129
+
13
130
  ## License
14
131
 
15
132
  MIT License
package/dist/library.cjs CHANGED
@@ -1,154 +1,154 @@
1
- "use strict";var X=Object.defineProperty;var Xe=Object.getOwnPropertyDescriptor;var Ye=Object.getOwnPropertyNames;var Ze=Object.prototype.hasOwnProperty;var a=(e,t)=>X(e,"name",{value:t,configurable:!0});var Le=(e,t)=>{for(var r in t)X(e,r,{get:t[r],enumerable:!0})},er=(e,t,r,n)=>{if(t&&
2
- typeof t=="object"||typeof t=="function")for(let o of Ye(t))!Ze.call(e,o)&&o!==r&&
3
- X(e,o,{get:()=>t[o],enumerable:!(n=Xe(t,o))||n.enumerable});return e};var rr=e=>er(X({},"__esModule",{value:!0}),e);var br={};Le(br,{IncompleteEngineError:()=>F,IncompleteHandlerError:()=>W,IncompleteScalabilityError:()=>H,
4
- IncompleteServiceError:()=>j,IncompleteStreamError:()=>J,IncompleteTableError:()=>U,
5
- IncorrectIndexesTypeError:()=>$,IncorrectRelationsTypeError:()=>R,IncorrectSchemaTypeError:()=>G,
6
- IncorrectStreamTypeError:()=>Q,Index:()=>Oe,InvalidIndexReferenceError:()=>_,InvalidIndexTypeError:()=>q,
7
- InvalidIndexesTypeError:()=>V,InvalidRelationAliasError:()=>N,InvalidRelationColumnError:()=>S,
8
- InvalidRelationTableError:()=>C,InvalidRelationTargetError:()=>z,InvalidRelationsTypeError:()=>A,
9
- InvalidSchemaTypeError:()=>B,InvalidStreamTypeError:()=>K,ServiceType:()=>Y,getDatabaseServices:()=>me,
10
- getDatabaseTable:()=>pe,getTableSchema:()=>ie,isDatabaseService:()=>tr,registerTriggers:()=>fr});
11
- module.exports=rr(br);var Je=require("@ez4/common/library"),Ke=require("@ez4/schema/library"),Qe=require("@ez4/project/library");var f=require("@ez4/common/library"),Be=require("@ez4/reflection");var Y="@ez4/database",tr=a(e=>e.type===Y,"isDatabaseService");var le=require("@ez4/common/library");var j=class extends le.IncompleteTypeError{static{a(this,"IncompleteServiceError")}constructor(t,r){
12
- super("Incomplete database service",t,r)}};var g=require("@ez4/common/library");var A=class extends g.InvalidTypeError{static{a(this,"InvalidRelationsTypeError")}constructor(t){
13
- super("Invalid table relations type",void 0,"Database.Relations",t)}},R=class extends g.IncorrectTypeError{constructor(r,n){
14
- super("Incorrect table relations type",r,"Database.Relations",n);this.schemaType=
15
- r}static{a(this,"IncorrectRelationsTypeError")}},z=class extends g.TypeError{constructor(r,n){
16
- super(`Target ${r} must follow the pattern 'column@alias'.`,n);this.relationSource=
17
- r}static{a(this,"InvalidRelationTargetError")}},C=class extends g.TypeError{constructor(r,n){
18
- super(`Relation table ${r} don't exists.`,n);this.relationTable=r}static{a(this,
19
- "InvalidRelationTableError")}},S=class extends g.TypeError{constructor(r,n){super(
20
- `Relation column ${r} don't exists.`,n);this.relationColumn=r}static{a(this,"Inv\
21
- alidRelationColumnError")}},N=class extends g.TypeError{constructor(r,n){super(`\
22
- Relation alias ${r} can't override table columns.`,n);this.relationAlias=r}static{
23
- a(this,"InvalidRelationAliasError")}};var u=require("@ez4/common/library"),I=require("@ez4/reflection"),re=require("@ez4/utils");var de=require("@ez4/common/library");var H=class extends de.IncompleteTypeError{static{a(this,"IncompleteScalabilityE\
24
- rror")}constructor(t,r){super("Incomplete database scalability",t,r)}};var b=require("@ez4/common/library"),Z=require("@ez4/reflection");var L=a(e=>(0,b.isClassDeclaration)(e)&&(0,b.hasHeritageType)(e,"Database.Servic\
25
- e"),"isDatabaseService"),ee=a(e=>(0,b.isModelDeclaration)(e)&&(0,b.hasHeritageType)(
26
- e,"Database.Engine"),"isDatabaseEngine"),fe=a(e=>(0,b.isModelDeclaration)(e)&&(0,b.hasHeritageType)(
27
- e,"Database.Table"),"isDatabaseTable"),be=a(e=>(0,Z.isTypeCallback)(e)||(0,Z.isTypeFunction)(
28
- e),"isStreamHandler"),ue=a(e=>(0,b.hasHeritageType)(e,"Database.Relations"),"isT\
29
- ableRelations"),Te=a(e=>(0,b.hasHeritageType)(e,"Database.Indexes"),"isTableInde\
30
- xes"),ye=a(e=>(0,b.hasHeritageType)(e,"Database.Schema"),"isTableSchema"),xe=a(e=>(0,b.hasHeritageType)(
31
- e,"Database.Stream"),"isTableStream");var Se=a((e,t,r,n)=>{if(!(0,I.isTypeReference)(e))return ge(e,t,n);let o=(0,u.getReferenceType)(
32
- e,r);if(o)return ge(o,t,n)},"getDatabaseScalability"),or=a(e=>(0,re.isAnyNumber)(
33
- e.minCapacity)&&(0,re.isAnyNumber)(e.maxCapacity),"isValidScalability"),ge=a((e,t,r)=>{
34
- if(ee(e))return Me(e,t,(0,u.getModelMembers)(e),r);if((0,I.isTypeObject)(e))return Me(
35
- e,t,(0,u.getObjectMembers)(e),r)},"getTypeScalability"),Me=a((e,t,r,n)=>{let o={},
36
- s=new Set(["minCapacity","maxCapacity"]);for(let i of r)if(!(!(0,I.isModelProperty)(
37
- i)||i.inherited))switch(i.name){default:n.push(new u.InvalidServicePropertyError(
38
- t.name,i.name,e.file));break;case"minCapacity":case"maxCapacity":let p=(0,u.getPropertyNumber)(
39
- i);(0,re.isAnyNumber)(p)&&(o[i.name]=p,s.delete(i.name));break}if(!or(o)){n.push(
40
- new H([...s],e.file));return}return o},"getTypeFromMembers");var h=require("@ez4/reflection"),l=require("@ez4/common/library");var Ie=require("@ez4/common/library");var F=class extends Ie.IncompleteTypeError{static{a(this,"IncompleteEngineError")}constructor(t,r){
41
- super("Incomplete database engine",t,r)}};var ve=a((e,t,r,n)=>{if(!(0,h.isTypeReference)(e))return he(e,t,n);let o=(0,l.getReferenceType)(
42
- e,r);if(o)return he(o,t,n)},"getDatabaseEngine"),nr=a(e=>!!e.name&&!!e.parametersMode&&
1
+ "use strict";var Q=Object.defineProperty;var rr=Object.getOwnPropertyDescriptor;var tr=Object.getOwnPropertyNames;var nr=Object.prototype.hasOwnProperty;var a=(e,t)=>Q(e,"name",{value:t,configurable:!0});var or=(e,t)=>{for(var r in t)Q(e,r,{get:t[r],enumerable:!0})},ar=(e,t,r,o)=>{if(t&&
2
+ typeof t=="object"||typeof t=="function")for(let n of tr(t))!nr.call(e,n)&&n!==r&&
3
+ Q(e,n,{get:()=>t[n],enumerable:!(o=rr(t,n))||o.enumerable});return e};var sr=e=>ar(Q({},"__esModule",{value:!0}),e);var xr={};or(xr,{IncompleteEngineError:()=>F,IncompleteHandlerError:()=>K,IncompleteScalabilityError:()=>N,
4
+ IncompleteServiceError:()=>O,IncompleteStreamError:()=>B,IncompleteTableError:()=>q,
5
+ IncorrectIndexesTypeError:()=>$,IncorrectRelationsTypeError:()=>j,IncorrectSchemaTypeError:()=>_,
6
+ IncorrectStreamTypeError:()=>J,Index:()=>je,InvalidIndexReferenceError:()=>H,InvalidIndexTypeError:()=>V,
7
+ InvalidIndexesTypeError:()=>U,InvalidRelationAliasError:()=>C,InvalidRelationColumnError:()=>I,
8
+ InvalidRelationTableError:()=>z,InvalidRelationTargetError:()=>A,InvalidRelationsTypeError:()=>w,
9
+ InvalidSchemaTypeError:()=>W,InvalidStreamTypeError:()=>G,ServiceType:()=>se,createDatabaseService:()=>ie,
10
+ getDatabaseServices:()=>ce,getDatabaseTable:()=>le,getTableSchema:()=>pe,isDatabaseService:()=>ir,
11
+ registerTriggers:()=>yr});module.exports=sr(xr);var Ye=require("@ez4/common/library"),Ze=require("@ez4/schema/library"),Le=require("@ez4/project/library");var f=require("@ez4/common/library"),Ke=require("@ez4/reflection"),Qe=require("@ez4/utils");var de=require("@ez4/project/library");var se="@ez4/database",ir=a(e=>e.type===se,"isDatabaseService"),ie=a(e=>({...(0,de.createServiceMetadata)(
12
+ se,e),variables:{},services:{}}),"createDatabaseService");var fe=require("@ez4/common/library");var O=class extends fe.IncompleteTypeError{static{a(this,"IncompleteServiceError")}constructor(t,r){
13
+ super("Incomplete database service",t,r)}};var g=require("@ez4/common/library");var w=class extends g.InvalidTypeError{static{a(this,"InvalidRelationsTypeError")}constructor(t){
14
+ super("Invalid table relations type",void 0,"Database.Relations",t)}},j=class extends g.IncorrectTypeError{constructor(r,o){
15
+ super("Incorrect table relations type",r,"Database.Relations",o);this.schemaType=
16
+ r}static{a(this,"IncorrectRelationsTypeError")}},A=class extends g.TypeError{constructor(r,o){
17
+ super(`Target ${r} must follow the pattern 'column@alias'.`,o);this.relationSource=
18
+ r}static{a(this,"InvalidRelationTargetError")}},z=class extends g.TypeError{constructor(r,o){
19
+ super(`Relation table ${r} don't exists.`,o);this.relationTable=r}static{a(this,
20
+ "InvalidRelationTableError")}},I=class extends g.TypeError{constructor(r,o){super(
21
+ `Relation column ${r} don't exists.`,o);this.relationColumn=r}static{a(this,"Inv\
22
+ alidRelationColumnError")}},C=class extends g.TypeError{constructor(r,o){super(`\
23
+ Relation alias ${r} can't override table columns.`,o);this.relationAlias=r}static{
24
+ a(this,"InvalidRelationAliasError")}};var T=require("@ez4/common/library"),S=require("@ez4/reflection"),L=require("@ez4/utils");var be=require("@ez4/common/library");var N=class extends be.IncompleteTypeError{static{a(this,"IncompleteScalabilityE\
25
+ rror")}constructor(t,r){super("Incomplete database scalability",t,r)}};var b=require("@ez4/common/library"),X=require("@ez4/reflection");var Y=a(e=>(0,b.isClassDeclaration)(e)&&(0,b.hasHeritageType)(e,"Database.Servic\
26
+ e"),"isDatabaseService"),Z=a(e=>(0,b.isModelDeclaration)(e)&&(0,b.hasHeritageType)(
27
+ e,"Database.Engine"),"isDatabaseEngine"),Te=a(e=>(0,b.isModelDeclaration)(e)&&(0,b.hasHeritageType)(
28
+ e,"Database.Table"),"isDatabaseTable"),ue=a(e=>(0,X.isTypeCallback)(e)||(0,X.isTypeFunction)(
29
+ e),"isStreamHandler"),ye=a(e=>(0,b.hasHeritageType)(e,"Database.Relations"),"isT\
30
+ ableRelations"),xe=a(e=>(0,b.hasHeritageType)(e,"Database.Indexes"),"isTableInde\
31
+ xes"),ge=a(e=>(0,b.hasHeritageType)(e,"Database.Schema"),"isTableSchema"),Me=a(e=>(0,b.hasHeritageType)(
32
+ e,"Database.Stream"),"isTableStream");var he=a((e,t,r,o)=>{if(!(0,S.isTypeReference)(e))return Ie(e,t,o);let n=(0,T.getReferenceType)(
33
+ e,r);if(n)return Ie(n,t,o)},"getDatabaseScalability"),pr=a(e=>(0,L.isAnyNumber)(
34
+ e.minCapacity)&&(0,L.isAnyNumber)(e.maxCapacity),"isValidScalability"),Ie=a((e,t,r)=>{
35
+ if(Z(e))return Se(e,t,(0,T.getModelMembers)(e),r);if((0,S.isTypeObject)(e))return Se(
36
+ e,t,(0,T.getObjectMembers)(e),r)},"getTypeScalability"),Se=a((e,t,r,o)=>{let n={},
37
+ s=new Set(["minCapacity","maxCapacity"]);for(let i of r)if(!(!(0,S.isModelProperty)(
38
+ i)||i.inherited))switch(i.name){default:o.push(new T.InvalidServicePropertyError(
39
+ t.name,i.name,e.file));break;case"minCapacity":case"maxCapacity":let p=(0,T.getPropertyNumber)(
40
+ i);(0,L.isAnyNumber)(p)&&(n[i.name]=p,s.delete(i.name));break}if(!pr(n)){o.push(
41
+ new N([...s],e.file));return}return n},"getTypeFromMembers");var h=require("@ez4/reflection"),m=require("@ez4/common/library");var ve=require("@ez4/common/library");var F=class extends ve.IncompleteTypeError{static{a(this,"IncompleteEngineError")}constructor(t,r){
42
+ super("Incomplete database engine",t,r)}};var Re=a((e,t,r,o)=>{if(!(0,h.isTypeReference)(e))return De(e,t,o);let n=(0,m.getReferenceType)(
43
+ e,r);if(n)return De(n,t,o)},"getDatabaseEngine"),lr=a(e=>!!e.name&&!!e.parametersMode&&
43
44
  !!e.transactionMode&&!!e.insensitiveMode&&!!e.paginationMode&&!!e.orderMode,"isV\
44
- alidEngine"),he=a((e,t,r)=>{if(ee(e))return De(e,t,(0,l.getModelMembers)(e),r);if((0,h.isTypeObject)(
45
- e))return De(e,t,(0,l.getObjectMembers)(e),r)},"getTypeEngine"),De=a((e,t,r,n)=>{
46
- let o={},s=new Set(["name","parametersMode","transactionMode","insensitiveMode",
45
+ alidEngine"),De=a((e,t,r)=>{if(Z(e))return Ee(e,t,(0,m.getModelMembers)(e),r);if((0,h.isTypeObject)(
46
+ e))return Ee(e,t,(0,m.getObjectMembers)(e),r)},"getTypeEngine"),Ee=a((e,t,r,o)=>{
47
+ let n={},s=new Set(["name","parametersMode","transactionMode","insensitiveMode",
47
48
  "paginationMode","orderMode"]);for(let i of r)if(!(!(0,h.isModelProperty)(i)||i.
48
- inherited))switch(i.name){default:n.push(new l.InvalidServicePropertyError(t.name,
49
- i.name,e.file));break;case"name":(o.name=(0,l.getPropertyString)(i))&&s.delete(i.
50
- name);break;case"parametersMode":(o.parametersMode=(0,l.getPropertyStringIn)(i,[
51
- "index","both"]))&&s.delete(i.name);break;case"transactionMode":(o.transactionMode=
52
- (0,l.getPropertyStringIn)(i,["static","interactive"]))&&s.delete(i.name);break;case"\
53
- insensitiveMode":(o.insensitiveMode=(0,l.getPropertyStringIn)(i,["unsupported","\
54
- enabled"]))&&s.delete(i.name);break;case"paginationMode":(o.paginationMode=(0,l.getPropertyStringIn)(
55
- i,["cursor","offset"]))&&s.delete(i.name);break;case"orderMode":(o.orderMode=(0,l.getPropertyStringIn)(
56
- i,["any","index"]))&&s.delete(i.name);break;case"lockMode":(o.lockMode=(0,l.getPropertyStringIn)(
57
- i,["unsupported","supported"]))&&s.delete(i.name);break}if(!nr(o)){n.push(new F(
58
- [...s],e.file));return}return o},"getTypeFromMembers");var x=require("@ez4/common/library"),w=require("@ez4/reflection");var Ee=require("@ez4/common/library");var U=class extends Ee.IncompleteTypeError{static{a(this,"IncompleteTableError")}constructor(t,r){
59
- super("Incomplete database table",t,r)}};var M=require("@ez4/common/library");var V=class extends M.InvalidTypeError{static{a(this,"InvalidIndexesTypeError")}constructor(t){
60
- super("Invalid table indexes type",void 0,"Database.Indexes",t)}},$=class extends M.IncorrectTypeError{constructor(r,n){
61
- super("Incorrect table indexes type",r,"Database.Indexes",n);this.schemaType=r}static{
62
- a(this,"IncorrectIndexesTypeError")}},q=class extends M.TypeError{constructor(r,n){
63
- super(`Invalid index type, ${r} must follow one of the Index options.`,n);this.indexName=
64
- r}static{a(this,"InvalidIndexTypeError")}},_=class extends M.TypeError{constructor(r,n){
65
- super(`Invalid index reference, ${r} must be valid column.`,n);this.indexName=r}static{
66
- a(this,"InvalidIndexReferenceError")}};var T=require("@ez4/common/library"),D=require("@ez4/reflection");var we=a((e,t,r,n)=>{if(!(0,D.isTypeReference)(e))return Pe(e,t,n);let o=(0,T.getReferenceType)(
67
- e,r);if(o)return Pe(o,t,n)},"getTableRelations"),Pe=a((e,t,r)=>{if((0,D.isTypeObject)(
68
- e))return ke(e,(0,T.getObjectMembers)(e),r);if(!(0,T.isModelDeclaration)(e)){r.push(
69
- new A(t.file));return}if(!ue(e)){r.push(new R(e.name,e.file));return}return ke(e,
70
- (0,T.getModelMembers)(e),r)},"getTypeRelations"),ke=a((e,t,r)=>{let n=[];for(let o of t){
71
- if(!(0,D.isModelProperty)(o)||o.inherited)continue;let s=(0,T.getPropertyString)(
72
- o),i=o.name;if(!s){r.push(new z(i,e.file));return}let[p,m]=i.split("@",2),[c,O]=s.
73
- split(":",2);n.push({sourceTable:c,sourceColumn:O,targetColumn:p,targetAlias:m})}
74
- return n},"getTypeFromMembers");var y=require("@ez4/common/library"),v=require("@ez4/reflection");var Oe=(o=>(o.Primary="primary",o.Secondary="secondary",o.Unique="unique",o.TTL=
75
- "ttl",o))(Oe||{});var Re=a((e,t,r,n)=>{if(!(0,v.isTypeReference)(e))return je(e,t,n);let o=(0,y.getReferenceType)(
76
- e,r);if(o)return je(o,t,n)},"getTableIndexes"),je=a((e,t,r)=>{if((0,v.isTypeObject)(
77
- e))return Ae(e,(0,y.getObjectMembers)(e),r);if(!(0,y.isModelDeclaration)(e)){r.push(
78
- new V(t.file));return}if(!Te(e)){r.push(new $(e.name,e.file));return}return Ae(e,
79
- (0,y.getModelMembers)(e),r)},"getTypeIndexes"),Ae=a((e,t,r)=>{let n=[];for(let o of t){
80
- if(!(0,v.isModelProperty)(o)||o.inherited)continue;let s=o.name,i=(0,y.getPropertyString)(
81
- o);switch(i){case"primary":case"secondary":case"unique":case"ttl":n.push({name:s,
82
- columns:s.split(":"),type:i});break;default:r.push(new q(s,e.file));return}}return n},
83
- "getTypeFromMembers");var E=require("@ez4/schema/library"),oe=require("@ez4/common/library"),ne=require("@ez4/reflection");var te=require("@ez4/common/library");var B=class extends te.InvalidTypeError{static{a(this,"InvalidSchemaTypeError")}constructor(t){
84
- super("Invalid table schema type",void 0,"Database.Schema",t)}},G=class extends te.IncorrectTypeError{constructor(r,n){
85
- super("Incorrect table schema type",r,"Database.Schema",n);this.schemaType=r}static{
86
- a(this,"IncorrectSchemaTypeError")}};var ie=a((e,t,r,n)=>{if(!(0,ne.isTypeReference)(e))return ze(e,t,r,n);let o=(0,oe.getReferenceType)(
87
- e,r);if(o)return ze(o,t,r,n)},"getTableSchema"),ze=a((e,t,r,n)=>{if((0,ne.isTypeObject)(
88
- e))return Ce(e,r);if(!(0,oe.isModelDeclaration)(e)){n.push(new B(t.file));return}
89
- if(!ye(e)){n.push(new G(e.name,e.file));return}return Ce(e,r)},"getTypeSchema"),
90
- Ce=a((e,t)=>{let r=(0,E.getObjectSchema)(e,t,(0,E.createSchemaContext)({nullish:!0}));
91
- if(r&&(0,E.isObjectSchema)(r))return r},"getSchema");var d=require("@ez4/common/library"),k=require("@ez4/reflection");var P=require("@ez4/common/library");var J=class extends P.IncompleteTypeError{static{a(this,"IncompleteStreamError")}constructor(t,r){
92
- super("Incomplete table stream",t,r)}},K=class extends P.InvalidTypeError{static{
49
+ inherited))switch(i.name){default:o.push(new m.InvalidServicePropertyError(t.name,
50
+ i.name,e.file));break;case"name":(n.name=(0,m.getPropertyString)(i))&&s.delete(i.
51
+ name);break;case"parametersMode":(n.parametersMode=(0,m.getPropertyStringIn)(i,[
52
+ "index","both"]))&&s.delete(i.name);break;case"transactionMode":(n.transactionMode=
53
+ (0,m.getPropertyStringIn)(i,["static","interactive"]))&&s.delete(i.name);break;case"\
54
+ insensitiveMode":(n.insensitiveMode=(0,m.getPropertyStringIn)(i,["unsupported","\
55
+ enabled"]))&&s.delete(i.name);break;case"paginationMode":(n.paginationMode=(0,m.getPropertyStringIn)(
56
+ i,["cursor","offset"]))&&s.delete(i.name);break;case"orderMode":(n.orderMode=(0,m.getPropertyStringIn)(
57
+ i,["any","index"]))&&s.delete(i.name);break;case"lockMode":(n.lockMode=(0,m.getPropertyStringIn)(
58
+ i,["unsupported","supported"]))&&s.delete(i.name);break}if(!lr(n)){o.push(new F(
59
+ [...s],e.file));return}return n},"getTypeFromMembers");var x=require("@ez4/common/library"),P=require("@ez4/reflection");var Pe=require("@ez4/common/library");var q=class extends Pe.IncompleteTypeError{static{a(this,"IncompleteTableError")}constructor(t,r){
60
+ super("Incomplete database table",t,r)}};var M=require("@ez4/common/library");var U=class extends M.InvalidTypeError{static{a(this,"InvalidIndexesTypeError")}constructor(t){
61
+ super("Invalid table indexes type",void 0,"Database.Indexes",t)}},$=class extends M.IncorrectTypeError{constructor(r,o){
62
+ super("Incorrect table indexes type",r,"Database.Indexes",o);this.schemaType=r}static{
63
+ a(this,"IncorrectIndexesTypeError")}},V=class extends M.TypeError{constructor(r,o){
64
+ super(`Invalid index type, ${r} must follow one of the Index options.`,o);this.indexName=
65
+ r}static{a(this,"InvalidIndexTypeError")}},H=class extends M.TypeError{constructor(r,o){
66
+ super(`Invalid index reference, ${r} must be valid column.`,o);this.indexName=r}static{
67
+ a(this,"InvalidIndexReferenceError")}};var u=require("@ez4/common/library"),v=require("@ez4/reflection");var we=a((e,t,r,o)=>{if(!(0,v.isTypeReference)(e))return ke(e,t,o);let n=(0,u.getReferenceType)(
68
+ e,r);if(n)return ke(n,t,o)},"getTableRelations"),ke=a((e,t,r)=>{if((0,v.isTypeObject)(
69
+ e))return Oe(e,(0,u.getObjectMembers)(e),r);if(!(0,u.isModelDeclaration)(e)){r.push(
70
+ new w(t.file));return}if(!ye(e)){r.push(new j(e.name,e.file));return}return Oe(e,
71
+ (0,u.getModelMembers)(e),r)},"getTypeRelations"),Oe=a((e,t,r)=>{let o=[];for(let n of t){
72
+ if(!(0,v.isModelProperty)(n)||n.inherited)continue;let s=(0,u.getPropertyString)(
73
+ n),i=n.name;if(!s){r.push(new A(i,e.file));return}let[p,l]=i.split("@",2),[c,k]=s.
74
+ split(":",2);o.push({sourceTable:c,sourceColumn:k,targetColumn:p,targetAlias:l})}
75
+ return o},"getTypeFromMembers");var y=require("@ez4/common/library"),D=require("@ez4/reflection");var je=(n=>(n.Primary="primary",n.Secondary="secondary",n.Unique="unique",n.TTL=
76
+ "ttl",n))(je||{});var Ce=a((e,t,r,o)=>{if(!(0,D.isTypeReference)(e))return Ae(e,t,o);let n=(0,y.getReferenceType)(
77
+ e,r);if(n)return Ae(n,t,o)},"getTableIndexes"),Ae=a((e,t,r)=>{if((0,D.isTypeObject)(
78
+ e))return ze(e,(0,y.getObjectMembers)(e),r);if(!(0,y.isModelDeclaration)(e)){r.push(
79
+ new U(t.file));return}if(!xe(e)){r.push(new $(e.name,e.file));return}return ze(e,
80
+ (0,y.getModelMembers)(e),r)},"getTypeIndexes"),ze=a((e,t,r)=>{let o=[];for(let n of t){
81
+ if(!(0,D.isModelProperty)(n)||n.inherited)continue;let s=n.name,i=(0,y.getPropertyString)(
82
+ n);switch(i){case"primary":case"secondary":case"unique":case"ttl":o.push({name:s,
83
+ columns:s.split(":"),type:i});break;default:r.push(new V(s,e.file));return}}return o},
84
+ "getTypeFromMembers");var re=require("@ez4/reflection"),te=require("@ez4/common/library"),ne=require("@ez4/schema"),
85
+ qe=require("@ez4/schema/library");var ee=require("@ez4/common/library");var W=class extends ee.InvalidTypeError{static{a(this,"InvalidSchemaTypeError")}constructor(t){
86
+ super("Invalid table schema type",void 0,"Database.Schema",t)}},_=class extends ee.IncorrectTypeError{constructor(r,o){
87
+ super("Incorrect table schema type",r,"Database.Schema",o);this.schemaType=r}static{
88
+ a(this,"IncorrectSchemaTypeError")}};var pe=a((e,t,r,o)=>{if(!(0,re.isTypeReference)(e))return Ne(e,t,r,o);let n=(0,te.getReferenceType)(
89
+ e,r);if(n)return Ne(n,t,r,o)},"getTableSchema"),Ne=a((e,t,r,o)=>{if((0,re.isTypeObject)(
90
+ e))return Fe(e,r);if(!(0,te.isModelDeclaration)(e)){o.push(new W(t.file));return}
91
+ if(!ge(e)){o.push(new _(e.name,e.file));return}return Fe(e,r)},"getTypeSchema"),
92
+ Fe=a((e,t)=>{let r=(0,qe.getObjectSchema)(e,t,(0,ne.createSchemaContext)({nullish:!0}));
93
+ if(r&&(0,ne.isObjectSchema)(r))return r},"getSchema");var d=require("@ez4/common/library"),R=require("@ez4/reflection");var E=require("@ez4/common/library");var B=class extends E.IncompleteTypeError{static{a(this,"IncompleteStreamError")}constructor(t,r){
94
+ super("Incomplete table stream",t,r)}},G=class extends E.InvalidTypeError{static{
93
95
  a(this,"InvalidStreamTypeError")}constructor(t){super("Invalid table stream type",
94
- void 0,"Database.Stream",t)}},Q=class extends P.IncorrectTypeError{constructor(r,n){
95
- super("Incorrect table stream type",r,"Database.Stream",n);this.streamType=r}static{
96
- a(this,"IncorrectStreamTypeError")}};var Ne=require("@ez4/common/library");var W=class extends Ne.IncompleteTypeError{static{a(this,"IncompleteHandlerError")}constructor(t,r){
97
- super("Incomplete stream handler",t,r)}};var He=a((e,t,r)=>{if(!be(e))return;let{description:n,module:o}=e,s={...n&&{description:n},
98
- ...o&&{module:o}},i=new Set(["name","file","change"]);if((s.name=e.name)&&i.delete(
99
- "name"),(s.file=e.file)&&i.delete("file"),e.parameters&&i.delete("change"),i.size===
100
- 0&&ar(s))return s;r.push(new W([...i],e.file))},"getStreamHandler"),ar=a(e=>!!e.
101
- name&&!!e.file,"isValidHandler");var Ve=a((e,t,r,n)=>{if(!(0,k.isTypeReference)(e))return Fe(e,t,r,n);let o=(0,d.getReferenceType)(
102
- e,r);if(o)return Fe(o,t,r,n)},"getTableStream"),sr=a(e=>!!e.handler,"isValidStre\
103
- am"),Fe=a((e,t,r,n)=>{if((0,k.isTypeObject)(e))return Ue(e,t,(0,d.getObjectMembers)(
104
- e),r,n);if(!(0,d.isModelDeclaration)(e)){n.push(new K(t.file));return}if(!xe(e)){
105
- n.push(new Q(e.name,e.file));return}return Ue(e,t,(0,d.getModelMembers)(e),r,n)},
106
- "getTypeStream"),Ue=a((e,t,r,n,o)=>{let s={},i=new Set(["handler"]);for(let p of r)
107
- if(!(!(0,k.isModelProperty)(p)||p.inherited))switch(p.name){default:o.push(new d.InvalidServicePropertyError(
108
- t.name,p.name,e.file));break;case"handler":s.handler=He(p.value,n,o);break;case"\
109
- listener":s.listener=(0,d.getServiceListener)(p.value,o);break;case"memory":case"\
96
+ void 0,"Database.Stream",t)}},J=class extends E.IncorrectTypeError{constructor(r,o){
97
+ super("Incorrect table stream type",r,"Database.Stream",o);this.streamType=r}static{
98
+ a(this,"IncorrectStreamTypeError")}};var $e=require("@ez4/common/library");var Ue=require("@ez4/common/library");var K=class extends Ue.IncompleteTypeError{static{a(this,"IncompleteHandlerError")}constructor(t,r){
99
+ super("Incomplete stream handler",t,r)}};var Ve=a((e,t,r)=>{if(!ue(e))return;let o=(0,$e.getFunctionSignature)(e),n=new Set(
100
+ ["change"]);if(e.parameters&&n.delete("change"),!o||n.size){r.push(new K([...n],
101
+ e.file));return}return o},"getStreamHandler");var _e=a((e,t,r,o)=>{if(!(0,R.isTypeReference)(e))return He(e,t,r,o);let n=(0,d.getReferenceType)(
102
+ e,r);if(n)return He(n,t,r,o)},"getTableStream"),cr=a(e=>!!e.handler,"isValidStre\
103
+ am"),He=a((e,t,r,o)=>{if((0,R.isTypeObject)(e))return We(e,t,(0,d.getObjectMembers)(
104
+ e),r,o);if(!(0,d.isModelDeclaration)(e)){o.push(new G(t.file));return}if(!Me(e)){
105
+ o.push(new J(e.name,e.file));return}return We(e,t,(0,d.getModelMembers)(e),r,o)},
106
+ "getTypeStream"),We=a((e,t,r,o,n)=>{let s={},i=new Set(["handler"]);for(let p of r)
107
+ if(!(!(0,R.isModelProperty)(p)||p.inherited))switch(p.name){default:n.push(new d.InvalidServicePropertyError(
108
+ t.name,p.name,e.file));break;case"handler":s.handler=Ve(p.value,o,n);break;case"\
109
+ listener":s.listener=(0,d.getServiceListener)(p.value,n);break;case"memory":case"\
110
110
  logRetention":case"timeout":s[p.name]=(0,d.getPropertyNumber)(p);break;case"vari\
111
- ables":s.variables=(0,d.getLinkedVariableList)(p,o);break}if(sr(s))return s;o.push(
112
- new J([...i],e.file))},"getTypeFromMembers");var pe=a((e,t,r,n)=>{if(!(0,w.isTypeReference)(e))return $e(e,t,r,n);let o=(0,x.getReferenceType)(
113
- e,r);if(o)return $e(o,t,r,n)},"getDatabaseTable"),ir=a(e=>!!e.name&&!!e.schema&&
114
- !!e.indexes,"isValidTable"),$e=a((e,t,r,n)=>{if(fe(e))return qe(e,t,(0,x.getModelMembers)(
115
- e),r,n);if((0,w.isTypeObject)(e))return qe(e,t,(0,x.getObjectMembers)(e),r,n)},"\
116
- getTypeTable"),qe=a((e,t,r,n,o)=>{let s={},i=new Set(["name","schema","indexes"]);
117
- for(let m of r)if(!(!(0,w.isModelProperty)(m)||m.inherited))switch(m.name){default:
118
- o.push(new x.InvalidServicePropertyError(t.name,m.name,e.file));break;case"name":
119
- (s.name=(0,x.getPropertyString)(m))&&i.delete(m.name);break;case"schema":(s.schema=
120
- ie(m.value,e,n,o))&&i.delete(m.name);break;case"indexes":(s.indexes=Re(m.value,e,
121
- n,o))&&i.delete(m.name);break;case"relations":s.relations=we(m.value,e,n,o);break;case"\
122
- stream":s.stream=Ve(m.value,t,n,o);break}if(!ir(s)){o.push(new U([...i],e.file));
123
- return}let p=pr(e,s.indexes,s.schema);if(p.length){o.push(...p);return}return s},
124
- "getTypeFromMembers"),pr=a((e,t,r)=>{let n=r.properties,o=[];for(let{name:s,columns:i}of t)
125
- i.some(m=>!n[m])&&o.push(new _(s,e.file));return o},"validateIndexes");var me=a(e=>{let t={},r=[];for(let n in e){let o=e[n];if(!L(o)||(0,f.isExternalDeclaration)(
126
- o))continue;let s={type:Y,context:{}},i=new Set(["engine","tables"]),p=o.file;s.
127
- name=o.name;for(let c of(0,f.getModelMembers)(o))if(!(!(0,Be.isModelProperty)(c)||
128
- c.inherited))switch(c.name){default:r.push(new f.InvalidServicePropertyError(s.name,
129
- c.name,p));break;case"client":break;case"scalability":(s.scalability=Se(c.value,
130
- o,e,r))&&i.delete(c.name);break;case"engine":(s.engine=ve(c.value,o,e,r))&&i.delete(
131
- c.name);break;case"tables":(s.tables=cr(c,o,e,r))&&i.delete(c.name);break;case"v\
132
- ariables":s.variables=(0,f.getLinkedVariableList)(c,r);break;case"services":s.services=
133
- (0,f.getLinkedServiceList)(c,e,r);break}if(!mr(s)){r.push(new j([...i],p));continue}
134
- let m=lr(o,s.tables);if(m.length){r.push(...m);continue}if(t[o.name]){r.push(new f.DuplicateServiceError(
135
- o.name,p));continue}t[o.name]=s}return{services:t,errors:r}},"getDatabaseService\
136
- s"),mr=a(e=>!!e.name&&!!e.tables&&!!e.context,"isValidService"),cr=a((e,t,r,n)=>{
137
- let o=(0,f.getPropertyTuple)(e)??[],s=[];for(let i of o){let p=pe(i,t,r,n);p&&s.
138
- push(p)}return s},"getAllTables"),lr=a((e,t)=>{let r=dr(t),n=[];for(let{relations:o,
139
- schema:s,indexes:i}of t){if(!o)continue;let p=s.properties;for(let m of o){let{sourceTable:c,
140
- sourceColumn:O,targetColumn:ae,targetAlias:ce}=m;p[ae]||n.push(new S(ae,e.file)),
141
- p[ce]&&n.push(new N(ce,e.file));let se=r[c]?.schema.properties;se||n.push(new C(
142
- c,e.file)),se&&!se[O]&&n.push(new S(O,e.file));let We=r[c]?.indexes??[];m.sourceIndex=
143
- _e(We,O),m.targetIndex=_e(i,ae)}}return n},"validateRelations"),_e=a((e,t)=>e.find(
144
- ({name:r})=>r===t)?.type,"getIndexType"),dr=a(e=>e.reduce((t,r)=>({...t,[r.name]:r}),
145
- {}),"getTableMap");var Ge=a(e=>L(e)?e.name:null,"getLinkedService");var fr=a(()=>{(0,Je.registerTriggers)(),(0,Ke.registerTriggers)(),(0,Qe.tryCreateTrigger)(
146
- "@ez4/database",{"metadata:getServices":me,"metadata:getLinkedService":Ge})},"re\
111
+ ables":s.variables=(0,d.getLinkedVariableList)(p,n);break}if(cr(s))return s;n.push(
112
+ new B([...i],e.file))},"getTypeFromMembers");var le=a((e,t,r,o)=>{if(!(0,P.isTypeReference)(e))return Be(e,t,r,o);let n=(0,x.getReferenceType)(
113
+ e,r);if(n)return Be(n,t,r,o)},"getDatabaseTable"),mr=a(e=>!!e.name&&!!e.schema&&
114
+ !!e.indexes,"isValidTable"),Be=a((e,t,r,o)=>{if(Te(e))return Ge(e,t,(0,x.getModelMembers)(
115
+ e),r,o);if((0,P.isTypeObject)(e))return Ge(e,t,(0,x.getObjectMembers)(e),r,o)},"\
116
+ getTypeTable"),Ge=a((e,t,r,o,n)=>{let s={},i=new Set(["name","schema","indexes"]);
117
+ for(let l of r)if(!(!(0,P.isModelProperty)(l)||l.inherited))switch(l.name){default:
118
+ n.push(new x.InvalidServicePropertyError(t.name,l.name,e.file));break;case"name":
119
+ (s.name=(0,x.getPropertyString)(l))&&i.delete(l.name);break;case"schema":(s.schema=
120
+ pe(l.value,e,o,n))&&i.delete(l.name);break;case"indexes":(s.indexes=Ce(l.value,e,
121
+ o,n))&&i.delete(l.name);break;case"relations":s.relations=we(l.value,e,o,n);break;case"\
122
+ stream":s.stream=_e(l.value,t,o,n);break}if(!mr(s)){n.push(new q([...i],e.file));
123
+ return}let p=dr(e,s.indexes,s.schema);if(p.length){n.push(...p);return}return s},
124
+ "getTypeFromMembers"),dr=a((e,t,r)=>{let o=r.properties,n=[];for(let{name:s,columns:i}of t)
125
+ i.some(l=>!o[l])&&n.push(new H(s,e.file));return n},"validateIndexes");var ce=a(e=>{let t={},r=[];for(let o in e){let n=e[o];if(!Y(n)||(0,f.isExternalDeclaration)(
126
+ n))continue;let s=ie(n.name),i=new Set(["engine","tables"]),p=n.file;for(let c of(0,f.getModelMembers)(
127
+ n))if(!(!(0,Ke.isModelProperty)(c)||c.inherited))switch(c.name){default:r.push(new f.InvalidServicePropertyError(
128
+ s.name,c.name,p));break;case"client":break;case"scalability":s.scalability=he(c.
129
+ value,n,e,r);break;case"engine":(s.engine=Re(c.value,n,e,r))&&i.delete(c.name);break;case"\
130
+ tables":(s.tables=br(c,n,e,r))&&i.delete(c.name);break;case"variables":s.variables=
131
+ (0,f.getLinkedVariableList)(c,r);break;case"services":s.services=(0,f.getLinkedServiceList)(
132
+ c,e,r);break}if(!fr(s)){r.push(new O([...i],p));continue}let l=Tr(n,s.tables);if(l.
133
+ length){r.push(...l);continue}if(t[n.name]){r.push(new f.DuplicateServiceError(n.
134
+ name,p));continue}t[n.name]=s}return{services:t,errors:r}},"getDatabaseServices"),
135
+ fr=a(e=>(0,Qe.isObjectWith)(e,["engine","tables","variables","services"]),"isCom\
136
+ pleteService"),br=a((e,t,r,o)=>{let n=(0,f.getPropertyTuple)(e)??[],s=[];for(let i of n){
137
+ let p=le(i,t,r,o);p&&s.push(p)}return s},"getAllTables"),Tr=a((e,t)=>{let r=ur(t),
138
+ o=[];for(let{relations:n,schema:s,indexes:i}of t){if(!n)continue;let p=s.properties;
139
+ for(let l of n){let{sourceTable:c,sourceColumn:k,targetColumn:oe,targetAlias:me}=l;
140
+ p[oe]||o.push(new I(oe,e.file)),p[me]&&o.push(new C(me,e.file));let ae=r[c]?.schema.
141
+ properties;ae||o.push(new z(c,e.file)),ae&&!ae[k]&&o.push(new I(k,e.file));let er=r[c]?.
142
+ indexes??[];l.sourceIndex=Je(er,k),l.targetIndex=Je(i,oe)}}return o},"validateRe\
143
+ lations"),Je=a((e,t)=>e.find(({name:r})=>r===t)?.type,"getIndexType"),ur=a(e=>e.
144
+ reduce((t,r)=>({...t,[r.name]:r}),{}),"getTableMap");var Xe=a(e=>Y(e)?e.name:null,"getLinkedService");var yr=a(()=>{(0,Ye.registerTriggers)(),(0,Ze.registerTriggers)(),(0,Le.tryCreateTrigger)(
145
+ "@ez4/database",{"metadata:getServices":ce,"metadata:getLinkedService":Xe})},"re\
147
146
  gisterTriggers");0&&(module.exports={IncompleteEngineError,IncompleteHandlerError,IncompleteScalabilityError,
148
147
  IncompleteServiceError,IncompleteStreamError,IncompleteTableError,IncorrectIndexesTypeError,
149
148
  IncorrectRelationsTypeError,IncorrectSchemaTypeError,IncorrectStreamTypeError,Index,
150
149
  InvalidIndexReferenceError,InvalidIndexTypeError,InvalidIndexesTypeError,InvalidRelationAliasError,
151
150
  InvalidRelationColumnError,InvalidRelationTableError,InvalidRelationTargetError,
152
151
  InvalidRelationsTypeError,InvalidSchemaTypeError,InvalidStreamTypeError,ServiceType,
153
- getDatabaseServices,getDatabaseTable,getTableSchema,isDatabaseService,registerTriggers});
152
+ createDatabaseService,getDatabaseServices,getDatabaseTable,getTableSchema,isDatabaseService,
153
+ registerTriggers});
154
154
  //# sourceMappingURL=library.cjs.map