mcp-xdx-schema-ctx 1.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/.env.example +43 -0
  2. package/README.md +269 -0
  3. package/dist/config.d.ts +131 -0
  4. package/dist/config.js +138 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/crypto-utils.d.ts +29 -0
  7. package/dist/crypto-utils.js +118 -0
  8. package/dist/crypto-utils.js.map +1 -0
  9. package/dist/db.d.ts +10 -0
  10. package/dist/db.js +149 -0
  11. package/dist/db.js.map +1 -0
  12. package/dist/diff-utils.d.ts +42 -0
  13. package/dist/diff-utils.js +130 -0
  14. package/dist/diff-utils.js.map +1 -0
  15. package/dist/encrypt-secrets.d.ts +12 -0
  16. package/dist/encrypt-secrets.js +190 -0
  17. package/dist/encrypt-secrets.js.map +1 -0
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.js +30 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/migrate-utils.d.ts +91 -0
  22. package/dist/migrate-utils.js +399 -0
  23. package/dist/migrate-utils.js.map +1 -0
  24. package/dist/schema-compat.d.ts +46 -0
  25. package/dist/schema-compat.js +169 -0
  26. package/dist/schema-compat.js.map +1 -0
  27. package/dist/shared.d.ts +70 -0
  28. package/dist/shared.js +197 -0
  29. package/dist/shared.js.map +1 -0
  30. package/dist/sql-build.d.ts +121 -0
  31. package/dist/sql-build.js +254 -0
  32. package/dist/sql-build.js.map +1 -0
  33. package/dist/tool-availability.d.ts +35 -0
  34. package/dist/tool-availability.js +90 -0
  35. package/dist/tool-availability.js.map +1 -0
  36. package/dist/tools/data-tools.d.ts +2 -0
  37. package/dist/tools/data-tools.js +243 -0
  38. package/dist/tools/data-tools.js.map +1 -0
  39. package/dist/tools/dataflow-tools.d.ts +2 -0
  40. package/dist/tools/dataflow-tools.js +434 -0
  41. package/dist/tools/dataflow-tools.js.map +1 -0
  42. package/dist/tools/dbo-tools.d.ts +2 -0
  43. package/dist/tools/dbo-tools.js +228 -0
  44. package/dist/tools/dbo-tools.js.map +1 -0
  45. package/dist/tools/diff-tools.d.ts +2 -0
  46. package/dist/tools/diff-tools.js +224 -0
  47. package/dist/tools/diff-tools.js.map +1 -0
  48. package/dist/tools/form-tools.d.ts +2 -0
  49. package/dist/tools/form-tools.js +715 -0
  50. package/dist/tools/form-tools.js.map +1 -0
  51. package/dist/tools/migrate-tools.d.ts +2 -0
  52. package/dist/tools/migrate-tools.js +423 -0
  53. package/dist/tools/migrate-tools.js.map +1 -0
  54. package/dist/tools/system-tools.d.ts +2 -0
  55. package/dist/tools/system-tools.js +1102 -0
  56. package/dist/tools/system-tools.js.map +1 -0
  57. package/dist/tools/table-tools.d.ts +2 -0
  58. package/dist/tools/table-tools.js +1322 -0
  59. package/dist/tools/table-tools.js.map +1 -0
  60. package/package.json +48 -0
