@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.
Files changed (43) hide show
  1. package/dist/client/DbCursor.d.ts +14 -0
  2. package/dist/client/DbCursor.js +21 -0
  3. package/dist/client/DbPoolConnection.d.ts +29 -0
  4. package/dist/client/DbPoolConnection.js +56 -0
  5. package/dist/client/DbPoolTransaction.d.ts +29 -0
  6. package/dist/client/DbPoolTransaction.js +98 -0
  7. package/dist/client/DbQuery.d.ts +68 -0
  8. package/dist/client/DbQuery.js +30 -0
  9. package/dist/client/errors.d.ts +9 -0
  10. package/dist/client/errors.js +14 -0
  11. package/dist/client/interfaces.d.ts +66 -0
  12. package/dist/client/mod.d.ts +7 -0
  13. package/dist/client/mod.js +5 -0
  14. package/dist/sql_gen/mod.js +19 -0
  15. package/dist/sql_gen/select/DbTable.js +70 -0
  16. package/dist/sql_gen/select/TableQuery.js +68 -0
  17. package/dist/sql_gen/select/_statement.js +60 -0
  18. package/dist/sql_gen/select/query_chain_abstract.js +27 -0
  19. package/dist/sql_gen/select/query_chain_insert.js +64 -0
  20. package/dist/sql_gen/select/query_chain_select.js +105 -0
  21. package/dist/sql_gen/sql_value/db_type.js +40 -0
  22. package/dist/sql_gen/sql_value/sql_value.js +304 -0
  23. package/dist/sql_gen/util.js +166 -0
  24. package/dist/sql_gen/your_table/checker.js +82 -0
  25. package/dist/sql_gen/your_table/infer_db_type.js +76 -0
  26. package/dist/sql_gen/your_table/table.js +33 -0
  27. package/package.json +5 -2
  28. package/dist/mod.js +0 -1081
  29. /package/dist/{mod.d.ts → sql_gen/mod.d.ts} +0 -0
  30. /package/dist/{select → sql_gen/select}/DbTable.d.ts +0 -0
  31. /package/dist/{select → sql_gen/select}/TableQuery.d.ts +0 -0
  32. /package/dist/{select → sql_gen/select}/_statement.d.ts +0 -0
  33. /package/dist/{select → sql_gen/select}/query_chain_abstract.d.ts +0 -0
  34. /package/dist/{select → sql_gen/select}/query_chain_insert.d.ts +0 -0
  35. /package/dist/{select → sql_gen/select}/query_chain_select.d.ts +0 -0
  36. /package/dist/{select → sql_gen/select}/type.d.ts +0 -0
  37. /package/dist/{sql_value → sql_gen/sql_value}/db_type.d.ts +0 -0
  38. /package/dist/{sql_value → sql_gen/sql_value}/sql_value.d.ts +0 -0
  39. /package/dist/{util.d.ts → sql_gen/util.d.ts} +0 -0
  40. /package/dist/{your_table → sql_gen/your_table}/checker.d.ts +0 -0
  41. /package/dist/{your_table → sql_gen/your_table}/infer_db_type.d.ts +0 -0
  42. /package/dist/{your_table → sql_gen/your_table}/mod.d.ts +0 -0
  43. /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.1",
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",