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.
Files changed (50) hide show
  1. package/dist/oas/generator/typesCollector.d.ts +9 -0
  2. package/dist/oas/generator/typesCollector.js +147 -0
  3. package/dist/oas/generator/typesCollector.js.map +1 -0
  4. package/dist/oas/io/writer.d.ts +2 -2
  5. package/dist/oas/io/writer.js +12 -71
  6. package/dist/oas/io/writer.js.map +1 -1
  7. package/dist/oas/nodes/circularRef.js +0 -1
  8. package/dist/oas/nodes/circularRef.js.map +1 -1
  9. package/dist/oas/nodes/comp.d.ts +0 -1
  10. package/dist/oas/nodes/comp.js +9 -21
  11. package/dist/oas/nodes/comp.js.map +1 -1
  12. package/dist/oas/nodes/propArray.d.ts +2 -1
  13. package/dist/oas/nodes/propArray.js +16 -8
  14. package/dist/oas/nodes/propArray.js.map +1 -1
  15. package/dist/oas/nodes/propScalar.js +6 -2
  16. package/dist/oas/nodes/propScalar.js.map +1 -1
  17. package/dist/oas/nodes/typeUtils.d.ts +1 -0
  18. package/dist/oas/nodes/typeUtils.js +6 -2
  19. package/dist/oas/nodes/typeUtils.js.map +1 -1
  20. package/dist/oas/nodes/union.d.ts +3 -2
  21. package/dist/oas/nodes/union.js +60 -22
  22. package/dist/oas/nodes/union.js.map +1 -1
  23. package/dist/oas/oasContext.d.ts +2 -0
  24. package/dist/oas/oasContext.js +11 -0
  25. package/dist/oas/oasContext.js.map +1 -1
  26. package/dist/oas/oasGen.d.ts +3 -0
  27. package/dist/oas/oasGen.js +15 -1
  28. package/dist/oas/oasGen.js.map +1 -1
  29. package/dist/oas/utils/naming.d.ts +1 -0
  30. package/dist/oas/utils/naming.js +9 -2
  31. package/dist/oas/utils/naming.js.map +1 -1
  32. package/dist/oas/visitor/GeneratorVisitor.d.ts +39 -0
  33. package/dist/oas/visitor/GeneratorVisitor.js +310 -0
  34. package/dist/oas/visitor/GeneratorVisitor.js.map +1 -0
  35. package/dist/oas/visitor/NodeVisitor.d.ts +30 -0
  36. package/dist/oas/visitor/NodeVisitor.js +2 -0
  37. package/dist/oas/visitor/NodeVisitor.js.map +1 -0
  38. package/dist/oas/visitor/example.d.ts +17 -0
  39. package/dist/oas/visitor/example.js +28 -0
  40. package/dist/oas/visitor/example.js.map +1 -0
  41. package/dist/oas/visitor/index.d.ts +2 -0
  42. package/dist/oas/visitor/index.js +2 -0
  43. package/dist/oas/visitor/index.js.map +1 -0
  44. package/dist/tests/runners.js +2 -1
  45. package/dist/tests/runners.js.map +1 -1
  46. package/dist/tsconfig.tsbuildinfo +1 -1
  47. package/package.json +1 -1
  48. package/dist/oas/io/pathCollector.d.ts +0 -11
  49. package/dist/oas/io/pathCollector.js +0 -95
  50. package/dist/oas/io/pathCollector.js.map +0 -1
@@ -0,0 +1,9 @@
1
+ import { IType } from '../nodes/internal.js';
2
+ import { OasGen } from '../oasGen.js';
3
+ export declare class TypesCollector {
4
+ private gen;
5
+ types: Map<string, IType>;
6
+ expanded: string[];
7
+ constructor(gen: OasGen);
8
+ collect(selection: string[]): void;
9
+ }
@@ -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"]}
@@ -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(selection: string[]): string[];
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
  }
