Skip to content

Commit da5aaf4

Browse files
authored
Merge pull request #56 from nanot1m/object-prop-classes
Classes as object props types
2 parents a583abf + 74de6ef commit da5aaf4

File tree

4 files changed

+102
-91
lines changed

4 files changed

+102
-91
lines changed

src/dtsCreator.js

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,9 @@ import isThere from 'is-there';
88
import mkdirp from 'mkdirp';
99
import camelcase from "camelcase"
1010

11-
import {TokenValidator} from './tokenValidator';
1211
import FileSystemLoader from './fileSystemLoader';
1312
import os from 'os';
1413

15-
let validator = new TokenValidator();
16-
1714
function removeExtension(filePath) {
1815
const ext = path.extname(filePath);
1916
return filePath.replace(new RegExp(ext + '$'), '');
@@ -28,7 +25,6 @@ class DtsContent {
2825
rInputPath,
2926
rawTokenList,
3027
resultList,
31-
messageList,
3228
EOL
3329
}) {
3430
this.dropExtension = dropExtension;
@@ -38,7 +34,6 @@ class DtsContent {
3834
this.rInputPath = rInputPath;
3935
this.rawTokenList = rawTokenList;
4036
this.resultList = resultList;
41-
this.messageList = messageList;
4237
this.EOL = EOL;
4338
}
4439

@@ -47,8 +42,14 @@ class DtsContent {
4742
}
4843

4944
get formatted() {
50-
if(!this.resultList || !this.resultList.length || this.resultList.length === 0) return '';
51-
return this.resultList.join(this.EOL) + this.EOL;
45+
if(!this.resultList || !this.resultList.length) return '';
46+
return [
47+
'declare const styles: {',
48+
...this.resultList.map(line => ' ' + line),
49+
'};',
50+
'export = styles;',
51+
''
52+
].join(os.EOL) + this.EOL;
5253
}
5354

5455
get tokens() {
@@ -110,22 +111,12 @@ export class DtsCreator {
110111
if(res) {
111112
var tokens = res;
112113
var keys = Object.keys(tokens);
113-
var validKeys = [], invalidKeys = [];
114-
var messageList = [];
115114

116115
var convertKey = this.getConvertKeyMethod(this.camelCase);
117116

118-
keys.forEach(key => {
119-
const convertedKey = convertKey(key);
120-
var ret = validator.validate(convertedKey);
121-
if(ret.isValid) {
122-
validKeys.push(convertedKey);
123-
}else{
124-
messageList.push(ret.message);
125-
}
126-
});
127-
128-
var result = validKeys.map(k => ('export const ' + k + ': string;'));
117+
var result = keys
118+
.map(k => convertKey(k))
119+
.map(k => 'readonly "' + k + '": string;')
129120

130121
var content = new DtsContent({
131122
dropExtension: this.dropExtension,
@@ -135,7 +126,6 @@ export class DtsCreator {
135126
rInputPath,
136127
rawTokenList: keys,
137128
resultList: result,
138-
messageList,
139129
EOL: this.EOL
140130
});
141131

src/tokenValidator.js

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

test/dtsCreator.spec.js

Lines changed: 86 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -12,38 +12,43 @@ describe('DtsCreator', () => {
1212
it('returns DtsContent instance simple css', done => {
1313
creator.create('test/testStyle.css').then(content => {
1414
assert.equal(content.contents.length, 1);
15-
assert.equal(content.contents[0], "export const myClass: string;")
15+
assert.equal(content.contents[0], 'readonly "myClass": string;');
1616
done();
1717
});
1818
});
1919
it('rejects an error with invalid CSS', done => {
20-
creator.create('test/errorCss.css').then(content => {
21-
assert.fail();
22-
}).catch(err => {
23-
assert.equal(err.name, 'CssSyntaxError');
24-
done();
25-
});
20+
creator
21+
.create('test/errorCss.css')
22+
.then(content => {
23+
assert.fail();
24+
})
25+
.catch(err => {
26+
assert.equal(err.name, 'CssSyntaxError');
27+
done();
28+
});
2629
});
2730
it('returns DtsContent instance from composing css', done => {
2831
creator.create('test/composer.css').then(content => {
2932
assert.equal(content.contents.length, 1);
30-
assert.equal(content.contents[0], "export const root: string;")
33+
assert.equal(content.contents[0], 'readonly "root": string;');
3134
done();
3235
});
33-
})
36+
});
3437
it('returns DtsContent instance from composing css whose has invalid import/composes', done => {
3538
creator.create('test/invalidComposer.scss').then(content => {
3639
assert.equal(content.contents.length, 1);
37-
assert.equal(content.contents[0], "export const myClass: string;")
40+
assert.equal(content.contents[0], 'readonly "myClass": string;');
3841
done();
3942
});
4043
});
4144
it('returns DtsContent instance from the pair of path and contents', done => {
42-
creator.create('test/somePath', `.myClass { color: red }`).then(content => {
43-
assert.equal(content.contents.length, 1);
44-
assert.equal(content.contents[0], "export const myClass: string;")
45-
done();
46-
});
45+
creator
46+
.create('test/somePath', `.myClass { color: red }`)
47+
.then(content => {
48+
assert.equal(content.contents.length, 1);
49+
assert.equal(content.contents[0], 'readonly "myClass": string;');
50+
done();
51+
});
4752
});
4853
});
4954

@@ -55,15 +60,13 @@ describe('DtsCreator', () => {
5560
});
5661
});
5762
});
58-
5963
});
6064

