apollo-conn-gen 0.4.2 → 0.4.4

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 (55) hide show
  1. package/dist/cli/oas.js +2 -2
  2. package/dist/cli/oas.js.map +1 -1
  3. package/dist/oas/generator/typesCollector.d.ts +9 -0
  4. package/dist/oas/generator/typesCollector.js +147 -0
  5. package/dist/oas/generator/typesCollector.js.map +1 -0
  6. package/dist/oas/io/writer.d.ts +2 -2
  7. package/dist/oas/io/writer.js +14 -74
  8. package/dist/oas/io/writer.js.map +1 -1
  9. package/dist/oas/nodes/circularRef.js +0 -1
  10. package/dist/oas/nodes/circularRef.js.map +1 -1
  11. package/dist/oas/nodes/comp.d.ts +0 -1
  12. package/dist/oas/nodes/comp.js +9 -21
  13. package/dist/oas/nodes/comp.js.map +1 -1
  14. package/dist/oas/nodes/obj.d.ts +2 -0
  15. package/dist/oas/nodes/obj.js +15 -2
  16. package/dist/oas/nodes/obj.js.map +1 -1
  17. package/dist/oas/nodes/propArray.d.ts +2 -1
  18. package/dist/oas/nodes/propArray.js +17 -9
  19. package/dist/oas/nodes/propArray.js.map +1 -1
  20. package/dist/oas/nodes/propScalar.js +7 -3
  21. package/dist/oas/nodes/propScalar.js.map +1 -1
  22. package/dist/oas/nodes/typeUtils.d.ts +3 -0
  23. package/dist/oas/nodes/typeUtils.js +16 -2
  24. package/dist/oas/nodes/typeUtils.js.map +1 -1
  25. package/dist/oas/nodes/union.d.ts +3 -2
  26. package/dist/oas/nodes/union.js +60 -22
  27. package/dist/oas/nodes/union.js.map +1 -1
  28. package/dist/oas/oasContext.d.ts +2 -0
  29. package/dist/oas/oasContext.js +11 -0
  30. package/dist/oas/oasContext.js.map +1 -1
  31. package/dist/oas/oasGen.d.ts +3 -0
  32. package/dist/oas/oasGen.js +15 -1
  33. package/dist/oas/oasGen.js.map +1 -1
  34. package/dist/oas/utils/naming.d.ts +2 -1
  35. package/dist/oas/utils/naming.js +12 -5
  36. package/dist/oas/utils/naming.js.map +1 -1
  37. package/dist/oas/visitor/GeneratorVisitor.d.ts +39 -0
  38. package/dist/oas/visitor/GeneratorVisitor.js +310 -0
  39. package/dist/oas/visitor/GeneratorVisitor.js.map +1 -0
  40. package/dist/oas/visitor/NodeVisitor.d.ts +30 -0
  41. package/dist/oas/visitor/NodeVisitor.js +2 -0
  42. package/dist/oas/visitor/NodeVisitor.js.map +1 -0
  43. package/dist/oas/visitor/example.d.ts +17 -0
  44. package/dist/oas/visitor/example.js +28 -0
  45. package/dist/oas/visitor/example.js.map +1 -0
  46. package/dist/oas/visitor/index.d.ts +2 -0
  47. package/dist/oas/visitor/index.js +2 -0
  48. package/dist/oas/visitor/index.js.map +1 -0
  49. package/dist/tests/runners.js +2 -1
  50. package/dist/tests/runners.js.map +1 -1
  51. package/dist/tsconfig.tsbuildinfo +1 -1
  52. package/package.json +1 -1
  53. package/dist/oas/io/pathCollector.d.ts +0 -11
  54. package/dist/oas/io/pathCollector.js +0 -95
  55. package/dist/oas/io/pathCollector.js.map +0 -1
