@checkdigit/eslint-plugin 7.17.1 → 7.18.0-PR.143-8290

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 (80) hide show
  1. package/dist-mjs/athena/api-locator.mjs +30 -0
  2. package/dist-mjs/athena/api-matcher.mjs +108 -0
  3. package/dist-mjs/athena/athena.mjs +331 -0
  4. package/dist-mjs/athena/column.mjs +1 -0
  5. package/dist-mjs/athena/context.mjs +21 -0
  6. package/dist-mjs/athena/index.mjs +1 -0
  7. package/dist-mjs/athena/service-table.mjs +32 -0
  8. package/dist-mjs/athena/types.mjs +1 -0
  9. package/dist-mjs/athena/visitor.mjs +258 -0
  10. package/dist-mjs/index.mjs +8 -4
  11. package/dist-mjs/no-status-code-assert.mjs +1 -1
  12. package/dist-mjs/openapi/deref-schema.mjs +14 -0
  13. package/dist-mjs/openapi/generate-schema.mjs +273 -0
  14. package/dist-mjs/openapi/service-schema-generator.mjs +147 -0
  15. package/dist-mjs/peggy/athena-peggy.mjs +20629 -0
  16. package/dist-types/athena/api-locator.d.ts +2 -0
  17. package/dist-types/athena/api-matcher.d.ts +14 -0
  18. package/dist-types/athena/athena.d.ts +6 -0
  19. package/dist-types/athena/column.d.ts +1 -0
  20. package/dist-types/athena/context.d.ts +21 -0
  21. package/dist-types/athena/index.d.ts +8 -0
  22. package/dist-types/athena/service-table.d.ts +8 -0
  23. package/dist-types/athena/types.d.ts +474 -0
  24. package/dist-types/athena/visitor.d.ts +63 -0
  25. package/dist-types/no-status-code-assert.d.ts +1 -1
  26. package/dist-types/openapi/deref-schema.d.ts +1 -0
  27. package/dist-types/openapi/generate-schema.d.ts +33 -0
  28. package/dist-types/openapi/service-schema-generator.d.ts +5 -0
  29. package/dist-types/peggy/athena-peggy.d.ts +13 -0
  30. package/package.json +1 -96
  31. package/src/athena/ATHENA.md +387 -0
  32. package/src/athena/PLAN.md +355 -0
  33. package/src/athena/api-locator.ts +39 -0
  34. package/src/athena/api-matcher.ts +169 -0
  35. package/src/athena/athena.ts +491 -0
  36. package/src/athena/column.ts +2 -0
  37. package/src/athena/context.ts +47 -0
  38. package/src/athena/index.ts +11 -0
  39. package/src/athena/service-table.ts +55 -0
  40. package/src/athena/types.ts +526 -0
  41. package/src/athena/visitor.ts +365 -0
  42. package/src/index.ts +4 -0
  43. package/src/no-side-effects.ts +1 -1
  44. package/src/no-status-code-assert.ts +2 -2
  45. package/src/openapi/deref-schema.ts +14 -0
  46. package/src/openapi/generate-schema.ts +422 -0
  47. package/src/openapi/service-schema-generator.ts +189 -0
  48. package/src/peggy/athena-chat.peggy +608 -0
  49. package/src/peggy/athena-peggy.ts +22078 -0
  50. package/src/peggy/athena.peggy +2967 -0
  51. package/src/require-service-call-response-declaration.ts +2 -2
  52. package/src/services/interchange/v1/swagger.schema.deref.json +849 -0
  53. package/src/services/interchange/v1/swagger.schema.json +473 -0
  54. package/src/services/interchange/v1/swagger.yml +414 -0
  55. package/src/services/ledger/v1/swagger.schema.deref.json +6694 -0
  56. package/src/services/ledger/v1/swagger.schema.json +1820 -0
  57. package/src/services/ledger/v1/swagger.yml +1094 -0
  58. package/src/services/link/v1/swagger.schema.deref.json +648 -0
  59. package/src/services/link/v1/swagger.schema.json +444 -0
  60. package/src/services/link/v1/swagger.yml +343 -0
  61. package/src/services/message/v1/swagger.schema.deref.json +22049 -0
  62. package/src/services/message/v1/swagger.schema.json +3470 -0
  63. package/src/services/message/v1/swagger.yml +2798 -0
  64. package/src/services/message/v2/swagger.schema.deref.json +72221 -0
  65. package/src/services/message/v2/swagger.schema.json +3558 -0
  66. package/src/services/message/v2/swagger.yml +3009 -0
  67. package/src/services/paymentCard/v1/swagger.schema.deref.json +4346 -0
  68. package/src/services/paymentCard/v1/swagger.schema.json +2181 -0
  69. package/src/services/paymentCard/v1/swagger.yml +1161 -0
  70. package/src/services/paymentCard/v2/swagger.schema.deref.json +4336 -0
  71. package/src/services/paymentCard/v2/swagger.schema.json +2155 -0
  72. package/src/services/paymentCard/v2/swagger.yml +1149 -0
  73. package/src/services/person/v1/swagger.schema.deref.json +6786 -0
  74. package/src/services/person/v1/swagger.schema.json +1445 -0
  75. package/src/services/person/v1/swagger.yml +1157 -0
  76. package/src/services/teampayApproval/v1/swagger.schema.deref.json +9898 -0
  77. package/src/services/teampayCardManagement/v1/swagger.schema.deref.json +6187 -0
  78. package/src/services/teampayClientManagement/v1/swagger.schema.deref.json +4914 -0
  79. package/src/services/teampayClientManagement/v1/swagger.schema.json +1964 -0
  80. package/src/services/teampayClientManagement/v1/swagger.yml +1376 -0
