apollo-conn-gen 0.4.2 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/oas.js +2 -2
- package/dist/cli/oas.js.map +1 -1
- 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 +14 -74
- 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/obj.d.ts +2 -0
- package/dist/oas/nodes/obj.js +15 -2
- package/dist/oas/nodes/obj.js.map +1 -1
- package/dist/oas/nodes/propArray.d.ts +2 -1
- package/dist/oas/nodes/propArray.js +17 -9
- package/dist/oas/nodes/propArray.js.map +1 -1
- package/dist/oas/nodes/propScalar.js +7 -3
- package/dist/oas/nodes/propScalar.js.map +1 -1
- package/dist/oas/nodes/typeUtils.d.ts +3 -0
- package/dist/oas/nodes/typeUtils.js +16 -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 +2 -1
- package/dist/oas/utils/naming.js +12 -5
- 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
package/dist/oas/nodes/obj.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { Arr, Body, Factory, PropArray, Type, Res } from './internal.js';
|
|
1
|
+
import { Arr, Body, Factory, PropArray, Type, Res, T } from './internal.js';
|
|
2
2
|
import { trace } from '../log/trace.js';
|
|
3
3
|
import { Naming } from '../utils/naming.js';
|
|
4
4
|
import _ from 'lodash';
|
|
5
5
|
export class Obj extends Type {
|
|
6
6
|
schema;
|
|
7
7
|
synthetic = false;
|
|
8
|
+
nameConflict = false;
|
|
8
9
|
constructor(parent, name, schema) {
|
|
9
10
|
super(parent, name);
|
|
10
11
|
this.schema = schema;
|
|
@@ -25,10 +26,17 @@ export class Obj extends Type {
|
|
|
25
26
|
if (!context.inContextOf('Composed', this)) {
|
|
26
27
|
trace(context, '[obj]', 'In object: ' + (this.name ? this.name : this.parent?.name));
|
|
27
28
|
}
|
|
29
|
+
// do we have a name conflict?
|
|
30
|
+
if (context.types.has(this.name) && !T.isRef(this.name) && this.synthetic) {
|
|
31
|
+
this.resolveNameConflict(context);
|
|
32
|
+
}
|
|
28
33
|
this.visitProperties(context);
|
|
29
34
|
this.visited = true;
|
|
30
35
|
if (this.name) {
|
|
31
|
-
|
|
36
|
+
if (!T.isRef(this.name) && context.types.has(this.name))
|
|
37
|
+
this.nameConflict = true;
|
|
38
|
+
else
|
|
39
|
+
context.store(this.name, this);
|
|
32
40
|
}
|
|
33
41
|
trace(context, '<- [obj:visit]', 'out ' + this.name);
|
|
34
42
|
context.leave(this);
|
|
@@ -105,6 +113,7 @@ export class Obj extends Type {
|
|
|
105
113
|
// is our parent an array?
|
|
106
114
|
if (parent instanceof Arr || parent instanceof PropArray) {
|
|
107
115
|
// if so, synthesize a name based on the parent name
|
|
116
|
+
this.synthetic = true;
|
|
108
117
|
name = Naming.genTypeName(Naming.getRefName(parentName) + 'Item');
|
|
109
118
|
}
|
|
110
119
|
// if the parent is a response, we can use the operation name and append "Response"
|
|
@@ -128,5 +137,9 @@ export class Obj extends Type {
|
|
|
128
137
|
}
|
|
129
138
|
this.name = name;
|
|
130
139
|
}
|
|
140
|
+
resolveNameConflict(context) {
|
|
141
|
+
const container = T.findNonPropParent(this.parent);
|
|
142
|
+
this.name = container.name + '_' + this.name;
|
|
143
|
+
}
|
|
131
144
|
}
|
|
132
145
|
//# sourceMappingURL=obj.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"obj.js","sourceRoot":"","sources":["../../../src/oas/nodes/obj.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arr, Body, Factory, Get, IType, PropArray, Type, Res } from './internal.js';\nimport { SchemaObject } from 'oas/types';\nimport { trace } from '../log/trace.js';\nimport { OasContext } from '../oasContext.js';\nimport { Writer } from '../io/writer.js';\nimport { Naming } from '../utils/naming.js';\n\nimport _ from 'lodash';\n\nexport class Obj extends Type {\n synthetic: boolean = false;\n\n constructor(\n parent: IType | undefined,\n name: string,\n public schema: SchemaObject,\n ) {\n super(parent, name);\n this.updateName();\n }\n\n public forPrompt(_context: OasContext): string {\n return `[object] ${Naming.getRefName(this.name)}`;\n }\n\n get id(): string {\n return `obj:${this.kind}:${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, '-> [obj:visit]', 'in ' + this.name);\n\n if (!context.inContextOf('Composed', this)) {\n trace(context, '[obj]', 'In object: ' + (this.name ? this.name : this.parent?.name));\n }\n\n this.visitProperties(context);\n this.visited = true;\n\n if (this.name) {\n context.store(this.name, this);\n }\n\n trace(context, '<- [obj:visit]', 'out ' + this.name);\n context.leave(this);\n }\n\n public generate(context: OasContext, writer: Writer, selection: string[]): void {\n if (_.isEmpty(this.props)) {\n return;\n }\n\n if (context.inContextOf('Res', this)) {\n writer.write(Naming.genTypeName(this.name));\n return;\n }\n\n context.enter(this);\n trace(context, '-> [obj::generate]', `-> in: ${this.name}`);\n\n const sanitised = Naming.genTypeName(this.name);\n const refName = Naming.getRefName(this.name);\n\n writer\n .write(this.kind + ' ')\n .write(sanitised === refName ? refName : sanitised)\n .write(this.nameSuffix())\n .write(' {\\n');\n\n const selected = this.selectedProps(selection);\n\n for (const prop of selected) {\n trace(context, '-> [obj::generate]', `-> property: ${prop.name} (parent: ${prop.parent!.name})`);\n prop.generate(context, writer, selection);\n }\n\n writer.write('}\\n\\n');\n\n trace(context, '<- [obj::generate]', `-> out: ${this.name}`);\n context.leave(this);\n }\n\n public select(context: OasContext, writer: Writer, selection: string[]) {\n trace(context, '-> [obj::select]', `-> in: ${this.name}`);\n\n const selected = this.selectedProps(selection);\n for (const prop of selected) {\n prop.select(context, writer, selection);\n }\n\n trace(context, '<- [obj::select]', `-> out: ${this.name}`);\n }\n\n private visitProperties(context: OasContext): void {\n if (!this.schema.properties) {\n return;\n }\n\n const properties = this.schema.properties as Record<string, SchemaObject>;\n const propKeys = Object.keys(properties);\n trace(context, '-> [obj::props]', 'in props ' + (propKeys.length === 0 ? '0' : propKeys.length.toString()));\n\n if (propKeys.length === 0) {\n trace(context, '<- [obj::props]', 'no props ' + this.props.size);\n return;\n }\n\n const sorted = Object.entries(properties).sort((a, b) => a[0].toLowerCase().localeCompare(b[0].toLowerCase()));\n\n for (const [key, schemaValue] of sorted) {\n const prop = Factory.fromProp(context, this, key, schemaValue);\n this.props.set(prop.name, prop);\n\n if (!this.children.includes(prop)) {\n this.add(prop);\n }\n }\n\n // required can also be set in a separate array too, apparently\n if (_.isArray(this.schema.required)) {\n this.schema.required.forEach((name) => {\n const prop = this.props.get(name);\n if (prop) prop!.required = true;\n });\n }\n\n trace(context, '<- [obj::props]', 'out props ' + this.props.size);\n }\n\n private updateName(): void {\n let name = this.name;\n // If we are an inline object named \"items\", try to create a better name.\n if (!name || name === 'items') {\n const parent = this.parent;\n const parentName = parent!.name;\n\n // is our parent an array?\n if (parent instanceof Arr || parent instanceof PropArray) {\n // if so, synthesize a name based on the parent name\n name = Naming.genTypeName(Naming.getRefName(parentName) + 'Item');\n }\n // if the parent is a response, we can use the operation name and append \"Response\"\n else if (parent instanceof Res) {\n const op = parent.parent as Get;\n name = op.getGqlOpName() + 'Response';\n }\n // for posts\n else if (parent instanceof Body) {\n // const op = parent.parent as Post;\n name = this.name + 'Input';\n }\n // if the parent is an object then we can use the parent name\n else if (parent instanceof Obj) {\n name = parentName + 'Obj';\n }\n // extreme case -- we synthesize an anonymous name\n else {\n name = `[inline:${this.parent!.name}]`;\n }\n }\n\n this.name = name;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"obj.js","sourceRoot":"","sources":["../../../src/oas/nodes/obj.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arr, Body, Factory, Get, IType, PropArray, Type, Res, T } from './internal.js';\nimport { SchemaObject } from 'oas/types';\nimport { trace } from '../log/trace.js';\nimport { OasContext } from '../oasContext.js';\nimport { Writer } from '../io/writer.js';\nimport { Naming } from '../utils/naming.js';\n\nimport _ from 'lodash';\n\nexport class Obj extends Type {\n synthetic: boolean = false;\n nameConflict: boolean = false;\n\n constructor(\n parent: IType | undefined,\n name: string,\n public schema: SchemaObject,\n ) {\n super(parent, name);\n this.updateName();\n }\n\n public forPrompt(_context: OasContext): string {\n return `[object] ${Naming.getRefName(this.name)}`;\n }\n\n get id(): string {\n return `obj:${this.kind}:${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, '-> [obj:visit]', 'in ' + this.name);\n\n if (!context.inContextOf('Composed', this)) {\n trace(context, '[obj]', 'In object: ' + (this.name ? this.name : this.parent?.name));\n }\n\n // do we have a name conflict?\n if (context.types.has(this.name) && !T.isRef(this.name) && this.synthetic) {\n this.resolveNameConflict(context);\n }\n\n this.visitProperties(context);\n this.visited = true;\n\n if (this.name) {\n if (!T.isRef(this.name) && context.types.has(this.name)) this.nameConflict = true;\n else context.store(this.name, this);\n }\n\n trace(context, '<- [obj:visit]', 'out ' + this.name);\n context.leave(this);\n }\n\n public generate(context: OasContext, writer: Writer, selection: string[]): void {\n if (_.isEmpty(this.props)) {\n return;\n }\n\n if (context.inContextOf('Res', this)) {\n writer.write(Naming.genTypeName(this.name));\n return;\n }\n\n context.enter(this);\n trace(context, '-> [obj::generate]', `-> in: ${this.name}`);\n\n const sanitised = Naming.genTypeName(this.name);\n const refName = Naming.getRefName(this.name);\n\n writer\n .write(this.kind + ' ')\n .write(sanitised === refName ? refName : sanitised)\n .write(this.nameSuffix())\n .write(' {\\n');\n\n const selected = this.selectedProps(selection);\n\n for (const prop of selected) {\n trace(context, '-> [obj::generate]', `-> property: ${prop.name} (parent: ${prop.parent!.name})`);\n prop.generate(context, writer, selection);\n }\n\n writer.write('}\\n\\n');\n\n trace(context, '<- [obj::generate]', `-> out: ${this.name}`);\n context.leave(this);\n }\n\n public select(context: OasContext, writer: Writer, selection: string[]) {\n trace(context, '-> [obj::select]', `-> in: ${this.name}`);\n\n const selected = this.selectedProps(selection);\n for (const prop of selected) {\n prop.select(context, writer, selection);\n }\n\n trace(context, '<- [obj::select]', `-> out: ${this.name}`);\n }\n\n private visitProperties(context: OasContext): void {\n if (!this.schema.properties) {\n return;\n }\n\n const properties = this.schema.properties as Record<string, SchemaObject>;\n const propKeys = Object.keys(properties);\n trace(context, '-> [obj::props]', 'in props ' + (propKeys.length === 0 ? '0' : propKeys.length.toString()));\n\n if (propKeys.length === 0) {\n trace(context, '<- [obj::props]', 'no props ' + this.props.size);\n return;\n }\n\n const sorted = Object.entries(properties).sort((a, b) => a[0].toLowerCase().localeCompare(b[0].toLowerCase()));\n\n for (const [key, schemaValue] of sorted) {\n const prop = Factory.fromProp(context, this, key, schemaValue);\n this.props.set(prop.name, prop);\n\n if (!this.children.includes(prop)) {\n this.add(prop);\n }\n }\n\n // required can also be set in a separate array too, apparently\n if (_.isArray(this.schema.required)) {\n this.schema.required.forEach((name) => {\n const prop = this.props.get(name);\n if (prop) prop!.required = true;\n });\n }\n\n trace(context, '<- [obj::props]', 'out props ' + this.props.size);\n }\n\n private updateName(): void {\n let name = this.name;\n // If we are an inline object named \"items\", try to create a better name.\n if (!name || name === 'items') {\n const parent = this.parent;\n const parentName = parent!.name;\n\n // is our parent an array?\n if (parent instanceof Arr || parent instanceof PropArray) {\n // if so, synthesize a name based on the parent name\n this.synthetic = true;\n name = Naming.genTypeName(Naming.getRefName(parentName) + 'Item');\n }\n // if the parent is a response, we can use the operation name and append \"Response\"\n else if (parent instanceof Res) {\n const op = parent.parent as Get;\n name = op.getGqlOpName() + 'Response';\n }\n // for posts\n else if (parent instanceof Body) {\n // const op = parent.parent as Post;\n name = this.name + 'Input';\n }\n // if the parent is an object then we can use the parent name\n else if (parent instanceof Obj) {\n name = parentName + 'Obj';\n }\n // extreme case -- we synthesize an anonymous name\n else {\n name = `[inline:${this.parent!.name}]`;\n }\n }\n\n this.name = name;\n }\n\n private resolveNameConflict(context: OasContext) {\n const container = T.findNonPropParent(this.parent!);\n this.name = container.name + '_' + this.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
|
}
|
|
@@ -40,20 +53,15 @@ export class PropArray extends Prop {
|
|
|
40
53
|
select(context, writer, selection) {
|
|
41
54
|
trace(context, '-> [prop-array:select]', 'in: ' + this.name);
|
|
42
55
|
const fieldName = this.name;
|
|
43
|
-
const sanitised = Naming.sanitiseFieldForSelect(fieldName);
|
|
56
|
+
const sanitised = Naming.sanitiseFieldForSelect(fieldName, this.parent?.kind === 'input');
|
|
44
57
|
writer.write(' '.repeat(context.indent + context.stack.length)).write(sanitised);
|
|
45
58
|
if (this.needsBrackets(this.items)) {
|
|
46
59
|
writer.write(' {');
|
|
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"]}
|
|
@@ -38,10 +38,14 @@ export class PropScalar extends Prop {
|
|
|
38
38
|
}
|
|
39
39
|
select(context, writer, selection) {
|
|
40
40
|
trace(context, ' [prop:select]', this.name);
|
|
41
|
-
const sanitised = Naming.sanitiseFieldForSelect(this.name);
|
|
41
|
+
const sanitised = Naming.sanitiseFieldForSelect(this.name, this.parent?.kind === 'input');
|
|
42
42
|
writer.write(' '.repeat(context.indent + context.stack.length)).write(sanitised);
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
// we can only write the default value if and only if the name is the same as the sanitised name,
|
|
44
|
+
// otherwise we'll end up with an expression like "someField: some_field: $(value)" which is not legal
|
|
45
|
+
if (sanitised === this.name && this.schema.default) {
|
|
46
|
+
for (const child of this.children) {
|
|
47
|
+
child.select(context, writer, selection);
|
|
48
|
+
}
|
|
45
49
|
}
|
|
46
50
|
if (context.generateOptions.showParentInSelections) {
|
|
47
51
|
writer.write(' # ').write(Naming.getRefName(this.parent.name));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"propScalar.js","sourceRoot":"","sources":["../../../src/oas/nodes/propScalar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,IAAI,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,OAAO,UAAW,SAAQ,IAAI;IAMzB;IACA;IAND,QAAQ,CAAS;IAEzB,YACE,MAAa,EACb,IAAY,EACL,IAAY,EACZ,MAAoB;QAE3B,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAHrB,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAc;IAG7B,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,eAAe,IAAI,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;IAEM,KAAK,CAAC,OAAmB;QAC9B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAEM,QAAQ,CAAC,QAAoB;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAEM,SAAS,CAAC,OAAmB;QAClC,IAAI,MAAM,GAAG,UAAU,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QAEjD,IAAI,OAAO,CAAC,eAAe,CAAC,sBAAsB,EAAE,CAAC;YACnD,MAAM,GAAG,MAAM,GAAG,KAAK,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QACjE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,MAAM,CAAC,OAAmB,EAAE,MAAc,EAAE,SAAmB;QACpE,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"propScalar.js","sourceRoot":"","sources":["../../../src/oas/nodes/propScalar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,IAAI,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,OAAO,UAAW,SAAQ,IAAI;IAMzB;IACA;IAND,QAAQ,CAAS;IAEzB,YACE,MAAa,EACb,IAAY,EACL,IAAY,EACZ,MAAoB;QAE3B,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAHrB,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAc;IAG7B,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,eAAe,IAAI,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;IAEM,KAAK,CAAC,OAAmB;QAC9B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAEM,QAAQ,CAAC,QAAoB;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAEM,SAAS,CAAC,OAAmB;QAClC,IAAI,MAAM,GAAG,UAAU,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QAEjD,IAAI,OAAO,CAAC,eAAe,CAAC,sBAAsB,EAAE,CAAC;YACnD,MAAM,GAAG,MAAM,GAAG,KAAK,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QACjE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,MAAM,CAAC,OAAmB,EAAE,MAAc,EAAE,SAAmB;QACpE,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,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,iGAAiG;QACjG,sGAAsG;QACtG,IAAI,SAAS,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACnD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,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;IACrB,CAAC;CACF","sourcesContent":["import { Factory, IType, Prop } from './internal.js';\nimport { SchemaObject } from 'oas/types';\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 PropScalar extends Prop {\n private propType?: IType;\n\n constructor(\n parent: IType,\n name: string,\n public type: string,\n public schema: SchemaObject,\n ) {\n super(parent, name, schema);\n }\n\n get id(): string {\n return `prop:scalar:${this.name}`;\n }\n\n public visit(context: OasContext): void {\n if (this.visited) {\n return;\n }\n\n context.enter(this);\n if (!this.propType) {\n const type = Factory.fromSchema(context, this, this.schema);\n this.add(type);\n this.propType = type;\n this.visited = true;\n }\n context.leave(this);\n }\n\n public getValue(_context: OasContext): string {\n return this.type;\n }\n\n public forPrompt(context: OasContext): string {\n let result = `[prop] ${this.name}: ${this.type}`;\n\n if (context.generateOptions.showParentInSelections) {\n result = result + ` (${Naming.getRefName(this.parent!.name)})`;\n }\n\n return result;\n }\n\n public select(context: OasContext, writer: Writer, selection: string[]) {\n trace(context, ' [prop:select]', this.name);\n const sanitised = Naming.sanitiseFieldForSelect(this.name, this.parent?.kind === 'input');\n writer.write(' '.repeat(context.indent + context.stack.length)).write(sanitised);\n\n // we can only write the default value if and only if the name is the same as the sanitised name,\n // otherwise we'll end up with an expression like \"someField: some_field: $(value)\" which is not legal\n if (sanitised === this.name && this.schema.default) {\n for (const child of this.children) {\n child.select(context, writer, selection);\n }\n }\n\n if (context.generateOptions.showParentInSelections) {\n writer.write(' # ').write(Naming.getRefName(this.parent!.name));\n }\n\n writer.write('\\n');\n }\n}\n"]}
|
|
@@ -9,4 +9,7 @@ export declare class T {
|
|
|
9
9
|
static isContainer(node: IType): boolean;
|
|
10
10
|
static composables(node: IType): IType[];
|
|
11
11
|
static print(node: IType, prefix?: string, isLast?: boolean): string;
|
|
12
|
+
static isRef(name: string): boolean;
|
|
13
|
+
static findNonPropParent(type: IType): IType;
|
|
14
|
+
static isScalarArray(type: IType): boolean;
|
|
12
15
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CircularRef, En, Obj, Prop, PropArray, PropEn, PropScalar, Scalar } from './internal.js';
|
|
1
|
+
import { Arr, CircularRef, En, Obj, Prop, PropArray, PropEn, PropScalar, Scalar } from './internal.js';
|
|
2
2
|
import _ from 'lodash';
|
|
3
3
|
export class T {
|
|
4
4
|
static isLeaf(type) {
|
|
@@ -8,7 +8,8 @@ export class T {
|
|
|
8
8
|
type instanceof PropEn ||
|
|
9
9
|
type instanceof CircularRef ||
|
|
10
10
|
(type instanceof PropArray && type.items instanceof Scalar) ||
|
|
11
|
-
(type instanceof Obj && _.isEmpty(type.props))
|
|
11
|
+
(type instanceof Obj && _.isEmpty(type.props)) ||
|
|
12
|
+
T.isScalarArray(type));
|
|
12
13
|
}
|
|
13
14
|
static isPropScalar(type) {
|
|
14
15
|
return type instanceof PropScalar;
|
|
@@ -54,5 +55,18 @@ export class T {
|
|
|
54
55
|
});
|
|
55
56
|
return result;
|
|
56
57
|
}
|
|
58
|
+
static isRef(name) {
|
|
59
|
+
return name.startsWith('#/components/');
|
|
60
|
+
}
|
|
61
|
+
static findNonPropParent(type) {
|
|
62
|
+
let parent = type;
|
|
63
|
+
while (parent instanceof Prop) {
|
|
64
|
+
parent = parent.parent;
|
|
65
|
+
}
|
|
66
|
+
return parent;
|
|
67
|
+
}
|
|
68
|
+
static isScalarArray(type) {
|
|
69
|
+
return type instanceof Arr && type.itemsType instanceof Scalar;
|
|
70
|
+
}
|
|
57
71
|
}
|
|
58
72
|
//# sourceMappingURL=typeUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeUtils.js","sourceRoot":"","sources":["../../../src/oas/nodes/typeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"typeUtils.js","sourceRoot":"","sources":["../../../src/oas/nodes/typeUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arr, CircularRef, En, IType, Obj, Prop, PropArray, PropEn, PropScalar, Scalar } from './internal.js';\nimport _ from 'lodash';\n\nexport class T {\n public static isLeaf(type: IType): boolean {\n return (\n type instanceof Scalar ||\n type instanceof PropScalar ||\n type instanceof En ||\n type instanceof PropEn ||\n type instanceof CircularRef ||\n (type instanceof PropArray && type.items instanceof Scalar) ||\n (type instanceof Obj && _.isEmpty(type.props)) ||\n T.isScalarArray(type)\n );\n }\n\n public static isPropScalar(type: IType): boolean {\n return type instanceof PropScalar;\n }\n\n public static traverse(node: IType, callback: (node: IType) => void): void {\n const traverseNode = (n: IType): void => {\n callback(n);\n\n for (const c of n.children) {\n traverseNode(c);\n }\n };\n\n traverseNode(node);\n }\n\n static isMutationType(type: IType): boolean {\n return (\n type.id.startsWith('post:') ||\n type.id.startsWith('put:') ||\n type.id.startsWith('patch:') ||\n type.id.startsWith('del:')\n );\n }\n\n static isScalar(type: IType): boolean {\n return type.id.startsWith('scalar:');\n }\n\n public static containers(node: IType) {\n return Array.from(node.children.values())\n .filter((child) => !(child instanceof Prop) && T.isContainer(child))\n .map((child) => child);\n }\n\n public static isContainer(node: IType): boolean {\n return node.id.startsWith('obj:') || node.id.startsWith('comp:') || node.id.startsWith('union:');\n }\n\n static composables(node: IType): IType[] {\n return _.filter(T.containers(node), (e: IType) => e.id.startsWith('comp:')); // || e.id.startsWith('union:'));\n }\n\n public static print(node: IType, prefix: string = '', isLast: boolean = true): string {\n // Build the current line with the appropriate connector.\n const connector = prefix === '' ? '' : isLast ? '└─ ' : '├─ ';\n let result = prefix + connector + node.id + '\\n';\n\n // Prepare the prefix for the children.\n const childPrefix = prefix + (isLast ? ' ' : '│ ');\n\n node.children.forEach((child, index) => {\n const last = index === node.children.length - 1;\n result += T.print(child, childPrefix, last);\n });\n\n return result;\n }\n\n public static isRef(name: string) {\n return name.startsWith('#/components/');\n }\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 isScalarArray(type: IType) {\n return type instanceof Arr && type.itemsType instanceof Scalar;\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IType, Type } from './internal.js';
|
|
1
|
+
import { IType, Prop, Type } from './internal.js';
|
|
2
2
|
import { SchemaObject } from 'oas/types';
|
|
3
3
|
import { OasContext } from '../oasContext.js';
|
|
4
4
|
import { Writer } from '../io/writer.js';
|
|
@@ -12,7 +12,8 @@ export declare class Union extends Type {
|
|
|
12
12
|
visit(context: OasContext): void;
|
|
13
13
|
generate(context: OasContext, writer: Writer, selection: string[]): void;
|
|
14
14
|
select(context: OasContext, writer: Writer, selection: string[]): void;
|
|
15
|
-
consolidate(selection: string[]): Set<
|
|
15
|
+
consolidate(selection: string[]): Set<IType>;
|
|
16
16
|
private visitProperties;
|
|
17
|
+
selectedProps(selection: string[]): Prop[];
|
|
17
18
|
private updateName;
|
|
18
19
|
}
|
package/dist/oas/nodes/union.js
CHANGED
|
@@ -31,6 +31,7 @@ export class Union extends Type {
|
|
|
31
31
|
for (const refSchema of this.schemas) {
|
|
32
32
|
const type = Factory.fromSchema(context, this, refSchema);
|
|
33
33
|
this.add(type);
|
|
34
|
+
type.visit(context);
|
|
34
35
|
trace(context, ' [union:visit]', 'of type: ' + type);
|
|
35
36
|
}
|
|
36
37
|
if (!context.inContextOf('Param', this)) {
|
|
@@ -39,7 +40,7 @@ export class Union extends Type {
|
|
|
39
40
|
if (this.name != null) {
|
|
40
41
|
context.store(this.name, this);
|
|
41
42
|
if (context.generateOptions.consolidateUnions) {
|
|
42
|
-
this.children.forEach((child) => context.
|
|
43
|
+
this.children.forEach((child) => context.decRefCount(child.name));
|
|
43
44
|
}
|
|
44
45
|
}
|
|
45
46
|
this.visited = true;
|
|
@@ -66,8 +67,7 @@ export class Union extends Type {
|
|
|
66
67
|
const name = _.upperFirst(Naming.getRefName(this.name));
|
|
67
68
|
if (context.generateOptions.consolidateUnions) {
|
|
68
69
|
if (!this.consolidated) {
|
|
69
|
-
|
|
70
|
-
this.consolidate(selection).forEach((id) => context.generatedSet.add(id));
|
|
70
|
+
this.consolidate(selection).forEach((type) => context.decRefCount(type.name));
|
|
71
71
|
}
|
|
72
72
|
// When generating this union in GQL it might look like:
|
|
73
73
|
// union MyUnion = Type1 | Type2 | Type3
|
|
@@ -84,20 +84,26 @@ export class Union extends Type {
|
|
|
84
84
|
.write(name)
|
|
85
85
|
.write('\n');
|
|
86
86
|
const selected = this.selectedProps(selection);
|
|
87
|
+
const generated = new Set();
|
|
87
88
|
for (const prop of selected) {
|
|
88
89
|
trace(context, ' [union::generate]', `-> property: ${prop.name} (parent: ${prop.parent.name})`);
|
|
89
|
-
prop.
|
|
90
|
+
if (!generated.has(prop.id))
|
|
91
|
+
prop.generate(context, writer, selection);
|
|
92
|
+
generated.add(prop.id);
|
|
90
93
|
}
|
|
91
94
|
writer.write('} \n### End replacement for ').write(this.name).write('\n\n');
|
|
92
95
|
}
|
|
93
96
|
else {
|
|
94
|
-
//
|
|
97
|
+
// add the prop parent paths to a set so we can only include those parents that have been selected
|
|
98
|
+
const propParentsPathSet = new Set(this.selectedProps(selection).map((p) => p.parent.path()));
|
|
99
|
+
// we should only include the names of those properties that have been selected
|
|
100
|
+
const filtered = this.children.filter((c) => propParentsPathSet.has(c.path()));
|
|
95
101
|
writer
|
|
96
102
|
.write('union ')
|
|
97
103
|
.write(name)
|
|
98
104
|
.write(this.nameSuffix())
|
|
99
105
|
.write(' = ')
|
|
100
|
-
.write(
|
|
106
|
+
.write(filtered.map((child) => Naming.getRefName(child.name)).join(' | '))
|
|
101
107
|
.write('\n\n');
|
|
102
108
|
}
|
|
103
109
|
}
|
|
@@ -106,21 +112,39 @@ export class Union extends Type {
|
|
|
106
112
|
}
|
|
107
113
|
select(context, writer, selection) {
|
|
108
114
|
trace(context, '-> [union::select]', `-> in: ${this.name}`);
|
|
109
|
-
if (
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
+
if (!this.consolidated) {
|
|
116
|
+
this.consolidate(selection);
|
|
117
|
+
}
|
|
118
|
+
const selected = this.selectedProps(selection);
|
|
119
|
+
const generated = new Set();
|
|
120
|
+
for (const prop of selected) {
|
|
121
|
+
if (!generated.has(prop.id))
|
|
115
122
|
prop.select(context, writer, selection);
|
|
116
|
-
|
|
123
|
+
generated.add(prop.id);
|
|
117
124
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
this.
|
|
121
|
-
|
|
125
|
+
/*if (context.generateOptions.consolidateUnions) {
|
|
126
|
+
if (!this.consolidated) {
|
|
127
|
+
this.consolidate(selection);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const selected = this.selectedProps(selection);
|
|
131
|
+
const generated = new Set<string>();
|
|
132
|
+
for (const prop of selected) {
|
|
133
|
+
if (!generated.has(prop.id))
|
|
134
|
+
prop.select(context, writer, selection);
|
|
135
|
+
generated.add(prop.id);
|
|
136
|
+
}
|
|
137
|
+
} else {
|
|
138
|
+
// add the prop parent paths to a set so we can only include those parents that have been selected
|
|
139
|
+
const propParentsPathSet = new Set(this.selectedProps(selection).map(p => p.parent!.path()));
|
|
140
|
+
|
|
141
|
+
// we should only include the names of those properties that have been selected
|
|
142
|
+
this.children
|
|
143
|
+
.filter(c => propParentsPathSet.has(c.path()))
|
|
144
|
+
.forEach((child) => {
|
|
145
|
+
child.select(context, writer, selection);
|
|
122
146
|
});
|
|
123
|
-
}
|
|
147
|
+
}*/
|
|
124
148
|
/* TODO: better selection for Unions
|
|
125
149
|
dataPoints: dataFormat->match(
|
|
126
150
|
["raw", $.dataPoints],
|
|
@@ -144,8 +168,12 @@ export class Union extends Type {
|
|
|
144
168
|
const props = [];
|
|
145
169
|
const discriminator = this.discriminator;
|
|
146
170
|
this.children?.forEach((child) => {
|
|
147
|
-
|
|
148
|
-
|
|
171
|
+
// .filter((prop) => selection.find((s) => s.startsWith(prop.path())))
|
|
172
|
+
ids.add(child);
|
|
173
|
+
Array.from(child.props.values())
|
|
174
|
+
.filter((prop) => selection.find((s) => s.startsWith(prop.path())))
|
|
175
|
+
.forEach((prop) => props.push(prop));
|
|
176
|
+
// props.push(...child.props.values());
|
|
149
177
|
});
|
|
150
178
|
// add the discriminator, if we have one
|
|
151
179
|
if (discriminator) {
|
|
@@ -163,14 +191,24 @@ export class Union extends Type {
|
|
|
163
191
|
const queue = Array.from(this.children.values());
|
|
164
192
|
while (queue.length > 0) {
|
|
165
193
|
const node = queue.shift();
|
|
166
|
-
T.containers(node)
|
|
167
|
-
|
|
194
|
+
const containers = T.containers(node);
|
|
195
|
+
containers.forEach((c) => ids.add(c));
|
|
196
|
+
// queue.push(...node.children);
|
|
168
197
|
}
|
|
169
198
|
return ids;
|
|
170
199
|
}
|
|
171
200
|
visitProperties(_context) {
|
|
172
201
|
// TODO: pending
|
|
173
202
|
}
|
|
203
|
+
selectedProps(selection) {
|
|
204
|
+
const collected = [];
|
|
205
|
+
this.children.forEach((child) => {
|
|
206
|
+
Array.from(child.props.values())
|
|
207
|
+
.filter((prop) => selection.find((s) => s.startsWith(prop.path())))
|
|
208
|
+
.forEach((prop) => collected.push(prop));
|
|
209
|
+
});
|
|
210
|
+
return collected;
|
|
211
|
+
}
|
|
174
212
|
updateName() {
|
|
175
213
|
let name = this.name;
|
|
176
214
|
if (!name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"union.js","sourceRoot":"","sources":["../../../src/oas/nodes/union.ts"],"names":[],"mappings":"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","sourcesContent":["import { Composed, Factory, Get, IType, Prop, Res, T, Type } from './internal.js';\nimport { SchemaObject } from 'oas/types';\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 Union extends Type {\n public schemas: SchemaObject[];\n public discriminator?: string;\n\n constructor(\n parent: IType,\n name: string,\n schemas: SchemaObject[],\n public consolidated: boolean = false,\n ) {\n super(parent, name);\n this.schemas = schemas;\n this.updateName();\n }\n\n get id(): string {\n return `union:${this.name}`;\n }\n\n public forPrompt(_context: OasContext): string {\n return `[union] ${Naming.getRefName(this.name)}`;\n }\n\n public visit(context: OasContext): void {\n if (this.visited) {\n return;\n }\n\n const schemas = this.schemas.map((s) => s.type);\n\n context.enter(this);\n trace(context, '-> [union:visit]', 'in: ' + schemas);\n\n if (!context.inContextOf('Composed', this)) {\n trace(context, '[union]', 'In union: ' + this.parent?.name);\n }\n\n for (const refSchema of this.schemas) {\n const type = Factory.fromSchema(context, this, refSchema);\n this.add(type);\n\n trace(context, ' [union:visit]', 'of type: ' + type);\n }\n\n if (!context.inContextOf('Param', this)) {\n this.visitProperties(context);\n }\n\n if (this.name != null) {\n context.store(this.name, this);\n if (context.generateOptions.consolidateUnions) {\n this.children.forEach((child) => context.generatedSet.add(child.id));\n }\n }\n\n this.visited = true;\n trace(context, '<- [union:visit]', 'out: ' + schemas);\n context.leave(this);\n }\n\n public generate(context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(this);\n const schemas = this.schemas.map((s) => s.type);\n trace(context, '-> [union::generate]', 'in: ' + schemas);\n\n /* params with Unions are weird, but here's an example:\n * id: oneOf [string, Enum {me}] */\n if (context.inContextOf('Param', this)) {\n for (const child of this.children) {\n child.generate(context, writer, selection);\n }\n } else if (context.inContextOf('Res', this)) {\n writer.write(Naming.genTypeName(this.name));\n return;\n }\n // generate traditional union\n else {\n const name = _.upperFirst(Naming.getRefName(this.name));\n\n if (context.generateOptions.consolidateUnions) {\n if (!this.consolidated) {\n // add to generated set\n this.consolidate(selection).forEach((id) => context.generatedSet.add(id));\n }\n\n // When generating this union in GQL it might look like:\n // union MyUnion = Type1 | Type2 | Type3\n writer.write('#### NOT SUPPORTED YET BY CONNECTORS!!! union ').write(name).write(' = ');\n\n const childrenTypes = this.children.map((child) => Naming.getRefName(child.name));\n const childrenNames = childrenTypes.join(' | ');\n writer.write(childrenNames).write('\\n\\n');\n\n trace(context, ' [union::generate]', `[union] -> object: ${this.name}`);\n\n writer\n .write(this.kind + ' ')\n .write(name)\n .write(this.nameSuffix())\n .write(' { #### replacement for Union ')\n .write(name)\n .write('\\n');\n\n const selected = this.selectedProps(selection);\n for (const prop of selected) {\n trace(context, ' [union::generate]', `-> property: ${prop.name} (parent: ${prop.parent!.name})`);\n prop.generate(context, writer, selection);\n }\n\n writer.write('} \\n### End replacement for ').write(this.name).write('\\n\\n');\n } else {\n // const selected = this.selectedProps(selection);\n writer\n .write('union ')\n .write(name)\n .write(this.nameSuffix())\n .write(' = ')\n .write(this.children.map((child) => Naming.getRefName(child.name)).join(' | '))\n .write('\\n\\n');\n }\n }\n\n trace(context, '<- [union::generate]', 'out: ' + schemas);\n context.leave(this);\n }\n\n public select(context: OasContext, writer: Writer, selection: string[]): void {\n trace(context, '-> [union::select]', `-> in: ${this.name}`);\n\n if (context.generateOptions.consolidateUnions) {\n if (!this.consolidated) {\n this.consolidate(selection);\n }\n\n const selected = this.selectedProps(selection);\n for (const prop of selected) {\n prop.select(context, writer, selection);\n }\n } else {\n // collect all property names from children and write them here\n this.children.forEach((child) => {\n child.select(context, writer, selection);\n });\n }\n\n /* TODO: better selection for Unions\n dataPoints: dataFormat->match(\n [\"raw\", $.dataPoints],\n [\"normal\", $.dataPoints {\n priceDateTime\n # all other fields\n }],\n [@, $ { # optimized\n priceDateTime\n # all other fields\n }\n ])\n */\n\n trace(context, '<- [union::select]', `-> out: ${this.name}`);\n }\n\n public consolidate(selection: string[]): Set<string> {\n T.composables(this).forEach((child) => {\n (child as Composed).consolidate(selection);\n });\n\n const ids: Set<string> = new Set();\n const props: Prop[] = [];\n const discriminator = this.discriminator;\n\n this.children?.forEach((child) => {\n ids.add(child.id);\n props.push(...child.props.values());\n });\n\n // add the discriminator, if we have one\n if (discriminator) {\n const prop = (this.children || [])\n .map((child) => child.props.get(discriminator))\n .find((prop) => prop !== undefined);\n\n if (prop) props.push(prop);\n }\n\n // and finally sort the props and copy them to our original\n props.sort((a, b) => a.name.localeCompare(b.name)).forEach((prop) => this.props.set(prop.name, prop));\n\n // and return the types.ts we've used\n this.consolidated = true;\n\n // now remove every added ID\n const queue: IType[] = Array.from(this.children.values());\n while (queue.length > 0) {\n const node = queue.shift()!;\n T.containers(node).forEach((c) => ids.add(c.id));\n queue.push(...node.children);\n }\n\n return ids;\n }\n\n private visitProperties(_context: OasContext): void {\n // TODO: pending\n }\n\n private updateName(): void {\n let name = this.name;\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 = this.parent!.name + `Union`;\n }\n }\n\n this.name = name;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"union.js","sourceRoot":"","sources":["../../../src/oas/nodes/union.ts"],"names":[],"mappings":"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","sourcesContent":["import { Composed, Factory, Get, IType, Prop, Res, T, Type } from './internal.js';\nimport { SchemaObject } from 'oas/types';\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 Union extends Type {\n public schemas: SchemaObject[];\n public discriminator?: string;\n\n constructor(\n parent: IType,\n name: string,\n schemas: SchemaObject[],\n public consolidated: boolean = false,\n ) {\n super(parent, name);\n this.schemas = schemas;\n this.updateName();\n }\n\n get id(): string {\n return `union:${this.name}`;\n }\n\n public forPrompt(_context: OasContext): string {\n return `[union] ${Naming.getRefName(this.name)}`;\n }\n\n public visit(context: OasContext): void {\n if (this.visited) {\n return;\n }\n\n const schemas = this.schemas.map((s) => s.type);\n\n context.enter(this);\n trace(context, '-> [union:visit]', 'in: ' + schemas);\n\n if (!context.inContextOf('Composed', this)) {\n trace(context, '[union]', 'In union: ' + this.parent?.name);\n }\n\n for (const refSchema of this.schemas) {\n const type = Factory.fromSchema(context, this, refSchema);\n this.add(type);\n\n type.visit(context);\n trace(context, ' [union:visit]', 'of type: ' + type);\n }\n\n if (!context.inContextOf('Param', this)) {\n this.visitProperties(context);\n }\n\n if (this.name != null) {\n context.store(this.name, this);\n if (context.generateOptions.consolidateUnions) {\n this.children.forEach((child) => context.decRefCount(child.name));\n }\n }\n\n this.visited = true;\n trace(context, '<- [union:visit]', 'out: ' + schemas);\n context.leave(this);\n }\n\n public generate(context: OasContext, writer: Writer, selection: string[]): void {\n context.enter(this);\n const schemas = this.schemas.map((s) => s.type);\n trace(context, '-> [union::generate]', 'in: ' + schemas);\n\n /* params with Unions are weird, but here's an example:\n * id: oneOf [string, Enum {me}] */\n if (context.inContextOf('Param', this)) {\n for (const child of this.children) {\n child.generate(context, writer, selection);\n }\n } else if (context.inContextOf('Res', this)) {\n writer.write(Naming.genTypeName(this.name));\n return;\n }\n // generate traditional union\n else {\n const name = _.upperFirst(Naming.getRefName(this.name));\n\n if (context.generateOptions.consolidateUnions) {\n if (!this.consolidated) {\n this.consolidate(selection).forEach((type) => context.decRefCount(type.name));\n }\n\n // When generating this union in GQL it might look like:\n // union MyUnion = Type1 | Type2 | Type3\n writer.write('#### NOT SUPPORTED YET BY CONNECTORS!!! union ').write(name).write(' = ');\n\n const childrenTypes = this.children.map((child) => Naming.getRefName(child.name));\n const childrenNames = childrenTypes.join(' | ');\n writer.write(childrenNames).write('\\n\\n');\n\n trace(context, ' [union::generate]', `[union] -> object: ${this.name}`);\n\n writer\n .write(this.kind + ' ')\n .write(name)\n .write(this.nameSuffix())\n .write(' { #### replacement for Union ')\n .write(name)\n .write('\\n');\n\n const selected = this.selectedProps(selection);\n const generated = new Set<string>();\n for (const prop of selected) {\n trace(context, ' [union::generate]', `-> property: ${prop.name} (parent: ${prop.parent!.name})`);\n if (!generated.has(prop.id)) prop.generate(context, writer, selection);\n generated.add(prop.id);\n }\n\n writer.write('} \\n### End replacement for ').write(this.name).write('\\n\\n');\n } else {\n // add the prop parent paths to a set so we can only include those parents that have been selected\n const propParentsPathSet = new Set(this.selectedProps(selection).map((p) => p.parent!.path()));\n\n // we should only include the names of those properties that have been selected\n const filtered = this.children.filter((c) => propParentsPathSet.has(c.path()));\n\n writer\n .write('union ')\n .write(name)\n .write(this.nameSuffix())\n .write(' = ')\n .write(filtered.map((child) => Naming.getRefName(child.name)).join(' | '))\n .write('\\n\\n');\n }\n }\n\n trace(context, '<- [union::generate]', 'out: ' + schemas);\n context.leave(this);\n }\n\n public select(context: OasContext, writer: Writer, selection: string[]): void {\n trace(context, '-> [union::select]', `-> in: ${this.name}`);\n\n if (!this.consolidated) {\n this.consolidate(selection);\n }\n\n const selected = this.selectedProps(selection);\n const generated = new Set<string>();\n for (const prop of selected) {\n if (!generated.has(prop.id)) prop.select(context, writer, selection);\n generated.add(prop.id);\n }\n\n /*if (context.generateOptions.consolidateUnions) {\n if (!this.consolidated) {\n this.consolidate(selection);\n }\n\n const selected = this.selectedProps(selection);\n const generated = new Set<string>();\n for (const prop of selected) {\n if (!generated.has(prop.id))\n prop.select(context, writer, selection);\n generated.add(prop.id);\n }\n } else {\n // add the prop parent paths to a set so we can only include those parents that have been selected\n const propParentsPathSet = new Set(this.selectedProps(selection).map(p => p.parent!.path()));\n\n // we should only include the names of those properties that have been selected\n this.children\n .filter(c => propParentsPathSet.has(c.path()))\n .forEach((child) => {\n child.select(context, writer, selection);\n });\n }*/\n\n /* TODO: better selection for Unions\n dataPoints: dataFormat->match(\n [\"raw\", $.dataPoints],\n [\"normal\", $.dataPoints {\n priceDateTime\n # all other fields\n }],\n [@, $ { # optimized\n priceDateTime\n # all other fields\n }\n ])\n */\n\n trace(context, '<- [union::select]', `-> out: ${this.name}`);\n }\n\n public consolidate(selection: string[]): Set<IType> {\n T.composables(this).forEach((child) => {\n (child as Composed).consolidate(selection);\n });\n\n const ids: Set<IType> = new Set();\n const props: Prop[] = [];\n const discriminator = this.discriminator;\n\n this.children?.forEach((child) => {\n // .filter((prop) => selection.find((s) => s.startsWith(prop.path())))\n ids.add(child);\n\n Array.from(child.props.values())\n .filter((prop) => selection.find((s) => s.startsWith(prop.path())))\n .forEach((prop) => props.push(prop));\n\n // props.push(...child.props.values());\n });\n\n // add the discriminator, if we have one\n if (discriminator) {\n const prop = (this.children || [])\n .map((child) => child.props.get(discriminator))\n .find((prop) => prop !== undefined);\n\n if (prop) props.push(prop);\n }\n\n // and finally sort the props and copy them to our original\n props.sort((a, b) => a.name.localeCompare(b.name)).forEach((prop) => this.props.set(prop.name, prop));\n\n // and return the types.ts we've used\n this.consolidated = true;\n\n // now remove every added ID\n const queue: IType[] = Array.from(this.children.values());\n while (queue.length > 0) {\n const node = queue.shift()!;\n const containers = T.containers(node);\n containers.forEach((c) => ids.add(c));\n // queue.push(...node.children);\n }\n\n return ids;\n }\n\n private visitProperties(_context: OasContext): void {\n // TODO: pending\n }\n\n public selectedProps(selection: string[]) {\n const collected: Prop[] = [];\n\n this.children.forEach((child) => {\n Array.from(child.props.values())\n .filter((prop) => selection.find((s) => s.startsWith(prop.path())))\n .forEach((prop) => collected.push(prop));\n });\n\n return collected;\n }\n\n private updateName(): void {\n let name = this.name;\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 = this.parent!.name + `Union`;\n }\n }\n\n this.name = name;\n }\n}\n"]}
|
package/dist/oas/oasContext.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export declare class OasContext {
|
|
|
15
15
|
stack: IType[];
|
|
16
16
|
types: Map<string, IType | undefined>;
|
|
17
17
|
generateOptions: GenerateOptions;
|
|
18
|
+
refCount: Map<string, number>;
|
|
18
19
|
private parser;
|
|
19
20
|
constructor(parser: Oas, options?: GenerateOptions);
|
|
20
21
|
enter(type: IType): void;
|
|
@@ -23,6 +24,7 @@ export declare class OasContext {
|
|
|
23
24
|
store(name: string, type: IType): void;
|
|
24
25
|
lookupResponse(ref: string): ResponseObject | ReferenceObject | null;
|
|
25
26
|
lookupRef(ref: string | null): SchemaObject | null;
|
|
27
|
+
decRefCount(ref: string): void;
|
|
26
28
|
lookupParam(ref: string): ParameterObject | boolean;
|
|
27
29
|
inContextOf(type: string, node: IType): boolean;
|
|
28
30
|
}
|
package/dist/oas/oasContext.js
CHANGED
|
@@ -9,6 +9,7 @@ export class OasContext {
|
|
|
9
9
|
stack = new Array();
|
|
10
10
|
types = new Map();
|
|
11
11
|
generateOptions;
|
|
12
|
+
refCount = new Map();
|
|
12
13
|
parser;
|
|
13
14
|
constructor(parser, options) {
|
|
14
15
|
this.parser = parser;
|
|
@@ -44,12 +45,22 @@ export class OasContext {
|
|
|
44
45
|
}
|
|
45
46
|
lookupRef(ref) {
|
|
46
47
|
if (ref && ref.startsWith(OasContext.COMPONENTS_SCHEMAS)) {
|
|
48
|
+
const currentCount = this.refCount.get(ref) || 0;
|
|
49
|
+
this.refCount.set(ref, currentCount + 1);
|
|
47
50
|
const definition = this.parser.getDefinition();
|
|
48
51
|
const schemas = definition.components?.schemas ?? {};
|
|
49
52
|
return schemas ? schemas[Naming.getRefName(ref)] : null;
|
|
50
53
|
}
|
|
51
54
|
return null;
|
|
52
55
|
}
|
|
56
|
+
decRefCount(ref) {
|
|
57
|
+
if (ref && ref.startsWith(OasContext.COMPONENTS_SCHEMAS)) {
|
|
58
|
+
const currentCount = this.refCount.get(ref) || 0;
|
|
59
|
+
if (currentCount > 0) {
|
|
60
|
+
this.refCount.set(ref, currentCount - 1);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
53
64
|
lookupParam(ref) {
|
|
54
65
|
if (ref && ref.startsWith(OasContext.PARAMETER_SCHEMAS)) {
|
|
55
66
|
const definition = this.parser.getDefinition();
|