@ez4/database 0.18.0 → 0.19.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.
@@ -3,6 +3,7 @@ import type { RelationMetadata, RelationTables } from './relations.js';
3
3
  import type { IndexedTables } from './indexes.js';
4
4
  import type { TableSchemas } from './schemas.js';
5
5
  import type { Database } from './database.js';
6
+ import type { DatabaseEngine } from './engine.js';
6
7
  import type { Query } from './query.js';
7
8
  /**
8
9
  * Given an indexed table `T` and a property `P`, it returns all the indexes corresponding
@@ -18,42 +19,56 @@ export type TableRelation<P, T extends AnyObject> = PropertyExists<P, T> extends
18
19
  * Given a database service `T`, it returns all table clients.
19
20
  */
20
21
  export type TableClients<T extends Database.Service> = {
21
- [P in keyof TableSchemas<T>]: TableSchemas<T>[P] extends Database.Schema ? Table<TableSchemas<T>[P], TableIndex<P, IndexedTables<T>>, TableRelation<P, RelationTables<T>>> : never;
22
+ [P in keyof TableSchemas<T>]: TableSchemas<T>[P] extends Database.Schema ? Table<{
23
+ schema: TableSchemas<T>[P];
24
+ indexes: TableIndex<P, IndexedTables<T>>;
25
+ relations: TableRelation<P, RelationTables<T>>;
26
+ engine: T['engine'];
27
+ }> : never;
28
+ };
29
+ /**
30
+ * Internal table metadata.
31
+ */
32
+ export type TableMetadata = {
33
+ schema: Database.Schema;
34
+ indexes: Database.Indexes;
35
+ relations: RelationMetadata;
36
+ engine: DatabaseEngine;
22
37
  };
23
38
  /**
24
39
  * Table client.
25
40
  */
