@checkdigit/eslint-plugin 7.18.0-PR.143-e404 → 7.18.0-PR.143-072f
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/dist-mjs/athena/athena.mjs +12 -2
- package/dist-mjs/athena/service-table.mjs +3 -2
- package/dist-mjs/peggy/athena-peggy.mjs +2 -5
- package/package.json +1 -1
- package/src/athena/athena.ts +17 -2
- package/src/athena/service-table.ts +1 -0
- package/src/peggy/athena-peggy.ts +1 -4
- package/src/peggy/athena.peggy +1 -1
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-072f","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
|
@@ -525,7 +525,11 @@ function resolveSelectColumns(select: Select, ctx: VisitContext): Map<string, Re
|
|
|
525
525
|
// Top-level SELECT resolution
|
|
526
526
|
// ---------------------------------------------------------------------------
|
|
527
527
|
|
|
528
|
-
function checkSelect(
|
|
528
|
+
function checkSelect(
|
|
529
|
+
selectAST: Select | With,
|
|
530
|
+
ctx: VisitContext,
|
|
531
|
+
withTableName?: string,
|
|
532
|
+
): Map<string, ResolvedColumn[]> {
|
|
529
533
|
// Unwrap CTE wrapper (With → Select)
|
|
530
534
|
const select = 'stmt' in selectAST ? selectAST.stmt.ast : selectAST;
|
|
531
535
|
|
|
@@ -579,7 +583,16 @@ function checkSelect(selectAST: Select | With, ctx: VisitContext, withTableName?
|
|
|
579
583
|
|
|
580
584
|
// UNION ALL — next SELECT in the chain
|
|
581
585
|
if (select._next !== undefined) {
|
|
582
|
-
checkSelect(select._next, ctx, withTableName);
|
|
586
|
+
const nextColumns = checkSelect(select._next, ctx, withTableName);
|
|
587
|
+
const currentKeys = [...columns.keys()].sort();
|
|
588
|
+
const nextKeys = [...nextColumns.keys()].sort();
|
|
589
|
+
if (currentKeys.join(',') !== nextKeys.join(',')) {
|
|
590
|
+
throw new AthenaError(
|
|
591
|
+
ATHENA_ERROR,
|
|
592
|
+
`UNION ALL parts have different columns: [${currentKeys.join(', ')}] vs [${nextKeys.join(', ')}]`,
|
|
593
|
+
select._next,
|
|
594
|
+
);
|
|
595
|
+
}
|
|
583
596
|
}
|
|
584
597
|
|
|
585
598
|
// Register CTE result so subsequent SELECTs in the same WITH can reference it
|
|
@@ -587,6 +600,8 @@ function checkSelect(selectAST: Select | With, ctx: VisitContext, withTableName?
|
|
|
587
600
|
const resolvedTable: ResolvedTable = { name: withTableName, columns };
|
|
588
601
|
ctx.tables.set(withTableName, [resolvedTable]);
|
|
589
602
|
}
|
|
603
|
+
|
|
604
|
+
return columns;
|
|
590
605
|
}
|
|
591
606
|
|
|
592
607
|
function checkAthenaAst(ast: AST, ctx: VisitContext): void {
|
|
@@ -50,6 +50,7 @@ export function buildServiceTables(tableName: string, operations: MatchedOperati
|
|
|
50
50
|
['responsetype', [col('responsetype', SCHEMA_STRING)]],
|
|
51
51
|
['responsebody', [col('responsebody', bodySchema(operation.response, 'body'))]],
|
|
52
52
|
['responseheaders', [col('responseheaders', bodySchema(operation.response, 'headers'))]],
|
|
53
|
+
['partition_date', [col('partition_date', SCHEMA_STRING)]],
|
|
53
54
|
]),
|
|
54
55
|
}));
|
|
55
56
|
}
|
|
@@ -11757,10 +11757,7 @@ function peg$parse(input: any, options: any): any {
|
|
|
11757
11757
|
s1 = null;
|
|
11758
11758
|
}
|
|
11759
11759
|
s2 = peg$parse__();
|
|
11760
|
-
s3 = peg$
|
|
11761
|
-
if (s3 === peg$FAILED) {
|
|
11762
|
-
s3 = peg$parseor_and_expr();
|
|
11763
|
-
}
|
|
11760
|
+
s3 = peg$parseor_and_expr();
|
|
11764
11761
|
if (s3 !== peg$FAILED) {
|
|
11765
11762
|
s4 = peg$parse__();
|
|
11766
11763
|
s5 = [];
|
package/src/peggy/athena.peggy
CHANGED
|
@@ -2111,7 +2111,7 @@ distinct_args
|
|
|
2111
2111
|
orderby: or,
|
|
2112
2112
|
};
|
|
2113
2113
|
}
|
|
2114
|
-
/ d:KW_DISTINCT? __ c:
|
|
2114
|
+
/ d:KW_DISTINCT? __ c:or_and_expr __ tail:(__ (COMMA / OPERATOR_CONCATENATION) __ expr)* __ or:order_by_clause? {
|
|
2115
2115
|
const len = tail.length
|
|
2116
2116
|
let result = c
|
|
2117
2117
|
for (let i = 0; i < len; ++i) {
|