From 6b28c606488195e2dc1ae743407be9e23e32c7f4 Mon Sep 17 00:00:00 2001 From: Evan Kennedy Date: Tue, 5 May 2020 13:17:31 -0700 Subject: [PATCH] Replace period in CSS Module classnames (#8492) --- .../__tests__/getCSSModuleLocalIdent.test.js | 51 +++++++++++++++++++ .../react-dev-utils/getCSSModuleLocalIdent.js | 4 +- 2 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 packages/react-dev-utils/__tests__/getCSSModuleLocalIdent.test.js diff --git a/packages/react-dev-utils/__tests__/getCSSModuleLocalIdent.test.js b/packages/react-dev-utils/__tests__/getCSSModuleLocalIdent.test.js new file mode 100644 index 00000000000..da05d947da5 --- /dev/null +++ b/packages/react-dev-utils/__tests__/getCSSModuleLocalIdent.test.js @@ -0,0 +1,51 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +'use strict'; + +const getCSSModuleLocalIdent = require('../getCSSModuleLocalIdent'); + +const rootContext = '/path'; +const defaultClassName = 'class'; +const options = { context: undefined, hashPrefix: '', regExp: null }; + +const tests = [ + { + resourcePath: '/path/to/file.module.css', + expected: 'file_class__13tFD', + }, + { + resourcePath: '/path/to/file.module.scss', + expected: 'file_class__3lYUI', + }, + { + resourcePath: '/path/to/file.module.sass', + expected: 'file_class__2KnOB', + }, + { + resourcePath: '/path/to/file.name.module.css', + expected: 'file_name_class__1OzEh', + }, +]; + +describe('getCSSModuleLocalIdent', () => { + tests.forEach(test => { + const { className = defaultClassName, expected, resourcePath } = test; + it(JSON.stringify({ resourcePath, className }), () => { + const ident = getCSSModuleLocalIdent( + { + resourcePath, + rootContext, + }, + '[hash:base64]', + className, + options + ); + expect(ident).toBe(expected); + }); + }); +}); diff --git a/packages/react-dev-utils/getCSSModuleLocalIdent.js b/packages/react-dev-utils/getCSSModuleLocalIdent.js index 1b1ecf7695b..ce25305e7ef 100644 --- a/packages/react-dev-utils/getCSSModuleLocalIdent.js +++ b/packages/react-dev-utils/getCSSModuleLocalIdent.js @@ -35,6 +35,6 @@ module.exports = function getLocalIdent( fileNameOrFolder + '_' + localName + '__' + hash, options ); - // remove the .module that appears in every classname when based on the file. - return className.replace('.module_', '_'); + // Remove the .module that appears in every classname when based on the file and replace all "." with "_". + return className.replace('.module_', '_').replace(/\./g, '_'); };