@zhin.js/database 1.0.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/LICENSE +21 -0
- package/README.md +93 -0
- package/lib/base/database.d.ts +71 -0
- package/lib/base/database.d.ts.map +1 -0
- package/lib/base/database.js +101 -0
- package/lib/base/database.js.map +1 -0
- package/lib/base/dialect.d.ts +34 -0
- package/lib/base/dialect.d.ts.map +1 -0
- package/lib/base/dialect.js +21 -0
- package/lib/base/dialect.js.map +1 -0
- package/lib/base/index.d.ts +6 -0
- package/lib/base/index.d.ts.map +1 -0
- package/lib/base/index.js +6 -0
- package/lib/base/index.js.map +1 -0
- package/lib/base/model.d.ts +53 -0
- package/lib/base/model.d.ts.map +1 -0
- package/lib/base/model.js +65 -0
- package/lib/base/model.js.map +1 -0
- package/lib/base/query-classes.d.ts +68 -0
- package/lib/base/query-classes.d.ts.map +1 -0
- package/lib/base/query-classes.js +178 -0
- package/lib/base/query-classes.js.map +1 -0
- package/lib/base/thenable.d.ts +15 -0
- package/lib/base/thenable.d.ts.map +1 -0
- package/lib/base/thenable.js +33 -0
- package/lib/base/thenable.js.map +1 -0
- package/lib/dialects/memory.d.ts +52 -0
- package/lib/dialects/memory.d.ts.map +1 -0
- package/lib/dialects/memory.js +772 -0
- package/lib/dialects/memory.js.map +1 -0
- package/lib/dialects/mongodb.d.ts +85 -0
- package/lib/dialects/mongodb.d.ts.map +1 -0
- package/lib/dialects/mongodb.js +461 -0
- package/lib/dialects/mongodb.js.map +1 -0
- package/lib/dialects/mysql.d.ts +33 -0
- package/lib/dialects/mysql.d.ts.map +1 -0
- package/lib/dialects/mysql.js +132 -0
- package/lib/dialects/mysql.js.map +1 -0
- package/lib/dialects/pg.d.ts +33 -0
- package/lib/dialects/pg.d.ts.map +1 -0
- package/lib/dialects/pg.js +132 -0
- package/lib/dialects/pg.js.map +1 -0
- package/lib/dialects/redis.d.ts +87 -0
- package/lib/dialects/redis.d.ts.map +1 -0
- package/lib/dialects/redis.js +500 -0
- package/lib/dialects/redis.js.map +1 -0
- package/lib/dialects/sqlite.d.ts +46 -0
- package/lib/dialects/sqlite.d.ts.map +1 -0
- package/lib/dialects/sqlite.js +201 -0
- package/lib/dialects/sqlite.js.map +1 -0
- package/lib/index.d.ts +18 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +18 -0
- package/lib/index.js.map +1 -0
- package/lib/registry.d.ts +37 -0
- package/lib/registry.d.ts.map +1 -0
- package/lib/registry.js +21 -0
- package/lib/registry.js.map +1 -0
- package/lib/type/document/database.d.ts +60 -0
- package/lib/type/document/database.d.ts.map +1 -0
- package/lib/type/document/database.js +242 -0
- package/lib/type/document/database.js.map +1 -0
- package/lib/type/document/model.d.ts +42 -0
- package/lib/type/document/model.d.ts.map +1 -0
- package/lib/type/document/model.js +65 -0
- package/lib/type/document/model.js.map +1 -0
- package/lib/type/keyvalue/database.d.ts +64 -0
- package/lib/type/keyvalue/database.d.ts.map +1 -0
- package/lib/type/keyvalue/database.js +214 -0
- package/lib/type/keyvalue/database.js.map +1 -0
- package/lib/type/keyvalue/model.d.ts +107 -0
- package/lib/type/keyvalue/model.d.ts.map +1 -0
- package/lib/type/keyvalue/model.js +261 -0
- package/lib/type/keyvalue/model.js.map +1 -0
- package/lib/type/related/database.d.ts +32 -0
- package/lib/type/related/database.d.ts.map +1 -0
- package/lib/type/related/database.js +334 -0
- package/lib/type/related/database.js.map +1 -0
- package/lib/type/related/model.d.ts +43 -0
- package/lib/type/related/model.d.ts.map +1 -0
- package/lib/type/related/model.js +108 -0
- package/lib/type/related/model.js.map +1 -0
- package/lib/types.d.ts +251 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +28 -0
- package/lib/types.js.map +1 -0
- package/package.json +54 -0
- package/src/base/database.ts +128 -0
- package/src/base/dialect.ts +76 -0
- package/src/base/index.ts +5 -0
- package/src/base/model.ts +89 -0
- package/src/base/query-classes.ts +217 -0
- package/src/base/thenable.ts +54 -0
- package/src/dialects/memory.ts +880 -0
- package/src/dialects/mongodb.ts +533 -0
- package/src/dialects/mysql.ts +157 -0
- package/src/dialects/pg.ts +157 -0
- package/src/dialects/redis.ts +598 -0
- package/src/dialects/sqlite.ts +233 -0
- package/src/index.ts +20 -0
- package/src/registry.ts +59 -0
- package/src/type/document/database.ts +283 -0
- package/src/type/document/model.ts +86 -0
- package/src/type/keyvalue/database.ts +261 -0
- package/src/type/keyvalue/model.ts +339 -0
- package/src/type/related/database.ts +392 -0
- package/src/type/related/model.ts +117 -0
- package/src/types.ts +403 -0
- package/tsconfig.json +24 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 凉菜
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# @zhin.js/database
|
|
2
|
+
|
|
3
|
+
Universal database driver for zhin framework.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @zhin.js/database
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { Database } from '@zhin.js/database';
|
|
15
|
+
import '@zhin.js/driver-sqlite'; // 导入方言
|
|
16
|
+
|
|
17
|
+
// 创建数据库
|
|
18
|
+
const db = Database.create('sqlite', {
|
|
19
|
+
filename: './database.sqlite'
|
|
20
|
+
}, {
|
|
21
|
+
users: {
|
|
22
|
+
id: { type: 'integer', primary: true, autoIncrement: true },
|
|
23
|
+
name: { type: 'string', nullable: false },
|
|
24
|
+
email: { type: 'string', unique: true }
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
await db.start();
|
|
29
|
+
|
|
30
|
+
// 使用模型
|
|
31
|
+
const userModel = db.model('users');
|
|
32
|
+
const user = await userModel.create({
|
|
33
|
+
name: 'John Doe',
|
|
34
|
+
email: 'john@example.com'
|
|
35
|
+
});
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Supported Databases
|
|
39
|
+
|
|
40
|
+
### Relational Databases
|
|
41
|
+
- **SQLite**: `@zhin.js/driver-sqlite`
|
|
42
|
+
- **MySQL**: `@zhin.js/driver-mysql`
|
|
43
|
+
- **PostgreSQL**: `@zhin.js/driver-postgresql`
|
|
44
|
+
|
|
45
|
+
### NoSQL Databases
|
|
46
|
+
- **MongoDB**: `@zhin.js/driver-mongodb`
|
|
47
|
+
- **Redis**: `@zhin.js/driver-redis`
|
|
48
|
+
|
|
49
|
+
### In-Memory Database
|
|
50
|
+
- **Memory**: Built-in (for testing)
|
|
51
|
+
|
|
52
|
+
## Database Types
|
|
53
|
+
|
|
54
|
+
### RelatedDatabase
|
|
55
|
+
For relational databases (SQLite, MySQL, PostgreSQL)
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
import { RelatedDatabase } from '@zhin.js/database';
|
|
59
|
+
|
|
60
|
+
const db = new RelatedDatabase(dialect, schemas);
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### DocumentDatabase
|
|
64
|
+
For document databases (MongoDB)
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
import { DocumentDatabase } from '@zhin.js/database';
|
|
68
|
+
|
|
69
|
+
const db = new DocumentDatabase(dialect, schemas);
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### KeyValueDatabase
|
|
73
|
+
For key-value stores (Redis)
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
import { KeyValueDatabase } from '@zhin.js/database';
|
|
77
|
+
|
|
78
|
+
const db = new KeyValueDatabase(dialect, schemas);
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Features
|
|
82
|
+
|
|
83
|
+
- **Type Safety**: Full TypeScript support
|
|
84
|
+
- **Unified API**: Same interface for all database types
|
|
85
|
+
- **Query Builder**: Fluent query building
|
|
86
|
+
- **Schema Management**: Automatic table/collection creation
|
|
87
|
+
- **Connection Management**: Automatic connection handling
|
|
88
|
+
- **Transaction Support**: Built-in transaction support
|
|
89
|
+
- **Migration Support**: Schema evolution support
|
|
90
|
+
|
|
91
|
+
## License
|
|
92
|
+
|
|
93
|
+
MIT
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { Dialect } from './dialect.js';
|
|
2
|
+
import { Model } from './model.js';
|
|
3
|
+
import { Schema, QueryParams, AlterSchema, Condition, BuildQueryResult } from '../types.js';
|
|
4
|
+
import * as QueryClasses from './query-classes.js';
|
|
5
|
+
/**
|
|
6
|
+
* 基础数据库抽象类
|
|
7
|
+
* 定义所有数据库类型的通用接口和行为
|
|
8
|
+
*/
|
|
9
|
+
export declare abstract class Database<D = any, S extends Record<string, object> = Record<string, object>, Q = string> {
|
|
10
|
+
readonly dialect: Dialect<D, Q>;
|
|
11
|
+
schemas?: Database.Schemas<S> | undefined;
|
|
12
|
+
protected hasStarted: boolean;
|
|
13
|
+
readonly models: Map<string, Model<D, object, Q>>;
|
|
14
|
+
constructor(dialect: Dialect<D, Q>, schemas?: Database.Schemas<S> | undefined);
|
|
15
|
+
/**
|
|
16
|
+
* 数据库是否已启动
|
|
17
|
+
*/
|
|
18
|
+
get isStarted(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* 启动数据库
|
|
21
|
+
*/
|
|
22
|
+
start(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* 停止数据库
|
|
25
|
+
*/
|
|
26
|
+
stop(): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* 健康检查
|
|
29
|
+
*/
|
|
30
|
+
healthCheck(): Promise<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* 执行原生查询
|
|
33
|
+
*/
|
|
34
|
+
query<U = any>(sql: Q, params?: any[]): Promise<U>;
|
|
35
|
+
abstract buildQuery<U extends object = any>(params: QueryParams<U>): BuildQueryResult<Q>;
|
|
36
|
+
/**
|
|
37
|
+
* 获取数据库方言名称
|
|
38
|
+
*/
|
|
39
|
+
get dialectName(): string;
|
|
40
|
+
/**
|
|
41
|
+
* 获取数据库配置
|
|
42
|
+
*/
|
|
43
|
+
get config(): any;
|
|
44
|
+
/**
|
|
45
|
+
* 抽象方法:初始化数据库
|
|
46
|
+
*/
|
|
47
|
+
protected abstract initialize(): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* 创建表
|
|
50
|
+
*/
|
|
51
|
+
create<T extends object>(name: string, schema: Schema<T>): QueryClasses.Creation<T, D, Q>;
|
|
52
|
+
alter<T extends object>(name: string, alterations: AlterSchema<T>): QueryClasses.Alteration<T, D, Q>;
|
|
53
|
+
select<T extends object, K extends keyof T>(name: string, fields: Array<K>): QueryClasses.Selection<Pick<T, K>, K, D, Q>;
|
|
54
|
+
insert<T extends object>(name: string, data: T): QueryClasses.Insertion<T, D, Q>;
|
|
55
|
+
update<T extends object>(name: string, update: Partial<T>): QueryClasses.Updation<T, D, Q>;
|
|
56
|
+
delete<T extends object>(name: string, condition: Condition<T>): QueryClasses.Deletion<T, D, Q>;
|
|
57
|
+
/**
|
|
58
|
+
* 抽象方法:获取所有模型名称
|
|
59
|
+
*/
|
|
60
|
+
abstract getModelNames(): string[];
|
|
61
|
+
/**
|
|
62
|
+
* 抽象方法:清理资源
|
|
63
|
+
*/
|
|
64
|
+
dispose(): Promise<void>;
|
|
65
|
+
}
|
|
66
|
+
export declare namespace Database {
|
|
67
|
+
type Schemas<S extends Record<string, object>> = {
|
|
68
|
+
[K in keyof S]: Schema<S[K]>;
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/base/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import * as QueryClasses from './query-classes.js';
|
|
2
|
+
/**
|
|
3
|
+
* 基础数据库抽象类
|
|
4
|
+
* 定义所有数据库类型的通用接口和行为
|
|
5
|
+
*/
|
|
6
|
+
export class Database {
|
|
7
|
+
dialect;
|
|
8
|
+
schemas;
|
|
9
|
+
hasStarted = false;
|
|
10
|
+
models = new Map();
|
|
11
|
+
constructor(dialect, schemas) {
|
|
12
|
+
this.dialect = dialect;
|
|
13
|
+
this.schemas = schemas;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 数据库是否已启动
|
|
17
|
+
*/
|
|
18
|
+
get isStarted() {
|
|
19
|
+
return this.dialect !== undefined && this.dialect.isConnected();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 启动数据库
|
|
23
|
+
*/
|
|
24
|
+
async start() {
|
|
25
|
+
await this.dialect.connect();
|
|
26
|
+
await this.initialize();
|
|
27
|
+
this.hasStarted = true;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 停止数据库
|
|
31
|
+
*/
|
|
32
|
+
async stop() {
|
|
33
|
+
await this.dialect.disconnect();
|
|
34
|
+
this.hasStarted = false;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 健康检查
|
|
38
|
+
*/
|
|
39
|
+
async healthCheck() {
|
|
40
|
+
return this.dialect.healthCheck();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 执行原生查询
|
|
44
|
+
*/
|
|
45
|
+
async query(sql, params) {
|
|
46
|
+
if (!this.isStarted) {
|
|
47
|
+
throw new Error('Database not started');
|
|
48
|
+
}
|
|
49
|
+
return this.dialect.query(sql, params);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 获取数据库方言名称
|
|
53
|
+
*/
|
|
54
|
+
get dialectName() {
|
|
55
|
+
if (this.dialect === undefined) {
|
|
56
|
+
throw new Error('Database not started');
|
|
57
|
+
}
|
|
58
|
+
return this.dialect.name;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 获取数据库配置
|
|
62
|
+
*/
|
|
63
|
+
get config() {
|
|
64
|
+
if (this.dialect === undefined) {
|
|
65
|
+
throw new Error('Database not started');
|
|
66
|
+
}
|
|
67
|
+
return this.dialect.config;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 创建表
|
|
71
|
+
*/
|
|
72
|
+
create(name, schema) {
|
|
73
|
+
return new QueryClasses.Creation(this, name, schema);
|
|
74
|
+
}
|
|
75
|
+
alter(name, alterations) {
|
|
76
|
+
return new QueryClasses.Alteration(this, name, alterations);
|
|
77
|
+
}
|
|
78
|
+
select(name, fields) {
|
|
79
|
+
return new QueryClasses.Selection(this, name, fields);
|
|
80
|
+
}
|
|
81
|
+
insert(name, data) {
|
|
82
|
+
return new QueryClasses.Insertion(this, name, data);
|
|
83
|
+
}
|
|
84
|
+
update(name, update) {
|
|
85
|
+
return new QueryClasses.Updation(this, name, update);
|
|
86
|
+
}
|
|
87
|
+
delete(name, condition) {
|
|
88
|
+
return new QueryClasses.Deletion(this, name).where(condition);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 抽象方法:清理资源
|
|
92
|
+
*/
|
|
93
|
+
async dispose() {
|
|
94
|
+
this.models.clear();
|
|
95
|
+
if (this.dialect === undefined) {
|
|
96
|
+
throw new Error('Database not started');
|
|
97
|
+
}
|
|
98
|
+
await this.dialect.dispose();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/base/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export declare abstract class Dialect<T, Q> {
|
|
2
|
+
readonly name: string;
|
|
3
|
+
readonly config: T;
|
|
4
|
+
protected constructor(name: string, config: T);
|
|
5
|
+
abstract isConnected(): boolean;
|
|
6
|
+
abstract connect(): Promise<void>;
|
|
7
|
+
abstract disconnect(): Promise<void>;
|
|
8
|
+
abstract healthCheck(): Promise<boolean>;
|
|
9
|
+
abstract query<U = any>(query: Q, params?: any[]): Promise<U>;
|
|
10
|
+
abstract mapColumnType(type: string): string;
|
|
11
|
+
abstract quoteIdentifier(identifier: string): string;
|
|
12
|
+
abstract getParameterPlaceholder(index: number): string;
|
|
13
|
+
abstract getStatementTerminator(): string;
|
|
14
|
+
abstract formatBoolean(value: boolean): string;
|
|
15
|
+
abstract formatDate(value: Date): string;
|
|
16
|
+
abstract formatJson(value: any): string;
|
|
17
|
+
abstract escapeString(value: string): string;
|
|
18
|
+
abstract formatDefaultValue(value: any): string;
|
|
19
|
+
abstract formatLimit(limit: number): string;
|
|
20
|
+
abstract formatOffset(offset: number): string;
|
|
21
|
+
abstract formatLimitOffset(limit: number, offset: number): string;
|
|
22
|
+
abstract formatCreateTable(tableName: string, columns: string[]): string;
|
|
23
|
+
abstract formatAlterTable(tableName: string, alterations: string[]): string;
|
|
24
|
+
abstract formatDropTable(tableName: string, ifExists?: boolean): string;
|
|
25
|
+
abstract formatDropIndex(indexName: string, tableName: string, ifExists?: boolean): string;
|
|
26
|
+
abstract dispose(): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
export declare namespace Dialect {
|
|
29
|
+
type Creator<D, Q> = (config: D) => Dialect<D, Q>;
|
|
30
|
+
type Constructor<D, Q> = new (config: D) => Dialect<D, Q>;
|
|
31
|
+
type Factory<D, Q> = Creator<D, Q> | Constructor<D, Q>;
|
|
32
|
+
function isConstructor<D, Q>(fn: Factory<D, Q>): fn is Constructor<D, Q>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=dialect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../src/base/dialect.ts"],"names":[],"mappings":"AAmCA,8BAAsB,OAAO,CAAC,CAAC,EAAC,CAAC;IAC/B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,MAAM,EAAE,CAAC,CAAC;IAE1B,SAAS,aAAa,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAM7C,QAAQ,CAAC,WAAW,IAAI,OAAO;IAC/B,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACjC,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IACpC,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAC7D,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAC5C,QAAQ,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IACpD,QAAQ,CAAC,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IACvD,QAAQ,CAAC,sBAAsB,IAAI,MAAM;IACzC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAC9C,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM;IACxC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IACvC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAC5C,QAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAC/C,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAC3C,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAC7C,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IACjE,QAAQ,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM;IACxE,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM;IAC3E,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM;IACvE,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM;IAC1F,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAClC;AACD,yBAAiB,OAAO,CAAC;IACvB,KAAY,OAAO,CAAC,CAAC,EAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;IACvD,KAAY,WAAW,CAAC,CAAC,EAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;IAC/D,KAAY,OAAO,CAAC,CAAC,EAAC,CAAC,IAAI,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;IAC3D,SAAgB,aAAa,CAAC,CAAC,EAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC,GAAG,EAAE,IAAI,WAAW,CAAC,CAAC,EAAC,CAAC,CAAC,CAE3E;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Database Dialect Interface
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// SQL Builder Base Class
|
|
6
|
+
// ============================================================================
|
|
7
|
+
export class Dialect {
|
|
8
|
+
name;
|
|
9
|
+
config;
|
|
10
|
+
constructor(name, config) {
|
|
11
|
+
this.name = name;
|
|
12
|
+
this.config = config;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
(function (Dialect) {
|
|
16
|
+
function isConstructor(fn) {
|
|
17
|
+
return fn.prototype && fn.prototype.constructor === fn;
|
|
18
|
+
}
|
|
19
|
+
Dialect.isConstructor = isConstructor;
|
|
20
|
+
})(Dialect || (Dialect = {}));
|
|
21
|
+
//# sourceMappingURL=dialect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.js","sourceRoot":"","sources":["../../src/base/dialect.ts"],"names":[],"mappings":"AA0BA,+EAA+E;AAC/E,6BAA6B;AAC7B,+EAA+E;AAG/E,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E,MAAM,OAAgB,OAAO;IACX,IAAI,CAAS;IACb,MAAM,CAAI;IAE1B,YAAsB,IAAY,EAAE,MAAS;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CAyBF;AACD,WAAiB,OAAO;IAItB,SAAgB,aAAa,CAAM,EAAgB;QACjD,OAAO,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,EAAE,CAAC;IACzD,CAAC;IAFe,qBAAa,gBAE5B,CAAA;AACH,CAAC,EAPgB,OAAO,KAAP,OAAO,QAOvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Database } from './database.js';
|
|
2
|
+
import type { Dialect } from './dialect.js';
|
|
3
|
+
import { AlterSchema, Condition } from '../types.js';
|
|
4
|
+
import * as QueryClasses from './query-classes.js';
|
|
5
|
+
/**
|
|
6
|
+
* 基础模型抽象类
|
|
7
|
+
* 定义所有模型类型的通用接口和行为
|
|
8
|
+
*/
|
|
9
|
+
export declare abstract class Model<C = any, O extends object = object, Q = string> {
|
|
10
|
+
readonly database: Database<C, any, Q>;
|
|
11
|
+
readonly name: string;
|
|
12
|
+
constructor(database: Database<C, any, Q>, name: string);
|
|
13
|
+
/**
|
|
14
|
+
* 获取数据库方言
|
|
15
|
+
*/
|
|
16
|
+
get dialect(): Dialect<C, Q>;
|
|
17
|
+
/**
|
|
18
|
+
* 获取数据库是否已启动
|
|
19
|
+
*/
|
|
20
|
+
get isStarted(): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* 获取模型名称
|
|
23
|
+
*/
|
|
24
|
+
get modelName(): string;
|
|
25
|
+
alter(alterations: AlterSchema<O>): QueryClasses.Alteration<O, C, Q>;
|
|
26
|
+
select<K extends keyof O>(...fields: Array<K>): QueryClasses.Selection<Pick<O, K>, K, C, Q>;
|
|
27
|
+
insert(data: O): QueryClasses.Insertion<O, C, Q>;
|
|
28
|
+
update(update: Partial<O>): QueryClasses.Updation<O, C, Q>;
|
|
29
|
+
delete(condition: Condition<O>): QueryClasses.Deletion<O, C, Q>;
|
|
30
|
+
/**
|
|
31
|
+
* 验证查询条件
|
|
32
|
+
*/
|
|
33
|
+
protected validateQuery(query: any): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* 验证数据
|
|
36
|
+
*/
|
|
37
|
+
protected validateData(data: any): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* 处理错误
|
|
40
|
+
*/
|
|
41
|
+
protected handleError(error: Error, operation: string): never;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 模型信息接口
|
|
45
|
+
*/
|
|
46
|
+
export interface ModelInfo {
|
|
47
|
+
name: string;
|
|
48
|
+
databaseName: string;
|
|
49
|
+
dialectName: string;
|
|
50
|
+
isStarted: boolean;
|
|
51
|
+
modelCount: number;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/base/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AAGnD;;;GAGG;AACH,8BAAsB,KAAK,CAAC,CAAC,GAAC,GAAG,EAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAC,CAAC,GAAG,MAAM;aAElD,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;aAC7B,IAAI,EAAE,MAAM;gBADZ,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAC7B,IAAI,EAAE,MAAM;IAG9B;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC,CAE1B;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAGpE,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAI3F,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAIhD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAI1D,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAG/D;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAI5C;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO;IAI1C;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK;CAI9D;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 基础模型抽象类
|
|
3
|
+
* 定义所有模型类型的通用接口和行为
|
|
4
|
+
*/
|
|
5
|
+
export class Model {
|
|
6
|
+
database;
|
|
7
|
+
name;
|
|
8
|
+
constructor(database, name) {
|
|
9
|
+
this.database = database;
|
|
10
|
+
this.name = name;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 获取数据库方言
|
|
14
|
+
*/
|
|
15
|
+
get dialect() {
|
|
16
|
+
return this.database.dialect;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 获取数据库是否已启动
|
|
20
|
+
*/
|
|
21
|
+
get isStarted() {
|
|
22
|
+
return this.database.isStarted;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 获取模型名称
|
|
26
|
+
*/
|
|
27
|
+
get modelName() {
|
|
28
|
+
return this.name;
|
|
29
|
+
}
|
|
30
|
+
alter(alterations) {
|
|
31
|
+
return this.database.alter(this.name, alterations);
|
|
32
|
+
}
|
|
33
|
+
select(...fields) {
|
|
34
|
+
return this.database.select(this.name, fields);
|
|
35
|
+
}
|
|
36
|
+
insert(data) {
|
|
37
|
+
return this.database.insert(this.name, data);
|
|
38
|
+
}
|
|
39
|
+
update(update) {
|
|
40
|
+
return this.database.update(this.name, update);
|
|
41
|
+
}
|
|
42
|
+
delete(condition) {
|
|
43
|
+
return this.database.delete(this.name, condition);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 验证查询条件
|
|
47
|
+
*/
|
|
48
|
+
validateQuery(query) {
|
|
49
|
+
return query !== null && query !== undefined;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 验证数据
|
|
53
|
+
*/
|
|
54
|
+
validateData(data) {
|
|
55
|
+
return data !== null && data !== undefined;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 处理错误
|
|
59
|
+
*/
|
|
60
|
+
handleError(error, operation) {
|
|
61
|
+
const message = `Model ${this.name} ${operation} failed: ${error.message}`;
|
|
62
|
+
throw new Error(message);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/base/model.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,OAAgB,KAAK;IAEP;IACA;IAFlB,YACkB,QAA6B,EAC7B,IAAY;QADZ,aAAQ,GAAR,QAAQ,CAAqB;QAC7B,SAAI,GAAJ,IAAI,CAAQ;IAC3B,CAAC;IAEJ;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,WAA2B;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAI,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,CAAoB,GAAG,MAAgB;QAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAO,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,IAAO;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,MAAkB;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAI,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,SAAuB;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAI,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC;IACD;;OAEG;IACO,aAAa,CAAC,KAAU;QAChC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;IAC/C,CAAC;IAED;;OAEG;IACO,YAAY,CAAC,IAAS;QAC9B,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC;IAC7C,CAAC;IAED;;OAEG;IACO,WAAW,CAAC,KAAY,EAAE,SAAiB;QACnD,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,IAAI,IAAI,SAAS,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { Database } from './database.js';
|
|
2
|
+
import { ThenableQuery } from './thenable.js';
|
|
3
|
+
import { QueryParams, AlterSchema, Condition, Schema } from '../types.js';
|
|
4
|
+
export declare class Alteration<T extends object, C = any, D = string> extends ThenableQuery<void, C, D> {
|
|
5
|
+
private readonly tableName;
|
|
6
|
+
private readonly alterations;
|
|
7
|
+
constructor(database: Database<C, Record<string, object>, D>, tableName: string, alterations: AlterSchema<T>);
|
|
8
|
+
protected getQueryParams(): QueryParams<T>;
|
|
9
|
+
}
|
|
10
|
+
export declare class DroppingTable<T extends object = any, C = any, D = string> extends ThenableQuery<number, C, D> {
|
|
11
|
+
private readonly tableName;
|
|
12
|
+
private conditions;
|
|
13
|
+
constructor(database: Database<C, Record<string, object>, any>, tableName: string);
|
|
14
|
+
where(query: Condition<T>): this;
|
|
15
|
+
protected getQueryParams(): QueryParams<T>;
|
|
16
|
+
}
|
|
17
|
+
export declare class DroppingIndex<C = any, D = string> extends ThenableQuery<number, C, D> {
|
|
18
|
+
private readonly indexName;
|
|
19
|
+
private readonly tableName;
|
|
20
|
+
private conditions;
|
|
21
|
+
constructor(database: Database<C, Record<string, object>, D>, indexName: string, tableName: string);
|
|
22
|
+
where(query: Condition<any>): this;
|
|
23
|
+
protected getQueryParams(): QueryParams<any>;
|
|
24
|
+
}
|
|
25
|
+
export declare class Creation<T extends object, C = any, D = string> extends ThenableQuery<void, C, D> {
|
|
26
|
+
private readonly tableName;
|
|
27
|
+
private readonly schema;
|
|
28
|
+
constructor(database: Database<C, Record<string, object>, D>, tableName: string, schema: Schema<T>);
|
|
29
|
+
protected getQueryParams(): QueryParams<T>;
|
|
30
|
+
}
|
|
31
|
+
export declare class Selection<T extends object, K extends keyof T, C = any, D = string> extends ThenableQuery<Pick<T, K>[], C, D> {
|
|
32
|
+
private readonly modelName;
|
|
33
|
+
private readonly fields;
|
|
34
|
+
private conditions;
|
|
35
|
+
private groupings;
|
|
36
|
+
private orderings;
|
|
37
|
+
private limitCount?;
|
|
38
|
+
private offsetCount?;
|
|
39
|
+
constructor(database: Database<C, Record<string, object>, D>, modelName: string, fields: Array<K>);
|
|
40
|
+
where(query: Condition<T>): this;
|
|
41
|
+
groupBy(...fields: (keyof T)[]): this;
|
|
42
|
+
orderBy(field: keyof T, direction?: "ASC" | "DESC"): this;
|
|
43
|
+
limit(count: number): this;
|
|
44
|
+
offset(count: number): this;
|
|
45
|
+
protected getQueryParams(): QueryParams<T>;
|
|
46
|
+
}
|
|
47
|
+
export declare class Insertion<T extends object, C = any, D = string> extends ThenableQuery<T, C, D> {
|
|
48
|
+
private readonly modelName;
|
|
49
|
+
private readonly data;
|
|
50
|
+
constructor(database: Database<C, Record<string, object>, D>, modelName: string, data: T);
|
|
51
|
+
protected getQueryParams(): QueryParams<T>;
|
|
52
|
+
}
|
|
53
|
+
export declare class Updation<T extends object, C = any, D = string> extends ThenableQuery<number, C, D> {
|
|
54
|
+
private readonly modelName;
|
|
55
|
+
private readonly update;
|
|
56
|
+
private conditions;
|
|
57
|
+
constructor(database: Database<C, Record<string, object>, D>, modelName: string, update: Partial<T>);
|
|
58
|
+
where(query: Condition<T>): this;
|
|
59
|
+
protected getQueryParams(): QueryParams<T>;
|
|
60
|
+
}
|
|
61
|
+
export declare class Deletion<T extends object = any, C = any, D = string> extends ThenableQuery<number, C, D> {
|
|
62
|
+
private readonly modelName;
|
|
63
|
+
private conditions;
|
|
64
|
+
constructor(database: Database<C, Record<string, object>, D>, modelName: string);
|
|
65
|
+
where(query: Condition<T>): this;
|
|
66
|
+
protected getQueryParams(): QueryParams<T>;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=query-classes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-classes.d.ts","sourceRoot":"","sources":["../../src/base/query-classes.ts"],"names":[],"mappings":"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"}
|