@checkdigit/eslint-plugin 7.18.0-PR.143-1b97 → 7.18.0-PR.143-3aac
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.
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { strict as assert } from "node:assert";
|
|
3
3
|
import debug from "debug";
|
|
4
4
|
import { JSONPath } from "jsonpath-plus";
|
|
5
|
-
import { ESLintUtils } from "@typescript-eslint/utils";
|
|
5
|
+
import { AST_NODE_TYPES, ESLintUtils } from "@typescript-eslint/utils";
|
|
6
6
|
import { parse } from "../peggy/athena-peggy.mjs";
|
|
7
7
|
import { matchApi } from "./api-matcher.mjs";
|
|
8
8
|
import { locateApi } from "./api-locator.mjs";
|
|
@@ -28,12 +28,46 @@ var SYNTEXT_ERROR = "SyntextError";
|
|
|
28
28
|
var ATHENA_ERROR = "AthenaError";
|
|
29
29
|
var AthenaError = class extends Error {
|
|
30
30
|
code;
|
|
31
|
-
|
|
31
|
+
ast;
|
|
32
|
+
constructor(code, message, ast) {
|
|
32
33
|
super(message);
|
|
33
34
|
this.code = code;
|
|
34
35
|
this.name = "AthenaError";
|
|
36
|
+
if (ast !== void 0) {
|
|
37
|
+
this.ast = ast;
|
|
38
|
+
}
|
|
35
39
|
}
|
|
36
40
|
};
|
|
41
|
+
function offsetToLoc(text, offset) {
|
|
42
|
+
const prefix = text.slice(0, offset);
|
|
43
|
+
const lines = prefix.split("\n");
|
|
44
|
+
return { line: lines.length, column: lines[lines.length - 1]?.length ?? 0 };
|
|
45
|
+
}
|
|
46
|
+
function buildSqlMapping(sqlNode) {
|
|
47
|
+
if (sqlNode.type !== AST_NODE_TYPES.TemplateLiteral) {
|
|
48
|
+
return [{ sqlStart: 0, srcStart: sqlNode.range[0] + 1 }];
|
|
49
|
+
}
|
|
50
|
+
const rawSql = sqlNode.quasis.map((quasi) => quasi.value.cooked ?? "").join("");
|
|
51
|
+
const trimStart = rawSql.length - rawSql.trimStart().length;
|
|
52
|
+
const segments = [];
|
|
53
|
+
let sqlCursor = 0;
|
|
54
|
+
for (const [index, quasi] of sqlNode.quasis.entries()) {
|
|
55
|
+
const cooked = quasi.value.cooked ?? "";
|
|
56
|
+
const localTrim = index === 0 ? trimStart : 0;
|
|
57
|
+
segments.push({ sqlStart: sqlCursor, srcStart: quasi.range[0] + 1 + localTrim });
|
|
58
|
+
sqlCursor += cooked.length - localTrim;
|
|
59
|
+
}
|
|
60
|
+
return segments;
|
|
61
|
+
}
|
|
62
|
+
function sqlOffsetToSource(sqlOffset, segments) {
|
|
63
|
+
for (let index = segments.length - 1; index >= 0; index--) {
|
|
64
|
+
const seg = segments[index];
|
|
65
|
+
if (seg !== void 0 && sqlOffset >= seg.sqlStart) {
|
|
66
|
+
return seg.srcStart + (sqlOffset - seg.sqlStart);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return segments[0]?.srcStart ?? 0;
|
|
70
|
+
}
|
|
37
71
|
function resolvedCol(name, schema, ast) {
|
|
38
72
|
return ast !== void 0 ? { name, schema, ast } : { name, schema };
|
|
39
73
|
}
|
|
@@ -147,7 +181,7 @@ function expandWildcard(referencedTables, columns) {
|
|
|
147
181
|
}
|
|
148
182
|
}
|
|
149
183
|
}
|
|
150
|
-
function resolveSchemaAtPath(colRef, propertyAccessor, resolvedColumns) {
|
|
184
|
+
function resolveSchemaAtPath(colRef, propertyAccessor, resolvedColumns, ast) {
|
|
151
185
|
const adjustedPath = `$.${propertyAccessor.substring(1).replace(/(\.|\[)/gu, "..properties$1")}`;
|
|
152
186
|
log("adjusted path", adjustedPath);
|
|
153
187
|
const extractedSchemas = resolvedColumns.flatMap(
|
|
@@ -155,19 +189,20 @@ function resolveSchemaAtPath(colRef, propertyAccessor, resolvedColumns) {
|
|
|
155
189
|
);
|
|
156
190
|
log("extracted schemas", extractedSchemas);
|
|
157
191
|
if (extractedSchemas.length === 0) {
|
|
158
|
-
throw new AthenaError(ATHENA_ERROR, `property not found ${colRef} - ${propertyAccessor}
|
|
192
|
+
throw new AthenaError(ATHENA_ERROR, `property not found ${colRef} - ${propertyAccessor}`, ast);
|
|
159
193
|
}
|
|
160
194
|
return extractedSchemas;
|
|
161
195
|
}
|
|
162
196
|
function navigateSchemaPath(colRef, propertyAccessor, resolvedColumns, colName, columnAST, columns) {
|
|
163
|
-
const
|
|
197
|
+
const errorAst = extractJsonExtractCalls(columnAST)[0]?.fnNode ?? columnAST;
|
|
198
|
+
const extractedSchemas = resolveSchemaAtPath(colRef, propertyAccessor, resolvedColumns, errorAst);
|
|
164
199
|
columns.set(
|
|
165
200
|
colName,
|
|
166
201
|
extractedSchemas.map((schema) => resolvedCol(colName, schema, columnAST))
|
|
167
202
|
);
|
|
168
203
|
}
|
|
169
204
|
function validateComplexColumnExpression(columnAST, allTables, ctx) {
|
|
170
|
-
for (const { ref, path } of extractJsonExtractCalls(columnAST)) {
|
|
205
|
+
for (const { ref, path, fnNode } of extractJsonExtractCalls(columnAST)) {
|
|
171
206
|
const tableRef = ref.table ?? void 0;
|
|
172
207
|
const colRef = typeof ref.column === "string" ? ref.column : void 0;
|
|
173
208
|
if (colRef === void 0) {
|
|
@@ -176,7 +211,7 @@ function validateComplexColumnExpression(columnAST, allTables, ctx) {
|
|
|
176
211
|
const referencedTables = tableRef !== void 0 ? lookupTables(tableRef, ctx) : allTables;
|
|
177
212
|
const resolvedColumns = referencedTables.flatMap((table) => table.columns.get(colRef) ?? []);
|
|
178
213
|
if (resolvedColumns.length > 0) {
|
|
179
|
-
resolveSchemaAtPath(colRef, path, resolvedColumns);
|
|
214
|
+
resolveSchemaAtPath(colRef, path, resolvedColumns, fnNode);
|
|
180
215
|
}
|
|
181
216
|
}
|
|
182
217
|
}
|
|
@@ -195,7 +230,7 @@ function resolveSingleColumnRef(columnAST, columnAlias, indexedName, ref, allTab
|
|
|
195
230
|
const resolvedColumns = referencedTables.flatMap((table) => table.columns.get(colRef) ?? []);
|
|
196
231
|
if (resolvedColumns.length === 0) {
|
|
197
232
|
const tableNames = [...ctx.tables.keys()].join(", ");
|
|
198
|
-
throw new AthenaError(ATHENA_ERROR, `can't found column ${colRef} in tables: ${tableNames}
|
|
233
|
+
throw new AthenaError(ATHENA_ERROR, `can't found column ${colRef} in tables: ${tableNames}`, columnAST);
|
|
199
234
|
}
|
|
200
235
|
const propertyAccessor = extractJsonExtractPath(columnAST) ?? extractBracketAccessorPath(columnAST);
|
|
201
236
|
if (propertyAccessor !== void 0) {
|
|
@@ -301,17 +336,31 @@ var rule = createRule({
|
|
|
301
336
|
});
|
|
302
337
|
return;
|
|
303
338
|
}
|
|
339
|
+
const sqlMapping = buildSqlMapping(sqlNode);
|
|
304
340
|
const athenaCtx = createRootContext();
|
|
305
341
|
try {
|
|
306
342
|
checkAthenaAst(Array.isArray(ast) ? ast[0] : ast, athenaCtx);
|
|
307
343
|
} catch (error) {
|
|
308
344
|
log("error checking Athena AST", { error, sql });
|
|
309
345
|
if (error instanceof AthenaError) {
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
346
|
+
const astLoc = error.ast?.loc;
|
|
347
|
+
if (astLoc !== void 0) {
|
|
348
|
+
const sourceText = context.sourceCode.getText();
|
|
349
|
+
context.report({
|
|
350
|
+
loc: {
|
|
351
|
+
start: offsetToLoc(sourceText, sqlOffsetToSource(astLoc.start.offset, sqlMapping)),
|
|
352
|
+
end: offsetToLoc(sourceText, sqlOffsetToSource(astLoc.end.offset, sqlMapping))
|
|
353
|
+
},
|
|
354
|
+
messageId: ATHENA_ERROR,
|
|
355
|
+
data: { errorMessage: error.message }
|
|
356
|
+
});
|
|
357
|
+
} else {
|
|
358
|
+
context.report({
|
|
359
|
+
node: sqlNode,
|
|
360
|
+
messageId: ATHENA_ERROR,
|
|
361
|
+
data: { errorMessage: error.message }
|
|
362
|
+
});
|
|
363
|
+
}
|
|
315
364
|
} else {
|
|
316
365
|
console.error(`Failed to apply ${ruleId} rule for "${context.filename}":`, error);
|
|
317
366
|
context.report({
|
|
@@ -343,4 +392,4 @@ export {
|
|
|
343
392
|
athena_default as default,
|
|
344
393
|
ruleId
|
|
345
394
|
};
|
|
346
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2F0aGVuYS9hdGhlbmEudHMiXSwKICAibWFwcGluZ3MiOiAiO0FBUUEsU0FBUyxVQUFVLGNBQWM7QUFFakMsT0FBTyxXQUFXO0FBQ2xCLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsbUJBQWtDO0FBRzNDLFNBQVMsYUFBYTtBQUV0QixTQUFTLGdCQUFnQjtBQUN6QixTQUFTLGlCQUFpQjtBQUMxQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FJSztBQUNQLFNBQVMsMEJBQTBCO0FBQ25DO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRUEsSUFBTSxTQUFTO0FBRXRCLElBQU0sTUFBTSxNQUFNLHNCQUFzQjtBQUN4QyxJQUFNLGFBQWEsWUFBWSxZQUFZLENBQUMsU0FBUyxJQUFJO0FBRXpELElBQU0sZ0JBQWdCO0FBQ3RCLElBQU0sZUFBZTtBQUVyQixJQUFNLGNBQU4sY0FBMEIsTUFBTTtBQUFBLEVBQ3ZCO0FBQUEsRUFDUCxZQUFZLE1BQWMsU0FBaUI7QUFDekMsVUFBTSxPQUFPO0FBQ2IsU0FBSyxPQUFPO0FBQ1osU0FBSyxPQUFPO0FBQUEsRUFDZDtBQUNGO0FBTUEsU0FBUyxZQUFZLE1BQWMsUUFBc0IsS0FBOEI7QUFDckYsU0FBTyxRQUFRLFNBQVksRUFBRSxNQUFNLFFBQVEsSUFBSSxJQUFJLEVBQUUsTUFBTSxPQUFPO0FBQ3BFO0FBR0EsU0FBUyxjQUFjLGFBQXFCLEtBQW1CO0FBQzdELE1BQUksVUFBVSxJQUFJLFdBQVcsSUFBSSxXQUFXO0FBQzVDLE1BQUksWUFBWSxRQUFXO0FBQ3pCLGNBQVUsVUFBVSxXQUFXO0FBQy9CLFFBQUksV0FBVyxJQUFJLGFBQWEsT0FBTztBQUFBLEVBQ3pDO0FBQ0EsU0FBTztBQUNUO0FBR0EsU0FBUyxhQUFhLGFBQXFCLEtBQW9DO0FBQzdFLFFBQU0sWUFBWSxJ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QUFBQSxFQUNGO0FBQUEsRUFDQSxnQkFBZ0IsQ0FBQztBQUFBLEVBQ2pCLE9BQU8sU0FBUztBQUNkLGFBQVMsU0FBUyxLQUFhLFNBQXdCO0FBQ3JELFVBQUksQ0FBQyxxRUFBcUUsS0FBSyxHQUFHLEdBQUc7QUFDbkYsWUFBSSxrQ0FBa0MsRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFBQSxNQUNGO0FBRUEsVUFBSTtBQUNKLFVBQUk7QUFFRixTQUFDLEVBQUUsSUFBSSxJQUFJLE1BQU0sS0FBSyxFQUFFLGtCQUFrQixLQUFLLENBQUM7QUFBQSxNQUNsRCxTQUFTLE9BQU87QUFDZCxZQUFJLDZCQUE2QixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQy9DLGdCQUFRLE9BQU87QUFBQSxVQUNiLE1BQU07QUFBQSxVQUNOLFdBQVc7QUFBQSxVQUNYLE1BQU0sRUFBRSxjQUFjLEtBQUssVUFBVSxPQUFPLFFBQVcsQ0FBQyxHQUFHLElBQUk7QUFBQSxRQUNqRSxDQUFDO0FBQ0Q7QUFBQSxNQUNGO0FBRUEsWUFBTSxZQUFZLGtCQUFrQjtBQUNwQyxVQUFJO0FBRUYsdUJBQWUsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVM7QUFBQSxNQUM3RCxTQUFTLE9BQU87QUFDZCxZQUFJLDZCQUE2QixFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQy9DLFlBQUksaUJBQWlCLGFBQWE7QUFDaEMsa0JBQVEsT0FBTztBQUFBLFlBQ2IsTUFBTTtBQUFBLFlBQ04sV0FBVztBQUFBLFlBQ1gsTUFBTSxFQUFFLGNBQWMsTUFBTSxRQUFRO0FBQUEsVUFDdEMsQ0FBQztBQUFBLFFBQ0gsT0FBTztBQUVMLGtCQUFRLE1BQU0sbUJBQW1CLE1BQU0sY0FBYyxRQUFRLFFBQVEsTUFBTSxLQUFLO0FBQ2hGLGtCQUFRLE9BQU87QUFBQSxZQUNiLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxZQUNYLE1BQU07QUFBQSxjQUNKLGNBQWMsaUJBQWlCLFFBQVEsT0FBTyxLQUFLLElBQUksS0FBSyxVQUFVLE9BQU8sUUFBVyxDQUFDO0FBQUEsWUFDM0Y7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsTUFDTCxnQkFBZ0IsU0FBUztBQUN2QixjQUFNLE1BQU0sUUFBUSxPQUNqQixJQUFJLENBQUMsVUFBVSxNQUFNLE1BQU0sTUFBTSxFQUNqQyxLQUFLLEVBQUUsRUFDUCxLQUFLO0FBQ1IsaUJBQVMsS0FBSyxPQUFPO0FBQUEsTUFDdkI7QUFBQSxNQUNBLFFBQVEsU0FBUztBQUNmLFlBQUksT0FBTyxRQUFRLFVBQVUsVUFBVTtBQUNyQztBQUFBLFFBQ0Y7QUFDQSxpQkFBUyxRQUFRLE9BQU8sT0FBTztBQUFBLE1BQ2pDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixDQUFDO0FBRUQsSUFBTyxpQkFBUTsiLAogICJuYW1lcyI6IFsidGFibGVOYW1lIiwgImFsaWFzIiwgImFwaVNjaGVtYXMiLCAib3BlcmF0aW9ucyJdCn0K
|
|
395
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2F0aGVuYS9hdGhlbmEudHMiXSwKICAibWFwcGluZ3MiOiAiO0FBUUEsU0FBUyxVQUFVLGNBQWM7QUFFakMsT0FBTyxXQUFXO0FBQ2xCLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsZ0JBQWdCLG1CQUFrQztBQUczRCxTQUFTLGFBQWE7QUFFdEIsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxpQkFBaUI7QUFDMUI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BSUs7QUFDUCxTQUFTLDBCQUEwQjtBQUNuQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVBLElBQU0sU0FBUztBQUV0QixJQUFNLE1BQU0sTUFBTSxzQkFBc0I7QUFDeEMsSUFBTSxhQUFhLFlBQVksWUFBWSxDQUFDLFNBQVMsSUFBSTtBQUV6RCxJQUFNLGdCQUFnQjtBQUN0QixJQUFNLGVBQWU7QUFFckIsSUFBTSxjQUFOLGNBQTBCLE1BQU07QUFBQSxFQUN2QjtBQUFBLEVBQ0E7QUFBQSxFQUNQLFlBQVksTUFBYyxTQUFpQixLQUFjO0FBQ3ZELFVBQU0sT0FBTztBQUNiLFNBQUssT0FBTztBQUNaLFNBQUssT0FBTztBQUNaLFFBQUksUUFBUSxRQUFXO0FBQ3JCLFdBQUssTUFBTTtBQUFBLElBQ2I7QUFBQSxFQUNGO0FBQ0Y7QUFHQSxTQUFTLFlBQVksTUFBYyxRQUFrRDtBQUNuRixRQUFNLFNBQVMsS0FBSyxNQUFNLEdBQUcsTUFBTTtBQUNuQyxRQUFNLFFBQVEsT0FBTyxNQUFNLElBQUk7QUFDL0IsU0FBTyxFQUFFLE1BQU0sTUFBTSxRQUFRLFFBQVEsTUFBTSxNQUFNLFNBQVMsQ0FBQyxHQUFHLFVBQVUsRUFBRTtBQUM1RTtBQVdBLFNBQVMsZ0JBQWdCLFNBQTRDO0FBQ25FLE1BQUksUUFBUSxTQUFTLGVBQWUsaUJBQWlCO0FBRW5ELFdBQU8s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
|
|
@@ -209,7 +209,7 @@ function extractJsonExtractCalls(expr) {
|
|
|
209
209
|
if (ref === void 0 || typeof path !== "string") {
|
|
210
210
|
return;
|
|
211
211
|
}
|
|
212
|
-
calls.push({ ref, path });
|
|
212
|
+
calls.push({ ref, path, fnNode: node });
|
|
213
213
|
}
|
|
214
214
|
});
|
|
215
215
|
return calls;
|
|
@@ -255,4 +255,4 @@ export {
|
|
|
255
255
|
isUnnestFrom,
|
|
256
256
|
walk
|
|
257
257
|
};
|
|
258
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
258
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2F0aGVuYS92aXNpdG9yLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQUVBLE9BQU8sV0FBVztBQUVsQixJQUFNLE1BQU0sTUFBTSxnQkFBZ0I7QUFpRTNCLFNBQVMsYUFBYSxNQUFtQztBQUM5RCxTQUFPLE9BQU8sU0FBUyxZQUFZLFNBQVMsUUFBUyxLQUE0QixTQUFTO0FBQzVGO0FBRU8sU0FBUyxPQUFPLE1BQTZCO0FBQ2xELFNBQU8sT0FBTyxTQUFTLFlBQVksU0FBUyxRQUFTLEtBQTRCLFNBQVM7QUFDNUY7QUFFTyxTQUFTLFlBQVksTUFBa0M7QUFDNUQsTUFBSSxPQUFPLFNBQVMsWUFBWSxTQUFTLE1BQU07QUFDN0MsV0FBTztBQUFBLEVBQ1Q7QUFDQSxRQUFNLE9BQVEsS0FBNEI7QUFDMUMsU0FBTyxPQUFPLFNBQVMsWUFBWSxTQUFTLFFBQVEsU0FBUztBQUMvRDtBQUVPLFNBQVMsT0FBTyxNQUE2QjtBQUNsRCxTQUNFLENBQUMsYUFBYSxJQUFJLEtBQ2xCLENBQUMsT0FBTyxJQUFJLEtBQ1osQ0FBQyxZQUFZLElBQUksS0FDakIsT0FBTyxTQUFTLFlBQ2hCLFNBQVMsUUFDVCxVQUFVO0FBRWQ7QUFFTyxTQUFTLFdBQVcsTUFBaUM7QUFDMUQsU0FDRSxDQUFDLGFBQWEsSUFBSSxLQUNsQixDQUFDLE9BQU8sSUFBSSxLQUNaLENBQUMsWUFBWSxJQUFJLEtBQ2pCLENBQUMsT0FBTyxJQUFJLEtBQ1osT0FBTyxTQUFTLFlBQ2hCLFNBQVMsUUFDVCxXQUFXO0FBRWY7QUFFTyxTQUFTLGNBQWMsTUFBaUQ7QUFDN0UsUUFBTSxRQUFRO0FBQ2QsU0FBTyxNQUFNLFFBQVEsTUFBTSxXQUFXLEtBQUssTUFBTSxZQUFZLFNBQVM7QUFDeEU7QUFPQSxTQUFTLFNBQVMsTUFBZSxTQUEyQjtBQUMxRCxNQUFJLE9BQU8sU0FBUyxZQUFZLFNBQVMsTUFBTTtBQUM3QztBQUFBLEVBQ0Y7QUFDQSxRQUFNLFFBQVE7QUFFZCxVQUFRLE1BQU0s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
|
|
@@ -54,6 +54,7 @@ export declare function extractJsonExtractPath(expr: unknown): string | undefine
|
|
|
54
54
|
export interface JsonExtractCall {
|
|
55
55
|
ref: ColumnRefItem;
|
|
56
56
|
path: string;
|
|
57
|
+
fnNode: Function;
|
|
57
58
|
}
|
|
58
59
|
/** Collect ALL json_extract / json_extract_scalar calls as (source column_ref, path) pairs. */
|
|
59
60
|
export declare function extractJsonExtractCalls(expr: unknown): JsonExtractCall[];
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@checkdigit/eslint-plugin","version":"7.18.0-PR.143-
|
|
1
|
+
{"name":"@checkdigit/eslint-plugin","version":"7.18.0-PR.143-3aac","description":"Check Digit eslint plugins","keywords":["eslint","eslintplugin"],"homepage":"https://github.com/checkdigit/eslint-plugin#readme","bugs":{"url":"https://github.com/checkdigit/eslint-plugin/issues"},"repository":{"type":"git","url":"https://github.com/checkdigit/eslint-plugin"},"license":"MIT","author":"Check Digit, LLC","sideEffects":false,"type":"module","exports":{".":{"types":"./dist-types/index.d.ts","import":"./dist-mjs/index.mjs","default":"./dist-mjs/index.mjs"}},"files":["src","dist-types","dist-mjs","!src/**/test/**","!src/**/*.test.ts","!src/**/*.spec.ts","!dist-types/**/test/**","!dist-types/**/*.test.d.ts","!dist-types/**/*.spec.d.ts","!dist-mjs/**/test/**","!dist-mjs/**/*.test.mjs","!dist-mjs/**/*.spec.mjs","SECURITY.md"],"scripts":{"build:dist-mjs":"rimraf dist-mjs && npx builder --type=module --sourceMap --outDir=dist-mjs && node dist-mjs/index.mjs","build:dist-types":"rimraf dist-types && npx builder --type=types --outDir=dist-types","ci:compile":"tsc --noEmit","ci:coverage":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=true","ci:lint":"npm run lint","ci:style":"npm run prettier","ci:test":"NODE_OPTIONS=\"--disable-warning ExperimentalWarning --experimental-vm-modules\" jest --coverage=false","lint":"eslint --max-warnings 0 .","lint:fix":"eslint --max-warnings 0 --fix .","peggy":"for file in ./src/peggy/*.peggy; do peggy \"$file\" --format es --output \"${file%.peggy}-peggy.ts\"; done","peggy-watch":"for file in ./src/peggy/*.peggy; do peggy \"$file\" --format=es --watch --output=\"${file%.peggy}-peggy.ts\"; done","prepare":"","prepublishOnly":"npm run build:dist-types && npm run build:dist-mjs","prettier":"prettier --ignore-path .gitignore --list-different .","prettier:fix":"prettier --ignore-path .gitignore --write .","test":"npm run ci:compile && npm run ci:test && npm run ci:lint && npm run ci:style"},"prettier":"@checkdigit/prettier-config","jest":{"preset":"@checkdigit/jest-config"},"dependencies":{"@apidevtools/json-schema-ref-parser":"^15.3.5","@typescript-eslint/type-utils":"^8.60.1","@typescript-eslint/utils":"^8.60.1","ajv":"^8.20.0","debug":"^4.4.3","glob":"^13.0.6","http-status-codes":"^2.3.0","js-yaml":"^4.2.0","json-pointer":"^0.6.2","jsonpath-plus":"^10.4.0","ts-api-utils":"^2.5.0"},"devDependencies":{"@checkdigit/jest-config":"^6.0.2","@checkdigit/prettier-config":"^6.1.0","@checkdigit/typescript-config":"10.0.0","@eslint/js":"^9.37.0","@types/debug":"^4.1.13","@types/eslint":"^9.6.1","@types/eslint-config-prettier":"^6.11.3","@types/js-yaml":"^4.0.9","@types/json-pointer":"^1.0.34","@typescript-eslint/parser":"^8.60.1","@typescript-eslint/rule-tester":"^8.60.1","eslint":"^9.37.0","eslint-config-prettier":"^10.1.8","eslint-import-resolver-typescript":"^4.4.5","eslint-plugin-eslint-plugin":"^6.4.0","eslint-plugin-import":"^2.32.0","eslint-plugin-no-only-tests":"^3.4.0","eslint-plugin-no-secrets":"^2.3.3","eslint-plugin-node":"^11.1.0","eslint-plugin-sonarjs":"^1.0.4","openapi-types":"^12.1.3","peggy":"^4.2.0","rimraf":"^6.1.3","typescript-eslint":"^8.60.1"},"peerDependencies":{"eslint":">=9 <10"},"engines":{"node":">=22.18"},"service":{"api":{"root":"src","endpoints":["api/v1"]}},"wallaby":{"env":{"params":{"runner":"--experimental-vm-modules"}}}}
|
package/src/athena/athena.ts
CHANGED
|
@@ -10,7 +10,7 @@ import { strict as assert } from 'node:assert';
|
|
|
10
10
|
|
|
11
11
|
import debug from 'debug';
|
|
12
12
|
import { JSONPath } from 'jsonpath-plus';
|
|
13
|
-
import { ESLintUtils, type TSESTree } from '@typescript-eslint/utils';
|
|
13
|
+
import { AST_NODE_TYPES, ESLintUtils, type TSESTree } from '@typescript-eslint/utils';
|
|
14
14
|
import type { SchemaObject } from 'ajv/dist/2020';
|
|
15
15
|
|
|
16
16
|
import { parse } from '../peggy/athena-peggy.ts';
|
|
@@ -46,11 +46,60 @@ const ATHENA_ERROR = 'AthenaError';
|
|
|
46
46
|
|
|
47
47
|
class AthenaError extends Error {
|
|
48
48
|
public code: string;
|
|
49
|
-
|
|
49
|
+
public ast?: object;
|
|
50
|
+
constructor(code: string, message: string, ast?: object) {
|
|
50
51
|
super(message);
|
|
51
52
|
this.code = code;
|
|
52
53
|
this.name = 'AthenaError';
|
|
54
|
+
if (ast !== undefined) {
|
|
55
|
+
this.ast = ast;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Convert a 0-based character offset in `text` to a 1-based line / 0-based column ESLint location.
|
|
61
|
+
function offsetToLoc(text: string, offset: number): { line: number; column: number } {
|
|
62
|
+
const prefix = text.slice(0, offset);
|
|
63
|
+
const lines = prefix.split('\n');
|
|
64
|
+
return { line: lines.length, column: lines[lines.length - 1]?.length ?? 0 };
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Maps a SQL-string offset (as produced by the PEG parser) back to an absolute source offset.
|
|
68
|
+
// Each quasi in a TemplateLiteral contributes a segment; template expressions have no SQL width
|
|
69
|
+
// but do occupy source characters, so a naïve single-offset approach gives wrong results when
|
|
70
|
+
// the error location is in a quasi that follows one or more template expressions.
|
|
71
|
+
interface SqlSourceSegment {
|
|
72
|
+
sqlStart: number; // offset in the trimmed SQL where this quasi's content begins
|
|
73
|
+
srcStart: number; // absolute source offset where this quasi's content begins
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function buildSqlMapping(sqlNode: TSESTree.Node): SqlSourceSegment[] {
|
|
77
|
+
if (sqlNode.type !== AST_NODE_TYPES.TemplateLiteral) {
|
|
78
|
+
// String literals: single segment, content starts one char after the opening quote.
|
|
79
|
+
return [{ sqlStart: 0, srcStart: sqlNode.range[0] + 1 }];
|
|
80
|
+
}
|
|
81
|
+
const rawSql = sqlNode.quasis.map((quasi) => quasi.value.cooked ?? '').join('');
|
|
82
|
+
const trimStart = rawSql.length - rawSql.trimStart().length;
|
|
83
|
+
const segments: SqlSourceSegment[] = [];
|
|
84
|
+
let sqlCursor = 0;
|
|
85
|
+
for (const [index, quasi] of sqlNode.quasis.entries()) {
|
|
86
|
+
const cooked = quasi.value.cooked ?? '';
|
|
87
|
+
const localTrim = index === 0 ? trimStart : 0;
|
|
88
|
+
// quasi.range[0] is the opening backtick (index 0) or the closing } of the preceding expression.
|
|
89
|
+
segments.push({ sqlStart: sqlCursor, srcStart: quasi.range[0] + 1 + localTrim });
|
|
90
|
+
sqlCursor += cooked.length - localTrim;
|
|
53
91
|
}
|
|
92
|
+
return segments;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function sqlOffsetToSource(sqlOffset: number, segments: SqlSourceSegment[]): number {
|
|
96
|
+
for (let index = segments.length - 1; index >= 0; index--) {
|
|
97
|
+
const seg = segments[index];
|
|
98
|
+
if (seg !== undefined && sqlOffset >= seg.sqlStart) {
|
|
99
|
+
return seg.srcStart + (sqlOffset - seg.sqlStart);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return segments[0]?.srcStart ?? 0;
|
|
54
103
|
}
|
|
55
104
|
|
|
56
105
|
// ---------------------------------------------------------------------------
|
|
@@ -233,6 +282,7 @@ function resolveSchemaAtPath(
|
|
|
233
282
|
colRef: string,
|
|
234
283
|
propertyAccessor: string,
|
|
235
284
|
resolvedColumns: ResolvedColumn[],
|
|
285
|
+
ast?: object,
|
|
236
286
|
): SchemaObject[] {
|
|
237
287
|
// Double-dot handles allOf / anyOf / oneOf wrappers that may appear in the schema.
|
|
238
288
|
// eslint-disable-next-line prefer-named-capture-group
|
|
@@ -245,7 +295,7 @@ function resolveSchemaAtPath(
|
|
|
245
295
|
log('extracted schemas', extractedSchemas);
|
|
246
296
|
|
|
247
297
|
if (extractedSchemas.length === 0) {
|
|
248
|
-
throw new AthenaError(ATHENA_ERROR, `property not found ${colRef} - ${propertyAccessor}
|
|
298
|
+
throw new AthenaError(ATHENA_ERROR, `property not found ${colRef} - ${propertyAccessor}`, ast);
|
|
249
299
|
}
|
|
250
300
|
return extractedSchemas;
|
|
251
301
|
}
|
|
@@ -258,7 +308,9 @@ function navigateSchemaPath(
|
|
|
258
308
|
columnAST: unknown,
|
|
259
309
|
columns: Map<string, ResolvedColumn[]>,
|
|
260
310
|
): void {
|
|
261
|
-
|
|
311
|
+
// Prefer the inner function/expression node for location: the Column wrapper rarely carries loc.
|
|
312
|
+
const errorAst = (extractJsonExtractCalls(columnAST)[0]?.fnNode ?? columnAST) as object;
|
|
313
|
+
const extractedSchemas = resolveSchemaAtPath(colRef, propertyAccessor, resolvedColumns, errorAst);
|
|
262
314
|
columns.set(
|
|
263
315
|
colName,
|
|
264
316
|
extractedSchemas.map((schema) => resolvedCol(colName, schema, columnAST as object)),
|
|
@@ -271,7 +323,7 @@ function navigateSchemaPath(
|
|
|
271
323
|
|
|
272
324
|
/** Validate all json_extract / json_extract_scalar paths in a complex column expression. */
|
|
273
325
|
function validateComplexColumnExpression(columnAST: unknown, allTables: ResolvedTable[], ctx: VisitContext): void {
|
|
274
|
-
for (const { ref, path } of extractJsonExtractCalls(columnAST)) {
|
|
326
|
+
for (const { ref, path, fnNode } of extractJsonExtractCalls(columnAST)) {
|
|
275
327
|
const tableRef = ref.table ?? undefined;
|
|
276
328
|
const colRef = typeof ref.column === 'string' ? ref.column : undefined;
|
|
277
329
|
if (colRef === undefined) {
|
|
@@ -280,7 +332,7 @@ function validateComplexColumnExpression(columnAST: unknown, allTables: Resolved
|
|
|
280
332
|
const referencedTables = tableRef !== undefined ? lookupTables(tableRef, ctx) : allTables;
|
|
281
333
|
const resolvedColumns = referencedTables.flatMap((table) => table.columns.get(colRef) ?? []);
|
|
282
334
|
if (resolvedColumns.length > 0) {
|
|
283
|
-
resolveSchemaAtPath(colRef, path, resolvedColumns); // throws if path not found
|
|
335
|
+
resolveSchemaAtPath(colRef, path, resolvedColumns, fnNode); // throws if path not found
|
|
284
336
|
}
|
|
285
337
|
}
|
|
286
338
|
}
|
|
@@ -313,7 +365,7 @@ function resolveSingleColumnRef(
|
|
|
313
365
|
|
|
314
366
|
if (resolvedColumns.length === 0) {
|
|
315
367
|
const tableNames = [...ctx.tables.keys()].join(', ');
|
|
316
|
-
throw new AthenaError(ATHENA_ERROR, `can't found column ${colRef} in tables: ${tableNames}
|
|
368
|
+
throw new AthenaError(ATHENA_ERROR, `can't found column ${colRef} in tables: ${tableNames}`, columnAST as object);
|
|
317
369
|
}
|
|
318
370
|
|
|
319
371
|
const propertyAccessor = extractJsonExtractPath(columnAST) ?? extractBracketAccessorPath(columnAST);
|
|
@@ -461,6 +513,7 @@ const rule: ESLintUtils.RuleModule<typeof SYNTEXT_ERROR | typeof ATHENA_ERROR> =
|
|
|
461
513
|
return;
|
|
462
514
|
}
|
|
463
515
|
|
|
516
|
+
const sqlMapping = buildSqlMapping(sqlNode);
|
|
464
517
|
const athenaCtx = createRootContext();
|
|
465
518
|
try {
|
|
466
519
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
@@ -468,11 +521,25 @@ const rule: ESLintUtils.RuleModule<typeof SYNTEXT_ERROR | typeof ATHENA_ERROR> =
|
|
|
468
521
|
} catch (error) {
|
|
469
522
|
log('error checking Athena AST', { error, sql });
|
|
470
523
|
if (error instanceof AthenaError) {
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
524
|
+
const astLoc = (error.ast as { loc?: { start: { offset: number }; end: { offset: number } } } | undefined)
|
|
525
|
+
?.loc;
|
|
526
|
+
if (astLoc !== undefined) {
|
|
527
|
+
const sourceText = context.sourceCode.getText();
|
|
528
|
+
context.report({
|
|
529
|
+
loc: {
|
|
530
|
+
start: offsetToLoc(sourceText, sqlOffsetToSource(astLoc.start.offset, sqlMapping)),
|
|
531
|
+
end: offsetToLoc(sourceText, sqlOffsetToSource(astLoc.end.offset, sqlMapping)),
|
|
532
|
+
},
|
|
533
|
+
messageId: ATHENA_ERROR,
|
|
534
|
+
data: { errorMessage: error.message },
|
|
535
|
+
});
|
|
536
|
+
} else {
|
|
537
|
+
context.report({
|
|
538
|
+
node: sqlNode,
|
|
539
|
+
messageId: ATHENA_ERROR,
|
|
540
|
+
data: { errorMessage: error.message },
|
|
541
|
+
});
|
|
542
|
+
}
|
|
476
543
|
} else {
|
|
477
544
|
// eslint-disable-next-line no-console
|
|
478
545
|
console.error(`Failed to apply ${ruleId} rule for "${context.filename}":`, error);
|
package/src/athena/visitor.ts
CHANGED
|
@@ -302,6 +302,7 @@ export function extractJsonExtractPath(expr: unknown): string | undefined {
|
|
|
302
302
|
export interface JsonExtractCall {
|
|
303
303
|
ref: ColumnRefItem;
|
|
304
304
|
path: string;
|
|
305
|
+
fnNode: Function;
|
|
305
306
|
}
|
|
306
307
|
|
|
307
308
|
/** Collect ALL json_extract / json_extract_scalar calls as (source column_ref, path) pairs. */
|
|
@@ -327,7 +328,7 @@ export function extractJsonExtractCalls(expr: unknown): JsonExtractCall[] {
|
|
|
327
328
|
if (ref === undefined || typeof path !== 'string') {
|
|
328
329
|
return;
|
|
329
330
|
}
|
|
330
|
-
calls.push({ ref, path });
|
|
331
|
+
calls.push({ ref, path, fnNode: node });
|
|
331
332
|
},
|
|
332
333
|
});
|
|
333
334
|
return calls;
|