@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
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseMapperXml = parseMapperXml;
|
|
4
|
+
function stripNoise(xml) {
|
|
5
|
+
return xml
|
|
6
|
+
.replace(/<\?xml[\s\S]*?\?>/gi, "")
|
|
7
|
+
.replace(/<!DOCTYPE[\s\S]*?>/gi, "")
|
|
8
|
+
.replace(/<!--[\s\S]*?-->/g, "")
|
|
9
|
+
.trim();
|
|
10
|
+
}
|
|
11
|
+
function parseAttrs(raw) {
|
|
12
|
+
const attrs = {};
|
|
13
|
+
const re = /([A-Za-z_][\w:-]*)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;
|
|
14
|
+
let m;
|
|
15
|
+
while ((m = re.exec(raw))) {
|
|
16
|
+
attrs[m[1]] = m[2] ?? m[3] ?? "";
|
|
17
|
+
}
|
|
18
|
+
return attrs;
|
|
19
|
+
}
|
|
20
|
+
function readOpenTag(src, from) {
|
|
21
|
+
if (src[from] !== "<")
|
|
22
|
+
return null;
|
|
23
|
+
if (src[from + 1] === "/" || src[from + 1] === "!" || src[from + 1] === "?") {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const end = src.indexOf(">", from);
|
|
27
|
+
if (end < 0)
|
|
28
|
+
throw new Error("XML 标签未闭合");
|
|
29
|
+
const body = src.slice(from + 1, end).trim();
|
|
30
|
+
const selfClosing = body.endsWith("/");
|
|
31
|
+
const inner = selfClosing ? body.slice(0, -1).trim() : body;
|
|
32
|
+
const sp = inner.search(/\s/);
|
|
33
|
+
const name = (sp < 0 ? inner : inner.slice(0, sp)).toLowerCase();
|
|
34
|
+
const attrRaw = sp < 0 ? "" : inner.slice(sp);
|
|
35
|
+
return {
|
|
36
|
+
name,
|
|
37
|
+
attrs: parseAttrs(attrRaw),
|
|
38
|
+
selfClosing,
|
|
39
|
+
end: end + 1,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function findCloseTag(src, name, from) {
|
|
43
|
+
const openRe = new RegExp(`<${name}\\b`, "gi");
|
|
44
|
+
const closeRe = new RegExp(`</${name}\\s*>`, "gi");
|
|
45
|
+
let depth = 1;
|
|
46
|
+
let i = from;
|
|
47
|
+
while (i < src.length && depth > 0) {
|
|
48
|
+
openRe.lastIndex = i;
|
|
49
|
+
closeRe.lastIndex = i;
|
|
50
|
+
const o = openRe.exec(src);
|
|
51
|
+
const c = closeRe.exec(src);
|
|
52
|
+
if (!c)
|
|
53
|
+
throw new Error(`缺少结束标签 </${name}>`);
|
|
54
|
+
if (o && o.index < c.index) {
|
|
55
|
+
// 可能是开标签;检查是否自闭合
|
|
56
|
+
const tag = readOpenTag(src, o.index);
|
|
57
|
+
if (tag && !tag.selfClosing)
|
|
58
|
+
depth += 1;
|
|
59
|
+
i = tag ? tag.end : o.index + 1;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
depth -= 1;
|
|
63
|
+
if (depth === 0)
|
|
64
|
+
return c.index;
|
|
65
|
+
i = c.index + c[0].length;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
throw new Error(`缺少结束标签 </${name}>`);
|
|
69
|
+
}
|
|
70
|
+
function parseChildren(src) {
|
|
71
|
+
const nodes = [];
|
|
72
|
+
let i = 0;
|
|
73
|
+
while (i < src.length) {
|
|
74
|
+
const lt = src.indexOf("<", i);
|
|
75
|
+
if (lt < 0) {
|
|
76
|
+
const text = src.slice(i);
|
|
77
|
+
if (text)
|
|
78
|
+
nodes.push({ type: "text", text });
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
if (lt > i) {
|
|
82
|
+
nodes.push({ type: "text", text: src.slice(i, lt) });
|
|
83
|
+
}
|
|
84
|
+
if (src.startsWith("</", lt))
|
|
85
|
+
break;
|
|
86
|
+
// CDATA → 纯文本
|
|
87
|
+
if (src.startsWith("<![CDATA[", lt)) {
|
|
88
|
+
const end = src.indexOf("]]>", lt);
|
|
89
|
+
if (end < 0)
|
|
90
|
+
throw new Error("CDATA 未闭合");
|
|
91
|
+
nodes.push({ type: "text", text: src.slice(lt + 9, end) });
|
|
92
|
+
i = end + 3;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const open = readOpenTag(src, lt);
|
|
96
|
+
if (!open) {
|
|
97
|
+
// 非标签的 <(如 age < 10)当作文本;建议用 CDATA
|
|
98
|
+
nodes.push({ type: "text", text: src[lt] });
|
|
99
|
+
i = lt + 1;
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (open.selfClosing) {
|
|
103
|
+
nodes.push(elementToNode(open.name, open.attrs, []));
|
|
104
|
+
i = open.end;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const closeAt = findCloseTag(src, open.name, open.end);
|
|
108
|
+
const inner = src.slice(open.end, closeAt);
|
|
109
|
+
const closeEnd = src.indexOf(">", closeAt) + 1;
|
|
110
|
+
nodes.push(elementToNode(open.name, open.attrs, parseChildren(inner)));
|
|
111
|
+
i = closeEnd;
|
|
112
|
+
}
|
|
113
|
+
return nodes;
|
|
114
|
+
}
|
|
115
|
+
function elementToNode(name, attrs, children) {
|
|
116
|
+
switch (name) {
|
|
117
|
+
case "if":
|
|
118
|
+
if (!attrs.test?.trim())
|
|
119
|
+
throw new Error("<if> 缺少 test");
|
|
120
|
+
return { type: "if", test: attrs.test.trim(), children };
|
|
121
|
+
case "where":
|
|
122
|
+
return { type: "where", children };
|
|
123
|
+
case "set":
|
|
124
|
+
return { type: "set", children };
|
|
125
|
+
case "trim":
|
|
126
|
+
return {
|
|
127
|
+
type: "trim",
|
|
128
|
+
prefix: attrs.prefix,
|
|
129
|
+
suffix: attrs.suffix,
|
|
130
|
+
prefixOverrides: attrs.prefixOverrides,
|
|
131
|
+
suffixOverrides: attrs.suffixOverrides,
|
|
132
|
+
children,
|
|
133
|
+
};
|
|
134
|
+
case "foreach":
|
|
135
|
+
if (!attrs.collection?.trim())
|
|
136
|
+
throw new Error("<foreach> 缺少 collection");
|
|
137
|
+
return {
|
|
138
|
+
type: "foreach",
|
|
139
|
+
collection: attrs.collection.trim(),
|
|
140
|
+
item: (attrs.item ?? "item").trim(),
|
|
141
|
+
index: attrs.index?.trim(),
|
|
142
|
+
open: attrs.open,
|
|
143
|
+
close: attrs.close,
|
|
144
|
+
separator: attrs.separator,
|
|
145
|
+
children,
|
|
146
|
+
};
|
|
147
|
+
case "include":
|
|
148
|
+
if (!attrs.refid?.trim())
|
|
149
|
+
throw new Error("<include> 缺少 refid");
|
|
150
|
+
return { type: "include", refid: attrs.refid.trim() };
|
|
151
|
+
default:
|
|
152
|
+
// 未知标签当文本保留,避免吞掉合法 SQL 中的比较符误伤;此处仅动态节点白名单
|
|
153
|
+
throw new Error(`XML Mapper 不支持标签 <${name}>`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const STMT_KINDS = new Set(["select", "insert", "update", "delete"]);
|
|
157
|
+
/**
|
|
158
|
+
* 解析单个 Mapper XML 文本。
|
|
159
|
+
*/
|
|
160
|
+
function parseMapperXml(xml, sourceFile = "") {
|
|
161
|
+
const cleaned = stripNoise(xml);
|
|
162
|
+
const rootOpen = readOpenTag(cleaned, cleaned.indexOf("<"));
|
|
163
|
+
if (!rootOpen || rootOpen.name !== "mapper") {
|
|
164
|
+
throw new Error(`${sourceFile || "XML"}: 根节点必须是 <mapper>`);
|
|
165
|
+
}
|
|
166
|
+
const namespace = (rootOpen.attrs.namespace ?? "").trim();
|
|
167
|
+
if (!namespace) {
|
|
168
|
+
throw new Error(`${sourceFile || "XML"}: <mapper> 缺少 namespace`);
|
|
169
|
+
}
|
|
170
|
+
const rootClose = findCloseTag(cleaned, "mapper", rootOpen.end);
|
|
171
|
+
const body = cleaned.slice(rootOpen.end, rootClose);
|
|
172
|
+
const sqlFragments = new Map();
|
|
173
|
+
const statements = [];
|
|
174
|
+
let i = 0;
|
|
175
|
+
while (i < body.length) {
|
|
176
|
+
const lt = body.indexOf("<", i);
|
|
177
|
+
if (lt < 0)
|
|
178
|
+
break;
|
|
179
|
+
if (body.startsWith("</", lt))
|
|
180
|
+
break;
|
|
181
|
+
const open = readOpenTag(body, lt);
|
|
182
|
+
if (!open) {
|
|
183
|
+
i = lt + 1;
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
if (open.selfClosing) {
|
|
187
|
+
i = open.end;
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
const closeAt = findCloseTag(body, open.name, open.end);
|
|
191
|
+
const inner = body.slice(open.end, closeAt);
|
|
192
|
+
const closeEnd = body.indexOf(">", closeAt) + 1;
|
|
193
|
+
const id = (open.attrs.id ?? "").trim();
|
|
194
|
+
if (open.name === "sql") {
|
|
195
|
+
if (!id)
|
|
196
|
+
throw new Error(`${sourceFile}: <sql> 缺少 id`);
|
|
197
|
+
if (sqlFragments.has(id)) {
|
|
198
|
+
throw new Error(`${sourceFile}: 重复 <sql id="${id}">`);
|
|
199
|
+
}
|
|
200
|
+
sqlFragments.set(id, parseChildren(inner));
|
|
201
|
+
}
|
|
202
|
+
else if (STMT_KINDS.has(open.name)) {
|
|
203
|
+
if (!id)
|
|
204
|
+
throw new Error(`${sourceFile}: <${open.name}> 缺少 id`);
|
|
205
|
+
statements.push({
|
|
206
|
+
namespace,
|
|
207
|
+
id,
|
|
208
|
+
kind: open.name,
|
|
209
|
+
nodes: parseChildren(inner),
|
|
210
|
+
resultType: open.attrs.resultType?.trim() || undefined,
|
|
211
|
+
datasource: open.attrs.datasource?.trim() || undefined,
|
|
212
|
+
sourceFile,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
else if (open.name === "resultmap") {
|
|
216
|
+
// 首期跳过 resultMap 内容
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
throw new Error(`${sourceFile}: 不支持的顶层标签 <${open.name}>(仅 sql/select/insert/update/delete)`);
|
|
220
|
+
}
|
|
221
|
+
i = closeEnd;
|
|
222
|
+
}
|
|
223
|
+
return { namespace, sourceFile, sqlFragments, statements };
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=parseMapperXml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseMapperXml.js","sourceRoot":"","sources":["../../src/xml/parseMapperXml.ts"],"names":[],"mappings":";;AAwKA,wCAgEC;AAlOD,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG;SACP,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;SAClC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;SACnC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,MAAM,KAAK,GAAU,EAAE,CAAC;IACxB,MAAM,EAAE,GAAG,mDAAmD,CAAC;IAC/D,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AASD,SAAS,WAAW,CAAC,GAAW,EAAE,IAAY;IAC5C,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,GAAG,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACjE,MAAM,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC9C,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC;QAC1B,WAAW;QACX,GAAG,EAAE,GAAG,GAAG,CAAC;KACb,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,GAAW,EAAE,IAAY,EAAE,IAAY;IAC3D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,EAAE,IAAI,CAAC,CAAC;IACnD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,CAAC,GAAG,IAAI,CAAC;IACb,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YAC3B,iBAAiB;YACjB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW;gBAAE,KAAK,IAAI,CAAC,CAAC;YACxC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,CAAC,CAAC;YACX,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC,KAAK,CAAC;YAChC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/B,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,MAAM;QACR,CAAC;QACD,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACX,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;YAAE,MAAM;QAEpC,cAAc;QACd,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACnC,IAAI,GAAG,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3D,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YACZ,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,mCAAmC;YACnC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,CAAE,EAAE,CAAC,CAAC;YAC7C,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;YACrD,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;YACb,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvE,CAAC,GAAG,QAAQ,CAAC;IACf,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,KAAY,EAAE,QAAmB;IACpE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,IAAI;YACP,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;YACzD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC;QAC3D,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QACrC,KAAK,KAAK;YACR,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QACnC,KAAK,MAAM;YACT,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,QAAQ;aACT,CAAC;QACJ,KAAK,SAAS;YACZ,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC1E,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE;gBACnC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE;gBACnC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE;gBAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,QAAQ;aACT,CAAC;QACJ,KAAK,SAAS;YACZ,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAChE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QACxD;YACE,0CAA0C;YAC1C,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE7E;;GAEG;AACH,SAAgB,cAAc,CAAC,GAAW,EAAE,UAAU,GAAG,EAAE;IACzD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,IAAI,KAAK,mBAAmB,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,SAAS,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,IAAI,KAAK,yBAAyB,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAEpD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAqB,CAAC;IAClD,MAAM,UAAU,GAAmB,EAAE,CAAC;IAEtC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAChC,IAAI,EAAE,GAAG,CAAC;YAAE,MAAM;QAClB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;YAAE,MAAM;QACrC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;YACb,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAExC,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,eAAe,CAAC,CAAC;YACvD,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,iBAAiB,EAAE,IAAI,CAAC,CAAC;YACxD,CAAC;YACD,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,MAAM,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC;YAChE,UAAU,CAAC,IAAI,CAAC;gBACd,SAAS;gBACT,EAAE;gBACF,IAAI,EAAE,IAAI,CAAC,IAAwB;gBACnC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;gBAC3B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,SAAS;gBACtD,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,SAAS;gBACtD,UAAU;aACX,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACrC,oBAAoB;QACtB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,GAAG,UAAU,eAAe,IAAI,CAAC,IAAI,sCAAsC,CAC5E,CAAC;QACJ,CAAC;QACD,CAAC,GAAG,QAAQ,CAAC;IACf,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SqlNode, XmlStatement } from "./types";
|
|
2
|
+
export interface XmlNamespaceBundle {
|
|
3
|
+
namespace: string;
|
|
4
|
+
fragments: Map<string, SqlNode[]>;
|
|
5
|
+
statements: Map<string, XmlStatement>;
|
|
6
|
+
files: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare function clearXmlRegistry(): void;
|
|
9
|
+
export declare function getXmlNamespace(namespace: string): XmlNamespaceBundle | undefined;
|
|
10
|
+
export declare function listXmlNamespaces(): string[];
|
|
11
|
+
export declare function registerXmlBundle(namespace: string, sourceFile: string, fragments: Map<string, SqlNode[]>, statements: XmlStatement[]): void;
|
|
12
|
+
export declare function getXmlStatement(namespace: string, id: string): XmlStatement | undefined;
|
|
13
|
+
export declare function getXmlFragments(namespace: string): Map<string, SqlNode[]>;
|
|
14
|
+
export declare function countXmlStatements(): number;
|
|
15
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/xml/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAClC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAID,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAEjF;AAED,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EACjC,UAAU,EAAE,YAAY,EAAE,GACzB,IAAI,CA8BN;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,GACT,YAAY,GAAG,SAAS,CAE1B;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,GAChB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAExB;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clearXmlRegistry = clearXmlRegistry;
|
|
4
|
+
exports.getXmlNamespace = getXmlNamespace;
|
|
5
|
+
exports.listXmlNamespaces = listXmlNamespaces;
|
|
6
|
+
exports.registerXmlBundle = registerXmlBundle;
|
|
7
|
+
exports.getXmlStatement = getXmlStatement;
|
|
8
|
+
exports.getXmlFragments = getXmlFragments;
|
|
9
|
+
exports.countXmlStatements = countXmlStatements;
|
|
10
|
+
const namespaces = new Map();
|
|
11
|
+
function clearXmlRegistry() {
|
|
12
|
+
namespaces.clear();
|
|
13
|
+
}
|
|
14
|
+
function getXmlNamespace(namespace) {
|
|
15
|
+
return namespaces.get(namespace);
|
|
16
|
+
}
|
|
17
|
+
function listXmlNamespaces() {
|
|
18
|
+
return [...namespaces.keys()];
|
|
19
|
+
}
|
|
20
|
+
function registerXmlBundle(namespace, sourceFile, fragments, statements) {
|
|
21
|
+
let bundle = namespaces.get(namespace);
|
|
22
|
+
if (!bundle) {
|
|
23
|
+
bundle = {
|
|
24
|
+
namespace,
|
|
25
|
+
fragments: new Map(),
|
|
26
|
+
statements: new Map(),
|
|
27
|
+
files: [],
|
|
28
|
+
};
|
|
29
|
+
namespaces.set(namespace, bundle);
|
|
30
|
+
}
|
|
31
|
+
bundle.files.push(sourceFile);
|
|
32
|
+
for (const [id, nodes] of fragments) {
|
|
33
|
+
if (bundle.fragments.has(id)) {
|
|
34
|
+
throw new Error(`XML 重复 <sql id="${id}">(namespace=${namespace}, file=${sourceFile})`);
|
|
35
|
+
}
|
|
36
|
+
bundle.fragments.set(id, nodes);
|
|
37
|
+
}
|
|
38
|
+
for (const stmt of statements) {
|
|
39
|
+
if (bundle.statements.has(stmt.id)) {
|
|
40
|
+
throw new Error(`XML 重复语句 id="${stmt.id}"(namespace=${namespace}, file=${sourceFile})`);
|
|
41
|
+
}
|
|
42
|
+
bundle.statements.set(stmt.id, stmt);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function getXmlStatement(namespace, id) {
|
|
46
|
+
return namespaces.get(namespace)?.statements.get(id);
|
|
47
|
+
}
|
|
48
|
+
function getXmlFragments(namespace) {
|
|
49
|
+
return namespaces.get(namespace)?.fragments ?? new Map();
|
|
50
|
+
}
|
|
51
|
+
function countXmlStatements() {
|
|
52
|
+
let n = 0;
|
|
53
|
+
for (const b of namespaces.values())
|
|
54
|
+
n += b.statements.size;
|
|
55
|
+
return n;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/xml/registry.ts"],"names":[],"mappings":";;AAWA,4CAEC;AAED,0CAEC;AAED,8CAEC;AAED,8CAmCC;AAED,0CAKC;AAED,0CAIC;AAED,gDAIC;AApED,MAAM,UAAU,GAAG,IAAI,GAAG,EAA8B,CAAC;AAEzD,SAAgB,gBAAgB;IAC9B,UAAU,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC;AAED,SAAgB,eAAe,CAAC,SAAiB;IAC/C,OAAO,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,iBAAiB;IAC/B,OAAO,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,iBAAiB,CAC/B,SAAiB,EACjB,UAAkB,EAClB,SAAiC,EACjC,UAA0B;IAE1B,IAAI,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG;YACP,SAAS;YACT,SAAS,EAAE,IAAI,GAAG,EAAE;YACpB,UAAU,EAAE,IAAI,GAAG,EAAE;YACrB,KAAK,EAAE,EAAE;SACV,CAAC;QACF,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE9B,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QACpC,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,mBAAmB,EAAE,gBAAgB,SAAS,UAAU,UAAU,GAAG,CACtE,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,gBAAgB,IAAI,CAAC,EAAE,eAAe,SAAS,UAAU,UAAU,GAAG,CACvE,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAC7B,SAAiB,EACjB,EAAU;IAEV,OAAO,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,SAAgB,eAAe,CAC7B,SAAiB;IAEjB,OAAO,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,SAAS,IAAI,IAAI,GAAG,EAAE,CAAC;AAC3D,CAAC;AAED,SAAgB,kBAAkB;IAChC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE;QAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;IAC5D,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SqlNode } from "./types";
|
|
2
|
+
/** 受限 test 表达式求值(禁止任意代码) */
|
|
3
|
+
export declare function evalTest(expr: string, ctx: Record<string, unknown>): boolean;
|
|
4
|
+
/** 将语句节点树渲染为带 #{} / ${} 的 SQL 文本 */
|
|
5
|
+
export declare function renderStatementSql(nodes: SqlNode[], ctx: Record<string, unknown>, fragments?: Map<string, SqlNode[]>): string;
|
|
6
|
+
//# sourceMappingURL=renderSql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderSql.d.ts","sourceRoot":"","sources":["../../src/xml/renderSql.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,4BAA4B;AAC5B,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CA+D5E;AAyID,oCAAoC;AACpC,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EAAE,EAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,SAAS,GAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAa,GAC5C,MAAM,CAMR"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.evalTest = evalTest;
|
|
4
|
+
exports.renderStatementSql = renderStatementSql;
|
|
5
|
+
const sqlTemplate_1 = require("../sqlTemplate");
|
|
6
|
+
/** 受限 test 表达式求值(禁止任意代码) */
|
|
7
|
+
function evalTest(expr, ctx) {
|
|
8
|
+
const raw = String(expr ?? "").trim();
|
|
9
|
+
if (!raw)
|
|
10
|
+
return false;
|
|
11
|
+
// 安全:拒绝危险 token
|
|
12
|
+
if (/[`$]|__proto__|constructor|Function|require|import|process|global|eval|=>/.test(raw)) {
|
|
13
|
+
throw new Error(`非法 test 表达式: ${raw}`);
|
|
14
|
+
}
|
|
15
|
+
// a != null / a == null / a != undefined
|
|
16
|
+
let m = raw.match(/^([A-Za-z_][\w.]*)\s*(!=|==|=)\s*(null|undefined)$/i);
|
|
17
|
+
if (m) {
|
|
18
|
+
const val = (0, sqlTemplate_1.getPath)(ctx, m[1]);
|
|
19
|
+
const isNull = val === null || val === undefined;
|
|
20
|
+
const op = m[2];
|
|
21
|
+
if (op === "!=")
|
|
22
|
+
return !isNull;
|
|
23
|
+
return isNull;
|
|
24
|
+
}
|
|
25
|
+
// a.length > 0 / a.length != 0
|
|
26
|
+
m = raw.match(/^([A-Za-z_][\w.]*)\.length\s*(>|>=|==|!=|<=|<)\s*(\d+)$/);
|
|
27
|
+
if (m) {
|
|
28
|
+
const val = (0, sqlTemplate_1.getPath)(ctx, m[1]);
|
|
29
|
+
const len = Array.isArray(val)
|
|
30
|
+
? val.length
|
|
31
|
+
: typeof val === "string"
|
|
32
|
+
? val.length
|
|
33
|
+
: 0;
|
|
34
|
+
return compare(len, m[2], Number(m[3]));
|
|
35
|
+
}
|
|
36
|
+
// a != '' / a == ''
|
|
37
|
+
m = raw.match(/^([A-Za-z_][\w.]*)\s*(!=|==|=)\s*(''|""|"")$/);
|
|
38
|
+
if (m) {
|
|
39
|
+
const val = (0, sqlTemplate_1.getPath)(ctx, m[1]);
|
|
40
|
+
const empty = val === "" || val === null || val === undefined;
|
|
41
|
+
return m[2] === "!=" ? !empty : empty;
|
|
42
|
+
}
|
|
43
|
+
// a == 1 / a > 0 数字比较
|
|
44
|
+
m = raw.match(/^([A-Za-z_][\w.]*)\s*(==|=|!=|>|>=|<|<=)\s*(-?\d+(?:\.\d+)?)$/);
|
|
45
|
+
if (m) {
|
|
46
|
+
const val = (0, sqlTemplate_1.getPath)(ctx, m[1]);
|
|
47
|
+
return compare(Number(val), m[2], Number(m[3]));
|
|
48
|
+
}
|
|
49
|
+
// 布尔字面量
|
|
50
|
+
if (/^(true|false)$/i.test(raw))
|
|
51
|
+
return /^true$/i.test(raw);
|
|
52
|
+
// 单独属性:truthy
|
|
53
|
+
if (/^[A-Za-z_][\w.]*$/.test(raw)) {
|
|
54
|
+
const val = (0, sqlTemplate_1.getPath)(ctx, raw);
|
|
55
|
+
if (Array.isArray(val))
|
|
56
|
+
return val.length > 0;
|
|
57
|
+
return val !== null && val !== undefined && val !== false && val !== "";
|
|
58
|
+
}
|
|
59
|
+
throw new Error(`不支持的 test 表达式(请用属性比较): ${raw}`);
|
|
60
|
+
}
|
|
61
|
+
function compare(left, op, right) {
|
|
62
|
+
switch (op) {
|
|
63
|
+
case ">":
|
|
64
|
+
return left > right;
|
|
65
|
+
case ">=":
|
|
66
|
+
return left >= right;
|
|
67
|
+
case "<":
|
|
68
|
+
return left < right;
|
|
69
|
+
case "<=":
|
|
70
|
+
return left <= right;
|
|
71
|
+
case "!=":
|
|
72
|
+
return left !== right;
|
|
73
|
+
case "==":
|
|
74
|
+
case "=":
|
|
75
|
+
return left === right;
|
|
76
|
+
default:
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function stripLeadingAndOr(sql) {
|
|
81
|
+
return sql.replace(/^\s*(AND|OR)\s+/i, "").trim();
|
|
82
|
+
}
|
|
83
|
+
function applyTrim(body, opts) {
|
|
84
|
+
let s = body.trim();
|
|
85
|
+
if (!s)
|
|
86
|
+
return "";
|
|
87
|
+
if (opts.prefixOverrides) {
|
|
88
|
+
for (const token of opts.prefixOverrides.split("|").map((t) => t.trim())) {
|
|
89
|
+
if (!token)
|
|
90
|
+
continue;
|
|
91
|
+
const re = new RegExp(`^${escapeRe(token)}\\s+`, "i");
|
|
92
|
+
s = s.replace(re, "");
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (opts.suffixOverrides) {
|
|
96
|
+
for (const token of opts.suffixOverrides.split("|").map((t) => t.trim())) {
|
|
97
|
+
if (!token)
|
|
98
|
+
continue;
|
|
99
|
+
const re = new RegExp(`\\s+${escapeRe(token)}$`, "i");
|
|
100
|
+
s = s.replace(re, "");
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
s = s.trim();
|
|
104
|
+
if (!s)
|
|
105
|
+
return "";
|
|
106
|
+
if (opts.prefix)
|
|
107
|
+
s = `${opts.prefix} ${s}`;
|
|
108
|
+
if (opts.suffix)
|
|
109
|
+
s = `${s} ${opts.suffix}`;
|
|
110
|
+
return s;
|
|
111
|
+
}
|
|
112
|
+
function escapeRe(s) {
|
|
113
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
114
|
+
}
|
|
115
|
+
function renderNodes(nodes, ctx, fragments, stack) {
|
|
116
|
+
let out = "";
|
|
117
|
+
for (const node of nodes) {
|
|
118
|
+
out += renderNode(node, ctx, fragments, stack);
|
|
119
|
+
}
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
122
|
+
function renderNode(node, ctx, fragments, stack) {
|
|
123
|
+
switch (node.type) {
|
|
124
|
+
case "text":
|
|
125
|
+
return node.text;
|
|
126
|
+
case "if":
|
|
127
|
+
return evalTest(node.test, ctx)
|
|
128
|
+
? renderNodes(node.children, ctx, fragments, stack)
|
|
129
|
+
: "";
|
|
130
|
+
case "where": {
|
|
131
|
+
const body = stripLeadingAndOr(renderNodes(node.children, ctx, fragments, stack).trim());
|
|
132
|
+
return body ? ` WHERE ${body} ` : " ";
|
|
133
|
+
}
|
|
134
|
+
case "set": {
|
|
135
|
+
let body = renderNodes(node.children, ctx, fragments, stack).trim();
|
|
136
|
+
body = body.replace(/,+\s*$/, "").trim();
|
|
137
|
+
return body ? ` SET ${body} ` : " ";
|
|
138
|
+
}
|
|
139
|
+
case "trim": {
|
|
140
|
+
const body = renderNodes(node.children, ctx, fragments, stack);
|
|
141
|
+
const trimmed = applyTrim(body, node);
|
|
142
|
+
return trimmed ? ` ${trimmed} ` : " ";
|
|
143
|
+
}
|
|
144
|
+
case "foreach": {
|
|
145
|
+
const coll = (0, sqlTemplate_1.getPath)(ctx, node.collection);
|
|
146
|
+
const list = Array.isArray(coll)
|
|
147
|
+
? coll
|
|
148
|
+
: coll != null && typeof coll === "object"
|
|
149
|
+
? Object.values(coll)
|
|
150
|
+
: [];
|
|
151
|
+
if (!list.length)
|
|
152
|
+
return "";
|
|
153
|
+
const parts = [];
|
|
154
|
+
list.forEach((item, idx) => {
|
|
155
|
+
const childCtx = {
|
|
156
|
+
...ctx,
|
|
157
|
+
[node.item]: item,
|
|
158
|
+
};
|
|
159
|
+
if (node.index)
|
|
160
|
+
childCtx[node.index] = idx;
|
|
161
|
+
parts.push(renderNodes(node.children, childCtx, fragments, stack).trim());
|
|
162
|
+
});
|
|
163
|
+
const joined = parts.filter(Boolean).join(node.separator ?? "");
|
|
164
|
+
return `${node.open ?? ""}${joined}${node.close ?? ""}`;
|
|
165
|
+
}
|
|
166
|
+
case "include": {
|
|
167
|
+
if (stack.includes(node.refid)) {
|
|
168
|
+
throw new Error(`<include> 循环引用: ${stack.concat(node.refid).join(" -> ")}`);
|
|
169
|
+
}
|
|
170
|
+
const frag = fragments.get(node.refid);
|
|
171
|
+
if (!frag)
|
|
172
|
+
throw new Error(`找不到 <sql id="${node.refid}">`);
|
|
173
|
+
return renderNodes(frag, ctx, fragments, [...stack, node.refid]);
|
|
174
|
+
}
|
|
175
|
+
default:
|
|
176
|
+
return "";
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/** 将语句节点树渲染为带 #{} / ${} 的 SQL 文本 */
|
|
180
|
+
function renderStatementSql(nodes, ctx, fragments = new Map()) {
|
|
181
|
+
return renderNodes(nodes, ctx, fragments, [])
|
|
182
|
+
.replace(/[ \t]+\n/g, "\n")
|
|
183
|
+
.replace(/\n+/g, " ")
|
|
184
|
+
.replace(/\s{2,}/g, " ")
|
|
185
|
+
.trim();
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=renderSql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderSql.js","sourceRoot":"","sources":["../../src/xml/renderSql.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export type XmlStatementKind = "select" | "insert" | "update" | "delete";
|
|
2
|
+
/** 动态 SQL 节点树 */
|
|
3
|
+
export type SqlNode = {
|
|
4
|
+
type: "text";
|
|
5
|
+
text: string;
|
|
6
|
+
} | {
|
|
7
|
+
type: "if";
|
|
8
|
+
test: string;
|
|
9
|
+
children: SqlNode[];
|
|
10
|
+
} | {
|
|
11
|
+
type: "where";
|
|
12
|
+
children: SqlNode[];
|
|
13
|
+
} | {
|
|
14
|
+
type: "set";
|
|
15
|
+
children: SqlNode[];
|
|
16
|
+
} | {
|
|
17
|
+
type: "trim";
|
|
18
|
+
prefix?: string;
|
|
19
|
+
suffix?: string;
|
|
20
|
+
prefixOverrides?: string;
|
|
21
|
+
suffixOverrides?: string;
|
|
22
|
+
children: SqlNode[];
|
|
23
|
+
} | {
|
|
24
|
+
type: "foreach";
|
|
25
|
+
collection: string;
|
|
26
|
+
item: string;
|
|
27
|
+
index?: string;
|
|
28
|
+
open?: string;
|
|
29
|
+
close?: string;
|
|
30
|
+
separator?: string;
|
|
31
|
+
children: SqlNode[];
|
|
32
|
+
} | {
|
|
33
|
+
type: "include";
|
|
34
|
+
refid: string;
|
|
35
|
+
};
|
|
36
|
+
export interface XmlStatement {
|
|
37
|
+
namespace: string;
|
|
38
|
+
id: string;
|
|
39
|
+
kind: XmlStatementKind;
|
|
40
|
+
nodes: SqlNode[];
|
|
41
|
+
resultType?: string;
|
|
42
|
+
datasource?: string;
|
|
43
|
+
/** 来源文件,便于报错 */
|
|
44
|
+
sourceFile?: string;
|
|
45
|
+
}
|
|
46
|
+
export interface XmlMapperFile {
|
|
47
|
+
namespace: string;
|
|
48
|
+
sourceFile: string;
|
|
49
|
+
sqlFragments: Map<string, SqlNode[]>;
|
|
50
|
+
statements: XmlStatement[];
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/xml/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEzE,iBAAiB;AACjB,MAAM,MAAM,OAAO,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,EAAE,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,EAAE,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,OAAO,EAAE,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,EAAE,CAAA;CAAE,GAC3H;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB,GACD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACrC,UAAU,EAAE,YAAY,EAAE,CAAC;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/xml/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface XmlMapperApi {
|
|
2
|
+
selectList(id: string, params?: Record<string, unknown>): Promise<unknown[]>;
|
|
3
|
+
selectOne(id: string, params?: Record<string, unknown>): Promise<unknown | null>;
|
|
4
|
+
insert(id: string, params?: Record<string, unknown>): Promise<number>;
|
|
5
|
+
update(id: string, params?: Record<string, unknown>): Promise<number>;
|
|
6
|
+
delete(id: string, params?: Record<string, unknown>): Promise<number>;
|
|
7
|
+
/** 按 kind 执行任意语句 */
|
|
8
|
+
execute(id: string, params?: Record<string, unknown>): Promise<unknown>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 无类调用 XML 命名空间。
|
|
12
|
+
* @example
|
|
13
|
+
* await xmlMapper("com.pangza.UserMapper").selectList("findByRole", { roleId: 1 })
|
|
14
|
+
*/
|
|
15
|
+
export declare function xmlMapper(namespace: string, datasource?: string): XmlMapperApi;
|
|
16
|
+
//# sourceMappingURL=xmlMapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xmlMapper.d.ts","sourceRoot":"","sources":["../../src/xml/xmlMapper.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7E,SAAS,CACP,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtE,oBAAoB;IACpB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACzE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,GAClB,YAAY,CAoCd"}
|