@@ -0,0 +1,258 @@
1
+ // src/athena/visitor.ts
2
+ import debug from "debug";
3
+ var log = debug("athena:visitor");
4
+ function isUnnestFrom(node) {
5
+ return typeof node === "object" && node !== null && node.type === "unnest";
6
+ }
7
+ function isDual(node) {
8
+ return typeof node === "object" && node !== null && node.type === "dual";
9
+ }
10
+ function isTableExpr(node) {
11
+ if (typeof node !== "object" || node === null) {
12
+ return false;
13
+ }
14
+ const expr = node.expr;
15
+ return typeof expr === "object" && expr !== null && "ast" in expr;
16
+ }
17
+ function isJoin(node) {
18
+ return !isUnnestFrom(node) && !isDual(node) && !isTableExpr(node) && typeof node === "object" && node !== null && "join" in node;
19
+ }
20
+ function isBaseFrom(node) {
21
+ return !isUnnestFrom(node) && !isDual(node) && !isTableExpr(node) && !isJoin(node) && typeof node === "object" && node !== null && "table" in node;
22
+ }
23
+ function hasArrayIndex(node) {
24
+ const typed = node;
25
+ return Array.isArray(typed.array_index) && typed.array_index.length > 0;
26
+ }
27
+ function walkExpr(node, visitor) {
28
+ if (typeof node !== "object" || node === null) {
29
+ return;
30
+ }
31
+ const typed = node;
32
+ switch (typed["type"]) {
33
+ case "select": {
34
+ walk(node, visitor);
35
+ break;
36
+ }
37
+ case "expr": {
38
+ walkExpr(node.expr, visitor);
39
+ break;
40
+ }
41
+ case "binary_expr": {
42
+ const bin = node;
43
+ visitor.visitBinary?.(bin);
44
+ walkExpr(bin.left, visitor);
45
+ walkExpr(bin.right, visitor);
46
+ break;
47
+ }
48
+ case "column_ref": {
49
+ visitor.visitColumnRef?.(node);
50
+ break;
51
+ }
52
+ case "function": {
53
+ const fn = node;
54
+ visitor.visitFunction?.(fn);
55
+ if (fn.args !== void 0) {
56
+ walkExpr(fn.args, visitor);
57
+ }
58
+ break;
59
+ }
60
+ case "aggr_func": {
61
+ const agg = node;
62
+ visitor.visitAggrFunc?.(agg);
63
+ walkExpr(agg.args.expr, visitor);
64
+ break;
65
+ }
66
+ case "cast": {
67
+ const cast = node;
68
+ visitor.visitCast?.(cast);
69
+ walkExpr(cast.expr, visitor);
70
+ break;
71
+ }
72
+ case "case": {
73
+ const caseNode = node;
74
+ visitor.visitCase?.(caseNode);
75
+ for (const arm of caseNode.args) {
76
+ if ("cond" in arm) {
77
+ walkExpr(arm.cond, visitor);
78
+ }
79
+ walkExpr(arm.result, visitor);
80
+ }
81
+ break;
82
+ }
83
+ case "expr_list": {
84
+ const list = node;
85
+ visitor.visitExprList?.(list);
86
+ for (const item of list.value) {
87
+ walkExpr(item, visitor);
88
+ }
89
+ break;
90
+ }
91
+ default: {
92
+ if (typed["type"] === void 0 && "expr" in typed) {
93
+ walkExpr(typed["expr"], visitor);
94
+ } else {
95
+ visitor.visitValue?.(node);
96
+ }
97
+ break;
98
+ }
99
+ }
100
+ }
101
+ function walkFrom(node, visitor) {
102
+ if (isDual(node)) {
103
+ return;
104
+ }
105
+ if (isUnnestFrom(node)) {
106
+ visitor.visitUnnest?.(node);
107
+ return;
108
+ }
109
+ if (isTableExpr(node)) {
110
+ visitor.visitTableExpr?.(node);
111
+ walk(node.expr.ast, visitor);
112
+ return;
113
+ }
114
+ if (isJoin(node)) {
115
+ visitor.visitJoin?.(node);
116
+ if (node.on !== void 0) {
117
+ walkExpr(node.on, visitor);
118
+ }
119
+ return;
120
+ }
121
+ visitor.visitBaseFrom?.(node);
122
+ }
123
+ function walk(node, visitor) {
124
+ if (typeof node !== "object" || node === null) {
125
+ return;
126
+ }
127
+ const typed = node;
128
+ if (typed["type"] === "select") {
129
+ const sel = node;
130
+ visitor.visitSelect?.(sel);
131
+ for (const withItem of sel.with ?? []) {
132
+ visitor.visitWith?.(withItem);
133
+ walk(withItem.stmt.ast, visitor);
134
+ }
135
+ let fromItems;
136
+ if (Array.isArray(sel.from)) {
137
+ fromItems = sel.from;
138
+ } else if (sel.from !== null) {
139
+ fromItems = [sel.from];
140
+ } else {
141
+ fromItems = [];
142
+ }
143
+ for (const fromItem of fromItems) {
144
+ walkFrom(fromItem, visitor);
145
+ }
146
+ for (const col of sel.columns) {
147
+ walkExpr(col, visitor);
148
+ }
149
+ if (sel.where !== null) {
150
+ walkExpr(sel.where, visitor);
151
+ }
152
+ if (sel._next !== void 0) {
153
+ walk(sel._next, visitor);
154
+ }
155
+ } else {
156
+ walkExpr(node, visitor);
157
+ }
158
+ }
159
+ function extractColumnRefs(expr) {
160
+ const refs = [];
161
+ walkExpr(expr, {
162
+ visitColumnRef(node) {
163
+ refs.push(node);
164
+ }
165
+ });
166
+ return refs;
167
+ }
168
+ function extractJsonExtractPath(expr) {
169
+ let path;
170
+ walkExpr(expr, {
171
+ visitFunction(node) {
172
+ if (path !== void 0) {
173
+ return;
174
+ }
175
+ const fnName = node.name.name[0]?.value;
176
+ if (fnName === "json_extract_scalar" || fnName === "json_extract") {
177
+ const pathArg = node.args?.value[1];
178
+ if (pathArg !== void 0) {
179
+ const val = pathArg.value;
180
+ if (typeof val === "string") {
181
+ path = val;
182
+ }
183
+ }
184
+ log("extractJsonExtractPath, function:", fnName, path);
185
+ }
186
+ }
187
+ });
188
+ return path;
189
+ }
190
+ function extractJsonExtractCalls(expr) {
191
+ const calls = [];
192
+ walkExpr(expr, {
193
+ visitFunction(node) {
194
+ const fnName = node.name.name[0]?.value;
195
+ if (fnName !== "json_extract_scalar" && fnName !== "json_extract") {
196
+ return;
197
+ }
198
+ const sourceArg = node.args?.value[0];
199
+ const pathArg = node.args?.value[1];
200
+ if (sourceArg === void 0 || pathArg === void 0) {
201
+ return;
202
+ }
203
+ const sourceRefs = extractColumnRefs(sourceArg);
204
+ if (sourceRefs.length !== 1) {
205
+ return;
206
+ }
207
+ const [ref] = sourceRefs;
208
+ const path = pathArg.value;
209
+ if (ref === void 0 || typeof path !== "string") {
210
+ return;
211
+ }
212
+ calls.push({ ref, path });
213
+ }
214
+ });
215
+ return calls;
216
+ }
217
+ function extractBracketAccessorPath(expr) {
218
+ let path;
219
+ walkExpr(expr, {
220
+ visitColumnRef(node) {
221
+ if (path !== void 0 || !hasArrayIndex(node)) {
222
+ return;
223
+ }
224
+ const indexValue = node.array_index[0]?.index.value;
225
+ if (typeof indexValue === "string") {
226
+ path = `$["${indexValue}"]`;
227
+ }
228
+ }
229
+ });
230
+ return path;
231
+ }
232
+ function hasFunctionCalls(expr) {
233
+ let found = false;
234
+ walkExpr(expr, {
235
+ visitFunction() {
236
+ found = true;
237
+ },
238
+ visitAggrFunc() {
239
+ found = true;
240
+ }
241
+ });
242
+ return found;
243
+ }
244
+ export {
245
+ extractBracketAccessorPath,
246
+ extractColumnRefs,
247
+ extractJsonExtractCalls,
248
+ extractJsonExtractPath,
249
+ hasArrayIndex,
250
+ hasFunctionCalls,
251
+ isBaseFrom,
252
+ isDual,
253
+ isJoin,
254
+ isTableExpr,
255
+ isUnnestFrom,
256
+ walk
257
+ };
258
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2F0aGVuYS92aXNpdG9yLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQUVBLE9BQU8sV0FBVztBQUVsQixJQUFNLE1BQU0sTUFBTSxnQkFBZ0I7QUFpRTNCLFNBQVMsYUFBYSxNQUFtQztBQUM5RCxTQUFPLE9BQU8sU0FBUyxZQUFZLFNBQVMsUUFBUyxLQUE0QixTQUFTO0FBQzVGO0FBRU8sU0FBUyxPQUFPLE1BQTZCO0FBQ2xELFNBQU8sT0FBTyxTQUFTLFlBQVksU0FBUyxRQUFTLEtBQTRCLFNBQVM7QUFDNUY7QUFFTyxTQUFTLFlBQVksTUFBa0M7QUFDNUQsTUFBSSxPQUFPLFNBQVMsWUFBWSxTQUFTLE1BQU07QUFDN0MsV0FBTztBQUFBLEVBQ1Q7QUFDQSxRQUFNLE9BQVEsS0FBNEI7QUFDMUMsU0FBTyxPQUFPLFNBQVMsWUFBWSxTQUFTLFFBQVEsU0FBUztBQUMvRDtBQUVPLFNBQVMsT0FBTyxNQUE2QjtBQUNsRCxTQUNFLENBQUMsYUFBYSxJQUFJLEtBQ2xCLENBQUMsT0FBTyxJQUFJLEtBQ1osQ0FBQyxZQUFZLElBQUksS0FDakIsT0FBTyxTQUFTLFlBQ2hCLFNBQVMsUUFDVCxVQUFVO0FBRWQ7QUFFTyxTQUFTLFdBQVcsTUFBaUM7QUFDMUQsU0FDRSxDQUFDLGFBQWEsSUFBSSxLQUNsQixDQUFDLE9BQU8sSUFBSSxLQUNaLENBQUMsWUFBWSxJQUFJLEtBQ2pCLENBQUMsT0FBTyxJQUFJLEtBQ1osT0FBTyxTQUFTLFlBQ2hCLFNBQVMsUUFDVCxXQUFXO0FBRWY7QUFFTyxTQUFTLGNBQWMsTUFBaUQ7QUFDN0UsUUFBTSxRQUFRO0FBQ2QsU0FBTyxNQUFNLFFBQVEsTUFBTSxXQUFXLEtBQUssTUFBTSxZQUFZLFNBQVM7QUFDeEU7QUFPQSxTQUFTLFNBQVMsTUFBZSxTQUEyQjtBQUMxRCxNQUFJLE9BQU8sU0FBUyxZQUFZLFNBQVMsTUFBTTtBQUM3QztBQUFBLEVBQ0Y7QUFDQSxRQUFNLFFBQVE7QUFFZCxVQUFRLE1BQU0s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
@@ -20,6 +20,7 @@ import requireServiceCallResponseDeclaration, {
20
20
  import requireAwsConfig, { ruleId as requireAwsConfigRuleId } from "./aws/require-aws-config.mjs";
21
21
  import requireAWSBareBones, { ruleId as requireAWSBareBonesRuleId } from "./aws/require-aws-bare-bones.mjs";
22
22
  import requireConsistentRead, { ruleId as requireConsistentReadRuleId } from "./aws/require-consistent-read.mjs";
23
+ import athena, { ruleId as athenaRuleId } from "./athena/athena.mjs";
23
24
  import filePathComment from "./file-path-comment.mjs";
24
25
  import noCardNumbers from "./no-card-numbers.mjs";
25
26
  import noEnum from "./no-enum.mjs";
@@ -64,7 +65,8 @@ var rules = {
64
65
  [requireFixedServicesImportRuleId]: requireFixedServicesImport,
65
66
  [requireTypeOutOfTypeOnlyImportsRuleId]: requireTypeOutOfTypeOnlyImports,
66
67
  [requireAWSBareBonesRuleId]: requireAWSBareBones,
67
- [requireConsistentReadRuleId]: requireConsistentRead
68
+ [requireConsistentReadRuleId]: requireConsistentRead,
69
+ [athenaRuleId]: athena
68
70
  };
69
71
  var plugin = {
70
72
  rules
@@ -104,7 +106,8 @@ var configs = {
104
106
  [`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: "error",
105
107
  [`@checkdigit/${requireConsistentReadRuleId}`]: "error",
106
108
  [`@checkdigit/${requireAwsConfigRuleId}`]: "error",
107
- [`@checkdigit/${requireAWSBareBonesRuleId}`]: "error"
109
+ [`@checkdigit/${requireAWSBareBonesRuleId}`]: "error",
110
+ [`@checkdigit/${athenaRuleId}`]: "error"
108
111
  }
109
112
  }
110
113
  ],
@@ -142,7 +145,8 @@ var configs = {
142
145
  [`@checkdigit/${requireServiceCallResponseDeclarationRuleId}`]: "off",
143
146
  [`@checkdigit/${requireConsistentReadRuleId}`]: "off",
144
147
  [`@checkdigit/${requireAwsConfigRuleId}`]: "off",
145
- [`@checkdigit/${requireAWSBareBonesRuleId}`]: "off"
148
+ [`@checkdigit/${requireAWSBareBonesRuleId}`]: "off",
149
+ [`@checkdigit/${athenaRuleId}`]: "off"
146
150
  }
147
151
  }
148
152
  ]
@@ -156,4 +160,4 @@ export {
156
160
  index_default as default,
157
161
  default2 as isAwsSdkV3Used
158
162
  };
159
- //# sourceMappingURL=data:application/json;base64,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
163
+ //# sourceMappingURL=data:application/json;base64,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
@@ -60,4 +60,4 @@ export {
60
60
  no_status_code_assert_default as default,
61
61
  ruleId
62
62
  };
63
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25vLXN0YXR1cy1jb2RlLWFzc2VydC50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLGdCQUFnQixtQkFBdUM7QUFDaEUsT0FBTyx5QkFBeUI7QUFFekIsSUFBTSxTQUFTO0FBQ3RCLElBQU0sd0JBQXdCO0FBRTlCLElBQU0sYUFBYSxZQUFZLFlBQVksQ0FBQyxTQUFTLG9CQUFvQixJQUFJLENBQUM7QUFHOUUsSUFBTSx1QkFBdUIsQ0FBQyxRQUFnQztBQUM1RCxVQUFRLElBQUksTUFBTTtBQUFBLElBQ2hCLEtBQUssZUFBZSxrQkFBa0I7QUFDcEMsWUFBTSxTQUFTLElBQUk7QUFDbkIsWUFBTSxXQUFXLElBQUk7QUFDckIsVUFDRSxPQUFPLFNBQVMsZUFBZSxjQUMvQixPQUFPLFNBQVMsaUJBQ2hCLFNBQVMsU0FBUyxlQUFlLFlBQ2pDO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFDQTtBQUFBLElBQ0Y7QUFBQSxJQUNBLEtBQUssZUFBZTtBQUNsQixVQUFJLE9BQU8sSUFBSSxVQUFVLFlBQVksT0FBTyxPQUFPLFdBQVcsRUFBRSxTQUFTLElBQUksS0FBSyxHQUFHO0FBQ25GLGVBQU87QUFBQSxNQUNUO0FBQ0E7QUFBQSxJQUNGLEtBQUssZUFBZTtBQUNsQixhQUFPLHFCQUFxQixJQUFJLElBQUksS0FBSyxxQkFBcUIsSUFBSSxLQUFLO0FBQUEsRUFDM0U7QUFDQSxTQUFPO0FBQ1Q7QUFHQSxJQUFNLHFCQUFxQixDQUFDLFNBQzFCLEtBQUssU0FBUyxlQUFlLGNBQWMsS0FBSyxTQUFTO0FBRzNELElBQU0sMkJBQTJCLENBQUMsU0FDaEMsS0FBSyxTQUFTLGVBQWUsb0JBQzdCLEtBQUssT0FBTyxTQUFTLGVBQWUsY0FDcEMsS0FBSyxPQUFPLFNBQVMsWUFDckIsS0FBSyxTQUFTLFNBQVMsZUFBZTtBQUV4QyxJQUFNLDZCQUE2QixDQUFDLFFBQXVCLFVBQ3hELG1CQUFtQixNQUFNLEtBQUsseUJBQXlCLE1BQU0sTUFBTSxLQUFLLEtBQUssQ0FBQyxRQUFRLHFCQUFxQixHQUFHLENBQUM7QUFFbEgsSUFBTSxPQUEwRCxXQUFXO0FBQUEsRUFDekUsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFFBQVEsQ0FBQztBQUFBLElBQ1QsVUFBVTtBQUFBLE1BQ1IsQ0FBQyxxQkFBcUIsR0FBRztBQUFBLElBQzNCO0FBQUEsRUFDRjtBQUFBLEVBQ0EsZ0JBQWdCLENBQUM7QUFBQSxFQUNqQixPQUFPLFNBQVM7QUFDZCxXQUFPO0FBQUEsTUFDTCxlQUFlLE1BQStCO0FBQzVDLGNBQU0sU0FBUyxLQUFLO0FBQ3BCLFlBQUksMkJBQTJCLFFBQVEsS0FBSyxTQUFTLEdBQUc7QUFDdEQsa0JBQVEsT0FBTztBQUFBLFlBQ2I7QUFBQSxZQUNBLFdBQVc7QUFBQSxVQUNiLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELElBQU8sZ0NBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
63
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25vLXN0YXR1cy1jb2RlLWFzc2VydC50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLGdCQUFnQixtQkFBaUQ7QUFDMUUsT0FBTyx5QkFBeUI7QUFFekIsSUFBTSxTQUFTO0FBQ3RCLElBQU0sd0JBQXdCO0FBRTlCLElBQU0sYUFBYSxZQUFZLFlBQVksQ0FBQyxTQUFTLG9CQUFvQixJQUFJLENBQUM7QUFHOUUsSUFBTSx1QkFBdUIsQ0FBQyxRQUFnQztBQUM1RCxVQUFRLElBQUksTUFBTTtBQUFBLElBQ2hCLEtBQUssZUFBZSxrQkFBa0I7QUFDcEMsWUFBTSxTQUFTLElBQUk7QUFDbkIsWUFBTSxXQUFXLElBQUk7QUFDckIsVUFDRSxPQUFPLFNBQVMsZUFBZSxjQUMvQixPQUFPLFNBQVMsaUJBQ2hCLFNBQVMsU0FBUyxlQUFlLFlBQ2pDO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFDQTtBQUFBLElBQ0Y7QUFBQSxJQUNBLEtBQUssZUFBZTtBQUNsQixVQUFJLE9BQU8sSUFBSSxVQUFVLFlBQVksT0FBTyxPQUFPLFdBQVcsRUFBRSxTQUFTLElBQUksS0FBSyxHQUFHO0FBQ25GLGVBQU87QUFBQSxNQUNUO0FBQ0E7QUFBQSxJQUNGLEtBQUssZUFBZTtBQUNsQixhQUFPLHFCQUFxQixJQUFJLElBQUksS0FBSyxxQkFBcUIsSUFBSSxLQUFLO0FBQUEsRUFDM0U7QUFDQSxTQUFPO0FBQ1Q7QUFHQSxJQUFNLHFCQUFxQixDQUFDLFNBQzFCLEtBQUssU0FBUyxlQUFlLGNBQWMsS0FBSyxTQUFTO0FBRzNELElBQU0sMkJBQTJCLENBQUMsU0FDaEMsS0FBSyxTQUFTLGVBQWUsb0JBQzdCLEtBQUssT0FBTyxTQUFTLGVBQWUsY0FDcEMsS0FBSyxPQUFPLFNBQVMsWUFDckIsS0FBSyxTQUFTLFNBQVMsZUFBZTtBQUV4QyxJQUFNLDZCQUE2QixDQUFDLFFBQXVCLFVBQ3hELG1CQUFtQixNQUFNLEtBQUsseUJBQXlCLE1BQU0sTUFBTSxLQUFLLEtBQUssQ0FBQyxRQUFRLHFCQUFxQixHQUFHLENBQUM7QUFFbEgsSUFBTSxPQUEwRCxXQUFXO0FBQUEsRUFDekUsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFFBQVEsQ0FBQztBQUFBLElBQ1QsVUFBVTtBQUFBLE1BQ1IsQ0FBQyxxQkFBcUIsR0FBRztBQUFBLElBQzNCO0FBQUEsRUFDRjtBQUFBLEVBQ0EsZ0JBQWdCLENBQUM7QUFBQSxFQUNqQixPQUFPLFNBQVM7QUFDZCxXQUFPO0FBQUEsTUFDTCxlQUFlLE1BQStCO0FBQzVDLGNBQU0sU0FBUyxLQUFLO0FBQ3BCLFlBQUksMkJBQTJCLFFBQVEsS0FBSyxTQUFTLEdBQUc7QUFDdEQsa0JBQVEsT0FBTztBQUFBLFlBQ2I7QUFBQSxZQUNBLFdBQVc7QUFBQSxVQUNiLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQztBQUVELElBQU8sZ0NBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,14 @@
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(/"\$ref": ".*\/definitions\//gu, '"$ref": "#/definitions/');
7
+ const json = JSON.parse(adjustedSchemaFileForDeref);
8
+ const deref = await dereference(json);
9
+ await fs.writeFile(`${schemaFileName}.deref.json`, JSON.stringify(deref, null, 2));
10
+ }
11
+ export {
12
+ derefSchema
13
+ };
14
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL29wZW5hcGkvZGVyZWYtc2NoZW1hLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQUVBLFNBQVMsWUFBWSxVQUFVO0FBRS9CLFNBQVMsbUJBQW1CO0FBRTVCLGVBQXNCLFlBQVksZ0JBQXVDO0FBQ3ZFLFFBQU0sYUFBYSxNQUFNLEdBQUcsU0FBUyxHQUFHLGNBQWMsU0FBUyxPQUFPO0FBQ3RFLFFBQU0sNkJBQTZCLFdBQVcsUUFBUSxpQ0FBaUMseUJBQXlCO0FBRWhILFFBQU0sT0FBTyxLQUFLLE1BQU0sMEJBQTBCO0FBQ2xELFFBQU0sUUFBUSxNQUFNLFlBQVksSUFBSTtBQUNwQyxRQUFNLEdBQUcsVUFBVSxHQUFHLGNBQWMsZUFBZSxLQUFLLFVBQVUsT0FBTyxNQUFNLENBQUMsQ0FBQztBQUNuRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,273 @@
1
+ // src/openapi/generate-schema.ts
2
+ import { strict as assert } from "node:assert";
3
+ import { promises as fs } from "node:fs";
4
+ import debug from "debug";
5
+ import { getReasonPhrase } from "http-status-codes";
6
+ import pointer from "json-pointer";
7
+ import jsYaml from "js-yaml";
8
+ import { generateSchemasForService } from "./service-schema-generator.mjs";
9
+ var commandName = "generate-schema";
10
+ var log = debug("openapi-cli:generate-schema");
11
+ var ALL_OPERATION_METHODS = ["get", "put", "post", "head", "trace", "patch", "delete", "options"];
12
+ var JSON_SCHEMA_META_2020_URL = "https://json-schema.org/draft/2020-12/schema";
13
+ var OPENAPI_SCHEMA_DEFINITIONS_REFERENCE_URI_BASE = "#/components/schemas/";
14
+ var SWAGGER_SCHEMA_FILENAME = "swagger.schema.json";
15
+ function isRequestBodyAllowed(method) {
16
+ return ["post", "put", "patch"].includes(method);
17
+ }
18
+ function isReferenceObject(schema) {
19
+ return Object.hasOwn(schema, "$ref");
20
+ }
21
+ function resolve(document, reference) {
22
+ if (!isReferenceObject(reference)) {
23
+ return reference;
24
+ }
25
+ const referencePointer = reference.$ref.slice(1);
26
+ const resolvedReference = pointer.get(document, referencePointer);
27
+ return resolve(document, resolvedReference);
28
+ }
29
+ function getParameters(parameters, document) {
30
+ return parameters.map((parameter) => resolve(document, parameter));
31
+ }
32
+ function getRequestParametersSchema(operation, parameterType, document) {
33
+ if (operation.parameters === void 0) {
34
+ return;
35
+ }
36
+ let parameters = getParameters(operation.parameters, document);
37
+ parameters = parameters.filter((parameter) => parameter.in === parameterType);
38
+ if (parameters.length === 0) {
39
+ return;
40
+ }
41
+ const parametersSchema = Object.fromEntries(
42
+ parameters.map((parameter) => [
43
+ parameterType === "header" ? parameter.name.toLowerCase() : parameter.name,
44
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
45
+ parameter.schema ?? { type: "string" }
46
+ ])
47
+ );
48
+ const requiredParameterNames = parameters.filter((parameter) => parameter.required === true).map((parameter) => parameter.name);
49
+ const schema = {
50
+ type: "object",
51
+ // header parameters can have additional properties, we allow them in the runtime validation
52
+ additionalProperties: parameterType === "header",
53
+ properties: parametersSchema,
54
+ ...requiredParameterNames.length > 0 ? { required: requiredParameterNames } : {}
55
+ };
56
+ return schema;
57
+ }
58
+ function getBodySchema(contents) {
59
+ if (contents === void 0) {
60
+ return void 0;
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;
67
+ }
68
+ function getRequestBodySchema(operation, document) {
69
+ if (!Object.hasOwn(operation, "requestBody")) {
70
+ return {
71
+ isRequestBodyRequired: false,
72
+ requestBodySchema: void 0
73
+ };
74
+ }
75
+ const requestBody = resolve(document, operation.requestBody);
76
+ return {
77
+ isRequestBodyRequired: requestBody?.required,
78
+ requestBodySchema: getBodySchema(requestBody?.content)
79
+ };
80
+ }
81
+ function getRequestContextSchema(method, operation, operationId, document, apiSchemasBaseUri) {
82
+ const requestPathParametersSchema = getRequestParametersSchema(operation, "path", document);
83
+ const requestQueryParametersSchema = getRequestParametersSchema(operation, "query", document);
84
+ const requestHeadersSchema = getRequestParametersSchema(operation, "header", document);
85
+ const { requestBodySchema, isRequestBodyRequired } = getRequestBodySchema(operation, document);
86
+ if (requestBodySchema !== void 0 && !isRequestBodyAllowed(method)) {
87
+ throw new Error(`Request body is not allowed for ${method} method`);
88
+ }
89
+ const responseContextSchemaName = `${operationId}RequestContext`;
90
+ const requestContextSchema = {
91
+ $schema: JSON_SCHEMA_META_2020_URL,
92
+ $id: `${apiSchemasBaseUri}/${responseContextSchemaName}`,
93
+ type: "object",
94
+ properties: {
95
+ ...requestPathParametersSchema ? { params: requestPathParametersSchema } : {},
96
+ ...requestQueryParametersSchema ? { params: requestQueryParametersSchema } : {},
97
+ headers: requestHeadersSchema ?? { type: "object", additionalProperties: true },
98
+ ...requestBodySchema ? { body: requestBodySchema } : {}
99
+ },
100
+ required: [
101
+ ...requestPathParametersSchema?.required ? ["params"] : [],
102
+ ...requestQueryParametersSchema?.required ? ["query"] : [],
103
+ ...requestHeadersSchema?.required ? ["headers"] : [],
104
+ ...isRequestBodyRequired === true ? ["body"] : []
105
+ ],
106
+ additionalProperties: false
107
+ };
108
+ return requestContextSchema;
109
+ }
110
+ function getResponseReason(status) {
111
+ return status === "default" ? `Default` : getReasonPhrase(status).replaceAll(/\s/gu, "");
112
+ }
113
+ function getResponseBodySchema(response) {
114
+ return getBodySchema(response.content);
115
+ }
116
+ function getResponseHeadersSchema(headers, document) {
117
+ if (headers === void 0 || Object.keys(headers).length === 0) {
118
+ return void 0;
119
+ }
120
+ const resolvedHeaders = Object.fromEntries(
121
+ Object.entries(headers).map(([name, header]) => [name.toLowerCase(), resolve(document, header)])
122
+ );
123
+ 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
+ ])
129
+ );
130
+ const requiredHeaderNames = Object.entries(resolvedHeaders).filter(([_name, header]) => header.required === true).map(([name]) => name);
131
+ return {
132
+ type: "object",
133
+ properties: resolvedHeaderSchemas,
134
+ ...requiredHeaderNames.length === 0 ? {} : { required: requiredHeaderNames }
135
+ };
136
+ }
137
+ function getResponseSchema(status, response, document, apiSchemasBaseUri, operationId) {
138
+ const resolvedResponse = resolve(document, response);
139
+ const responseBodySchema = getResponseBodySchema(resolvedResponse);
140
+ const responseHeadersSchema = getResponseHeadersSchema(resolvedResponse.headers, document);
141
+ const schemaName = `${operationId}Response${getResponseReason(status)}`;
142
+ return {
143
+ $schema: JSON_SCHEMA_META_2020_URL,
144
+ $id: `${apiSchemasBaseUri}/${schemaName}`,
145
+ type: "object",
146
+ properties: {
147
+ headers: responseHeadersSchema ?? { type: "object", additionalProperties: true },
148
+ ...responseBodySchema ? { body: responseBodySchema } : {}
149
+ },
150
+ required: [
151
+ ...responseHeadersSchema?.required !== void 0 && responseHeadersSchema.required.length > 0 ? ["headers"] : [],
152
+ ...responseBodySchema ? ["body"] : []
153
+ ],
154
+ additionalProperties: false
155
+ };
156
+ }
157
+ function getResponseContextSchemas(operation, operationId, document, apiSchemasBaseUri) {
158
+ assert.ok(operation.responses !== void 0, "Operation responses must be defined");
159
+ return Object.fromEntries(
160
+ Object.entries(operation.responses).map(([status, response]) => [
161
+ status.toLowerCase(),
162
+ getResponseSchema(status.toLowerCase(), response, document, apiSchemasBaseUri, operationId)
163
+ ])
164
+ );
165
+ }
166
+ function getOperationId(path, method, operation, operationIds) {
167
+ const operationIdBase = operation.operationId ?? `${path}-${method}`;
168
+ const parts = operationIdBase.split(/[-=/]/u);
169
+ const operationId = parts.filter((part) => part.trim() !== "" && !/\{.*\}/u.test(part)).map((part) => `${part[0]?.toUpperCase() ?? ""}${part.slice(1)}`).join("");
170
+ if (!operationIds.has(operationId)) {
171
+ return operationId;
172
+ }
173
+ let operationIdIndex = 1;
174
+ while (operationIds.has(`${operationId}${operationIdIndex}`)) {
175
+ operationIdIndex += 1;
176
+ }
177
+ return `${operationId}${operationIdIndex}`;
178
+ }
179
+ function updateOpenapiSchemaDefinitionsReferences(value, relativeSchemaDefinitionReferenceUri, key) {
180
+ if (typeof value === "string" && key === "$ref" && value.startsWith(OPENAPI_SCHEMA_DEFINITIONS_REFERENCE_URI_BASE)) {
181
+ return value.replace(OPENAPI_SCHEMA_DEFINITIONS_REFERENCE_URI_BASE, relativeSchemaDefinitionReferenceUri);
182
+ }
183
+ if (Array.isArray(value)) {
184
+ return value.map((item) => updateOpenapiSchemaDefinitionsReferences(item, relativeSchemaDefinitionReferenceUri));
185
+ }
186
+ if (typeof value === "object" && value !== null) {
187
+ return Object.fromEntries(
188
+ Object.entries(value).map(([childKey, childValue]) => [
189
+ childKey,
190
+ updateOpenapiSchemaDefinitionsReferences(childValue, relativeSchemaDefinitionReferenceUri, childKey)
191
+ ])
192
+ );
193
+ }
194
+ return value;
195
+ }
196
+ function buildApiSchemaFromDocument(document, organization, serviceName) {
197
+ if (document.paths === void 0) {
198
+ return null;
199
+ }
200
+ const serverUri = document.servers?.[0]?.url;
201
+ if (serverUri === void 0) {
202
+ return null;
203
+ }
204
+ const serverPathname = serverUri.startsWith("http") ? new URL(serverUri).pathname : serverUri;
205
+ const endpointSchemasBaseUri = `https://${serviceName}.${organization}${serverPathname}/schemas`;
206
+ const apiSchemasBaseUri = `${endpointSchemasBaseUri}/api`;
207
+ const apiSchemas = {};
208
+ const allSchemas = { apis: apiSchemas };
209
+ const operationIds = /* @__PURE__ */ new Set();
210
+ for (const [path, pathItems] of Object.entries(document.paths)) {
211
+ const koaPath = path.replaceAll(/\{([^}]+)\}/gu, ":$1");
212
+ const pathSchemas = {};
213
+ apiSchemas[`${serverPathname}${koaPath}`] = pathSchemas;
214
+ for (const method of ALL_OPERATION_METHODS) {
215
+ const operation = pathItems?.[method];
216
+ if (operation !== void 0) {
217
+ const operationId = getOperationId(path, method, operation, operationIds);
218
+ operationIds.add(operationId);
219
+ pathSchemas[method] = {
220
+ request: getRequestContextSchema(method, operation, operationId, document, apiSchemasBaseUri),
221
+ responses: getResponseContextSchemas(operation, operationId, document, apiSchemasBaseUri)
222
+ };
223
+ }
224
+ }
225
+ }
226
+ if (document.components?.schemas !== void 0) {
227
+ allSchemas.definitions = Object.fromEntries(
228
+ Object.entries(document.components.schemas).map(([name, schema]) => [
229
+ name,
230
+ { $schema: JSON_SCHEMA_META_2020_URL, $id: `${endpointSchemasBaseUri}/definitions/${name}`, ...schema }
231
+ ])
232
+ );
233
+ }
234
+ const relativeSchemaDefinitionReferenceUri = `${serverPathname}/schemas/definitions/`;
235
+ return updateOpenapiSchemaDefinitionsReferences(
236
+ structuredClone(allSchemas),
237
+ relativeSchemaDefinitionReferenceUri
238
+ );
239
+ }
240
+ function buildApiSchemaFromYaml(yamlContent, organization, serviceName) {
241
+ const document = jsYaml.load(yamlContent);
242
+ return buildApiSchemaFromDocument(document, organization, serviceName);
243
+ }
244
+ async function generateEndpointSchemas(organization, serviceName, root, endpoint) {
245
+ const documentContents = await fs.readFile(`${root}/${endpoint}/swagger.yml`, "utf8");
246
+ const document = await jsYaml.load(documentContents);
247
+ const normalizedApiSchemas = buildApiSchemaFromDocument(document, organization, serviceName);
248
+ if (normalizedApiSchemas === null) {
249
+ return;
250
+ }
251
+ const swaggerSchemaFilename = `${root}/${endpoint}/${SWAGGER_SCHEMA_FILENAME}`;
252
+ await fs.writeFile(swaggerSchemaFilename, JSON.stringify(normalizedApiSchemas, void 0, 2));
253
+ log(`Generated schema ${swaggerSchemaFilename}`);
254
+ }
255
+ async function generateSchemas() {
256
+ const serviceJsonPackageFile = await fs.readFile(`./package.json`, "utf8");
257
+ const packageJson = JSON.parse(serviceJsonPackageFile);
258
+ const [organization, serviceName] = packageJson.name.slice(1).split("/");
259
+ assert.ok(organization !== void 0 && serviceName !== void 0, "Invalid package name");
260
+ await Promise.all(
261
+ packageJson.service.api.endpoints.map(
262
+ (endpoint) => generateEndpointSchemas(organization, serviceName, packageJson.service.api.root, endpoint)
263
+ )
264
+ );
265
+ }
266
+ export {
267
+ SWAGGER_SCHEMA_FILENAME,
268
+ buildApiSchemaFromYaml,
269
+ commandName,
270
+ generateSchemas,
271
+ generateSchemasForService
272
+ };
273
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL29wZW5hcGkvZ2VuZXJhdGUtc2NoZW1hLnRzIl0sCiAgIm1hcHBpbmdzIjogIjtBQUVBLFNBQVMsVUFBVSxjQUFjO0FBQ2pDLFNBQVMsWUFBWSxVQUFVO0FBRS9CLE9BQU8sV0FBVztBQUNsQixTQUFTLHVCQUF1QjtBQUNoQyxPQUFPLGFBQWE7QUFDcEIsT0FBTyxZQUFZO0FBS25CLFNBQVMsaUNBQWlDO0FBRG5DLElBQU0sY0FBYztBQUczQixJQUFNLE1BQU0sTUFBTSw2QkFBNkI7QUFFL0MsSUFBTSx3QkFBd0IsQ0FBQyxPQUFPLE9BQU8sUUFBUSxRQUFRLFNBQVMsU0FBUyxVQUFVLFNBQVM7QUFDbEcsSUFBTSw0QkFBNEI7QUFDbEMsSUFBTSxnREFBZ0Q7QUFDL0MsSUFBTSwwQkFBMEI7QUFrQ3ZDLFNBQVMscUJBQXFCLFFBQXlCO0FBQ3JELFNBQU8sQ0FBQyxRQUFRLE9BQU8sT0FBTyxFQUFFLFNBQVMsTUFBTTtBQUNqRDtBQUVBLFNBQVMsa0JBQWtCLFFBQWdEO0FBQ3pFLFNBQU8sT0FBTyxPQUFPLFFBQStCLE1BQU07QUFDNUQ7QUFFQSxTQUFTLFFBQVcsVUFBd0IsV0FBdUM7QUFDakYsTUFBSSxDQUFDLGtCQUFrQixTQUFTLEdBQUc7QUFDakMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLG1CQUFtQixVQUFVLEtBQUssTUFBTSxDQUFDO0FBQy9DLFFBQU0sb0JBQW9CLFFBQVEsSUFBSSxVQUFVLGdCQUFnQjtBQUNoRSxTQUFPLFFBQVEsVUFBVSxpQkFBaUI7QUFDNUM7QUFFQSxTQUFTLGNBQ1AsWUFDQSxVQUN1QjtBQUN2QixTQUFPLFdBQVcsSUFBSSxDQUFDLGNBQWMsUUFBUSxVQUFVLFNBQVMsQ0FBQztBQUNuRTtBQUVBLFNBQVMsMkJBQ1AsV0FDQSxlQUNBLFVBQzhCO0FBQzlCLE1BQUksVUFBVSxlQUFlLFFBQVc7QUFDdEM7QUFBQSxFQUNGO0FBRUEsTUFBSSxhQUFhLGNBQWMsVUFBVSxZQUFZLFFBQVE7QUFD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