Skip to content

Commit c322efd

Browse files
committed
Parsers
1 parent 2d5954a commit c322efd

File tree

3 files changed

+29
-34
lines changed

3 files changed

+29
-34
lines changed

src/OperationParser.ts

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,35 @@
11
import {OpenAPIV3} from "openapi-types";
22
import * as lodash from "lodash";
33
import {OperationContext} from "./openapi/OpenAPIVisitor";
4-
import {toResourceName} from "./n8n/utils";
54

65
export interface IOperationParser {
7-
getResources(operation: OpenAPIV3.OperationObject, context: OperationContext): string[]
6+
name(operation: OpenAPIV3.OperationObject, context: OperationContext): string
87

9-
getOperationName(operation: OpenAPIV3.OperationObject, context: OperationContext): string
8+
value(operation: OpenAPIV3.OperationObject, context: OperationContext): string
109

11-
getOptionAction(operation: OpenAPIV3.OperationObject, context: OperationContext): string
10+
action(operation: OpenAPIV3.OperationObject, context: OperationContext): string
1211

13-
getOptionDescription(operation: OpenAPIV3.OperationObject, context: OperationContext): string
12+
description(operation: OpenAPIV3.OperationObject, context: OperationContext): string
1413
}
1514

16-
export class N8NOperationParser implements IOperationParser {
17-
getResources(operation: OpenAPIV3.OperationObject, context: OperationContext): string[] {
18-
const tags = operation.tags as string[]
19-
return tags.map(toResourceName)
20-
}
21-
22-
getOperationName(operation: OpenAPIV3.OperationObject, context: OperationContext): string {
15+
export class DefaultOperationParser implements IOperationParser {
16+
name(operation: OpenAPIV3.OperationObject, context: OperationContext): string {
2317
let operationId: string = operation.operationId!!.split('_').slice(1).join('_');
2418
if (!operationId) {
2519
operationId = operation.operationId as string
2620
}
2721
return lodash.startCase(operationId)
2822
}
2923

30-
getOptionAction(operation: OpenAPIV3.OperationObject, context: OperationContext): string {
31-
return operation.summary || this.getOperationName(operation, context)
24+
value(operation: OpenAPIV3.OperationObject, context: OperationContext): string {
25+
return this.name(operation, context)
26+
}
27+
28+
action(operation: OpenAPIV3.OperationObject, context: OperationContext): string {
29+
return operation.summary || this.name(operation, context)
3230
}
3331

34-
getOptionDescription(operation: OpenAPIV3.OperationObject, context: OperationContext): string {
32+
description(operation: OpenAPIV3.OperationObject, context: OperationContext): string {
3533
return operation.description || operation.summary || '';
3634
}
3735

src/OperationsCollector.ts

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ import * as lodash from "lodash";
33
import pino from "pino";
44
import {OpenAPIV3} from "openapi-types";
55
import {N8NINodeProperties} from "./SchemaToINodeProperties";
6-
import {IOperationParser, N8NOperationParser} from "./OperationParser";
6+
import {DefaultOperationParser, IOperationParser} from "./OperationParser";
77
import {OptionsByResourceMap} from "./n8n/OptionsByResourceMap";
88
import {INodeProperties} from "n8n-workflow";
99
import {replacePathVarsToParameter} from "./n8n/utils";
10+
import {DefaultResourceParser, IResourceParser} from "../ResourceParser";
1011

1112
export class BaseOperationsCollector implements OpenAPIVisitor {
1213
public readonly _fields: INodeProperties[]
@@ -15,7 +16,8 @@ export class BaseOperationsCollector implements OpenAPIVisitor {
1516
private n8nNodeProperties: N8NINodeProperties;
1617

1718
// Dependency injection light version
18-
protected operationParser: IOperationParser = new N8NOperationParser()
19+
protected operationParser: IOperationParser = new DefaultOperationParser()
20+
protected resourceParser: IResourceParser = new DefaultResourceParser()
1921
private bindings: any
2022

2123
constructor(logger: pino.Logger, doc: any) {
@@ -73,12 +75,8 @@ export class BaseOperationsCollector implements OpenAPIVisitor {
7375
}
7476

7577
_visitOperation(operation: OpenAPIV3.OperationObject, context: OperationContext) {
76-
const tags = operation.tags;
77-
if (!tags || tags.length === 0) {
78-
throw new Error(`No tags found for operation '${operation}'`);
79-
}
8078
const {option, fields: operationFields} = this.parseOperation(operation, context);
81-
const resources = this.operationParser.getResources(operation, context);
79+
const resources = operation.tags!!.map((tag: string) => this.resourceParser.value({name: tag}))
8280
for (const resourceName of resources) {
8381
const fields = lodash.cloneDeep(operationFields)
8482
const operationName = option.name;
@@ -127,14 +125,12 @@ export class BaseOperationsCollector implements OpenAPIVisitor {
127125
protected parseOperation(operation: OpenAPIV3.OperationObject, context: OperationContext) {
128126
const method = context.method
129127
const uri = context.pattern;
130-
const operationName = this.operationParser.getOperationName(operation, context);
131-
const optionAction = this.operationParser.getOptionAction(operation, context);
132-
const description = this.operationParser.getOptionDescription(operation, context)
128+
const parser = this.operationParser
133129
const option = {
134-
name: operationName,
135-
value: operationName,
136-
action: optionAction,
137-
description: description,
130+
name: parser.name(operation, context),
131+
value: parser.value(operation, context),
132+
action: parser.action(operation, context),
133+
description: parser.description(operation, context),
138134
routing: {
139135
request: {
140136
method: method.toUpperCase(),

src/ResourcePropertiesCollector.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import {OpenAPIVisitor, OperationContext} from "./openapi/OpenAPIVisitor";
2-
import * as lodash from "lodash";
32
import {OpenAPIV3} from "openapi-types";
43
import {INodeProperties} from "n8n-workflow";
5-
import {toResourceName} from "./n8n/utils";
4+
import {DefaultResourceParser, IResourceParser} from "../ResourceParser";
65

76
interface TagObject {
87
name: string;
@@ -16,18 +15,20 @@ interface TagObject {
1615
export class ResourcePropertiesCollector implements OpenAPIVisitor {
1716
private tags: Map<string, TagObject>;
1817
private tagsOrder = new Map<string, number>();
18+
protected resourceParser: IResourceParser = new DefaultResourceParser()
1919

2020
constructor() {
2121
this.tags = new Map<string, TagObject>()
2222
}
2323

2424
get iNodeProperty(): INodeProperties {
2525
const tags = this.sortedTags
26+
const parser = this.resourceParser
2627
const options = tags.map((tag) => {
2728
return {
28-
name: lodash.startCase(tag.name),
29-
value: toResourceName(tag.name),
30-
description: tag.description,
29+
name: parser.name(tag),
30+
value: parser.value(tag),
31+
description: parser.description(tag),
3132
};
3233
});
3334
return {

0 commit comments

Comments
 (0)