@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.
Files changed (109) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +93 -0
  3. package/lib/base/database.d.ts +71 -0
  4. package/lib/base/database.d.ts.map +1 -0
  5. package/lib/base/database.js +101 -0
  6. package/lib/base/database.js.map +1 -0
  7. package/lib/base/dialect.d.ts +34 -0
  8. package/lib/base/dialect.d.ts.map +1 -0
  9. package/lib/base/dialect.js +21 -0
  10. package/lib/base/dialect.js.map +1 -0
  11. package/lib/base/index.d.ts +6 -0
  12. package/lib/base/index.d.ts.map +1 -0
  13. package/lib/base/index.js +6 -0
  14. package/lib/base/index.js.map +1 -0
  15. package/lib/base/model.d.ts +53 -0
  16. package/lib/base/model.d.ts.map +1 -0
  17. package/lib/base/model.js +65 -0
  18. package/lib/base/model.js.map +1 -0
  19. package/lib/base/query-classes.d.ts +68 -0
  20. package/lib/base/query-classes.d.ts.map +1 -0
  21. package/lib/base/query-classes.js +178 -0
  22. package/lib/base/query-classes.js.map +1 -0
  23. package/lib/base/thenable.d.ts +15 -0
  24. package/lib/base/thenable.d.ts.map +1 -0
  25. package/lib/base/thenable.js +33 -0
  26. package/lib/base/thenable.js.map +1 -0
  27. package/lib/dialects/memory.d.ts +52 -0
  28. package/lib/dialects/memory.d.ts.map +1 -0
  29. package/lib/dialects/memory.js +772 -0
  30. package/lib/dialects/memory.js.map +1 -0
  31. package/lib/dialects/mongodb.d.ts +85 -0
  32. package/lib/dialects/mongodb.d.ts.map +1 -0
  33. package/lib/dialects/mongodb.js +461 -0
  34. package/lib/dialects/mongodb.js.map +1 -0
  35. package/lib/dialects/mysql.d.ts +33 -0
  36. package/lib/dialects/mysql.d.ts.map +1 -0
  37. package/lib/dialects/mysql.js +132 -0
  38. package/lib/dialects/mysql.js.map +1 -0
  39. package/lib/dialects/pg.d.ts +33 -0
  40. package/lib/dialects/pg.d.ts.map +1 -0
  41. package/lib/dialects/pg.js +132 -0
  42. package/lib/dialects/pg.js.map +1 -0
  43. package/lib/dialects/redis.d.ts +87 -0
  44. package/lib/dialects/redis.d.ts.map +1 -0
  45. package/lib/dialects/redis.js +500 -0
  46. package/lib/dialects/redis.js.map +1 -0
  47. package/lib/dialects/sqlite.d.ts +46 -0
  48. package/lib/dialects/sqlite.d.ts.map +1 -0
  49. package/lib/dialects/sqlite.js +201 -0
  50. package/lib/dialects/sqlite.js.map +1 -0
  51. package/lib/index.d.ts +18 -0
  52. package/lib/index.d.ts.map +1 -0
  53. package/lib/index.js +18 -0
  54. package/lib/index.js.map +1 -0
  55. package/lib/registry.d.ts +37 -0
  56. package/lib/registry.d.ts.map +1 -0
  57. package/lib/registry.js +21 -0
  58. package/lib/registry.js.map +1 -0
  59. package/lib/type/document/database.d.ts +60 -0
  60. package/lib/type/document/database.d.ts.map +1 -0
  61. package/lib/type/document/database.js +242 -0
  62. package/lib/type/document/database.js.map +1 -0
  63. package/lib/type/document/model.d.ts +42 -0
  64. package/lib/type/document/model.d.ts.map +1 -0
  65. package/lib/type/document/model.js +65 -0
  66. package/lib/type/document/model.js.map +1 -0
  67. package/lib/type/keyvalue/database.d.ts +64 -0
  68. package/lib/type/keyvalue/database.d.ts.map +1 -0
  69. package/lib/type/keyvalue/database.js +214 -0
  70. package/lib/type/keyvalue/database.js.map +1 -0
  71. package/lib/type/keyvalue/model.d.ts +107 -0
  72. package/lib/type/keyvalue/model.d.ts.map +1 -0
  73. package/lib/type/keyvalue/model.js +261 -0
  74. package/lib/type/keyvalue/model.js.map +1 -0
  75. package/lib/type/related/database.d.ts +32 -0
  76. package/lib/type/related/database.d.ts.map +1 -0
  77. package/lib/type/related/database.js +334 -0
  78. package/lib/type/related/database.js.map +1 -0
  79. package/lib/type/related/model.d.ts +43 -0
  80. package/lib/type/related/model.d.ts.map +1 -0
  81. package/lib/type/related/model.js +108 -0
  82. package/lib/type/related/model.js.map +1 -0
  83. package/lib/types.d.ts +251 -0
  84. package/lib/types.d.ts.map +1 -0
  85. package/lib/types.js +28 -0
  86. package/lib/types.js.map +1 -0
  87. package/package.json +54 -0
  88. package/src/base/database.ts +128 -0
  89. package/src/base/dialect.ts +76 -0
  90. package/src/base/index.ts +5 -0
  91. package/src/base/model.ts +89 -0
  92. package/src/base/query-classes.ts +217 -0
  93. package/src/base/thenable.ts +54 -0
  94. package/src/dialects/memory.ts +880 -0
  95. package/src/dialects/mongodb.ts +533 -0
  96. package/src/dialects/mysql.ts +157 -0
  97. package/src/dialects/pg.ts +157 -0
  98. package/src/dialects/redis.ts +598 -0
  99. package/src/dialects/sqlite.ts +233 -0
  100. package/src/index.ts +20 -0
  101. package/src/registry.ts +59 -0
  102. package/src/type/document/database.ts +283 -0
  103. package/src/type/document/model.ts +86 -0
  104. package/src/type/keyvalue/database.ts +261 -0
  105. package/src/type/keyvalue/model.ts +339 -0
  106. package/src/type/related/database.ts +392 -0
  107. package/src/type/related/model.ts +117 -0
  108. package/src/types.ts +403 -0
  109. package/tsconfig.json +24 -0
