@pangza/orm 0.0.0-stage → 1.0.1
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/README.md +2 -2
- package/dist/BaseMapper.d.ts +112 -0
- package/dist/BaseMapper.d.ts.map +1 -0
- package/dist/BaseMapper.js +653 -0
- package/dist/BaseMapper.js.map +1 -0
- package/dist/DataSource.d.ts +61 -0
- package/dist/DataSource.d.ts.map +1 -0
- package/dist/DataSource.js +350 -0
- package/dist/DataSource.js.map +1 -0
- package/dist/Db.d.ts +67 -0
- package/dist/Db.d.ts.map +1 -0
- package/dist/Db.js +222 -0
- package/dist/Db.js.map +1 -0
- package/dist/IdType.d.ts +22 -0
- package/dist/IdType.d.ts.map +1 -0
- package/dist/IdType.js +34 -0
- package/dist/IdType.js.map +1 -0
- package/dist/QueryWrapper.d.ts +110 -0
- package/dist/QueryWrapper.d.ts.map +1 -0
- package/dist/QueryWrapper.js +343 -0
- package/dist/QueryWrapper.js.map +1 -0
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +80 -0
- package/dist/config.js.map +1 -0
- package/dist/dialect.d.ts +41 -0
- package/dist/dialect.d.ts.map +1 -0
- package/dist/dialect.js +171 -0
- package/dist/dialect.js.map +1 -0
- package/dist/enable.d.ts +12 -0
- package/dist/enable.d.ts.map +1 -0
- package/dist/enable.js +31 -0
- package/dist/enable.js.map +1 -0
- package/dist/entityDecorators.d.ts +77 -0
- package/dist/entityDecorators.d.ts.map +1 -0
- package/dist/entityDecorators.js +150 -0
- package/dist/entityDecorators.js.map +1 -0
- package/dist/errors.d.ts +11 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +22 -0
- package/dist/errors.js.map +1 -0
- package/dist/fieldSelect.d.ts +49 -0
- package/dist/fieldSelect.d.ts.map +1 -0
- package/dist/fieldSelect.js +53 -0
- package/dist/fieldSelect.js.map +1 -0
- package/dist/fill.d.ts +8 -0
- package/dist/fill.d.ts.map +1 -0
- package/dist/fill.js +47 -0
- package/dist/fill.js.map +1 -0
- package/dist/flag.d.ts +2 -0
- package/dist/flag.d.ts.map +1 -0
- package/dist/flag.js +8 -0
- package/dist/flag.js.map +1 -0
- package/dist/hydrate.d.ts +38 -0
- package/dist/hydrate.d.ts.map +1 -0
- package/dist/hydrate.js +325 -0
- package/dist/hydrate.js.map +1 -0
- package/dist/identifier.d.ts +14 -0
- package/dist/identifier.d.ts.map +1 -0
- package/dist/identifier.js +51 -0
- package/dist/identifier.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +122 -0
- package/dist/index.js.map +1 -0
- package/dist/relation.d.ts +72 -0
- package/dist/relation.d.ts.map +1 -0
- package/dist/relation.js +150 -0
- package/dist/relation.js.map +1 -0
- package/dist/resultMap.d.ts +7 -0
- package/dist/resultMap.d.ts.map +1 -0
- package/dist/resultMap.js +25 -0
- package/dist/resultMap.js.map +1 -0
- package/dist/security.d.ts +16 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +50 -0
- package/dist/security.js.map +1 -0
- package/dist/sqlDecorators.d.ts +60 -0
- package/dist/sqlDecorators.d.ts.map +1 -0
- package/dist/sqlDecorators.js +147 -0
- package/dist/sqlDecorators.js.map +1 -0
- package/dist/sqlLog.d.ts +30 -0
- package/dist/sqlLog.d.ts.map +1 -0
- package/dist/sqlLog.js +183 -0
- package/dist/sqlLog.js.map +1 -0
- package/dist/sqlTemplate.d.ts +38 -0
- package/dist/sqlTemplate.d.ts.map +1 -0
- package/dist/sqlTemplate.js +112 -0
- package/dist/sqlTemplate.js.map +1 -0
- package/dist/table.d.ts +17 -0
- package/dist/table.d.ts.map +1 -0
- package/dist/table.js +55 -0
- package/dist/table.js.map +1 -0
- package/dist/tableSearch.d.ts +72 -0
- package/dist/tableSearch.d.ts.map +1 -0
- package/dist/tableSearch.js +232 -0
- package/dist/tableSearch.js.map +1 -0
- package/dist/transactional.d.ts +27 -0
- package/dist/transactional.d.ts.map +1 -0
- package/dist/transactional.js +57 -0
- package/dist/transactional.js.map +1 -0
- package/dist/types.d.ts +155 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/xml/MapperXml.d.ts +24 -0
- package/dist/xml/MapperXml.d.ts.map +1 -0
- package/dist/xml/MapperXml.js +92 -0
- package/dist/xml/MapperXml.js.map +1 -0
- package/dist/xml/execute.d.ts +12 -0
- package/dist/xml/execute.d.ts.map +1 -0
- package/dist/xml/execute.js +54 -0
- package/dist/xml/execute.js.map +1 -0
- package/dist/xml/index.d.ts +11 -0
- package/dist/xml/index.d.ts.map +1 -0
- package/dist/xml/index.js +29 -0
- package/dist/xml/index.js.map +1 -0
- package/dist/xml/loadMappers.d.ts +14 -0
- package/dist/xml/loadMappers.d.ts.map +1 -0
- package/dist/xml/loadMappers.js +171 -0
- package/dist/xml/loadMappers.js.map +1 -0
- package/dist/xml/parseMapperXml.d.ts +6 -0
- package/dist/xml/parseMapperXml.d.ts.map +1 -0
- package/dist/xml/parseMapperXml.js +225 -0
- package/dist/xml/parseMapperXml.js.map +1 -0
- package/dist/xml/registry.d.ts +15 -0
- package/dist/xml/registry.d.ts.map +1 -0
- package/dist/xml/registry.js +57 -0
- package/dist/xml/registry.js.map +1 -0
- package/dist/xml/renderSql.d.ts +6 -0
- package/dist/xml/renderSql.d.ts.map +1 -0
- package/dist/xml/renderSql.js +187 -0
- package/dist/xml/renderSql.js.map +1 -0
- package/dist/xml/types.d.ts +52 -0
- package/dist/xml/types.d.ts.map +1 -0
- package/dist/xml/types.js +3 -0
- package/dist/xml/types.js.map +1 -0
- package/dist/xml/xmlMapper.d.ts +16 -0
- package/dist/xml/xmlMapper.d.ts.map +1 -0
- package/dist/xml/xmlMapper.js +49 -0
- package/dist/xml/xmlMapper.js.map +1 -0
- package/package.json +35 -4
package/dist/dialect.js
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SqlServerDialect = exports.PostgresqlDialect = exports.MysqlDialect = void 0;
|
|
4
|
+
exports.getDialect = getDialect;
|
|
5
|
+
function replaceQuestionMarks(sql, to) {
|
|
6
|
+
let i = 0;
|
|
7
|
+
return sql.replace(/\?/g, () => to(++i));
|
|
8
|
+
}
|
|
9
|
+
exports.MysqlDialect = {
|
|
10
|
+
type: "mysql",
|
|
11
|
+
quoteIdent(name) {
|
|
12
|
+
return `\`${name}\``;
|
|
13
|
+
},
|
|
14
|
+
convertPlaceholders(sql) {
|
|
15
|
+
return sql;
|
|
16
|
+
},
|
|
17
|
+
likeEscapeClause() {
|
|
18
|
+
return " ESCAPE '\\\\'";
|
|
19
|
+
},
|
|
20
|
+
appendLimitOffset(sql, limit, offset = 0) {
|
|
21
|
+
if (offset > 0)
|
|
22
|
+
return `${sql} LIMIT ${limit} OFFSET ${offset}`;
|
|
23
|
+
return `${sql} LIMIT ${limit}`;
|
|
24
|
+
},
|
|
25
|
+
listColumnsSql(table) {
|
|
26
|
+
return {
|
|
27
|
+
sql: `SHOW COLUMNS FROM ${this.quoteIdent(table)}`,
|
|
28
|
+
params: [],
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
parseColumnNames(rows) {
|
|
32
|
+
return rows.map((r) => String(r.Field ?? r.field ?? ""));
|
|
33
|
+
},
|
|
34
|
+
prepareInsert(sql) {
|
|
35
|
+
return { sql, returning: false };
|
|
36
|
+
},
|
|
37
|
+
extractInsertId(result) {
|
|
38
|
+
const header = result;
|
|
39
|
+
return Number(header?.insertId ?? 0);
|
|
40
|
+
},
|
|
41
|
+
extractAffectedRows(result) {
|
|
42
|
+
const header = result;
|
|
43
|
+
return Number(header?.affectedRows ?? 0);
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
exports.PostgresqlDialect = {
|
|
47
|
+
type: "postgresql",
|
|
48
|
+
quoteIdent(name) {
|
|
49
|
+
return `"${name}"`;
|
|
50
|
+
},
|
|
51
|
+
convertPlaceholders(sql) {
|
|
52
|
+
return replaceQuestionMarks(sql, (i) => `$${i}`);
|
|
53
|
+
},
|
|
54
|
+
likeEscapeClause() {
|
|
55
|
+
return " ESCAPE '\\'";
|
|
56
|
+
},
|
|
57
|
+
appendLimitOffset(sql, limit, offset = 0) {
|
|
58
|
+
if (offset > 0)
|
|
59
|
+
return `${sql} LIMIT ${limit} OFFSET ${offset}`;
|
|
60
|
+
return `${sql} LIMIT ${limit}`;
|
|
61
|
+
},
|
|
62
|
+
listColumnsSql(table) {
|
|
63
|
+
return {
|
|
64
|
+
sql: `SELECT column_name AS "Field" FROM information_schema.columns WHERE table_schema = current_schema() AND table_name = ?`,
|
|
65
|
+
params: [table],
|
|
66
|
+
};
|
|
67
|
+
},
|
|
68
|
+
parseColumnNames(rows) {
|
|
69
|
+
return rows.map((r) => String(r.Field ?? r.field ?? r.column_name ?? ""));
|
|
70
|
+
},
|
|
71
|
+
prepareInsert(sql, idColumn) {
|
|
72
|
+
return {
|
|
73
|
+
sql: `${sql} RETURNING ${this.quoteIdent(idColumn)}`,
|
|
74
|
+
returning: true,
|
|
75
|
+
};
|
|
76
|
+
},
|
|
77
|
+
extractInsertId(result, idColumn, returning) {
|
|
78
|
+
if (returning && Array.isArray(result) && result[0]) {
|
|
79
|
+
const row = result[0];
|
|
80
|
+
return Number(row[idColumn] ?? 0);
|
|
81
|
+
}
|
|
82
|
+
return 0;
|
|
83
|
+
},
|
|
84
|
+
extractAffectedRows(result) {
|
|
85
|
+
if (Array.isArray(result))
|
|
86
|
+
return result.length;
|
|
87
|
+
const header = result;
|
|
88
|
+
return Number(header?.rowCount ?? header?.affectedRows ?? 0);
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
exports.SqlServerDialect = {
|
|
92
|
+
type: "sqlserver",
|
|
93
|
+
quoteIdent(name) {
|
|
94
|
+
return `[${name}]`;
|
|
95
|
+
},
|
|
96
|
+
convertPlaceholders(sql) {
|
|
97
|
+
// node-mssql 对 ? 支持不稳定,统一转 @p1,@p2
|
|
98
|
+
return replaceQuestionMarks(sql, (i) => `@p${i}`);
|
|
99
|
+
},
|
|
100
|
+
likeEscapeClause() {
|
|
101
|
+
return " ESCAPE '\\'";
|
|
102
|
+
},
|
|
103
|
+
appendLimitOffset(sql, limit, offset = 0, hasOrderBy = false) {
|
|
104
|
+
const order = hasOrderBy ? "" : " ORDER BY (SELECT NULL)";
|
|
105
|
+
return `${sql}${order} OFFSET ${offset} ROWS FETCH NEXT ${limit} ROWS ONLY`;
|
|
106
|
+
},
|
|
107
|
+
listColumnsSql(table) {
|
|
108
|
+
return {
|
|
109
|
+
sql: `SELECT COLUMN_NAME AS [Field] FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ?`,
|
|
110
|
+
params: [table],
|
|
111
|
+
};
|
|
112
|
+
},
|
|
113
|
+
parseColumnNames(rows) {
|
|
114
|
+
return rows.map((r) => String(r.Field ?? r.field ?? r.COLUMN_NAME ?? ""));
|
|
115
|
+
},
|
|
116
|
+
prepareInsert(sql, idColumn) {
|
|
117
|
+
// INSERT INTO t (a) VALUES (@p1) → INSERT INTO t (a) OUTPUT INSERTED.[id] VALUES (@p1)
|
|
118
|
+
const upper = sql.toUpperCase();
|
|
119
|
+
const valuesIdx = upper.lastIndexOf(" VALUES");
|
|
120
|
+
if (valuesIdx < 0) {
|
|
121
|
+
return { sql, returning: false };
|
|
122
|
+
}
|
|
123
|
+
const head = sql.slice(0, valuesIdx);
|
|
124
|
+
const tail = sql.slice(valuesIdx);
|
|
125
|
+
return {
|
|
126
|
+
sql: `${head} OUTPUT INSERTED.${this.quoteIdent(idColumn)}${tail}`,
|
|
127
|
+
returning: true,
|
|
128
|
+
};
|
|
129
|
+
},
|
|
130
|
+
extractInsertId(result, idColumn, returning) {
|
|
131
|
+
if (returning && Array.isArray(result) && result[0]) {
|
|
132
|
+
const row = result[0];
|
|
133
|
+
return Number(row[idColumn] ?? 0);
|
|
134
|
+
}
|
|
135
|
+
return 0;
|
|
136
|
+
},
|
|
137
|
+
extractAffectedRows(result) {
|
|
138
|
+
if (Array.isArray(result))
|
|
139
|
+
return result.length;
|
|
140
|
+
const header = result;
|
|
141
|
+
if (Array.isArray(header?.rowsAffected)) {
|
|
142
|
+
return Number(header.rowsAffected[0] ?? 0);
|
|
143
|
+
}
|
|
144
|
+
return Number(header?.affectedRows ?? 0);
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
const DIALECTS = {
|
|
148
|
+
mysql: exports.MysqlDialect,
|
|
149
|
+
postgresql: exports.PostgresqlDialect,
|
|
150
|
+
sqlserver: exports.SqlServerDialect,
|
|
151
|
+
};
|
|
152
|
+
function getDialect(type = "mysql") {
|
|
153
|
+
const key = String(type || "mysql").toLowerCase();
|
|
154
|
+
const map = {
|
|
155
|
+
mysql: "mysql",
|
|
156
|
+
mariadb: "mysql",
|
|
157
|
+
postgres: "postgresql",
|
|
158
|
+
postgresql: "postgresql",
|
|
159
|
+
pg: "postgresql",
|
|
160
|
+
mssql: "sqlserver",
|
|
161
|
+
sqlserver: "sqlserver",
|
|
162
|
+
"sql-server": "sqlserver",
|
|
163
|
+
};
|
|
164
|
+
const resolved = map[key] ?? key;
|
|
165
|
+
const dialect = DIALECTS[resolved];
|
|
166
|
+
if (!dialect) {
|
|
167
|
+
throw new Error(`不支持的数据库类型: ${type}`);
|
|
168
|
+
}
|
|
169
|
+
return dialect;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=dialect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.js","sourceRoot":"","sources":["../src/dialect.ts"],"names":[],"mappings":"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"}
|
package/dist/enable.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { NextFunction, Request, Response } from "express";
|
|
2
|
+
import type { DataSourceConfig } from "./DataSource";
|
|
3
|
+
/**
|
|
4
|
+
* 显式启用 ORM / 默认数据源:预热仅在 registry 后执行。
|
|
5
|
+
* 未 registry 时启动阶段不会连库;业务首次查询仍可懒连接。
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* Application.registry(EnableOrm()).start();
|
|
9
|
+
* Application.registry(EnableOrm({ host: "127.0.0.1", database: "app" })).start();
|
|
10
|
+
*/
|
|
11
|
+
export declare function EnableOrm(config?: DataSourceConfig): (_req: Request, _res: Response, next: NextFunction) => void;
|
|
12
|
+
//# sourceMappingURL=enable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enable.d.ts","sourceRoot":"","sources":["../src/enable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrD;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,gBAAgB,UAMvB,OAAO,QAAQ,QAAQ,QAAQ,YAAY,UAUtE"}
|
package/dist/enable.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.EnableOrm = EnableOrm;
|
|
7
|
+
const Db_1 = __importDefault(require("./Db"));
|
|
8
|
+
const flag_1 = require("./flag");
|
|
9
|
+
/**
|
|
10
|
+
* 显式启用 ORM / 默认数据源:预热仅在 registry 后执行。
|
|
11
|
+
* 未 registry 时启动阶段不会连库;业务首次查询仍可懒连接。
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* Application.registry(EnableOrm()).start();
|
|
15
|
+
* Application.registry(EnableOrm({ host: "127.0.0.1", database: "app" })).start();
|
|
16
|
+
*/
|
|
17
|
+
function EnableOrm(config) {
|
|
18
|
+
(0, flag_1.markOrmEnabled)(true);
|
|
19
|
+
if (config) {
|
|
20
|
+
Db_1.default.register("default", config);
|
|
21
|
+
}
|
|
22
|
+
const middleware = (_req, _res, next) => {
|
|
23
|
+
next();
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(middleware, flag_1.ORM_MODULE_FLAG, {
|
|
26
|
+
value: true,
|
|
27
|
+
enumerable: false,
|
|
28
|
+
});
|
|
29
|
+
return middleware;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=enable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enable.js","sourceRoot":"","sources":["../src/enable.ts"],"names":[],"mappings":";;;;;AAaA,8BAgBC;AA5BD,8CAAsB;AAEtB,iCAAyD;AAEzD;;;;;;;GAOG;AACH,SAAgB,SAAS,CAAC,MAAyB;IACjD,IAAA,qBAAc,EAAC,IAAI,CAAC,CAAC;IACrB,IAAI,MAAM,EAAE,CAAC;QACX,YAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,IAAc,EAAE,IAAkB,EAAE,EAAE;QACvE,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;IAEF,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,sBAAe,EAAE;QACjD,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,KAAK;KAClB,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import { IdType, type IdTypeValue } from "./IdType";
|
|
3
|
+
/** insertFill / updateFill:直接值,或同步/异步函数 */
|
|
4
|
+
export type FieldFillValue = unknown | (() => unknown) | (() => Promise<unknown>);
|
|
5
|
+
export interface TableIdOptions {
|
|
6
|
+
/** 数据库列名,默认用属性名 */
|
|
7
|
+
value?: string;
|
|
8
|
+
/**
|
|
9
|
+
* 主键策略,默认 IdType.NONE(跟随全局 ORM_ID_TYPE / configureOrm)。
|
|
10
|
+
* @see IdType
|
|
11
|
+
*/
|
|
12
|
+
type?: IdTypeValue;
|
|
13
|
+
}
|
|
14
|
+
export interface TableFieldOptions {
|
|
15
|
+
/** 数据库列名,默认用属性名 */
|
|
16
|
+
value?: string;
|
|
17
|
+
/** false 表示非表字段,不参与默认 SQL 映射 */
|
|
18
|
+
exist?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* 插入时默认填充:常量或函数。
|
|
21
|
+
* 仅当实体上该列仍为 undefined 时写入。
|
|
22
|
+
*/
|
|
23
|
+
insertFill?: FieldFillValue;
|
|
24
|
+
/**
|
|
25
|
+
* 更新时默认填充:常量或函数。
|
|
26
|
+
* 仅当实体上该列仍为 undefined 时写入。
|
|
27
|
+
*/
|
|
28
|
+
updateFill?: FieldFillValue;
|
|
29
|
+
}
|
|
30
|
+
export interface EntityFieldMeta {
|
|
31
|
+
/** 实体属性名 */
|
|
32
|
+
property: string;
|
|
33
|
+
/** 数据库列名 */
|
|
34
|
+
column: string;
|
|
35
|
+
/** 是否主键 */
|
|
36
|
+
id?: boolean;
|
|
37
|
+
/** 主键策略(仅 id 字段有意义) */
|
|
38
|
+
idType?: IdType;
|
|
39
|
+
exist: boolean;
|
|
40
|
+
insertFill?: FieldFillValue;
|
|
41
|
+
updateFill?: FieldFillValue;
|
|
42
|
+
}
|
|
43
|
+
export interface EntityTableMeta {
|
|
44
|
+
tableName: string;
|
|
45
|
+
idColumn: string;
|
|
46
|
+
fields: EntityFieldMeta[];
|
|
47
|
+
}
|
|
48
|
+
type Ctor = Function;
|
|
49
|
+
/**
|
|
50
|
+
* @TableName("user")
|
|
51
|
+
* 标记实体对应表名。
|
|
52
|
+
*/
|
|
53
|
+
export declare function TableName(tableName: string): ClassDecorator;
|
|
54
|
+
/**
|
|
55
|
+
* @TableId() / @TableId("user_id") / @TableId({ value: "user_id", type: IdType.ASSIGN_ID })
|
|
56
|
+
* 标记主键字段及生成策略。
|
|
57
|
+
*/
|
|
58
|
+
export declare function TableId(valueOrOptions?: string | TableIdOptions): PropertyDecorator;
|
|
59
|
+
/** 读取实体主键字段元数据(含 IdType) */
|
|
60
|
+
export declare function getEntityIdField(entity: Ctor): EntityFieldMeta | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* @TableField("nick_name")
|
|
63
|
+
* @TableField({ value: "create_time", insertFill: () => new Date() })
|
|
64
|
+
*/
|
|
65
|
+
export declare function TableField(valueOrOptions?: string | TableFieldOptions): PropertyDecorator;
|
|
66
|
+
export declare function getTableName(entity: Ctor): string | undefined;
|
|
67
|
+
export declare function getEntityFields(entity: Ctor): EntityFieldMeta[];
|
|
68
|
+
export declare function getEntityTableMeta(entity: Ctor): EntityTableMeta | undefined;
|
|
69
|
+
export declare function resolveFieldFill(fill: FieldFillValue | undefined): Promise<unknown>;
|
|
70
|
+
/**
|
|
71
|
+
* 按实体 @TableField 的 insertFill / updateFill 填充。
|
|
72
|
+
* 写入列名(column);属性名与列名不同时同步写属性名,便于对象读写。
|
|
73
|
+
* 仅当目标键仍为 undefined 时填充。
|
|
74
|
+
*/
|
|
75
|
+
export declare function applyEntityFieldFills(entityClass: Ctor | undefined, row: Record<string, any>, mode: "insert" | "update"): Promise<void>;
|
|
76
|
+
export {};
|
|
77
|
+
//# sourceMappingURL=entityDecorators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entityDecorators.d.ts","sourceRoot":"","sources":["../src/entityDecorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAiB,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAEnE,2CAA2C;AAC3C,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,CAAC,MAAM,OAAO,CAAC,GACf,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAE7B,MAAM,WAAW,cAAc;IAC7B,mBAAmB;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,mBAAmB;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAKD,KAAK,IAAI,GAAG,QAAQ,CAAC;AAgBrB;;;GAGG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAM3D;AAED;;;GAGG;AACH,wBAAgB,OAAO,CACrB,cAAc,CAAC,EAAE,MAAM,GAAG,cAAc,GACvC,iBAAiB,CAsBnB;AAED,4BAA4B;AAC5B,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,IAAI,GAAG,eAAe,GAAG,SAAS,CAE1E;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,cAAc,CAAC,EAAE,MAAM,GAAG,iBAAiB,GAC1C,iBAAiB,CAqBnB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAE7D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,IAAI,GAAG,eAAe,EAAE,CAE/D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,IAAI,GAAG,eAAe,GAAG,SAAS,CAU5E;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,cAAc,GAAG,SAAS,GAC/B,OAAO,CAAC,OAAO,CAAC,CAMlB;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,IAAI,GAAG,SAAS,EAC7B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACxB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GACxB,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TableName = TableName;
|
|
4
|
+
exports.TableId = TableId;
|
|
5
|
+
exports.getEntityIdField = getEntityIdField;
|
|
6
|
+
exports.TableField = TableField;
|
|
7
|
+
exports.getTableName = getTableName;
|
|
8
|
+
exports.getEntityFields = getEntityFields;
|
|
9
|
+
exports.getEntityTableMeta = getEntityTableMeta;
|
|
10
|
+
exports.resolveFieldFill = resolveFieldFill;
|
|
11
|
+
exports.applyEntityFieldFills = applyEntityFieldFills;
|
|
12
|
+
require("reflect-metadata");
|
|
13
|
+
const beanKeys_1 = require("@pangza/core/Json/beanKeys");
|
|
14
|
+
const IdType_1 = require("./IdType");
|
|
15
|
+
const TABLE_NAME_KEY = Symbol.for("pangza.orm.tableName");
|
|
16
|
+
const FIELDS_KEY = Symbol.for("pangza.orm.entityFields");
|
|
17
|
+
function fieldMap(ctor) {
|
|
18
|
+
return (Reflect.getOwnMetadata(FIELDS_KEY, ctor) ?? {});
|
|
19
|
+
}
|
|
20
|
+
function saveField(ctor, meta) {
|
|
21
|
+
const map = { ...fieldMap(ctor), [meta.property]: meta };
|
|
22
|
+
Reflect.defineMetadata(FIELDS_KEY, map, ctor);
|
|
23
|
+
(0, beanKeys_1.addBeanKey)(ctor, meta.property);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* @TableName("user")
|
|
27
|
+
* 标记实体对应表名。
|
|
28
|
+
*/
|
|
29
|
+
function TableName(tableName) {
|
|
30
|
+
return (ctor) => {
|
|
31
|
+
const name = String(tableName).trim();
|
|
32
|
+
if (!name)
|
|
33
|
+
throw new Error("@TableName 不能为空");
|
|
34
|
+
Reflect.defineMetadata(TABLE_NAME_KEY, name, ctor);
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* @TableId() / @TableId("user_id") / @TableId({ value: "user_id", type: IdType.ASSIGN_ID })
|
|
39
|
+
* 标记主键字段及生成策略。
|
|
40
|
+
*/
|
|
41
|
+
function TableId(valueOrOptions) {
|
|
42
|
+
return (target, propertyKey) => {
|
|
43
|
+
const property = String(propertyKey);
|
|
44
|
+
let column = property;
|
|
45
|
+
let idType = IdType_1.IdType.NONE;
|
|
46
|
+
if (typeof valueOrOptions === "string") {
|
|
47
|
+
column = valueOrOptions || property;
|
|
48
|
+
}
|
|
49
|
+
else if (valueOrOptions) {
|
|
50
|
+
if (valueOrOptions.value)
|
|
51
|
+
column = valueOrOptions.value;
|
|
52
|
+
if (valueOrOptions.type != null) {
|
|
53
|
+
idType = (0, IdType_1.resolveIdType)(valueOrOptions.type);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const ctor = target.constructor;
|
|
57
|
+
saveField(ctor, {
|
|
58
|
+
property,
|
|
59
|
+
column,
|
|
60
|
+
id: true,
|
|
61
|
+
idType,
|
|
62
|
+
exist: true,
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/** 读取实体主键字段元数据(含 IdType) */
|
|
67
|
+
function getEntityIdField(entity) {
|
|
68
|
+
return getEntityFields(entity).find((f) => f.id);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* @TableField("nick_name")
|
|
72
|
+
* @TableField({ value: "create_time", insertFill: () => new Date() })
|
|
73
|
+
*/
|
|
74
|
+
function TableField(valueOrOptions) {
|
|
75
|
+
return (target, propertyKey) => {
|
|
76
|
+
const property = String(propertyKey);
|
|
77
|
+
let options = {};
|
|
78
|
+
if (typeof valueOrOptions === "string") {
|
|
79
|
+
options = { value: valueOrOptions };
|
|
80
|
+
}
|
|
81
|
+
else if (valueOrOptions) {
|
|
82
|
+
options = valueOrOptions;
|
|
83
|
+
}
|
|
84
|
+
const ctor = target.constructor;
|
|
85
|
+
const prev = fieldMap(ctor)[property];
|
|
86
|
+
saveField(ctor, {
|
|
87
|
+
property,
|
|
88
|
+
column: options.value || property,
|
|
89
|
+
id: prev?.id,
|
|
90
|
+
idType: prev?.idType,
|
|
91
|
+
exist: options.exist !== false,
|
|
92
|
+
insertFill: options.insertFill,
|
|
93
|
+
updateFill: options.updateFill,
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function getTableName(entity) {
|
|
98
|
+
return Reflect.getOwnMetadata(TABLE_NAME_KEY, entity);
|
|
99
|
+
}
|
|
100
|
+
function getEntityFields(entity) {
|
|
101
|
+
return Object.values(fieldMap(entity));
|
|
102
|
+
}
|
|
103
|
+
function getEntityTableMeta(entity) {
|
|
104
|
+
const tableName = getTableName(entity);
|
|
105
|
+
if (!tableName)
|
|
106
|
+
return undefined;
|
|
107
|
+
const fields = getEntityFields(entity);
|
|
108
|
+
const idField = fields.find((f) => f.id);
|
|
109
|
+
return {
|
|
110
|
+
tableName,
|
|
111
|
+
idColumn: idField?.column ?? "id",
|
|
112
|
+
fields,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
async function resolveFieldFill(fill) {
|
|
116
|
+
if (fill === undefined)
|
|
117
|
+
return undefined;
|
|
118
|
+
if (typeof fill === "function") {
|
|
119
|
+
return await fill();
|
|
120
|
+
}
|
|
121
|
+
return fill;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* 按实体 @TableField 的 insertFill / updateFill 填充。
|
|
125
|
+
* 写入列名(column);属性名与列名不同时同步写属性名,便于对象读写。
|
|
126
|
+
* 仅当目标键仍为 undefined 时填充。
|
|
127
|
+
*/
|
|
128
|
+
async function applyEntityFieldFills(entityClass, row, mode) {
|
|
129
|
+
if (!entityClass)
|
|
130
|
+
return;
|
|
131
|
+
const fields = getEntityFields(entityClass);
|
|
132
|
+
for (const field of fields) {
|
|
133
|
+
if (!field.exist)
|
|
134
|
+
continue;
|
|
135
|
+
const fill = mode === "insert" ? field.insertFill : field.updateFill;
|
|
136
|
+
if (fill === undefined)
|
|
137
|
+
continue;
|
|
138
|
+
const colKey = field.column;
|
|
139
|
+
const propKey = field.property;
|
|
140
|
+
const current = row[colKey] !== undefined ? row[colKey] : row[propKey];
|
|
141
|
+
if (current !== undefined)
|
|
142
|
+
continue;
|
|
143
|
+
const value = await resolveFieldFill(fill);
|
|
144
|
+
if (value === undefined || value === null)
|
|
145
|
+
continue;
|
|
146
|
+
// 只写列名,避免 camelCase 属性名被当成 SQL 列
|
|
147
|
+
row[colKey] = value;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=entityDecorators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entityDecorators.js","sourceRoot":"","sources":["../src/entityDecorators.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ResponseCode } from "@pangza/core/types/enums";
|
|
2
|
+
/** ORM 业务错误,携带响应码 */
|
|
3
|
+
export declare class OrmError extends Error {
|
|
4
|
+
readonly code: ResponseCode;
|
|
5
|
+
constructor(message: string, code?: ResponseCode);
|
|
6
|
+
}
|
|
7
|
+
/** 乐观锁版本不匹配 */
|
|
8
|
+
export declare class OptimisticLockError extends OrmError {
|
|
9
|
+
constructor(message?: string);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,qBAAqB;AACrB,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiC;CAKrE;AAED,eAAe;AACf,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,OAAO,SAAkB;CAItC"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OptimisticLockError = exports.OrmError = void 0;
|
|
4
|
+
const enums_1 = require("@pangza/core/types/enums");
|
|
5
|
+
/** ORM 业务错误,携带响应码 */
|
|
6
|
+
class OrmError extends Error {
|
|
7
|
+
constructor(message, code = enums_1.ResponseCode.ERROR) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = "OrmError";
|
|
10
|
+
this.code = code;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.OrmError = OrmError;
|
|
14
|
+
/** 乐观锁版本不匹配 */
|
|
15
|
+
class OptimisticLockError extends OrmError {
|
|
16
|
+
constructor(message = "数据已被修改,请刷新后重试") {
|
|
17
|
+
super(message, enums_1.ResponseCode.CONFLICT);
|
|
18
|
+
this.name = "OptimisticLockError";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.OptimisticLockError = OptimisticLockError;
|
|
22
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAA,oDAAwD;AAExD,qBAAqB;AACrB,MAAa,QAAS,SAAQ,KAAK;IAGjC,YAAY,OAAe,EAAE,OAAqB,oBAAY,CAAC,KAAK;QAClE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AARD,4BAQC;AAED,eAAe;AACf,MAAa,mBAAoB,SAAQ,QAAQ;IAC/C,YAAY,OAAO,GAAG,eAAe;QACnC,KAAK,CAAC,OAAO,EAAE,oBAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AALD,kDAKC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
/** 字段级 @Select 选项(对齐 MyBatis association / collection) */
|
|
3
|
+
export interface FieldSelectOptions {
|
|
4
|
+
/**
|
|
5
|
+
* true → 结果为数组(collection,如 children)
|
|
6
|
+
* false → 单条/单值(association,如 roleName)
|
|
7
|
+
* 默认 false
|
|
8
|
+
*/
|
|
9
|
+
many?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* 取结果中某一列作为值;
|
|
12
|
+
* many=true 时得到标量数组;many=false 时得到单个标量。
|
|
13
|
+
* 不传则 many 时为行对象数组,否则为第一行对象。
|
|
14
|
+
*/
|
|
15
|
+
column?: string;
|
|
16
|
+
/**
|
|
17
|
+
* 对嵌套查出的行是否继续填充其 @Select(同实体递归)。
|
|
18
|
+
* 默认 0:不再递归;设为 1+ 可做有限层树。
|
|
19
|
+
*/
|
|
20
|
+
depth?: number;
|
|
21
|
+
/**
|
|
22
|
+
* 是否在 selectList / selectPage 上自动填充。
|
|
23
|
+
* 默认 true。形如 `列 = #{字段}` 的 SQL 会合并成一条 IN;
|
|
24
|
+
* 含子查询或 LIMIT 的仍逐行查。树形全表加载建议 eager:false,再手动 hydrate。
|
|
25
|
+
*/
|
|
26
|
+
eager?: boolean;
|
|
27
|
+
/** 数据源名称;不传则跟随 hydrate / Mapper 的 datasource */
|
|
28
|
+
datasource?: string;
|
|
29
|
+
/** 按数据库类型查找数据源(同类型多源时须用 datasource) */
|
|
30
|
+
db?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface FieldSelectMeta {
|
|
33
|
+
property: string;
|
|
34
|
+
sql: string;
|
|
35
|
+
many: boolean;
|
|
36
|
+
column?: string;
|
|
37
|
+
depth: number;
|
|
38
|
+
eager: boolean;
|
|
39
|
+
datasource?: string;
|
|
40
|
+
db?: string;
|
|
41
|
+
}
|
|
42
|
+
type Ctor = Function;
|
|
43
|
+
/** 注册属性级 @Select */
|
|
44
|
+
export declare function registerFieldSelect(ctor: Ctor, property: string, sql: string, options?: FieldSelectOptions): void;
|
|
45
|
+
/** 读取实体上全部字段级 @Select */
|
|
46
|
+
export declare function getFieldSelects(ctor: Ctor): FieldSelectMeta[];
|
|
47
|
+
export declare function getFieldSelect(ctor: Ctor, property: string): FieldSelectMeta | undefined;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=fieldSelect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fieldSelect.d.ts","sourceRoot":"","sources":["../src/fieldSelect.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,0DAA0D;AAC1D,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAID,KAAK,IAAI,GAAG,QAAQ,CAAC;AAUrB,oBAAoB;AACpB,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,kBAAuB,GAC/B,IAAI,CAkCN;AAED,yBAAyB;AACzB,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,eAAe,EAAE,CAE7D;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,GACf,eAAe,GAAG,SAAS,CAE7B"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerFieldSelect = registerFieldSelect;
|
|
4
|
+
exports.getFieldSelects = getFieldSelects;
|
|
5
|
+
exports.getFieldSelect = getFieldSelect;
|
|
6
|
+
require("reflect-metadata");
|
|
7
|
+
const beanKeys_1 = require("@pangza/core/Json/beanKeys");
|
|
8
|
+
const FIELD_SELECT_KEY = Symbol.for("pangza.orm.fieldSelect");
|
|
9
|
+
function fieldSelectMap(ctor) {
|
|
10
|
+
return (Reflect.getOwnMetadata(FIELD_SELECT_KEY, ctor) ?? {});
|
|
11
|
+
}
|
|
12
|
+
/** 注册属性级 @Select */
|
|
13
|
+
function registerFieldSelect(ctor, property, sql, options = {}) {
|
|
14
|
+
const template = String(sql).trim();
|
|
15
|
+
if (!template) {
|
|
16
|
+
throw new Error("@Select 字段 SQL 不能为空");
|
|
17
|
+
}
|
|
18
|
+
// 延迟检查关联,避免 relation ↔ fieldSelect 循环依赖在加载期炸
|
|
19
|
+
try {
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
21
|
+
const { getRelation } = require("./relation");
|
|
22
|
+
if (getRelation(ctor, property)) {
|
|
23
|
+
throw new Error(`字段 @Select(${property}) 与关联装饰器不能同时用于同一属性`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
if (err instanceof Error && /不能同时/.test(err.message))
|
|
28
|
+
throw err;
|
|
29
|
+
}
|
|
30
|
+
(0, beanKeys_1.addBeanKey)(ctor, property);
|
|
31
|
+
const map = {
|
|
32
|
+
...fieldSelectMap(ctor),
|
|
33
|
+
[property]: {
|
|
34
|
+
property,
|
|
35
|
+
sql: template,
|
|
36
|
+
many: options.many === true,
|
|
37
|
+
column: options.column?.trim() || undefined,
|
|
38
|
+
depth: Math.max(0, options.depth ?? 0),
|
|
39
|
+
eager: options.eager !== false,
|
|
40
|
+
datasource: options.datasource?.trim() || undefined,
|
|
41
|
+
db: options.db?.trim() || undefined,
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
Reflect.defineMetadata(FIELD_SELECT_KEY, map, ctor);
|
|
45
|
+
}
|
|
46
|
+
/** 读取实体上全部字段级 @Select */
|
|
47
|
+
function getFieldSelects(ctor) {
|
|
48
|
+
return Object.values(fieldSelectMap(ctor));
|
|
49
|
+
}
|
|
50
|
+
function getFieldSelect(ctor, property) {
|
|
51
|
+
return fieldSelectMap(ctor)[property];
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=fieldSelect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fieldSelect.js","sourceRoot":"","sources":["../src/fieldSelect.ts"],"names":[],"mappings":";;AA0DA,kDAuCC;AAGD,0CAEC;AAED,wCAKC;AA7GD,4BAA0B;AAC1B,yDAAwD;AA4CxD,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AAI9D,SAAS,cAAc,CAAC,IAAU;IAChC,OAAO,CACJ,OAAO,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,CAEhC,IAAI,EAAE,CACrB,CAAC;AACJ,CAAC;AAED,oBAAoB;AACpB,SAAgB,mBAAmB,CACjC,IAAU,EACV,QAAgB,EAChB,GAAW,EACX,UAA8B,EAAE;IAEhC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IACD,6CAA6C;IAC7C,IAAI,CAAC;QACH,8DAA8D;QAC9D,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,YAAY,CAE3C,CAAC;QACF,IAAI,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,cAAc,QAAQ,oBAAoB,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,MAAM,GAAG,CAAC;IAClE,CAAC;IACD,IAAA,qBAAU,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG;QACV,GAAG,cAAc,CAAC,IAAI,CAAC;QACvB,CAAC,QAAQ,CAAC,EAAE;YACV,QAAQ;YACR,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI;YAC3B,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,SAAS;YAC3C,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;YACtC,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,KAAK;YAC9B,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,SAAS;YACnD,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,SAAS;SACpC;KACF,CAAC;IACF,OAAO,CAAC,cAAc,CAAC,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,yBAAyB;AACzB,SAAgB,eAAe,CAAC,IAAU;IACxC,OAAO,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,cAAc,CAC5B,IAAU,EACV,QAAgB;IAEhB,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC"}
|
package/dist/fill.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { getOrmConfig } from "./config";
|
|
2
|
+
import type { ResolvedOrmConfig } from "./types";
|
|
3
|
+
/** 插入前默认填充 + 用户拦截 */
|
|
4
|
+
export declare function applyInsertFill(entity: Record<string, any>, cfg: ResolvedOrmConfig, fillEnabled: boolean): Promise<void>;
|
|
5
|
+
/** 更新 / 逻辑删除前默认填充 + 用户拦截 */
|
|
6
|
+
export declare function applyUpdateFill(entity: Record<string, any>, cfg: ResolvedOrmConfig, fillEnabled: boolean): Promise<void>;
|
|
7
|
+
export { getOrmConfig };
|
|
8
|
+
//# sourceMappingURL=fill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../src/fill.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,YAAY,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAyBjD,qBAAqB;AACrB,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,GAAG,EAAE,iBAAiB,EACtB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,IAAI,CAAC,CASf;AAED,4BAA4B;AAC5B,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,GAAG,EAAE,iBAAiB,EACtB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
|