From b2c90040b1fa7f13df94d2fa506d50f2dafc5088 Mon Sep 17 00:00:00 2001 From: lttb Date: Mon, 24 Apr 2017 01:56:04 +0300 Subject: [PATCH 1/7] Update yarn.lock --- yarn.lock | 299 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 295 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9f1bd69..64b4b41 100644 --- a/yarn.lock +++ b/yarn.lock @@ -281,6 +281,24 @@ babel-helper-builder-react-jsx@^6.24.1: babel-types "^6.24.1" esutils "^2.0.0" +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz#7a9747f258d8947d32d515f6aa1c7bd02204a080" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + lodash "^4.2.0" + babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" @@ -298,6 +316,39 @@ babel-helper-get-function-arity@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz#d36e22fab1008d79d88648e32116868128456ce8" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + lodash "^4.2.0" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" @@ -319,6 +370,12 @@ babel-messages@^6.23.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + dependencies: + babel-runtime "^6.22.0" + babel-plugin-istanbul@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-3.1.2.tgz#11d5abde18425ec24b5d648c7e0b5d25cd354a22" @@ -357,7 +414,91 @@ babel-plugin-transform-class-properties@^6.23.0: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-modules-commonjs@^6.23.0: +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz#76c295dc3a4741b1665adfd3167215dcff32a576" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + lodash "^4.2.0" + +babel-plugin-transform-es2015-classes@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz#d3e310b40ef664a36622200097c6d440298f2bfe" dependencies: @@ -366,6 +507,81 @@ babel-plugin-transform-es2015-modules-commonjs@^6.23.0: babel-template "^6.24.1" babel-types "^6.24.1" +babel-plugin-transform-es2015-modules-systemjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + babel-plugin-transform-flow-strip-types@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" @@ -408,6 +624,12 @@ babel-plugin-transform-react-jsx@^6.24.1: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" +babel-plugin-transform-regenerator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz#b8da305ad43c3c99b4848e4fe4037b770d23c418" + dependencies: + regenerator-transform "0.9.11" + babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" @@ -423,6 +645,35 @@ babel-polyfill@^6.23.0, babel-polyfill@^6.6.1: core-js "^2.4.0" regenerator-runtime "^0.10.0" +babel-preset-es2015@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" + babel-preset-flow@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" @@ -458,7 +709,7 @@ babel-register@^6.24.1: mkdirp "^0.5.1" source-map-support "^0.4.2" -babel-runtime@^6.22.0: +babel-runtime@^6.18.0, babel-runtime@^6.22.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" dependencies: @@ -489,7 +740,7 @@ babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1: invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.18.0, babel-types@^6.23.0, babel-types@^6.24.1: +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" dependencies: @@ -2158,6 +2409,10 @@ jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -2837,7 +3092,7 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -performance-now@^0.2.0: +performance-now@^0.2.0, performance-now@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" @@ -2942,6 +3197,12 @@ qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" +raf@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.3.0.tgz#93845eeffc773f8129039f677f80a36044eee2c3" + dependencies: + performance-now "~0.2.0" + randomatic@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" @@ -3048,10 +3309,22 @@ redeyed@~1.0.0: dependencies: esprima "~3.0.0" +regenerate@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + regenerator-runtime@^0.10.0: version "0.10.3" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" +regenerator-transform@0.9.11: + version "0.9.11" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + regex-cache@^0.4.2: version "0.4.3" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" @@ -3059,6 +3332,24 @@ regex-cache@^0.4.2: is-equal-shallow "^0.1.3" is-primitive "^2.0.0" +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + remove-trailing-separator@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" From 8e57f91449ca2edb5a300f816a89613b9b0559aa Mon Sep 17 00:00:00 2001 From: lttb Date: Mon, 24 Apr 2017 01:56:35 +0300 Subject: [PATCH 2/7] Improve mount performance by queue --- .babelrc | 1 + flow-typed/npm/raf_vx.x.x.js | 52 ++++++++++++++++++++++++++++++++++++ package.json | 4 ++- src/index.js | 20 +++++++++----- 4 files changed, 69 insertions(+), 8 deletions(-) create mode 100644 flow-typed/npm/raf_vx.x.x.js diff --git a/.babelrc b/.babelrc index 44678ba..255b4fe 100644 --- a/.babelrc +++ b/.babelrc @@ -1,5 +1,6 @@ { presets: [ + 'es2015', 'react', ], plugins: [ diff --git a/flow-typed/npm/raf_vx.x.x.js b/flow-typed/npm/raf_vx.x.x.js new file mode 100644 index 0000000..4930462 --- /dev/null +++ b/flow-typed/npm/raf_vx.x.x.js @@ -0,0 +1,52 @@ +// flow-typed signature: 4de6dbdd4439b8db48934b70acae04b6 +// flow-typed version: <>/raf_v3.3.0/flow_v0.44.2 + +/** + * This is an autogenerated libdef stub for: + * + * 'raf' + * + * Fill this stub out by replacing all the `any` types. + * + * Once filled out, we encourage you to share your work with the + * community by sending a pull request to: + * https://github.com/flowtype/flow-typed + */ + +declare module 'raf' { + declare module.exports: any; +} + +/** + * We include stubs for each file inside this npm package in case you need to + * require those files directly. Feel free to delete any files that aren't + * needed. + */ +declare module 'raf/polyfill' { + declare module.exports: any; +} + +declare module 'raf/test' { + declare module.exports: any; +} + +declare module 'raf/window' { + declare module.exports: any; +} + +// Filename aliases +declare module 'raf/index' { + declare module.exports: $Exports<'raf'>; +} +declare module 'raf/index.js' { + declare module.exports: $Exports<'raf'>; +} +declare module 'raf/polyfill.js' { + declare module.exports: $Exports<'raf/polyfill'>; +} +declare module 'raf/test.js' { + declare module.exports: $Exports<'raf/test'>; +} +declare module 'raf/window.js' { + declare module.exports: $Exports<'raf/window'>; +} diff --git a/package.json b/package.json index a261d4b..9c1c1df 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,8 @@ "dependencies": { "is-react-prop": "^0.0.3", "jss": "^7.1.0", - "jss-preset-default": "^2.0.0" + "jss-preset-default": "^2.0.0", + "raf": "^3.3.0" }, "peerDependencies": { "react": "^15.5.4", @@ -55,6 +56,7 @@ "babel-plugin-transform-class-properties": "^6.23.0", "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", "babel-plugin-transform-object-rest-spread": "^6.23.0", + "babel-preset-es2015": "^6.24.1", "babel-preset-react": "^6.23.0", "eslint": "^3.13.0", "eslint-config-airbnb": "^14.1.0", diff --git a/src/index.js b/src/index.js index c1bf92a..d2daae8 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,7 @@ import {PureComponent, createElement} from 'react' import {create as createJss, getDynamicStyles} from 'jss' import preset from 'jss-preset-default' +import raf from 'raf' import filterProps from './utils/filter-props' const jssDefault = createJss(preset()) @@ -19,6 +20,15 @@ const createStyled = (jss?: Function = jssDefault) => (baseStyles: Object = {}) let dynamicSheet let counter = 0 + let dynamicCounter = 0 + raf(function update() { + if (dynamicCounter) { + dynamicCounter = 0 + dynamicSheet.attach().link() + } + raf(update) + }) + const styled = ( tagOrStyledElement: tagOrStyledElementTypeype, ownStyles: Object @@ -63,13 +73,9 @@ const createStyled = (jss?: Function = jssDefault) => (baseStyles: Object = {}) } if (dynamicStyles && !dynamicSheet.getRule(this.tagScoped)) { - dynamicSheet - .detach() - .addRule(this.tagScoped, dynamicStyles) - dynamicSheet - .update(this.tagScoped, this.props) - .attach() - .link() + dynamicSheet.detach().addRule(this.tagScoped, dynamicStyles) + dynamicSheet.update(this.tagScoped, this.props) + dynamicCounter++ } } From 625e8eded421ce5c7502046fb7a4f5e9e22884d2 Mon Sep 17 00:00:00 2001 From: lttb Date: Mon, 24 Apr 2017 18:38:22 +0300 Subject: [PATCH 3/7] Use asap instead of raf --- flow-typed/npm/asap_vx.x.x.js | 53 +++++++++++++++++++++++++++++++++++ package.json | 4 +-- src/createStyled.js | 24 +++++++++++++++- src/styled.js | 15 ++++------ yarn.lock | 2 +- 5 files changed, 84 insertions(+), 14 deletions(-) create mode 100644 flow-typed/npm/asap_vx.x.x.js diff --git a/flow-typed/npm/asap_vx.x.x.js b/flow-typed/npm/asap_vx.x.x.js new file mode 100644 index 0000000..0488d1d --- /dev/null +++ b/flow-typed/npm/asap_vx.x.x.js @@ -0,0 +1,53 @@ +// flow-typed signature: 707dc8ad343bbbc20eb3bda63ab382df +// flow-typed version: <>/asap_v2.0.5/flow_v0.44.2 + +/** + * This is an autogenerated libdef stub for: + * + * 'asap' + * + * Fill this stub out by replacing all the `any` types. + * + * Once filled out, we encourage you to share your work with the + * community by sending a pull request to: + * https://github.com/flowtype/flow-typed + */ + +declare module 'asap' { + declare module.exports: any; +} + +/** + * We include stubs for each file inside this npm package in case you need to + * require those files directly. Feel free to delete any files that aren't + * needed. + */ +declare module 'asap/asap' { + declare module.exports: any; +} + +declare module 'asap/browser-asap' { + declare module.exports: any; +} + +declare module 'asap/browser-raw' { + declare module.exports: any; +} + +declare module 'asap/raw' { + declare module.exports: any; +} + +// Filename aliases +declare module 'asap/asap.js' { + declare module.exports: $Exports<'asap/asap'>; +} +declare module 'asap/browser-asap.js' { + declare module.exports: $Exports<'asap/browser-asap'>; +} +declare module 'asap/browser-raw.js' { + declare module.exports: $Exports<'asap/browser-raw'>; +} +declare module 'asap/raw.js' { + declare module.exports: $Exports<'asap/raw'>; +} diff --git a/package.json b/package.json index 9e50ea1..c80f5cb 100644 --- a/package.json +++ b/package.json @@ -38,10 +38,10 @@ }, "homepage": "https://github.com/cssinjs/styled-jss#readme", "dependencies": { + "asap": "^2.0.5", "is-react-prop": "^0.0.3", "jss": "^7.1.0", - "jss-preset-default": "^2.0.0", - "raf": "^3.3.0" + "jss-preset-default": "^2.0.0" }, "peerDependencies": { "react": "^15.5.4", diff --git a/src/createStyled.js b/src/createStyled.js index b079d8a..5ce6cb7 100644 --- a/src/createStyled.js +++ b/src/createStyled.js @@ -1,3 +1,5 @@ +import asap from 'asap' + import styled from './styled' import type { @@ -15,6 +17,26 @@ const createStyled = (jss: Function) => ( let staticSheet let dynamicSheet + let dynamicCounter = 0 + + asap(() => { + if (dynamicCounter) { + dynamicCounter = 0 + dynamicSheet.attach().link() + } + }) + + const addRule = (name: string, style: ComponentStyleType, data: Object) => { + if (data) { + dynamicSheet.detach().addRule(name, style) + dynamicSheet.update(name, data) + dynamicCounter++ + } + else { + staticSheet.addRule(name, style) + } + } + const mountSheets = () => { if (!staticSheet) { staticSheet = jss.createStyleSheet(baseStyles, { @@ -40,7 +62,7 @@ const createStyled = (jss: Function) => ( const elementStyle = {...style, ...ownStyle} - return styled({tagName, baseStyles, elementStyle, mountSheets}) + return styled({tagName, baseStyles, elementStyle, mountSheets, addRule}) }, {mountSheets, styles: baseStyles}) } diff --git a/src/styled.js b/src/styled.js index 4fba7c7..0162e42 100644 --- a/src/styled.js +++ b/src/styled.js @@ -15,10 +15,11 @@ import type { type StyledArgs = { tagName: string, elementStyle: ComponentStyleType, - mountSheets: Function + mountSheets: Function, + addRule: Function } -const styled = ({tagName, elementStyle, mountSheets}: StyledArgs) => { +const styled = ({tagName, elementStyle, mountSheets, addRule}: StyledArgs) => { const dynamicStyle = getDynamicStyles(elementStyle) const staticTagName = generateTagName(tagName) @@ -43,17 +44,11 @@ const styled = ({tagName, elementStyle, mountSheets}: StyledArgs) => { Object.assign(this, mountSheets()) if (!this.staticSheet.getRule(staticTagName)) { - this.staticSheet.addRule(staticTagName, elementStyle) + addRule(staticTagName, elementStyle) } if (dynamicStyle && !this.dynamicSheet.getRule(this.dynamicTagName)) { - this.dynamicSheet - .detach() - .addRule(this.dynamicTagName, dynamicStyle) - this.dynamicSheet - .update(this.dynamicTagName, this.props) - .attach() - .link() + addRule(this.dynamicTagName, dynamicStyle, this.props) } } diff --git a/yarn.lock b/yarn.lock index f5c9caa..2e972ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -152,7 +152,7 @@ arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" -asap@~2.0.3: +asap@^2.0.5, asap@~2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" From d1e7818452356fb8d7d9580d0840d9bce2c67e50 Mon Sep 17 00:00:00 2001 From: lttb Date: Mon, 24 Apr 2017 19:43:46 +0300 Subject: [PATCH 4/7] Use one just one asap observable --- src/createStyled.js | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/createStyled.js b/src/createStyled.js index 5ce6cb7..e2ba9bf 100644 --- a/src/createStyled.js +++ b/src/createStyled.js @@ -11,26 +11,30 @@ import type { TagNameOrStyledElementType } from './types' +const dynamicSheets = [] +let sheetsToUpdate = {} + +asap(() => { + const sheetNames = Object.keys(sheetsToUpdate) + if (sheetNames.length) { + sheetsToUpdate = {} + sheetNames.forEach(sheetName => + dynamicSheets[Number(sheetName)].attach().link()) + } +}) + const createStyled = (jss: Function) => ( baseStyles: BaseStylesType = {} ): StyledType => { let staticSheet let dynamicSheet - - let dynamicCounter = 0 - - asap(() => { - if (dynamicCounter) { - dynamicCounter = 0 - dynamicSheet.attach().link() - } - }) + let dynamicSheetName const addRule = (name: string, style: ComponentStyleType, data: Object) => { if (data) { dynamicSheet.detach().addRule(name, style) dynamicSheet.update(name, data) - dynamicCounter++ + sheetsToUpdate[dynamicSheetName] = true } else { staticSheet.addRule(name, style) @@ -47,6 +51,8 @@ const createStyled = (jss: Function) => ( link: true, meta: 'DynamicComponentSheet', }).attach() + dynamicSheets.push(dynamicSheet) + dynamicSheetName = dynamicSheets.length - 1 } return {staticSheet, dynamicSheet} From 8f9005da41ed2ea0f44e64c48429044845a9d567 Mon Sep 17 00:00:00 2001 From: lttb Date: Mon, 24 Apr 2017 21:13:05 +0300 Subject: [PATCH 5/7] Add tests for sheetsObserver --- .flowconfig | 1 + src/createStyled.js | 22 +++++---------------- src/tests/sheetsObserver.spec.js | 33 ++++++++++++++++++++++++++++++++ src/utils/sheetsObserver.js | 30 +++++++++++++++++++++++++++++ 4 files changed, 69 insertions(+), 17 deletions(-) create mode 100644 src/tests/sheetsObserver.spec.js create mode 100644 src/utils/sheetsObserver.js diff --git a/.flowconfig b/.flowconfig index 5921625..c454a8c 100644 --- a/.flowconfig +++ b/.flowconfig @@ -7,3 +7,4 @@ [options] all=true +suppress_comment= \\(.\\|\n\\)*\\$FlowFixMe diff --git a/src/createStyled.js b/src/createStyled.js index e2ba9bf..4a837dd 100644 --- a/src/createStyled.js +++ b/src/createStyled.js @@ -1,6 +1,5 @@ -import asap from 'asap' - import styled from './styled' +import sheetsObserver from './utils/sheetsObserver' import type { BaseStylesType, @@ -11,30 +10,20 @@ import type { TagNameOrStyledElementType } from './types' -const dynamicSheets = [] -let sheetsToUpdate = {} - -asap(() => { - const sheetNames = Object.keys(sheetsToUpdate) - if (sheetNames.length) { - sheetsToUpdate = {} - sheetNames.forEach(sheetName => - dynamicSheets[Number(sheetName)].attach().link()) - } -}) +sheetsObserver.listen() const createStyled = (jss: Function) => ( baseStyles: BaseStylesType = {} ): StyledType => { let staticSheet let dynamicSheet - let dynamicSheetName + let dynamicSheetId const addRule = (name: string, style: ComponentStyleType, data: Object) => { if (data) { dynamicSheet.detach().addRule(name, style) dynamicSheet.update(name, data) - sheetsToUpdate[dynamicSheetName] = true + sheetsObserver.update(dynamicSheetId) } else { staticSheet.addRule(name, style) @@ -51,8 +40,7 @@ const createStyled = (jss: Function) => ( link: true, meta: 'DynamicComponentSheet', }).attach() - dynamicSheets.push(dynamicSheet) - dynamicSheetName = dynamicSheets.length - 1 + dynamicSheetId = sheetsObserver.add(dynamicSheet) } return {staticSheet, dynamicSheet} diff --git a/src/tests/sheetsObserver.spec.js b/src/tests/sheetsObserver.spec.js new file mode 100644 index 0000000..3fa194d --- /dev/null +++ b/src/tests/sheetsObserver.spec.js @@ -0,0 +1,33 @@ +import sheetsObserver, {observe, dynamicSheets} from '../utils/sheetsObserver' + +const Mocks = { + // $FlowFixMe: get/set are not supported yet by flow + get sheetMock() { + const mock = { + attach: jest.fn(), + link: jest.fn(), + } + mock.attach.mockReturnValue(mock) + mock.link.mockReturnValue(mock) + return mock + } +} + +it('should add sheet and return sheetId', () => { + const {sheetMock} = Mocks + const sheetId = sheetsObserver.add(sheetMock) + + expect(dynamicSheets).toEqual([sheetMock]) + expect(sheetId).toEqual(0) +}) + +it('should reattach updated sheet by observe call', () => { + const {sheetMock} = Mocks + const sheetId = sheetsObserver.add(sheetMock) + sheetsObserver.update(sheetId) + + observe() + + expect(sheetMock.attach).toHaveBeenCalled() + expect(sheetMock.link).toHaveBeenCalled() +}) diff --git a/src/utils/sheetsObserver.js b/src/utils/sheetsObserver.js new file mode 100644 index 0000000..69b283b --- /dev/null +++ b/src/utils/sheetsObserver.js @@ -0,0 +1,30 @@ +import asap from 'asap' + +import type { + JssDynamicSheet +} from '../types' + +export const dynamicSheets = [] +let sheetsToUpdate = {} + +export const observe = () => { + const sheetIds = Object.keys(sheetsToUpdate) + if (sheetIds.length) { + sheetsToUpdate = {} + sheetIds.forEach(sheetId => + dynamicSheets[Number(sheetId)].attach().link()) + } +} + +export default { + listen() { + asap(observe) + }, + add(sheet: JssDynamicSheet) { + dynamicSheets.push(sheet) + return dynamicSheets.length - 1 + }, + update(sheetId: number) { + sheetsToUpdate[sheetId] = true + } +} From 6c9c36a4f4abcd35e0d4afda6f1ed8fb8f72507b Mon Sep 17 00:00:00 2001 From: lttb Date: Tue, 25 Apr 2017 13:56:01 +0300 Subject: [PATCH 6/7] Rewrite composeClasses --- src/injectStyled.js | 2 +- src/styled.js | 4 ++-- src/utils/composeClasses.js | 9 ++++++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/injectStyled.js b/src/injectStyled.js index c53d2d1..3e3174a 100644 --- a/src/injectStyled.js +++ b/src/injectStyled.js @@ -11,7 +11,7 @@ const injectStyled = (styled: StyledType) => (InnerComponent: ReactClass) = const classes = [...classNames] .reduce((acc, name) => ({ ...acc, - [name]: composeClasses(staticSheet.classes[name], dynamicSheet.classes[name]), + [name]: composeClasses([staticSheet.classes[name], dynamicSheet.classes[name]]), }), {}) return (props: Object) => createElement(InnerComponent, {classes, ...props}) diff --git a/src/styled.js b/src/styled.js index 0162e42..223d8e5 100644 --- a/src/styled.js +++ b/src/styled.js @@ -64,11 +64,11 @@ const styled = ({tagName, elementStyle, mountSheets, addRule}: StyledArgs) => { const {children, className, ...attrs} = this.props const props = filterProps(attrs) - const tagClass = composeClasses( + const tagClass = composeClasses([ this.staticSheet.classes[staticTagName], this.dynamicSheet.classes[this.dynamicTagName], className - ) + ]) return createElement(tagName, {...props, className: tagClass}, children) } diff --git a/src/utils/composeClasses.js b/src/utils/composeClasses.js index 03bd4e0..15c5a85 100644 --- a/src/utils/composeClasses.js +++ b/src/utils/composeClasses.js @@ -1 +1,8 @@ -export default (...args: any) => args.filter(Boolean).join(' ') +export default (classes: Array) => { + const filtered = [] + for (let len = classes.length, index = 0; index < len; index++) { + if (classes[index]) filtered.push(classes[index]) + } + + return filtered.join(' ') +} From 972d1026da82a7fdcf41f159c9af3b5f5545b280 Mon Sep 17 00:00:00 2001 From: lttb Date: Tue, 25 Apr 2017 15:00:46 +0300 Subject: [PATCH 7/7] Use raf for loops instead asap --- flow-typed/npm/asap_vx.x.x.js | 53 -------------------------------- package.json | 4 +-- src/tests/sheetsObserver.spec.js | 14 +++++++++ src/utils/sheetsObserver.js | 11 ++++--- yarn.lock | 10 ++++-- 5 files changed, 31 insertions(+), 61 deletions(-) delete mode 100644 flow-typed/npm/asap_vx.x.x.js diff --git a/flow-typed/npm/asap_vx.x.x.js b/flow-typed/npm/asap_vx.x.x.js deleted file mode 100644 index 0488d1d..0000000 --- a/flow-typed/npm/asap_vx.x.x.js +++ /dev/null @@ -1,53 +0,0 @@ -// flow-typed signature: 707dc8ad343bbbc20eb3bda63ab382df -// flow-typed version: <>/asap_v2.0.5/flow_v0.44.2 - -/** - * This is an autogenerated libdef stub for: - * - * 'asap' - * - * Fill this stub out by replacing all the `any` types. - * - * Once filled out, we encourage you to share your work with the - * community by sending a pull request to: - * https://github.com/flowtype/flow-typed - */ - -declare module 'asap' { - declare module.exports: any; -} - -/** - * We include stubs for each file inside this npm package in case you need to - * require those files directly. Feel free to delete any files that aren't - * needed. - */ -declare module 'asap/asap' { - declare module.exports: any; -} - -declare module 'asap/browser-asap' { - declare module.exports: any; -} - -declare module 'asap/browser-raw' { - declare module.exports: any; -} - -declare module 'asap/raw' { - declare module.exports: any; -} - -// Filename aliases -declare module 'asap/asap.js' { - declare module.exports: $Exports<'asap/asap'>; -} -declare module 'asap/browser-asap.js' { - declare module.exports: $Exports<'asap/browser-asap'>; -} -declare module 'asap/browser-raw.js' { - declare module.exports: $Exports<'asap/browser-raw'>; -} -declare module 'asap/raw.js' { - declare module.exports: $Exports<'asap/raw'>; -} diff --git a/package.json b/package.json index c80f5cb..9e50ea1 100644 --- a/package.json +++ b/package.json @@ -38,10 +38,10 @@ }, "homepage": "https://github.com/cssinjs/styled-jss#readme", "dependencies": { - "asap": "^2.0.5", "is-react-prop": "^0.0.3", "jss": "^7.1.0", - "jss-preset-default": "^2.0.0" + "jss-preset-default": "^2.0.0", + "raf": "^3.3.0" }, "peerDependencies": { "react": "^15.5.4", diff --git a/src/tests/sheetsObserver.spec.js b/src/tests/sheetsObserver.spec.js index 3fa194d..f5dba3e 100644 --- a/src/tests/sheetsObserver.spec.js +++ b/src/tests/sheetsObserver.spec.js @@ -31,3 +31,17 @@ it('should reattach updated sheet by observe call', () => { expect(sheetMock.attach).toHaveBeenCalled() expect(sheetMock.link).toHaveBeenCalled() }) + +it('should reattach updated sheet by listner', (done) => { + const {sheetMock} = Mocks + sheetsObserver.listen() + + const sheetId = sheetsObserver.add(sheetMock) + sheetsObserver.update(sheetId) + + setTimeout(() => { + expect(sheetMock.attach).toHaveBeenCalledTimes(1) + expect(sheetMock.link).toHaveBeenCalledTimes(1) + done() + }, 100) +}) diff --git a/src/utils/sheetsObserver.js b/src/utils/sheetsObserver.js index 69b283b..a52cca5 100644 --- a/src/utils/sheetsObserver.js +++ b/src/utils/sheetsObserver.js @@ -1,4 +1,4 @@ -import asap from 'asap' +import raf from 'raf' import type { JssDynamicSheet @@ -16,10 +16,13 @@ export const observe = () => { } } +const listen = () => { + observe() + raf(listen) +} + export default { - listen() { - asap(observe) - }, + listen, add(sheet: JssDynamicSheet) { dynamicSheets.push(sheet) return dynamicSheets.length - 1 diff --git a/yarn.lock b/yarn.lock index 2e972ed..31d9d90 100644 --- a/yarn.lock +++ b/yarn.lock @@ -152,7 +152,7 @@ arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" -asap@^2.0.5, asap@~2.0.3: +asap@~2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" @@ -3187,7 +3187,7 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -performance-now@^0.2.0: +performance-now@^0.2.0, performance-now@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" @@ -3296,6 +3296,12 @@ qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" +raf@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.3.0.tgz#93845eeffc773f8129039f677f80a36044eee2c3" + dependencies: + performance-now "~0.2.0" + randomatic@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb"