@asla/yoursql 0.8.1 → 0.8.3
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/dist/client/DbCursor.d.ts +14 -0
- package/dist/client/DbCursor.js +21 -0
- package/dist/client/DbPoolConnection.d.ts +29 -0
- package/dist/client/DbPoolConnection.js +56 -0
- package/dist/client/DbPoolTransaction.d.ts +29 -0
- package/dist/client/DbPoolTransaction.js +98 -0
- package/dist/client/DbQuery.d.ts +68 -0
- package/dist/client/DbQuery.js +30 -0
- package/dist/client/errors.d.ts +9 -0
- package/dist/client/errors.js +14 -0
- package/dist/client/interfaces.d.ts +66 -0
- package/dist/client/mod.d.ts +7 -0
- package/dist/client/mod.js +5 -0
- package/dist/sql_gen/mod.js +19 -0
- package/dist/sql_gen/select/DbTable.js +70 -0
- package/dist/sql_gen/select/TableQuery.js +68 -0
- package/dist/sql_gen/select/_statement.js +60 -0
- package/dist/sql_gen/select/query_chain_abstract.js +27 -0
- package/dist/sql_gen/select/query_chain_insert.js +64 -0
- package/dist/sql_gen/select/query_chain_select.js +105 -0
- package/dist/sql_gen/sql_value/db_type.js +40 -0
- package/dist/sql_gen/sql_value/sql_value.js +304 -0
- package/dist/sql_gen/util.js +166 -0
- package/dist/sql_gen/your_table/checker.js +82 -0
- package/dist/sql_gen/your_table/infer_db_type.js +76 -0
- package/dist/sql_gen/your_table/table.js +33 -0
- package/package.json +5 -2
- package/dist/mod.js +0 -1081
- /package/dist/{mod.d.ts → sql_gen/mod.d.ts} +0 -0
- /package/dist/{select → sql_gen/select}/DbTable.d.ts +0 -0
- /package/dist/{select → sql_gen/select}/TableQuery.d.ts +0 -0
- /package/dist/{select → sql_gen/select}/_statement.d.ts +0 -0
- /package/dist/{select → sql_gen/select}/query_chain_abstract.d.ts +0 -0
- /package/dist/{select → sql_gen/select}/query_chain_insert.d.ts +0 -0
- /package/dist/{select → sql_gen/select}/query_chain_select.d.ts +0 -0
- /package/dist/{select → sql_gen/select}/type.d.ts +0 -0
- /package/dist/{sql_value → sql_gen/sql_value}/db_type.d.ts +0 -0
- /package/dist/{sql_value → sql_gen/sql_value}/sql_value.d.ts +0 -0
- /package/dist/{util.d.ts → sql_gen/util.d.ts} +0 -0
- /package/dist/{your_table → sql_gen/your_table}/checker.d.ts +0 -0
- /package/dist/{your_table → sql_gen/your_table}/infer_db_type.d.ts +0 -0
- /package/dist/{your_table → sql_gen/your_table}/mod.d.ts +0 -0
- /package/dist/{your_table → sql_gen/your_table}/table.d.ts +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { CustomDbType } from './infer_db_type.js';
|
|
2
|
+
|
|
3
|
+
/** @public */
|
|
4
|
+
class TypeChecker {
|
|
5
|
+
map;
|
|
6
|
+
constructor(map) {
|
|
7
|
+
this.map = map;
|
|
8
|
+
}
|
|
9
|
+
check(value) {
|
|
10
|
+
const map = this.map;
|
|
11
|
+
let v;
|
|
12
|
+
for (const [k, expect] of map) {
|
|
13
|
+
v = value[k];
|
|
14
|
+
let err;
|
|
15
|
+
if (v === null) {
|
|
16
|
+
if (expect.notNull)
|
|
17
|
+
throw new Error(`${k} 不能为空`);
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
else if (v === undefined) {
|
|
21
|
+
if (expect.sqlDefault === undefined && expect.notNull)
|
|
22
|
+
throw new Error(`${k} 不能为 undefined`);
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
else if (expect.isArray) {
|
|
26
|
+
if (v instanceof Array)
|
|
27
|
+
err = this.checkArray(v, expect.type);
|
|
28
|
+
else
|
|
29
|
+
err = getErrStr(`Array<${expect.type.name}>`, typeof v);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
err = this.checkItem(v, expect.type);
|
|
33
|
+
}
|
|
34
|
+
if (err)
|
|
35
|
+
throw new Error(`Key ${k} error: ${err}`);
|
|
36
|
+
}
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
checkList(value) {
|
|
40
|
+
let i = 0;
|
|
41
|
+
try {
|
|
42
|
+
for (let i = 0; i < value.length; i++) {
|
|
43
|
+
this.check(value[i]);
|
|
44
|
+
}
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
throw new Error(`Item ${i}, ${error.message}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
checkArray(v, expect) {
|
|
52
|
+
let err;
|
|
53
|
+
for (let i = 0; i < v.length; i++) {
|
|
54
|
+
err = this.checkItem(v[i], expect);
|
|
55
|
+
if (err)
|
|
56
|
+
return `Item[${i}] ${err}`;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
checkItem(v, expect) {
|
|
60
|
+
if (expect instanceof CustomDbType) {
|
|
61
|
+
if (expect.is(v))
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
if (v instanceof expect)
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
let actName = typeof v;
|
|
69
|
+
if (actName === "object") {
|
|
70
|
+
if (v === null)
|
|
71
|
+
actName = "null";
|
|
72
|
+
else
|
|
73
|
+
actName = v.constructor?.name ?? "object";
|
|
74
|
+
}
|
|
75
|
+
return getErrStr(expect.name, typeof v);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function getErrStr(expect, actual) {
|
|
79
|
+
return `Expect ${expect}, Actual ${actual}`;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export { TypeChecker };
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 表格列的信息
|
|
3
|
+
* @public
|
|
4
|
+
*/
|
|
5
|
+
class ColumnMeta {
|
|
6
|
+
type;
|
|
7
|
+
sqlType;
|
|
8
|
+
notNull;
|
|
9
|
+
isArray;
|
|
10
|
+
sqlDefault;
|
|
11
|
+
constructor(type,
|
|
12
|
+
/** 数据库原始数据类型 */
|
|
13
|
+
sqlType,
|
|
14
|
+
/** 是否非空 */
|
|
15
|
+
notNull = false,
|
|
16
|
+
/** 是否是数组类型 */
|
|
17
|
+
isArray = false,
|
|
18
|
+
/** 数据库原始默认值 */
|
|
19
|
+
sqlDefault) {
|
|
20
|
+
this.type = type;
|
|
21
|
+
this.sqlType = sqlType;
|
|
22
|
+
this.notNull = notNull;
|
|
23
|
+
this.isArray = isArray;
|
|
24
|
+
this.sqlDefault = sqlDefault;
|
|
25
|
+
}
|
|
26
|
+
/** 校验 value 的类型 */
|
|
27
|
+
checkValue(value) {
|
|
28
|
+
if (typeof this.type === "function")
|
|
29
|
+
return value instanceof this.type;
|
|
30
|
+
return this.type.is(value);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 数据库类型到JS类型的映射
|
|
35
|
+
* @public
|
|
36
|
+
*/
|
|
37
|
+
class YourTypeMap {
|
|
38
|
+
typeMap;
|
|
39
|
+
static create(rawTypeMap) {
|
|
40
|
+
return new this(rawTypeMap);
|
|
41
|
+
}
|
|
42
|
+
constructor(typeMap = {}) {
|
|
43
|
+
this.typeMap = typeMap;
|
|
44
|
+
}
|
|
45
|
+
genColumn(type, notNull, defaultValue) {
|
|
46
|
+
const constructor = Reflect.get(this.typeMap, type);
|
|
47
|
+
const column = new ColumnMeta(constructor, type, notNull, false, defaultValue);
|
|
48
|
+
return column;
|
|
49
|
+
}
|
|
50
|
+
genArrColumn(type, notNull, defaultValue) {
|
|
51
|
+
const constructor = Reflect.get(this.typeMap, type);
|
|
52
|
+
const column = new ColumnMeta(constructor, type + "[]", notNull, true, defaultValue);
|
|
53
|
+
return column;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function baseType(v) {
|
|
57
|
+
return typeof v === this.name;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 自定义数据类型
|
|
61
|
+
* @public
|
|
62
|
+
*/
|
|
63
|
+
class CustomDbType {
|
|
64
|
+
is;
|
|
65
|
+
name;
|
|
66
|
+
static bigint = new CustomDbType(baseType, "bigint");
|
|
67
|
+
static number = new CustomDbType(baseType, "number");
|
|
68
|
+
static string = new CustomDbType(baseType, "string");
|
|
69
|
+
static boolean = new CustomDbType(baseType, "boolean");
|
|
70
|
+
constructor(is, name) {
|
|
71
|
+
this.is = is;
|
|
72
|
+
this.name = name;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export { ColumnMeta, CustomDbType, YourTypeMap };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { DbTableQuery } from '../select/TableQuery.js';
|
|
2
|
+
import { TypeChecker } from './checker.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 完整数据库表数据
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
class YourTable extends DbTableQuery {
|
|
9
|
+
define;
|
|
10
|
+
constructor(name, define, sqlValue) {
|
|
11
|
+
super(name, sqlValue);
|
|
12
|
+
this.define = define;
|
|
13
|
+
this.columns = Object.keys(define);
|
|
14
|
+
}
|
|
15
|
+
columns;
|
|
16
|
+
getColumnMeta(name) {
|
|
17
|
+
return Reflect.get(this.define, name);
|
|
18
|
+
}
|
|
19
|
+
createTypeChecker(keys) {
|
|
20
|
+
let map = new Map();
|
|
21
|
+
let defined = this.define;
|
|
22
|
+
let k;
|
|
23
|
+
for (let i = 0; i < keys.length; i++) {
|
|
24
|
+
k = keys[i];
|
|
25
|
+
if (defined[k] === undefined)
|
|
26
|
+
throw new Error(`key ${k} 未定义`);
|
|
27
|
+
map.set(k, defined[k]);
|
|
28
|
+
}
|
|
29
|
+
return new TypeChecker(map);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { YourTable };
|
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@asla/yoursql",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/mod.d.ts",
|
|
7
|
+
"packageManager": "pnpm@10.4.0",
|
|
7
8
|
"scripts": {
|
|
8
9
|
"ci:test": "vitest run",
|
|
9
10
|
"ci:build": "pnpm rollup -c build/rollup.config.js",
|
|
@@ -16,6 +17,7 @@
|
|
|
16
17
|
"devDependencies": {
|
|
17
18
|
"@microsoft/api-extractor": "^7.47.9",
|
|
18
19
|
"@rollup/plugin-typescript": "^12.1.0",
|
|
20
|
+
"prettier": "^3.5.3",
|
|
19
21
|
"rollup": "^4.22.4",
|
|
20
22
|
"tslib": "^2.7.0",
|
|
21
23
|
"typescript": "^5.6.2",
|
|
@@ -27,7 +29,8 @@
|
|
|
27
29
|
"url": "https://github.com/asnowc/yoursql"
|
|
28
30
|
},
|
|
29
31
|
"exports": {
|
|
30
|
-
".": "./dist/mod.js"
|
|
32
|
+
".": "./dist/sql_gen/mod.js",
|
|
33
|
+
"./client": "./dist/client/mod.js"
|
|
31
34
|
},
|
|
32
35
|
"files": [
|
|
33
36
|
"dist/**/*.js",
|