-
Notifications
You must be signed in to change notification settings - Fork 1
/
SourceToTargetFileConverter.ts
49 lines (35 loc) · 1.63 KB
/
SourceToTargetFileConverter.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// tslint:disable-next-line: max-line-length
import { createToken, SyntaxKind } from 'typescript';
import { SourceFileDescriptor } from '../descriptors';
import { TargetFileDescriptor } from '../descriptors/TargetFileDescriptor';
import { INodeBuilder } from '../interfaces/INodeBuilder';
import { tools } from '../tools';
import { NodeBuilder } from './NodeBuilder';
// https://medium.com/@marvin_78330/creating-typescript-with-the-typescript-compiler-ac3370701d7f
// TODO: This is a TargetFileGenerator !! Replace SourceFileDescriptor...
export class SourceToTargetFileConverter {
buildNodes(targetFilePath: string, sourceFileDescriptor: SourceFileDescriptor, nodeBuilder: INodeBuilder): TargetFileDescriptor {
const result = new TargetFileDescriptor(targetFilePath);
const builder = new NodeBuilder();
builder.addMultiLineComment(
'File generated by Interface generator (dotup.dotup-vscode-interface-generator)',
// tslint:disable-next-line: newline-per-chained-call
`Date: ${tools.getCurrentIsoDate()}`
);
builder.add(createToken(SyntaxKind.NewLineTrivia));
// Imports
if (sourceFileDescriptor.importDeclarations.length >= 0) {
sourceFileDescriptor.importDeclarations.forEach(item => builder.add(item));
// New line
builder.add(createToken(SyntaxKind.NewLineTrivia));
}
// For each class
sourceFileDescriptor.classDescriptors.forEach(item => {
// this.out.appendLine(`Build nodes for ${item.interfaceName}`);
const interfaceNodes = nodeBuilder.buildNodes(item);
builder.add(interfaceNodes);
});
result.nodes = builder.nodes;
return result;
}
}