diff --git a/lib/loader/file_loader.js b/lib/loader/file_loader.js index b59ed4ba..636d3b1f 100644 --- a/lib/loader/file_loader.js +++ b/lib/loader/file_loader.js @@ -240,7 +240,8 @@ function defaultCamelize(filepath, caseStyle) { // FooBar.js > FooBar // FooBar.js > FooBar // FooBar.js > fooBar (if lowercaseFirst is true) - property = property.replace(/[_-][a-z]/ig, s => s.substring(1).toUpperCase()); + // aaa_00.js > aaa00 (digits after separator should also be handled) + property = property.replace(/[_-][a-z0-9]/ig, s => s.substring(1).toUpperCase()); let first = property[0]; switch (caseStyle) { case 'lower': diff --git a/test/fixtures/load_dirs/camelize/foo_00.js b/test/fixtures/load_dirs/camelize/foo_00.js new file mode 100644 index 00000000..8b46fbba --- /dev/null +++ b/test/fixtures/load_dirs/camelize/foo_00.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = {}; diff --git a/test/loader/file_loader.test.js b/test/loader/file_loader.test.js index 475d327c..56037c6b 100644 --- a/test/loader/file_loader.test.js +++ b/test/loader/file_loader.test.js @@ -265,6 +265,7 @@ describe('test/loader/file_loader.test.js', () => { assert(target.FooBar2); assert(target.FooBar3); assert(target.FooBar4); + assert(target.Foo00); }); it('should load when caseStyle = camel', () => { @@ -279,6 +280,7 @@ describe('test/loader/file_loader.test.js', () => { assert(target.fooBar2); assert(target.FooBar3); assert(target.fooBar4); + assert(target.foo00); }); it('should load when caseStyle = lower', () => { @@ -293,6 +295,7 @@ describe('test/loader/file_loader.test.js', () => { assert(target.fooBar2); assert(target.fooBar3); assert(target.fooBar4); + assert(target.foo00); }); it('should load when caseStyle is function', () => { @@ -312,6 +315,7 @@ describe('test/loader/file_loader.test.js', () => { assert(target.fooBar2); assert(target.FooBar3); assert(target['foo-bar4']); + assert(target.foo00); }); it('should throw when caseStyle do not return array', () => { @@ -340,6 +344,20 @@ describe('test/loader/file_loader.test.js', () => { assert(target.fooBar2); assert(target.fooBar3); assert(target.fooBar4); + assert(target.foo00); + }); + + it('should handle separator before digits correctly', () => { + const target = {}; + new FileLoader({ + directory: path.join(dirBase, 'camelize'), + target, + caseStyle: 'upper', + }).load(); + + // foo_00.js should camelize to Foo00, not Foo_00 + assert(target.Foo00); + assert(!target.Foo_00); }); });