@connorbritain/mssql-mcp-server 0.3.6 → 0.4.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.
Files changed (99) hide show
  1. package/dist/index.js +6 -751
  2. package/dist/index.js.map +1 -1
  3. package/package.json +2 -5
  4. package/dist/audit/AuditLogger.d.ts +0 -37
  5. package/dist/audit/AuditLogger.d.ts.map +0 -1
  6. package/dist/audit/AuditLogger.js +0 -145
  7. package/dist/audit/AuditLogger.js.map +0 -1
  8. package/dist/config/EnvironmentManager.d.ts +0 -75
  9. package/dist/config/EnvironmentManager.d.ts.map +0 -1
  10. package/dist/config/EnvironmentManager.js +0 -305
  11. package/dist/config/EnvironmentManager.js.map +0 -1
  12. package/dist/config/ScriptManager.d.ts +0 -69
  13. package/dist/config/ScriptManager.d.ts.map +0 -1
  14. package/dist/config/ScriptManager.js +0 -166
  15. package/dist/config/ScriptManager.js.map +0 -1
  16. package/dist/config/SecretResolver.d.ts +0 -66
  17. package/dist/config/SecretResolver.d.ts.map +0 -1
  18. package/dist/config/SecretResolver.js +0 -230
  19. package/dist/config/SecretResolver.js.map +0 -1
  20. package/dist/tools/CreateIndexTool.d.ts +0 -24
  21. package/dist/tools/CreateIndexTool.d.ts.map +0 -1
  22. package/dist/tools/CreateIndexTool.js +0 -64
  23. package/dist/tools/CreateIndexTool.js.map +0 -1
  24. package/dist/tools/CreateTableTool.d.ts +0 -12
  25. package/dist/tools/CreateTableTool.d.ts.map +0 -1
  26. package/dist/tools/CreateTableTool.js +0 -49
  27. package/dist/tools/CreateTableTool.js.map +0 -1
  28. package/dist/tools/DeleteDataTool.d.ts +0 -56
  29. package/dist/tools/DeleteDataTool.d.ts.map +0 -1
  30. package/dist/tools/DeleteDataTool.js +0 -103
  31. package/dist/tools/DeleteDataTool.js.map +0 -1
  32. package/dist/tools/DescribeTableTool.d.ts +0 -32
  33. package/dist/tools/DescribeTableTool.d.ts.map +0 -1
  34. package/dist/tools/DescribeTableTool.js +0 -108
  35. package/dist/tools/DescribeTableTool.js.map +0 -1
  36. package/dist/tools/DropTableTool.d.ts +0 -12
  37. package/dist/tools/DropTableTool.d.ts.map +0 -1
  38. package/dist/tools/DropTableTool.js +0 -37
  39. package/dist/tools/DropTableTool.js.map +0 -1
  40. package/dist/tools/ExplainQueryTool.d.ts +0 -24
  41. package/dist/tools/ExplainQueryTool.d.ts.map +0 -1
  42. package/dist/tools/ExplainQueryTool.js +0 -98
  43. package/dist/tools/ExplainQueryTool.js.map +0 -1
  44. package/dist/tools/InsertDataTool.d.ts +0 -17
  45. package/dist/tools/InsertDataTool.d.ts.map +0 -1
  46. package/dist/tools/InsertDataTool.js +0 -102
  47. package/dist/tools/InsertDataTool.js.map +0 -1
  48. package/dist/tools/InspectDependenciesTool.d.ts +0 -45
  49. package/dist/tools/InspectDependenciesTool.d.ts.map +0 -1
  50. package/dist/tools/InspectDependenciesTool.js +0 -215
  51. package/dist/tools/InspectDependenciesTool.js.map +0 -1
  52. package/dist/tools/ListDatabasesTool.d.ts +0 -27
  53. package/dist/tools/ListDatabasesTool.d.ts.map +0 -1
  54. package/dist/tools/ListDatabasesTool.js +0 -107
  55. package/dist/tools/ListDatabasesTool.js.map +0 -1
  56. package/dist/tools/ListEnvironmentsTool.d.ts +0 -49
  57. package/dist/tools/ListEnvironmentsTool.d.ts.map +0 -1
  58. package/dist/tools/ListEnvironmentsTool.js +0 -73
  59. package/dist/tools/ListEnvironmentsTool.js.map +0 -1
  60. package/dist/tools/ListScriptsTool.d.ts +0 -41
  61. package/dist/tools/ListScriptsTool.d.ts.map +0 -1
  62. package/dist/tools/ListScriptsTool.js +0 -86
  63. package/dist/tools/ListScriptsTool.js.map +0 -1
  64. package/dist/tools/ListTableTool.d.ts +0 -24
  65. package/dist/tools/ListTableTool.d.ts.map +0 -1
  66. package/dist/tools/ListTableTool.js +0 -85
  67. package/dist/tools/ListTableTool.js.map +0 -1
  68. package/dist/tools/ProfileTableTool.d.ts +0 -78
  69. package/dist/tools/ProfileTableTool.d.ts.map +0 -1
  70. package/dist/tools/ProfileTableTool.js +0 -373
  71. package/dist/tools/ProfileTableTool.js.map +0 -1
  72. package/dist/tools/ReadDataTool.d.ts +0 -61
  73. package/dist/tools/ReadDataTool.d.ts.map +0 -1
  74. package/dist/tools/ReadDataTool.js +0 -299
  75. package/dist/tools/ReadDataTool.js.map +0 -1
  76. package/dist/tools/RelationshipInspectorTool.d.ts +0 -46
  77. package/dist/tools/RelationshipInspectorTool.d.ts.map +0 -1
  78. package/dist/tools/RelationshipInspectorTool.js +0 -156
  79. package/dist/tools/RelationshipInspectorTool.js.map +0 -1
  80. package/dist/tools/RunScriptTool.d.ts +0 -215
  81. package/dist/tools/RunScriptTool.d.ts.map +0 -1
  82. package/dist/tools/RunScriptTool.js +0 -177
  83. package/dist/tools/RunScriptTool.js.map +0 -1
  84. package/dist/tools/SearchSchemaTool.d.ts +0 -88
  85. package/dist/tools/SearchSchemaTool.d.ts.map +0 -1
  86. package/dist/tools/SearchSchemaTool.js +0 -237
  87. package/dist/tools/SearchSchemaTool.js.map +0 -1
  88. package/dist/tools/TestConnectionTool.d.ts +0 -38
  89. package/dist/tools/TestConnectionTool.d.ts.map +0 -1
  90. package/dist/tools/TestConnectionTool.js +0 -156
  91. package/dist/tools/TestConnectionTool.js.map +0 -1
  92. package/dist/tools/UpdateDataTool.d.ts +0 -61
  93. package/dist/tools/UpdateDataTool.d.ts.map +0 -1
  94. package/dist/tools/UpdateDataTool.js +0 -117
  95. package/dist/tools/UpdateDataTool.js.map +0 -1
  96. package/dist/tools/ValidateEnvironmentConfigTool.d.ts +0 -51
  97. package/dist/tools/ValidateEnvironmentConfigTool.d.ts.map +0 -1
  98. package/dist/tools/ValidateEnvironmentConfigTool.js +0 -320
  99. package/dist/tools/ValidateEnvironmentConfigTool.js.map +0 -1
