apollo-conn-gen 0.4.3 → 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.
- package/dist/oas/generator/typesCollector.d.ts +9 -0
- package/dist/oas/generator/typesCollector.js +147 -0
- package/dist/oas/generator/typesCollector.js.map +1 -0
- package/dist/oas/io/writer.d.ts +2 -2
- package/dist/oas/io/writer.js +12 -71
- package/dist/oas/io/writer.js.map +1 -1
- package/dist/oas/nodes/circularRef.js +0 -1
- package/dist/oas/nodes/circularRef.js.map +1 -1
- package/dist/oas/nodes/comp.d.ts +0 -1
- package/dist/oas/nodes/comp.js +9 -21
- package/dist/oas/nodes/comp.js.map +1 -1
- package/dist/oas/nodes/propArray.d.ts +2 -1
- package/dist/oas/nodes/propArray.js +16 -8
- package/dist/oas/nodes/propArray.js.map +1 -1
- package/dist/oas/nodes/propScalar.js +6 -2
- package/dist/oas/nodes/propScalar.js.map +1 -1
- package/dist/oas/nodes/typeUtils.d.ts +1 -0
- package/dist/oas/nodes/typeUtils.js +6 -2
- package/dist/oas/nodes/typeUtils.js.map +1 -1
- package/dist/oas/nodes/union.d.ts +3 -2
- package/dist/oas/nodes/union.js +60 -22
- package/dist/oas/nodes/union.js.map +1 -1
- package/dist/oas/oasContext.d.ts +2 -0
- package/dist/oas/oasContext.js +11 -0
- package/dist/oas/oasContext.js.map +1 -1
- package/dist/oas/oasGen.d.ts +3 -0
- package/dist/oas/oasGen.js +15 -1
- package/dist/oas/oasGen.js.map +1 -1
- package/dist/oas/utils/naming.d.ts +1 -0
- package/dist/oas/utils/naming.js +9 -2
- package/dist/oas/utils/naming.js.map +1 -1
- package/dist/oas/visitor/GeneratorVisitor.d.ts +39 -0
- package/dist/oas/visitor/GeneratorVisitor.js +310 -0
- package/dist/oas/visitor/GeneratorVisitor.js.map +1 -0
- package/dist/oas/visitor/NodeVisitor.d.ts +30 -0
- package/dist/oas/visitor/NodeVisitor.js +2 -0
- package/dist/oas/visitor/NodeVisitor.js.map +1 -0
- package/dist/oas/visitor/example.d.ts +17 -0
- package/dist/oas/visitor/example.js +28 -0
- package/dist/oas/visitor/example.js.map +1 -0
- package/dist/oas/visitor/index.d.ts +2 -0
- package/dist/oas/visitor/index.js +2 -0
- package/dist/oas/visitor/index.js.map +1 -0
- package/dist/tests/runners.js +2 -1
- package/dist/tests/runners.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/oas/io/pathCollector.d.ts +0 -11
- package/dist/oas/io/pathCollector.js +0 -95
- package/dist/oas/io/pathCollector.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../../../src/oas/utils/naming.ts"],"names":[],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport { Operation } from 'oas/operation';\n\ninterface Converter {\n convert(input: string): string;\n}\n\nabstract class AbstractConverter implements Converter {\n private next?: Converter;\n\n constructor(next?: Converter) {\n this.next = next;\n }\n\n public convert(input: string): string {\n const result = this.process(input);\n return this.next ? this.next.convert(result) : result;\n }\n\n protected abstract process(input: string): string;\n}\n\nclass ReplaceBracketsConverter extends AbstractConverter {\n constructor(next: Converter) {\n super(next);\n }\n\n public process(input: string): string {\n return input.replace(/\\[|\\]/g, '-');\n }\n}\n\nclass CapitalisePartsConverter extends AbstractConverter {\n constructor(next: Converter) {\n super(next);\n }\n\n public process(input: string): string {\n return Naming.capitaliseParts(input, /[-_.]/);\n }\n}\n\nclass FinalFirstLowerCaseConverter extends AbstractConverter {\n public process(input: string): string {\n return _.lowerFirst(input);\n }\n}\n\nclass RemoveRefConverter extends AbstractConverter {\n constructor(converter: Converter) {\n super(converter);\n }\n\n public process(input: string): string {\n let result = input || '';\n if (result.includes('#/components/schemas/')) {\n result = result.replace(/#\\/components\\/schemas\\//g, '');\n }\n if (result.includes('#/components/responses/')) {\n result = result.replace(/#\\/components\\/responses\\//g, '');\n }\n if (result.includes('#/components/parameters/')) {\n result = result.replace(/#\\/components\\/parameters\\//g, '');\n }\n return result;\n }\n}\n\nclass FinalFirstUpperCaseConverter extends AbstractConverter {\n constructor() {\n super();\n }\n public process(input: string): string {\n return _.upperFirst(input);\n }\n}\n\nclass FinalConverter extends AbstractConverter {\n protected process(input: string): string {\n return input; // do nothing\n }\n}\n\nexport class Naming {\n public static genParamName(param: string): string {\n return Naming.PARAM_CONVERTER.convert(param);\n }\n\n public static genTypeName(name: string): string {\n return Naming.TYPE_CONVERTER.convert(name);\n }\n\n public static sanitiseField(name: string): string {\n const fieldName = name.startsWith('@') ? name.substring(1) : name;\n return Naming.genParamName(fieldName);\n }\n\n public static sanitiseFieldForSelect(name: string, isInput: boolean = false): string {\n const fieldName = name.startsWith('@') ? name.substring(1) : name;\n const sanitised = Naming.genParamName(fieldName);\n if (sanitised === name) {\n return sanitised;\n } else {\n const needsQuotes = /[:_\\-.]/.test(fieldName) || name.startsWith('@');\n let builder = (isInput ? fieldName : sanitised) + ': ';\n if (needsQuotes) {\n builder += '\"';\n }\n builder += name.startsWith('@') ? name : isInput ? sanitised : fieldName;\n if (needsQuotes) {\n builder += '\"';\n }\n return builder;\n }\n }\n\n public static genOperationName(path: string, operation: Operation): string {\n const parameters = operation.hasParameters()\n ? operation\n .getParameters()\n .filter((p) => p.required && p.in.toLowerCase() !== 'header')\n .map((p) => {\n const paramName = Naming.genParamName(p.name);\n return `By${_.upperFirst(paramName)}`;\n })\n : [];\n\n const result = Naming.formatPath(path, parameters);\n return _.lowerFirst(result);\n }\n\n public static genArrayItems(name: string): string {\n return _.upperFirst(Naming.genParamName(name)) + 'Item';\n }\n\n public static getRefName(ref: string): string {\n return ref ? Naming.REF_CONVERTER.convert(ref) : '';\n }\n\n // internal stuff\n public static formatPath(path: string, parameters: string[]): string {\n if (!path) {\n return path;\n }\n\n // Step 1: Remove parameters enclosed in {}.\n const paramsJoined = parameters.join('');\n let cleanedPath = path.replace(/\\{[^}]*\\}/g, paramsJoined);\n cleanedPath = Naming.capitaliseParts(cleanedPath, /[:\\-.+]+/); // using regex similar to \"[:\\-\\.]+\"\n\n // Step 2: Split the path by \"/\" and capitalize each part.\n return Naming.capitaliseParts(cleanedPath, '/');\n }\n\n public static capitaliseParts(input: string, splitPattern: RegExp | string): string {\n // If splitPattern is a string, convert it to a RegExp.\n const regex = typeof splitPattern === 'string' ? new RegExp(splitPattern, 'g') : splitPattern;\n\n // Split the input, capitalize each non-empty part, and join them back together.\n return input\n .split(regex)\n .map((part) => (part ? _.upperFirst(part) : ''))\n .join('');\n }\n private static readonly PARAM_CONVERTER: Converter = new ReplaceBracketsConverter(\n new CapitalisePartsConverter(new FinalFirstLowerCaseConverter()),\n );\n\n private static readonly TYPE_CONVERTER: Converter = new RemoveRefConverter(\n new CapitalisePartsConverter(new FinalFirstUpperCaseConverter()),\n );\n\n private static readonly REF_CONVERTER: Converter = new RemoveRefConverter(new FinalConverter());\n\n public formatPath(path: string, parameters: string[]): string {\n // Replace with your actual formatting logic.\n // This example simply concatenates the parameters to the path.\n return path + parameters.join('');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../../../src/oas/utils/naming.ts"],"names":[],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport { Operation } from 'oas/operation';\n\ninterface Converter {\n convert(input: string): string;\n}\n\nabstract class AbstractConverter implements Converter {\n private next?: Converter;\n\n constructor(next?: Converter) {\n this.next = next;\n }\n\n public convert(input: string): string {\n const result = this.process(input);\n return this.next ? this.next.convert(result) : result;\n }\n\n protected abstract process(input: string): string;\n}\n\nclass ReplaceBracketsConverter extends AbstractConverter {\n constructor(next: Converter) {\n super(next);\n }\n\n public process(input: string): string {\n return input.replace(/\\[|\\]/g, '-');\n }\n}\n\nclass CapitalisePartsConverter extends AbstractConverter {\n constructor(next: Converter) {\n super(next);\n }\n\n public process(input: string): string {\n return Naming.capitaliseParts(input, /[-_.]/);\n }\n}\n\nclass FinalFirstLowerCaseConverter extends AbstractConverter {\n public process(input: string): string {\n return _.lowerFirst(input);\n }\n}\n\nclass RemoveRefConverter extends AbstractConverter {\n constructor(converter: Converter) {\n super(converter);\n }\n\n public process(input: string): string {\n let result = input || '';\n if (result.includes('#/components/schemas/')) {\n result = result.replace(/#\\/components\\/schemas\\//g, '');\n }\n if (result.includes('#/components/responses/')) {\n result = result.replace(/#\\/components\\/responses\\//g, '');\n }\n if (result.includes('#/components/parameters/')) {\n result = result.replace(/#\\/components\\/parameters\\//g, '');\n }\n return result;\n }\n}\n\nclass FinalFirstUpperCaseConverter extends AbstractConverter {\n constructor() {\n super();\n }\n public process(input: string): string {\n return _.upperFirst(input);\n }\n}\n\nclass FinalConverter extends AbstractConverter {\n protected process(input: string): string {\n return input; // do nothing\n }\n}\n\nexport class Naming {\n public static genParamName(param: string): string {\n return Naming.PARAM_CONVERTER.convert(param);\n }\n\n public static genTypeName(name: string): string {\n return Naming.TYPE_CONVERTER.convert(name);\n }\n\n public static sanitiseField(name: string): string {\n const fieldName = name.startsWith('@') ? name.substring(1) : name;\n return Naming.genParamName(fieldName);\n }\n\n public static sanitiseFieldForSelect(name: string, isInput: boolean = false): string {\n const fieldName = name.startsWith('@') ? name.substring(1) : name;\n const sanitised = Naming.genParamName(fieldName);\n if (sanitised === name) {\n return sanitised;\n } else {\n const needsQuotes = /[:_\\-.]/.test(fieldName) || name.startsWith('@');\n let builder = (isInput ? fieldName : sanitised) + ': ';\n if (needsQuotes) {\n builder += '\"';\n }\n builder += name.startsWith('@') ? name : isInput ? sanitised : fieldName;\n if (needsQuotes) {\n builder += '\"';\n }\n return builder;\n }\n }\n\n public static genOperationName(path: string, operation: Operation): string {\n const parameters = operation.hasParameters()\n ? operation\n .getParameters()\n .filter((p) => p.required && p.in.toLowerCase() !== 'header')\n .map((p) => {\n const paramName = Naming.genParamName(p.name);\n return `By${_.upperFirst(paramName)}`;\n })\n : [];\n\n const result = Naming.formatPath(path, parameters);\n return _.lowerFirst(result);\n }\n\n public static genArrayItems(name: string): string {\n return _.upperFirst(Naming.genParamName(name)) + 'Item';\n }\n\n public static getRefName(ref: string): string {\n return ref ? Naming.REF_CONVERTER.convert(ref) : '';\n }\n\n public static formatPath(path: string, parameters: string[]): string {\n if (!path) {\n return path;\n }\n\n // Step 1: Remove parameters enclosed in {}.\n const paramsJoined = parameters.join('');\n let cleanedPath = path.replace(/\\{[^}]*\\}/g, paramsJoined);\n cleanedPath = Naming.capitaliseParts(cleanedPath, /[:\\-.+]+/); // using regex similar to \"[:\\-\\.]+\"\n\n // Step 2: Split the path by \"/\" and capitalize each part.\n const capitalisedParts = Naming.capitaliseParts(cleanedPath, '/');\n\n // Step 3: Check if the path starts with a number and remove it if so\n // the pattern we are looking for is like so: /2.3.0/entrypoint\n if (/^\\d/.test(capitalisedParts)) {\n return capitalisedParts.replace(/^\\d+(?=[a-zA-Z])/g, '');\n }\n\n return capitalisedParts;\n }\n\n public static capitaliseParts(input: string, splitPattern: RegExp | string): string {\n // If splitPattern is a string, convert it to a RegExp.\n const regex = typeof splitPattern === 'string' ? new RegExp(splitPattern, 'g') : splitPattern;\n\n // Split the input, capitalize each non-empty part, and join them back together.\n return input\n .split(regex)\n .map((part) => (part ? _.upperFirst(part) : ''))\n .join('');\n }\n private static readonly PARAM_CONVERTER: Converter = new ReplaceBracketsConverter(\n new CapitalisePartsConverter(new FinalFirstLowerCaseConverter()),\n );\n\n private static readonly TYPE_CONVERTER: Converter = new RemoveRefConverter(\n new CapitalisePartsConverter(new FinalFirstUpperCaseConverter()),\n );\n\n private static readonly REF_CONVERTER: Converter = new RemoveRefConverter(new FinalConverter());\n\n // internal stuff\n private static readonly NUMBER_PREFIX = '_';\n\n public formatPath(path: string, parameters: string[]): string {\n // Replace with your actual formatting logic.\n // This example simply concatenates the parameters to the path.\n return path + parameters.join('');\n }\n}\n"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
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, IType } from '../nodes/internal.js';
|
|
4
|
+
import { NodeVisitor } from './NodeVisitor.js';
|
|
5
|
+
/**
|
|
6
|
+
* Implementation of the Visitor pattern for node generation
|
|
7
|
+
*/
|
|
8
|
+
export declare class GeneratorVisitor implements NodeVisitor {
|
|
9
|
+
/**
|
|
10
|
+
* Generate output for a node
|
|
11
|
+
*/
|
|
12
|
+
generate(node: IType, context: OasContext, writer: Writer, selection: string[]): void;
|
|
13
|
+
visitArray(node: Arr, context: OasContext, writer: Writer, selection: string[]): void;
|
|
14
|
+
visitCircularRef(node: CircularRef, context: OasContext, writer: Writer, selection: string[]): void;
|
|
15
|
+
visitComposed(node: Composed, context: OasContext, writer: Writer, selection: string[]): void;
|
|
16
|
+
visitEnum(node: En, context: OasContext, writer: Writer, selection: string[]): void;
|
|
17
|
+
visitObject(node: Obj, context: OasContext, writer: Writer, selection: string[]): void;
|
|
18
|
+
visitResponse(node: Res, context: OasContext, writer: Writer, selection: string[]): void;
|
|
19
|
+
visitScalar(node: Scalar, context: OasContext, writer: Writer, selection: string[]): void;
|
|
20
|
+
visitUnion(node: Union, context: OasContext, writer: Writer, selection: string[]): void;
|
|
21
|
+
visitGet(node: Get, context: OasContext, writer: Writer, selection: string[]): void;
|
|
22
|
+
visitPost(node: Post, context: OasContext, writer: Writer, selection: string[]): void;
|
|
23
|
+
visitPut(node: Put, context: OasContext, writer: Writer, selection: string[]): void;
|
|
24
|
+
visitPatch(node: Patch, context: OasContext, writer: Writer, selection: string[]): void;
|
|
25
|
+
visitDelete(node: Delete, context: OasContext, writer: Writer, selection: string[]): void;
|
|
26
|
+
visitBody(node: Body, context: OasContext, writer: Writer, selection: string[]): void;
|
|
27
|
+
visitParam(node: Param, context: OasContext, writer: Writer, selection: string[]): void;
|
|
28
|
+
visitProp(node: Prop, context: OasContext, writer: Writer, selection: string[]): void;
|
|
29
|
+
visitPropArray(node: PropArray, context: OasContext, writer: Writer, selection: string[]): void;
|
|
30
|
+
visitPropCircRef(node: PropCircRef, context: OasContext, writer: Writer, selection: string[]): void;
|
|
31
|
+
visitPropComp(node: PropComp, context: OasContext, writer: Writer, selection: string[]): void;
|
|
32
|
+
visitPropEnum(node: PropEn, context: OasContext, writer: Writer, selection: string[]): void;
|
|
33
|
+
visitPropObject(node: PropObj, context: OasContext, writer: Writer, selection: string[]): void;
|
|
34
|
+
visitPropScalar(node: PropScalar, context: OasContext, writer: Writer, selection: string[]): void;
|
|
35
|
+
/**
|
|
36
|
+
* Visit a node by dispatching to the appropriate method based on its id
|
|
37
|
+
*/
|
|
38
|
+
visit(node: IType, context: OasContext, writer: Writer, selection: string[]): void;
|
|
39
|
+
}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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"]}
|
package/dist/tests/runners.js
CHANGED
|
@@ -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' });
|