6165
describe('DtsContent', () => {
62-
6366
describe('#tokens', () => {
6467
it('returns original tokens', done => {
6568
new DtsCreator().create('test/testStyle.css').then(content => {
66-
assert.equal(content.tokens[0], "myClass");
69+
assert.equal(content.tokens[0], 'myClass');
6770
done();
6871
});
6972
});
@@ -97,51 +100,94 @@ describe('DtsContent', () => {
97100
describe('#formatted', () => {
98101
it('returns formatted .d.ts string', done => {
99102
new DtsCreator().create('test/testStyle.css').then(content => {
100-
assert.equal(content.formatted, "export const myClass: string;" + os.EOL);
103+
assert.equal(
104+
content.formatted,
105+
`\
106+
declare const styles: {
107+
readonly "myClass": string;
108+
};
109+
export = styles;
110+
111+
`
112+
);
101113
done();
102114
});
103115
});
104116

105117
it('returns empty object exportion when the result list has no items', done => {
106118
new DtsCreator().create('test/empty.css').then(content => {
107-
assert.equal(content.formatted, "");
119+
assert.equal(content.formatted, '');
108120
done();
109121
});
110122
});
111123

112124
describe('#camelCase option', () => {
113125
it('camelCase == true: returns camelized tokens for lowercase classes', done => {
114-
new DtsCreator({camelCase: true}).create('test/kebabed.css').then(content => {
115-
assert.equal(content.formatted, "export const myClass: string;" + os.EOL);
116-
done();
117-
});
126+
new DtsCreator({ camelCase: true })
127+
.create('test/kebabed.css')
128+
.then(content => {
129+
assert.equal(
130+
content.formatted,
131+
`\
132+
declare const styles: {
133+
readonly "myClass": string;
134+
};
135+
export = styles;
136+
137+
`
138+
);
139+
done();
140+
});
118141
});
119142

120143
it('camelCase == true: returns camelized tokens for uppercase classes ', done => {
121-
new DtsCreator({camelCase: true}).create('test/kebabedUpperCase.css').then(content => {
122-
assert.equal(content.formatted, "export const myClass: string;" + os.EOL);
123-
done();
124-
});
144+
new DtsCreator({ camelCase: true })
145+
.create('test/kebabedUpperCase.css')
146+
.then(content => {
147+
assert.equal(
148+
content.formatted,
149+
`\
150+
declare const styles: {
151+
readonly "myClass": string;
152+
};
153+
export = styles;
154+
155+
`
156+
);
157+
done();
158+
});
125159
});
126160

127161
it('camelCase == "dashes": returns camelized tokens for dashes only', done => {
128-
new DtsCreator({camelCase: 'dashes'}).create('test/kebabedUpperCase.css').then(content => {
129-
assert.equal(content.formatted, "export const MyClass: string;" + os.EOL);
130-
done();
131-
});
162+
new DtsCreator({ camelCase: 'dashes' })
163+
.create('test/kebabedUpperCase.css')
164+
.then(content => {
165+
assert.equal(
166+
content.formatted,
167+
`\
168+
declare const styles: {
169+
readonly "MyClass": string;
170+
};
171+
export = styles;
172+
173+
`
174+
);
175+
done();
176+
});
132177
});
133178
});
134-
135179
});
136180

137181
describe('#writeFile', () => {
138182
it('writes a file', done => {
139-
new DtsCreator().create('test/testStyle.css').then(content => {
140-
return content.writeFile();
141-
}).then(() => {
142-
done();
143-
});
183+
new DtsCreator()
184+
.create('test/testStyle.css')
185+
.then(content => {
186+
return content.writeFile();
187+
})
188+
.then(() => {
189+
done();
190+
});
144191
});
145192
});
146-
147-
});
193+
});

test/testStyle.css.d.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1-
export const myClass: string;
1+
declare const styles: {
2+
readonly "myClass": string;
3+
};
4+
export = styles;
5+

0 commit comments

Comments
 (0)