@@ -1,18 +1,15 @@
1
- import _ from 'lodash';
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(selection) {
27
- const pendingTypes = new Map();
28
- selection = this.pathCollector.collectExpandedPaths(selection);
29
- for (const path of selection) {
30
- let collection = Array.from(this.gen.paths.values());
31
- let current;
32
- let last;
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
- if (!generatedSet.has(type.id)) {
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":"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","sourcesContent":["import _ from 'lodash';\nimport { OasGen } from '../oasGen.js';\nimport { Composed, IType, Obj, Scalar, T } from '../nodes/internal.js';\nimport { OperationWriter } from './operationWriter.js';\nimport { PathCollector } from './pathCollector.js';\nimport { SchemaWriter } from './schemaWriter.js';\n\nexport class Writer {\n private pathCollector: PathCollector;\n private schemaWriter: SchemaWriter;\n private operationWriter: OperationWriter;\n public buffer: string[];\n\n constructor(public gen: OasGen) {\n this.buffer = [];\n this.pathCollector = new PathCollector(gen);\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(selection: string[]): string[] {\n const pendingTypes: Map<string, IType> = new Map();\n\n selection = this.pathCollector.collectExpandedPaths(selection);\n\n for (const path of selection) {\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 selection array\n selection = selection.filter((s) => s !== path);\n\n if (current && current instanceof Composed) {\n current!.consolidate(selection);\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 selection.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');\n if (deps) {\n deps.filter((i) => !pendingTypes.has(i.id)).forEach((i) => pendingTypes.set(i.id, i));\n }\n\n if (current && !(current instanceof Scalar)) {\n const parentType = PathCollector.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) => pendingTypes.set(dep.id, dep));\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(selection).forEach((id) => pendingTypes.delete(id));\n }\n\n this.writeSchema(this, pendingTypes, 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 if (!generatedSet.has(type.id)) {\n type.generate(context, this, selection);\n generatedSet.add(type.id);\n }\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
+ {"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"]}
@@ -8,7 +8,6 @@ export class CircularRef extends Type {
8
8
  }
9
9
  get id() {
10
10
  return `circular-ref:#${this.ref?.id}`;
11
- // return this.child.id;
12
11
  }
13
12
  forPrompt(_) {
14
13
  return `${Naming.getRefName(this.ref.name)} (Circular Ref in: ${this.parent?.id})`;
@@ -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;QACvC,wBAAwB;IAC1B,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 // return this.child.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"]}
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"]}
@@ -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
  }
@@ -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
- const composedSchema = this.schema;
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
- name = `[inline:${this.parent.name}]`;
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(context: OasContext): string;
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(context) {
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
- // Select each child of the items Prop.
51
- if (this.needsBrackets(this.items)) {
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,EAAS,IAAI,EAAE,CAAC,EAAQ,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,OAAO,SAAU,SAAQ,IAAI;IAC1B,KAAK,CAAS;IAErB,IAAI,EAAE;QACJ,OAAO,eAAe,IAAI,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;IAEe,KAAK,CAAC,OAAmB;QACvC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,KAAK,CAAC,OAAO,EAAE,uBAAuB,EAAE,IAAI,CAAC,CAAC;QAE9C,KAAK,CAAC,OAAO,EAAE,uBAAuB,EAAE,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,KAAK,CAAC,OAAO,EAAE,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAEM,QAAQ,CAAC,KAAY;QAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAEe,QAAQ,CAAC,OAAmB;QAC1C,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAI,IAAI,CAAC,KAAc,CAAC,UAAU,EAAE,CAAC;YACrF,OAAO,IAAI,IAAI,GAAG,CAAC;QACrB,CAAC;QAED,OAAO,IAAI,IAAI,CAAC,KAAM,CAAC,IAAI,GAAG,CAAC;IACjC,CAAC;IAEM,SAAS,CAAC,OAAmB;QAClC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,UAAU,IAAI,CAAC,IAAI,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;QAClF,CAAC;QAED,OAAO,UAAU,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,KAAM,CAAC,IAAI,WAAW,CAAC;IAC9D,CAAC;IAEM,MAAM,CAAC,OAAmB,EAAE,MAAc,EAAE,SAAmB;QACpE,KAAK,CAAC,OAAO,EAAE,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;QAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,sBAAsB,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC;QAC1F,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEjF,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAM,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QAED,uCAAuC;QACvC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACzE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CACjD,CAAC;YAEF,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;gBAC7B,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAM,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7E,CAAC;QACD,uBAAuB;QACvB,IAAI,OAAO,CAAC,eAAe,CAAC,sBAAsB,EAAE,CAAC;YACnD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEnB,KAAK,CAAC,OAAO,EAAE,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAEM,aAAa,CAAC,KAAa;QAChC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;CACF","sourcesContent":["import { 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';\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 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 // Select each child of the items Prop.\n if (this.needsBrackets(this.items)) {\n const selected = Array.from(this.items!.children.values()).filter((prop) =>\n selection.find((s) => s.startsWith(prop.path())),\n );\n\n for (const child of selected) {\n child.select(context, writer, selection);\n }\n }\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"]}
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"]}