@@ -0,0 +1,43 @@
1
+ import { Model } from '../../base';
2
+ import { RelatedDatabase } from './database.js';
3
+ import { Condition } from '../../types.js';
4
+ /**
5
+ * 关系型模型类
6
+ * 继承自 BaseModel,提供关系型数据库特有的操作
7
+ */
8
+ export declare class RelatedModel<T extends object = object, D = any> extends Model<D, T, string> {
9
+ constructor(database: RelatedDatabase<D>, name: string);
10
+ /**
11
+ * 创建数据
12
+ */
13
+ create(data: Partial<T>): Promise<T>;
14
+ /**
15
+ * 批量创建数据
16
+ */
17
+ createMany(data: Partial<T>[]): Promise<T[]>;
18
+ /**
19
+ * 查找单个数据
20
+ */
21
+ selectOne(query?: Condition<T>): Promise<T | null>;
22
+ /**
23
+ * 根据ID查找
24
+ */
25
+ selectById(id: any): Promise<T | null>;
26
+ /**
27
+ * 更新单个数据
28
+ */
29
+ updateOne(query: Condition<T>, data: Partial<T>): Promise<boolean>;
30
+ /**
31
+ * 根据ID更新
32
+ */
33
+ updateById(id: any, data: Partial<T>): Promise<boolean>;
34
+ /**
35
+ * 根据ID删除
36
+ */
37
+ deleteById(id: any): Promise<boolean>;
38
+ /**
39
+ * 统计数量
40
+ */
41
+ count(query?: Condition<T>): Promise<number>;
42
+ }
43
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/type/related/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAC,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C;;;GAGG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAC,CAAC,GAAC,GAAG,CAAE,SAAQ,KAAK,CAAC,CAAC,EAAC,CAAC,EAAC,MAAM,CAAC;gBAEhF,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,EAC5B,IAAI,EAAE,MAAM;IAKd;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAY1C;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAgBlD;;OAEG;IACG,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAaxD;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAI5C;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IASxE;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAK7D;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAK3C;;OAEG;IACG,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAYnD"}
@@ -0,0 +1,108 @@
1
+ import { Model } from '../../base';
2
+ /**
3
+ * 关系型模型类
4
+ * 继承自 BaseModel,提供关系型数据库特有的操作
5
+ */
6
+ export class RelatedModel extends Model {
7
+ constructor(database, name) {
8
+ super(database, name);
9
+ }
10
+ /**
11
+ * 创建数据
12
+ */
13
+ async create(data) {
14
+ if (!this.validateData(data)) {
15
+ throw new Error('Invalid data provided');
16
+ }
17
+ try {
18
+ const result = await this.database.insert(this.name, data);
19
+ return result;
20
+ }
21
+ catch (error) {
22
+ this.handleError(error, 'create');
23
+ }
24
+ }
25
+ /**
26
+ * 批量创建数据
27
+ */
28
+ async createMany(data) {
29
+ if (!Array.isArray(data) || data.length === 0) {
30
+ throw new Error('Invalid data array provided');
31
+ }
32
+ try {
33
+ const results = [];
34
+ for (const item of data) {
35
+ const result = await this.create(item);
36
+ results.push(result);
37
+ }
38
+ return results;
39
+ }
40
+ catch (error) {
41
+ this.handleError(error, 'createMany');
42
+ }
43
+ }
44
+ /**
45
+ * 查找单个数据
46
+ */
47
+ async selectOne(query) {
48
+ try {
49
+ const selection = this.select();
50
+ if (query) {
51
+ selection.where(query);
52
+ }
53
+ const results = await selection.limit(1);
54
+ return results.length > 0 ? results[0] : null;
55
+ }
56
+ catch (error) {
57
+ this.handleError(error, 'selectOne');
58
+ }
59
+ }
60
+ /**
61
+ * 根据ID查找
62
+ */
63
+ async selectById(id) {
64
+ return this.selectOne({ id });
65
+ }
66
+ /**
67
+ * 更新单个数据
68
+ */
69
+ async updateOne(query, data) {
70
+ try {
71
+ const result = await this.update(data).where(query);
72
+ return result > 0;
73
+ }
74
+ catch (error) {
75
+ this.handleError(error, 'updateOne');
76
+ }
77
+ }
78
+ /**
79
+ * 根据ID更新
80
+ */
81
+ async updateById(id, data) {
82
+ return this.updateOne({ id }, data);
83
+ }
84
+ /**
85
+ * 根据ID删除
86
+ */
87
+ async deleteById(id) {
88
+ const result = await this.delete({ id });
89
+ return result > 0;
90
+ }
91
+ /**
92
+ * 统计数量
93
+ */
94
+ async count(query) {
95
+ try {
96
+ const selection = this.select('*');
97
+ if (query) {
98
+ selection.where(query);
99
+ }
100
+ const results = await selection;
101
+ return results.length;
102
+ }
103
+ catch (error) {
104
+ this.handleError(error, 'count');
105
+ }
106
+ }
107
+ }
108
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/type/related/model.ts"],"names":[],"mappings":"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"}
package/lib/types.d.ts ADDED
@@ -0,0 +1,251 @@
1
+ export type QueryType = 'create' | 'alter' | 'drop_table' | 'drop_index' | 'select' | 'insert' | 'update' | 'delete';
2
+ export type ColumnType = "text" | "integer" | "float" | "boolean" | "date" | "json";
3
+ export interface Column<T = any> {
4
+ type: ColumnType;
5
+ nullable?: boolean;
6
+ default?: T;
7
+ autoIncrement?: boolean;
8
+ primary?: boolean;
9
+ unique?: boolean;
10
+ length?: number;
11
+ }
12
+ export type Schema<T extends object = object> = {
13
+ [P in keyof T]: Column<T[P]>;
14
+ };
15
+ export interface AddSchema<T = any> {
16
+ action: "add";
17
+ type: ColumnType;
18
+ nullable?: boolean;
19
+ default?: T;
20
+ primary?: boolean;
21
+ length?: number;
22
+ }
23
+ export interface ModifySchema<T = any> {
24
+ action: "modify";
25
+ type?: ColumnType;
26
+ nullable?: boolean;
27
+ default?: T;
28
+ length?: number;
29
+ }
30
+ export interface DropSchema {
31
+ action: "drop";
32
+ }
33
+ export type AlterSchema<T extends object> = {
34
+ [P in keyof T]?: AddSchema<T[P]> | ModifySchema<T[P]> | DropSchema;
35
+ };
36
+ export interface ComparisonOperators<T> {
37
+ $eq?: T;
38
+ $ne?: T;
39
+ $gt?: T;
40
+ $gte?: T;
41
+ $lt?: T;
42
+ $lte?: T;
43
+ $in?: T[];
44
+ $nin?: T[];
45
+ $like?: string;
46
+ $nlike?: string;
47
+ }
48
+ export interface LogicOperators<T = any> {
49
+ $and?: Condition<T>[];
50
+ $or?: Condition<T>[];
51
+ $not?: Condition<T>;
52
+ }
53
+ export type Condition<T = object> = {
54
+ [P in keyof T]?: T[P] | ComparisonOperators<T[P]> | LogicOperators<T[P]>;
55
+ } | LogicOperators<T>;
56
+ export type SortDirection = "ASC" | "DESC";
57
+ export interface Ordering<T extends object> {
58
+ field: keyof T;
59
+ direction: SortDirection;
60
+ }
61
+ export interface BaseQueryParams {
62
+ tableName: string;
63
+ }
64
+ export interface CreateQueryParams<T extends object = any> extends BaseQueryParams {
65
+ type: 'create';
66
+ schema: Schema<T>;
67
+ }
68
+ export interface AlterQueryParams<T extends object = any> extends BaseQueryParams {
69
+ type: 'alter';
70
+ alterations: AlterSchema<T>;
71
+ }
72
+ export interface DropTableQueryParams<T extends object = any> extends BaseQueryParams {
73
+ type: 'drop_table';
74
+ conditions?: Condition<T>;
75
+ }
76
+ export interface DropIndexQueryParams extends BaseQueryParams {
77
+ type: 'drop_index';
78
+ indexName: string;
79
+ conditions?: Condition<any>;
80
+ }
81
+ export interface SelectQueryParams<T extends object = any> extends BaseQueryParams {
82
+ type: 'select';
83
+ fields?: (keyof T)[];
84
+ conditions?: Condition<T>;
85
+ groupings?: (keyof T)[];
86
+ orderings?: Ordering<T>[];
87
+ limitCount?: number;
88
+ offsetCount?: number;
89
+ }
90
+ export interface InsertQueryParams<T extends object = any> extends BaseQueryParams {
91
+ type: 'insert';
92
+ data: T;
93
+ }
94
+ export interface UpdateQueryParams<T extends object = any> extends BaseQueryParams {
95
+ type: 'update';
96
+ update: Partial<T>;
97
+ conditions?: Condition<T>;
98
+ }
99
+ export interface DeleteQueryParams<T extends object = any> extends BaseQueryParams {
100
+ type: 'delete';
101
+ conditions?: Condition<T>;
102
+ }
103
+ export type QueryParams<T extends object = any> = CreateQueryParams<T> | AlterQueryParams<T> | DropTableQueryParams<T> | DropIndexQueryParams | SelectQueryParams<T> | InsertQueryParams<T> | UpdateQueryParams<T> | DeleteQueryParams<T>;
104
+ export interface BuildQueryResult<R> {
105
+ query: R;
106
+ params: any[];
107
+ }
108
+ /**
109
+ * 文档查询结果类型
110
+ */
111
+ export interface DocumentQueryResult {
112
+ collection: string;
113
+ filter: Record<string, any>;
114
+ sort?: Record<string, 1 | -1>;
115
+ limit?: number;
116
+ skip?: number;
117
+ projection?: Record<string, 1 | 0>;
118
+ operation?: 'find' | 'insertOne' | 'insertMany' | 'updateOne' | 'updateMany' | 'deleteOne' | 'deleteMany' | 'createCollection' | 'createIndex' | 'dropIndex' | 'dropCollection';
119
+ }
120
+ /**
121
+ * 键值查询结果类型
122
+ */
123
+ export interface KeyValueQueryResult {
124
+ bucket: string;
125
+ operation: 'get' | 'set' | 'delete' | 'has' | 'keys' | 'values' | 'entries' | 'clear' | 'size' | 'expire' | 'ttl' | 'persist' | 'cleanup' | 'keysByPattern';
126
+ key?: string;
127
+ value?: any;
128
+ ttl?: number;
129
+ pattern?: string;
130
+ keys?: string[];
131
+ }
132
+ /**
133
+ * 文档操作结果类型
134
+ */
135
+ export interface DocumentOperationResult<T = any> {
136
+ success: boolean;
137
+ data?: T | T[];
138
+ count?: number;
139
+ error?: string;
140
+ }
141
+ /**
142
+ * 键值操作结果类型
143
+ */
144
+ export interface KeyValueOperationResult<T = any> {
145
+ success: boolean;
146
+ data?: T | T[] | number | boolean;
147
+ error?: string;
148
+ }
149
+ /**
150
+ * 数据库方言信息接口
151
+ */
152
+ export interface DatabaseDialect {
153
+ name: string;
154
+ version: string;
155
+ features: string[];
156
+ dataTypes: Record<string, string>;
157
+ identifierQuote: string;
158
+ parameterPlaceholder: string;
159
+ supportsTransactions: boolean;
160
+ supportsIndexes: boolean;
161
+ supportsForeignKeys: boolean;
162
+ supportsViews: boolean;
163
+ supportsStoredProcedures: boolean;
164
+ }
165
+ export interface SelectResult<T> {
166
+ rows: T[];
167
+ count?: number;
168
+ }
169
+ export interface InsertResult<T = any> {
170
+ insertId?: number | string;
171
+ affectedRows?: number;
172
+ data?: T;
173
+ }
174
+ export interface UpdateResult {
175
+ affectedRows: number;
176
+ }
177
+ export interface DeleteResult {
178
+ affectedRows: number;
179
+ }
180
+ export interface BaseDriverConfig {
181
+ timeout?: number;
182
+ retries?: number;
183
+ }
184
+ export interface MemoryConfig {
185
+ }
186
+ export interface DriverConnection {
187
+ isConnected(): boolean;
188
+ connect(): Promise<void>;
189
+ disconnect(): Promise<void>;
190
+ healthCheck(): Promise<boolean>;
191
+ }
192
+ export interface DriverQuery {
193
+ query<T = any>(sql: string, params?: any[]): Promise<T>;
194
+ }
195
+ export interface DriverSchema {
196
+ getTables(): Promise<string[]>;
197
+ getTableInfo(tableName: string): Promise<TableInfo[]>;
198
+ }
199
+ export interface DriverQueryBuilder<R> {
200
+ buildQuery<T extends object = any>(params: QueryParams<T>): BuildQueryResult<R>;
201
+ }
202
+ export interface DriverLifecycle {
203
+ dispose(): Promise<void>;
204
+ }
205
+ export interface TableInfo {
206
+ name: string;
207
+ type: string;
208
+ nullable: boolean;
209
+ defaultValue: any;
210
+ primaryKey: boolean;
211
+ unique: boolean;
212
+ length?: number;
213
+ }
214
+ export interface ModelField {
215
+ type: "string" | "integer" | "number" | "float" | "json" | "boolean" | "date" | "object" | "array";
216
+ initial?: any;
217
+ length?: number;
218
+ primary?: boolean;
219
+ autoIncrement?: boolean;
220
+ unique?: boolean;
221
+ notNull?: boolean;
222
+ }
223
+ export interface ModelConfig {
224
+ driver?: string;
225
+ timestamps?: boolean;
226
+ softDelete?: boolean;
227
+ relations?: ModelRelation[];
228
+ }
229
+ export interface ModelRelation {
230
+ model: string;
231
+ type: "belongs-to" | "has-one" | "has-many" | "many-to-many";
232
+ foreignKey?: string;
233
+ through?: string;
234
+ }
235
+ export type RequiredKeys<T, K extends keyof T> = T & Required<Pick<T, K>>;
236
+ export type OptionalKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
237
+ export type DeepPartial<T> = {
238
+ [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
239
+ };
240
+ export type DeepRequired<T> = {
241
+ [P in keyof T]-?: T[P] extends object ? DeepRequired<T[P]> : T[P];
242
+ };
243
+ export declare function isCreateQuery<T extends object>(params: QueryParams<T>): params is CreateQueryParams<T>;
244
+ export declare function isAlterQuery<T extends object>(params: QueryParams<T>): params is AlterQueryParams<T>;
245
+ export declare function isSelectQuery<T extends object>(params: QueryParams<T>): params is SelectQueryParams<T>;
246
+ export declare function isInsertQuery<T extends object>(params: QueryParams<T>): params is InsertQueryParams<T>;
247
+ export declare function isUpdateQuery<T extends object>(params: QueryParams<T>): params is UpdateQueryParams<T>;
248
+ export declare function isDeleteQuery<T extends object>(params: QueryParams<T>): params is DeleteQueryParams<T>;
249
+ export declare function isDropTableQuery<T extends object>(params: QueryParams<T>): params is DropTableQueryParams<T>;
250
+ export declare function isDropIndexQuery(params: QueryParams): params is DropIndexQueryParams;
251
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/lib/types.js ADDED
@@ -0,0 +1,28 @@
1
+ // ============================================================================
2
+ // Type Guards
3
+ // ============================================================================
4
+ export function isCreateQuery(params) {
5
+ return params.type === 'create';
6
+ }
7
+ export function isAlterQuery(params) {
8
+ return params.type === 'alter';
9
+ }
10
+ export function isSelectQuery(params) {
11
+ return params.type === 'select';
12
+ }
13
+ export function isInsertQuery(params) {
14
+ return params.type === 'insert';
15
+ }
16
+ export function isUpdateQuery(params) {
17
+ return params.type === 'update';
18
+ }
19
+ export function isDeleteQuery(params) {
20
+ return params.type === 'delete';
21
+ }
22
+ export function isDropTableQuery(params) {
23
+ return params.type === 'drop_table';
24
+ }
25
+ export function isDropIndexQuery(params) {
26
+ return params.type === 'drop_index';
27
+ }
28
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgXA,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,MAAM,UAAU,aAAa,CAAmB,MAAsB;IACpE,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,YAAY,CAAmB,MAAsB;IACnE,OAAO,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,aAAa,CAAmB,MAAsB;IACpE,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,aAAa,CAAmB,MAAsB;IACpE,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,aAAa,CAAmB,MAAsB;IACpE,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,aAAa,CAAmB,MAAsB;IACpE,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAmB,MAAsB;IACvE,OAAO,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAmB;IAClD,OAAO,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC;AACtC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@zhin.js/database",
3
+ "version": "1.0.0",
4
+ "description": "Zhin机器人数据库模块",
5
+ "type": "module",
6
+ "main": "./lib/index.js",
7
+ "types": "./lib/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./lib/index.d.ts",
11
+ "import": "./lib/index.js",
12
+ "require": "./lib/index.js"
13
+ }
14
+ },
15
+ "dependencies": {},
16
+ "peerDependencies": {
17
+ "sqlite3": "latest",
18
+ "mysql2": "latest",
19
+ "pg": "latest",
20
+ "mongodb": "latest",
21
+ "redis": "latest"
22
+ },
23
+ "peerDependenciesMeta": {
24
+ "sqlite3": {
25
+ "optional": true
26
+ },
27
+ "mysql2": {
28
+ "optional": true
29
+ },
30
+ "pg": {
31
+ "optional": true
32
+ },
33
+ "mongodb": {
34
+ "optional": true
35
+ },
36
+ "redis": {
37
+ "optional": true
38
+ }
39
+ },
40
+ "devDependencies": {
41
+ "typescript": "^5.3.0",
42
+ "sqlite3": "latest",
43
+ "mysql2": "latest",
44
+ "pg": "latest",
45
+ "mongodb": "latest",
46
+ "redis": "latest",
47
+ "@types/pg": "latest",
48
+ "@types/sqlite3": "latest"
49
+ },
50
+ "scripts": {
51
+ "build": "tsc",
52
+ "clean": "rm -rf lib"
53
+ }
54
+ }
@@ -0,0 +1,128 @@
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
+ */
10
+ export abstract class Database<D=any,S extends Record<string, object>=Record<string, object>,Q=string> {
11
+ protected hasStarted = false;
12
+ public readonly models: Map<string, Model<D,object,Q>> = new Map();
13
+ constructor(
14
+ public readonly dialect: Dialect<D,Q>,
15
+ public schemas?: Database.Schemas<S>,
16
+ ) {}
17
+ /**
18
+ * 数据库是否已启动
19
+ */
20
+ get isStarted(): boolean {
21
+ return this.dialect !== undefined && this.dialect.isConnected();
22
+ }
23
+
24
+ /**
25
+ * 启动数据库
26
+ */
27
+ async start(): Promise<void> {
28
+ await this.dialect.connect();
29
+ await this.initialize();
30
+ this.hasStarted = true;
31
+ }
32
+
33
+ /**
34
+ * 停止数据库
35
+ */
36
+ async stop(): Promise<void> {
37
+ await this.dialect.disconnect();
38
+ this.hasStarted = false;
39
+ }
40
+
41
+ /**
42
+ * 健康检查
43
+ */
44
+ async healthCheck(): Promise<boolean> {
45
+ return this.dialect.healthCheck();
46
+ }
47
+
48
+ /**
49
+ * 执行原生查询
50
+ */
51
+ async query<U = any>(sql: Q, params?: any[]): Promise<U> {
52
+ if (!this.isStarted) {
53
+ throw new Error('Database not started');
54
+ }
55
+ return this.dialect.query<U>(sql, params);
56
+ }
57
+ abstract buildQuery<U extends object = any>(params: QueryParams<U>): BuildQueryResult<Q>;
58
+ /**
59
+ * 获取数据库方言名称
60
+ */
61
+ get dialectName(): string {
62
+ if(this.dialect === undefined){
63
+ throw new Error('Database not started');
64
+ }
65
+ return this.dialect.name;
66
+ }
67
+
68
+ /**
69
+ * 获取数据库配置
70
+ */
71
+ get config(): any {
72
+ if(this.dialect === undefined){
73
+ throw new Error('Database not started');
74
+ }
75
+ return this.dialect.config;
76
+ }
77
+
78
+ /**
79
+ * 抽象方法:初始化数据库
80
+ */
81
+ protected abstract initialize(): Promise<void>;
82
+
83
+
84
+ /**
85
+ * 创建表
86
+ */
87
+ create<T extends object>(
88
+ name: string,
89
+ schema: Schema<T>
90
+ ): QueryClasses.Creation<T,D,Q> {
91
+ return new QueryClasses.Creation<T,D,Q>(this, name, schema);
92
+ }
93
+ alter<T extends object>(name: string, alterations: AlterSchema<T>): QueryClasses.Alteration<T,D,Q>{
94
+ return new QueryClasses.Alteration<T,D,Q>(this, name, alterations);
95
+ }
96
+ select<T extends object, K extends keyof T>(name: string, fields: Array<K>): QueryClasses.Selection<Pick<T, K>, K,D,Q>{
97
+ return new QueryClasses.Selection<Pick<T, K>, K,D,Q>(this, name, fields);
98
+ }
99
+ insert<T extends object>(name: string, data: T): QueryClasses.Insertion<T,D,Q>{
100
+ return new QueryClasses.Insertion<T,D,Q>(this, name, data);
101
+ }
102
+ update<T extends object>(name: string, update: Partial<T>): QueryClasses.Updation<T,D,Q>{
103
+ return new QueryClasses.Updation<T,D,Q>(this, name, update);
104
+ }
105
+ delete<T extends object>(name: string, condition: Condition<T>): QueryClasses.Deletion<T,D,Q>{
106
+ return new QueryClasses.Deletion<T,D,Q>(this, name).where(condition);
107
+ }
108
+ /**
109
+ * 抽象方法:获取所有模型名称
110
+ */
111
+ abstract getModelNames(): string[];
112
+
113
+ /**
114
+ * 抽象方法:清理资源
115
+ */
116
+ async dispose(): Promise<void> {
117
+ this.models.clear();
118
+ if(this.dialect === undefined){
119
+ throw new Error('Database not started');
120
+ }
121
+ await this.dialect.dispose();
122
+ }
123
+ }
124
+ export namespace Database {
125
+ export type Schemas<S extends Record<string, object>> = {
126
+ [K in keyof S]: Schema<S[K]>;
127
+ };
128
+ }