@checkdigit/eslint-plugin 7.18.0-PR.143-e2e9 → 7.18.0-PR.143-cf9d
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/api-locator.mjs +19 -10
- package/dist-mjs/athena/api-matcher.mjs +37 -77
- package/dist-mjs/athena/validate.mjs +130 -161
- package/dist-mjs/athena/visitor.mjs +32 -52
- package/dist-mjs/openapi/generate-schema.mjs +17 -23
- package/dist-mjs/openapi/service-schema-generator.mjs +7 -9
- package/dist-types/athena/visitor.d.ts +5 -3
- package/package.json +1 -1
- package/src/athena/api-locator.ts +20 -12
- package/src/athena/api-matcher.ts +45 -79
- package/src/athena/validate.ts +175 -170
- package/src/athena/visitor.ts +38 -71
- package/src/openapi/generate-schema.ts +18 -34
- package/src/openapi/service-schema-generator.ts +7 -8
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
// src/athena/visitor.ts
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
function hasNodeType(node, type) {
|
|
3
|
+
return typeof node === "object" && node !== null && node.type === type;
|
|
4
|
+
}
|
|
4
5
|
function isUnnestFrom(node) {
|
|
5
|
-
return
|
|
6
|
+
return hasNodeType(node, "unnest");
|
|
6
7
|
}
|
|
7
8
|
function isDual(node) {
|
|
8
|
-
return
|
|
9
|
+
return hasNodeType(node, "dual");
|
|
9
10
|
}
|
|
10
11
|
function isValuesFrom(node) {
|
|
11
12
|
if (typeof node !== "object" || node === null) {
|
|
12
13
|
return false;
|
|
13
14
|
}
|
|
14
|
-
|
|
15
|
-
return typeof expr === "object" && expr !== null && expr.type === "values";
|
|
15
|
+
return hasNodeType(node.expr, "values");
|
|
16
16
|
}
|
|
17
17
|
function isTableExpr(node) {
|
|
18
18
|
if (typeof node !== "object" || node === null) {
|
|
@@ -21,11 +21,14 @@ function isTableExpr(node) {
|
|
|
21
21
|
const expr = node.expr;
|
|
22
22
|
return typeof expr === "object" && expr !== null && "ast" in expr;
|
|
23
23
|
}
|
|
24
|
+
function isRegularFromItem(node) {
|
|
25
|
+
return typeof node === "object" && node !== null && !isUnnestFrom(node) && !isDual(node) && !isTableExpr(node);
|
|
26
|
+
}
|
|
24
27
|
function isJoin(node) {
|
|
25
|
-
return
|
|
28
|
+
return isRegularFromItem(node) && "join" in node;
|
|
26
29
|
}
|
|
27
30
|
function isBaseFrom(node) {
|
|
28
|
-
return
|
|
31
|
+
return isRegularFromItem(node) && !isJoin(node) && "table" in node;
|
|
29
32
|
}
|
|
30
33
|
function hasArrayIndex(node) {
|
|
31
34
|
const typed = node;
|
|
@@ -134,6 +137,15 @@ function walkFrom(node, visitor) {
|
|
|
134
137
|
}
|
|
135
138
|
visitor.visitBaseFrom?.(node);
|
|
136
139
|
}
|
|
140
|
+
function fromClauseItems(select) {
|
|
141
|
+
if (Array.isArray(select.from)) {
|
|
142
|
+
return select.from;
|
|
143
|
+
}
|
|
144
|
+
if (select.from !== null) {
|
|
145
|
+
return [select.from];
|
|
146
|
+
}
|
|
147
|
+
return [];
|
|
148
|
+
}
|
|
137
149
|
function walk(node, visitor) {
|
|
138
150
|
if (typeof node !== "object" || node === null) {
|
|
139
151
|
return;
|
|
@@ -146,15 +158,7 @@ function walk(node, visitor) {
|
|
|
146
158
|
visitor.visitWith?.(withItem);
|
|
147
159
|
walk(withItem.stmt.ast, visitor);
|
|
148
160
|
}
|
|
149
|
-
|
|
150
|
-
if (Array.isArray(sel.from)) {
|
|
151
|
-
fromItems = sel.from;
|
|
152
|
-
} else if (sel.from !== null) {
|
|
153
|
-
fromItems = [sel.from];
|
|
154
|
-
} else {
|
|
155
|
-
fromItems = [];
|
|
156
|
-
}
|
|
157
|
-
for (const fromItem of fromItems) {
|
|
161
|
+
for (const fromItem of fromClauseItems(sel)) {
|
|
158
162
|
walkFrom(fromItem, visitor);
|
|
159
163
|
}
|
|
160
164
|
for (const col of sel.columns) {
|
|
@@ -190,28 +194,6 @@ function extractColumnRefs(expr) {
|
|
|
190
194
|
});
|
|
191
195
|
return refs;
|
|
192
196
|
}
|
|
193
|
-
function extractJsonExtractPath(expr) {
|
|
194
|
-
let path;
|
|
195
|
-
walkExpr(expr, {
|
|
196
|
-
visitFunction(node) {
|
|
197
|
-
if (path !== void 0) {
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
const fnName = node.name.name[0]?.value;
|
|
201
|
-
if (fnName === "json_extract_scalar" || fnName === "json_extract") {
|
|
202
|
-
const pathArg = node.args?.value[1];
|
|
203
|
-
if (pathArg !== void 0) {
|
|
204
|
-
const val = pathArg.value;
|
|
205
|
-
if (typeof val === "string") {
|
|
206
|
-
path = val;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
log("extractJsonExtractPath, function:", fnName, path);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
});
|
|
213
|
-
return path;
|
|
214
|
-
}
|
|
215
197
|
function extractJsonExtractCalls(expr) {
|
|
216
198
|
const calls = [];
|
|
217
199
|
walkExpr(expr, {
|
|
@@ -239,6 +221,9 @@ function extractJsonExtractCalls(expr) {
|
|
|
239
221
|
});
|
|
240
222
|
return calls;
|
|
241
223
|
}
|
|
224
|
+
function extractJsonExtractPath(expr) {
|
|
225
|
+
return extractJsonExtractCalls(expr)[0]?.path;
|
|
226
|
+
}
|
|
242
227
|
function extractBracketAccessorPath(expr) {
|
|
243
228
|
let path;
|
|
244
229
|
walkExpr(expr, {
|
|
@@ -266,29 +251,23 @@ function hasFunctionCalls(expr) {
|
|
|
266
251
|
});
|
|
267
252
|
return found;
|
|
268
253
|
}
|
|
269
|
-
function
|
|
254
|
+
function containsCastToType(expr, dataType) {
|
|
270
255
|
let found = false;
|
|
271
256
|
walkExpr(expr, {
|
|
272
257
|
visitCast(node) {
|
|
273
258
|
const target = node.target?.[0];
|
|
274
|
-
if (target?.dataType ===
|
|
259
|
+
if (target?.dataType === dataType) {
|
|
275
260
|
found = true;
|
|
276
261
|
}
|
|
277
262
|
}
|
|
278
263
|
});
|
|
279
264
|
return found;
|
|
280
265
|
}
|
|
266
|
+
function containsCastToArray(expr) {
|
|
267
|
+
return containsCastToType(expr, "ARRAY");
|
|
268
|
+
}
|
|
281
269
|
function containsCastToMap(expr) {
|
|
282
|
-
|
|
283
|
-
walkExpr(expr, {
|
|
284
|
-
visitCast(node) {
|
|
285
|
-
const target = node.target?.[0];
|
|
286
|
-
if (target?.dataType === "MAP") {
|
|
287
|
-
found = true;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
});
|
|
291
|
-
return found;
|
|
270
|
+
return containsCastToType(expr, "MAP");
|
|
292
271
|
}
|
|
293
272
|
export {
|
|
294
273
|
containsCastToArray,
|
|
@@ -298,6 +277,7 @@ export {
|
|
|
298
277
|
extractColumnRefs,
|
|
299
278
|
extractJsonExtractCalls,
|
|
300
279
|
extractJsonExtractPath,
|
|
280
|
+
fromClauseItems,
|
|
301
281
|
hasArrayIndex,
|
|
302
282
|
hasFunctionCalls,
|
|
303
283
|
isBaseFrom,
|
|
@@ -308,4 +288,4 @@ export {
|
|
|
308
288
|
isValuesFrom,
|
|
309
289
|
walk
|
|
310
290
|
};
|
|
311
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2F0aGVuYS92aXNpdG9yLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQW9FQSxTQUFTLFlBQVksTUFBZSxNQUF1QjtBQUN6RCxTQUFPLE9BQU8sU0FBUyxZQUFZLFNBQVMsUUFBUyxLQUE0QixTQUFTO0FBQzVGO0FBRU8sU0FBUyxhQUFhLE1BQW1DO0FBQzlELFNBQU8sWUFBWSxNQUFNLFFBQVE7QUFDbkM7QUFFTyxTQUFTLE9BQU8sTUFBNkI7QUFDbEQsU0FBTyxZQUFZLE1BQU0sTUFBTTtBQUNqQztBQUVPLFNBQVMsYUFBYSxNQUFtQztBQUM5RCxNQUFJLE9BQU8sU0FBUyxZQUFZLFNBQVMsTUFBTTtBQUM3QyxXQUFPO0FBQUEsRUFDVDtBQUNBLFNBQU8sWUFBYSxLQUE0QixNQUFNLFFBQVE7QUFDaEU7QUFFTyxTQUFTLFlBQVksTUFBa0M7QUFDNUQsTUFBSSxPQUFPLFNBQVMsWUFBWSxTQUFTLE1BQU07QUFDN0MsV0FBTztBQUFBLEVBQ1Q7QUFDQSxRQUFNLE9BQVEsS0FBNEI7QUFDMUMsU0FBTyxPQUFPLFNBQVMsWUFBWSxTQUFTLFFBQVEsU0FBUztBQUMvRDtBQUVBLFNBQVMsa0JBQWtCLE1BQXdCO0FBQ2pELFNBQU8sT0FBTyxTQUFTLFlBQVksU0FBUyxRQUFRLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLFlBQVksSUFBSTtBQUMvRztBQUVPLFNBQVMsT0FBTyxNQUE2QjtBQUNsRCxTQUFPLGtCQUFrQixJQUFJLEtBQUssVUFBVztBQUMvQztBQUVPLFNBQVMsV0FBVyxNQUFpQztBQUMxRCxTQUFPLGtCQUFrQixJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxXQUFZO0FBQ2pFO0FBRU8sU0FBUyxjQUFjLE1BQWlEO0FBQzdFLFFBQU0sUUFBUTtBQUNkLFNBQU8sTUFBTSxRQUFRLE1BQU0sV0FBVyxLQUFLLE1BQU0sWUFBWSxTQUFTO0FBQ3hFO0FBT0EsU0FBUyxTQUFTLE1BQWUs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
|
|
@@ -33,15 +33,15 @@ function getRequestParametersSchema(operation, parameterType, document) {
|
|
|
33
33
|
if (operation.parameters === void 0) {
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
const parameters = getParameters(operation.parameters, document).filter(
|
|
37
|
+
(parameter) => parameter.in === parameterType
|
|
38
|
+
);
|
|
38
39
|
if (parameters.length === 0) {
|
|
39
40
|
return;
|
|
40
41
|
}
|
|
41
42
|
const parametersSchema = Object.fromEntries(
|
|
42
43
|
parameters.map((parameter) => [
|
|
43
44
|
parameterType === "header" ? parameter.name.toLowerCase() : parameter.name,
|
|
44
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
45
45
|
parameter.schema ?? { type: "string" }
|
|
46
46
|
])
|
|
47
47
|
);
|
|
@@ -56,14 +56,8 @@ function getRequestParametersSchema(operation, parameterType, document) {
|
|
|
56
56
|
return schema;
|
|
57
57
|
}
|
|
58
58
|
function getBodySchema(contents) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
const schema = Object.values(contents)[0]?.schema;
|
|
63
|
-
if (schema !== void 0 && Object.keys(schema).length === 0) {
|
|
64
|
-
return void 0;
|
|
65
|
-
}
|
|
66
|
-
return schema;
|
|
59
|
+
const schema = Object.values(contents ?? {})[0]?.schema;
|
|
60
|
+
return schema !== void 0 && Object.keys(schema).length > 0 ? schema : void 0;
|
|
67
61
|
}
|
|
68
62
|
function getRequestBodySchema(operation, document) {
|
|
69
63
|
if (!Object.hasOwn(operation, "requestBody")) {
|
|
@@ -121,13 +115,9 @@ function getResponseHeadersSchema(headers, document) {
|
|
|
121
115
|
Object.entries(headers).map(([name, header]) => [name.toLowerCase(), resolve(document, header)])
|
|
122
116
|
);
|
|
123
117
|
const resolvedHeaderSchemas = Object.fromEntries(
|
|
124
|
-
Object.entries(resolvedHeaders).map(([name, header]) => [
|
|
125
|
-
name,
|
|
126
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
127
|
-
header.schema ?? { type: "string" }
|
|
128
|
-
])
|
|
118
|
+
Object.entries(resolvedHeaders).map(([name, header]) => [name, header.schema ?? { type: "string" }])
|
|
129
119
|
);
|
|
130
|
-
const requiredHeaderNames = Object.entries(resolvedHeaders).filter(([
|
|
120
|
+
const requiredHeaderNames = Object.entries(resolvedHeaders).filter(([, header]) => header.required === true).map(([name]) => name);
|
|
131
121
|
return {
|
|
132
122
|
type: "object",
|
|
133
123
|
properties: resolvedHeaderSchemas,
|
|
@@ -171,10 +161,10 @@ function getOperationId(path, method, operation, operationIds) {
|
|
|
171
161
|
return operationId;
|
|
172
162
|
}
|
|
173
163
|
let operationIdIndex = 1;
|
|
174
|
-
while (operationIds.has(`${operationId}${operationIdIndex}`)) {
|
|
164
|
+
while (operationIds.has(`${operationId}${operationIdIndex.toString()}`)) {
|
|
175
165
|
operationIdIndex += 1;
|
|
176
166
|
}
|
|
177
|
-
return `${operationId}${operationIdIndex}`;
|
|
167
|
+
return `${operationId}${operationIdIndex.toString()}`;
|
|
178
168
|
}
|
|
179
169
|
function updateOpenapiSchemaDefinitionsReferences(value, relativeSchemaDefinitionReferenceUri, key) {
|
|
180
170
|
if (typeof value === "string" && key === "$ref" && value.startsWith(OPENAPI_SCHEMA_DEFINITIONS_REFERENCE_URI_BASE)) {
|
|
@@ -193,6 +183,10 @@ function updateOpenapiSchemaDefinitionsReferences(value, relativeSchemaDefinitio
|
|
|
193
183
|
}
|
|
194
184
|
return value;
|
|
195
185
|
}
|
|
186
|
+
function getFirehoseLoggedExtension(obj) {
|
|
187
|
+
const record = obj;
|
|
188
|
+
return record["x-firehose-logged"] ?? record["x-firehoseLogged"];
|
|
189
|
+
}
|
|
196
190
|
function buildApiSchemaFromDocument(document, organization, serviceName) {
|
|
197
191
|
if (document.paths === void 0) {
|
|
198
192
|
return null;
|
|
@@ -207,16 +201,16 @@ function buildApiSchemaFromDocument(document, organization, serviceName) {
|
|
|
207
201
|
const apiSchemas = {};
|
|
208
202
|
const allSchemas = { apis: apiSchemas };
|
|
209
203
|
const operationIds = /* @__PURE__ */ new Set();
|
|
210
|
-
const documentFirehoseLogged = document
|
|
204
|
+
const documentFirehoseLogged = getFirehoseLoggedExtension(document);
|
|
211
205
|
log("document firehose logged value", documentFirehoseLogged);
|
|
212
206
|
for (const [path, pathItems] of Object.entries(document.paths)) {
|
|
213
|
-
const koaPath = path.replaceAll(/\{([^}]+)\}/gu, "
|
|
207
|
+
const koaPath = path.replaceAll(/\{(?<param>[^}]+)\}/gu, ":$<param>");
|
|
214
208
|
const pathSchemas = {};
|
|
215
209
|
apiSchemas[`${serverPathname}${koaPath}`] = pathSchemas;
|
|
216
210
|
for (const method of ALL_OPERATION_METHODS) {
|
|
217
211
|
const operation = pathItems?.[method];
|
|
218
212
|
if (operation !== void 0) {
|
|
219
|
-
const operationFirehoseLogged = operation
|
|
213
|
+
const operationFirehoseLogged = getFirehoseLoggedExtension(operation);
|
|
220
214
|
log("operation firehose logged value", operationFirehoseLogged);
|
|
221
215
|
const effectiveFirehoseLogged = operationFirehoseLogged ?? documentFirehoseLogged;
|
|
222
216
|
if (effectiveFirehoseLogged !== true) {
|
|
@@ -278,4 +272,4 @@ export {
|
|
|
278
272
|
generateSchemas,
|
|
279
273
|
generateSchemasForService
|
|
280
274
|
};
|
|
281
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL29wZW5hcGkvZ2VuZXJhdGUtc2NoZW1hLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQUVBLFNBQVMsVUFBVSxjQUFjO0FBQ2pDLFNBQVMsWUFBWSxVQUFVO0FBRS9CLE9BQU8sV0FBVztBQUNsQixTQUFTLHVCQUF1QjtBQUNoQyxPQUFPLGFBQWE7QUFDcEIsT0FBTyxZQUFZO0FBS25CLFNBQVMsaUNBQWlDO0FBRG5DLElBQU0sY0FBYztBQUczQixJQUFNLE1BQU0sTUFBTSw2QkFBNkI7QUFFL0MsSUFBTSx3QkFBd0IsQ0FBQyxPQUFPLE9BQU8sUUFBUSxRQUFRLFNBQVMsU0FBUyxVQUFVLFNBQVM7QUFDbEcsSUFBTSw0QkFBNEI7QUFDbEMsSUFBTSxnREFBZ0Q7QUFDL0MsSUFBTSwwQkFBMEI7QUFrQ3ZDLFNBQVMscUJBQXFCLFFBQXlCO0FBQ3JELFNBQU8sQ0FBQyxRQUFRLE9BQU8sT0FBTyxFQUFFLFNBQVMsTUFBTTtBQUNqRDtBQUVBLFNBQVMsa0JBQWtCLFFBQWdEO0FBQ3pFLFNBQU8sT0FBTyxPQUFPLFFBQStCLE1BQU07QUFDNUQ7QUFFQSxTQUFTLFFBQVcsVUFBd0IsV0FBdUM7QUFDakYsTUFBSSxDQUFDLGtCQUFrQixTQUFTLEdBQUc7QUFDakMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLG1CQUFtQixVQUFVLEtBQUssTUFBTSxDQUFDO0FBQy9DLFFBQU0sb0JBQW9CLFFBQVEsSUFBSSxVQUFVLGdCQUFnQjtBQUNoRSxTQUFPLFFBQVEsVUFBVSxpQkFBaUI7QUFDNUM7QUFFQSxTQUFTLGNBQ1AsWUFDQSxVQUN1QjtBQUN2QixTQUFPLFdBQVcsSUFBSSxDQUFDLGNBQWMsUUFBUSxVQUFVLFNBQVMsQ0FBQztBQUNuRTtBQUVBLFNBQVMsMkJBQ1AsV0FDQSxlQUNBLFVBQzhCO0FBQzlCLE1BQUksVUFBVSxlQUFlLFFBQVc7QUFDdEM7QUFBQSxFQUNGO0FBRUEsTUFBSSxhQUFhLGNBQWMsVUFBVSxZQUFZLFFBQVE7QUFD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
|
|
275
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL29wZW5hcGkvZ2VuZXJhdGUtc2NoZW1hLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQUVBLFNBQVMsVUFBVSxjQUFjO0FBQ2pDLFNBQVMsWUFBWSxVQUFVO0FBRS9CLE9BQU8sV0FBVztBQUNsQixTQUFTLHVCQUF1QjtBQUNoQyxPQUFPLGFBQWE7QUFDcEIsT0FBTyxZQUFZO0FBS25CLFNBQVMsaUNBQWlDO0FBRG5DLElBQU0sY0FBYztBQUczQixJQUFNLE1BQU0sTUFBTSw2QkFBNkI7QUFFL0MsSUFBTSx3QkFBd0IsQ0FBQyxPQUFPLE9BQU8sUUFBUSxRQUFRLFNBQVMsU0FBUyxVQUFVLFNBQVM7QUFDbEcsSUFBTSw0QkFBNEI7QUFDbEMsSUFBTSxnREFBZ0Q7QUFDL0MsSUFBTSwwQkFBMEI7QUFrQ3ZDLFNBQVMscUJBQXFCLFFBQXlCO0FBQ3JELFNBQU8sQ0FBQyxRQUFRLE9BQU8sT0FBTyxFQUFFLFNBQVMsTUFBTTtBQUNqRDtBQUVBLFNBQVMsa0JBQWtCLFFBQWdEO0FBQ3pFLFNBQU8sT0FBTyxPQUFPLFFBQStCLE1BQU07QUFDNUQ7QUFFQSxTQUFTLFFBQVcsVUFBd0IsV0FBdUM7QUFDakYsTUFBSSxDQUFDLGtCQUFrQixTQUFTLEdBQUc7QUFDakMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLG1CQUFtQixVQUFVLEtBQUssTUFBTSxDQUFDO0FBQy9DLFFBQU0sb0JBQW9CLFFBQVEsSUFBSSxVQUFVLGdCQUFnQjtBQUNoRSxTQUFPLFFBQVEsVUFBVSxpQkFBaUI7QUFDNUM7QUFFQSxTQUFTLGNBQ1AsWUFDQSxVQUN1QjtBQUN2QixTQUFPLFdBQVcsSUFBSSxDQUFDLGNBQWMsUUFBUSxVQUFVLFNBQVMsQ0FBQztBQUNuRTtBQUVBLFNBQVMsMkJBQ1AsV0FDQSxlQUNBLFVBQzhCO0FBQzlCLE1BQUksVUFBVSxlQUFlLFFBQVc7QUFDdEM7QUFBQSxFQUNGO0FBRUEsUUFBTSxhQUFhLGNBQWMsVUFBVSxZQUFZLFFBQVEsRUFB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
|
|
@@ -5,6 +5,9 @@ import { buildApiSchemaFromYaml } from "./generate-schema.mjs";
|
|
|
5
5
|
var log = debug("eslint-plugin:athena:service-schema-generator");
|
|
6
6
|
var GITHUB_ORGANIZATIONS = ["checkdigit", "rebolt-checkdigit"];
|
|
7
7
|
var SWAGGER_SCHEMA_DEREF_FILENAME = "swagger.schema.deref.json";
|
|
8
|
+
function errorMessageFromError(error) {
|
|
9
|
+
return error instanceof Error ? error.message : String(error);
|
|
10
|
+
}
|
|
8
11
|
function derefApiSchemas(schemas) {
|
|
9
12
|
const definitions = schemas.definitions ?? {};
|
|
10
13
|
function derefValue(value, resolving = /* @__PURE__ */ new Set()) {
|
|
@@ -39,8 +42,7 @@ function readServiceConfig(packageJsonContent, org, serviceName) {
|
|
|
39
42
|
if (apiRoot === void 0 || apiEndpoints === void 0 || apiEndpoints.length === 0) {
|
|
40
43
|
return null;
|
|
41
44
|
}
|
|
42
|
-
const pkgOrg = packageJson.name?.slice(1).split("/")
|
|
43
|
-
const pkgServiceName = packageJson.name?.slice(1).split("/")[1] ?? serviceName;
|
|
45
|
+
const [pkgOrg = org, pkgServiceName = serviceName] = packageJson.name?.slice(1).split("/") ?? [];
|
|
44
46
|
return { organization: pkgOrg, serviceName: pkgServiceName, apiRoot, endpoints: apiEndpoints };
|
|
45
47
|
}
|
|
46
48
|
function findServiceLocally(serviceFolder, org, serviceName) {
|
|
@@ -84,9 +86,7 @@ function findServiceInNodeModules(serviceName) {
|
|
|
84
86
|
}
|
|
85
87
|
log(`[schema-generator] no swagger schema inside node_modules/@${org}/${serviceName}`);
|
|
86
88
|
} catch (error) {
|
|
87
|
-
log(
|
|
88
|
-
`[schema-generator] error reading node_modules/@${org}/${serviceName}: ${error instanceof Error ? error.message : String(error)}`
|
|
89
|
-
);
|
|
89
|
+
log(`[schema-generator] error reading node_modules/@${org}/${serviceName}: ${errorMessageFromError(error)}`);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
return null;
|
|
@@ -118,9 +118,7 @@ function generateSchemasForService(serviceName, outputDir) {
|
|
|
118
118
|
log(`[schema-generator] cached schema to ${dir}/${SWAGGER_SCHEMA_DEREF_FILENAME}`);
|
|
119
119
|
}
|
|
120
120
|
} catch (error) {
|
|
121
|
-
log(
|
|
122
|
-
`[schema-generator] error processing endpoint ${endpoint}: ${error instanceof Error ? error.message : String(error)}`
|
|
123
|
-
);
|
|
121
|
+
log(`[schema-generator] error processing endpoint ${endpoint}: ${errorMessageFromError(error)}`);
|
|
124
122
|
}
|
|
125
123
|
}
|
|
126
124
|
return results;
|
|
@@ -128,4 +126,4 @@ function generateSchemasForService(serviceName, outputDir) {
|
|
|
128
126
|
export {
|
|
129
127
|
generateSchemasForService
|
|
130
128
|
};
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL29wZW5hcGkvc2VydmljZS1zY2hlbWEtZ2VuZXJhdG9yLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQUVBLFNBQVMsWUFBWSxXQUFXLGNBQWMscUJBQXFCO0FBRW5FLE9BQU8sV0FBVztBQUVsQixTQUEwQiw4QkFBOEI7QUFFeEQsSUFBTSxNQUFNLE1BQU0sK0NBQStDO0FBRWpFLElBQU0sdUJBQXVCLENBQUMsY0FBYyxtQkFBbUI7QUFDL0QsSUFBTSxnQ0FBZ0M7QUFFdEMsU0FBUyxzQkFBc0IsT0FBd0I7QUFDckQsU0FBTyxpQkFBaUIsUUFBUSxNQUFNLFVBQVUsT0FBTyxLQUFLO0FBQzlEO0FBYUEsU0FBUyxnQkFBZ0IsU0FBaUM7QUFDeEQsUUFBTSxjQUFjLFFBQVEsZUFBZSxDQUFDO0FBRTVDLFdBQVMsV0FBVyxPQUFnQixZQUF5QixvQkFBSSxJQUFZLEdBQVk7QUFDdkYsUUFBSSxVQUFVLFFBQVEsT0FBTyxVQUFVLFVBQVU7QUFDL0MsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDeEIsYUFBTyxNQUFNLElBQUksQ0FBQyxTQUFTLFdBQVcsTUFBTSxTQUFTLENBQUM7QUFBQSxJQUN4RDtBQUNBLFVBQU0sTUFBTTtBQUNaLFFBQUksT0FBTyxJQUFJLE1BQU0sTUFBTSxVQUFVO0FBQ25DLFlBQU0sVUFBVSxrQ0FBa0MsS0FBSyxJQUFJLE1BQU0sQ0FBQyxHQUFHLFNBQVMsTUFBTTtBQUNwRixVQUFJLFlBQVksVUFBYSxDQUFDLFVBQVUsSUFBSSxPQUFPLEdBQUc7QUFDcEQsZUFBTyxXQUFXLFlBQVksT0FBTyxHQUFHLG9CQUFJLElBQVksQ0FBQyxHQUFHLFdBQVcsT0FBTyxDQUFDLENBQUM7QUFBQSxNQUNsRjtBQUFBLElBQ0Y7QUFDQSxXQUFPLE9BQU8sWUFBWSxPQUFPLFFBQVEsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxXQUFXLEtB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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AggrFunc, BaseFrom, Binary, Case, Cast, Column, ColumnRefItem, Dual, ExpressionValue, ExprList, Function, Join, Select, TableExpr, ValuesFrom, With } from './types';
|
|
1
|
+
import type { AggrFunc, BaseFrom, Binary, Case, Cast, Column, ColumnRefItem, Dual, ExpressionValue, ExprList, From, Function, Join, Select, TableExpr, ValuesFrom, With } from './types';
|
|
2
2
|
export interface UnnestFrom {
|
|
3
3
|
type: 'unnest';
|
|
4
4
|
expr: ColumnRefItem | {
|
|
@@ -49,13 +49,13 @@ export declare function isTableExpr(node: unknown): node is TableExpr;
|
|
|
49
49
|
export declare function isJoin(node: unknown): node is Join;
|
|
50
50
|
export declare function isBaseFrom(node: unknown): node is BaseFrom;
|
|
51
51
|
export declare function hasArrayIndex(node: ColumnRefItem): node is ColumnRefWithIndex;
|
|
52
|
+
/** Normalise select.from (null / single item / array) to a From[]. */
|
|
53
|
+
export declare function fromClauseItems(select: Select): From[];
|
|
52
54
|
export declare function walk(node: unknown, visitor: VisitorMap): void;
|
|
53
55
|
/** Return true if the expression contains a lambda (`->`) subexpression. */
|
|
54
56
|
export declare function containsLambda(expr: unknown): boolean;
|
|
55
57
|
/** Collect all column_ref nodes within an expression subtree. */
|
|
56
58
|
export declare function extractColumnRefs(expr: unknown): ColumnRefItem[];
|
|
57
|
-
/** Return the path string from the first json_extract_scalar / json_extract call found. */
|
|
58
|
-
export declare function extractJsonExtractPath(expr: unknown): string | undefined;
|
|
59
59
|
export interface JsonExtractCall {
|
|
60
60
|
ref: ColumnRefItem;
|
|
61
61
|
path: string;
|
|
@@ -63,6 +63,8 @@ export interface JsonExtractCall {
|
|
|
63
63
|
}
|
|
64
64
|
/** Collect ALL json_extract / json_extract_scalar calls as (source column_ref, path) pairs. */
|
|
65
65
|
export declare function extractJsonExtractCalls(expr: unknown): JsonExtractCall[];
|
|
66
|
+
/** Return the path string from the first json_extract_scalar / json_extract call found. */
|
|
67
|
+
export declare function extractJsonExtractPath(expr: unknown): string | undefined;
|
|
66
68
|
/** Return the JSONPath-style string from a bracket accessor (col['key']), or undefined. */
|
|
67
69
|
export declare function extractBracketAccessorPath(expr: unknown): string | undefined;
|
|
68
70
|
/** Return true if the expression tree contains any function or aggregate call. */
|
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-cf9d","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":">=24.14.1"},"service":{"api":{"root":"src","endpoints":["api/v1"]}}}
|
|
@@ -10,11 +10,8 @@ const log = debug('eslint-plugin:athena:api-locator');
|
|
|
10
10
|
|
|
11
11
|
const SERVICES_ROOT_FOLDER = 'src/services';
|
|
12
12
|
const LEGACY_TABLE_SUFFIX = '_logs';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
16
|
-
return `${value[0]?.toUpperCase()}${value.slice(1)}`;
|
|
17
|
-
}
|
|
13
|
+
// eslint-disable-next-line no-magic-numbers
|
|
14
|
+
const SCHEMA_MAX_AGE_MS = 60 * 60 * 1000; // 1 hour
|
|
18
15
|
|
|
19
16
|
export function locateApi(originalServiceName: string): ApiSchemas[] {
|
|
20
17
|
log('locating API for service', originalServiceName);
|
|
@@ -25,22 +22,33 @@ export function locateApi(originalServiceName: string): ApiSchemas[] {
|
|
|
25
22
|
serviceName = serviceName.slice(0, -LEGACY_TABLE_SUFFIX.length);
|
|
26
23
|
}
|
|
27
24
|
|
|
28
|
-
const
|
|
29
|
-
const camelCaseServiceName = [serviceNameParts[0], ...serviceNameParts.slice(1).map(upperCaseFirstCharacter)].join(
|
|
30
|
-
'',
|
|
31
|
-
);
|
|
25
|
+
const camelCaseServiceName = serviceName.replace(/-(?<letter>[a-z])/gu, (_, letter: string) => letter.toUpperCase());
|
|
32
26
|
|
|
33
27
|
const allSchemaFilenames = fs.globSync(`${SERVICES_ROOT_FOLDER}/${camelCaseServiceName}/*/swagger.schema.deref.json`);
|
|
34
|
-
|
|
35
|
-
|
|
28
|
+
log(
|
|
29
|
+
`${allSchemaFilenames.length.toString()} versions of API schemas located for service ${serviceName}`,
|
|
30
|
+
allSchemaFilenames,
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
const outputDir = `${SERVICES_ROOT_FOLDER}/${camelCaseServiceName}`;
|
|
36
34
|
|
|
37
35
|
if (allSchemaFilenames.length > 0) {
|
|
36
|
+
const hasStaleSchema = allSchemaFilenames.some(
|
|
37
|
+
(schemaFilename) => Date.now() - fs.statSync(schemaFilename).mtimeMs > SCHEMA_MAX_AGE_MS,
|
|
38
|
+
);
|
|
39
|
+
if (hasStaleSchema) {
|
|
40
|
+
log('cached schema(s) are stale (older than 1 hour), regenerating for service', serviceName);
|
|
41
|
+
const regenerated = generateSchemasForService(serviceName, outputDir);
|
|
42
|
+
if (regenerated.length > 0) {
|
|
43
|
+
return regenerated.map(({ schema }) => schema);
|
|
44
|
+
}
|
|
45
|
+
log('regeneration failed, falling back to stale cached schemas for service', serviceName);
|
|
46
|
+
}
|
|
38
47
|
return allSchemaFilenames.map(
|
|
39
48
|
(schemaFilename) => JSON.parse(fs.readFileSync(schemaFilename, 'utf-8')) as ApiSchemas,
|
|
40
49
|
);
|
|
41
50
|
}
|
|
42
51
|
|
|
43
52
|
log('no pre-generated schemas found, attempting on-demand generation for service', serviceName);
|
|
44
|
-
const outputDir = `${SERVICES_ROOT_FOLDER}/${camelCaseServiceName}`;
|
|
45
53
|
return generateSchemasForService(serviceName, outputDir).map(({ schema }) => schema);
|
|
46
54
|
}
|