@checkdigit/eslint-athena-plugin 1.0.0-PR.2-dcdf
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/LICENSE.txt +21 -0
- package/README.md +17 -0
- package/SECURITY.md +13 -0
- package/dist-mjs/athena/api-locator.mjs +66 -0
- package/dist-mjs/athena/api-matcher.mjs +206 -0
- package/dist-mjs/athena/athena.mjs +165 -0
- package/dist-mjs/athena/column.mjs +1 -0
- package/dist-mjs/athena/context.mjs +21 -0
- package/dist-mjs/athena/index.mjs +1 -0
- package/dist-mjs/athena/service-table.mjs +45 -0
- package/dist-mjs/athena/sql-file.mjs +123 -0
- package/dist-mjs/athena/types.mjs +1 -0
- package/dist-mjs/athena/validate.mjs +619 -0
- package/dist-mjs/athena/visitor.mjs +291 -0
- package/dist-mjs/get-documentation-url.mjs +9 -0
- package/dist-mjs/index.mjs +56 -0
- package/dist-mjs/openapi/deref-schema.mjs +20 -0
- package/dist-mjs/openapi/generate-schema.mjs +375 -0
- package/dist-mjs/openapi/service-schema-generator.mjs +176 -0
- package/dist-mjs/peggy/athena-peggy.mjs +20700 -0
- package/dist-mjs/service.mjs +9 -0
- package/dist-mjs/sql-parser.mjs +28 -0
- package/dist-types/athena/api-locator.d.ts +2 -0
- package/dist-types/athena/api-matcher.d.ts +14 -0
- package/dist-types/athena/athena.d.ts +5 -0
- package/dist-types/athena/column.d.ts +1 -0
- package/dist-types/athena/context.d.ts +21 -0
- package/dist-types/athena/index.d.ts +8 -0
- package/dist-types/athena/service-table.d.ts +8 -0
- package/dist-types/athena/sql-file.d.ts +5 -0
- package/dist-types/athena/types.d.ts +493 -0
- package/dist-types/athena/validate.d.ts +14 -0
- package/dist-types/athena/visitor.d.ts +75 -0
- package/dist-types/get-documentation-url.d.ts +1 -0
- package/dist-types/index.d.ts +5 -0
- package/dist-types/openapi/deref-schema.d.ts +1 -0
- package/dist-types/openapi/generate-schema.d.ts +33 -0
- package/dist-types/openapi/service-schema-generator.d.ts +5 -0
- package/dist-types/peggy/athena-peggy.d.ts +13 -0
- package/dist-types/service.d.ts +2 -0
- package/dist-types/sql-parser.d.ts +25 -0
- package/package.json +1 -0
- package/src/api/v1/swagger.yml +619 -0
- package/src/api/v2/swagger.yml +477 -0
- package/src/athena/api-locator.ts +78 -0
- package/src/athena/api-matcher.ts +323 -0
- package/src/athena/athena.ts +224 -0
- package/src/athena/column.ts +4 -0
- package/src/athena/context.ts +47 -0
- package/src/athena/index.ts +13 -0
- package/src/athena/service-table.ts +78 -0
- package/src/athena/sql-file.ts +161 -0
- package/src/athena/types.ts +568 -0
- package/src/athena/validate.ts +902 -0
- package/src/athena/visitor.ts +406 -0
- package/src/get-documentation-url.ts +7 -0
- package/src/index.ts +67 -0
- package/src/openapi/deref-schema.ts +20 -0
- package/src/openapi/generate-schema.ts +553 -0
- package/src/openapi/service-schema-generator.ts +241 -0
- package/src/peggy/athena-peggy.ts +22149 -0
- package/src/peggy/athena.peggy +2971 -0
- package/src/service.ts +11 -0
- package/src/services/eslintAthenaPlugin/v1/swagger.schema.deref.json +1931 -0
- package/src/services/eslintAthenaPlugin/v2/swagger.schema.deref.json +978 -0
- package/src/sql-parser.ts +53 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
// src/athena/visitor.ts
|
|
2
|
+
function hasNodeType(node, type) {
|
|
3
|
+
return typeof node === "object" && node !== null && node.type === type;
|
|
4
|
+
}
|
|
5
|
+
function isUnnestFrom(node) {
|
|
6
|
+
return hasNodeType(node, "unnest");
|
|
7
|
+
}
|
|
8
|
+
function isDual(node) {
|
|
9
|
+
return hasNodeType(node, "dual");
|
|
10
|
+
}
|
|
11
|
+
function isValuesFrom(node) {
|
|
12
|
+
if (typeof node !== "object" || node === null) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
return hasNodeType(node.expr, "values");
|
|
16
|
+
}
|
|
17
|
+
function isTableExpr(node) {
|
|
18
|
+
if (typeof node !== "object" || node === null) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
const expr = node.expr;
|
|
22
|
+
return typeof expr === "object" && expr !== null && "ast" in expr;
|
|
23
|
+
}
|
|
24
|
+
function isRegularFromItem(node) {
|
|
25
|
+
return typeof node === "object" && node !== null && !isUnnestFrom(node) && !isDual(node) && !isTableExpr(node);
|
|
26
|
+
}
|
|
27
|
+
function isJoin(node) {
|
|
28
|
+
return isRegularFromItem(node) && "join" in node;
|
|
29
|
+
}
|
|
30
|
+
function isBaseFrom(node) {
|
|
31
|
+
return isRegularFromItem(node) && !isJoin(node) && "table" in node;
|
|
32
|
+
}
|
|
33
|
+
function hasArrayIndex(node) {
|
|
34
|
+
const typed = node;
|
|
35
|
+
return Array.isArray(typed.array_index) && typed.array_index.length > 0;
|
|
36
|
+
}
|
|
37
|
+
function walkExpr(node, visitor) {
|
|
38
|
+
if (typeof node !== "object" || node === null) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const typed = node;
|
|
42
|
+
switch (typed["type"]) {
|
|
43
|
+
case "select": {
|
|
44
|
+
walk(node, visitor);
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
case "expr": {
|
|
48
|
+
walkExpr(node.expr, visitor);
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
case "binary_expr": {
|
|
52
|
+
const bin = node;
|
|
53
|
+
visitor.visitBinary?.(bin);
|
|
54
|
+
walkExpr(bin.left, visitor);
|
|
55
|
+
walkExpr(bin.right, visitor);
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
case "column_ref": {
|
|
59
|
+
visitor.visitColumnRef?.(node);
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
case "function": {
|
|
63
|
+
const fn = node;
|
|
64
|
+
visitor.visitFunction?.(fn);
|
|
65
|
+
if (fn.args !== void 0) {
|
|
66
|
+
walkExpr(fn.args, visitor);
|
|
67
|
+
}
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
case "aggr_func": {
|
|
71
|
+
const agg = node;
|
|
72
|
+
visitor.visitAggrFunc?.(agg);
|
|
73
|
+
walkExpr(agg.args.expr, visitor);
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
case "cast": {
|
|
77
|
+
const cast = node;
|
|
78
|
+
visitor.visitCast?.(cast);
|
|
79
|
+
walkExpr(cast.expr, visitor);
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
case "case": {
|
|
83
|
+
const caseNode = node;
|
|
84
|
+
visitor.visitCase?.(caseNode);
|
|
85
|
+
for (const arm of caseNode.args) {
|
|
86
|
+
if ("cond" in arm) {
|
|
87
|
+
walkExpr(arm.cond, visitor);
|
|
88
|
+
}
|
|
89
|
+
walkExpr(arm.result, visitor);
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
case "expr_list": {
|
|
94
|
+
const list = node;
|
|
95
|
+
visitor.visitExprList?.(list);
|
|
96
|
+
for (const item of list.value) {
|
|
97
|
+
walkExpr(item, visitor);
|
|
98
|
+
}
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
case "array": {
|
|
102
|
+
walkExpr(node.expr_list, visitor);
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
default: {
|
|
106
|
+
if (typed["type"] === void 0 && "expr" in typed) {
|
|
107
|
+
walkExpr(typed["expr"], visitor);
|
|
108
|
+
} else {
|
|
109
|
+
visitor.visitValue?.(node);
|
|
110
|
+
}
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function walkFrom(node, visitor) {
|
|
116
|
+
if (isDual(node)) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (isUnnestFrom(node)) {
|
|
120
|
+
visitor.visitUnnest?.(node);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (isTableExpr(node)) {
|
|
124
|
+
visitor.visitTableExpr?.(node);
|
|
125
|
+
walk(node.expr.ast, visitor);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (isJoin(node)) {
|
|
129
|
+
visitor.visitJoin?.(node);
|
|
130
|
+
if (node.on !== void 0) {
|
|
131
|
+
walkExpr(node.on, visitor);
|
|
132
|
+
}
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (isValuesFrom(node)) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
visitor.visitBaseFrom?.(node);
|
|
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
|
+
}
|
|
149
|
+
function walk(node, visitor) {
|
|
150
|
+
if (typeof node !== "object" || node === null) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const typed = node;
|
|
154
|
+
if (typed["type"] === "select") {
|
|
155
|
+
const sel = node;
|
|
156
|
+
visitor.visitSelect?.(sel);
|
|
157
|
+
for (const withItem of sel.with ?? []) {
|
|
158
|
+
visitor.visitWith?.(withItem);
|
|
159
|
+
walk(withItem.stmt.ast, visitor);
|
|
160
|
+
}
|
|
161
|
+
for (const fromItem of fromClauseItems(sel)) {
|
|
162
|
+
walkFrom(fromItem, visitor);
|
|
163
|
+
}
|
|
164
|
+
for (const col of sel.columns) {
|
|
165
|
+
walkExpr(col, visitor);
|
|
166
|
+
}
|
|
167
|
+
if (sel.where !== null) {
|
|
168
|
+
walkExpr(sel.where, visitor);
|
|
169
|
+
}
|
|
170
|
+
if (sel._next !== void 0) {
|
|
171
|
+
walk(sel._next, visitor);
|
|
172
|
+
}
|
|
173
|
+
} else {
|
|
174
|
+
walkExpr(node, visitor);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function containsLambda(expr) {
|
|
178
|
+
let found = false;
|
|
179
|
+
walkExpr(expr, {
|
|
180
|
+
visitBinary(node) {
|
|
181
|
+
if (node.operator === "->") {
|
|
182
|
+
found = true;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
return found;
|
|
187
|
+
}
|
|
188
|
+
function extractColumnRefs(expr) {
|
|
189
|
+
const refs = [];
|
|
190
|
+
walkExpr(expr, {
|
|
191
|
+
visitColumnRef(node) {
|
|
192
|
+
refs.push(node);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
return refs;
|
|
196
|
+
}
|
|
197
|
+
function extractJsonExtractCalls(expr) {
|
|
198
|
+
const calls = [];
|
|
199
|
+
walkExpr(expr, {
|
|
200
|
+
visitFunction(node) {
|
|
201
|
+
const fnName = node.name.name[0]?.value;
|
|
202
|
+
if (fnName !== "json_extract_scalar" && fnName !== "json_extract") {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const sourceArg = node.args?.value[0];
|
|
206
|
+
const pathArg = node.args?.value[1];
|
|
207
|
+
if (sourceArg === void 0 || pathArg === void 0) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
const sourceRefs = extractColumnRefs(sourceArg);
|
|
211
|
+
if (sourceRefs.length !== 1) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const [ref] = sourceRefs;
|
|
215
|
+
const path = pathArg.value;
|
|
216
|
+
if (ref === void 0 || typeof path !== "string") {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
calls.push({ ref, path, fnNode: node });
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
return calls;
|
|
223
|
+
}
|
|
224
|
+
function extractJsonExtractPath(expr) {
|
|
225
|
+
return extractJsonExtractCalls(expr)[0]?.path;
|
|
226
|
+
}
|
|
227
|
+
function extractBracketAccessorPath(expr) {
|
|
228
|
+
let path;
|
|
229
|
+
walkExpr(expr, {
|
|
230
|
+
visitColumnRef(node) {
|
|
231
|
+
if (path !== void 0 || !hasArrayIndex(node)) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
const indexValue = node.array_index[0]?.index.value;
|
|
235
|
+
if (typeof indexValue === "string") {
|
|
236
|
+
path = `$["${indexValue}"]`;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
return path;
|
|
241
|
+
}
|
|
242
|
+
function hasFunctionCalls(expr) {
|
|
243
|
+
let found = false;
|
|
244
|
+
walkExpr(expr, {
|
|
245
|
+
visitFunction() {
|
|
246
|
+
found = true;
|
|
247
|
+
},
|
|
248
|
+
visitAggrFunc() {
|
|
249
|
+
found = true;
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
return found;
|
|
253
|
+
}
|
|
254
|
+
function containsCastToType(expr, dataType) {
|
|
255
|
+
let found = false;
|
|
256
|
+
walkExpr(expr, {
|
|
257
|
+
visitCast(node) {
|
|
258
|
+
const target = node.target?.[0];
|
|
259
|
+
if (target?.dataType === dataType) {
|
|
260
|
+
found = true;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
return found;
|
|
265
|
+
}
|
|
266
|
+
function containsCastToArray(expr) {
|
|
267
|
+
return containsCastToType(expr, "ARRAY");
|
|
268
|
+
}
|
|
269
|
+
function containsCastToMap(expr) {
|
|
270
|
+
return containsCastToType(expr, "MAP");
|
|
271
|
+
}
|
|
272
|
+
export {
|
|
273
|
+
containsCastToArray,
|
|
274
|
+
containsCastToMap,
|
|
275
|
+
containsLambda,
|
|
276
|
+
extractBracketAccessorPath,
|
|
277
|
+
extractColumnRefs,
|
|
278
|
+
extractJsonExtractCalls,
|
|
279
|
+
extractJsonExtractPath,
|
|
280
|
+
fromClauseItems,
|
|
281
|
+
hasArrayIndex,
|
|
282
|
+
hasFunctionCalls,
|
|
283
|
+
isBaseFrom,
|
|
284
|
+
isDual,
|
|
285
|
+
isJoin,
|
|
286
|
+
isTableExpr,
|
|
287
|
+
isUnnestFrom,
|
|
288
|
+
isValuesFrom,
|
|
289
|
+
walk
|
|
290
|
+
};
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2F0aGVuYS92aXNpdG9yLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQW9FQSxTQUFTLFlBQVksTUFBZSxNQUF1QjtBQUN6RCxTQUNFLE9BQU8sU0FBUyxZQUNoQixTQUFTLFFBQ1IsS0FBNEIsU0FBUztBQUUxQztBQUVPLFNBQVMsYUFBYSxNQUFtQztBQUM5RCxTQUFPLFlBQVksTUFBTSxRQUFRO0FBQ25DO0FBRU8sU0FBUyxPQUFPLE1BQTZCO0FBQ2xELFNBQU8sWUFBWSxNQUFNLE1BQU07QUFDakM7QUFFTyxTQUFTLGFBQWEsTUFBbUM7QUFDOUQsTUFBSSxPQUFPLFNBQVMsWUFBWSxTQUFTLE1BQU07QUFDN0MsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLFlBQWEsS0FBNEIsTUFBTSxRQUFRO0FBQ2hFO0FBRU8sU0FBUyxZQUFZLE1BQWtDO0FBQzVELE1BQUksT0FBTyxTQUFTLFlBQVksU0FBUyxNQUFNO0FBQzdDLFdBQU87QUFBQSxFQUNUO0FBQ0EsUUFBTSxPQUFRLEtBQTRCO0FBQzFDLFNBQU8sT0FBTyxTQUFTLFlBQVksU0FBUyxRQUFRLFNBQVM7QUFDL0Q7QUFFQSxTQUFTLGtCQUFrQixNQUF3QjtBQUNqRCxTQUNFLE9BQU8sU0FBUyxZQUNoQixTQUFTLFFBQ1QsQ0FBQyxhQUFhLElBQUksS0FDbEIsQ0FBQyxPQUFPLElBQUksS0FDWixDQUFDLFlBQVksSUFBSTtBQUVyQjtBQUVPLFNBQVMsT0FBTyxNQUE2QjtBQUNsRCxTQUFPLGtCQUFrQixJQUFJLEtBQUssVUFBVztBQUMvQztBQUVPLFNBQVMsV0FBVyxNQUFpQztBQUMxRCxTQUNFLGtCQUFrQixJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxXQUFZO0FBRTVEO0FBRU8sU0FBUyxjQUFjLE1BQWlEO0FBQzdFLFFBQU0sUUFBUTtBQUNkLFNBQU8sTUFBTSxRQUFRLE1BQU0sV0FBVyxLQUFLLE1BQU0sWUFBWSxTQUFTO0FBQ3hFO0FBT0EsU0FBUyxTQUFTLE1B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
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// src/get-documentation-url.ts
|
|
2
|
+
import packageJson from "../package.json" with { type: "json" };
|
|
3
|
+
function getDocumentationUrl(ruleId) {
|
|
4
|
+
return `${packageJson.repository.url}/blob/v${packageJson.version}/docs/rules/${ruleId}.md`;
|
|
5
|
+
}
|
|
6
|
+
export {
|
|
7
|
+
getDocumentationUrl as default
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2dldC1kb2N1bWVudGF0aW9uLXVybC50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFFQSxPQUFPLGlCQUFpQixrQkFBa0IsS0FBSyxFQUFFLE1BQU0sT0FBTztBQUUvQyxTQUFSLG9CQUFxQyxRQUF3QjtBQUNsRSxTQUFPLEdBQUcsWUFBWSxXQUFXLEdBQUcsVUFBVSxZQUFZLE9BQU8sZUFBZSxNQUFNO0FBQ3hGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// src/index.ts
|
|
2
|
+
import athena, { ruleId as athenaRuleId } from "./athena/athena.mjs";
|
|
3
|
+
import sqlFile, { ruleId as sqlFileRuleId } from "./athena/sql-file.mjs";
|
|
4
|
+
import { parseForESLint } from "./sql-parser.mjs";
|
|
5
|
+
var rules = {
|
|
6
|
+
[athenaRuleId]: athena,
|
|
7
|
+
[sqlFileRuleId]: sqlFile
|
|
8
|
+
};
|
|
9
|
+
var plugin = {
|
|
10
|
+
rules
|
|
11
|
+
};
|
|
12
|
+
var configs = {
|
|
13
|
+
all: [
|
|
14
|
+
{
|
|
15
|
+
files: ["**/*.ts"],
|
|
16
|
+
plugins: {
|
|
17
|
+
"@checkdigit": plugin
|
|
18
|
+
},
|
|
19
|
+
rules: {
|
|
20
|
+
[`@checkdigit/${athenaRuleId}`]: "error"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
files: ["**/*.sql"],
|
|
25
|
+
plugins: { "@checkdigit": plugin },
|
|
26
|
+
languageOptions: { parser: { parseForESLint } },
|
|
27
|
+
rules: { [`@checkdigit/${sqlFileRuleId}`]: "error" }
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
recommended: [
|
|
31
|
+
{
|
|
32
|
+
files: ["**/*.ts"],
|
|
33
|
+
plugins: {
|
|
34
|
+
"@checkdigit": plugin
|
|
35
|
+
},
|
|
36
|
+
rules: {
|
|
37
|
+
[`@checkdigit/${athenaRuleId}`]: "off"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
files: ["**/*.sql"],
|
|
42
|
+
plugins: { "@checkdigit": plugin },
|
|
43
|
+
languageOptions: { parser: { parseForESLint } },
|
|
44
|
+
rules: { [`@checkdigit/${sqlFileRuleId}`]: "off" }
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
};
|
|
48
|
+
var defaultToExport = {
|
|
49
|
+
...plugin,
|
|
50
|
+
configs
|
|
51
|
+
};
|
|
52
|
+
var index_default = defaultToExport;
|
|
53
|
+
export {
|
|
54
|
+
index_default as default
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQVVBLE9BQU8sVUFBVSxVQUFVLG9CQUFvQjtBQUMvQyxPQUFPLFdBQVcsVUFBVSxxQkFBcUI7QUFDakQsU0FBUyxzQkFBc0I7QUFFL0IsSUFBTSxRQUFzRDtBQUFBLEVBQzFELENBQUMsWUFBWSxHQUFHO0FBQUEsRUFDaEIsQ0FBQyxhQUFhLEdBQUc7QUFDbkI7QUFFQSxJQUFNLFNBQXFDO0FBQUEsRUFDekM7QUFDRjtBQUVBLElBQU0sVUFBd0Q7QUFBQSxFQUM1RCxLQUFLO0FBQUEsSUFDSDtBQUFBLE1BQ0UsT0FBTyxDQUFDLFNBQVM7QUFBQSxNQUNqQixTQUFTO0FBQUEsUUFDUCxlQUFlO0FBQUEsTUFDakI7QUFBQSxNQUNBLE9BQU87QUFBQSxRQUNMLENBQUMsZUFBZSxZQUFZLEVBQUUsR0FBRztBQUFBLE1BQ25DO0FBQUEsSUFDRjtBQUFBLElBQ0E7QUFBQSxNQUNFLE9BQU8sQ0FBQyxVQUFVO0FBQUEsTUFDbEIsU0FBUyxFQUFFLGVBQWUsT0FBTztBQUFBLE1BQ2pDLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUU7QUFBQSxNQUM5QyxPQUFPLEVBQUUsQ0FBQyxlQUFlLGFBQWEsRUFBRSxHQUFHLFFBQVE7QUFBQSxJQUNyRDtBQUFBLEVBQ0Y7QUFBQSxFQUNBLGFBQWE7QUFBQSxJQUNYO0FBQUEsTUFDRSxPQUFPLENBQUMsU0FBUztBQUFBLE1BQ2pCLFNBQVM7QUFBQSxRQUNQLGVBQWU7QUFBQSxNQUNqQjtBQUFBLE1BQ0EsT0FBTztBQUFBLFFBQ0wsQ0FBQyxlQUFlLFlBQVksRUFBRSxHQUFHO0FBQUEsTUFDbkM7QUFBQSxJQUNGO0FBQUEsSUFDQTtBQUFBLE1BQ0UsT0FBTyxDQUFDLFVBQVU7QUFBQSxNQUNsQixTQUFTLEVBQUUsZUFBZSxPQUFPO0FBQUEsTUFDakMsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRTtBQUFBLE1BQzlDLE9BQU8sRUFBRSxDQUFDLGVBQWUsYUFBYSxFQUFFLEdBQUcsTUFBTTtBQUFBLElBQ25EO0FBQUEsRUFDRjtBQUNGO0FBRUEsSUFBTSxrQkFFRjtBQUFBLEVBQ0YsR0FBRztBQUFBLEVBQ0g7QUFDRjtBQUNBLElBQU8sZ0JBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// src/openapi/deref-schema.ts
|
|
2
|
+
import { promises as fs } from "node:fs";
|
|
3
|
+
import { dereference } from "@apidevtools/json-schema-ref-parser";
|
|
4
|
+
async function derefSchema(schemaFileName) {
|
|
5
|
+
const schemaFile = await fs.readFile(`${schemaFileName}.json`, "utf-8");
|
|
6
|
+
const adjustedSchemaFileForDeref = schemaFile.replace(
|
|
7
|
+
/"\$ref": ".*\/definitions\//gu,
|
|
8
|
+
'"$ref": "#/definitions/'
|
|
9
|
+
);
|
|
10
|
+
const json = JSON.parse(adjustedSchemaFileForDeref);
|
|
11
|
+
const deref = await dereference(json);
|
|
12
|
+
await fs.writeFile(
|
|
13
|
+
`${schemaFileName}.deref.json`,
|
|
14
|
+
JSON.stringify(deref, void 0, 2)
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
derefSchema
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL29wZW5hcGkvZGVyZWYtc2NoZW1hLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQUVBLFNBQVMsWUFBWSxVQUFVO0FBRS9CLFNBQVMsbUJBQW1CO0FBRTVCLGVBQXNCLFlBQVksZ0JBQXVDO0FBQ3ZFLFFBQU0sYUFBYSxNQUFNLEdBQUcsU0FBUyxHQUFHLGNBQWMsU0FBUyxPQUFPO0FBQ3RFLFFBQU0sNkJBQTZCLFdBQVc7QUFBQSxJQUM1QztBQUFBLElBQ0E7QUFBQSxFQUNGO0FBRUEsUUFBTSxPQUFPLEtBQUssTUFBTSwwQkFBMEI7QUFDbEQsUUFBTSxRQUFRLE1BQU0sWUFBWSxJQUFJO0FBQ3BDLFFBQU0sR0FBRztBQUFBLElBQ1AsR0FBRyxjQUFjO0FBQUEsSUFDakIsS0FBSyxVQUFVLE9BQU8sUUFBVyxDQUFDO0FBQUEsRUFDcEM7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|