Skip to content

Commit f1a26bd

Browse files
committed
erroNotFound option
1 parent 8ec5417 commit f1a26bd

File tree

6 files changed

+72
-9
lines changed

6 files changed

+72
-9
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,5 @@ This will work as you'd expect.
8888
|Name|Type|Description|Default|
8989
|---|---|---|---|
9090
|`allowMultiple`|`Boolean`| Determines whether `className` can have multiple class names. Throws an error when the constrained is not met. |`true`|
91-
|`includeOriginal`|`Boolean`| Determines whether the original `className` value should be kept in addition to the appended generated value. |`true`|
91+
|`keepOriginal`|`Boolean`| Determines whether the original `className` value is kept in addition to the appended CSS modules styles CSS class name. |`true`|
92+
|`errorNotFound`|`Boolean`| Determines whether an error is raised if `className` defines a CSS class(es) that is not present in the CSS modules styles. |`true`|

dist/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ exports['default'] = function (Component, styles) {
4848
options.includeOriginal = true;
4949
}
5050

51+
if (options.errorNotFound !== true) {
52+
options.errorNotFound = false;
53+
}
54+
5155
return (0, _linkClass2['default'])(_get(Object.getPrototypeOf(_class.prototype), 'render', this).call(this), styles, options);
5256
}
5357
}]);

dist/linkClass.js

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,30 @@ linkClass = function (element) {
3535
}
3636

3737
newClassName = newClassName.map(function (className) {
38-
if (styles[className]) {
39-
return className + ' ' + styles[className];
38+
if (!styles[className] && options.errorNotFound === true) {
39+
throw new Error('"' + className + '" CSS class name is not found in CSS modules styles.');
40+
}
41+
42+
if (options.includeOriginal === false) {
43+
if (styles[className]) {
44+
return styles[className];
45+
} else {
46+
return '';
47+
}
4048
} else {
41-
return className;
49+
if (styles[className]) {
50+
return className + ' ' + styles[className];
51+
} else {
52+
return className;
53+
}
4254
}
43-
}).join(' ');
55+
});
56+
57+
newClassName = newClassName.filter(function (className) {
58+
return className.length;
59+
});
60+
61+
newClassName = newClassName.join(' ');
4462
}
4563

4664
// A child can be either an array, a sole object or a string.

src/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ export default (Component, styles, options = {}) => {
1717
options.includeOriginal = true;
1818
}
1919

20+
if (options.errorNotFound !== true) {
21+
options.errorNotFound = false;
22+
}
23+
2024
return linkClass(super.render(), styles, options);
2125
}
2226
}

src/linkClass.js

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,30 @@ linkClass = (element, styles = {}, options = {}) => {
2222
}
2323

2424
newClassName = newClassName.map((className) => {
25-
if (styles[className]) {
26-
return `${className} ${styles[className]}`;
25+
if (!styles[className] && options.errorNotFound === true) {
26+
throw new Error(`"${className}" CSS class name is not found in CSS modules styles.`);
27+
}
28+
29+
if (options.includeOriginal === false) {
30+
if (styles[className]) {
31+
return styles[className];
32+
} else {
33+
return '';
34+
}
2735
} else {
28-
return className;
36+
if (styles[className]) {
37+
return `${className} ${styles[className]}`;
38+
} else {
39+
return className;
40+
}
2941
}
30-
}).join(' ');
42+
});
43+
44+
newClassName = newClassName.filter(function (className) {
45+
return className.length;
46+
});
47+
48+
newClassName = newClassName.join(' ');
3149
}
3250

3351
// A child can be either an array, a sole object or a string.

test/linkClass.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,4 +135,22 @@ describe('linkClass', () => {
135135
});
136136
});
137137
});
138+
139+
describe('when options.includeOriginal is false', () => {
140+
it('does not include the original class name', () => {
141+
let subject;
142+
143+
subject = linkClass(<div className='foo bar'></div>, {foo: 'foo-1'}, {includeOriginal: false});
144+
145+
expect(subject.props.className).to.equal('foo-1');
146+
});
147+
});
148+
149+
describe('when options.errorNotFound is true', () => {
150+
it('throws an error when className defines a CSS class that does not exist in CSS modules styles', () => {
151+
expect(() => {
152+
linkClass(<div className='foo'></div>, {}, {errorNotFound: true})
153+
}).to.throw(Error, '"foo" CSS class name is not found in CSS modules styles.');
154+
});
155+
});
138156
});

0 commit comments

Comments
 (0)