@@ -1,373 +0,0 @@
1
- import sql from "mssql";
2
- const clampEnvInt = (value, fallback, min, max) => {
3
- if (!value) {
4
- return fallback;
5
- }
6
- const parsed = parseInt(value, 10);
7
- if (Number.isNaN(parsed)) {
8
- return fallback;
9
- }
10
- return Math.min(Math.max(parsed, min), max);
11
- };
12
- const DEFAULT_SAMPLE_SIZE = clampEnvInt(process.env.PROFILE_SAMPLE_SIZE_DEFAULT, 50, 1, 1000);
13
- const SAMPLE_RETURN_LIMIT = clampEnvInt(process.env.PROFILE_SAMPLE_RETURN_LIMIT, 10, 1, 100);
14
- export class ProfileTableTool {
15
- constructor() {
16
- this.name = "profile_table";
17
- this.description = "Profiles a table by analyzing column statistics, data distributions, and sample records. Returns metadata, cardinality info, null counts, and representative samples for each column.";
18
- this.inputSchema = {
19
- type: "object",
20
- properties: {
21
- tableName: {
22
- type: "string",
23
- description: "Name of table to profile (schema.table or table)",
24
- },
25
- schemaName: {
26
- type: "string",
27
- description: "Explicit schema (defaults to 'dbo')",
28
- },
29
- sampleSize: {
30
- type: "number",
31
- description: "Number of sample rows (default 100, max 1000)",
32
- },
33
- includeSamples: {
34
- type: "boolean",
35
- description: "Return sampled rows used for profiling (default false)",
36
- },
37
- includeDistributions: {
38
- type: "boolean",
39
- description: "Include top value frequencies (default true)",
40
- },
41
- topValuesLimit: {
42
- type: "number",
43
- description: "Max distinct values per column (default 10, max 50)",
44
- },
45
- columnsToProfile: {
46
- type: "array",
47
- items: { type: "string" },
48
- description: "Specific columns to profile (default: all)",
49
- },
50
- },
51
- required: ["tableName"],
52
- };
53
- }
54
- normalizeLimit(value, defaultVal, max) {
55
- if (typeof value !== "number" || Number.isNaN(value) || value <= 0) {
56
- return defaultVal;
57
- }
58
- return Math.min(Math.floor(value), max);
59
- }
60
- classifyCardinality(distinctCount, rowCount) {
61
- if (rowCount === 0)
62
- return "low";
63
- const ratio = distinctCount / rowCount;
64
- if (ratio > 0.95)
65
- return "unique";
66
- if (ratio > 0.5)
67
- return "high";
68
- if (ratio > 0.1)
69
- return "medium";
70
- return "low";
71
- }
72
- formatDateRange(earliest, latest) {
73
- const diffMs = latest.getTime() - earliest.getTime();
74
- const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
75
- if (diffDays < 1)
76
- return "less than 1 day";
77
- if (diffDays < 30)
78
- return `${diffDays} day${diffDays > 1 ? "s" : ""}`;
79
- const diffMonths = Math.floor(diffDays / 30);
80
- if (diffMonths < 12)
81
- return `${diffMonths} month${diffMonths > 1 ? "s" : ""}`;
82
- const years = Math.floor(diffMonths / 12);
83
- const remainingMonths = diffMonths % 12;
84
- if (remainingMonths === 0)
85
- return `${years} year${years > 1 ? "s" : ""}`;
86
- return `${years} year${years > 1 ? "s" : ""}, ${remainingMonths} month${remainingMonths > 1 ? "s" : ""}`;
87
- }
88
- escapeIdentifier(name) {
89
- return `[${name.replace(/\]/g, "]]")}]`;
90
- }
91
- isNumericType(dataType) {
92
- return ProfileTableTool.NUMERIC_TYPES.includes(dataType.toLowerCase());
93
- }
94
- isStringType(dataType) {
95
- return ProfileTableTool.STRING_TYPES.includes(dataType.toLowerCase());
96
- }
97
- isDateType(dataType) {
98
- return ProfileTableTool.DATE_TYPES.includes(dataType.toLowerCase());
99
- }
100
- shouldSkipType(dataType) {
101
- return ProfileTableTool.SKIP_TYPES.includes(dataType.toLowerCase());
102
- }
103
- async run(params) {
104
- try {
105
- const pool = params.pool;
106
- const tableName = params.tableName?.trim();
107
- if (!tableName) {
108
- return { success: false, message: "tableName is required." };
109
- }
110
- const schemaName = params.schemaName?.trim() || "dbo";
111
- const sampleSize = this.normalizeLimit(params.sampleSize, DEFAULT_SAMPLE_SIZE, 1000);
112
- const includeDistributions = params.includeDistributions !== false;
113
- const includeSamples = params.includeSamples === true;
114
- const topValuesLimit = this.normalizeLimit(params.topValuesLimit, 10, 50);
115
- const columnsToProfile = params.columnsToProfile?.map((c) => c.trim()).filter(Boolean);
116
- // 1. Validate table exists and get columns
117
- const metaRequest = new sql.Request(pool);
118
- metaRequest.input("schemaName", sql.NVarChar, schemaName);
119
- metaRequest.input("tableName", sql.NVarChar, tableName);
120
- const metaResult = await metaRequest.query(`
121
- SELECT
122
- c.COLUMN_NAME AS columnName,
123
- c.DATA_TYPE AS dataType,
124
- CASE WHEN c.IS_NULLABLE = 'YES' THEN 1 ELSE 0 END AS isNullable
125
- FROM INFORMATION_SCHEMA.COLUMNS c
126
- INNER JOIN INFORMATION_SCHEMA.TABLES t
127
- ON c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME
128
- WHERE c.TABLE_SCHEMA = @schemaName AND c.TABLE_NAME = @tableName
129
- ORDER BY c.ORDINAL_POSITION
130
- `);
131
- if (!metaResult.recordset.length) {
132
- return {
133
- success: false,
134
- message: `Table [${schemaName}].[${tableName}] not found or has no columns.`,
135
- };
136
- }
137
- // Filter columns if requested
138
- let columns = [...metaResult.recordset];
139
- if (columnsToProfile && columnsToProfile.length) {
140
- const requested = new Set(columnsToProfile.map((c) => c.toLowerCase()));
141
- columns = columns.filter((c) => requested.has(c.columnName.toLowerCase()));
142
- if (!columns.length) {
143
- return {
144
- success: false,
145
- message: `None of the requested columns exist in [${schemaName}].[${tableName}].`,
146
- };
147
- }
148
- }
149
- // Filter out binary/blob types
150
- columns = columns.filter((c) => !this.shouldSkipType(c.dataType));
151
- // 2. Get total row count
152
- const countRequest = new sql.Request(pool);
153
- const fqTable = `${this.escapeIdentifier(schemaName)}.${this.escapeIdentifier(tableName)}`;
154
- const countResult = await countRequest.query(`SELECT COUNT(*) AS cnt FROM ${fqTable}`);
155
- const rowCount = countResult.recordset[0]?.cnt ?? 0;
156
- let sampleRows;
157
- if (rowCount === 0) {
158
- return {
159
- success: true,
160
- tableName,
161
- schemaName,
162
- rowCount: 0,
163
- columnCount: columns.length,
164
- sampleSize: 0,
165
- columns: columns.map((c) => ({
166
- columnName: c.columnName,
167
- dataType: c.dataType,
168
- isNullable: Boolean(c.isNullable),
169
- nullCount: 0,
170
- nullPercentage: 0,
171
- distinctCount: 0,
172
- cardinality: "low",
173
- })),
174
- };
175
- }
176
- if (includeSamples) {
177
- const sampleRequest = new sql.Request(pool);
178
- const sampleQuery = `
179
- SELECT TOP (${sampleSize}) *
180
- FROM ${fqTable}
181
- ORDER BY NEWID()
182
- `;
183
- const sampleResult = await sampleRequest.query(sampleQuery);
184
- sampleRows = (sampleResult.recordset ?? []).slice(0, SAMPLE_RETURN_LIMIT);
185
- }
186
- // 3. Profile each column
187
- const columnProfiles = [];
188
- for (const col of columns) {
189
- const colName = this.escapeIdentifier(col.columnName);
190
- const profile = {
191
- columnName: col.columnName,
192
- dataType: col.dataType,
193
- isNullable: Boolean(col.isNullable),
194
- nullCount: 0,
195
- nullPercentage: 0,
196
- distinctCount: 0,
197
- cardinality: "low",
198
- };
199
- // Base stats: null count and distinct count
200
- const baseRequest = new sql.Request(pool);
201
- const baseResult = await baseRequest.query(`
202
- SELECT
203
- SUM(CASE WHEN ${colName} IS NULL THEN 1 ELSE 0 END) AS nullCount,
204
- COUNT(DISTINCT ${colName}) AS distinctCount
205
- FROM ${fqTable}
206
- `);
207
- const baseRow = baseResult.recordset[0];
208
- profile.nullCount = baseRow?.nullCount ?? 0;
209
- profile.nullPercentage = rowCount > 0 ? Number(((profile.nullCount / rowCount) * 100).toFixed(2)) : 0;
210
- profile.distinctCount = baseRow?.distinctCount ?? 0;
211
- profile.cardinality = this.classifyCardinality(profile.distinctCount, rowCount);
212
- // Type-specific stats
213
- if (this.isNumericType(col.dataType)) {
214
- const numRequest = new sql.Request(pool);
215
- const numResult = await numRequest.query(`
216
- SELECT
217
- MIN(${colName}) AS minVal,
218
- MAX(${colName}) AS maxVal,
219
- AVG(CAST(${colName} AS FLOAT)) AS avgVal
220
- FROM ${fqTable}
221
- WHERE ${colName} IS NOT NULL
222
- `);
223
- const numRow = numResult.recordset[0];
224
- if (numRow && numRow.minVal !== null) {
225
- profile.numericStats = {
226
- min: numRow.minVal,
227
- max: numRow.maxVal,
228
- avg: Number(Number(numRow.avgVal).toFixed(4)),
229
- };
230
- const percentileRequest = new sql.Request(pool);
231
- const percentileResult = await percentileRequest.query(`
232
- SELECT TOP 1
233
- PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY ${colName}) OVER () AS medianVal,
234
- PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY ${colName}) OVER () AS p90Val
235
- FROM ${fqTable}
236
- WHERE ${colName} IS NOT NULL
237
- `);
238
- const percentileRow = percentileResult.recordset[0];
239
- if (percentileRow) {
240
- if (percentileRow.medianVal !== null && percentileRow.medianVal !== undefined) {
241
- profile.numericStats.median = Number(Number(percentileRow.medianVal).toFixed(4));
242
- }
243
- if (percentileRow.p90Val !== null && percentileRow.p90Val !== undefined) {
244
- profile.numericStats.p90 = Number(Number(percentileRow.p90Val).toFixed(4));
245
- }
246
- }
247
- }
248
- }
249
- else if (this.isStringType(col.dataType)) {
250
- const strRequest = new sql.Request(pool);
251
- const strResult = await strRequest.query(`
252
- SELECT
253
- MIN(LEN(${colName})) AS minLength,
254
- MAX(LEN(${colName})) AS maxLength,
255
- AVG(CAST(LEN(${colName}) AS FLOAT)) AS avgLength,
256
- SUM(CASE WHEN ${colName} = '' THEN 1 ELSE 0 END) AS emptyCount
257
- FROM ${fqTable}
258
- WHERE ${colName} IS NOT NULL
259
- `);
260
- const strRow = strResult.recordset[0];
261
- if (strRow && strRow.minLength !== null) {
262
- profile.stringStats = {
263
- minLength: strRow.minLength,
264
- maxLength: strRow.maxLength,
265
- avgLength: Number(Number(strRow.avgLength).toFixed(2)),
266
- emptyCount: strRow.emptyCount ?? 0,
267
- };
268
- }
269
- }
270
- else if (this.isDateType(col.dataType)) {
271
- const dateRequest = new sql.Request(pool);
272
- const dateResult = await dateRequest.query(`
273
- SELECT
274
- MIN(${colName}) AS earliest,
275
- MAX(${colName}) AS latest
276
- FROM ${fqTable}
277
- WHERE ${colName} IS NOT NULL
278
- `);
279
- const dateRow = dateResult.recordset[0];
280
- if (dateRow && dateRow.earliest !== null) {
281
- const earliest = new Date(dateRow.earliest);
282
- const latest = new Date(dateRow.latest);
283
- profile.dateStats = {
284
- earliest: earliest.toISOString(),
285
- latest: latest.toISOString(),
286
- range: this.formatDateRange(earliest, latest),
287
- };
288
- }
289
- }
290
- // Top values distribution
291
- if (includeDistributions && profile.distinctCount > 0 && profile.distinctCount <= rowCount) {
292
- const topRequest = new sql.Request(pool);
293
- topRequest.input("topLimit", sql.Int, topValuesLimit);
294
- const topResult = await topRequest.query(`
295
- SELECT TOP (@topLimit)
296
- ${colName} AS value,
297
- COUNT(*) AS cnt
298
- FROM ${fqTable}
299
- WHERE ${colName} IS NOT NULL
300
- GROUP BY ${colName}
301
- ORDER BY cnt DESC
302
- `);
303
- if (topResult.recordset.length) {
304
- profile.topValues = topResult.recordset.map((r) => ({
305
- value: r.value,
306
- count: r.cnt,
307
- percentage: Number(((r.cnt / rowCount) * 100).toFixed(2)),
308
- }));
309
- }
310
- }
311
- columnProfiles.push(profile);
312
- }
313
- return {
314
- success: true,
315
- tableName,
316
- schemaName,
317
- rowCount,
318
- columnCount: columnProfiles.length,
319
- sampleSize: includeSamples ? sampleRows?.length ?? 0 : sampleSize,
320
- columns: columnProfiles,
321
- samples: includeSamples ? sampleRows : undefined,
322
- };
323
- }
324
- catch (error) {
325
- return {
326
- success: false,
327
- message: `Failed to profile table: ${error}`,
328
- };
329
- }
330
- }
331
- }
332
- // Binary/blob types to skip
333
- ProfileTableTool.SKIP_TYPES = [
334
- "image",
335
- "varbinary",
336
- "binary",
337
- "timestamp",
338
- "rowversion",
339
- "sql_variant",
340
- "xml",
341
- "geography",
342
- "geometry",
343
- "hierarchyid",
344
- ];
345
- ProfileTableTool.NUMERIC_TYPES = [
346
- "int",
347
- "bigint",
348
- "smallint",
349
- "tinyint",
350
- "decimal",
351
- "numeric",
352
- "float",
353
- "real",
354
- "money",
355
- "smallmoney",
356
- ];
357
- ProfileTableTool.STRING_TYPES = [
358
- "char",
359
- "varchar",
360
- "nchar",
361
- "nvarchar",
362
- "text",
363
- "ntext",
364
- ];
365
- ProfileTableTool.DATE_TYPES = [
366
- "date",
367
- "datetime",
368
- "datetime2",
369
- "smalldatetime",
370
- "datetimeoffset",
371
- "time",
372
- ];
373
- //# sourceMappingURL=ProfileTableTool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProfileTableTool.js","sourceRoot":"","sources":["../../src/tools/ProfileTableTool.ts"],"names":[],"mappings":"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"}
@@ -1,61 +0,0 @@
1
- import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
- export declare class ReadDataTool implements Tool {
3
- [key: string]: any;
4
- name: string;
5
- description: string;
6
- private readonly defaultMaxRows;
7
- inputSchema: any;
8
- constructor();
9
- private static readonly DANGEROUS_KEYWORDS;
10
- private static readonly DANGEROUS_PATTERNS;
11
- /**
12
- * Validates the SQL query for security issues
13
- * @param query The SQL query to validate
14
- * @returns Validation result with success flag and error message if invalid
15
- */
16
- private validateQuery;
17
- /**
18
- * Enforces row limit by injecting TOP n if not already present
19
- * @param query The validated SQL query
20
- * @returns Query with TOP clause if needed, plus flag indicating if limit was added
21
- */
22
- private enforceRowLimit;
23
- /**
24
- * Resolves the maximum number of rows to return based on the input parameters and environment policy.
25
- * Priority: environment policy maxRowsDefault (enforced cap) > user-specified maxRows > tool default
26
- * @param params Input parameters including environmentPolicy
27
- * @returns Maximum number of rows to return
28
- */
29
- private resolveMaxRows;
30
- /**
31
- * Sanitizes the query result to prevent any potential security issues
32
- * @param data The query result data
33
- * @returns Sanitized data
34
- */
35
- private sanitizeResult;
36
- /**
37
- * Executes the validated SQL query
38
- * @param params Query parameters
39
- * @returns Query execution result
40
- */
41
- run(params: any): Promise<{
42
- success: boolean;
43
- message: string;
44
- error: string;
45
- database?: undefined;
46
- data?: undefined;
47
- recordCount?: undefined;
48
- totalRecords?: undefined;
49
- autoLimited?: undefined;
50
- } | {
51
- success: boolean;
52
- message: string;
53
- database: any;
54
- data: any[];
55
- recordCount: number;
56
- totalRecords: number;
57
- autoLimited: boolean;
58
- error?: undefined;
59
- }>;
60
- }
61
- //# sourceMappingURL=ReadDataTool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReadDataTool.d.ts","sourceRoot":"","sources":["../../src/tools/ReadDataTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG1D,qBAAa,YAAa,YAAW,IAAI;IACvC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAAe;IACnB,WAAW,SAAqH;IAEhI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,WAAW,EAiBN,GAAG,CAAC;;IAWT,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAOxC;IAGF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CA+CxC;IAEF;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAkFrB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAqBvB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAoBtB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IA6BtB;;;;OAIG;IACG,GAAG,CAAC,MAAM,EAAE,GAAG;;;;;;;;;;;;;;;;;;;CAiFtB"}