26
- export interface Table<T extends Database.Schema, I extends Database.Indexes, R extends RelationMetadata> {
41
+ export interface Table<T extends TableMetadata> {
27
42
  /**
28
43
  * Insert one record into the database.
29
44
  *
30
45
  * @param query Input query.
31
46
  */
32
- insertOne<S extends Query.SelectInput<T, R> = never>(query: Query.InsertOneInput<T, S, R>): Promise<Query.InsertOneResult<T, S, R>>;
47
+ insertOne<S extends Query.SelectInput<T> = never>(query: Query.InsertOneInput<S, T>): Promise<Query.InsertOneResult<S, T>>;
33
48
  /**
34
49
  * Find one database record.
35
50
  *
36
51
  * @param query Input query.
37
52
  */
38
- findOne<S extends Query.SelectInput<T, R>>(query: Query.FindOneInput<T, S, I, R>): Promise<Query.FindOneResult<T, S, R>>;
53
+ findOne<S extends Query.SelectInput<T>>(query: Query.FindOneInput<S, T>): Promise<Query.FindOneResult<S, T>>;
39
54
  /**
40
55
  * Update one database record.
41
56
  *
42
57
  * @param query Input query.
43
58
  */
44
- updateOne<S extends Query.SelectInput<T, R> = never>(query: Query.UpdateOneInput<T, S, I, R>): Promise<Query.UpdateOneResult<T, S, R>>;
59
+ updateOne<S extends Query.SelectInput<T> = never>(query: Query.UpdateOneInput<S, T>): Promise<Query.UpdateOneResult<S, T>>;
45
60
  /**
46
61
  * Try to insert a database record, and if it already exists, perform an update instead.
47
62
  *
48
63
  * @param query Input query.
49
64
  */
50
- upsertOne<S extends Query.SelectInput<T, R> = never>(query: Query.UpsertOneInput<T, S, I, R>): Promise<Query.UpsertOneResult<T, S, R>>;
65
+ upsertOne<S extends Query.SelectInput<T> = never>(query: Query.UpsertOneInput<S, T>): Promise<Query.UpsertOneResult<S, T>>;
51
66
  /**
52
67
  * Delete one database record.
53
68
  *
54
69
  * @param query Input query.
55
70
  */
56
- deleteOne<S extends Query.SelectInput<T, R> = never>(query: Query.DeleteOneInput<T, S, I, R>): Promise<Query.DeleteOneResult<T, S, R>>;
71
+ deleteOne<S extends Query.SelectInput<T> = never>(query: Query.DeleteOneInput<S, T>): Promise<Query.DeleteOneResult<S, T>>;
57
72
  /**
58
73
  * Insert multiple records into the database.
59
74
  *
@@ -65,23 +80,23 @@ export interface Table<T extends Database.Schema, I extends Database.Indexes, R
65
80
  *
66
81
  * @param query Input query.
67
82
  */
68
- findMany<S extends Query.SelectInput<T, R>, C extends boolean = false>(query: Query.FindManyInput<T, S, I, R, C>): Promise<Query.FindManyResult<T, S, R, C>>;
83
+ findMany<S extends Query.SelectInput<T>, C extends boolean = false>(query: Query.FindManyInput<S, T, C>): Promise<Query.FindManyResult<S, T, C>>;
69
84
  /**
70
85
  * Update multiple database records.
71
86
  *
72
87
  * @param query Input query.
73
88
  */
74
- updateMany<S extends Query.SelectInput<T, R> = never>(query: Query.UpdateManyInput<T, S, R>): Promise<Query.UpdateManyResult<T, S, R>>;
89
+ updateMany<S extends Query.SelectInput<T> = never>(query: Query.UpdateManyInput<S, T>): Promise<Query.UpdateManyResult<S, T>>;
75
90
  /**
76
91
  * Delete multiple database records.
77
92
  *
78
93
  * @param query Input query.
79
94
  */
80
- deleteMany<S extends Query.SelectInput<T, R> = never>(query: Query.DeleteManyInput<T, S, R>): Promise<Query.DeleteManyResult<T, S, R>>;
95
+ deleteMany<S extends Query.SelectInput<T> = never>(query: Query.DeleteManyInput<S, T>): Promise<Query.DeleteManyResult<S, T>>;
81
96
  /**
82
97
  * Count database records.
83
98
  *
84
99
  * @param query Input query.
85
100
  */
86
- count(query: Query.CountInput<T, R>): Promise<number>;
101
+ count(query: Query.CountInput<T>): Promise<number>;
87
102
  }
@@ -1,16 +1,22 @@
1
- import type { AnyObject } from '@ez4/utils';
2
- import type { TableIndex, TableRelation } from './table.js';
3
- import type { RelationMetadata, RelationTables } from './relations.js';
1
+ import type { TableIndex, TableMetadata, TableRelation } from './table.js';
2
+ import type { RelationTables } from './relations.js';
4
3
  import type { IndexedTables } from './indexes.js';
5
- import type { TransactionType } from './engine.js';
4
+ import type { EngineUtils } from './engine.js';
6
5
  import type { TableSchemas } from './schemas.js';
7
6
  import type { Database } from './database.js';
8
7
  import type { Client } from './client.js';
9
8
  import type { Query } from './query.js';
10
9
  /**
11
- * Transaction builder types.
10
+ * Transaction mode.
12
11
  */
13
- export declare namespace Transaction {
12
+ export declare const enum TransactionMode {
13
+ Interactive = "interactive",
14
+ Static = "static"
15
+ }
16
+ /**
17
+ * Transaction utils.
18
+ */
19
+ export declare namespace TransactionUtils {
14
20
  /**
15
21
  * Extract the operation result from an interactive transaction.
16
22
  */
@@ -18,7 +24,7 @@ export declare namespace Transaction {
18
24
  /**
19
25
  * Determines the transaction operation based on the given database service.
20
26
  */
21
- export type Type<T extends Database.Service, R> = EngineTransactionType<T> extends TransactionType.Interactive ? StaticOperationType<T> | InteractiveOperationType<T, R> : StaticOperationType<T>;
27
+ export type Type<T extends Database.Service, R> = EngineUtils.GetTransactionMode<T> extends TransactionMode.Interactive ? StaticOperationType<T> | InteractiveOperationType<T, R> : StaticOperationType<T>;
22
28
  /**
23
29
  * Interactive operation type.
24
30
  */
@@ -27,23 +33,22 @@ export declare namespace Transaction {
27
33
  * Static operation type.
28
34
  */
29
35
  export type StaticOperationType<T extends Database.Service> = {
30
- [P in keyof TableSchemas<T>]?: (TableSchemas<T>[P] extends Database.Schema ? AnyOperationType<TableSchemas<T>[P], TableIndex<P, IndexedTables<T>>, TableRelation<P, RelationTables<T>>> : AnyObject)[];
36
+ [P in keyof TableSchemas<T>]?: (TableSchemas<T>[P] extends Database.Schema ? AnyOperationType<{
37
+ schema: TableSchemas<T>[P];
38
+ indexes: TableIndex<P, IndexedTables<T>>;
39
+ relations: TableRelation<P, RelationTables<T>>;
40
+ engine: T['engine'];
41
+ }> : never)[];
31
42
  };
32
- /**
33
- * Extract the transaction type from the given database service.
34
- */
35
- type EngineTransactionType<T extends Database.Service> = T['engine'] extends {
36
- transaction: infer O;
37
- } ? O : never;
38
- type AnyOperationType<T extends Database.Schema, I extends Database.Indexes, R extends RelationMetadata> = InsertOperationType<T, R> | UpdateOperationType<T, I, R> | DeleteOperationType<T, I, R>;
39
- type InsertOperationType<T extends Database.Schema, R extends RelationMetadata> = {
40
- insert: Omit<Query.InsertOneInput<T, Query.SelectInput<T, R>, R>, 'select'>;
43
+ type AnyOperationType<T extends TableMetadata> = InsertOperationType<T> | UpdateOperationType<T> | DeleteOperationType<T>;
44
+ type InsertOperationType<T extends TableMetadata> = {
45
+ insert: Omit<Query.InsertOneInput<Query.SelectInput<T>, T>, 'select'>;
41
46
  };
42
- type UpdateOperationType<T extends Database.Schema, I extends Database.Indexes, R extends RelationMetadata> = {
43
- update: Omit<Query.UpdateOneInput<T, Query.SelectInput<T, R>, I, R>, 'select' | 'include'>;
47
+ type UpdateOperationType<T extends TableMetadata> = {
48
+ update: Omit<Query.UpdateOneInput<Query.SelectInput<T>, T>, 'select' | 'include'>;
44
49
  };
45
- type DeleteOperationType<T extends Database.Schema, I extends Database.Indexes, R extends RelationMetadata> = {
46
- delete: Omit<Query.DeleteOneInput<T, Query.SelectInput<T, R>, I, R>, 'select' | 'include'>;
50
+ type DeleteOperationType<T extends TableMetadata> = {
51
+ delete: Omit<Query.DeleteOneInput<Query.SelectInput<T>, T>, 'select' | 'include'>;
47
52
  };
48
53
  export {};
49
54
  }
@@ -1,6 +1,13 @@
1
- import type { ParametersType, TransactionType } from '../services/engine.js';
1
+ import { ParametersMode } from '../services/parameters.js';
2
+ import { TransactionMode } from '../services/transaction.js';
3
+ import { InsensitiveMode } from '../services/insensitive.js';
4
+ import { PaginationMode } from '../services/pagination.js';
5
+ import { OrderMode } from '../services/order.js';
2
6
  export type DatabaseEngine = {
3
- transaction: TransactionType;
4
- parameters: ParametersType;
7
+ parametersMode: ParametersMode;
8
+ transactionMode: TransactionMode;
9
+ insensitiveMode: InsensitiveMode;
10
+ paginationMode: PaginationMode;
11
+ orderMode: OrderMode;
5
12
  name: string;
6
13
  };
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.18.0",
4
+ "version": "0.19.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -42,10 +42,10 @@
42
42
  "live:publish": "npm run test && npm publish --access public"
43
43
  },
44
44
  "dependencies": {
45
- "@ez4/common": "^0.18.0",
46
- "@ez4/project": "^0.18.0",
47
- "@ez4/reflection": "^0.18.0",
48
- "@ez4/schema": "^0.18.0",
49
- "@ez4/utils": "^0.18.0"
45
+ "@ez4/common": "^0.19.0",
46
+ "@ez4/project": "^0.19.0",
47
+ "@ez4/reflection": "^0.19.0",
48
+ "@ez4/schema": "^0.19.0",
49
+ "@ez4/utils": "^0.19.0"
50
50
  }
51
51
  }