From 1de2a24eb3cd2bf22efbcdd276066894abbccbb6 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Mon, 4 Jun 2018 08:50:00 -0400 Subject: [PATCH] Switch to more robust existing CSS escaping library --- __tests__/escapeClassName.test.js | 5 +++++ package.json | 1 + src/util/escapeClassName.js | 4 +++- yarn.lock | 4 ++++ 4 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 __tests__/escapeClassName.test.js diff --git a/__tests__/escapeClassName.test.js b/__tests__/escapeClassName.test.js new file mode 100644 index 000000000..7a8cd7b7b --- /dev/null +++ b/__tests__/escapeClassName.test.js @@ -0,0 +1,5 @@ +import escapeClassName from '../src/util/escapeClassName' + +test('invalid characters are escaped', () => { + expect(escapeClassName('w:_$-1/2')).toEqual('w\\:_\\$-1\\/2') +}) diff --git a/package.json b/package.json index ba525d45d..d476f363b 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ }, "dependencies": { "commander": "^2.11.0", + "css.escape": "^1.5.1", "fs-extra": "^4.0.2", "lodash": "^4.17.5", "perfectionist": "^2.4.0", diff --git a/src/util/escapeClassName.js b/src/util/escapeClassName.js index 3c2f93738..42e1e652e 100644 --- a/src/util/escapeClassName.js +++ b/src/util/escapeClassName.js @@ -1,3 +1,5 @@ +import escape from 'css.escape' + export default function escapeClassName(className) { - return className.replace(/([^A-Za-z0-9\-])/g, '\\$1') + return escape(className) } diff --git a/yarn.lock b/yarn.lock index 896d11a19..7ee495370 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1246,6 +1246,10 @@ cross-spawn@^5.0.1, cross-spawn@^5.1.0: shebang-command "^1.2.0" which "^1.2.9" +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.2" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b"