apollo-conn-gen 0.4.3 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/oas/generator/typesCollector.d.ts +9 -0
- package/dist/oas/generator/typesCollector.js +147 -0
- package/dist/oas/generator/typesCollector.js.map +1 -0
- package/dist/oas/io/writer.d.ts +2 -2
- package/dist/oas/io/writer.js +12 -71
- package/dist/oas/io/writer.js.map +1 -1
- package/dist/oas/nodes/circularRef.js +0 -1
- package/dist/oas/nodes/circularRef.js.map +1 -1
- package/dist/oas/nodes/comp.d.ts +0 -1
- package/dist/oas/nodes/comp.js +9 -21
- package/dist/oas/nodes/comp.js.map +1 -1
- package/dist/oas/nodes/propArray.d.ts +2 -1
- package/dist/oas/nodes/propArray.js +16 -8
- package/dist/oas/nodes/propArray.js.map +1 -1
- package/dist/oas/nodes/propScalar.js +6 -2
- package/dist/oas/nodes/propScalar.js.map +1 -1
- package/dist/oas/nodes/typeUtils.d.ts +1 -0
- package/dist/oas/nodes/typeUtils.js +6 -2
- package/dist/oas/nodes/typeUtils.js.map +1 -1
- package/dist/oas/nodes/union.d.ts +3 -2
- package/dist/oas/nodes/union.js +60 -22
- package/dist/oas/nodes/union.js.map +1 -1
- package/dist/oas/oasContext.d.ts +3 -0
- package/dist/oas/oasContext.js +19 -0
- package/dist/oas/oasContext.js.map +1 -1
- package/dist/oas/oasGen.d.ts +3 -0
- package/dist/oas/oasGen.js +15 -1
- package/dist/oas/oasGen.js.map +1 -1
- package/dist/oas/utils/naming.d.ts +1 -0
- package/dist/oas/utils/naming.js +9 -2
- package/dist/oas/utils/naming.js.map +1 -1
- package/dist/oas/visitor/GeneratorVisitor.d.ts +39 -0
- package/dist/oas/visitor/GeneratorVisitor.js +310 -0
- package/dist/oas/visitor/GeneratorVisitor.js.map +1 -0
- package/dist/oas/visitor/NodeVisitor.d.ts +30 -0
- package/dist/oas/visitor/NodeVisitor.js +2 -0
- package/dist/oas/visitor/NodeVisitor.js.map +1 -0
- package/dist/oas/visitor/example.d.ts +17 -0
- package/dist/oas/visitor/example.js +28 -0
- package/dist/oas/visitor/example.js.map +1 -0
- package/dist/oas/visitor/index.d.ts +2 -0
- package/dist/oas/visitor/index.js +2 -0
- package/dist/oas/visitor/index.js.map +1 -0
- package/dist/tests/runners.js +2 -1
- package/dist/tests/runners.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/oas/io/pathCollector.d.ts +0 -11
- package/dist/oas/io/pathCollector.js +0 -95
- package/dist/oas/io/pathCollector.js.map +0 -1
|
@@ -40,8 +40,12 @@ export class PropScalar extends Prop {
|
|
|
40
40
|
trace(context, ' [prop:select]', this.name);
|
|
41
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,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,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,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"]}
|
|
@@ -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;
|
|
@@ -64,5 +65,8 @@ export class T {
|
|
|
64
65
|
}
|
|
65
66
|
return parent;
|
|
66
67
|
}
|
|
68
|
+
static isScalarArray(type) {
|
|
69
|
+
return type instanceof Arr && type.itemsType instanceof Scalar;
|
|
70
|
+
}
|
|
67
71
|
}
|
|
68
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,14 +15,17 @@ 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);
|
|
21
|
+
reset(): void;
|
|
20
22
|
enter(type: IType): void;
|
|
21
23
|
leave(type: IType): void;
|
|
22
24
|
size(): number;
|
|
23
25
|
store(name: string, type: IType): void;
|
|
24
26
|
lookupResponse(ref: string): ResponseObject | ReferenceObject | null;
|
|
25
27
|
lookupRef(ref: string | null): SchemaObject | null;
|
|
28
|
+
decRefCount(ref: string): void;
|
|
26
29
|
lookupParam(ref: string): ParameterObject | boolean;
|
|
27
30
|
inContextOf(type: string, node: IType): boolean;
|
|
28
31
|
}
|
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;
|
|
@@ -18,6 +19,14 @@ export class OasContext {
|
|
|
18
19
|
showParentInSelections: true, // by default, we don't show where the fields are coming from
|
|
19
20
|
};
|
|
20
21
|
}
|
|
22
|
+
// reset the state of the context
|
|
23
|
+
reset() {
|
|
24
|
+
this.indent = 0;
|
|
25
|
+
this.stack = new Array();
|
|
26
|
+
this.types.clear();
|
|
27
|
+
this.refCount.clear();
|
|
28
|
+
this.generatedSet.clear();
|
|
29
|
+
}
|
|
21
30
|
enter(type) {
|
|
22
31
|
this.stack.push(type);
|
|
23
32
|
trace(this, '-> [context::enter]', type.id);
|
|
@@ -44,12 +53,22 @@ export class OasContext {
|
|
|
44
53
|
}
|
|
45
54
|
lookupRef(ref) {
|
|
46
55
|
if (ref && ref.startsWith(OasContext.COMPONENTS_SCHEMAS)) {
|
|
56
|
+
const currentCount = this.refCount.get(ref) || 0;
|
|
57
|
+
this.refCount.set(ref, currentCount + 1);
|
|
47
58
|
const definition = this.parser.getDefinition();
|
|
48
59
|
const schemas = definition.components?.schemas ?? {};
|
|
49
60
|
return schemas ? schemas[Naming.getRefName(ref)] : null;
|
|
50
61
|
}
|
|
51
62
|
return null;
|
|
52
63
|
}
|
|
64
|
+
decRefCount(ref) {
|
|
65
|
+
if (ref && ref.startsWith(OasContext.COMPONENTS_SCHEMAS)) {
|
|
66
|
+
const currentCount = this.refCount.get(ref) || 0;
|
|
67
|
+
if (currentCount > 0) {
|
|
68
|
+
this.refCount.set(ref, currentCount - 1);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
53
72
|
lookupParam(ref) {
|
|
54
73
|
if (ref && ref.startsWith(OasContext.PARAMETER_SCHEMAS)) {
|
|
55
74
|
const definition = this.parser.getDefinition();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oasContext.js","sourceRoot":"","sources":["../../src/oas/oasContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAQ,MAAM,gBAAgB,CAAC;AAI7C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAQ3C,MAAM,OAAO,UAAU;IACd,MAAM,CAAU,kBAAkB,GAAW,uBAAuB,CAAC;IACrE,MAAM,CAAU,oBAAoB,GAAW,yBAAyB,CAAC;IACzE,MAAM,CAAU,iBAAiB,GAAW,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"oasContext.js","sourceRoot":"","sources":["../../src/oas/oasContext.ts"],"names":[],"mappings":"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","sourcesContent":["import { trace, warn } from './log/trace.js';\nimport Oas from 'oas';\nimport { ParameterObject, ResponseObject, SchemaObject } from 'oas/types';\nimport { ReferenceObject } from './nodes/internal.js';\nimport { Naming } from './utils/naming.js';\nimport { IType } from './nodes/internal.js';\n\nexport type GenerateOptions = {\n consolidateUnions: boolean;\n showParentInSelections: boolean;\n};\n\nexport class OasContext {\n public static readonly COMPONENTS_SCHEMAS: string = '#/components/schemas/';\n public static readonly COMPONENTS_RESPONSES: string = '#/components/responses/';\n public static readonly PARAMETER_SCHEMAS: string = '#/components/parameters/';\n\n public generatedSet: Set<string> = new Set();\n public indent: number;\n\n public stack: IType[] = new Array<IType>();\n public types: Map<string, IType | undefined> = new Map();\n public generateOptions: GenerateOptions;\n public refCount: Map<string, number> = new Map();\n\n private parser: Oas;\n\n constructor(parser: Oas, options?: GenerateOptions) {\n this.parser = parser;\n this.indent = 0;\n this.generateOptions = options || {\n consolidateUnions: true, // by default, we consolidate fields until unions are supported\n showParentInSelections: true, // by default, we don't show where the fields are coming from\n };\n }\n\n // reset the state of the context\n public reset(): void {\n this.indent = 0;\n this.stack = new Array<IType>();\n this.types.clear();\n this.refCount.clear();\n this.generatedSet.clear();\n }\n\n public enter(type: IType): void {\n this.stack.push(type);\n trace(this, '-> [context::enter]', type.id);\n }\n\n public leave(type: IType): void {\n this.stack.pop();\n trace(this, '<- [context::leave]', type.id);\n }\n\n public size() {\n return this.stack.length;\n }\n\n public store(name: string, type: IType): void {\n trace(this, '[context::store]', 'store ' + type.id);\n this.types.set(name, undefined);\n }\n\n public lookupResponse(ref: string): ResponseObject | ReferenceObject | null {\n if (ref && ref.startsWith(OasContext.COMPONENTS_RESPONSES)) {\n const definition = this.parser.getDefinition();\n const responses = definition.components?.responses ?? {};\n\n // get the response schema\n return responses[Naming.getRefName(ref)!] ?? null;\n }\n\n return null;\n }\n\n public lookupRef(ref: string | null): SchemaObject | null {\n if (ref && ref.startsWith(OasContext.COMPONENTS_SCHEMAS)) {\n const currentCount = this.refCount.get(ref) || 0;\n this.refCount.set(ref, currentCount + 1);\n\n const definition = this.parser.getDefinition();\n const schemas = definition.components?.schemas ?? {};\n\n return schemas ? schemas[Naming.getRefName(ref)!] : null;\n }\n\n return null;\n }\n\n public decRefCount(ref: string): void {\n if (ref && ref.startsWith(OasContext.COMPONENTS_SCHEMAS)) {\n const currentCount = this.refCount.get(ref) || 0;\n if (currentCount > 0) {\n this.refCount.set(ref, currentCount - 1);\n }\n }\n }\n\n public lookupParam(ref: string): ParameterObject | boolean {\n if (ref && ref.startsWith(OasContext.PARAMETER_SCHEMAS)) {\n const definition = this.parser.getDefinition();\n const parameters = definition.components?.parameters ?? {};\n\n // get the parameter schema\n const name = Naming.getRefName(ref)!;\n return (parameters[name] as ParameterObject) ?? false;\n }\n\n return false;\n }\n\n public inContextOf(type: string, node: IType): boolean {\n // console\n for (let i = this.stack.length - 1; i >= 0; i--) {\n if (this.stack[i] === node) {\n continue;\n }\n\n if (this.stack[i].constructor.name === type) {\n return true;\n }\n }\n\n return false;\n }\n}\n"]}
|
package/dist/oas/oasGen.d.ts
CHANGED
|
@@ -15,9 +15,12 @@ export declare class OasGen {
|
|
|
15
15
|
context?: OasContext;
|
|
16
16
|
paths: Map<string, IType>;
|
|
17
17
|
options: GenerateOptions;
|
|
18
|
+
private collector;
|
|
18
19
|
constructor(parser: Oas, options: GenerateOptions);
|
|
19
20
|
title(): string;
|
|
20
21
|
version(): string;
|
|
22
|
+
expanded(paths: string[]): string[];
|
|
23
|
+
getTypes(paths: string[]): Map<string, IType>;
|
|
21
24
|
generateSchema(paths: string[]): string;
|
|
22
25
|
visit(): Promise<void>;
|
|
23
26
|
private isSupported;
|
package/dist/oas/oasGen.js
CHANGED
|
@@ -5,6 +5,7 @@ import { OasContext } from './oasContext.js';
|
|
|
5
5
|
import { Factory } from './nodes/internal.js';
|
|
6
6
|
import { Writer } from './io/writer.js';
|
|
7
7
|
import { trace } from './log/trace.js';
|
|
8
|
+
import { TypesCollector } from './generator/typesCollector.js';
|
|
8
9
|
export class OasGen {
|
|
9
10
|
selections = [];
|
|
10
11
|
static async fromData(data, options = {
|
|
@@ -63,9 +64,11 @@ export class OasGen {
|
|
|
63
64
|
context;
|
|
64
65
|
paths = new Map();
|
|
65
66
|
options;
|
|
67
|
+
collector;
|
|
66
68
|
constructor(parser, options) {
|
|
67
69
|
this.parser = parser;
|
|
68
70
|
this.options = options;
|
|
71
|
+
this.collector = new TypesCollector(this);
|
|
69
72
|
}
|
|
70
73
|
title() {
|
|
71
74
|
return this.parser.getDefinition().info.title;
|
|
@@ -73,11 +76,22 @@ export class OasGen {
|
|
|
73
76
|
version() {
|
|
74
77
|
return this.parser.getDefinition().info.version;
|
|
75
78
|
}
|
|
79
|
+
expanded(paths) {
|
|
80
|
+
this.collector.collect(paths);
|
|
81
|
+
return this.collector.expanded;
|
|
82
|
+
}
|
|
83
|
+
getTypes(paths) {
|
|
84
|
+
// make sure we pass the latest options to our context for the generation
|
|
85
|
+
this.context.generateOptions = this.options;
|
|
86
|
+
this.collector.collect(paths);
|
|
87
|
+
return this.collector.types;
|
|
88
|
+
}
|
|
76
89
|
generateSchema(paths) {
|
|
77
90
|
// make sure we pass the latest options to our context for the generation
|
|
78
91
|
this.context.generateOptions = this.options;
|
|
92
|
+
this.collector.collect(paths);
|
|
79
93
|
const writer = new Writer(this);
|
|
80
|
-
this.selections = writer.
|
|
94
|
+
this.selections = writer.generateWith(this.collector.types, this.collector.expanded);
|
|
81
95
|
return writer.flush();
|
|
82
96
|
}
|
|
83
97
|
async visit() {
|
package/dist/oas/oasGen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oasGen.js","sourceRoot":"","sources":["../../src/oas/oasGen.ts"],"names":[],"mappings":"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","sourcesContent":["import Oas from 'oas';\nimport OASNormalize from 'oas-normalize';\nimport { Operation, Webhook } from 'oas/operation';\nimport { HttpMethods, OASDocument } from 'oas/types';\nimport { OpenAPI } from 'openapi-types';\n\nimport fs from 'fs';\nimport { GenerateOptions, OasContext } from './oasContext.js';\nimport { Factory, IType } from './nodes/internal.js';\nimport { Writer } from './io/writer.js';\nimport { trace } from './log/trace.js';\n\ninterface IGenOptions {\n skipValidation: boolean;\n consolidateUnions: boolean;\n showParentInSelections: boolean;\n}\n\nexport class OasGen {\n public selections: string[] = [];\n\n public static async fromData(\n data: ArrayBuffer,\n options: IGenOptions = {\n skipValidation: false,\n consolidateUnions: true,\n showParentInSelections: false,\n },\n ): Promise<OasGen> {\n const normalizer: OASNormalize = new OASNormalize(data, {\n enablePaths: true,\n });\n\n const _loaded: Record<string, unknown> = await normalizer.load();\n console.log('loaded file');\n\n const _normalised: OpenAPI.Document = await normalizer.bundle();\n console.log('loaded bundle');\n\n if (!options.skipValidation) {\n const validated: boolean = await normalizer.validate();\n if (!validated) {\n console.log('validated', validated);\n throw new Error('Could not validate source file');\n }\n }\n\n const json = await normalizer.convert();\n console.log('converted');\n\n const parser: Oas = new Oas(json as OASDocument);\n return new OasGen(parser, options);\n }\n\n public static async fromFile(\n sourceFile: string,\n options: IGenOptions = {\n skipValidation: false,\n consolidateUnions: true,\n showParentInSelections: false,\n },\n // prompt: Prompt\n ): Promise<OasGen> {\n if (!fs.existsSync(sourceFile)) {\n throw new Error('Source not found: ' + sourceFile);\n }\n\n const normalizer: OASNormalize = new OASNormalize(sourceFile, {\n enablePaths: true,\n });\n\n const _loaded: Record<string, unknown> = await normalizer.load();\n console.log('loaded file');\n\n const _normalised: OpenAPI.Document = await normalizer.bundle();\n console.log('loaded bundle');\n\n if (!options.skipValidation) {\n const validated: boolean = await normalizer.validate();\n if (!validated) {\n console.log('validated', validated);\n throw new Error('Could not validate source file');\n }\n }\n\n const json = await normalizer.convert();\n console.log('converted');\n\n const parser: Oas = new Oas(json as OASDocument);\n return new OasGen(parser, options);\n }\n\n public parser: Oas;\n // public prompt: Prompt;\n public context?: OasContext;\n public paths: Map<string, IType> = new Map();\n public options: GenerateOptions;\n\n constructor(parser: Oas, options: GenerateOptions) {\n this.parser = parser;\n this.options = options;\n }\n\n public title(): string {\n return this.parser.getDefinition().info.title;\n }\n\n public version(): string {\n return this.parser.getDefinition().info.version;\n }\n\n public generateSchema(paths: string[]): string {\n // make sure we pass the latest options to our context for the generation\n this.context!.generateOptions = this.options;\n\n const writer: Writer = new Writer(this);\n this.selections = writer.generate(paths);\n return writer.flush();\n }\n\n public async visit(): Promise<void> {\n const parser = this.parser;\n const context = this.getContext();\n\n const paths = parser.getPaths();\n const filtered = Object.entries(paths)\n .filter(([_key, pathItem]) => this.isSupported(pathItem))\n .sort((a, b) => a[0].localeCompare(b[0], undefined, { sensitivity: 'base' }));\n\n const collected = new Map<string, IType>();\n for (const [key, pathItem] of filtered) {\n this.visitPath(context, key, pathItem).forEach((type) => collected.set(type.id, type));\n }\n\n this.paths = collected;\n }\n\n private isSupported(pathItem: Record<HttpMethods, Webhook | Operation>) {\n return pathItem.get || pathItem.post || pathItem.put || pathItem.delete || pathItem.patch;\n }\n\n public getContext(): OasContext {\n if (!this.context) {\n this.context = new OasContext(this.parser, this.options);\n }\n return this.context;\n }\n\n public expand(type: IType): IType[] {\n const ctx = this.getContext();\n const path = type.path();\n\n trace(ctx, '-> [expand]', `in: path: ${path}`);\n type.visit(ctx);\n trace(ctx, '<- [expand]', `out: path: ${path}`);\n\n return type.children;\n }\n\n public find(path: string): IType | boolean {\n for (const [_name, type] of this.paths) {\n if (type.path() === path) {\n return type;\n }\n\n type.visit(this.getContext());\n\n const result = type.find(path, type.children);\n if (result) {\n return result;\n }\n }\n\n return false;\n }\n\n /** this seems a bit buggy at the moment, needs more testing **/\n public findPath(path: string): IType | boolean {\n let collection = Array.from(this.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 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.expand(current);\n last = current;\n\n collection = Array.from(current!.children.values()) || Array.from(current!.props.values()) || [];\n\n i++;\n } while (i < parts.length);\n\n return current;\n }\n\n public writer(): Writer {\n return new Writer(this);\n }\n\n // private methods\n\n private visitGet(context: OasContext, name: string, op: Operation): IType {\n trace(context, '-> [visitGet]', `in: [${name}] id: ${op.getOperationId()}`);\n const result = Factory.createGet(name, op);\n trace(context, '<- [visitGet]', `out: [${name}] id: ${op.getOperationId()}`);\n return result;\n }\n\n private visitPost(context: OasContext, name: string, op: Operation): IType {\n trace(context, '-> [visitPost]', `in: [${name}] id: ${op.getOperationId()}`);\n const result = Factory.fromPost(name, op);\n trace(context, '<- [visitPost]', `out: [${name}] id: ${op.getOperationId()}`);\n return result;\n }\n\n private visitPut(context: OasContext, name: string, op: Operation): IType {\n trace(context, '-> [visitPut]', `in: [${name}] id: ${op.getOperationId()}`);\n const result = Factory.fromPut(name, op);\n trace(context, '<- [visitPut]', `out: [${name}] id: ${op.getOperationId()}`);\n return result;\n }\n\n private visitPatch(context: OasContext, name: string, op: Operation): IType {\n trace(context, '-> [visitPatch]', `in: [${name}] id: ${op.getOperationId()}`);\n const result = Factory.fromPatch(name, op);\n trace(context, '<- [visitPatch]', `out: [${name}] id: ${op.getOperationId()}`);\n return result;\n }\n\n private visitDelete(context: OasContext, name: string, op: Operation): IType {\n trace(context, '-> [visitDelete]', `in: [${name}] id: ${op.getOperationId()}`);\n const result = Factory.fromDelete(name, op);\n trace(context, '<- [visitDelete]', `out: [${name}] id: ${op.getOperationId()}`);\n return result;\n }\n\n private visitPath(context: OasContext, name: string, pathItem: Record<string, Webhook | Operation>): IType[] {\n const paths: IType[] = [];\n if (pathItem.get !== undefined) {\n if ((pathItem.get as Webhook | Operation)?.constructor.name === 'Webhook') {\n throw new Error('Webhook not supported');\n }\n paths.push(this.visitGet(context, name, pathItem.get as Webhook | Operation));\n }\n\n if (pathItem.post !== undefined) {\n paths.push(this.visitPost(context, name, pathItem.post));\n }\n\n if (pathItem.put !== undefined) {\n paths.push(this.visitPut(context, name, pathItem.put));\n }\n\n if (pathItem.patch !== undefined) {\n paths.push(this.visitPatch(context, name, pathItem.patch));\n }\n\n if (pathItem.delete !== undefined) {\n paths.push(this.visitDelete(context, name, pathItem.delete));\n }\n\n return paths;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"oasGen.js","sourceRoot":"","sources":["../../src/oas/oasGen.ts"],"names":[],"mappings":"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","sourcesContent":["import Oas from 'oas';\nimport OASNormalize from 'oas-normalize';\nimport { Operation, Webhook } from 'oas/operation';\nimport { HttpMethods, OASDocument } from 'oas/types';\nimport { OpenAPI } from 'openapi-types';\n\nimport fs from 'fs';\nimport { GenerateOptions, OasContext } from './oasContext.js';\nimport { Factory, IType } from './nodes/internal.js';\nimport { Writer } from './io/writer.js';\nimport { trace } from './log/trace.js';\nimport { TypesCollector } from './generator/typesCollector.js';\n\ninterface IGenOptions {\n skipValidation: boolean;\n consolidateUnions: boolean;\n showParentInSelections: boolean;\n}\n\nexport class OasGen {\n public selections: string[] = [];\n\n public static async fromData(\n data: ArrayBuffer,\n options: IGenOptions = {\n skipValidation: false,\n consolidateUnions: true,\n showParentInSelections: false,\n },\n ): Promise<OasGen> {\n const normalizer: OASNormalize = new OASNormalize(data, {\n enablePaths: true,\n });\n\n const _loaded: Record<string, unknown> = await normalizer.load();\n console.log('loaded file');\n\n const _normalised: OpenAPI.Document = await normalizer.bundle();\n console.log('loaded bundle');\n\n if (!options.skipValidation) {\n const validated: boolean = await normalizer.validate();\n if (!validated) {\n console.log('validated', validated);\n throw new Error('Could not validate source file');\n }\n }\n\n const json = await normalizer.convert();\n console.log('converted');\n\n const parser: Oas = new Oas(json as OASDocument);\n return new OasGen(parser, options);\n }\n\n public static async fromFile(\n sourceFile: string,\n options: IGenOptions = {\n skipValidation: false,\n consolidateUnions: true,\n showParentInSelections: false,\n },\n // prompt: Prompt\n ): Promise<OasGen> {\n if (!fs.existsSync(sourceFile)) {\n throw new Error('Source not found: ' + sourceFile);\n }\n\n const normalizer: OASNormalize = new OASNormalize(sourceFile, {\n enablePaths: true,\n });\n\n const _loaded: Record<string, unknown> = await normalizer.load();\n console.log('loaded file');\n\n const _normalised: OpenAPI.Document = await normalizer.bundle();\n console.log('loaded bundle');\n\n if (!options.skipValidation) {\n const validated: boolean = await normalizer.validate();\n if (!validated) {\n console.log('validated', validated);\n throw new Error('Could not validate source file');\n }\n }\n\n const json = await normalizer.convert();\n console.log('converted');\n\n const parser: Oas = new Oas(json as OASDocument);\n return new OasGen(parser, options);\n }\n\n public parser: Oas;\n // public prompt: Prompt;\n public context?: OasContext;\n public paths: Map<string, IType> = new Map();\n public options: GenerateOptions;\n private collector: TypesCollector;\n\n constructor(parser: Oas, options: GenerateOptions) {\n this.parser = parser;\n this.options = options;\n this.collector = new TypesCollector(this);\n }\n\n public title(): string {\n return this.parser.getDefinition().info.title;\n }\n\n public version(): string {\n return this.parser.getDefinition().info.version;\n }\n\n public expanded(paths: string[]): string[] {\n this.collector!.collect(paths);\n return this.collector!.expanded;\n }\n\n public getTypes(paths: string[]): Map<string, IType> {\n // make sure we pass the latest options to our context for the generation\n this.context!.generateOptions = this.options;\n this.collector!.collect(paths);\n return this.collector.types;\n }\n\n public generateSchema(paths: string[]): string {\n // make sure we pass the latest options to our context for the generation\n this.context!.generateOptions = this.options;\n this.collector!.collect(paths);\n\n const writer: Writer = new Writer(this);\n this.selections = writer.generateWith(this.collector!.types, this.collector!.expanded);\n return writer.flush();\n }\n\n public async visit(): Promise<void> {\n const parser = this.parser;\n const context = this.getContext();\n\n const paths = parser.getPaths();\n const filtered = Object.entries(paths)\n .filter(([_key, pathItem]) => this.isSupported(pathItem))\n .sort((a, b) => a[0].localeCompare(b[0], undefined, { sensitivity: 'base' }));\n\n const collected = new Map<string, IType>();\n for (const [key, pathItem] of filtered) {\n this.visitPath(context, key, pathItem).forEach((type) => collected.set(type.id, type));\n }\n\n this.paths = collected;\n }\n\n private isSupported(pathItem: Record<HttpMethods, Webhook | Operation>) {\n return pathItem.get || pathItem.post || pathItem.put || pathItem.delete || pathItem.patch;\n }\n\n public getContext(): OasContext {\n if (!this.context) {\n this.context = new OasContext(this.parser, this.options);\n }\n return this.context;\n }\n\n public expand(type: IType): IType[] {\n const ctx = this.getContext();\n const path = type.path();\n\n trace(ctx, '-> [expand]', `in: path: ${path}`);\n type.visit(ctx);\n trace(ctx, '<- [expand]', `out: path: ${path}`);\n\n return type.children;\n }\n\n public find(path: string): IType | boolean {\n for (const [_name, type] of this.paths) {\n if (type.path() === path) {\n return type;\n }\n\n type.visit(this.getContext());\n\n const result = type.find(path, type.children);\n if (result) {\n return result;\n }\n }\n\n return false;\n }\n\n /** this seems a bit buggy at the moment, needs more testing **/\n public findPath(path: string): IType | boolean {\n let collection = Array.from(this.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 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.expand(current);\n last = current;\n\n collection = Array.from(current!.children.values()) || Array.from(current!.props.values()) || [];\n\n i++;\n } while (i < parts.length);\n\n return current;\n }\n\n public writer(): Writer {\n return new Writer(this);\n }\n\n // private methods\n\n private visitGet(context: OasContext, name: string, op: Operation): IType {\n trace(context, '-> [visitGet]', `in: [${name}] id: ${op.getOperationId()}`);\n const result = Factory.createGet(name, op);\n trace(context, '<- [visitGet]', `out: [${name}] id: ${op.getOperationId()}`);\n return result;\n }\n\n private visitPost(context: OasContext, name: string, op: Operation): IType {\n trace(context, '-> [visitPost]', `in: [${name}] id: ${op.getOperationId()}`);\n const result = Factory.fromPost(name, op);\n trace(context, '<- [visitPost]', `out: [${name}] id: ${op.getOperationId()}`);\n return result;\n }\n\n private visitPut(context: OasContext, name: string, op: Operation): IType {\n trace(context, '-> [visitPut]', `in: [${name}] id: ${op.getOperationId()}`);\n const result = Factory.fromPut(name, op);\n trace(context, '<- [visitPut]', `out: [${name}] id: ${op.getOperationId()}`);\n return result;\n }\n\n private visitPatch(context: OasContext, name: string, op: Operation): IType {\n trace(context, '-> [visitPatch]', `in: [${name}] id: ${op.getOperationId()}`);\n const result = Factory.fromPatch(name, op);\n trace(context, '<- [visitPatch]', `out: [${name}] id: ${op.getOperationId()}`);\n return result;\n }\n\n private visitDelete(context: OasContext, name: string, op: Operation): IType {\n trace(context, '-> [visitDelete]', `in: [${name}] id: ${op.getOperationId()}`);\n const result = Factory.fromDelete(name, op);\n trace(context, '<- [visitDelete]', `out: [${name}] id: ${op.getOperationId()}`);\n return result;\n }\n\n private visitPath(context: OasContext, name: string, pathItem: Record<string, Webhook | Operation>): IType[] {\n const paths: IType[] = [];\n if (pathItem.get !== undefined) {\n if ((pathItem.get as Webhook | Operation)?.constructor.name === 'Webhook') {\n throw new Error('Webhook not supported');\n }\n paths.push(this.visitGet(context, name, pathItem.get as Webhook | Operation));\n }\n\n if (pathItem.post !== undefined) {\n paths.push(this.visitPost(context, name, pathItem.post));\n }\n\n if (pathItem.put !== undefined) {\n paths.push(this.visitPut(context, name, pathItem.put));\n }\n\n if (pathItem.patch !== undefined) {\n paths.push(this.visitPatch(context, name, pathItem.patch));\n }\n\n if (pathItem.delete !== undefined) {\n paths.push(this.visitDelete(context, name, pathItem.delete));\n }\n\n return paths;\n }\n}\n"]}
|