Skip to content
This repository was archived by the owner on Nov 27, 2023. It is now read-only.

Commit 630d5c4

Browse files
committed
refactor: Renamed writer to generator
1 parent 2f5b676 commit 630d5c4

File tree

5 files changed

+69
-69
lines changed

5 files changed

+69
-69
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,9 @@ function generateFromAst(name, ast, options)
7878
```
7979

8080
Options:
81-
* writer
82-
An instance of the exported writer class. This options is usefull to write
83-
multiple declarations into one .d.ts file. The writer could be used
81+
* generator
82+
An instance of the exported Generator class. This options is usefull to write
83+
multiple declarations into one .d.ts file. The generator could be used
8484
for consecutive function calls.
8585
* instanceOfResolver
8686
A function which gets a type name (as string) and should return the path

index.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ export interface IOptions {
1111
*/
1212
instanceOfResolver?: InstanceOfResolver;
1313
/**
14-
* The writer generating .d.ts code with.
14+
* The Generator generating .d.ts code with.
1515
*/
16-
writer?: Writer;
16+
generator?: Generator;
1717
}
1818

1919
interface IASTNode {
@@ -84,25 +84,25 @@ const defaultInstanceOfResolver: InstanceOfResolver = (name: string): string =>
8484

8585
export function generateFromAst(name: string, ast: any, options: IOptions = {}): string {
8686
const {exportType, classname, propTypes}: IParsingResult = parseAst(ast, options.instanceOfResolver);
87-
const writer: Writer = options.writer || new Writer();
88-
writer.declareModule(name, () => {
89-
writer.import('* as React', 'react');
87+
const generator: Generator = options.generator || new Generator();
88+
generator.declareModule(name, () => {
89+
generator.import('* as React', 'react');
9090
if (propTypes) {
9191
Object.keys(propTypes).forEach((propName: string) => {
9292
const prop: IProp = propTypes[propName];
9393
if (prop.importPath) {
94-
writer.import(prop.importType, prop.importPath);
94+
generator.import(prop.importType, prop.importPath);
9595
}
9696
});
9797
}
98-
writer.nl();
99-
writer.props(classname, propTypes);
100-
writer.nl();
101-
writer.exportDeclaration(exportType, () => {
102-
writer.class(classname, !!propTypes);
98+
generator.nl();
99+
generator.props(classname, propTypes);
100+
generator.nl();
101+
generator.exportDeclaration(exportType, () => {
102+
generator.class(classname, !!propTypes);
103103
});
104104
});
105-
return writer.toString();
105+
return generator.toString();
106106
}
107107

108108
enum ExportType {
@@ -288,7 +288,7 @@ export function getTypeFromPropType(node: IASTNode, instanceOfResolver: Instance
288288
return result;
289289
}
290290

291-
export class Writer {
291+
export class Generator {
292292

293293
private static NL: string = '\n';
294294

@@ -305,7 +305,7 @@ export class Writer {
305305
}
306306

307307
public nl(): void {
308-
this.code += Writer.NL;
308+
this.code += Generator.NL;
309309
}
310310

311311
public declareModule(name: string, fn: () => void): void {

tests/generator-test.ts

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { assert } from 'chai';
2+
import { Generator } from '../index';
3+
4+
describe('The Generator', () => {
5+
let generator: Generator;
6+
beforeEach(() => {
7+
generator = new Generator();
8+
});
9+
it('should write a module declaration', () => {
10+
generator.declareModule('name', () => {
11+
//
12+
});
13+
assert.equal(generator.toString(), "declare module 'name' {\n}\n");
14+
});
15+
it('should write an import statement', () => {
16+
generator.import('decls', 'from');
17+
assert.equal(generator.toString(), "import decls from 'from';\n");
18+
});
19+
it('should write a required property', () => {
20+
generator.prop('name', 'type', false);
21+
assert.equal(generator.toString(), 'name: type;\n');
22+
});
23+
it('should write an optional property', () => {
24+
generator.prop('name', 'type', true);
25+
assert.equal(generator.toString(), 'name?: type;\n');
26+
});
27+
it('should write a property interface', () => {
28+
generator.props('Name', {prop: {type: 'type', optional: true}});
29+
assert.equal(generator.toString(), 'interface NameProps {\n\tkey?: any;\n\tprop?: type;\n}\n');
30+
});
31+
it('should write a class with props declaration', () => {
32+
generator.class('Name', true);
33+
assert.equal(generator.toString(), 'class Name extends React.Component<NameProps, any> {\n}\n');
34+
});
35+
it('should write a class without props declaration', () => {
36+
generator.class('Name', false);
37+
assert.equal(generator.toString(), 'class Name extends React.Component<any, any> {\n}\n');
38+
});
39+
it('should write an indented block comment', () => {
40+
generator.comment('* yada\n\t\t\t\tyada\n ');
41+
assert.equal(generator.toString(), '/** yada\nyada\n */\n');
42+
});
43+
it('should write an export default declaration', () => {
44+
generator.exportDeclaration(0, () => undefined);
45+
assert.equal(generator.toString(), 'export default ');
46+
});
47+
it('should write a named export declaration', () => {
48+
generator.exportDeclaration(1, () => undefined);
49+
assert.equal(generator.toString(), 'export ');
50+
});
51+
});

tests/writer-test.ts

Lines changed: 0 additions & 51 deletions
This file was deleted.

tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
"index.ts",
1111
"tests/parsing-test.ts",
1212
"tests/parse-prop-types-test.ts",
13-
"tests/writer-test.ts"
13+
"tests/generator-test.ts"
1414
]
1515
}

0 commit comments

Comments
 (0)