@@ -0,0 +1,310 @@
1
+ import { trace } from '../log/trace.js';
2
+ /**
3
+ * Implementation of the Visitor pattern for node generation
4
+ */
5
+ export class GeneratorVisitor {
6
+ /**
7
+ * Generate output for a node
8
+ */
9
+ generate(node, context, writer, selection) {
10
+ this.visit(node, context, writer, selection);
11
+ }
12
+ // Basic types
13
+ visitArray(node, context, writer, selection) {
14
+ context.enter(node);
15
+ trace(context, '-> [array::generate]', `-> in: ${node.name}`);
16
+ writer.write('[');
17
+ if (node.itemsType) {
18
+ this.visit(node.itemsType, context, writer, selection);
19
+ }
20
+ writer.write(']');
21
+ trace(context, '<- [array::generate]', `-> out: ${node.name}`);
22
+ context.leave(node);
23
+ }
24
+ visitCircularRef(node, context, writer, selection) {
25
+ context.enter(node);
26
+ trace(context, '-> [circularRef::generate]', `-> in: ${node.name}`);
27
+ writer.write(node.name);
28
+ trace(context, '<- [circularRef::generate]', `-> out: ${node.name}`);
29
+ context.leave(node);
30
+ }
31
+ visitComposed(node, context, writer, selection) {
32
+ context.enter(node);
33
+ trace(context, '-> [composed::generate]', `-> in: ${node.name}`);
34
+ writer.write('{');
35
+ const props = Array.from(node.props.values());
36
+ for (let i = 0; i < props.length; i++) {
37
+ this.visit(props[i], context, writer, selection);
38
+ if (i < props.length - 1) {
39
+ writer.write(', ');
40
+ }
41
+ }
42
+ writer.write('}');
43
+ trace(context, '<- [composed::generate]', `-> out: ${node.name}`);
44
+ context.leave(node);
45
+ }
46
+ visitEnum(node, context, writer, selection) {
47
+ context.enter(node);
48
+ trace(context, '-> [enum::generate]', `-> in: ${node.name}`);
49
+ writer.write(node.name);
50
+ trace(context, '<- [enum::generate]', `-> out: ${node.name}`);
51
+ context.leave(node);
52
+ }
53
+ visitObject(node, context, writer, selection) {
54
+ context.enter(node);
55
+ trace(context, '-> [object::generate]', `-> in: ${node.name}`);
56
+ writer.write('{');
57
+ const props = Array.from(node.props.values());
58
+ for (let i = 0; i < props.length; i++) {
59
+ this.visit(props[i], context, writer, selection);
60
+ if (i < props.length - 1) {
61
+ writer.write(', ');
62
+ }
63
+ }
64
+ writer.write('}');
65
+ trace(context, '<- [object::generate]', `-> out: ${node.name}`);
66
+ context.leave(node);
67
+ }
68
+ visitResponse(node, context, writer, selection) {
69
+ context.enter(node);
70
+ trace(context, '-> [response::generate]', `-> in: ${node.name}`);
71
+ if (node.schema) {
72
+ writer.write(JSON.stringify(node.schema));
73
+ }
74
+ trace(context, '<- [response::generate]', `-> out: ${node.name}`);
75
+ context.leave(node);
76
+ }
77
+ visitScalar(node, context, writer, selection) {
78
+ context.enter(node);
79
+ trace(context, '-> [scalar::generate]', `-> in: ${node.name}`);
80
+ writer.write(node.name);
81
+ trace(context, '<- [scalar::generate]', `-> out: ${node.name}`);
82
+ context.leave(node);
83
+ }
84
+ visitUnion(node, context, writer, selection) {
85
+ context.enter(node);
86
+ trace(context, '-> [union::generate]', `-> in: ${node.name}`);
87
+ const children = node.children || [];
88
+ for (let i = 0; i < children.length; i++) {
89
+ this.visit(children[i], context, writer, selection);
90
+ if (i < children.length - 1) {
91
+ writer.write(' | ');
92
+ }
93
+ }
94
+ trace(context, '<- [union::generate]', `-> out: ${node.name}`);
95
+ context.leave(node);
96
+ }
97
+ // Operations
98
+ visitGet(node, context, writer, selection) {
99
+ context.enter(node);
100
+ trace(context, '-> [get::generate]', `-> in: ${node.name}`);
101
+ // Implementation depends on specific needs
102
+ trace(context, '<- [get::generate]', `-> out: ${node.name}`);
103
+ context.leave(node);
104
+ }
105
+ visitPost(node, context, writer, selection) {
106
+ context.enter(node);
107
+ trace(context, '-> [post::generate]', `-> in: ${node.name}`);
108
+ // Implementation depends on specific needs
109
+ trace(context, '<- [post::generate]', `-> out: ${node.name}`);
110
+ context.leave(node);
111
+ }
112
+ visitPut(node, context, writer, selection) {
113
+ context.enter(node);
114
+ trace(context, '-> [put::generate]', `-> in: ${node.name}`);
115
+ // Implementation depends on specific needs
116
+ trace(context, '<- [put::generate]', `-> out: ${node.name}`);
117
+ context.leave(node);
118
+ }
119
+ visitPatch(node, context, writer, selection) {
120
+ context.enter(node);
121
+ trace(context, '-> [patch::generate]', `-> in: ${node.name}`);
122
+ // Implementation depends on specific needs
123
+ trace(context, '<- [patch::generate]', `-> out: ${node.name}`);
124
+ context.leave(node);
125
+ }
126
+ visitDelete(node, context, writer, selection) {
127
+ context.enter(node);
128
+ trace(context, '-> [delete::generate]', `-> in: ${node.name}`);
129
+ // Implementation depends on specific needs
130
+ trace(context, '<- [delete::generate]', `-> out: ${node.name}`);
131
+ context.leave(node);
132
+ }
133
+ visitBody(node, context, writer, selection) {
134
+ context.enter(node);
135
+ trace(context, '-> [body::generate]', `-> in: ${node.name}`);
136
+ if (node.schema) {
137
+ writer.write(JSON.stringify(node.schema));
138
+ }
139
+ trace(context, '<- [body::generate]', `-> out: ${node.name}`);
140
+ context.leave(node);
141
+ }
142
+ // Properties
143
+ visitParam(node, context, writer, selection) {
144
+ context.enter(node);
145
+ trace(context, '-> [param::generate]', `-> in: ${node.name}`);
146
+ writer.write(node.name);
147
+ writer.write(': ');
148
+ if (node.schema) {
149
+ writer.write(JSON.stringify(node.schema));
150
+ }
151
+ trace(context, '<- [param::generate]', `-> out: ${node.name}`);
152
+ context.leave(node);
153
+ }
154
+ visitProp(node, context, writer, selection) {
155
+ context.enter(node);
156
+ trace(context, '-> [prop::generate]', `-> in: ${node.name}`);
157
+ writer.write(node.name);
158
+ writer.write(': ');
159
+ if (node.children && node.children.length > 0) {
160
+ this.visit(node.children[0], context, writer, selection);
161
+ }
162
+ trace(context, '<- [prop::generate]', `-> out: ${node.name}`);
163
+ context.leave(node);
164
+ }
165
+ visitPropArray(node, context, writer, selection) {
166
+ context.enter(node);
167
+ trace(context, '-> [propArray::generate]', `-> in: ${node.name}`);
168
+ writer.write(node.name);
169
+ writer.write(': ');
170
+ if (node.children && node.children.length > 0) {
171
+ this.visit(node.children[0], context, writer, selection);
172
+ }
173
+ trace(context, '<- [propArray::generate]', `-> out: ${node.name}`);
174
+ context.leave(node);
175
+ }
176
+ visitPropCircRef(node, context, writer, selection) {
177
+ context.enter(node);
178
+ trace(context, '-> [propCircRef::generate]', `-> in: ${node.name}`);
179
+ writer.write(node.name);
180
+ writer.write(': ');
181
+ if (node.children && node.children.length > 0) {
182
+ this.visit(node.children[0], context, writer, selection);
183
+ }
184
+ trace(context, '<- [propCircRef::generate]', `-> out: ${node.name}`);
185
+ context.leave(node);
186
+ }
187
+ visitPropComp(node, context, writer, selection) {
188
+ context.enter(node);
189
+ trace(context, '-> [propComp::generate]', `-> in: ${node.name}`);
190
+ writer.write(node.name);
191
+ writer.write(': ');
192
+ if (node.children && node.children.length > 0) {
193
+ this.visit(node.children[0], context, writer, selection);
194
+ }
195
+ trace(context, '<- [propComp::generate]', `-> out: ${node.name}`);
196
+ context.leave(node);
197
+ }
198
+ visitPropEnum(node, context, writer, selection) {
199
+ context.enter(node);
200
+ trace(context, '-> [propEnum::generate]', `-> in: ${node.name}`);
201
+ writer.write(node.name);
202
+ writer.write(': ');
203
+ if (node.children && node.children.length > 0) {
204
+ this.visit(node.children[0], context, writer, selection);
205
+ }
206
+ trace(context, '<- [propEnum::generate]', `-> out: ${node.name}`);
207
+ context.leave(node);
208
+ }
209
+ visitPropObject(node, context, writer, selection) {
210
+ context.enter(node);
211
+ trace(context, '-> [propObject::generate]', `-> in: ${node.name}`);
212
+ writer.write(node.name);
213
+ writer.write(': ');
214
+ if (node.children && node.children.length > 0) {
215
+ this.visit(node.children[0], context, writer, selection);
216
+ }
217
+ trace(context, '<- [propObject::generate]', `-> out: ${node.name}`);
218
+ context.leave(node);
219
+ }
220
+ visitPropScalar(node, context, writer, selection) {
221
+ context.enter(node);
222
+ trace(context, '-> [propScalar::generate]', `-> in: ${node.name}`);
223
+ writer.write(node.name);
224
+ writer.write(': ');
225
+ if (node.children && node.children.length > 0) {
226
+ this.visit(node.children[0], context, writer, selection);
227
+ }
228
+ trace(context, '<- [propScalar::generate]', `-> out: ${node.name}`);
229
+ context.leave(node);
230
+ }
231
+ /**
232
+ * Visit a node by dispatching to the appropriate method based on its id
233
+ */
234
+ visit(node, context, writer, selection) {
235
+ const id = node.id;
236
+ if (id.startsWith('array:')) {
237
+ this.visitArray(node, context, writer, selection);
238
+ }
239
+ else if (id.startsWith('circularRef:')) {
240
+ this.visitCircularRef(node, context, writer, selection);
241
+ }
242
+ else if (id.startsWith('comp:')) {
243
+ this.visitComposed(node, context, writer, selection);
244
+ }
245
+ else if (id.startsWith('en:')) {
246
+ this.visitEnum(node, context, writer, selection);
247
+ }
248
+ else if (id.startsWith('obj:')) {
249
+ this.visitObject(node, context, writer, selection);
250
+ }
251
+ else if (id.startsWith('res:')) {
252
+ this.visitResponse(node, context, writer, selection);
253
+ }
254
+ else if (id.startsWith('scalar:')) {
255
+ this.visitScalar(node, context, writer, selection);
256
+ }
257
+ else if (id.startsWith('union:')) {
258
+ this.visitUnion(node, context, writer, selection);
259
+ }
260
+ else if (id.startsWith('get:')) {
261
+ this.visitGet(node, context, writer, selection);
262
+ }
263
+ else if (id.startsWith('post:')) {
264
+ this.visitPost(node, context, writer, selection);
265
+ }
266
+ else if (id.startsWith('put:')) {
267
+ this.visitPut(node, context, writer, selection);
268
+ }
269
+ else if (id.startsWith('patch:')) {
270
+ this.visitPatch(node, context, writer, selection);
271
+ }
272
+ else if (id.startsWith('delete:')) {
273
+ this.visitDelete(node, context, writer, selection);
274
+ }
275
+ else if (id.startsWith('body:')) {
276
+ this.visitBody(node, context, writer, selection);
277
+ }
278
+ else if (id.startsWith('param:')) {
279
+ this.visitParam(node, context, writer, selection);
280
+ }
281
+ else if (id.startsWith('prop:')) {
282
+ // Check for more specific prop types
283
+ if (id.includes('array')) {
284
+ this.visitPropArray(node, context, writer, selection);
285
+ }
286
+ else if (id.includes('circRef')) {
287
+ this.visitPropCircRef(node, context, writer, selection);
288
+ }
289
+ else if (id.includes('comp')) {
290
+ this.visitPropComp(node, context, writer, selection);
291
+ }
292
+ else if (id.includes('enum')) {
293
+ this.visitPropEnum(node, context, writer, selection);
294
+ }
295
+ else if (id.includes('obj')) {
296
+ this.visitPropObject(node, context, writer, selection);
297
+ }
298
+ else if (id.includes('scalar')) {
299
+ this.visitPropScalar(node, context, writer, selection);
300
+ }
301
+ else {
302
+ this.visitProp(node, context, writer, selection);
303
+ }
304
+ }
305
+ else {
306
+ console.warn(`Unknown node type from id ${id}: ${node?.constructor?.name || typeof node}`);
307
+ }
308
+ }
309
+ }
310
+ //# sourceMappingURL=GeneratorVisitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GeneratorVisitor.js","sourceRoot":"","sources":["../../../src/oas/visitor/GeneratorVisitor.ts"],"names":[],"mappings":"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","sourcesContent":["import { OasContext } from '../oasContext.js';\nimport { Writer } from '../io/writer.js';\nimport {\n Arr,\n CircularRef,\n Composed,\n En,\n Obj,\n Param,\n Prop,\n PropArray,\n PropCircRef,\n PropComp,\n PropEn,\n PropObj,\n PropScalar,\n Res,\n Scalar,\n Union,\n Get,\n Post,\n Put,\n Patch,\n Delete,\n Body,\n IType,\n} from '../nodes/internal.js';\nimport { NodeVisitor } from './NodeVisitor.js';\nimport { trace } from '../log/trace.js';\n\n/**\n * Implementation of the Visitor pattern for node generation\n */\nexport class GeneratorVisitor implements NodeVisitor {\n /**\n * Generate output for a node\n */\n generate(node: IType, context: OasContext, writer: Writer, selection: string[]): void {\n this.visit(node, context, writer, selection);\n }\n\n // Basic types\n visitArray(node: Arr, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [array::generate]', `-> in: ${node.name}`);\n\n writer.write('[');\n if (node.itemsType) {\n this.visit(node.itemsType, context, writer, selection);\n }\n writer.write(']');\n\n trace(context, '<- [array::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitCircularRef(node: CircularRef, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [circularRef::generate]', `-> in: ${node.name}`);\n\n writer.write(node.name);\n\n trace(context, '<- [circularRef::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitComposed(node: Composed, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [composed::generate]', `-> in: ${node.name}`);\n\n writer.write('{');\n\n const props = Array.from(node.props.values());\n for (let i = 0; i < props.length; i++) {\n this.visit(props[i], context, writer, selection);\n if (i < props.length - 1) {\n writer.write(', ');\n }\n }\n\n writer.write('}');\n\n trace(context, '<- [composed::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitEnum(node: En, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [enum::generate]', `-> in: ${node.name}`);\n\n writer.write(node.name);\n\n trace(context, '<- [enum::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitObject(node: Obj, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [object::generate]', `-> in: ${node.name}`);\n\n writer.write('{');\n\n const props = Array.from(node.props.values());\n for (let i = 0; i < props.length; i++) {\n this.visit(props[i], context, writer, selection);\n if (i < props.length - 1) {\n writer.write(', ');\n }\n }\n\n writer.write('}');\n\n trace(context, '<- [object::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitResponse(node: Res, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [response::generate]', `-> in: ${node.name}`);\n\n if (node.schema) {\n writer.write(JSON.stringify(node.schema));\n }\n\n trace(context, '<- [response::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitScalar(node: Scalar, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [scalar::generate]', `-> in: ${node.name}`);\n\n writer.write(node.name);\n\n trace(context, '<- [scalar::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitUnion(node: Union, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [union::generate]', `-> in: ${node.name}`);\n\n const children = node.children || [];\n for (let i = 0; i < children.length; i++) {\n this.visit(children[i], context, writer, selection);\n if (i < children.length - 1) {\n writer.write(' | ');\n }\n }\n\n trace(context, '<- [union::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n // Operations\n visitGet(node: Get, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [get::generate]', `-> in: ${node.name}`);\n\n // Implementation depends on specific needs\n\n trace(context, '<- [get::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitPost(node: Post, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [post::generate]', `-> in: ${node.name}`);\n\n // Implementation depends on specific needs\n\n trace(context, '<- [post::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitPut(node: Put, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [put::generate]', `-> in: ${node.name}`);\n\n // Implementation depends on specific needs\n\n trace(context, '<- [put::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitPatch(node: Patch, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [patch::generate]', `-> in: ${node.name}`);\n\n // Implementation depends on specific needs\n\n trace(context, '<- [patch::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitDelete(node: Delete, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [delete::generate]', `-> in: ${node.name}`);\n\n // Implementation depends on specific needs\n\n trace(context, '<- [delete::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitBody(node: Body, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [body::generate]', `-> in: ${node.name}`);\n\n if (node.schema) {\n writer.write(JSON.stringify(node.schema));\n }\n\n trace(context, '<- [body::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n // Properties\n visitParam(node: Param, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [param::generate]', `-> in: ${node.name}`);\n\n writer.write(node.name);\n writer.write(': ');\n\n if (node.schema) {\n writer.write(JSON.stringify(node.schema));\n }\n\n trace(context, '<- [param::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitProp(node: Prop, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [prop::generate]', `-> in: ${node.name}`);\n\n writer.write(node.name);\n writer.write(': ');\n\n if (node.children && node.children.length > 0) {\n this.visit(node.children[0], context, writer, selection);\n }\n\n trace(context, '<- [prop::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitPropArray(node: PropArray, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [propArray::generate]', `-> in: ${node.name}`);\n\n writer.write(node.name);\n writer.write(': ');\n\n if (node.children && node.children.length > 0) {\n this.visit(node.children[0], context, writer, selection);\n }\n\n trace(context, '<- [propArray::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitPropCircRef(node: PropCircRef, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [propCircRef::generate]', `-> in: ${node.name}`);\n\n writer.write(node.name);\n writer.write(': ');\n\n if (node.children && node.children.length > 0) {\n this.visit(node.children[0], context, writer, selection);\n }\n\n trace(context, '<- [propCircRef::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitPropComp(node: PropComp, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [propComp::generate]', `-> in: ${node.name}`);\n\n writer.write(node.name);\n writer.write(': ');\n\n if (node.children && node.children.length > 0) {\n this.visit(node.children[0], context, writer, selection);\n }\n\n trace(context, '<- [propComp::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitPropEnum(node: PropEn, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [propEnum::generate]', `-> in: ${node.name}`);\n\n writer.write(node.name);\n writer.write(': ');\n\n if (node.children && node.children.length > 0) {\n this.visit(node.children[0], context, writer, selection);\n }\n\n trace(context, '<- [propEnum::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitPropObject(node: PropObj, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [propObject::generate]', `-> in: ${node.name}`);\n\n writer.write(node.name);\n writer.write(': ');\n\n if (node.children && node.children.length > 0) {\n this.visit(node.children[0], context, writer, selection);\n }\n\n trace(context, '<- [propObject::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n visitPropScalar(node: PropScalar, context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(node);\n trace(context, '-> [propScalar::generate]', `-> in: ${node.name}`);\n\n writer.write(node.name);\n writer.write(': ');\n\n if (node.children && node.children.length > 0) {\n this.visit(node.children[0], context, writer, selection);\n }\n\n trace(context, '<- [propScalar::generate]', `-> out: ${node.name}`);\n context.leave(node);\n }\n\n /**\n * Visit a node by dispatching to the appropriate method based on its id\n */\n visit(node: IType, context: OasContext, writer: Writer, selection: string[]): void {\n const id = node.id;\n\n if (id.startsWith('array:')) {\n this.visitArray(node as Arr, context, writer, selection);\n } else if (id.startsWith('circularRef:')) {\n this.visitCircularRef(node as CircularRef, context, writer, selection);\n } else if (id.startsWith('comp:')) {\n this.visitComposed(node as Composed, context, writer, selection);\n } else if (id.startsWith('en:')) {\n this.visitEnum(node as En, context, writer, selection);\n } else if (id.startsWith('obj:')) {\n this.visitObject(node as Obj, context, writer, selection);\n } else if (id.startsWith('res:')) {\n this.visitResponse(node as Res, context, writer, selection);\n } else if (id.startsWith('scalar:')) {\n this.visitScalar(node as Scalar, context, writer, selection);\n } else if (id.startsWith('union:')) {\n this.visitUnion(node as Union, context, writer, selection);\n } else if (id.startsWith('get:')) {\n this.visitGet(node as Get, context, writer, selection);\n } else if (id.startsWith('post:')) {\n this.visitPost(node as Post, context, writer, selection);\n } else if (id.startsWith('put:')) {\n this.visitPut(node as Put, context, writer, selection);\n } else if (id.startsWith('patch:')) {\n this.visitPatch(node as Patch, context, writer, selection);\n } else if (id.startsWith('delete:')) {\n this.visitDelete(node as Delete, context, writer, selection);\n } else if (id.startsWith('body:')) {\n this.visitBody(node as Body, context, writer, selection);\n } else if (id.startsWith('param:')) {\n this.visitParam(node as Param, context, writer, selection);\n } else if (id.startsWith('prop:')) {\n // Check for more specific prop types\n if (id.includes('array')) {\n this.visitPropArray(node as PropArray, context, writer, selection);\n } else if (id.includes('circRef')) {\n this.visitPropCircRef(node as PropCircRef, context, writer, selection);\n } else if (id.includes('comp')) {\n this.visitPropComp(node as PropComp, context, writer, selection);\n } else if (id.includes('enum')) {\n this.visitPropEnum(node as PropEn, context, writer, selection);\n } else if (id.includes('obj')) {\n this.visitPropObject(node as PropObj, context, writer, selection);\n } else if (id.includes('scalar')) {\n this.visitPropScalar(node as PropScalar, context, writer, selection);\n } else {\n this.visitProp(node as Prop, context, writer, selection);\n }\n } else {\n console.warn(`Unknown node type from id ${id}: ${node?.constructor?.name || typeof node}`);\n }\n }\n}\n"]}
@@ -0,0 +1,30 @@
1
+ import { OasContext } from '../oasContext.js';
2
+ import { Writer } from '../io/writer.js';
3
+ import { Arr, CircularRef, Composed, En, Obj, Param, Prop, PropArray, PropCircRef, PropComp, PropEn, PropObj, PropScalar, Res, Scalar, Union, Get, Post, Put, Patch, Delete, Body } from '../nodes/internal.js';
4
+ /**
5
+ * NodeVisitor interface defines methods for each node type in the AST
6
+ */
7
+ export interface NodeVisitor {
8
+ visitArray(node: Arr, context: OasContext, writer: Writer, selection: string[]): void;
9
+ visitCircularRef(node: CircularRef, context: OasContext, writer: Writer, selection: string[]): void;
10
+ visitComposed(node: Composed, context: OasContext, writer: Writer, selection: string[]): void;
11
+ visitEnum(node: En, context: OasContext, writer: Writer, selection: string[]): void;
12
+ visitObject(node: Obj, context: OasContext, writer: Writer, selection: string[]): void;
13
+ visitResponse(node: Res, context: OasContext, writer: Writer, selection: string[]): void;
14
+ visitScalar(node: Scalar, context: OasContext, writer: Writer, selection: string[]): void;
15
+ visitUnion(node: Union, context: OasContext, writer: Writer, selection: string[]): void;
16
+ visitGet(node: Get, context: OasContext, writer: Writer, selection: string[]): void;
17
+ visitPost(node: Post, context: OasContext, writer: Writer, selection: string[]): void;
18
+ visitPut(node: Put, context: OasContext, writer: Writer, selection: string[]): void;
19
+ visitPatch(node: Patch, context: OasContext, writer: Writer, selection: string[]): void;
20
+ visitDelete(node: Delete, context: OasContext, writer: Writer, selection: string[]): void;
21
+ visitBody(node: Body, context: OasContext, writer: Writer, selection: string[]): void;
22
+ visitParam(node: Param, context: OasContext, writer: Writer, selection: string[]): void;
23
+ visitProp(node: Prop, context: OasContext, writer: Writer, selection: string[]): void;
24
+ visitPropArray(node: PropArray, context: OasContext, writer: Writer, selection: string[]): void;
25
+ visitPropCircRef(node: PropCircRef, context: OasContext, writer: Writer, selection: string[]): void;
26
+ visitPropComp(node: PropComp, context: OasContext, writer: Writer, selection: string[]): void;
27
+ visitPropEnum(node: PropEn, context: OasContext, writer: Writer, selection: string[]): void;
28
+ visitPropObject(node: PropObj, context: OasContext, writer: Writer, selection: string[]): void;
29
+ visitPropScalar(node: PropScalar, context: OasContext, writer: Writer, selection: string[]): void;
30
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=NodeVisitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeVisitor.js","sourceRoot":"","sources":["../../../src/oas/visitor/NodeVisitor.ts"],"names":[],"mappings":"","sourcesContent":["import { OasContext } from '../oasContext.js';\nimport { Writer } from '../io/writer.js';\nimport {\n Arr,\n CircularRef,\n Composed,\n En,\n Obj,\n Param,\n Prop,\n PropArray,\n PropCircRef,\n PropComp,\n PropEn,\n PropObj,\n PropScalar,\n Res,\n Scalar,\n Union,\n Get,\n Post,\n Put,\n Patch,\n Delete,\n Body,\n} from '../nodes/internal.js';\n\n/**\n * NodeVisitor interface defines methods for each node type in the AST\n */\nexport interface NodeVisitor {\n // Basic types\n visitArray(node: Arr, context: OasContext, writer: Writer, selection: string[]): void;\n visitCircularRef(node: CircularRef, context: OasContext, writer: Writer, selection: string[]): void;\n visitComposed(node: Composed, context: OasContext, writer: Writer, selection: string[]): void;\n visitEnum(node: En, context: OasContext, writer: Writer, selection: string[]): void;\n visitObject(node: Obj, context: OasContext, writer: Writer, selection: string[]): void;\n visitResponse(node: Res, context: OasContext, writer: Writer, selection: string[]): void;\n visitScalar(node: Scalar, context: OasContext, writer: Writer, selection: string[]): void;\n visitUnion(node: Union, context: OasContext, writer: Writer, selection: string[]): void;\n\n // Operations\n visitGet(node: Get, context: OasContext, writer: Writer, selection: string[]): void;\n visitPost(node: Post, context: OasContext, writer: Writer, selection: string[]): void;\n visitPut(node: Put, context: OasContext, writer: Writer, selection: string[]): void;\n visitPatch(node: Patch, context: OasContext, writer: Writer, selection: string[]): void;\n visitDelete(node: Delete, context: OasContext, writer: Writer, selection: string[]): void;\n visitBody(node: Body, context: OasContext, writer: Writer, selection: string[]): void;\n\n // Properties\n visitParam(node: Param, context: OasContext, writer: Writer, selection: string[]): void;\n visitProp(node: Prop, context: OasContext, writer: Writer, selection: string[]): void;\n visitPropArray(node: PropArray, context: OasContext, writer: Writer, selection: string[]): void;\n visitPropCircRef(node: PropCircRef, context: OasContext, writer: Writer, selection: string[]): void;\n visitPropComp(node: PropComp, context: OasContext, writer: Writer, selection: string[]): void;\n visitPropEnum(node: PropEn, context: OasContext, writer: Writer, selection: string[]): void;\n visitPropObject(node: PropObj, context: OasContext, writer: Writer, selection: string[]): void;\n visitPropScalar(node: PropScalar, context: OasContext, writer: Writer, selection: string[]): void;\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import { GeneratorVisitor } from './GeneratorVisitor.js';
2
+ import { Arr, IType } from '../nodes/internal.js';
3
+ import { OasContext } from '../oasContext.js';
4
+ import { Writer } from '../io/writer.js';
5
+ /**
6
+ * Example of how to use the visitor pattern
7
+ *
8
+ * This shows how to use the GeneratorVisitor to generate code for a node tree
9
+ * without modifying the node classes themselves.
10
+ */
11
+ export declare function generateWithVisitor(node: IType, context: OasContext, writer: Writer, selection: string[]): void;
12
+ /**
13
+ * Example showing how to extend the visitor pattern with custom behavior
14
+ */
15
+ export declare class CustomGeneratorVisitor extends GeneratorVisitor {
16
+ visitArray(node: Arr, context: OasContext, writer: Writer, selection: string[]): void;
17
+ }
@@ -0,0 +1,28 @@
1
+ import { GeneratorVisitor } from './GeneratorVisitor.js';
2
+ /**
3
+ * Example of how to use the visitor pattern
4
+ *
5
+ * This shows how to use the GeneratorVisitor to generate code for a node tree
6
+ * without modifying the node classes themselves.
7
+ */
8
+ export function generateWithVisitor(node, context, writer, selection) {
9
+ // Create a visitor
10
+ const visitor = new GeneratorVisitor();
11
+ // Use the visitor to generate output
12
+ visitor.generate(node, context, writer, selection);
13
+ }
14
+ /**
15
+ * Example showing how to extend the visitor pattern with custom behavior
16
+ */
17
+ export class CustomGeneratorVisitor extends GeneratorVisitor {
18
+ // Override specific visit methods to customize generation behavior
19
+ // without changing the node classes
20
+ // For example:
21
+ visitArray(node, context, writer, selection) {
22
+ // Custom implementation for arrays
23
+ writer.write('CustomArray[');
24
+ super.visitArray(node, context, writer, selection);
25
+ writer.write(']');
26
+ }
27
+ }
28
+ //# sourceMappingURL=example.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example.js","sourceRoot":"","sources":["../../../src/oas/visitor/example.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAKzD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAW,EAAE,OAAmB,EAAE,MAAc,EAAE,SAAmB;IACvG,mBAAmB;IACnB,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAEvC,qCAAqC;IACrC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,gBAAgB;IAC1D,mEAAmE;IACnE,oCAAoC;IAEpC,eAAe;IACf,UAAU,CAAC,IAAS,EAAE,OAAmB,EAAE,MAAc,EAAE,SAAmB;QAC5E,mCAAmC;QACnC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC7B,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;CACF","sourcesContent":["import { GeneratorVisitor } from './GeneratorVisitor.js';\nimport { Arr, IType } from '../nodes/internal.js';\nimport { OasContext } from '../oasContext.js';\nimport { Writer } from '../io/writer.js';\n\n/**\n * Example of how to use the visitor pattern\n *\n * This shows how to use the GeneratorVisitor to generate code for a node tree\n * without modifying the node classes themselves.\n */\nexport function generateWithVisitor(node: IType, context: OasContext, writer: Writer, selection: string[]): void {\n // Create a visitor\n const visitor = new GeneratorVisitor();\n\n // Use the visitor to generate output\n visitor.generate(node, context, writer, selection);\n}\n\n/**\n * Example showing how to extend the visitor pattern with custom behavior\n */\nexport class CustomGeneratorVisitor extends GeneratorVisitor {\n // Override specific visit methods to customize generation behavior\n // without changing the node classes\n\n // For example:\n visitArray(node: Arr, context: OasContext, writer: Writer, selection: string[]): void {\n // Custom implementation for arrays\n writer.write('CustomArray[');\n super.visitArray(node, context, writer, selection);\n writer.write(']');\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export { NodeVisitor } from './NodeVisitor.js';
2
+ export { GeneratorVisitor } from './GeneratorVisitor.js';
@@ -0,0 +1,2 @@
1
+ export { GeneratorVisitor } from './GeneratorVisitor.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/oas/visitor/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC","sourcesContent":["export { NodeVisitor } from './NodeVisitor.js';\nexport { GeneratorVisitor } from './GeneratorVisitor.js';\n"]}
@@ -17,8 +17,9 @@ export async function runOasTest(file, paths, pathsSize, typesSize, shouldFail =
17
17
  await gen.visit();
18
18
  assert.ok(gen.paths !== undefined);
19
19
  assert.ok(gen.paths.size === pathsSize, `${gen.paths.size} is not equal to ${pathsSize}`);
20
+ const types = gen.getTypes(paths);
21
+ assert.ok(types.size === typesSize, `${types.size} is not equal to ${typesSize}: ${Array.from(types.keys()).join(',\n')}`);
20
22
  const schema = gen.generateSchema(paths);
21
- assert.ok(gen.context?.types.size === typesSize, `${gen.context?.types.size} is not equal to ${typesSize}`);
22
23
  assert.ok(schema !== undefined);
23
24
  const schemaFile = path.join(os.tmpdir(), file.replace(/yaml|json|yml/, 'graphql'));
24
25
  fs.writeFileSync(schemaFile, schema, { encoding: 'utf-8', flag: 'w' });
@@ -1 +1 @@
1
- {"version":3,"file":"runners.js","sourceRoot":"","sources":["../../src/tests/runners.ts"],"names":[],"mappings":"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","sourcesContent":["import { JsonGen, OasGen } from '../index.js';\nimport { JsonContext, JsonType } from '../json/index.js';\nimport assert from 'node:assert';\nimport path from 'path';\nimport os from 'os';\nimport fs from 'fs';\nimport { execSync, spawnSync } from 'child_process';\nimport _ from 'lodash';\n\nexport const oasBasePath = './tests/resources/oas';\nconst jsonBasePath = './tests/resources/json';\n\n// runOasTest test\nexport async function runOasTest(\n file: string,\n paths: string[],\n pathsSize: number,\n typesSize: number,\n shouldFail: boolean = false,\n skipValidation: boolean = false,\n): Promise<string | undefined> {\n const gen = await OasGen.fromFile(`${oasBasePath}/${file}`, {\n skipValidation,\n consolidateUnions: true,\n showParentInSelections: false,\n });\n await gen.visit();\n\n assert.ok(gen.paths !== undefined);\n assert.ok(gen.paths.size === pathsSize, `${gen.paths.size} is not equal to ${pathsSize}`);\n\n const schema = gen.generateSchema(paths);\n assert.ok(gen.context?.types.size === typesSize, `${gen.context?.types.size} is not equal to ${typesSize}`);\n\n assert.ok(schema !== undefined);\n\n const schemaFile = path.join(os.tmpdir(), file.replace(/yaml|json|yml/, 'graphql'));\n fs.writeFileSync(schemaFile, schema, { encoding: 'utf-8', flag: 'w' });\n\n // need to write another graphql file but this only with a sample query otherwise composition\n // will fail for mutations\n const sampleFile = path.join(os.tmpdir(), 'simple-query.graphql');\n if (!fs.existsSync(sampleFile)) {\n fs.writeFileSync(sampleFile, 'type Query { hello: String }', { encoding: 'utf-8', flag: 'w' });\n }\n\n const [result, output] = compose(schemaFile, sampleFile);\n if (shouldFail) {\n assert.ok(!result);\n assert.ok(output !== undefined);\n return output as unknown as string | undefined;\n } else {\n assert.ok(output === undefined, 'should have been undefined, but it is: ' + output);\n assert.ok(result);\n console.error(schema);\n }\n}\n\ninterface IJsonTestOptions {\n shouldFail: boolean;\n outputContains?: string;\n}\n\nexport async function runJsonTest(\n fileOrFolder: string,\n options: IJsonTestOptions = { shouldFail: false, outputContains: undefined },\n): Promise<string | undefined> {\n const fileOrFolderPath: string = `${jsonBasePath}/${fileOrFolder}`;\n\n assert.ok(fs.existsSync(fileOrFolderPath));\n\n let walker: JsonGen;\n\n const stats = fs.statSync(fileOrFolderPath);\n if (stats.isDirectory()) {\n walker = JsonGen.new();\n\n const sources = fs.readdirSync(fileOrFolderPath).filter((name) => name.toLowerCase().endsWith('.json'));\n\n for (const source of sources) {\n const fullPath = path.join(fileOrFolderPath, source);\n const json = fs.readFileSync(fullPath, 'utf-8');\n assert.ok(json !== undefined);\n\n walker.walkJson(json);\n }\n } else {\n const json = fs.readFileSync(fileOrFolderPath, 'utf-8');\n assert.ok(json !== undefined);\n\n walker = JsonGen.fromReader(json);\n }\n\n const context: JsonContext = walker.getContext();\n\n const types: JsonType[] = context.getTypes();\n assert.ok(types.length > 0);\n\n const schema = walker.generateSchema();\n assert.ok(schema !== undefined);\n\n const schemaFile = path.join(os.tmpdir() + '/walker', fileOrFolder.replace(/\\.yaml|\\.json|\\.yml/, '') + '.graphql');\n\n // Ensure the directory exists\n // fs.mkdirSync(path.dirname(schemaFile), { recursive: true });\n const parentFolder = path.dirname(schemaFile);\n if (!fs.existsSync(parentFolder)) {\n fs.mkdirSync(parentFolder, { recursive: true });\n }\n\n if (fs.existsSync(schemaFile)) {\n fs.unlinkSync(schemaFile);\n }\n\n fs.writeFileSync(schemaFile, schema, { encoding: 'utf-8', flag: 'w' });\n\n const [result, output] = compose(schemaFile);\n\n if (options.shouldFail) {\n assert.ok(result === false);\n assert.ok(output !== undefined);\n return output as unknown as string | undefined;\n } else {\n assert.ok(output === undefined);\n assert.ok(result === true);\n }\n\n // writer.clear();\n}\n\n/// rover checks\nfunction isRoverAvailable(command: string): [boolean, string?] {\n const cmd = os.platform() === 'win32' ? 'where' : 'which';\n const result = spawnSync(cmd, [command], { encoding: 'utf8' });\n\n return [result.status === 0, result.stdout.toString().trim()];\n}\n\nfunction compose(schemaPath: string, samplePath?: string) {\n console.info('schemaPath', schemaPath);\n\n const rover: [boolean, (string | undefined)?] = isRoverAvailable('rover');\n if (!rover[0]) {\n throw new Error('Rover is not available');\n }\n\n const supergraphFile = path.join(os.tmpdir(), 'supergraph.yaml');\n let content: string = `\nfederation_version: =2.10.0\nsubgraphs:\n test_spec:\n routing_url: http://localhost # this value is ignored\n schema:\n file: ${schemaPath} # path to the schema file`;\n\n if (samplePath) {\n content += `\n sample_spec:\n routing_url: http://localhost # this value is ignored\n schema:\n file: ${samplePath} # path to the sample file\\`;\n `;\n }\n\n fs.writeFileSync(supergraphFile, content, { encoding: 'utf-8', flag: 'w' });\n\n const cmd = `${rover[1]} supergraph compose --config ${supergraphFile} --elv2-license accept`;\n\n let output;\n try {\n output = execSync(cmd, { stdio: 'pipe' });\n return [true, undefined];\n } catch (error) {\n return [false, _.get(error, 'message')];\n }\n}\n"]}
1
+ {"version":3,"file":"runners.js","sourceRoot":"","sources":["../../src/tests/runners.ts"],"names":[],"mappings":"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","sourcesContent":["import { JsonGen, OasGen } from '../index.js';\nimport { JsonContext, JsonType } from '../json/index.js';\nimport assert from 'node:assert';\nimport path from 'path';\nimport os from 'os';\nimport fs from 'fs';\nimport { execSync, spawnSync } from 'child_process';\nimport _ from 'lodash';\n\nexport const oasBasePath = './tests/resources/oas';\nconst jsonBasePath = './tests/resources/json';\n\n// runOasTest test\nexport async function runOasTest(\n file: string,\n paths: string[],\n pathsSize: number,\n typesSize: number,\n shouldFail: boolean = false,\n skipValidation: boolean = false,\n): Promise<string | undefined> {\n const gen = await OasGen.fromFile(`${oasBasePath}/${file}`, {\n skipValidation,\n consolidateUnions: true,\n showParentInSelections: false,\n });\n await gen.visit();\n\n assert.ok(gen.paths !== undefined);\n assert.ok(gen.paths.size === pathsSize, `${gen.paths.size} is not equal to ${pathsSize}`);\n\n const types = gen.getTypes(paths);\n assert.ok(\n types.size === typesSize,\n `${types.size} is not equal to ${typesSize}: ${Array.from(types.keys()).join(',\\n')}`,\n );\n\n const schema = gen.generateSchema(paths);\n assert.ok(schema !== undefined);\n\n const schemaFile = path.join(os.tmpdir(), file.replace(/yaml|json|yml/, 'graphql'));\n fs.writeFileSync(schemaFile, schema, { encoding: 'utf-8', flag: 'w' });\n\n // need to write another graphql file but this only with a sample query otherwise composition\n // will fail for mutations\n const sampleFile = path.join(os.tmpdir(), 'simple-query.graphql');\n if (!fs.existsSync(sampleFile)) {\n fs.writeFileSync(sampleFile, 'type Query { hello: String }', { encoding: 'utf-8', flag: 'w' });\n }\n\n const [result, output] = compose(schemaFile, sampleFile);\n if (shouldFail) {\n assert.ok(!result);\n assert.ok(output !== undefined);\n return output as unknown as string | undefined;\n } else {\n assert.ok(output === undefined, 'should have been undefined, but it is: ' + output);\n assert.ok(result);\n console.error(schema);\n }\n}\n\ninterface IJsonTestOptions {\n shouldFail: boolean;\n outputContains?: string;\n}\n\nexport async function runJsonTest(\n fileOrFolder: string,\n options: IJsonTestOptions = { shouldFail: false, outputContains: undefined },\n): Promise<string | undefined> {\n const fileOrFolderPath: string = `${jsonBasePath}/${fileOrFolder}`;\n\n assert.ok(fs.existsSync(fileOrFolderPath));\n\n let walker: JsonGen;\n\n const stats = fs.statSync(fileOrFolderPath);\n if (stats.isDirectory()) {\n walker = JsonGen.new();\n\n const sources = fs.readdirSync(fileOrFolderPath).filter((name) => name.toLowerCase().endsWith('.json'));\n\n for (const source of sources) {\n const fullPath = path.join(fileOrFolderPath, source);\n const json = fs.readFileSync(fullPath, 'utf-8');\n assert.ok(json !== undefined);\n\n walker.walkJson(json);\n }\n } else {\n const json = fs.readFileSync(fileOrFolderPath, 'utf-8');\n assert.ok(json !== undefined);\n\n walker = JsonGen.fromReader(json);\n }\n\n const context: JsonContext = walker.getContext();\n\n const types: JsonType[] = context.getTypes();\n assert.ok(types.length > 0);\n\n const schema = walker.generateSchema();\n assert.ok(schema !== undefined);\n\n const schemaFile = path.join(os.tmpdir() + '/walker', fileOrFolder.replace(/\\.yaml|\\.json|\\.yml/, '') + '.graphql');\n\n // Ensure the directory exists\n // fs.mkdirSync(path.dirname(schemaFile), { recursive: true });\n const parentFolder = path.dirname(schemaFile);\n if (!fs.existsSync(parentFolder)) {\n fs.mkdirSync(parentFolder, { recursive: true });\n }\n\n if (fs.existsSync(schemaFile)) {\n fs.unlinkSync(schemaFile);\n }\n\n fs.writeFileSync(schemaFile, schema, { encoding: 'utf-8', flag: 'w' });\n\n const [result, output] = compose(schemaFile);\n\n if (options.shouldFail) {\n assert.ok(result === false);\n assert.ok(output !== undefined);\n return output as unknown as string | undefined;\n } else {\n assert.ok(output === undefined);\n assert.ok(result === true);\n }\n\n // writer.clear();\n}\n\n/// rover checks\nfunction isRoverAvailable(command: string): [boolean, string?] {\n const cmd = os.platform() === 'win32' ? 'where' : 'which';\n const result = spawnSync(cmd, [command], { encoding: 'utf8' });\n\n return [result.status === 0, result.stdout.toString().trim()];\n}\n\nfunction compose(schemaPath: string, samplePath?: string) {\n console.info('schemaPath', schemaPath);\n\n const rover: [boolean, (string | undefined)?] = isRoverAvailable('rover');\n if (!rover[0]) {\n throw new Error('Rover is not available');\n }\n\n const supergraphFile = path.join(os.tmpdir(), 'supergraph.yaml');\n let content: string = `\nfederation_version: =2.10.0\nsubgraphs:\n test_spec:\n routing_url: http://localhost # this value is ignored\n schema:\n file: ${schemaPath} # path to the schema file`;\n\n if (samplePath) {\n content += `\n sample_spec:\n routing_url: http://localhost # this value is ignored\n schema:\n file: ${samplePath} # path to the sample file\\`;\n `;\n }\n\n fs.writeFileSync(supergraphFile, content, { encoding: 'utf-8', flag: 'w' });\n\n const cmd = `${rover[1]} supergraph compose --config ${supergraphFile} --elv2-license accept`;\n\n let output;\n try {\n output = execSync(cmd, { stdio: 'pipe' });\n return [true, undefined];\n } catch (error) {\n return [false, _.get(error, 'message')];\n }\n}\n"]}
@@ -1 +1 @@
1
- {"root":["../src/index.ts","../src/cli/json.ts","../src/cli/oas.ts","../src/cli/oas-helpers/index.ts","../src/json/index.ts","../src/json/io/index.ts","../src/json/io/writer.ts","../src/json/walker/index.ts","../src/json/walker/jsoncontext.ts","../src/json/walker/jsongen.ts","../src/json/walker/naming.ts","../src/json/walker/log/trace.ts","../src/json/walker/types/index.ts","../src/json/walker/types/jsonarray.ts","../src/json/walker/types/jsonobj.ts","../src/json/walker/types/jsonscalar.ts","../src/json/walker/types/jsontype.ts","../src/oas/index.ts","../src/oas/oascontext.ts","../src/oas/oasgen.ts","../src/oas/io/operationwriter.ts","../src/oas/io/pathcollector.ts","../src/oas/io/schemawriter.ts","../src/oas/io/writer.ts","../src/oas/log/trace.ts","../src/oas/nodes/arr.ts","../src/oas/nodes/body.ts","../src/oas/nodes/circularref.ts","../src/oas/nodes/comp.ts","../src/oas/nodes/delete.ts","../src/oas/nodes/en.ts","../src/oas/nodes/factory.ts","../src/oas/nodes/get.ts","../src/oas/nodes/itype.ts","../src/oas/nodes/internal.ts","../src/oas/nodes/obj.ts","../src/oas/nodes/op.ts","../src/oas/nodes/param.ts","../src/oas/nodes/patch.ts","../src/oas/nodes/post.ts","../src/oas/nodes/prop.ts","../src/oas/nodes/proparray.ts","../src/oas/nodes/propcircref.ts","../src/oas/nodes/propcomp.ts","../src/oas/nodes/propen.ts","../src/oas/nodes/propobj.ts","../src/oas/nodes/propref.ts","../src/oas/nodes/propscalar.ts","../src/oas/nodes/put.ts","../src/oas/nodes/ref.ts","../src/oas/nodes/referenceobject.ts","../src/oas/nodes/res.ts","../src/oas/nodes/scalar.ts","../src/oas/nodes/type.ts","../src/oas/nodes/typeutils.ts","../src/oas/nodes/union.ts","../src/oas/prompts/prompt.ts","../src/oas/prompts/theme.ts","../src/oas/prompts/base/theme.ts","../src/oas/prompts/base/utils.ts","../src/oas/schemas/index.ts","../src/oas/utils/gql.ts","../src/oas/utils/naming.ts","../src/tests/runners.ts"],"version":"5.8.2"}
1
+ {"root":["../src/index.ts","../src/cli/json.ts","../src/cli/oas.ts","../src/cli/oas-helpers/index.ts","../src/json/index.ts","../src/json/io/index.ts","../src/json/io/writer.ts","../src/json/walker/index.ts","../src/json/walker/jsoncontext.ts","../src/json/walker/jsongen.ts","../src/json/walker/naming.ts","../src/json/walker/log/trace.ts","../src/json/walker/types/index.ts","../src/json/walker/types/jsonarray.ts","../src/json/walker/types/jsonobj.ts","../src/json/walker/types/jsonscalar.ts","../src/json/walker/types/jsontype.ts","../src/oas/index.ts","../src/oas/oascontext.ts","../src/oas/oasgen.ts","../src/oas/generator/typescollector.ts","../src/oas/io/operationwriter.ts","../src/oas/io/schemawriter.ts","../src/oas/io/writer.ts","../src/oas/log/trace.ts","../src/oas/nodes/arr.ts","../src/oas/nodes/body.ts","../src/oas/nodes/circularref.ts","../src/oas/nodes/comp.ts","../src/oas/nodes/delete.ts","../src/oas/nodes/en.ts","../src/oas/nodes/factory.ts","../src/oas/nodes/get.ts","../src/oas/nodes/itype.ts","../src/oas/nodes/internal.ts","../src/oas/nodes/obj.ts","../src/oas/nodes/op.ts","../src/oas/nodes/param.ts","../src/oas/nodes/patch.ts","../src/oas/nodes/post.ts","../src/oas/nodes/prop.ts","../src/oas/nodes/proparray.ts","../src/oas/nodes/propcircref.ts","../src/oas/nodes/propcomp.ts","../src/oas/nodes/propen.ts","../src/oas/nodes/propobj.ts","../src/oas/nodes/propref.ts","../src/oas/nodes/propscalar.ts","../src/oas/nodes/put.ts","../src/oas/nodes/ref.ts","../src/oas/nodes/referenceobject.ts","../src/oas/nodes/res.ts","../src/oas/nodes/scalar.ts","../src/oas/nodes/type.ts","../src/oas/nodes/typeutils.ts","../src/oas/nodes/union.ts","../src/oas/prompts/prompt.ts","../src/oas/prompts/theme.ts","../src/oas/prompts/base/theme.ts","../src/oas/prompts/base/utils.ts","../src/oas/schemas/index.ts","../src/oas/utils/gql.ts","../src/oas/utils/naming.ts","../src/oas/visitor/generatorvisitor.ts","../src/oas/visitor/nodevisitor.ts","../src/oas/visitor/example.ts","../src/oas/visitor/index.ts","../src/tests/runners.ts"],"version":"5.8.2"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "apollo-conn-gen",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "description": "Library to generate Apollo connector schemas from OpenAPI specs or JSON payloads. Also includes a CLI to generate connectors from the command line.",
5
5
  "author": "Fernando @ Apollo",
6
6
  "license": "MIT",
@@ -1,11 +0,0 @@
1
- import { OasGen } from '../oasGen.js';
2
- import { IType } from '../nodes/internal.js';
3
- export declare class PathCollector {
4
- private gen;
5
- constructor(gen: OasGen);
6
- static findNonPropParent(type: IType): IType;
7
- static progressiveSplits(input: string): string[];
8
- collectPaths(path: string, collection: IType[]): IType[];
9
- collectExpandedPaths(selection: string[]): string[];
10
- traverseTree(current: IType, selection: string[], pending: Map<string, IType>): void;
11
- }