@@ -0,0 +1,70 @@
1
+ import { schemaSource } from "./db.js";
2
+ import type { TableKey } from "./config.js";
3
+ /** 环境库全限定表名辅助 — 系统 A */
4
+ export declare const T: (key: keyof typeof schemaSource.tables) => string;
5
+ /** 环境库全限定表名辅助 — 系统 B */
6
+ export declare const T2: (key: TableKey) => string;
7
+ /** 用户库名称 — 系统 A */
8
+ export declare const userName: string;
9
+ /** 用户库名称 — 系统 B */
10
+ export declare const userName2: string;
11
+ /** 工具描述前缀 */
12
+ export declare const WARNING = "\u26A0\uFE0F \u6570\u636E\u4EC5\u4F9B\u53C2\u8003\uFF0C\u5B9E\u9645\u4E1A\u52A1\u903B\u8F91\u8BF7\u4EE5\u5F00\u53D1\u8005\u4E3A\u51C6\u3002";
13
+ /** 单引号转义 / LIKE 通配符转义 — 统一由纯函数模块提供,便于离线单测 */
14
+ export { escapeSql, escapeLike } from "./sql-build.js";
15
+ export interface Warning {
16
+ /** 产生警告的模块/子查询 */
17
+ module: string;
18
+ message: string;
19
+ /** 建议的下一步动作 */
20
+ hint?: string;
21
+ /** 建议改用的工具名 */
22
+ fallback?: string;
23
+ }
24
+ /**
25
+ * 警告去重 — 同一 module+message+hint+fallback 只保留一条。
26
+ * 典型场景:get_dbo_detail 等按行循环的模块,同一张子表缺失会被每行重复 push。
27
+ */
28
+ export declare function dedupeWarnings(warnings: readonly Warning[]): Warning[];
29
+ /**
30
+ * 统一输出结构:所有工具至少包含 items / pagination / warnings 三个键,
31
+ * 其余上下文键透传。warnings 自动去重(避免循环模块重复告警膨胀)。
32
+ */
33
+ export declare function envelope(payload: Record<string, unknown>): Record<string, unknown>;
34
+ /** 包装为 MCP content 返回体 */
35
+ export declare function ok(obj: unknown): {
36
+ content: {
37
+ type: "text";
38
+ text: string;
39
+ }[];
40
+ };
41
+ export interface Pagination {
42
+ page: number;
43
+ pageSize: number;
44
+ totalItems: number;
45
+ totalPages: number;
46
+ hasMore: boolean;
47
+ nextPage: number | null;
48
+ }
49
+ /** 通用分页切片 — 对内存中的 items 数组做切片 */
50
+ export declare function paginate<T>(items: T[], page: number, pageSize: number): {
51
+ page: T[];
52
+ pagination: Pagination;
53
+ };
54
+ /** SQL 端分页的 pagination 结构(与 paginate 保持一致) */
55
+ export declare function sqlPagination(page: number, pageSize: number, total: number): Pagination;
56
+ /** TOP N 查询的 pagination 结构 */
57
+ export declare function topNPagination(limit: number, returned: number): {
58
+ mode: "topN";
59
+ limit: number;
60
+ returned: number;
61
+ hasMore: boolean;
62
+ };
63
+ /**
64
+ * 安全 JSON 序列化 — 超长时截断。
65
+ *
66
+ * 与旧版的关键区别:旧版截断后只保留 summary/_pagination,数组整体丢弃(大表返回空 body)。
67
+ * 新版在截断时保留 pagination/warnings/summary 以及**各数组的前缀预览**,
68
+ * 并记录被丢弃的元素数量,确保模型仍能拿到可用信息。
69
+ */
70
+ export declare function safeJson(obj: unknown, maxChars?: number): string;
package/dist/shared.js ADDED
@@ -0,0 +1,197 @@
1
+ import { table, userDb, schemaSource } from "./db.js";
2
+ import { getSystemConfig, tableNames } from "./config.js";
3
+ /** 环境库全限定表名辅助 — 系统 A */
4
+ export const T = (key) => table(schemaSource.database, schemaSource.tables[key]);
5
+ /** 环境库全限定表名辅助 — 系统 B */
6
+ export const T2 = (key) => table(getSystemConfig("b").database, tableNames[key]);
7
+ /** 用户库名称 — 系统 A */
8
+ export const userName = userDb();
9
+ /** 用户库名称 — 系统 B */
10
+ export const userName2 = getSystemConfig("b").userDb;
11
+ /** 工具描述前缀 */
12
+ export const WARNING = "⚠️ 数据仅供参考,实际业务逻辑请以开发者为准。";
13
+ /** 单引号转义 / LIKE 通配符转义 — 统一由纯函数模块提供,便于离线单测 */
14
+ export { escapeSql, escapeLike } from "./sql-build.js";
15
+ // ============================================================
16
+ // 统一返回信封
17
+ // ============================================================
18
+ /**
19
+ * 警告去重 — 同一 module+message+hint+fallback 只保留一条。
20
+ * 典型场景:get_dbo_detail 等按行循环的模块,同一张子表缺失会被每行重复 push。
21
+ */
22
+ export function dedupeWarnings(warnings) {
23
+ const seen = new Set();
24
+ const out = [];
25
+ for (const w of warnings) {
26
+ const key = `${w.module}|${w.message}|${w.hint ?? ""}|${w.fallback ?? ""}`;
27
+ if (seen.has(key))
28
+ continue;
29
+ seen.add(key);
30
+ out.push(w);
31
+ }
32
+ return out;
33
+ }
34
+ /**
35
+ * 统一输出结构:所有工具至少包含 items / pagination / warnings 三个键,
36
+ * 其余上下文键透传。warnings 自动去重(避免循环模块重复告警膨胀)。
37
+ */
38
+ export function envelope(payload) {
39
+ const warnings = dedupeWarnings(Array.isArray(payload.warnings) ? payload.warnings : []);
40
+ const out = {
41
+ items: payload.items ?? [],
42
+ pagination: payload.pagination ?? null,
43
+ warnings,
44
+ };
45
+ for (const [k, v] of Object.entries(payload)) {
46
+ if (k === "items" || k === "pagination" || k === "warnings")
47
+ continue;
48
+ out[k] = v;
49
+ }
50
+ return out;
51
+ }
52
+ /** 包装为 MCP content 返回体 */
53
+ export function ok(obj) {
54
+ return { content: [{ type: "text", text: safeJson(obj) }] };
55
+ }
56
+ /** 通用分页切片 — 对内存中的 items 数组做切片 */
57
+ export function paginate(items, page, pageSize) {
58
+ const total = items.length;
59
+ const totalPages = Math.ceil(total / pageSize) || 1;
60
+ const p = Math.max(1, Math.min(page, totalPages));
61
+ const start = (p - 1) * pageSize;
62
+ return {
63
+ page: items.slice(start, start + pageSize),
64
+ pagination: {
65
+ page: p,
66
+ pageSize,
67
+ totalItems: total,
68
+ totalPages,
69
+ hasMore: p < totalPages,
70
+ nextPage: p < totalPages ? p + 1 : null,
71
+ },
72
+ };
73
+ }
74
+ /** SQL 端分页的 pagination 结构(与 paginate 保持一致) */
75
+ export function sqlPagination(page, pageSize, total) {
76
+ const totalPages = Math.ceil(total / pageSize) || 1;
77
+ const p = Math.max(1, Math.min(page, totalPages));
78
+ return {
79
+ page: p,
80
+ pageSize,
81
+ totalItems: total,
82
+ totalPages,
83
+ hasMore: p < totalPages,
84
+ nextPage: p < totalPages ? p + 1 : null,
85
+ };
86
+ }
87
+ /** TOP N 查询的 pagination 结构 */
88
+ export function topNPagination(limit, returned) {
89
+ return {
90
+ mode: "topN",
91
+ limit,
92
+ returned,
93
+ hasMore: returned >= limit,
94
+ };
95
+ }
96
+ /** 递归裁剪:对象最多保留 depth 层,长字符串截断 */
97
+ function omitDeep(value, depth) {
98
+ if (value === null || typeof value !== "object")
99
+ return value;
100
+ if (depth <= 0)
101
+ return "[object omitted]";
102
+ if (Array.isArray(value)) {
103
+ return value.slice(0, 10).map((v) => omitDeep(v, depth - 1));
104
+ }
105
+ const out = {};
106
+ for (const [k, v] of Object.entries(value)) {
107
+ if (typeof v === "string" && v.length > 200)
108
+ out[k] = v.slice(0, 200) + "…";
109
+ else if (v !== null && typeof v === "object")
110
+ out[k] = omitDeep(v, depth - 1);
111
+ else
112
+ out[k] = v;
113
+ }
114
+ return out;
115
+ }
116
+ /**
117
+ * 安全 JSON 序列化 — 超长时截断。
118
+ *
119
+ * 与旧版的关键区别:旧版截断后只保留 summary/_pagination,数组整体丢弃(大表返回空 body)。
120
+ * 新版在截断时保留 pagination/warnings/summary 以及**各数组的前缀预览**,
121
+ * 并记录被丢弃的元素数量,确保模型仍能拿到可用信息。
122
+ */
123
+ export function safeJson(obj, maxChars = 50_000) {
124
+ const json = JSON.stringify(obj, null, 2);
125
+ if (json.length <= maxChars)
126
+ return json;
127
+ const source = (obj ?? {});
128
+ // 必须原样保留的元信息键
129
+ const preserved = {};
130
+ for (const key of [
131
+ "pagination",
132
+ "_pagination",
133
+ "warnings",
134
+ "summary",
135
+ "fieldNames",
136
+ ]) {
137
+ if (source[key] !== undefined)
138
+ preserved[key] = source[key];
139
+ }
140
+ const slim = {};
141
+ for (const [key, value] of Object.entries(source)) {
142
+ if (key in preserved)
143
+ continue;
144
+ if (Array.isArray(value))
145
+ slim[key] = value.slice();
146
+ else if (typeof value === "string")
147
+ slim[key] = value.length > 200 ? value.slice(0, 200) + "…" : value;
148
+ else if (value !== null && typeof value === "object")
149
+ slim[key] = omitDeep(value, 1);
150
+ else
151
+ slim[key] = value;
152
+ }
153
+ const dropped = new Map();
154
+ const hint = `输出已截断(${json.length} > ${maxChars} 字符)。请使用 fieldKeyword / columns / pageSize 缩小范围,或按已返回条目的关键字继续查询。`;
155
+ const build = () => {
156
+ const out = {
157
+ _truncated: true,
158
+ _originalSize: json.length,
159
+ ...slim,
160
+ ...preserved,
161
+ };
162
+ for (const [k, n] of dropped)
163
+ if (n > 0)
164
+ out[`_dropped_${k}`] = n;
165
+ out._hint = hint;
166
+ return out;
167
+ };
168
+ // 逐步对最长的数组减半,直到整体能装下
169
+ let guard = 0;
170
+ while (JSON.stringify(build(), null, 2).length > maxChars && guard++ < 64) {
171
+ let longestKey = null;
172
+ let longestLen = 1;
173
+ for (const [k, v] of Object.entries(slim)) {
174
+ if (Array.isArray(v) && v.length > longestLen) {
175
+ longestKey = k;
176
+ longestLen = v.length;
177
+ }
178
+ }
179
+ if (longestKey === null)
180
+ break;
181
+ const arr = slim[longestKey];
182
+ const keep = Math.floor(arr.length / 2);
183
+ dropped.set(longestKey, (dropped.get(longestKey) ?? 0) + (arr.length - keep));
184
+ slim[longestKey] = arr.slice(0, keep);
185
+ }
186
+ const text = JSON.stringify(build(), null, 2);
187
+ if (text.length <= maxChars)
188
+ return text;
189
+ // 连骨架都装不下 → 退化为最小提示
190
+ return JSON.stringify({
191
+ _truncated: true,
192
+ _originalSize: json.length,
193
+ _hint: hint,
194
+ ...preserved,
195
+ }, null, 2);
196
+ }
197
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * SQL 构造纯函数 — 不依赖数据库/连接池,便于离线单元测试。
3
+ *
4
+ * 设计要点:
5
+ * 1. 所有"列是否存在"的判断都不区分大小写(与 schema-compat.getTableColumns 的大写存储保持一致),
6
+ * 避免历史上 `cols.has("TableName")` 恒为 false 导致 WHERE/ORDER BY 被静默跳过的问题。
7
+ * 2. 值一律经 escapeSql / escapeLike 转义,列名经 quoteIdent 校验,杜绝注入。
8
+ * 3. 本文件不得 import shared.ts / db.ts,避免循环依赖。
9
+ */
10
+ /** 单引号转义 — 防止 SQL 注入 */
11
+ export declare function escapeSql(value: string): string;
12
+ /** LIKE 通配符转义 — 需配合 ESCAPE '\' 使用 */
13
+ export declare function escapeLike(value: string): string;
14
+ /** 安全标识符 — 仅允许字母/数字/下划线,非法则抛错 */
15
+ export declare function quoteIdent(name: string): string;
16
+ export interface Filter {
17
+ col: string;
18
+ op: "eq" | "like" | "in";
19
+ value: string | string[];
20
+ }
21
+ /** 一组过滤器:组内按 logic 连接(默认 AND),组之间一律 AND */
22
+ export interface FilterGroup {
23
+ logic?: "and" | "or";
24
+ filters: Filter[];
25
+ }
26
+ export interface WhereResult {
27
+ /** "" 或 " WHERE a AND b" */
28
+ where: string;
29
+ /** 实际进入 SQL 的列 */
30
+ applied: string[];
31
+ /** 因列不存在(或 IN 为空)被跳过的列 */
32
+ skipped: string[];
33
+ }
34
+ /** 构造 WHERE 子句;列不存在时跳过并把列名记入 skipped,而不是静默丢弃整个条件 */
35
+ export declare function buildWhere(cols: Set<string>, groups: FilterGroup[]): WhereResult;
36
+ /** 排序项:字符串=按同名实体列排序;对象=列存在时使用自定义表达式 */
37
+ export type OrderBySpec = string | {
38
+ col: string;
39
+ expr: string;
40
+ };
41
+ export interface OrderByResult {
42
+ /** "" 或 " ORDER BY a, b" */
43
+ orderBy: string;
44
+ skipped: string[];
45
+ }
46
+ export declare function buildOrderBy(cols: Set<string>, wanted: readonly OrderBySpec[]): OrderByResult;
47
+ export interface PagedQueryOpts {
48
+ table: string;
49
+ cols: readonly string[];
50
+ where?: string;
51
+ orderBy?: string;
52
+ page: number;
53
+ pageSize: number;
54
+ }
55
+ /**
56
+ * SQL 端分页查询(COUNT + OFFSET/FETCH)。
57
+ * - totalItems 来自 COUNT(*),不再受 TOP 影响;
58
+ * - 无 ORDER BY 时补 `ORDER BY (SELECT NULL)`(SQL Server 2012+ 必需)。
59
+ */
60
+ export declare function buildPagedQuery(opts: PagedQueryOpts): {
61
+ countSql: string;
62
+ sql: string;
63
+ };
64
+ export interface DataFilter {
65
+ col: string;
66
+ op: "eq" | "like" | "in";
67
+ value: string | string[];
68
+ }
69
+ export interface DataQueryOpts {
70
+ /** 已全限定并加引号的表名,如 [DB].[dbo].[TableName] */
71
+ table: string;
72
+ /** 白名单列(来自实际 schema,原始大小写) */
73
+ cols: readonly string[];
74
+ filters?: readonly DataFilter[];
75
+ /** 关键词模糊:在 keywordCols 之间 OR */
76
+ keyword?: {
77
+ value: string;
78
+ cols: readonly string[];
79
+ };
80
+ orderBy?: {
81
+ col: string;
82
+ dir?: "ASC" | "DESC";
83
+ };
84
+ top: number;
85
+ }
86
+ export interface DataQueryResult {
87
+ sql: string;
88
+ /** 参数名 → 值(交给 queryWithParams 绑定) */
89
+ params: Record<string, string>;
90
+ /** 实际进入 SQL 的过滤列 */
91
+ applied: string[];
92
+ /** 被跳过的过滤列(不存在/非法/空 IN) */
93
+ skipped: string[];
94
+ }
95
+ /** 数据查询上限 */
96
+ export declare const DATA_QUERY_MAX_TOP = 200;
97
+ /**
98
+ * 构造只读数据查询:
99
+ * - 列名必须命中白名单且为合法标识符,否则跳过(杜绝任意 SQL / 注入);
100
+ * - 值一律走参数(@pN),LIKE 通配符经 escapeLike 转义;
101
+ * - TOP 钳制 1..200,默认 20。
102
+ */
103
+ export declare function buildDataQuery(opts: DataQueryOpts): DataQueryResult;
104
+ /**
105
+ * 敏感列脱敏(纯函数):列名命中 pattern(不区分大小写)时值替换为 ***。
106
+ * pattern 非法时退化为不脱敏(由调用方保证 pattern 来自配置)。
107
+ */
108
+ export declare function maskRow(row: Record<string, unknown>, pattern: string): {
109
+ row: Record<string, unknown>;
110
+ maskedColumns: string[];
111
+ };
112
+ /**
113
+ * 视图/对象血缘递归 CTE(纯函数):
114
+ * 从指定对象出发,沿 sys.sql_expression_dependencies 向下展开被依赖对象。
115
+ * name/db 经白名单过滤 + 单引号转义,maxDepth 钳制 1..10。
116
+ */
117
+ export declare function buildViewLineageSql(opts: {
118
+ db: string;
119
+ name: string;
120
+ maxDepth: number;
121
+ }): string;
@@ -0,0 +1,254 @@
1
+ /**
2
+ * SQL 构造纯函数 — 不依赖数据库/连接池,便于离线单元测试。
3
+ *
4
+ * 设计要点:
5
+ * 1. 所有"列是否存在"的判断都不区分大小写(与 schema-compat.getTableColumns 的大写存储保持一致),
6
+ * 避免历史上 `cols.has("TableName")` 恒为 false 导致 WHERE/ORDER BY 被静默跳过的问题。
7
+ * 2. 值一律经 escapeSql / escapeLike 转义,列名经 quoteIdent 校验,杜绝注入。
8
+ * 3. 本文件不得 import shared.ts / db.ts,避免循环依赖。
9
+ */
10
+ /** 单引号转义 — 防止 SQL 注入 */
11
+ export function escapeSql(value) {
12
+ return value.replace(/'/g, "''");
13
+ }
14
+ /** LIKE 通配符转义 — 需配合 ESCAPE '\' 使用 */
15
+ export function escapeLike(value) {
16
+ return escapeSql(value).replace(/[%_\[\]\\]/g, (ch) => `\\${ch}`);
17
+ }
18
+ /** 安全标识符 — 仅允许字母/数字/下划线,非法则抛错 */
19
+ export function quoteIdent(name) {
20
+ if (!/^[A-Za-z0-9_]+$/.test(name)) {
21
+ throw new Error(`非法标识符: ${name}`);
22
+ }
23
+ return `[${name}]`;
24
+ }
25
+ function isPlainIdent(name) {
26
+ return /^[A-Za-z0-9_]+$/.test(name);
27
+ }
28
+ /** 列存在性判断(不区分大小写) */
29
+ function hasColumn(cols, name) {
30
+ return cols.has(name.toUpperCase());
31
+ }
32
+ /** 构造 WHERE 子句;列不存在时跳过并把列名记入 skipped,而不是静默丢弃整个条件 */
33
+ export function buildWhere(cols, groups) {
34
+ const applied = [];
35
+ const skipped = [];
36
+ const groupSql = [];
37
+ for (const group of groups) {
38
+ const conds = [];
39
+ for (const f of group.filters) {
40
+ if (!hasColumn(cols, f.col) || !isPlainIdent(f.col)) {
41
+ skipped.push(f.col);
42
+ continue;
43
+ }
44
+ const ident = `[${f.col}]`;
45
+ if (f.op === "eq") {
46
+ conds.push(`${ident} = N'${escapeSql(String(f.value))}'`);
47
+ applied.push(f.col);
48
+ }
49
+ else if (f.op === "like") {
50
+ conds.push(`${ident} LIKE N'%${escapeLike(String(f.value))}%' ESCAPE '\\'`);
51
+ applied.push(f.col);
52
+ }
53
+ else {
54
+ const list = Array.isArray(f.value) ? f.value : [f.value];
55
+ if (list.length === 0) {
56
+ skipped.push(f.col);
57
+ continue;
58
+ }
59
+ conds.push(`${ident} IN (${list.map((v) => `N'${escapeSql(String(v))}'`).join(", ")})`);
60
+ applied.push(f.col);
61
+ }
62
+ }
63
+ if (conds.length === 0)
64
+ continue;
65
+ const logic = group.logic === "or" ? " OR " : " AND ";
66
+ groupSql.push(conds.length === 1 ? conds[0] : `(${conds.join(logic)})`);
67
+ }
68
+ return {
69
+ where: groupSql.length > 0 ? ` WHERE ${groupSql.join(" AND ")}` : "",
70
+ applied,
71
+ skipped,
72
+ };
73
+ }
74
+ export function buildOrderBy(cols, wanted) {
75
+ const kept = [];
76
+ const skipped = [];
77
+ for (const w of wanted) {
78
+ if (typeof w === "string") {
79
+ if (hasColumn(cols, w) && isPlainIdent(w))
80
+ kept.push(`[${w}]`);
81
+ else
82
+ skipped.push(w);
83
+ }
84
+ else if (hasColumn(cols, w.col)) {
85
+ kept.push(w.expr);
86
+ }
87
+ else {
88
+ skipped.push(w.col);
89
+ }
90
+ }
91
+ return {
92
+ orderBy: kept.length > 0 ? ` ORDER BY ${kept.join(", ")}` : "",
93
+ skipped,
94
+ };
95
+ }
96
+ /**
97
+ * SQL 端分页查询(COUNT + OFFSET/FETCH)。
98
+ * - totalItems 来自 COUNT(*),不再受 TOP 影响;
99
+ * - 无 ORDER BY 时补 `ORDER BY (SELECT NULL)`(SQL Server 2012+ 必需)。
100
+ */
101
+ export function buildPagedQuery(opts) {
102
+ const page = Number.isInteger(opts.page) && opts.page >= 1 ? opts.page : 1;
103
+ const pageSize = Number.isInteger(opts.pageSize)
104
+ ? Math.min(200, Math.max(1, opts.pageSize))
105
+ : 50;
106
+ const offset = (page - 1) * pageSize;
107
+ const where = opts.where ?? "";
108
+ const orderBy = opts.orderBy && opts.orderBy.trim() !== ""
109
+ ? opts.orderBy
110
+ : " ORDER BY (SELECT NULL)";
111
+ return {
112
+ countSql: `SELECT COUNT(*) AS Total FROM ${opts.table}${where}`,
113
+ sql: `SELECT ${opts.cols.join(", ")} FROM ${opts.table}${where}${orderBy}` +
114
+ ` OFFSET ${offset} ROWS FETCH NEXT ${pageSize} ROWS ONLY`,
115
+ };
116
+ }
117
+ /** 数据查询上限 */
118
+ export const DATA_QUERY_MAX_TOP = 200;
119
+ /**
120
+ * 构造只读数据查询:
121
+ * - 列名必须命中白名单且为合法标识符,否则跳过(杜绝任意 SQL / 注入);
122
+ * - 值一律走参数(@pN),LIKE 通配符经 escapeLike 转义;
123
+ * - TOP 钳制 1..200,默认 20。
124
+ */
125
+ export function buildDataQuery(opts) {
126
+ const allowed = new Set(opts.cols.map((c) => c.toUpperCase()));
127
+ const top = Number.isInteger(opts.top)
128
+ ? Math.min(DATA_QUERY_MAX_TOP, Math.max(1, opts.top))
129
+ : 20;
130
+ const params = {};
131
+ const applied = [];
132
+ const skipped = [];
133
+ let p = 0;
134
+ const selectCols = opts.cols.map((c) => quoteIdent(c)).join(", ");
135
+ const conds = [];
136
+ for (const f of opts.filters ?? []) {
137
+ if (!allowed.has(f.col.toUpperCase()) || !isPlainIdent(f.col)) {
138
+ skipped.push(f.col);
139
+ continue;
140
+ }
141
+ const ident = quoteIdent(f.col);
142
+ if (f.op === "eq") {
143
+ const key = `p${p++}`;
144
+ params[key] = String(f.value);
145
+ conds.push(`${ident} = @${key}`);
146
+ applied.push(f.col);
147
+ }
148
+ else if (f.op === "like") {
149
+ const key = `p${p++}`;
150
+ params[key] = `%${escapeLike(String(f.value))}%`;
151
+ conds.push(`${ident} LIKE @${key} ESCAPE '\\'`);
152
+ applied.push(f.col);
153
+ }
154
+ else {
155
+ const list = (Array.isArray(f.value) ? f.value : [f.value]).filter((v) => v !== "");
156
+ if (list.length === 0) {
157
+ skipped.push(f.col);
158
+ continue;
159
+ }
160
+ const keys = list.map((v) => {
161
+ const key = `p${p++}`;
162
+ params[key] = String(v);
163
+ return `@${key}`;
164
+ });
165
+ conds.push(`${ident} IN (${keys.join(", ")})`);
166
+ applied.push(f.col);
167
+ }
168
+ }
169
+ if (opts.keyword && opts.keyword.value !== "") {
170
+ const kwCols = opts.keyword.cols.filter((c) => allowed.has(c.toUpperCase()) && isPlainIdent(c));
171
+ const kwConds = [];
172
+ for (const c of kwCols) {
173
+ const key = `p${p++}`;
174
+ params[key] = `%${escapeLike(opts.keyword.value)}%`;
175
+ kwConds.push(`${quoteIdent(c)} LIKE @${key} ESCAPE '\\'`);
176
+ }
177
+ if (kwConds.length > 0) {
178
+ conds.push(kwConds.length === 1 ? kwConds[0] : `(${kwConds.join(" OR ")})`);
179
+ applied.push(...kwCols);
180
+ }
181
+ else {
182
+ skipped.push("keyword");
183
+ }
184
+ }
185
+ const where = conds.length > 0 ? ` WHERE ${conds.join(" AND ")}` : "";
186
+ let orderBy = "";
187
+ if (opts.orderBy) {
188
+ const oc = opts.orderBy.col;
189
+ if (allowed.has(oc.toUpperCase()) && isPlainIdent(oc)) {
190
+ const dir = opts.orderBy.dir === "DESC" ? "DESC" : "ASC";
191
+ orderBy = ` ORDER BY ${quoteIdent(oc)} ${dir}`;
192
+ }
193
+ else {
194
+ skipped.push(oc);
195
+ }
196
+ }
197
+ const sql = `SELECT TOP (${top}) ${selectCols} FROM ${opts.table}${where}${orderBy}`;
198
+ return { sql, params, applied, skipped };
199
+ }
200
+ /**
201
+ * 敏感列脱敏(纯函数):列名命中 pattern(不区分大小写)时值替换为 ***。
202
+ * pattern 非法时退化为不脱敏(由调用方保证 pattern 来自配置)。
203
+ */
204
+ export function maskRow(row, pattern) {
205
+ let re = null;
206
+ try {
207
+ re = new RegExp(pattern, "i");
208
+ }
209
+ catch {
210
+ re = null;
211
+ }
212
+ if (!re)
213
+ return { row: { ...row }, maskedColumns: [] };
214
+ const maskedColumns = [];
215
+ const out = {};
216
+ for (const [k, v] of Object.entries(row)) {
217
+ if (re.test(k)) {
218
+ out[k] = "***";
219
+ maskedColumns.push(k);
220
+ }
221
+ else {
222
+ out[k] = v;
223
+ }
224
+ }
225
+ return { row: out, maskedColumns };
226
+ }
227
+ /**
228
+ * 视图/对象血缘递归 CTE(纯函数):
229
+ * 从指定对象出发,沿 sys.sql_expression_dependencies 向下展开被依赖对象。
230
+ * name/db 经白名单过滤 + 单引号转义,maxDepth 钳制 1..10。
231
+ */
232
+ export function buildViewLineageSql(opts) {
233
+ const maxDepth = Number.isInteger(opts.maxDepth)
234
+ ? Math.min(10, Math.max(1, opts.maxDepth))
235
+ : 5;
236
+ const safeDb = opts.db.replace(/[^A-Za-z0-9_]/g, "");
237
+ const safeName = opts.name.replace(/[^A-Za-z0-9_]/g, "");
238
+ return (`WITH lineage (lvl, objId, objectName, objectType, parentName) AS (\n` +
239
+ ` SELECT 0, o.object_id, CAST(o.name AS nvarchar(128)), CAST(o.type_desc AS nvarchar(60)), CAST(NULL AS nvarchar(128))\n` +
240
+ ` FROM [${safeDb}].sys.objects o\n` +
241
+ ` WHERE o.name = N'${escapeSql(safeName)}' AND o.is_ms_shipped = 0\n` +
242
+ ` UNION ALL\n` +
243
+ ` SELECT l.lvl + 1, o.object_id, CAST(o.name AS nvarchar(128)), CAST(o.type_desc AS nvarchar(60)), l.objectName\n` +
244
+ ` FROM lineage l\n` +
245
+ ` INNER JOIN [${safeDb}].sys.sql_expression_dependencies d ON d.referencing_id = l.objId\n` +
246
+ ` INNER JOIN [${safeDb}].sys.objects o ON o.object_id = d.referenced_id\n` +
247
+ ` WHERE l.lvl < ${maxDepth} AND o.is_ms_shipped = 0\n` +
248
+ `)\n` +
249
+ `SELECT TOP 500 lvl, objectName, objectType, parentName\n` +
250
+ `FROM lineage WHERE lvl > 0\n` +
251
+ `ORDER BY lvl, objectName\n` +
252
+ `OPTION (MAXRECURSION 100)`);
253
+ }
254
+ //# sourceMappingURL=sql-build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-build.js","sourceRoot":"","sources":["../src/sql-build.ts"],"names":[],"mappings":"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"}