@pangza/orm 0.0.0-stage → 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/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/index.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
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.MapperXml = exports.relationToFieldSelect = exports.getRelation = exports.getRelations = exports.ManyToMany = exports.OneToMany = exports.ManyToOne = exports.buildRowParamContext = exports.hydrateRelations = exports.hydrateFieldSelects = exports.getFieldSelect = exports.getFieldSelects = exports.registerFieldSelect = exports.Transactional = exports.MAPPER_ENTITY_KEY = exports.Param = exports.Delete = exports.Update = exports.Insert = exports.Select = exports.OptimisticLockError = exports.OrmError = exports.DEFAULT_SQL_LOG_FORMAT = exports.detectSqlType = exports.renderSqlLog = exports.getSqlLogRuntime = exports.configureSqlLog = exports.getMetaObjectHandler = exports.setMetaObjectHandler = exports.getOrmConfig = exports.configureOrm = exports.assertSafeLastSql = exports.escapeLike = exports.assertSafeUint = exports.getQueryWrapperAndPage = exports.getQueryWrapper = exports.getTableSearchMeta = exports.OperTypeEnum = exports.TableSearch = exports.assertIdent = exports.QueryWrapper = exports.clearTableCache = exports.useTable = exports.table = exports.BaseMapper = exports.markOrmEnabled = exports.isOrmEnabled = exports.ORM_MODULE_FLAG = exports.EnableOrm = exports.Db = void 0;
|
|
7
|
+
exports.DataSource = exports.getDialect = exports.mapResultRows = exports.mapResultRow = exports.defaultIdentifierGenerator = exports.getIdentifierGenerator = exports.setIdentifierGenerator = exports.resolveIdType = exports.IdType = exports.applyEntityFieldFills = exports.getEntityTableMeta = exports.getEntityIdField = exports.getEntityFields = exports.getTableName = exports.TableField = exports.TableId = exports.TableName = exports.buildParamContext = exports.parseMybatisSql = exports.watchXmlMappers = exports.bootstrapXmlMappers = exports.getXmlStatement = exports.evalTest = exports.renderStatementSql = exports.parseMapperXml = exports.ensureXmlMappersLoaded = exports.loadXmlMappers = exports.xmlMapper = void 0;
|
|
8
|
+
const Db_1 = __importDefault(require("./Db"));
|
|
9
|
+
exports.Db = Db_1.default;
|
|
10
|
+
var enable_1 = require("./enable");
|
|
11
|
+
Object.defineProperty(exports, "EnableOrm", { enumerable: true, get: function () { return enable_1.EnableOrm; } });
|
|
12
|
+
var flag_1 = require("./flag");
|
|
13
|
+
Object.defineProperty(exports, "ORM_MODULE_FLAG", { enumerable: true, get: function () { return flag_1.ORM_MODULE_FLAG; } });
|
|
14
|
+
Object.defineProperty(exports, "isOrmEnabled", { enumerable: true, get: function () { return flag_1.isOrmEnabled; } });
|
|
15
|
+
Object.defineProperty(exports, "markOrmEnabled", { enumerable: true, get: function () { return flag_1.markOrmEnabled; } });
|
|
16
|
+
var BaseMapper_1 = require("./BaseMapper");
|
|
17
|
+
Object.defineProperty(exports, "BaseMapper", { enumerable: true, get: function () { return BaseMapper_1.BaseMapper; } });
|
|
18
|
+
var table_1 = require("./table");
|
|
19
|
+
Object.defineProperty(exports, "table", { enumerable: true, get: function () { return table_1.table; } });
|
|
20
|
+
Object.defineProperty(exports, "useTable", { enumerable: true, get: function () { return table_1.useTable; } });
|
|
21
|
+
Object.defineProperty(exports, "clearTableCache", { enumerable: true, get: function () { return table_1.clearTableCache; } });
|
|
22
|
+
var QueryWrapper_1 = require("./QueryWrapper");
|
|
23
|
+
Object.defineProperty(exports, "QueryWrapper", { enumerable: true, get: function () { return QueryWrapper_1.QueryWrapper; } });
|
|
24
|
+
Object.defineProperty(exports, "assertIdent", { enumerable: true, get: function () { return QueryWrapper_1.assertIdent; } });
|
|
25
|
+
var tableSearch_1 = require("./tableSearch");
|
|
26
|
+
Object.defineProperty(exports, "TableSearch", { enumerable: true, get: function () { return tableSearch_1.TableSearch; } });
|
|
27
|
+
Object.defineProperty(exports, "OperTypeEnum", { enumerable: true, get: function () { return tableSearch_1.OperTypeEnum; } });
|
|
28
|
+
Object.defineProperty(exports, "getTableSearchMeta", { enumerable: true, get: function () { return tableSearch_1.getTableSearchMeta; } });
|
|
29
|
+
Object.defineProperty(exports, "getQueryWrapper", { enumerable: true, get: function () { return tableSearch_1.getQueryWrapper; } });
|
|
30
|
+
Object.defineProperty(exports, "getQueryWrapperAndPage", { enumerable: true, get: function () { return tableSearch_1.getQueryWrapperAndPage; } });
|
|
31
|
+
var security_1 = require("./security");
|
|
32
|
+
Object.defineProperty(exports, "assertSafeUint", { enumerable: true, get: function () { return security_1.assertSafeUint; } });
|
|
33
|
+
Object.defineProperty(exports, "escapeLike", { enumerable: true, get: function () { return security_1.escapeLike; } });
|
|
34
|
+
Object.defineProperty(exports, "assertSafeLastSql", { enumerable: true, get: function () { return security_1.assertSafeLastSql; } });
|
|
35
|
+
var config_1 = require("./config");
|
|
36
|
+
Object.defineProperty(exports, "configureOrm", { enumerable: true, get: function () { return config_1.configureOrm; } });
|
|
37
|
+
Object.defineProperty(exports, "getOrmConfig", { enumerable: true, get: function () { return config_1.getOrmConfig; } });
|
|
38
|
+
Object.defineProperty(exports, "setMetaObjectHandler", { enumerable: true, get: function () { return config_1.setMetaObjectHandler; } });
|
|
39
|
+
Object.defineProperty(exports, "getMetaObjectHandler", { enumerable: true, get: function () { return config_1.getMetaObjectHandler; } });
|
|
40
|
+
var sqlLog_1 = require("./sqlLog");
|
|
41
|
+
Object.defineProperty(exports, "configureSqlLog", { enumerable: true, get: function () { return sqlLog_1.configureSqlLog; } });
|
|
42
|
+
Object.defineProperty(exports, "getSqlLogRuntime", { enumerable: true, get: function () { return sqlLog_1.getSqlLogRuntime; } });
|
|
43
|
+
Object.defineProperty(exports, "renderSqlLog", { enumerable: true, get: function () { return sqlLog_1.renderSqlLog; } });
|
|
44
|
+
Object.defineProperty(exports, "detectSqlType", { enumerable: true, get: function () { return sqlLog_1.detectSqlType; } });
|
|
45
|
+
Object.defineProperty(exports, "DEFAULT_SQL_LOG_FORMAT", { enumerable: true, get: function () { return sqlLog_1.DEFAULT_SQL_LOG_FORMAT; } });
|
|
46
|
+
var errors_1 = require("./errors");
|
|
47
|
+
Object.defineProperty(exports, "OrmError", { enumerable: true, get: function () { return errors_1.OrmError; } });
|
|
48
|
+
Object.defineProperty(exports, "OptimisticLockError", { enumerable: true, get: function () { return errors_1.OptimisticLockError; } });
|
|
49
|
+
var sqlDecorators_1 = require("./sqlDecorators");
|
|
50
|
+
Object.defineProperty(exports, "Select", { enumerable: true, get: function () { return sqlDecorators_1.Select; } });
|
|
51
|
+
Object.defineProperty(exports, "Insert", { enumerable: true, get: function () { return sqlDecorators_1.Insert; } });
|
|
52
|
+
Object.defineProperty(exports, "Update", { enumerable: true, get: function () { return sqlDecorators_1.Update; } });
|
|
53
|
+
Object.defineProperty(exports, "Delete", { enumerable: true, get: function () { return sqlDecorators_1.Delete; } });
|
|
54
|
+
Object.defineProperty(exports, "Param", { enumerable: true, get: function () { return sqlDecorators_1.Param; } });
|
|
55
|
+
Object.defineProperty(exports, "MAPPER_ENTITY_KEY", { enumerable: true, get: function () { return sqlDecorators_1.MAPPER_ENTITY_KEY; } });
|
|
56
|
+
var transactional_1 = require("./transactional");
|
|
57
|
+
Object.defineProperty(exports, "Transactional", { enumerable: true, get: function () { return transactional_1.Transactional; } });
|
|
58
|
+
var fieldSelect_1 = require("./fieldSelect");
|
|
59
|
+
Object.defineProperty(exports, "registerFieldSelect", { enumerable: true, get: function () { return fieldSelect_1.registerFieldSelect; } });
|
|
60
|
+
Object.defineProperty(exports, "getFieldSelects", { enumerable: true, get: function () { return fieldSelect_1.getFieldSelects; } });
|
|
61
|
+
Object.defineProperty(exports, "getFieldSelect", { enumerable: true, get: function () { return fieldSelect_1.getFieldSelect; } });
|
|
62
|
+
var hydrate_1 = require("./hydrate");
|
|
63
|
+
Object.defineProperty(exports, "hydrateFieldSelects", { enumerable: true, get: function () { return hydrate_1.hydrateFieldSelects; } });
|
|
64
|
+
Object.defineProperty(exports, "hydrateRelations", { enumerable: true, get: function () { return hydrate_1.hydrateRelations; } });
|
|
65
|
+
Object.defineProperty(exports, "buildRowParamContext", { enumerable: true, get: function () { return hydrate_1.buildRowParamContext; } });
|
|
66
|
+
var relation_1 = require("./relation");
|
|
67
|
+
Object.defineProperty(exports, "ManyToOne", { enumerable: true, get: function () { return relation_1.ManyToOne; } });
|
|
68
|
+
Object.defineProperty(exports, "OneToMany", { enumerable: true, get: function () { return relation_1.OneToMany; } });
|
|
69
|
+
Object.defineProperty(exports, "ManyToMany", { enumerable: true, get: function () { return relation_1.ManyToMany; } });
|
|
70
|
+
Object.defineProperty(exports, "getRelations", { enumerable: true, get: function () { return relation_1.getRelations; } });
|
|
71
|
+
Object.defineProperty(exports, "getRelation", { enumerable: true, get: function () { return relation_1.getRelation; } });
|
|
72
|
+
Object.defineProperty(exports, "relationToFieldSelect", { enumerable: true, get: function () { return relation_1.relationToFieldSelect; } });
|
|
73
|
+
var xml_1 = require("./xml");
|
|
74
|
+
Object.defineProperty(exports, "MapperXml", { enumerable: true, get: function () { return xml_1.MapperXml; } });
|
|
75
|
+
Object.defineProperty(exports, "xmlMapper", { enumerable: true, get: function () { return xml_1.xmlMapper; } });
|
|
76
|
+
Object.defineProperty(exports, "loadXmlMappers", { enumerable: true, get: function () { return xml_1.loadXmlMappers; } });
|
|
77
|
+
Object.defineProperty(exports, "ensureXmlMappersLoaded", { enumerable: true, get: function () { return xml_1.ensureXmlMappersLoaded; } });
|
|
78
|
+
Object.defineProperty(exports, "parseMapperXml", { enumerable: true, get: function () { return xml_1.parseMapperXml; } });
|
|
79
|
+
Object.defineProperty(exports, "renderStatementSql", { enumerable: true, get: function () { return xml_1.renderStatementSql; } });
|
|
80
|
+
Object.defineProperty(exports, "evalTest", { enumerable: true, get: function () { return xml_1.evalTest; } });
|
|
81
|
+
Object.defineProperty(exports, "getXmlStatement", { enumerable: true, get: function () { return xml_1.getXmlStatement; } });
|
|
82
|
+
Object.defineProperty(exports, "bootstrapXmlMappers", { enumerable: true, get: function () { return xml_1.bootstrapXmlMappers; } });
|
|
83
|
+
Object.defineProperty(exports, "watchXmlMappers", { enumerable: true, get: function () { return xml_1.watchXmlMappers; } });
|
|
84
|
+
var sqlTemplate_1 = require("./sqlTemplate");
|
|
85
|
+
Object.defineProperty(exports, "parseMybatisSql", { enumerable: true, get: function () { return sqlTemplate_1.parseMybatisSql; } });
|
|
86
|
+
Object.defineProperty(exports, "buildParamContext", { enumerable: true, get: function () { return sqlTemplate_1.buildParamContext; } });
|
|
87
|
+
var entityDecorators_1 = require("./entityDecorators");
|
|
88
|
+
Object.defineProperty(exports, "TableName", { enumerable: true, get: function () { return entityDecorators_1.TableName; } });
|
|
89
|
+
Object.defineProperty(exports, "TableId", { enumerable: true, get: function () { return entityDecorators_1.TableId; } });
|
|
90
|
+
Object.defineProperty(exports, "TableField", { enumerable: true, get: function () { return entityDecorators_1.TableField; } });
|
|
91
|
+
Object.defineProperty(exports, "getTableName", { enumerable: true, get: function () { return entityDecorators_1.getTableName; } });
|
|
92
|
+
Object.defineProperty(exports, "getEntityFields", { enumerable: true, get: function () { return entityDecorators_1.getEntityFields; } });
|
|
93
|
+
Object.defineProperty(exports, "getEntityIdField", { enumerable: true, get: function () { return entityDecorators_1.getEntityIdField; } });
|
|
94
|
+
Object.defineProperty(exports, "getEntityTableMeta", { enumerable: true, get: function () { return entityDecorators_1.getEntityTableMeta; } });
|
|
95
|
+
Object.defineProperty(exports, "applyEntityFieldFills", { enumerable: true, get: function () { return entityDecorators_1.applyEntityFieldFills; } });
|
|
96
|
+
var IdType_1 = require("./IdType");
|
|
97
|
+
Object.defineProperty(exports, "IdType", { enumerable: true, get: function () { return IdType_1.IdType; } });
|
|
98
|
+
Object.defineProperty(exports, "resolveIdType", { enumerable: true, get: function () { return IdType_1.resolveIdType; } });
|
|
99
|
+
var identifier_1 = require("./identifier");
|
|
100
|
+
Object.defineProperty(exports, "setIdentifierGenerator", { enumerable: true, get: function () { return identifier_1.setIdentifierGenerator; } });
|
|
101
|
+
Object.defineProperty(exports, "getIdentifierGenerator", { enumerable: true, get: function () { return identifier_1.getIdentifierGenerator; } });
|
|
102
|
+
Object.defineProperty(exports, "defaultIdentifierGenerator", { enumerable: true, get: function () { return identifier_1.defaultIdentifierGenerator; } });
|
|
103
|
+
var resultMap_1 = require("./resultMap");
|
|
104
|
+
Object.defineProperty(exports, "mapResultRow", { enumerable: true, get: function () { return resultMap_1.mapResultRow; } });
|
|
105
|
+
Object.defineProperty(exports, "mapResultRows", { enumerable: true, get: function () { return resultMap_1.mapResultRows; } });
|
|
106
|
+
var dialect_1 = require("./dialect");
|
|
107
|
+
Object.defineProperty(exports, "getDialect", { enumerable: true, get: function () { return dialect_1.getDialect; } });
|
|
108
|
+
var DataSource_1 = require("./DataSource");
|
|
109
|
+
Object.defineProperty(exports, "DataSource", { enumerable: true, get: function () { return DataSource_1.DataSource; } });
|
|
110
|
+
// 按 YAML 加载 XML Mapper;开启 mapperReload 时监听变更
|
|
111
|
+
try {
|
|
112
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
113
|
+
const { bootstrapXmlMappers, watchXmlMappers } = require("./xml");
|
|
114
|
+
bootstrapXmlMappers();
|
|
115
|
+
watchXmlMappers();
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
console.error("[ORM] XML Mapper 加载失败:", err);
|
|
119
|
+
}
|
|
120
|
+
// 不在 import 时连库:避免启动被 DB 超时拖慢;首次 query 走 DataSource.connect()
|
|
121
|
+
exports.default = Db_1.default;
|
|
122
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import { type FieldSelectMeta } from "./fieldSelect";
|
|
3
|
+
import type { Dialect } from "./dialect";
|
|
4
|
+
export type RelationKind = "ManyToOne" | "OneToMany" | "ManyToMany";
|
|
5
|
+
export type RelationFetch = "SELECT" | "JOIN";
|
|
6
|
+
export interface RelationBaseOptions {
|
|
7
|
+
/** selectList / selectPage 时是否自动填充,默认:ManyToOne true,其余 false */
|
|
8
|
+
eager?: boolean;
|
|
9
|
+
/** 读策略,首期仅 SELECT;JOIN 后续 */
|
|
10
|
+
fetch?: RelationFetch;
|
|
11
|
+
/** 嵌套关联递归层数,默认 0 */
|
|
12
|
+
depth?: number;
|
|
13
|
+
datasource?: string;
|
|
14
|
+
db?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ManyToOneOptions extends RelationBaseOptions {
|
|
17
|
+
/** 本表外键列名 */
|
|
18
|
+
foreignKey: string;
|
|
19
|
+
/** 目标表主键列,默认 id */
|
|
20
|
+
targetKey?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface OneToManyOptions extends RelationBaseOptions {
|
|
23
|
+
/** 对方表指向本表的外键列名 */
|
|
24
|
+
foreignKey: string;
|
|
25
|
+
/** 本表被引用列,默认本表主键 */
|
|
26
|
+
localKey?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ManyToManyOptions extends RelationBaseOptions {
|
|
29
|
+
joinTable: string;
|
|
30
|
+
/** 中间表指向本表的列 */
|
|
31
|
+
joinColumn: string;
|
|
32
|
+
/** 中间表指向目标表的列 */
|
|
33
|
+
inverseJoinColumn: string;
|
|
34
|
+
/** 目标表主键列,默认 id */
|
|
35
|
+
targetKey?: string;
|
|
36
|
+
/** 本表被引用列,默认本表主键 */
|
|
37
|
+
localKey?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface RelationMeta {
|
|
40
|
+
property: string;
|
|
41
|
+
kind: RelationKind;
|
|
42
|
+
/** 延迟解析目标实体,避免循环引用 */
|
|
43
|
+
target: () => Function;
|
|
44
|
+
foreignKey?: string;
|
|
45
|
+
targetKey: string;
|
|
46
|
+
localKey?: string;
|
|
47
|
+
joinTable?: string;
|
|
48
|
+
joinColumn?: string;
|
|
49
|
+
inverseJoinColumn?: string;
|
|
50
|
+
eager: boolean;
|
|
51
|
+
fetch: RelationFetch;
|
|
52
|
+
depth: number;
|
|
53
|
+
many: boolean;
|
|
54
|
+
datasource?: string;
|
|
55
|
+
db?: string;
|
|
56
|
+
}
|
|
57
|
+
type Ctor = Function;
|
|
58
|
+
/** @ManyToOne(() => Role, { foreignKey: "role_id" }) */
|
|
59
|
+
export declare function ManyToOne(target: () => Function, options: ManyToOneOptions): PropertyDecorator;
|
|
60
|
+
/** @OneToMany(() => Menu, { foreignKey: "parent_id" }) */
|
|
61
|
+
export declare function OneToMany(target: () => Function, options: OneToManyOptions): PropertyDecorator;
|
|
62
|
+
/** @ManyToMany(() => Role, { joinTable, joinColumn, inverseJoinColumn }) */
|
|
63
|
+
export declare function ManyToMany(target: () => Function, options: ManyToManyOptions): PropertyDecorator;
|
|
64
|
+
export declare function getRelations(entity: Ctor): RelationMeta[];
|
|
65
|
+
export declare function getRelation(entity: Ctor, property: string): RelationMeta | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* 把关联元数据编译为 FieldSelect 形态(复用 hydrate 批 IN)。
|
|
68
|
+
* SQL 使用指定方言引号。
|
|
69
|
+
*/
|
|
70
|
+
export declare function relationToFieldSelect(ownerEntity: Function, meta: RelationMeta, dialect?: Dialect): FieldSelectMeta;
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=relation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../src/relation.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAErE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;AACpE,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IAClC,iEAAiE;IACjE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IAC3D,aAAa;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IAC3D,mBAAmB;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,sBAAsB;IACtB,MAAM,EAAE,MAAM,QAAQ,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAID,KAAK,IAAI,GAAG,QAAQ,CAAC;AA0CrB,wDAAwD;AACxD,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,QAAQ,EACtB,OAAO,EAAE,gBAAgB,GACxB,iBAAiB,CAkBnB;AAED,0DAA0D;AAC1D,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,QAAQ,EACtB,OAAO,EAAE,gBAAgB,GACxB,iBAAiB,CAoBnB;AAED,4EAA4E;AAC5E,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,QAAQ,EACtB,OAAO,EAAE,iBAAiB,GACzB,iBAAiB,CAsBnB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,IAAI,GAAG,YAAY,EAAE,CAEzD;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,MAAM,GACf,YAAY,GAAG,SAAS,CAE1B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,QAAQ,EACrB,IAAI,EAAE,YAAY,EAClB,OAAO,CAAC,EAAE,OAAO,GAChB,eAAe,CAiCjB"}
|
package/dist/relation.js
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ManyToOne = ManyToOne;
|
|
4
|
+
exports.OneToMany = OneToMany;
|
|
5
|
+
exports.ManyToMany = ManyToMany;
|
|
6
|
+
exports.getRelations = getRelations;
|
|
7
|
+
exports.getRelation = getRelation;
|
|
8
|
+
exports.relationToFieldSelect = relationToFieldSelect;
|
|
9
|
+
require("reflect-metadata");
|
|
10
|
+
const beanKeys_1 = require("@pangza/core/Json/beanKeys");
|
|
11
|
+
const entityDecorators_1 = require("./entityDecorators");
|
|
12
|
+
const fieldSelect_1 = require("./fieldSelect");
|
|
13
|
+
const security_1 = require("./security");
|
|
14
|
+
const dialect_1 = require("./dialect");
|
|
15
|
+
const RELATIONS_KEY = Symbol.for("pangza.orm.relations");
|
|
16
|
+
function relationMap(ctor) {
|
|
17
|
+
return (Reflect.getOwnMetadata(RELATIONS_KEY, ctor) ?? {});
|
|
18
|
+
}
|
|
19
|
+
function saveRelation(ctor, meta) {
|
|
20
|
+
if ((0, fieldSelect_1.getFieldSelect)(ctor, meta.property)) {
|
|
21
|
+
throw new Error(`@${meta.kind}(${meta.property}) 与字段 @Select 不能同时用于同一属性`);
|
|
22
|
+
}
|
|
23
|
+
const prev = relationMap(ctor)[meta.property];
|
|
24
|
+
if (prev) {
|
|
25
|
+
throw new Error(`属性 ${meta.property} 已声明关联 ${prev.kind}`);
|
|
26
|
+
}
|
|
27
|
+
(0, beanKeys_1.addBeanKey)(ctor, meta.property);
|
|
28
|
+
Reflect.defineMetadata(RELATIONS_KEY, { ...relationMap(ctor), [meta.property]: meta }, ctor);
|
|
29
|
+
}
|
|
30
|
+
function resolveTargetTable(target) {
|
|
31
|
+
const name = (0, entityDecorators_1.getTableName)(target);
|
|
32
|
+
if (!name) {
|
|
33
|
+
throw new Error(`关联目标 ${target.name || "Entity"} 缺少 @TableName`);
|
|
34
|
+
}
|
|
35
|
+
return (0, security_1.assertIdent)(name);
|
|
36
|
+
}
|
|
37
|
+
function resolveIdColumn(entity, fallback = "id") {
|
|
38
|
+
return (0, security_1.assertIdent)((0, entityDecorators_1.getEntityIdField)(entity)?.column ?? fallback);
|
|
39
|
+
}
|
|
40
|
+
/** @ManyToOne(() => Role, { foreignKey: "role_id" }) */
|
|
41
|
+
function ManyToOne(target, options) {
|
|
42
|
+
return (proto, propertyKey) => {
|
|
43
|
+
const property = String(propertyKey);
|
|
44
|
+
const fk = (0, security_1.assertIdent)(options.foreignKey);
|
|
45
|
+
saveRelation(proto.constructor, {
|
|
46
|
+
property,
|
|
47
|
+
kind: "ManyToOne",
|
|
48
|
+
target,
|
|
49
|
+
foreignKey: fk,
|
|
50
|
+
targetKey: (0, security_1.assertIdent)(options.targetKey ?? "id"),
|
|
51
|
+
eager: options.eager !== false,
|
|
52
|
+
fetch: options.fetch ?? "SELECT",
|
|
53
|
+
depth: Math.max(0, options.depth ?? 0),
|
|
54
|
+
many: false,
|
|
55
|
+
datasource: options.datasource?.trim() || undefined,
|
|
56
|
+
db: options.db?.trim() || undefined,
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** @OneToMany(() => Menu, { foreignKey: "parent_id" }) */
|
|
61
|
+
function OneToMany(target, options) {
|
|
62
|
+
return (proto, propertyKey) => {
|
|
63
|
+
const property = String(propertyKey);
|
|
64
|
+
saveRelation(proto.constructor, {
|
|
65
|
+
property,
|
|
66
|
+
kind: "OneToMany",
|
|
67
|
+
target,
|
|
68
|
+
foreignKey: (0, security_1.assertIdent)(options.foreignKey),
|
|
69
|
+
targetKey: "id",
|
|
70
|
+
localKey: options.localKey
|
|
71
|
+
? (0, security_1.assertIdent)(options.localKey)
|
|
72
|
+
: undefined,
|
|
73
|
+
eager: options.eager === true,
|
|
74
|
+
fetch: options.fetch ?? "SELECT",
|
|
75
|
+
depth: Math.max(0, options.depth ?? 0),
|
|
76
|
+
many: true,
|
|
77
|
+
datasource: options.datasource?.trim() || undefined,
|
|
78
|
+
db: options.db?.trim() || undefined,
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/** @ManyToMany(() => Role, { joinTable, joinColumn, inverseJoinColumn }) */
|
|
83
|
+
function ManyToMany(target, options) {
|
|
84
|
+
return (proto, propertyKey) => {
|
|
85
|
+
const property = String(propertyKey);
|
|
86
|
+
saveRelation(proto.constructor, {
|
|
87
|
+
property,
|
|
88
|
+
kind: "ManyToMany",
|
|
89
|
+
target,
|
|
90
|
+
joinTable: (0, security_1.assertIdent)(options.joinTable),
|
|
91
|
+
joinColumn: (0, security_1.assertIdent)(options.joinColumn),
|
|
92
|
+
inverseJoinColumn: (0, security_1.assertIdent)(options.inverseJoinColumn),
|
|
93
|
+
targetKey: (0, security_1.assertIdent)(options.targetKey ?? "id"),
|
|
94
|
+
localKey: options.localKey
|
|
95
|
+
? (0, security_1.assertIdent)(options.localKey)
|
|
96
|
+
: undefined,
|
|
97
|
+
eager: options.eager === true,
|
|
98
|
+
fetch: options.fetch ?? "SELECT",
|
|
99
|
+
depth: Math.max(0, options.depth ?? 0),
|
|
100
|
+
many: true,
|
|
101
|
+
datasource: options.datasource?.trim() || undefined,
|
|
102
|
+
db: options.db?.trim() || undefined,
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function getRelations(entity) {
|
|
107
|
+
return Object.values(relationMap(entity));
|
|
108
|
+
}
|
|
109
|
+
function getRelation(entity, property) {
|
|
110
|
+
return relationMap(entity)[property];
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 把关联元数据编译为 FieldSelect 形态(复用 hydrate 批 IN)。
|
|
114
|
+
* SQL 使用指定方言引号。
|
|
115
|
+
*/
|
|
116
|
+
function relationToFieldSelect(ownerEntity, meta, dialect) {
|
|
117
|
+
const d = dialect ?? (0, dialect_1.getDialect)("mysql");
|
|
118
|
+
const q = (name) => d.quoteIdent((0, security_1.assertIdent)(name));
|
|
119
|
+
const target = meta.target();
|
|
120
|
+
const targetTable = resolveTargetTable(target);
|
|
121
|
+
let sql;
|
|
122
|
+
if (meta.kind === "ManyToOne") {
|
|
123
|
+
const fk = meta.foreignKey;
|
|
124
|
+
sql = `SELECT * FROM ${q(targetTable)} WHERE ${q(meta.targetKey)} = #{${fk}}`;
|
|
125
|
+
}
|
|
126
|
+
else if (meta.kind === "OneToMany") {
|
|
127
|
+
const localKey = meta.localKey ?? resolveIdColumn(ownerEntity);
|
|
128
|
+
sql = `SELECT * FROM ${q(targetTable)} WHERE ${q(meta.foreignKey)} = #{${localKey}}`;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
const localKey = meta.localKey ?? resolveIdColumn(ownerEntity);
|
|
132
|
+
const jt = meta.joinTable;
|
|
133
|
+
const alias = "t";
|
|
134
|
+
const j = "j";
|
|
135
|
+
sql =
|
|
136
|
+
`SELECT ${q(alias)}.* FROM ${q(targetTable)} ${q(alias)} ` +
|
|
137
|
+
`INNER JOIN ${q(jt)} ${q(j)} ON ${q(j)}.${q(meta.inverseJoinColumn)} = ${q(alias)}.${q(meta.targetKey)} ` +
|
|
138
|
+
`WHERE ${q(j)}.${q(meta.joinColumn)} = #{${localKey}}`;
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
property: meta.property,
|
|
142
|
+
sql,
|
|
143
|
+
many: meta.many,
|
|
144
|
+
depth: meta.depth,
|
|
145
|
+
eager: meta.eager,
|
|
146
|
+
datasource: meta.datasource,
|
|
147
|
+
db: meta.db,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=relation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relation.js","sourceRoot":"","sources":["../src/relation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 查询结果键名映射(对齐 MyBatis mapUnderscoreToCamelCase)。
|
|
3
|
+
* 默认开启:create_time → createTime。
|
|
4
|
+
*/
|
|
5
|
+
export declare function mapResultRow<T extends Record<string, any>>(row: T | null | undefined): T | null;
|
|
6
|
+
export declare function mapResultRows<T extends Record<string, any>>(rows: T[]): T[];
|
|
7
|
+
//# sourceMappingURL=resultMap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resultMap.d.ts","sourceRoot":"","sources":["../src/resultMap.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACxD,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,GACxB,CAAC,GAAG,IAAI,CAIV;AAED,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAI3E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mapResultRow = mapResultRow;
|
|
4
|
+
exports.mapResultRows = mapResultRows;
|
|
5
|
+
const case_1 = require("@pangza/core/utils/case");
|
|
6
|
+
const config_1 = require("./config");
|
|
7
|
+
/**
|
|
8
|
+
* 查询结果键名映射(对齐 MyBatis mapUnderscoreToCamelCase)。
|
|
9
|
+
* 默认开启:create_time → createTime。
|
|
10
|
+
*/
|
|
11
|
+
function mapResultRow(row) {
|
|
12
|
+
if (!row)
|
|
13
|
+
return null;
|
|
14
|
+
if (!(0, config_1.getOrmConfig)().mapUnderscoreToCamelCase)
|
|
15
|
+
return row;
|
|
16
|
+
return (0, case_1.rowToCamel)(row);
|
|
17
|
+
}
|
|
18
|
+
function mapResultRows(rows) {
|
|
19
|
+
if (!rows?.length)
|
|
20
|
+
return rows ?? [];
|
|
21
|
+
if (!(0, config_1.getOrmConfig)().mapUnderscoreToCamelCase)
|
|
22
|
+
return rows;
|
|
23
|
+
return (0, case_1.rowsToCamel)(rows);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=resultMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resultMap.js","sourceRoot":"","sources":["../src/resultMap.ts"],"names":[],"mappings":";;AAOA,oCAMC;AAED,sCAIC;AAnBD,kDAAkE;AAClE,qCAAwC;AAExC;;;GAGG;AACH,SAAgB,YAAY,CAC1B,GAAyB;IAEzB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC,IAAA,qBAAY,GAAE,CAAC,wBAAwB;QAAE,OAAO,GAAG,CAAC;IACzD,OAAO,IAAA,iBAAU,EAAI,GAA8B,CAAE,CAAC;AACxD,CAAC;AAED,SAAgB,aAAa,CAAgC,IAAS;IACpE,IAAI,CAAC,IAAI,EAAE,MAAM;QAAE,OAAO,IAAI,IAAI,EAAE,CAAC;IACrC,IAAI,CAAC,IAAA,qBAAY,GAAE,CAAC,wBAAwB;QAAE,OAAO,IAAI,CAAC;IAC1D,OAAO,IAAA,kBAAW,EAAI,IAAiC,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ORM SQL 安全工具:标识符白名单、整数校验、LIKE 转义。
|
|
3
|
+
* 值参数一律走 ? 占位,禁止拼接用户输入到 SQL 结构中。
|
|
4
|
+
*/
|
|
5
|
+
/** 校验表名/列名,防止标识符注入 */
|
|
6
|
+
export declare function assertIdent(name: string): string;
|
|
7
|
+
/** 校验非负安全整数(用于 LIMIT / OFFSET / 页码) */
|
|
8
|
+
export declare function assertSafeUint(value: unknown, label?: string): number;
|
|
9
|
+
/** 转义 LIKE 通配符,避免用户输入 %/_ 扩大匹配面 */
|
|
10
|
+
export declare function escapeLike(value: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* 校验 last() 仅允许白名单安全片段。
|
|
13
|
+
* 禁止任意原生 SQL 拼接,降低注入风险。
|
|
14
|
+
*/
|
|
15
|
+
export declare function assertSafeLastSql(sql: string): string;
|
|
16
|
+
//# sourceMappingURL=security.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,sBAAsB;AACtB,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKhD;AAED,uCAAuC;AACvC,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAW,GAAG,MAAM,CAMvE;AAED,mCAAmC;AACnC,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKhD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAYrD"}
|
package/dist/security.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ORM SQL 安全工具:标识符白名单、整数校验、LIKE 转义。
|
|
4
|
+
* 值参数一律走 ? 占位,禁止拼接用户输入到 SQL 结构中。
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.assertIdent = assertIdent;
|
|
8
|
+
exports.assertSafeUint = assertSafeUint;
|
|
9
|
+
exports.escapeLike = escapeLike;
|
|
10
|
+
exports.assertSafeLastSql = assertSafeLastSql;
|
|
11
|
+
const IDENT_RE = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
|
|
12
|
+
const FORBIDDEN_IDENTS = new Set([
|
|
13
|
+
"__proto__",
|
|
14
|
+
"constructor",
|
|
15
|
+
"prototype",
|
|
16
|
+
]);
|
|
17
|
+
/** 校验表名/列名,防止标识符注入 */
|
|
18
|
+
function assertIdent(name) {
|
|
19
|
+
if (typeof name !== "string" || !IDENT_RE.test(name) || FORBIDDEN_IDENTS.has(name)) {
|
|
20
|
+
throw new Error(`非法标识符: ${String(name)}`);
|
|
21
|
+
}
|
|
22
|
+
return name;
|
|
23
|
+
}
|
|
24
|
+
/** 校验非负安全整数(用于 LIMIT / OFFSET / 页码) */
|
|
25
|
+
function assertSafeUint(value, label = "number") {
|
|
26
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
27
|
+
if (!Number.isInteger(n) || n < 0 || n > Number.MAX_SAFE_INTEGER) {
|
|
28
|
+
throw new Error(`非法整数参数 ${label}: ${String(value)}`);
|
|
29
|
+
}
|
|
30
|
+
return n;
|
|
31
|
+
}
|
|
32
|
+
/** 转义 LIKE 通配符,避免用户输入 %/_ 扩大匹配面 */
|
|
33
|
+
function escapeLike(value) {
|
|
34
|
+
return String(value)
|
|
35
|
+
.replace(/\\/g, "\\\\")
|
|
36
|
+
.replace(/%/g, "\\%")
|
|
37
|
+
.replace(/_/g, "\\_");
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 校验 last() 仅允许白名单安全片段。
|
|
41
|
+
* 禁止任意原生 SQL 拼接,降低注入风险。
|
|
42
|
+
*/
|
|
43
|
+
function assertSafeLastSql(sql) {
|
|
44
|
+
const trimmed = String(sql).trim().replace(/\s+/g, " ");
|
|
45
|
+
if (!/^(LIMIT\s+\d+(\s+OFFSET\s+\d+)?|FOR UPDATE|LOCK IN SHARE MODE)$/i.test(trimmed)) {
|
|
46
|
+
throw new Error("last() 仅允许: LIMIT n [OFFSET m] / FOR UPDATE / LOCK IN SHARE MODE");
|
|
47
|
+
}
|
|
48
|
+
return trimmed;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAUH,kCAKC;AAGD,wCAMC;AAGD,gCAKC;AAMD,8CAYC;AAhDD,MAAM,QAAQ,GAAG,0BAA0B,CAAC;AAC5C,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,WAAW;IACX,aAAa;IACb,WAAW;CACZ,CAAC,CAAC;AAEH,sBAAsB;AACtB,SAAgB,WAAW,CAAC,IAAY;IACtC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACnF,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uCAAuC;AACvC,SAAgB,cAAc,CAAC,KAAc,EAAE,KAAK,GAAG,QAAQ;IAC7D,MAAM,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,mCAAmC;AACnC,SAAgB,UAAU,CAAC,KAAa;IACtC,OAAO,MAAM,CAAC,KAAK,CAAC;SACjB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,GAAW;IAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxD,IACE,CAAC,kEAAkE,CAAC,IAAI,CACtE,OAAO,CACR,EACD,CAAC;QACD,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import type { DbType } from "./dialect";
|
|
3
|
+
import { type FieldSelectOptions } from "./fieldSelect";
|
|
4
|
+
/** Mapper 类上挂的实体(供方法级 @Select 结果自动填充字段 @Select) */
|
|
5
|
+
export declare const MAPPER_ENTITY_KEY: unique symbol;
|
|
6
|
+
/** 方法级 SQL 装饰器数据源选项 */
|
|
7
|
+
export interface SqlExecuteOptions {
|
|
8
|
+
/**
|
|
9
|
+
* 数据源名称(Db.register 的名字),默认 "default"。
|
|
10
|
+
* 与 db 同时存在时以 datasource 为准。
|
|
11
|
+
*/
|
|
12
|
+
datasource?: string;
|
|
13
|
+
/**
|
|
14
|
+
* 按已注册数据源的数据库类型查找(mysql / postgresql / sqlserver)。
|
|
15
|
+
* 同类型有多个时须改用 datasource。
|
|
16
|
+
*/
|
|
17
|
+
db?: DbType | string;
|
|
18
|
+
}
|
|
19
|
+
export type SelectOptions = FieldSelectOptions & SqlExecuteOptions;
|
|
20
|
+
/**
|
|
21
|
+
* @Param("id")
|
|
22
|
+
* 为方法参数命名,供 SQL 中 #{id} / ${id} 引用。
|
|
23
|
+
*/
|
|
24
|
+
export declare function Param(name: string): ParameterDecorator;
|
|
25
|
+
/**
|
|
26
|
+
* @Select — 方法装饰器或字段装饰器。
|
|
27
|
+
*
|
|
28
|
+
* 方法:执行 SQL,返回行数组。
|
|
29
|
+
* 字段:查询结果映射到该属性(父行字段可用 #{id} / #{parentId} 等引用)。
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* @Select("SELECT * FROM user WHERE id = #{id}")
|
|
33
|
+
* findById(@Param("id") id: string) {}
|
|
34
|
+
*
|
|
35
|
+
* @Select('SELECT * FROM "user" WHERE id = #{id}', { db: "postgresql" })
|
|
36
|
+
* findOnPg(@Param("id") id: string) {}
|
|
37
|
+
*
|
|
38
|
+
* @Select("SELECT * FROM menu WHERE parent_id = #{id}", { many: true })
|
|
39
|
+
* children?: Menu[];
|
|
40
|
+
*/
|
|
41
|
+
export declare function Select(sql: string, options?: SelectOptions): MethodDecorator & PropertyDecorator;
|
|
42
|
+
/**
|
|
43
|
+
* @Insert("INSERT INTO user(name) VALUES(#{name})")
|
|
44
|
+
* 返回 insertId;PostgreSQL / SQL Server 建议在 SQL 中写 RETURNING / OUTPUT。
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* @Insert("INSERT INTO user(name) VALUES(#{name})", { datasource: "pg" })
|
|
48
|
+
*/
|
|
49
|
+
export declare const Insert: (sql: string, options?: SqlExecuteOptions) => MethodDecorator;
|
|
50
|
+
/**
|
|
51
|
+
* @Update("UPDATE user SET name = #{name} WHERE id = #{id}")
|
|
52
|
+
* 返回 affectedRows。
|
|
53
|
+
*/
|
|
54
|
+
export declare const Update: (sql: string, options?: SqlExecuteOptions) => MethodDecorator;
|
|
55
|
+
/**
|
|
56
|
+
* @Delete("DELETE FROM user WHERE id = #{id}")
|
|
57
|
+
* 返回 affectedRows(物理删除;逻辑删除请用 BaseMapper.delete*)。
|
|
58
|
+
*/
|
|
59
|
+
export declare const Delete: (sql: string, options?: SqlExecuteOptions) => MethodDecorator;
|
|
60
|
+
//# sourceMappingURL=sqlDecorators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlDecorators.d.ts","sourceRoot":"","sources":["../src/sqlDecorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAK7E,mDAAmD;AACnD,eAAO,MAAM,iBAAiB,eAAwC,CAAC;AAIvE,uBAAuB;AACvB,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;AAuBnE;;;GAGG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAatD;AA0DD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,MAAM,CACpB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,aAAa,GACtB,eAAe,GAAG,iBAAiB,CA+BrC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,QAlHJ,MAAM,YAAY,iBAAiB,KAAG,eAkHG,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,MAAM,QAxHJ,MAAM,YAAY,iBAAiB,KAAG,eAwHG,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,MAAM,QA9HJ,MAAM,YAAY,iBAAiB,KAAG,eA8HG,CAAC"}
|