From 737e2b32325571d1dec2da461222aa995981e091 Mon Sep 17 00:00:00 2001 From: Sunil Pai Date: Tue, 25 Jul 2017 11:46:02 +0100 Subject: [PATCH 1/2] fresh regex every time extractCritical is called --- src/server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server.js b/src/server.js index 0a7cce7d2..dec941a6e 100644 --- a/src/server.js +++ b/src/server.js @@ -1,8 +1,6 @@ import { sheet, inserted } from './index' import { keys, forEach } from './utils' -const RGX = /css(?:[a-zA-Z0-9-]*)-([a-zA-Z0-9]+)/gm - export { flush, css, @@ -16,6 +14,8 @@ export { export function extractCritical (html) { // parse out ids from html // reconstruct css/rules/cache to pass + const RGX = /css(?:[a-zA-Z0-9-]*)-([a-zA-Z0-9]+)/gm + let o = { html, ids: [], css: '', rules: [] } let match let ids = {} From 9a2be66507b57803f115884931e1fc9c0202e059 Mon Sep 17 00:00:00 2001 From: Kye Hohenberger Date: Wed, 26 Jul 2017 22:52:52 -0600 Subject: [PATCH 2/2] Clear out the lastIndex on loop iteration. --- src/server.js | 6 ++++-- test/__snapshots__/server.test.js.snap | 18 ++++++++++++++++++ test/server.test.js | 12 +++++++++--- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/server.js b/src/server.js index dec941a6e..8d653b12c 100644 --- a/src/server.js +++ b/src/server.js @@ -15,7 +15,7 @@ export function extractCritical (html) { // parse out ids from html // reconstruct css/rules/cache to pass const RGX = /css(?:[a-zA-Z0-9-]*)-([a-zA-Z0-9]+)/gm - + let o = { html, ids: [], css: '', rules: [] } let match let ids = {} @@ -27,7 +27,9 @@ export function extractCritical (html) { o.rules = sheet.sheet.cssRules.slice().filter(x => { let match = RGX.exec(x.cssText) - return match == null || ids[match[1]] || false + const ret = match == null || ids[match[1]] || false + RGX.lastIndex = 0 + return ret }) o.ids = keys(inserted).filter(id => !!ids[id]) diff --git a/test/__snapshots__/server.test.js.snap b/test/__snapshots__/server.test.js.snap index 4f5c996b9..41058727b 100644 --- a/test/__snapshots__/server.test.js.snap +++ b/test/__snapshots__/server.test.js.snap @@ -21,3 +21,21 @@ Object { ], } `; + +exports[`extractCritical returns static css 2`] = ` +Object { + "css": ".no-prefix {display:-webkit-box; display: -ms-flexbox; display: flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}.css-71uu79{display:-webkit-box; display: -ms-flexbox; display: flex;}", + "html": "
Hello
", + "ids": Array [ + "71uu79", + ], + "rules": Array [ + Object { + "cssText": ".no-prefix {display:-webkit-box; display: -ms-flexbox; display: flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}", + }, + Object { + "cssText": ".css-71uu79{display:-webkit-box; display: -ms-flexbox; display: flex;}", + }, + ], +} +`; diff --git a/test/server.test.js b/test/server.test.js index 44f7ea372..7b1939967 100644 --- a/test/server.test.js +++ b/test/server.test.js @@ -16,7 +16,7 @@ const Image = styled.img` border-radius: 50%; height: 50px; width: 50px; - background-color: ${color} + background-color: ${color}; ` // this will not be included since it's not used @@ -34,15 +34,21 @@ injectGlobal` } ` -const Page = () => +const Page1 = () =>
+const Page2 = () => +
+
Hello
+
+ describe('extractCritical', () => { test('returns static css', () => { - expect(extractCritical(renderToString())).toMatchSnapshot() + expect(extractCritical(renderToString())).toMatchSnapshot() + expect(extractCritical(renderToString())).toMatchSnapshot() }) })