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
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import { Composed } from '../nodes/comp.js';
|
|
3
|
+
import { Prop, PropArray, Scalar, T } from '../nodes/internal.js';
|
|
4
|
+
export class TypesCollector {
|
|
5
|
+
gen;
|
|
6
|
+
types = new Map();
|
|
7
|
+
expanded = [];
|
|
8
|
+
constructor(gen) {
|
|
9
|
+
this.gen = gen;
|
|
10
|
+
}
|
|
11
|
+
collect(selection) {
|
|
12
|
+
const pendingTypes = new Map();
|
|
13
|
+
let expanded = new PathsCollector(this.gen).collectExpandedPaths(selection);
|
|
14
|
+
for (const path of expanded) {
|
|
15
|
+
let collection = Array.from(this.gen.paths.values());
|
|
16
|
+
let current;
|
|
17
|
+
let last;
|
|
18
|
+
let i = 0;
|
|
19
|
+
const parts = path.split('>');
|
|
20
|
+
do {
|
|
21
|
+
const part = parts[i].replace(/#\/c\/s/g, '#/components/schemas');
|
|
22
|
+
if (part === '*') {
|
|
23
|
+
// remove the current path from the expanded array
|
|
24
|
+
expanded = expanded.filter((s) => s !== path);
|
|
25
|
+
if (current && current instanceof Composed) {
|
|
26
|
+
current.consolidate(expanded);
|
|
27
|
+
}
|
|
28
|
+
// add all the props from the current node and exit loop
|
|
29
|
+
current?.props.forEach((child) => {
|
|
30
|
+
if (T.isLeaf(child)) {
|
|
31
|
+
expanded.push(child.path());
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
current = collection.find((t) => t.id === part);
|
|
37
|
+
if (!current) {
|
|
38
|
+
const tree = T.print(last.ancestors()[0]);
|
|
39
|
+
// let's collect the possible paths so we don't have to debug
|
|
40
|
+
throw new Error('Could not find type: ' + part + ' from ' + path + '\nlast:\n' + last?.pathToRoot() + '\ntree: ' + tree);
|
|
41
|
+
}
|
|
42
|
+
// make sure we expand it before we move on to the next part
|
|
43
|
+
this.gen.expand(current);
|
|
44
|
+
last = current;
|
|
45
|
+
collection = Array.from(current.children.values()) || Array.from(current.props.values()) || [];
|
|
46
|
+
i++;
|
|
47
|
+
} while (i < parts.length);
|
|
48
|
+
// optional hook -- if the type in question has deps, add them here
|
|
49
|
+
const deps = _.invoke(current, 'dependencies', [this.gen.context]);
|
|
50
|
+
if (deps) {
|
|
51
|
+
deps
|
|
52
|
+
.filter((i) => !pendingTypes.has(i.id))
|
|
53
|
+
.forEach((i) => {
|
|
54
|
+
pendingTypes.set(i.id, i);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
if (current && !(current instanceof Scalar)) {
|
|
58
|
+
const parentType = T.findNonPropParent(current);
|
|
59
|
+
if (!pendingTypes.has(parentType.id)) {
|
|
60
|
+
pendingTypes.set(parentType.id, parentType);
|
|
61
|
+
}
|
|
62
|
+
// add all ancestors (of the parent of the prop) that are containers so they are generated accordingly
|
|
63
|
+
parentType
|
|
64
|
+
.ancestors()
|
|
65
|
+
.filter((t) => !pendingTypes.has(t.id) && T.isContainer(t))
|
|
66
|
+
.forEach((dep) => {
|
|
67
|
+
pendingTypes.set(dep.id, dep);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// first pass is to consolidate all Composed & Union nodes
|
|
72
|
+
const composed = Array.from(pendingTypes.values())
|
|
73
|
+
.filter((t) => t instanceof Composed)
|
|
74
|
+
.map((t) => t);
|
|
75
|
+
const context = this.gen.context;
|
|
76
|
+
for (const comp of composed) {
|
|
77
|
+
if (!comp.visited)
|
|
78
|
+
comp.visit(context);
|
|
79
|
+
comp.consolidate(expanded).forEach((id) => pendingTypes.delete(id));
|
|
80
|
+
}
|
|
81
|
+
this.types = pendingTypes;
|
|
82
|
+
this.expanded = expanded;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
class PathsCollector {
|
|
86
|
+
gen;
|
|
87
|
+
constructor(gen) {
|
|
88
|
+
this.gen = gen;
|
|
89
|
+
}
|
|
90
|
+
static findNonPropParent(type) {
|
|
91
|
+
let parent = type;
|
|
92
|
+
while (parent instanceof Prop) {
|
|
93
|
+
parent = parent.parent;
|
|
94
|
+
}
|
|
95
|
+
return parent;
|
|
96
|
+
}
|
|
97
|
+
static progressiveSplits(input) {
|
|
98
|
+
const parts = input.split('>');
|
|
99
|
+
const results = [];
|
|
100
|
+
for (let i = 1; i <= parts.length; i++) {
|
|
101
|
+
results.push(parts.slice(0, i).join('>'));
|
|
102
|
+
}
|
|
103
|
+
return results;
|
|
104
|
+
}
|
|
105
|
+
collectPaths(path, collection) {
|
|
106
|
+
const stack = [];
|
|
107
|
+
let current;
|
|
108
|
+
let last;
|
|
109
|
+
let i = 0;
|
|
110
|
+
const parts = path.split('>');
|
|
111
|
+
do {
|
|
112
|
+
const part = parts[i].replace(/#\/c\/s/g, '#/components/schemas');
|
|
113
|
+
current = collection.find((t) => t.id === part);
|
|
114
|
+
if (!current) {
|
|
115
|
+
throw new Error('Could not find type: ' + part + ' from ' + path + ', last: ' + last?.pathToRoot());
|
|
116
|
+
}
|
|
117
|
+
// make sure we expand it before we move on to the next part
|
|
118
|
+
this.gen.expand(current);
|
|
119
|
+
last = current;
|
|
120
|
+
collection = Array.from(current.children.values()) || Array.from(current.props.values()) || [];
|
|
121
|
+
stack.push(current);
|
|
122
|
+
i++;
|
|
123
|
+
} while (i < parts.length);
|
|
124
|
+
return stack;
|
|
125
|
+
}
|
|
126
|
+
collectExpandedPaths(selection) {
|
|
127
|
+
const newSelection = new Set();
|
|
128
|
+
const expands = selection.filter((p) => p.endsWith('>**'));
|
|
129
|
+
const filtered = expands.map((p) => p.replace('>**', ''));
|
|
130
|
+
const paths = Array.from(this.gen.paths.values());
|
|
131
|
+
const nodes = filtered.map((p) => this.collectPaths(p, paths));
|
|
132
|
+
nodes.forEach((stack) => {
|
|
133
|
+
const root = _.last(stack);
|
|
134
|
+
T.traverse(root, (child) => {
|
|
135
|
+
if (T.isPropScalar(child) || (child instanceof PropArray && child.items instanceof Scalar)) {
|
|
136
|
+
newSelection.add(child.path());
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
this.gen.expand(child);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
// finally remove the expanded paths from the selection
|
|
144
|
+
return [...newSelection, ...selection.filter((p) => !expands.includes(p))];
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=typesCollector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typesCollector.js","sourceRoot":"","sources":["../../../src/oas/generator/typesCollector.ts"],"names":[],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport { Composed } from '../nodes/comp.js';\nimport { IType, Prop, PropArray, Scalar, T } from '../nodes/internal.js';\nimport { OasGen } from '../oasGen.js';\n\nexport class TypesCollector {\n types: Map<string, IType> = new Map();\n expanded: string[] = [];\n\n constructor(private gen: OasGen) {}\n\n public collect(selection: string[]): void {\n const pendingTypes: Map<string, IType> = new Map();\n let expanded: string[] = new PathsCollector(this.gen).collectExpandedPaths(selection);\n\n for (const path of expanded) {\n let collection = Array.from(this.gen.paths.values());\n let current: IType | undefined;\n let last: IType | undefined;\n\n let i = 0;\n const parts = path.split('>');\n do {\n const part = parts[i].replace(/#\\/c\\/s/g, '#/components/schemas');\n if (part === '*') {\n // remove the current path from the expanded array\n expanded = expanded.filter((s) => s !== path);\n\n if (current && current instanceof Composed) {\n current!.consolidate(expanded);\n }\n\n // add all the props from the current node and exit loop\n current?.props.forEach((child) => {\n if (T.isLeaf(child)) {\n expanded.push(child.path());\n }\n });\n break;\n }\n\n current = collection.find((t) => t.id === part);\n if (!current) {\n const tree = T.print(last!.ancestors()[0]);\n\n // let's collect the possible paths so we don't have to debug\n throw new Error(\n 'Could not find type: ' + part + ' from ' + path + '\\nlast:\\n' + last?.pathToRoot() + '\\ntree: ' + tree,\n );\n }\n\n // make sure we expand it before we move on to the next part\n this.gen.expand(current);\n last = current;\n\n collection = Array.from(current!.children.values()) || Array.from(current!.props.values()) || [];\n i++;\n } while (i < parts.length);\n\n // optional hook -- if the type in question has deps, add them here\n const deps: IType[] = _.invoke(current, 'dependencies', [this.gen.context]);\n if (deps) {\n deps\n .filter((i) => !pendingTypes.has(i.id))\n .forEach((i) => {\n pendingTypes.set(i.id, i);\n });\n }\n\n if (current && !(current instanceof Scalar)) {\n const parentType = T.findNonPropParent(current as IType);\n if (!pendingTypes.has(parentType.id)) {\n pendingTypes.set(parentType.id, parentType);\n }\n\n // add all ancestors (of the parent of the prop) that are containers so they are generated accordingly\n parentType\n .ancestors()\n .filter((t) => !pendingTypes.has(t.id) && T.isContainer(t))\n .forEach((dep) => {\n pendingTypes.set(dep.id, dep);\n });\n }\n }\n\n // first pass is to consolidate all Composed & Union nodes\n const composed: Array<Composed> = Array.from(pendingTypes.values())\n .filter((t) => t instanceof Composed)\n .map((t) => t as Composed);\n\n const context = this.gen.context!;\n for (const comp of composed) {\n if (!comp.visited) comp.visit(context);\n comp.consolidate(expanded).forEach((id) => pendingTypes.delete(id));\n }\n\n this.types = pendingTypes;\n this.expanded = expanded;\n }\n}\n\nclass PathsCollector {\n constructor(private gen: OasGen) {}\n\n public static findNonPropParent(type: IType) {\n let parent = type;\n while (parent instanceof Prop) {\n parent = parent.parent!;\n }\n return parent;\n }\n\n public static progressiveSplits(input: string): string[] {\n const parts = input.split('>');\n const results: string[] = [];\n for (let i = 1; i <= parts.length; i++) {\n results.push(parts.slice(0, i).join('>'));\n }\n return results;\n }\n\n public collectPaths(path: string, collection: IType[]): IType[] {\n const stack: IType[] = [];\n let current: IType | undefined;\n let last: IType | undefined;\n\n let i = 0;\n const parts = path.split('>');\n do {\n const part = parts[i].replace(/#\\/c\\/s/g, '#/components/schemas');\n\n current = collection.find((t) => t.id === part);\n if (!current) {\n throw new Error('Could not find type: ' + part + ' from ' + path + ', last: ' + last?.pathToRoot());\n }\n\n // make sure we expand it before we move on to the next part\n this.gen.expand(current);\n last = current;\n\n collection = Array.from(current!.children.values()) || Array.from(current!.props.values()) || [];\n\n stack.push(current);\n i++;\n } while (i < parts.length);\n\n return stack;\n }\n\n public collectExpandedPaths(selection: string[]) {\n const newSelection = new Set<string>();\n const expands = selection.filter((p) => p.endsWith('>**'));\n const filtered = expands.map((p) => p.replace('>**', ''));\n\n const paths = Array.from(this.gen.paths.values());\n const nodes = filtered.map((p) => this.collectPaths(p, paths));\n\n nodes.forEach((stack) => {\n const root = _.last(stack)!;\n T.traverse(root, (child) => {\n if (T.isPropScalar(child) || (child instanceof PropArray && child.items instanceof Scalar)) {\n newSelection.add(child.path());\n } else {\n this.gen.expand(child);\n }\n });\n });\n\n // finally remove the expanded paths from the selection\n return [...newSelection, ...selection.filter((p) => !expands.includes(p))];\n }\n}\n"]}
|
package/dist/oas/io/writer.d.ts
CHANGED
|
@@ -2,13 +2,13 @@ import { OasGen } from '../oasGen.js';
|
|
|
2
2
|
import { IType } from '../nodes/internal.js';
|
|
3
3
|
export declare class Writer {
|
|
4
4
|
gen: OasGen;
|
|
5
|
-
private pathCollector;
|
|
6
5
|
private schemaWriter;
|
|
7
6
|
private operationWriter;
|
|
8
7
|
buffer: string[];
|
|
9
8
|
constructor(gen: OasGen);
|
|
10
9
|
write(input: string): Writer;
|
|
11
10
|
flush(): string;
|
|
12
|
-
generate(
|
|
11
|
+
generate(paths: string[]): string[];
|
|
12
|
+
generateWith(types: Map<string, IType>, selection: string[]): string[];
|
|
13
13
|
writeSchema(writer: Writer, types: Map<string, IType>, selection: string[]): void;
|
|
14
14
|
}
|
package/dist/oas/io/writer.js
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Composed, Scalar, T } from '../nodes/internal.js';
|
|
1
|
+
import { T } from '../nodes/internal.js';
|
|
3
2
|
import { OperationWriter } from './operationWriter.js';
|
|
4
|
-
import { PathCollector } from './pathCollector.js';
|
|
5
3
|
import { SchemaWriter } from './schemaWriter.js';
|
|
4
|
+
import { TypesCollector } from '../generator/typesCollector.js';
|
|
6
5
|
export class Writer {
|
|
7
6
|
gen;
|
|
8
|
-
pathCollector;
|
|
9
7
|
schemaWriter;
|
|
10
8
|
operationWriter;
|
|
11
9
|
buffer;
|
|
12
10
|
constructor(gen) {
|
|
13
11
|
this.gen = gen;
|
|
14
12
|
this.buffer = [];
|
|
15
|
-
this.pathCollector = new PathCollector(gen);
|
|
16
13
|
this.schemaWriter = new SchemaWriter(gen);
|
|
17
14
|
this.operationWriter = new OperationWriter(gen);
|
|
18
15
|
}
|
|
@@ -23,71 +20,13 @@ export class Writer {
|
|
|
23
20
|
flush() {
|
|
24
21
|
return this.buffer.join('');
|
|
25
22
|
}
|
|
26
|
-
generate(
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
let i = 0;
|
|
34
|
-
const parts = path.split('>');
|
|
35
|
-
do {
|
|
36
|
-
const part = parts[i].replace(/#\/c\/s/g, '#/components/schemas');
|
|
37
|
-
if (part === '*') {
|
|
38
|
-
// remove the current path from the selection array
|
|
39
|
-
selection = selection.filter((s) => s !== path);
|
|
40
|
-
if (current && current instanceof Composed) {
|
|
41
|
-
current.consolidate(selection);
|
|
42
|
-
}
|
|
43
|
-
// add all the props from the current node and exit loop
|
|
44
|
-
current?.props.forEach((child) => {
|
|
45
|
-
if (T.isLeaf(child)) {
|
|
46
|
-
selection.push(child.path());
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
current = collection.find((t) => t.id === part);
|
|
52
|
-
if (!current) {
|
|
53
|
-
const tree = T.print(last.ancestors()[0]);
|
|
54
|
-
// let's collect the possible paths so we don't have to debug
|
|
55
|
-
throw new Error('Could not find type: ' + part + ' from ' + path + '\nlast:\n' + last?.pathToRoot() + '\ntree: ' + tree);
|
|
56
|
-
}
|
|
57
|
-
// make sure we expand it before we move on to the next part
|
|
58
|
-
this.gen.expand(current);
|
|
59
|
-
last = current;
|
|
60
|
-
collection = Array.from(current.children.values()) || Array.from(current.props.values()) || [];
|
|
61
|
-
i++;
|
|
62
|
-
} while (i < parts.length);
|
|
63
|
-
// optional hook -- if the type in question has deps, add them here
|
|
64
|
-
const deps = _.invoke(current, 'dependencies');
|
|
65
|
-
if (deps) {
|
|
66
|
-
deps.filter((i) => !pendingTypes.has(i.id)).forEach((i) => pendingTypes.set(i.id, i));
|
|
67
|
-
}
|
|
68
|
-
if (current && !(current instanceof Scalar)) {
|
|
69
|
-
const parentType = PathCollector.findNonPropParent(current);
|
|
70
|
-
if (!pendingTypes.has(parentType.id)) {
|
|
71
|
-
pendingTypes.set(parentType.id, parentType);
|
|
72
|
-
}
|
|
73
|
-
// add all ancestors (of the parent of the prop) that are containers so they are generated accordingly
|
|
74
|
-
parentType
|
|
75
|
-
.ancestors()
|
|
76
|
-
.filter((t) => !pendingTypes.has(t.id) && T.isContainer(t))
|
|
77
|
-
.forEach((dep) => pendingTypes.set(dep.id, dep));
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
// first pass is to consolidate all Composed & Union nodes
|
|
81
|
-
const composed = Array.from(pendingTypes.values())
|
|
82
|
-
.filter((t) => t instanceof Composed)
|
|
83
|
-
.map((t) => t);
|
|
84
|
-
const context = this.gen.context;
|
|
85
|
-
for (const comp of composed) {
|
|
86
|
-
if (!comp.visited)
|
|
87
|
-
comp.visit(context);
|
|
88
|
-
comp.consolidate(selection).forEach((id) => pendingTypes.delete(id));
|
|
89
|
-
}
|
|
90
|
-
this.writeSchema(this, pendingTypes, selection);
|
|
23
|
+
generate(paths) {
|
|
24
|
+
const collector = new TypesCollector(this.gen);
|
|
25
|
+
collector.collect(paths);
|
|
26
|
+
return this.generateWith(collector.types, collector.expanded);
|
|
27
|
+
}
|
|
28
|
+
generateWith(types, selection) {
|
|
29
|
+
this.writeSchema(this, types, selection);
|
|
91
30
|
return selection;
|
|
92
31
|
}
|
|
93
32
|
writeSchema(writer, types, selection) {
|
|
@@ -96,10 +35,12 @@ export class Writer {
|
|
|
96
35
|
this.schemaWriter.writeDirectives(writer);
|
|
97
36
|
this.schemaWriter.writeJSONScalar(writer);
|
|
98
37
|
types.forEach((type) => {
|
|
99
|
-
|
|
38
|
+
const count = context.refCount.get(type.name) !== undefined ? context.refCount.get(type.name) : Infinity;
|
|
39
|
+
if (!generatedSet.has(type.id) && count > 0) {
|
|
100
40
|
type.generate(context, this, selection);
|
|
101
41
|
generatedSet.add(type.id);
|
|
102
42
|
}
|
|
43
|
+
context.decRefCount(type.name);
|
|
103
44
|
});
|
|
104
45
|
const expanded = [...this.gen.paths];
|
|
105
46
|
const queries = new Map(expanded.filter(([_k, type]) => type.id.startsWith('get:')));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../../src/oas/io/writer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../../src/oas/io/writer.ts"],"names":[],"mappings":"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","sourcesContent":["import { OasGen } from '../oasGen.js';\nimport { IType, T } from '../nodes/internal.js';\nimport { OperationWriter } from './operationWriter.js';\nimport { SchemaWriter } from './schemaWriter.js';\nimport { TypesCollector } from '../generator/typesCollector.js';\nimport _ from 'lodash';\n\nexport class Writer {\n private schemaWriter: SchemaWriter;\n private operationWriter: OperationWriter;\n public buffer: string[];\n\n constructor(public gen: OasGen) {\n this.buffer = [];\n this.schemaWriter = new SchemaWriter(gen);\n this.operationWriter = new OperationWriter(gen);\n }\n\n public write(input: string): Writer {\n this.buffer.push(input);\n return this;\n }\n\n public flush(): string {\n return this.buffer.join('');\n }\n\n public generate(paths: string[]): string[] {\n const collector = new TypesCollector(this.gen);\n collector.collect(paths);\n\n return this.generateWith(collector.types, collector.expanded);\n }\n\n public generateWith(types: Map<string, IType>, selection: string[]) {\n this.writeSchema(this, types, selection);\n return selection;\n }\n\n public writeSchema(writer: Writer, types: Map<string, IType>, selection: string[]): void {\n const context = this.gen.context!;\n const generatedSet = context.generatedSet;\n\n this.schemaWriter.writeDirectives(writer);\n this.schemaWriter.writeJSONScalar(writer);\n\n types.forEach((type: IType) => {\n const count = context.refCount.get(type.name) !== undefined ? context.refCount.get(type.name)! : Infinity;\n\n if (!generatedSet.has(type.id) && count > 0) {\n type.generate(context, this, selection);\n generatedSet.add(type.id);\n }\n\n context.decRefCount(type.name);\n });\n\n const expanded = [...this.gen.paths];\n\n const queries = new Map(expanded.filter(([_k, type]) => type.id.startsWith('get:')));\n const mutations = new Map(expanded.filter(([_k, type]) => T.isMutationType(type)));\n\n this.operationWriter.writeQuery(context, writer, queries, selection);\n this.operationWriter.writeMutations(context, writer, mutations, selection);\n\n writer.flush();\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circularRef.js","sourceRoot":"","sources":["../../../src/oas/nodes/circularRef.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,IAAI,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,OAAO,WAAY,SAAQ,IAAI;IAC5B,GAAG,CAAS;IAEnB,YAAY,MAAa,EAAE,IAAY;QACrC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,iBAAiB,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"circularRef.js","sourceRoot":"","sources":["../../../src/oas/nodes/circularRef.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,IAAI,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,OAAO,WAAY,SAAQ,IAAI;IAC5B,GAAG,CAAS;IAEnB,YAAY,MAAa,EAAE,IAAY;QACrC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,iBAAiB,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;IACzC,CAAC;IAEM,SAAS,CAAC,CAAa;QAC5B,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC;IACtF,CAAC;IAEM,GAAG,CAAC,MAAa;QACtB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAEM,KAAK,CAAC,OAAmB;QAC9B,KAAK,CAAC,OAAO,EAAE,yBAAyB,EAAE,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,2CAA2C;QAC3C,KAAK,CAAC,OAAO,EAAE,yBAAyB,EAAE,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IAEM,QAAQ,CAAC,OAAmB,EAAE,OAAe;QAClD,KAAK,CAAC,OAAO,EAAE,4BAA4B,EAAE,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,6DAA6D;QAC7D,KAAK,CAAC,OAAO,EAAE,4BAA4B,EAAE,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAEM,MAAM,CAAC,OAAmB,EAAE,MAAc;QAC/C,KAAK,CAAC,OAAO,EAAE,0BAA0B,EAAE,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAElE,MAAM;aACH,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;aACxD,KAAK,CAAC,4BAA4B,IAAI,CAAC,IAAI,oEAAoE,CAAC,CAAC;QAEpH,KAAK,CAAC,OAAO,EAAE,0BAA0B,EAAE,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC;CACF","sourcesContent":["import { IType, Type } from './internal.js';\nimport { trace } from '../log/trace.js';\nimport { OasContext } from '../oasContext.js';\nimport { Writer } from '../io/writer.js';\nimport { Naming } from '../utils/naming.js';\n\nexport class CircularRef extends Type {\n public ref?: IType;\n\n constructor(parent: IType, name: string) {\n super(parent, name);\n }\n\n get id(): string {\n return `circular-ref:#${this.ref?.id}`;\n }\n\n public forPrompt(_: OasContext): string {\n return `${Naming.getRefName(this.ref!.name)} (Circular Ref in: ${this.parent?.id})`;\n }\n\n public add(_child: IType): IType {\n throw new Error('Should not be adding a child to a circular ref');\n }\n\n public visit(context: OasContext): void {\n trace(context, '-> [circular-ref:visit]', `-> in: ${this.name}`);\n // Do nothing, this type is always visited.\n trace(context, '<- [circular-ref:visit]', `-> out: ${this.name}`);\n }\n\n public generate(context: OasContext, _writer: Writer): void {\n trace(context, '-> [circular-ref:generate]', `-> in: ${this.name}`);\n // Do nothing, we can't really generate a circular reference.\n trace(context, '<- [circular-ref:generate]', `-> out: ${this.name}`);\n }\n\n public select(context: OasContext, writer: Writer): void {\n trace(context, '-> [circular-ref:select]', `-> in: ${this.name}`);\n\n writer\n .write(' '.repeat(context.indent + context.stack.length))\n .write(`# Circular reference to '${this.name}' detected! Please re-visit the schema and remove the reference.\\n`);\n\n trace(context, '<- [circular-ref:select]', `-> out: ${this.name}`);\n }\n}\n"]}
|
package/dist/oas/nodes/comp.d.ts
CHANGED
|
@@ -14,7 +14,6 @@ export declare class Composed extends Type {
|
|
|
14
14
|
select(context: OasContext, writer: Writer, selection: string[]): void;
|
|
15
15
|
consolidate(selection: string[]): Set<string>;
|
|
16
16
|
private visitAllOfNode;
|
|
17
|
-
private visitOneOfNode;
|
|
18
17
|
add(child: IType): IType;
|
|
19
18
|
private updateName;
|
|
20
19
|
}
|
package/dist/oas/nodes/comp.js
CHANGED
|
@@ -34,7 +34,7 @@ export class Composed extends Type {
|
|
|
34
34
|
if (composedSchema.allOf != null) {
|
|
35
35
|
this.visitAllOfNode(context, composedSchema);
|
|
36
36
|
}
|
|
37
|
-
// represents a Union type
|
|
37
|
+
// represents a Union type and should be handled elsewhere
|
|
38
38
|
else if (composedSchema.oneOf != null) {
|
|
39
39
|
throw new Error('Unions should be constructed by its own object');
|
|
40
40
|
}
|
|
@@ -53,8 +53,7 @@ export class Composed extends Type {
|
|
|
53
53
|
writer.write(Naming.genTypeName(this.name));
|
|
54
54
|
return;
|
|
55
55
|
}
|
|
56
|
-
|
|
57
|
-
if (composedSchema.allOf != null) {
|
|
56
|
+
if (this.schema.allOf != null) {
|
|
58
57
|
const selected = this.selectedProps(selection);
|
|
59
58
|
if (selected.length > 0) {
|
|
60
59
|
writer.write(this.kind + ' ');
|
|
@@ -139,20 +138,6 @@ export class Composed extends Type {
|
|
|
139
138
|
context.store(this.name, this);
|
|
140
139
|
trace(context, '<- [composed::all-of]', `out: '${this.name}' of: ${allOfs.length} - refs: ${refs}`);
|
|
141
140
|
}
|
|
142
|
-
visitOneOfNode(context, schema) {
|
|
143
|
-
const oneOfs = schema.oneOf || [];
|
|
144
|
-
trace(context, '-> [composed::one-of]', `in: OneOf ${this.name} with size: ${oneOfs.length}`);
|
|
145
|
-
const result = Factory.fromUnion(context, this, oneOfs);
|
|
146
|
-
if (!result) {
|
|
147
|
-
throw new Error('Failed to create union type');
|
|
148
|
-
}
|
|
149
|
-
result.visit(context);
|
|
150
|
-
trace(context, '-> [composed::one-of]', `storing: ${this.name} with: ${this}`);
|
|
151
|
-
if (this.name != null) {
|
|
152
|
-
context.store(this.name, this);
|
|
153
|
-
}
|
|
154
|
-
trace(context, '<- [composed::one-of]', `out: OneOf ${this.name} with size: ${oneOfs.length}`);
|
|
155
|
-
}
|
|
156
141
|
add(child) {
|
|
157
142
|
let name = child.name;
|
|
158
143
|
let idx = 0;
|
|
@@ -171,12 +156,15 @@ export class Composed extends Type {
|
|
|
171
156
|
name = op.getGqlOpName() + 'Response';
|
|
172
157
|
}
|
|
173
158
|
else {
|
|
174
|
-
|
|
159
|
+
if (this.schema?.allOf?.length === 1) {
|
|
160
|
+
// because we are going to consolidate the children anyway, we can assume the name of the child.
|
|
161
|
+
// this avoids having a comp with name '[inline:...]' which does not generate properly
|
|
162
|
+
name = _.get(this.schema?.allOf[0], '$ref');
|
|
163
|
+
}
|
|
164
|
+
else
|
|
165
|
+
name = `[inline:${this.parent.name}]`;
|
|
175
166
|
}
|
|
176
167
|
}
|
|
177
|
-
// else if (this.parent instanceof Composed) {
|
|
178
|
-
// name = this.parent!.name + 'AllOf';
|
|
179
|
-
// }
|
|
180
168
|
this.name = name;
|
|
181
169
|
}
|
|
182
170
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comp.js","sourceRoot":"","sources":["../../../src/oas/nodes/comp.ts"],"names":[],"mappings":"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","sourcesContent":["import { Factory, Get, IType, Prop, ReferenceObject, Res, T, Type } from './internal.js';\nimport { SchemaObject } from 'oas/types';\n\nimport { trace } from '../log/trace.js';\nimport { OasContext } from '../oasContext.js';\nimport { Writer } from '../io/writer.js';\nimport { Naming } from '../utils/naming.js';\nimport _ from 'lodash';\n\nexport class Composed extends Type {\n constructor(\n parent: IType | undefined,\n public name: string,\n public schema: SchemaObject,\n public consolidated: boolean = false,\n ) {\n super(parent, name);\n this.updateName();\n }\n\n get id(): string {\n return `comp:${this.kind}:${this.name}`;\n }\n\n public forPrompt(_context: OasContext): string {\n return `[comp] ${Naming.getRefName(this.name)}`;\n }\n\n public visit(context: OasContext): void {\n if (this.visited) {\n return;\n }\n\n context.enter(this);\n trace(context, '-> [composed:visit]', 'in: ' + (this.name == null ? '[object]' : this.name));\n\n // If not in the context of a Composed or Param, log the composed schema.\n if (!context.inContextOf('Composed', this) && !context.inContextOf('Param', this)) {\n trace(context, '[comp]', ' in composed schema: ' + this.name);\n }\n\n const composedSchema = this.schema;\n // this will be a type declaration\n if (composedSchema.allOf != null) {\n this.visitAllOfNode(context, composedSchema);\n }\n // represents a Union type\n else if (composedSchema.oneOf != null) {\n throw new Error('Unions should be constructed by its own object');\n }\n // can't hand this yet\n else {\n throw new Error('Composed.visit: unsupported composed schema: ' + this.schema);\n }\n\n this.visited = true;\n trace(context, '<- [composed:visit]', 'out: ' + this.name);\n context.leave(this);\n }\n\n public generate(context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(this);\n trace(context, '-> [comp::generate]', `-> in: ${this.name}`);\n\n if (context.inContextOf('Res', this)) {\n writer.write(Naming.genTypeName(this.name));\n return;\n }\n\n const composedSchema = this.schema;\n if (composedSchema.allOf != null) {\n const selected = this.selectedProps(selection);\n\n if (selected.length > 0) {\n writer.write(this.kind + ' ');\n writer.write(_.upperFirst(Naming.getRefName(this.name)));\n writer.write(this.nameSuffix());\n writer.write(' {\\n');\n\n for (const prop of selected) {\n trace(context, ' [comp::generate]', `-> property: ${prop.name} (parent: ${prop.parent!.name})`);\n prop.generate(context, writer, selection);\n }\n\n writer.write('}\\n\\n');\n }\n }\n\n trace(context, '<- [comp::generate]', `-> out: ${this.name}`);\n context.leave(this);\n }\n\n public select(context: OasContext, writer: Writer, selection: string[]) {\n trace(context, '-> [comp::select]', `-> in: ${this.name}`);\n if (!this.consolidated) {\n this.consolidate(selection);\n }\n\n const composedSchema = this.schema;\n if (composedSchema.allOf != null) {\n const selected = this.selectedProps(selection);\n\n for (const prop of selected) {\n prop.select(context, writer, selection);\n }\n } else if (composedSchema.oneOf != null) {\n if (this.children.length === 1) {\n this.children[0].select(context, writer, selection);\n } else {\n throw new Error('Expected exactly one child for a oneOf schema');\n }\n }\n\n trace(context, '<- [comp::select]', `-> out: ${this.name}`);\n }\n\n public consolidate(selection: string[]): Set<string> {\n const ids: Set<string> = new Set();\n let props: Map<string, Prop> = new Map();\n\n const tree = T.print(this);\n const queue: IType[] = Array.from(this.children.values()).filter((child) => !(child instanceof Prop));\n\n while (queue.length > 0) {\n const node = queue.shift()!;\n ids.add(node.id);\n\n if (selection.length > 0) {\n node.props.forEach((prop) => {\n if (selection.find((s) => s.startsWith(prop.path()))) {\n props.set(prop.name, prop);\n }\n });\n } else {\n node.props.forEach((prop) => props.set(prop.name, prop));\n }\n\n // sort props\n props = new Map([...props.entries()].sort());\n\n const children = Array.from(node.children.values()).filter((child) => !(child instanceof Prop));\n queue.push(...children);\n }\n\n // copy all collected props from children into this node\n props.forEach((prop, name) => this.props.set(name, prop));\n\n this.consolidated = true;\n\n // and return the types we've used\n return ids;\n }\n\n private visitAllOfNode(context: OasContext, schema: SchemaObject): void {\n const allOfs = schema.allOf || [];\n const refs = allOfs.map((s) => (s as ReferenceObject).$ref);\n\n trace(context, '-> [composed::all-of]', `in: '${this.name}' of: ${allOfs.length} - refs: ${refs}`);\n\n for (let i = 0; i < allOfs.length; i++) {\n const allOfItemSchema = allOfs[i];\n\n const type = Factory.fromSchema(context, this, allOfItemSchema as SchemaObject);\n this.add(type);\n\n trace(context, ' [composed::all-of]', 'allOf type: ' + type);\n\n if (type) {\n type.visit(context);\n }\n }\n\n const tree = T.print(this);\n context.store(this.name, this);\n trace(context, '<- [composed::all-of]', `out: '${this.name}' of: ${allOfs.length} - refs: ${refs}`);\n }\n\n private visitOneOfNode(context: OasContext, schema: SchemaObject): void {\n const oneOfs = schema.oneOf || [];\n trace(context, '-> [composed::one-of]', `in: OneOf ${this.name} with size: ${oneOfs.length}`);\n\n const result = Factory.fromUnion(context, this, oneOfs as SchemaObject[]);\n if (!result) {\n throw new Error('Failed to create union type');\n }\n\n result.visit(context);\n\n trace(context, '-> [composed::one-of]', `storing: ${this.name} with: ${this}`);\n if (this.name != null) {\n context.store(this.name, this);\n }\n\n trace(context, '<- [composed::one-of]', `out: OneOf ${this.name} with size: ${oneOfs.length}`);\n }\n\n add(child: IType): IType {\n let name = child.name;\n let idx = 0;\n\n // TODO: this should not be applicable to Refs\n while (this.children.some((c) => c.name === name)) {\n name = `${child.name}:${++idx}`;\n }\n\n child.name = name;\n return super.add(child);\n }\n\n private updateName(): void {\n let name = this.name;\n\n if (!name) {\n if (this.parent instanceof Res) {\n const op = this.parent!.parent as Get;\n name = op.getGqlOpName() + 'Response';\n } else {\n name = `[inline:${this.parent!.name}]`;\n }\n }\n // else if (this.parent instanceof Composed) {\n // name = this.parent!.name + 'AllOf';\n // }\n\n this.name = name;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"comp.js","sourceRoot":"","sources":["../../../src/oas/nodes/comp.ts"],"names":[],"mappings":"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","sourcesContent":["import { Factory, Get, IType, Prop, ReferenceObject, Res, T, Type } from './internal.js';\nimport { SchemaObject } from 'oas/types';\n\nimport { trace } from '../log/trace.js';\nimport { OasContext } from '../oasContext.js';\nimport { Writer } from '../io/writer.js';\nimport { Naming } from '../utils/naming.js';\nimport _ from 'lodash';\n\nexport class Composed extends Type {\n constructor(\n parent: IType | undefined,\n public name: string,\n public schema: SchemaObject,\n public consolidated: boolean = false,\n ) {\n super(parent, name);\n this.updateName();\n }\n\n get id(): string {\n return `comp:${this.kind}:${this.name}`;\n }\n\n public forPrompt(_context: OasContext): string {\n return `[comp] ${Naming.getRefName(this.name)}`;\n }\n\n public visit(context: OasContext): void {\n if (this.visited) {\n return;\n }\n\n context.enter(this);\n trace(context, '-> [composed:visit]', 'in: ' + (this.name == null ? '[object]' : this.name));\n\n // If not in the context of a Composed or Param, log the composed schema.\n if (!context.inContextOf('Composed', this) && !context.inContextOf('Param', this)) {\n trace(context, '[comp]', ' in composed schema: ' + this.name);\n }\n\n const composedSchema = this.schema;\n\n // this will be a type declaration\n if (composedSchema.allOf != null) {\n this.visitAllOfNode(context, composedSchema);\n }\n // represents a Union type and should be handled elsewhere\n else if (composedSchema.oneOf != null) {\n throw new Error('Unions should be constructed by its own object');\n }\n // can't hand this yet\n else {\n throw new Error('Composed.visit: unsupported composed schema: ' + this.schema);\n }\n\n this.visited = true;\n trace(context, '<- [composed:visit]', 'out: ' + this.name);\n context.leave(this);\n }\n\n public generate(context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(this);\n trace(context, '-> [comp::generate]', `-> in: ${this.name}`);\n\n if (context.inContextOf('Res', this)) {\n writer.write(Naming.genTypeName(this.name));\n return;\n }\n\n if (this.schema.allOf != null) {\n const selected = this.selectedProps(selection);\n\n if (selected.length > 0) {\n writer.write(this.kind + ' ');\n writer.write(_.upperFirst(Naming.getRefName(this.name)));\n writer.write(this.nameSuffix());\n writer.write(' {\\n');\n\n for (const prop of selected) {\n trace(context, ' [comp::generate]', `-> property: ${prop.name} (parent: ${prop.parent!.name})`);\n prop.generate(context, writer, selection);\n }\n\n writer.write('}\\n\\n');\n }\n }\n\n trace(context, '<- [comp::generate]', `-> out: ${this.name}`);\n context.leave(this);\n }\n\n public select(context: OasContext, writer: Writer, selection: string[]) {\n trace(context, '-> [comp::select]', `-> in: ${this.name}`);\n if (!this.consolidated) {\n this.consolidate(selection);\n }\n\n const composedSchema = this.schema;\n if (composedSchema.allOf != null) {\n const selected = this.selectedProps(selection);\n\n for (const prop of selected) {\n prop.select(context, writer, selection);\n }\n } else if (composedSchema.oneOf != null) {\n if (this.children.length === 1) {\n this.children[0].select(context, writer, selection);\n } else {\n throw new Error('Expected exactly one child for a oneOf schema');\n }\n }\n\n trace(context, '<- [comp::select]', `-> out: ${this.name}`);\n }\n\n public consolidate(selection: string[]): Set<string> {\n const ids: Set<string> = new Set();\n let props: Map<string, Prop> = new Map();\n\n const tree = T.print(this);\n const queue: IType[] = Array.from(this.children.values()).filter((child) => !(child instanceof Prop));\n\n while (queue.length > 0) {\n const node = queue.shift()!;\n ids.add(node.id);\n\n if (selection.length > 0) {\n node.props.forEach((prop) => {\n if (selection.find((s) => s.startsWith(prop.path()))) {\n props.set(prop.name, prop);\n }\n });\n } else {\n node.props.forEach((prop) => props.set(prop.name, prop));\n }\n\n // sort props\n props = new Map([...props.entries()].sort());\n\n const children = Array.from(node.children.values()).filter((child) => !(child instanceof Prop));\n queue.push(...children);\n }\n\n // copy all collected props from children into this node\n props.forEach((prop, name) => this.props.set(name, prop));\n\n this.consolidated = true;\n\n // and return the types we've used\n return ids;\n }\n\n private visitAllOfNode(context: OasContext, schema: SchemaObject): void {\n const allOfs = schema.allOf || [];\n const refs = allOfs.map((s) => (s as ReferenceObject).$ref);\n\n trace(context, '-> [composed::all-of]', `in: '${this.name}' of: ${allOfs.length} - refs: ${refs}`);\n\n for (let i = 0; i < allOfs.length; i++) {\n const allOfItemSchema = allOfs[i];\n\n const type = Factory.fromSchema(context, this, allOfItemSchema as SchemaObject);\n this.add(type);\n\n trace(context, ' [composed::all-of]', 'allOf type: ' + type);\n\n if (type) {\n type.visit(context);\n }\n }\n\n const tree = T.print(this);\n context.store(this.name, this);\n trace(context, '<- [composed::all-of]', `out: '${this.name}' of: ${allOfs.length} - refs: ${refs}`);\n }\n\n add(child: IType): IType {\n let name = child.name;\n let idx = 0;\n\n // TODO: this should not be applicable to Refs\n while (this.children.some((c) => c.name === name)) {\n name = `${child.name}:${++idx}`;\n }\n\n child.name = name;\n return super.add(child);\n }\n\n private updateName(): void {\n let name = this.name;\n\n if (!name) {\n if (this.parent instanceof Res) {\n const op = this.parent!.parent as Get;\n name = op.getGqlOpName() + 'Response';\n } else {\n if (this.schema?.allOf?.length === 1) {\n // because we are going to consolidate the children anyway, we can assume the name of the child.\n // this avoids having a comp with name '[inline:...]' which does not generate properly\n name = _.get(this.schema?.allOf[0], '$ref') as string;\n } else name = `[inline:${this.parent!.name}]`;\n }\n }\n\n this.name = name;\n }\n}\n"]}
|
|
@@ -6,8 +6,9 @@ export declare class PropArray extends Prop {
|
|
|
6
6
|
get id(): string;
|
|
7
7
|
visit(context: OasContext): void;
|
|
8
8
|
setItems(items: IType): void;
|
|
9
|
+
generateValue(context: OasContext, writer: Writer): void;
|
|
9
10
|
getValue(context: OasContext): string;
|
|
10
|
-
forPrompt(
|
|
11
|
+
forPrompt(_context: OasContext): string;
|
|
11
12
|
select(context: OasContext, writer: Writer, selection: string[]): void;
|
|
12
13
|
needsBrackets(child?: IType): boolean;
|
|
13
14
|
}
|
|
@@ -24,6 +24,19 @@ export class PropArray extends Prop {
|
|
|
24
24
|
this.add(items);
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
+
generateValue(context, writer) {
|
|
28
|
+
if (T.isScalarArray(this.items)) {
|
|
29
|
+
const arr = this.items;
|
|
30
|
+
writer.write('[');
|
|
31
|
+
arr.generate(context, writer, []);
|
|
32
|
+
writer.write(']\n');
|
|
33
|
+
// because it's a scalar array, we can assume that's all we need to generate
|
|
34
|
+
context.generatedSet.add(this.items.id);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
super.generateValue(context, writer);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
27
40
|
getValue(context) {
|
|
28
41
|
if (this.items && T.isContainer(this.items)) {
|
|
29
42
|
const type = Naming.genTypeName(this.items.name) + this.items.nameSuffix();
|
|
@@ -31,7 +44,7 @@ export class PropArray extends Prop {
|
|
|
31
44
|
}
|
|
32
45
|
return `[${this.items.name}]`;
|
|
33
46
|
}
|
|
34
|
-
forPrompt(
|
|
47
|
+
forPrompt(_context) {
|
|
35
48
|
if (this.items && T.isContainer(this.items)) {
|
|
36
49
|
return `[prop] ${this.name}: [${Naming.genTypeName(this.items?.name)}] (Array)`;
|
|
37
50
|
}
|
|
@@ -47,13 +60,8 @@ export class PropArray extends Prop {
|
|
|
47
60
|
writer.write('\n');
|
|
48
61
|
context.enter(this);
|
|
49
62
|
}
|
|
50
|
-
//
|
|
51
|
-
|
|
52
|
-
const selected = Array.from(this.items.children.values()).filter((prop) => selection.find((s) => s.startsWith(prop.path())));
|
|
53
|
-
for (const child of selected) {
|
|
54
|
-
child.select(context, writer, selection);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
63
|
+
// now allow the items type to select its properties
|
|
64
|
+
this.items.select(context, writer, selection);
|
|
57
65
|
if (this.needsBrackets(this.items)) {
|
|
58
66
|
context.leave(this);
|
|
59
67
|
writer.write(' '.repeat(context.indent + context.stack.length)).write('}');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"propArray.js","sourceRoot":"","sources":["../../../src/oas/nodes/propArray.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"propArray.js","sourceRoot":"","sources":["../../../src/oas/nodes/propArray.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arr, IType, Prop, T, Type } from './internal.js';\nimport { trace } from '../log/trace.js';\nimport { OasContext } from '../oasContext.js';\nimport { Writer } from '../io/writer.js';\nimport { Naming } from '../utils/naming.js';\nimport { context } from 'esbuild';\n\nexport class PropArray extends Prop {\n public items?: IType;\n\n get id(): string {\n return `prop:array:#${this.name}`;\n }\n\n public override visit(context: OasContext): void {\n if (this.visited) {\n return;\n }\n\n context.enter(this);\n trace(context, '-> [prop-array:visit]', 'in');\n\n trace(context, ' [prop-array:visit]', 'type: ' + this.items);\n this.items?.visit(context);\n this.visited = true;\n\n trace(context, '<- [prop:array:visit]', 'out');\n context.leave(this);\n }\n\n public setItems(items: IType): void {\n this.items = items;\n if (!this.children.includes(items)) {\n this.add(items);\n }\n }\n\n generateValue(context: OasContext, writer: Writer) {\n if (T.isScalarArray(this.items!)) {\n const arr: Arr = this.items as Arr;\n\n writer.write('[');\n arr.generate(context, writer, []);\n writer.write(']\\n');\n\n // because it's a scalar array, we can assume that's all we need to generate\n context.generatedSet.add(this.items!.id);\n } else {\n super.generateValue(context, writer);\n }\n }\n\n public override getValue(context: OasContext): string {\n if (this.items && T.isContainer(this.items)) {\n const type = Naming.genTypeName(this.items.name) + (this.items as Type).nameSuffix();\n return `[${type}]`;\n }\n\n return `[${this.items!.name}]`;\n }\n\n public forPrompt(_context: OasContext): string {\n if (this.items && T.isContainer(this.items)) {\n return `[prop] ${this.name}: [${Naming.genTypeName(this.items?.name)}] (Array)`;\n }\n\n return `[prop] ${this.name}: [${this.items!.name}] (Array)`;\n }\n\n public select(context: OasContext, writer: Writer, selection: string[]) {\n trace(context, '-> [prop-array:select]', 'in: ' + this.name);\n\n const fieldName = this.name;\n const sanitised = Naming.sanitiseFieldForSelect(fieldName, this.parent?.kind === 'input');\n writer.write(' '.repeat(context.indent + context.stack.length)).write(sanitised);\n\n if (this.needsBrackets(this.items!)) {\n writer.write(' {');\n writer.write('\\n');\n context.enter(this);\n }\n\n // now allow the items type to select its properties\n this.items!.select(context, writer, selection);\n\n if (this.needsBrackets(this.items!)) {\n context.leave(this);\n writer.write(' '.repeat(context.indent + context.stack.length)).write('}');\n }\n // writer.append('\\n');\n if (context.generateOptions.showParentInSelections) {\n writer.write(' # ').write(Naming.getRefName(this.parent!.name));\n }\n\n writer.write('\\n');\n\n trace(context, '<- [prop:array:select]', 'out');\n }\n\n public needsBrackets(child?: IType): boolean {\n if (!child) return false;\n return T.isContainer(child);\n }\n}\n"]}
|