diff --git a/Example/package.json b/Example/package.json index fb12793e9..7f96f8cdd 100644 --- a/Example/package.json +++ b/Example/package.json @@ -8,11 +8,11 @@ "jest": "jest" }, "dependencies": { - "react": "16.0.0-alpha.6", - "react-native": "0.44.0", + "react": "16.0.0-alpha.12", + "react-native": "0.45.0", "react-native-button": "^1.8.2", "react-native-drawer": "^2.3.0", - "react-native-router-flux": "^3.39.1" + "react-native-router-flux": "^3.41.0-beta.2" }, "devDependencies": { "babel-jest": "19.0.0", diff --git a/Example/yarn.lock b/Example/yarn.lock index 6a9e95986..01baa4621 100644 --- a/Example/yarn.lock +++ b/Example/yarn.lock @@ -131,13 +131,7 @@ array-reduce@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1, array-uniq@^1.0.2: +array-uniq@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -173,12 +167,22 @@ async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^2.0.1, async@^2.1.4: +async@^2.1.4: version "2.2.0" resolved "https://registry.yarnpkg.com/async/-/async-2.2.0.tgz#c324eba010a237e4fbd55a12dee86367d5c0ef32" dependencies: lodash "^4.14.0" +async@^2.4.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" + dependencies: + lodash "^4.14.0" + +async@~0.2.6: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -199,7 +203,7 @@ babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.0" -babel-core@^6.0.0, babel-core@^6.21.0, babel-core@^6.24.0, babel-core@^6.7.2: +babel-core@^6.0.0, babel-core@^6.24.0, babel-core@^6.7.2: version "6.24.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.0.tgz#8f36a0a77f5c155aed6f920b844d23ba56742a02" dependencies: @@ -223,7 +227,31 @@ babel-core@^6.0.0, babel-core@^6.21.0, babel-core@^6.24.0, babel-core@^6.7.2: slash "^1.0.0" source-map "^0.5.0" -babel-generator@^6.18.0, babel-generator@^6.21.0, babel-generator@^6.24.0: +babel-core@^6.24.1: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729" + dependencies: + babel-code-frame "^6.22.0" + babel-generator "^6.25.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.25.0" + babel-traverse "^6.25.0" + babel-types "^6.25.0" + babylon "^6.17.2" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.5.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-is-absolute "^1.0.0" + private "^0.1.6" + slash "^1.0.0" + source-map "^0.5.0" + +babel-generator@^6.18.0, babel-generator@^6.24.0: version "6.24.0" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.0.tgz#eba270a8cc4ce6e09a61be43465d7c62c1f87c56" dependencies: @@ -236,6 +264,19 @@ babel-generator@^6.18.0, babel-generator@^6.21.0, babel-generator@^6.24.0: source-map "^0.5.0" trim-right "^1.0.1" +babel-generator@^6.24.1, babel-generator@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.25.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + babel-helper-builder-react-jsx@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.23.0.tgz#d53fc8c996e0bc56d0de0fc4cc55a7138395ea4b" @@ -273,6 +314,16 @@ babel-helper-function-name@^6.22.0, babel-helper-function-name@^6.23.0: babel-traverse "^6.23.0" babel-types "^6.23.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" + dependencies: + 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-helper-get-function-arity@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce" @@ -280,6 +331,13 @@ babel-helper-get-function-arity@^6.22.0: babel-runtime "^6.22.0" babel-types "^6.22.0" +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + babel-helper-hoist-variables@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.22.0.tgz#3eacbf731d80705845dd2e9718f600cfb9b4ba72" @@ -302,6 +360,16 @@ babel-helper-regex@^6.22.0: babel-types "^6.22.0" lodash "^4.2.0" +babel-helper-remap-async-to-generator@^6.16.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babel-helper-replace-supers@^6.22.0, babel-helper-replace-supers@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.23.0.tgz#eeaf8ad9b58ec4337ca94223bacdca1f8d9b4bfd" @@ -320,6 +388,13 @@ babel-helpers@^6.23.0: babel-runtime "^6.22.0" babel-template "^6.23.0" +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-jest@19.0.0, babel-jest@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-19.0.0.tgz#59323ced99a3a84d359da219ca881074ffc6ce3f" @@ -364,7 +439,7 @@ babel-plugin-react-transform@2.0.2: dependencies: lodash "^4.6.1" -babel-plugin-syntax-async-functions@^6.5.0: +babel-plugin-syntax-async-functions@^6.5.0, babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" @@ -388,6 +463,14 @@ babel-plugin-syntax-trailing-function-commas@^6.20.0, babel-plugin-syntax-traili version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" +babel-plugin-transform-async-to-generator@6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999" + dependencies: + babel-helper-remap-async-to-generator "^6.16.0" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.0.0" + babel-plugin-transform-class-properties@^6.5.0, babel-plugin-transform-class-properties@^6.6.0, babel-plugin-transform-class-properties@^6.8.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.23.0.tgz#187b747ee404399013563c993db038f34754ac3b" @@ -645,9 +728,9 @@ babel-preset-fbjs@^1.0.0: babel-plugin-transform-object-rest-spread "^6.6.5" object-assign "^4.0.1" -babel-preset-fbjs@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-2.1.0.tgz#1a8d4cacbac7c5a9194ce3b8475ffab33ed524fb" +babel-preset-fbjs@^2.1.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-2.1.4.tgz#22f358e6654073acf61e47a052a777d7bccf03af" dependencies: babel-plugin-check-es2015-constants "^6.8.0" babel-plugin-syntax-class-properties "^6.8.0" @@ -718,7 +801,7 @@ babel-preset-react-native@1.9.1, babel-preset-react-native@^1.9.0, babel-preset- babel-plugin-transform-regenerator "^6.5.0" react-transform-hmr "^1.0.4" -babel-register@^6.18.0, babel-register@^6.24.0: +babel-register@^6.24.0: version "6.24.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.0.tgz#5e89f8463ba9970356d02eb07dabe3308b080cfd" dependencies: @@ -730,7 +813,19 @@ babel-register@^6.18.0, babel-register@^6.24.0: mkdirp "^0.5.1" source-map-support "^0.4.2" -babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0: +babel-register@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" + dependencies: + babel-core "^6.24.1" + babel-runtime "^6.22.0" + core-js "^2.4.0" + home-or-tmp "^2.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.2" + +babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" dependencies: @@ -747,7 +842,17 @@ babel-template@^6.16.0, babel-template@^6.22.0, babel-template@^6.23.0: babylon "^6.11.0" lodash "^4.2.0" -babel-traverse@^6.18.0, babel-traverse@^6.21.0, babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1: +babel-template@^6.24.1, babel-template@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.25.0" + babel-types "^6.25.0" + babylon "^6.17.2" + lodash "^4.2.0" + +babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1: version "6.23.1" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48" dependencies: @@ -761,7 +866,21 @@ babel-traverse@^6.18.0, babel-traverse@^6.21.0, babel-traverse@^6.22.0, babel-tr invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.21.0, babel-types@^6.22.0, babel-types@^6.23.0: +babel-traverse@^6.24.1, babel-traverse@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1" + dependencies: + babel-code-frame "^6.22.0" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.25.0" + babylon "^6.17.2" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0, babel-types@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf" dependencies: @@ -770,10 +889,23 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.21.0, babel-types@^6.22 lodash "^4.2.0" to-fast-properties "^1.0.1" -babylon@^6.11.0, babylon@^6.13.0, babylon@^6.14.1, babylon@^6.15.0: +babel-types@^6.24.1, babel-types@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: version "6.16.1" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" +babylon@^6.17.0, babylon@^6.17.2: + version "6.17.4" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" + balanced-match@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" @@ -782,6 +914,10 @@ base64-js@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" +base64-js@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.1.2.tgz#d6400cac1c4c660976d90d07a04351d89395f5e8" + base64-js@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" @@ -812,6 +948,10 @@ beeper@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" +big-integer@^1.6.7: + version "1.6.23" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.23.tgz#e85d508220c74e3f43a4ce72eed51f3da4db94d1" + body-parser@~1.13.3: version "1.13.3" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.13.3.tgz#c08cf330c3358e151016a05746f13f029c97fa97" @@ -833,15 +973,17 @@ boom@2.x.x: dependencies: hoek "2.x.x" -bplist-creator@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.4.tgz#4ac0496782e127a85c1d2026a4f5eb22a7aff991" +bplist-creator@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45" dependencies: - stream-buffers "~0.2.3" + stream-buffers "~2.2.0" -bplist-parser@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.0.6.tgz#38da3471817df9d44ab3892e27707bbbd75a11b9" +bplist-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6" + dependencies: + big-integer "^1.6.7" brace-expansion@^1.0.0: version "1.1.6" @@ -864,18 +1006,12 @@ browser-resolve@^1.11.2: dependencies: resolve "1.1.7" -bser@1.0.2: +bser@1.0.2, bser@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" dependencies: node-int64 "^0.4.0" -bser@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.3.tgz#d63da19ee17330a0e260d2a34422b21a89520317" - dependencies: - node-int64 "^0.4.0" - bser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" @@ -1024,6 +1160,14 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" +concat-stream@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + connect-timeout@~1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/connect-timeout/-/connect-timeout-1.6.2.tgz#de9a5ec61e33a12b6edaab7b5f062e98c599b88e" @@ -1112,6 +1256,14 @@ crc@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/crc/-/crc-3.3.0.tgz#fa622e1bc388bf257309082d6b65200ce67090ba" +create-react-class@^15.5.2: + version "15.6.0" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.0.tgz#ab448497c26566e1e29413e883207d57cfe7bed4" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + object-assign "^4.1.1" + cross-spawn@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" @@ -1375,7 +1527,7 @@ fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" -fb-watchman@^1.8.0, fb-watchman@^1.9.0: +fb-watchman@^1.8.0: version "1.9.2" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" dependencies: @@ -1400,7 +1552,19 @@ fbjs-scripts@^0.7.0: semver "^5.1.0" through2 "^2.0.0" -fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.5, fbjs@^0.8.9: +fbjs@0.8.12: + version "0.8.12" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.9" + +fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.9: version "0.8.11" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.11.tgz#340b590b8a2278a01ef7467c07a16da9b753db24" dependencies: @@ -1476,7 +1640,7 @@ forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" -form-data@~2.1.1: +form-data@^2.1.1, form-data@~2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" dependencies: @@ -1488,15 +1652,13 @@ fresh@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" -fs-extra@^0.26.2: - version "0.26.7" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.26.7.tgz#9ae1fdd94897798edab76d0918cf42d0c3184fa9" +fs-extra@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" dependencies: graceful-fs "^4.1.2" jsonfile "^2.1.0" klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" fs.realpath@^1.0.0: version "1.0.0" @@ -1535,17 +1697,7 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.3, glob@^7.0.5: +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: @@ -1704,22 +1856,14 @@ iconv-lite@0.4.11: version "0.4.11" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.11.tgz#2ecb42fd294744922209a2e7c404dac8793d8ade" -iconv-lite@0.4.13: +iconv-lite@0.4.13, iconv-lite@~0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" -iconv-lite@~0.4.13: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" - image-size@^0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.3.5.tgz#83240eab2fb5b00b04aab8c74b0471e9cba7ad8c" -immutable@~3.7.6: - version "3.7.6" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -1731,7 +1875,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@~2.0.1: +inherits@2, inherits@^2.0.3, inherits@~2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -1998,6 +2142,10 @@ jest-diff@^19.0.0: jest-matcher-utils "^19.0.0" pretty-format "^19.0.0" +jest-docblock@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712" + jest-environment-jsdom@^19.0.2: version "19.0.2" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-19.0.2.tgz#ceda859c4a4b94ab35e4de7dab54b926f293e4a3" @@ -2017,16 +2165,6 @@ jest-file-exists@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-19.0.0.tgz#cca2e587a11ec92e24cfeab3f8a94d657f3fceb8" -jest-haste-map@18.0.0: - version "18.0.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-18.0.0.tgz#707d3b5ae3bcbda971c39e8b911d20ad8502c748" - dependencies: - fb-watchman "^1.9.0" - graceful-fs "^4.1.6" - multimatch "^2.1.0" - sane "~1.4.1" - worker-farm "^1.3.1" - jest-haste-map@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-19.0.0.tgz#adde00b62b1fe04432a104b3254fc5004514b55e" @@ -2037,6 +2175,17 @@ jest-haste-map@^19.0.0: sane "~1.5.0" worker-farm "^1.3.1" +jest-haste-map@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.4.tgz#653eb55c889ce3c021f7b94693f20a4159badf03" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^20.0.3" + micromatch "^2.3.11" + sane "~1.6.0" + worker-farm "^1.3.1" + jest-jasmine2@^19.0.2: version "19.0.2" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-19.0.2.tgz#167991ac825981fb1a800af126e83afcca832c73" @@ -2424,7 +2573,7 @@ longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" -loose-envify@^1.0.0, loose-envify@^1.1.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" dependencies: @@ -2447,6 +2596,12 @@ media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + dependencies: + readable-stream "^2.0.1" + merge@^1.1.3: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" @@ -2490,13 +2645,13 @@ mime-db@~1.23.0: version "1.23.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659" -mime-types@2.1.11, mime-types@~2.1.7, mime-types@~2.1.9: +mime-types@2.1.11, mime-types@~2.1.7: version "2.1.11" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c" dependencies: mime-db "~1.23.0" -mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.6: +mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.6, mime-types@~2.1.9: version "2.1.15" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" dependencies: @@ -2512,7 +2667,7 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3: +minimatch@^3.0.2, minimatch@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" dependencies: @@ -2554,15 +2709,6 @@ ms@0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" -multimatch@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" - dependencies: - array-differ "^1.0.0" - array-union "^1.0.1" - arrify "^1.0.0" - minimatch "^3.0.0" - multiparty@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/multiparty/-/multiparty-3.3.2.tgz#35de6804dc19643e5249f3d3e3bdc6c8ce301d3f" @@ -2612,10 +2758,6 @@ node-notifier@^5.0.1: shellwords "^0.1.0" which "^1.2.12" -node-uuid@1.4.7: - version "1.4.7" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" - normalize-package-data@^2.3.2: version "2.3.6" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff" @@ -2653,7 +2795,7 @@ object-assign@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" -object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -2789,9 +2931,9 @@ pause@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/pause/-/pause-0.1.0.tgz#ebc8a4a8619ff0b8a81ac1513c3434ff469fdb74" -pegjs@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.9.0.tgz#f6aefa2e3ce56169208e52179dfe41f89141a369" +pegjs@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" performance-now@^0.2.0: version "0.2.0" @@ -2811,7 +2953,15 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" -plist@1.2.0, plist@^1.2.0: +plist@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/plist/-/plist-2.0.1.tgz#0a32ca9481b1c364e92e18dc55c876de9d01da8b" + dependencies: + base64-js "1.1.2" + xmlbuilder "8.2.2" + xmldom "0.1.x" + +plist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/plist/-/plist-1.2.0.tgz#084b5093ddc92506e259f874b8d9b1afb8c79593" dependencies: @@ -2834,6 +2984,10 @@ pretty-format@^19.0.0: dependencies: ansi-styles "^3.0.0" +pretty-format@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.3.1.tgz#530be5c42b3c05b36414a7a2a4337aa80acd0e8d" + private@^0.1.6: version "0.1.7" resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" @@ -2852,7 +3006,14 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types@~15.5.7: +prop-types@^15.5.10: + version "15.5.10" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + +prop-types@^15.5.6, prop-types@^15.5.8, prop-types@~15.5.7: version "15.5.8" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.5.8.tgz#6b7b2e141083be38c8595aa51fc55775c7199394" dependencies: @@ -2916,6 +3077,13 @@ react-deep-force-update@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.0.1.tgz#f911b5be1d2a6fe387507dd6e9a767aa2924b4c7" +react-devtools-core@^2.1.8: + version "2.4.0" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-2.4.0.tgz#8f261b2fcfb02ecef1f15e17d75ee1b521f02029" + dependencies: + shell-quote "^1.6.1" + ws "^2.0.3" + react-dom@^15.4.2: version "15.5.4" resolved "https://registry.npmjs.org/react-dom/-/react-dom-15.5.4.tgz#ba0c28786fd52ed7e4f2135fe0288d462aef93da" @@ -2946,64 +3114,80 @@ react-native-experimental-navigation@0.26.x: fbjs "^0.8.1" react-addons-pure-render-mixin "^15.0.2" -react-native-router-flux@^3.38.0: - version "3.38.0" - resolved "https://registry.yarnpkg.com/react-native-router-flux/-/react-native-router-flux-3.38.0.tgz#f5f8ec2875b46f96f61006ff502d0d80268e6ce2" +react-native-experimental-navigation@^0.28.0: + version "0.28.0" + resolved "https://registry.yarnpkg.com/react-native-experimental-navigation/-/react-native-experimental-navigation-0.28.0.tgz#561298190320cd336dc5b00c2e8bc2435cfb4909" + dependencies: + babel-plugin-syntax-flow "^6.8.0" + babel-plugin-transform-flow-strip-types "^6.8.0" + babel-preset-react-native "^1.9.0" + clamp "^1.0.1" + fbjs "^0.8.1" + prop-types "^15.5.10" + +react-native-router-flux@^3.41.0-beta.2: + version "3.41.0-beta.2" + resolved "https://registry.yarnpkg.com/react-native-router-flux/-/react-native-router-flux-3.41.0-beta.2.tgz#5ea4fd5e778a77707ee24161e838ae0c33cedf62" dependencies: - react-native-experimental-navigation "0.26.x" + lodash.isequal "^4.5.0" + react-native-experimental-navigation "^0.28.0" react-native-tabs "^1.0.9" - react-static-container "1.0.1" + react-static-container "^1.0.1" react-native-tabs@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/react-native-tabs/-/react-native-tabs-1.0.9.tgz#75d3c35e8b5b6970869eab282372cb32e2a782cd" -react-native@0.42.3: - version "0.42.3" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.42.3.tgz#450c8a03a5e3e991a08a426f22776dd8feb80b26" +react-native@0.45.0: + version "0.45.0" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.45.0.tgz#1d686b905e4d439bb9c31eec67ef1c1355663ea0" dependencies: absolute-path "^0.0.0" art "^0.10.0" - async "^2.0.1" - babel-core "^6.21.0" - babel-generator "^6.21.0" + async "^2.4.0" + babel-core "^6.24.1" + babel-generator "^6.24.1" babel-plugin-external-helpers "^6.18.0" babel-plugin-syntax-trailing-function-commas "^6.20.0" + babel-plugin-transform-async-to-generator "6.16.0" babel-plugin-transform-flow-strip-types "^6.21.0" babel-plugin-transform-object-rest-spread "^6.20.2" babel-polyfill "^6.20.0" babel-preset-es2015-node "^6.1.1" - babel-preset-fbjs "^2.1.0" + babel-preset-fbjs "^2.1.2" babel-preset-react-native "^1.9.1" - babel-register "^6.18.0" - babel-runtime "^6.20.0" - babel-traverse "^6.21.0" - babel-types "^6.21.0" - babylon "^6.14.1" + babel-register "^6.24.1" + babel-runtime "^6.23.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babylon "^6.17.0" base64-js "^1.1.2" bser "^1.0.2" chalk "^1.1.1" commander "^2.9.0" + concat-stream "^1.6.0" connect "^2.8.3" core-js "^2.2.2" + create-react-class "^15.5.2" debug "^2.2.0" denodeify "^1.2.1" + errno ">=0.1.1 <0.2.0-0" event-target-shim "^1.0.5" - fbjs "^0.8.5" + fbjs "0.8.12" fbjs-scripts "^0.7.0" - fs-extra "^0.26.2" - glob "^5.0.15" + form-data "^2.1.1" + fs-extra "^1.0.0" + glob "^7.1.1" graceful-fs "^4.1.3" image-size "^0.3.5" - immutable "~3.7.6" - imurmurhash "^0.1.4" inquirer "^0.12.0" - jest-haste-map "18.0.0" + jest-haste-map "^20.0.4" joi "^6.6.1" json-stable-stringify "^1.0.1" json5 "^0.4.0" left-pad "^1.1.3" lodash "^4.16.6" + merge-stream "^1.0.1" mime "^1.3.4" mime-types "2.1.11" minimist "^1.2.0" @@ -3013,8 +3197,11 @@ react-native@0.42.3: opn "^3.0.2" optimist "^0.6.1" plist "^1.2.0" + pretty-format "^4.2.1" promise "^7.1.1" + prop-types "^15.5.8" react-clone-referenced-element "^1.0.1" + react-devtools-core "^2.1.8" react-timer-mixin "^0.13.2" react-transform-hmr "^1.0.4" rebound "^0.0.13" @@ -3028,14 +3215,15 @@ react-native@0.42.3: stacktrace-parser "^0.1.3" temp "0.8.3" throat "^3.0.0" - uglify-js "^2.6.2" + uglify-js "2.7.5" whatwg-fetch "^1.0.0" wordwrap "^1.0.0" - worker-farm "^1.3.1" write-file-atomic "^1.2.0" ws "^1.1.0" - xcode "^0.8.9" + xcode "^0.9.1" xmldoc "^0.4.0" + xpipe "^1.0.5" + xtend ">=4.0.0 <4.1.0-0" yargs "^6.4.0" react-proxy@^1.1.7: @@ -3045,7 +3233,7 @@ react-proxy@^1.1.7: lodash "^4.6.1" react-deep-force-update "^1.0.0" -react-static-container@1.0.1: +react-static-container@1.0.1, react-static-container@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/react-static-container/-/react-static-container-1.0.1.tgz#694c0dd68a896b879519afb548399cc1989c9ab0" @@ -3067,13 +3255,15 @@ react-transform-hmr@^1.0.4: global "^4.3.0" react-proxy "^1.1.7" -react@~15.4.1: - version "15.4.2" - resolved "https://registry.yarnpkg.com/react/-/react-15.4.2.tgz#41f7991b26185392ba9bae96c8889e7e018397ef" +react@16.0.0-alpha.12: + version "16.0.0-alpha.12" + resolved "https://registry.yarnpkg.com/react/-/react-16.0.0-alpha.12.tgz#8c59485281485df319b6f77682d8dd0621c08194" dependencies: - fbjs "^0.8.4" + create-react-class "^15.5.2" + fbjs "^0.8.9" loose-envify "^1.1.0" object-assign "^4.1.0" + prop-types "^15.5.6" read-pkg-up@^1.0.1: version "1.0.1" @@ -3090,7 +3280,7 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.1.5: +"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.1.5, readable-stream@^2.2.2: version "2.2.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.6.tgz#8b43aed76e71483938d12a8d46c6cf1a00b1f816" dependencies: @@ -3251,7 +3441,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@^2.2.8, rimraf@^2.4.4, rimraf@^2.5.4: +rimraf@^2.4.4, rimraf@^2.5.4: version "2.6.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: @@ -3275,7 +3465,7 @@ rx-lite@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" -safe-buffer@^5.0.1: +safe-buffer@^5.0.1, safe-buffer@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" @@ -3302,6 +3492,18 @@ sane@~1.5.0: walker "~1.0.5" watch "~0.10.0" +sane@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^1.8.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + sax@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" @@ -3368,7 +3570,7 @@ setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" -shell-quote@1.6.1: +shell-quote@1.6.1, shell-quote@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" dependencies: @@ -3381,13 +3583,13 @@ shellwords@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" -simple-plist@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-0.1.4.tgz#10eb51b47e33c556eb8ec46d5ee64d64e717db5d" +simple-plist@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-0.2.1.tgz#71766db352326928cf3a807242ba762322636723" dependencies: - bplist-creator "0.0.4" - bplist-parser "0.0.6" - plist "1.2.0" + bplist-creator "0.0.7" + bplist-parser "0.1.1" + plist "2.0.1" slash@^1.0.0: version "1.0.0" @@ -3474,9 +3676,9 @@ statuses@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.2.1.tgz#dded45cc18256d51ed40aec142489d5c61026d28" -stream-buffers@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-0.2.6.tgz#181c08d5bb3690045f69401b9ae6a7a0cf3313fc" +stream-buffers@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" stream-counter@~0.2.0: version "0.2.0" @@ -3631,11 +3833,24 @@ type-is@~1.6.6: media-typer "0.3.0" mime-types "~2.1.13" +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + ua-parser-js@^0.7.9: version "0.7.12" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" -uglify-js@^2.6, uglify-js@^2.6.2: +uglify-js@2.7.5: + version "2.7.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" + dependencies: + async "~0.2.6" + source-map "~0.5.1" + uglify-to-browserify "~1.0.0" + yargs "~3.10.0" + +uglify-js@^2.6: version "2.8.16" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.16.tgz#d286190b6eefc6fd65eb0ecac6551e0b0e8839a4" dependencies: @@ -3664,6 +3879,10 @@ ultron@1.0.x: version "1.0.2" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" +ultron@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.0.tgz#b07a2e6a541a815fc6a34ccd4533baec307ca864" + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -3676,7 +3895,7 @@ utils-merge@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" -uuid@^3.0.0: +uuid@3.0.1, uuid@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" @@ -3807,13 +4026,20 @@ ws@^1.1.0: options ">=0.0.5" ultron "1.0.x" -xcode@^0.8.9: - version "0.8.9" - resolved "https://registry.yarnpkg.com/xcode/-/xcode-0.8.9.tgz#ec6765f70e9dccccc9f6e9a5b9b4e7e814b4cf35" +ws@^2.0.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-2.3.1.tgz#6b94b3e447cb6a363f785eaf94af6359e8e81c80" dependencies: - node-uuid "1.4.7" - pegjs "0.9.0" - simple-plist "0.1.4" + safe-buffer "~5.0.1" + ultron "~1.1.0" + +xcode@^0.9.1: + version "0.9.3" + resolved "https://registry.yarnpkg.com/xcode/-/xcode-0.9.3.tgz#910a89c16aee6cc0b42ca805a6d0b4cf87211cf3" + dependencies: + pegjs "^0.10.0" + simple-plist "^0.2.1" + uuid "3.0.1" xml-name-validator@^2.0.1: version "2.0.1" @@ -3825,6 +4051,10 @@ xmlbuilder@4.0.0: dependencies: lodash "^3.5.0" +xmlbuilder@8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" + xmldoc@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-0.4.0.tgz#d257224be8393eaacbf837ef227fd8ec25b36888" @@ -3835,6 +4065,10 @@ xmldom@0.1.x: version "0.1.27" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" +xpipe@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" + "xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" diff --git a/__tests__/.eslintrc.json b/__tests__/.eslintrc.json new file mode 100644 index 000000000..4668ae79f --- /dev/null +++ b/__tests__/.eslintrc.json @@ -0,0 +1,5 @@ +{ + "env": { + "mocha": true + } +} diff --git a/__tests__/Actions.test.js b/__tests__/Actions.test.js new file mode 100644 index 000000000..25058a73f --- /dev/null +++ b/__tests__/Actions.test.js @@ -0,0 +1,197 @@ +import { expect } from 'chai'; + +import React from 'react'; + +import * as ActionConst from '../src/ActionConst'; +import { ActionsTest } from '../src/Actions'; +import Scene from '../src/Scene'; + +const id = 0; +const guid = () => id + 1; +const noop = () => {}; + +const scenesData = ( + ({ foo: guid() })} + > + + + + + + + + + + ({ foo: 'what', bar: guid() })} + /> + + + + + + + + + + ); + +describe('Actions', () => { + it('should produce needed actions', () => { + const Actions = new ActionsTest(); + const scenes = Actions.create(scenesData); + + // check scenes + expect(scenes.conversations.component).to.equal('Conversations'); + + // set callback which will extract generated action + let latestAction = null; + Actions.callback = (action) => { latestAction = action; }; + + // test generated actions + Actions.conversations({ param1: 'Hello world' }); + expect(latestAction.param1).equal('Hello world'); + expect(latestAction.key).equal('conversations'); + + Actions.sideMenu({ param2: 'Hello world2' }); + expect(latestAction.param1).equal(undefined); + expect(latestAction.param2).equal('Hello world2'); + expect(latestAction.key).equal('sideMenu'); + + Actions.messaging({ param3: 'Hello world3' }); + expect(latestAction.param3).equal('Hello world3'); + expect(latestAction.key).equal('messaging'); + }); + + it('throws when not providing a root scene', () => { + const Actions = new ActionsTest(); + const scene = undefined; + expect(() => Actions.create(scene)).to.throw(Error, 'root scene'); + }); + + it('throws when using a reserved method', () => { + const scene = ( + + + + ); + + const Actions = new ActionsTest(); + expect(() => Actions.create(scene)).to.throw(Error, 'create'); + }); + + it('throws when using an action method', () => { + const scene = ( + + + + ); + + const Actions = new ActionsTest(); + expect(() => Actions.create(scene)).to.throw(Error, 'push'); + }); + + it('wraps child scenes if the parent is tabs', () => { + const scene = ( + + + + + + + + ); + const Actions = new ActionsTest(); + const scenes = Actions.create(scene); + + const tabKeys = ['home', 'map', 'myAccount']; + tabKeys.forEach((key) => { + expect(scenes[key].component).to.eq(undefined); + expect(scenes[key].type).to.eq(ActionConst.JUMP); + + const wrappedKey = scenes[key].children[0]; + expect(scenes[wrappedKey].component).to.not.eq(undefined); + expect(scenes[wrappedKey].type).to.eq(ActionConst.PUSH); + }); + }); + + it('provides keys to children of a scene', () => { + const scene = ( + + + + + + ); + + const Actions = new ActionsTest(); + const scenes = Actions.create(scene); + + const childrenKeys = ['home', 'map', 'myAccount']; + expect(scenes.root.children).to.include.all(...childrenKeys); + }); + + it('substates have their base set to their parent', () => { + const scene = ( + + + + + + ); + + const Actions = new ActionsTest(); + const scenes = Actions.create(scene); + + const subStates = ['view', 'edit', 'save']; + subStates.forEach((key) => { + expect(scenes[key].base).to.eq('root'); + expect(scenes[key].parent).to.eq(scenes.root.parent); + }); + }); + + it('substates do not need to specify REFRESH type', () => { + const scene = ( + + + + + + ); + + const Actions = new ActionsTest(); + const scenes = Actions.create(scene); + + const subStates = ['view', 'edit', 'save']; + subStates.forEach((key) => { + expect(scenes[key].type).to.eq(ActionConst.REFRESH); + }); + }); + + it('allows mixing of substates with children', () => { + const scene = ( + + + + + + + + + ); + + const Actions = new ActionsTest(); + const scenes = Actions.create(scene); + + const subStates = ['view', 'edit', 'save']; + subStates.forEach((key) => { + expect(scenes[key].type).to.eq(ActionConst.REFRESH); + }); + expect(scenes.messaging.type).to.eq(ActionConst.PUSH); + }); +}); diff --git a/__tests__/Reducer.popAndReplace.test.js b/__tests__/Reducer.popAndReplace.test.js new file mode 100644 index 000000000..4d8fdaa18 --- /dev/null +++ b/__tests__/Reducer.popAndReplace.test.js @@ -0,0 +1,175 @@ +import React from 'react'; +import { expect } from 'chai'; + +import Scene from '../src/Scene'; +import Actions from '../src/Actions'; +import * as ActionConst from '../src/ActionConst'; + +import createReducer, { getCurrent, findElement } from '../src/Reducer'; +import getInitialStateFromRoot from '../src/State'; + +const id = 0; +const guid = () => id + 1; +const scenesData = ( + ({ foo: guid() })} + > + + + + + + + + + + ({ foo: 'what', bar: guid() })} + /> + + + + + + + + + + + ); + +describe('popAndReplace', () => { + let latestState; + let currentScene; + let reducer; + + beforeEach(() => { + const scenes = Actions.create(scenesData); + const initialState = getInitialStateFromRoot(scenes); + reducer = createReducer({ initialState, scenes }); + latestState = null; + }); + + it('pop and replace on root stack', () => { + latestState = reducer(latestState, { + key: 'privacyPolicy', + type: ActionConst.PUSH, + }); + + latestState = reducer(latestState, { + key: 'termsOfService', + type: ActionConst.PUSH, + }); + + latestState = reducer(latestState, { + key: 'termsOfService', + type: ActionConst.POP_AND_REPLACE, + }); + + expect(latestState.index).equal(1); + currentScene = getCurrent(latestState); + expect(currentScene.sceneKey).equal('termsOfService'); + expect(currentScene.type).equal(ActionConst.POP_AND_REPLACE); + }); + + it('pop 2 and replace on root stack', () => { + latestState = reducer(latestState, { + key: 'privacyPolicy', + type: ActionConst.PUSH, + }); + + latestState = reducer(latestState, { + key: 'termsOfService', + type: ActionConst.PUSH, + }); + + latestState = reducer(latestState, { + key: 'termsOfService', + type: ActionConst.POP_AND_REPLACE, + popNum: 2, + }); + + expect(latestState.index).equal(0); + currentScene = getCurrent(latestState); + expect(currentScene.popNum).equal(undefined); + expect(currentScene.sceneKey).equal('termsOfService'); + expect(currentScene.type).equal(ActionConst.POP_AND_REPLACE); + }); + + it('pop out of root stack - standing on root', () => { + try { + latestState = reducer(latestState, { + key: 'termsOfService', + type: ActionConst.POP_AND_REPLACE, + }); + } catch (err) { + expect(err.message).equal('[react-native-router-flux] You are already in the root scene.'); + } + }); + + it('pop out of root stack', () => { + try { + latestState = reducer(latestState, { + key: 'privacyPolicy', + type: ActionConst.PUSH, + }); + + latestState = reducer(latestState, { + key: 'termsOfService', + type: ActionConst.POP_AND_REPLACE, + popNum: 2, + }); + } catch (err) { + expect(err.message).equal('[react-native-router-flux] The data is the number of scenes ' + + 'you want to pop, it must be smaller than scenes stack\'s length.'); + } + }); + + it('pop and replace on child stack', () => { + latestState = reducer(latestState, { + key: 'conversations', + type: ActionConst.PUSH, + }); + + latestState = reducer(latestState, { + key: 'cloneModalComponent', + type: ActionConst.PUSH, + }); + + latestState = reducer(latestState, { + key: 'cloneModalComponent', + type: ActionConst.POP_AND_REPLACE, + }); + + currentScene = getCurrent(latestState); + expect(findElement(latestState, currentScene.parent).index).equal(0); + expect(currentScene.sceneKey).equal('cloneModalComponent'); + expect(currentScene.type).equal(ActionConst.POP_AND_REPLACE); + }); + + it('pop and replace on root stack from nested child', () => { + latestState = reducer(latestState, { + key: 'conversations', + type: ActionConst.PUSH, + }); + + latestState = reducer(latestState, { + key: 'login', + type: ActionConst.PUSH, + }); + + latestState = reducer(latestState, { + key: 'termsOfService', + type: ActionConst.POP_AND_REPLACE, + }); + + expect(latestState.index).equal(0); + currentScene = getCurrent(latestState); + expect(currentScene.sceneKey).equal('termsOfService'); + expect(currentScene.type).equal(ActionConst.POP_AND_REPLACE); + }); +}); diff --git a/__tests__/Reducer.test.js b/__tests__/Reducer.test.js new file mode 100644 index 000000000..0d8adc098 --- /dev/null +++ b/__tests__/Reducer.test.js @@ -0,0 +1,346 @@ +import React from 'react'; +import { expect } from 'chai'; + +import Scene from '../src/Scene'; +import { ActionsTest } from '../src/Actions'; +import * as ActionConst from '../src/ActionConst'; +import createReducer from '../src/Reducer'; +import getInitialStateFromRoot from '../src/State'; + +// TODO: this function is from Reducer!!! Export it from Reducer or move to some sort of helpers. +export default function getCurrent(state) { + if (!state.children) { + return state; + } + return getCurrent(state.children[state.index]); +} + +const id = 0; +const guid = () => id + 1; +const noop = () => {}; +const component = React.Component; +const scenesData = ( + ({ foo: guid() })} + > + + + + + + + + + + ({ foo: 'what', bar: guid() })} + /> + + + + + + + + + + ); + +describe('createReducer', () => { + it('initilize state correct and reducer works', () => { + // create scenes and initialState + // For creating scenes we use external modules. + // TODO: Think about fully isolated test. + const Actions = new ActionsTest(); + const scenes = Actions.create(scenesData); + const initialState = getInitialStateFromRoot(scenes); // TODO: write test for this. + + const reducer = createReducer({ initialState, scenes }); + + let latestState; + let currentScene; + // Testing reducer. + // Normally actions came from Actions module, but we will generate it manually. + latestState = reducer(latestState, { + key: 'conversations', + type: ActionConst.PUSH, + param1: 'Hello world', + }); + + currentScene = getCurrent(latestState); + expect(currentScene.name).equal('conversations'); + expect(currentScene.sceneKey).equal('conversations'); + expect(currentScene.type).equal(ActionConst.PUSH); + expect(currentScene.param1).equal('Hello world'); + + latestState = reducer(latestState, { + key: 'login', // we go to `login` but first renderable child is `loginModal1` + type: ActionConst.PUSH, + param2: 'Hello world2', + }); + currentScene = getCurrent(latestState); + expect(currentScene.name).equal('loginModal1'); + expect(currentScene.sceneKey).equal('loginModal1'); + expect(currentScene.type).equal(ActionConst.PUSH); + expect(currentScene.param2).equal('Hello world2'); + + latestState = reducer(latestState, { + key: 'privacyPolicy', + type: ActionConst.PUSH, + param3: 'Accept policy', + }); + currentScene = getCurrent(latestState); + expect(currentScene.name).equal('privacyPolicy'); + expect(currentScene.sceneKey).equal('privacyPolicy'); + expect(currentScene.type).equal(ActionConst.PUSH); + expect(currentScene.param3).equal('Accept policy'); + + latestState = reducer(latestState, { + key: 'cubeBar', // we go to cubeBar but first renderable child is `conversations` + type: ActionConst.PUSH, + param1: 'Conversations new param', + }); + currentScene = getCurrent(latestState); + expect(currentScene.name).equal('conversations'); + expect(currentScene.sceneKey).equal('conversations'); + expect(currentScene.type).equal(ActionConst.PUSH); + expect(currentScene.param1).equal('Conversations new param'); + }); +}); + +describe('handling actions', () => { + let Actions; + let state; + let current; + + beforeEach(() => { + const scene = ( + + + + + + + + + + + + + + + + + + + ); + + Actions = new ActionsTest(); + const scenes = Actions.create(scene); + const initialState = getInitialStateFromRoot(scenes); + const reducer = createReducer({ initialState, scenes }); + + state = { ...initialState, scenes }; + current = getCurrent(state); + Actions.callback = (action) => { + state = reducer(state, action); + current = getCurrent(state); + }; + }); + + it('navigates to a correct scene on PUSH', () => { + Actions.main(); + + expect(current.key).to.eq('0_hello_'); + }); + + it('switches to a correct tab on JUMP', () => { + Actions.main(); + Actions.hello(); + expect(current.key).to.eq('hello_0_hello_'); + }); + + it('reset to a correct scene on RESET', () => { + Actions.world(); + expect(current.key).to.eq('world_0_world_content'); + + Actions.maps({ type: 'push' }); + expect(current.key).to.eq('maps_0_maps_content'); + + Actions.map_tabs(); + expect(current.key).to.eq('map_tabs_0_map_tab_1_'); + expect(current.parentIndex).to.eq(1); + Actions.foo(); + Actions.bar({ type: 'reset' }); + expect(current.key).to.eq('bar_0_bar'); + }); + + it('maintains scene parentIndex when switching tabs', () => { + Actions.world(); + expect(current.key).to.eq('world_0_world_content'); + + Actions.maps({ type: 'push' }); + expect(current.key).to.eq('maps_0_maps_content'); + + Actions.map_tabs(); + expect(current.key).to.eq('map_tabs_0_map_tab_1_'); + expect(current.parentIndex).to.eq(1); + + Actions.map_tab_2(); + expect(current.key).to.eq('map_tab_2_0_map_tab_2_'); + expect(current.parentIndex).to.eq(1); + + Actions.map_tab_3(); + expect(current.key).to.eq('map_tab_3_0_map_tab_3_'); + expect(current.parentIndex).to.eq(1); + }); +}); + +describe('passing props from actions', () => { + it('passes props for normal scenes', () => { + const scene = ( + + + + + ); + + const Actions = new ActionsTest(); + const scenes = Actions.create(scene); + const initialState = getInitialStateFromRoot(scenes); + const reducer = createReducer({ initialState, scenes }); + + let state = { ...initialState, scenes }; + let current = getCurrent(state); + Actions.callback = (action) => { + state = reducer(state, action); + current = getCurrent(state); + }; + + Actions.hello({ customProp: 'Hello' }); + expect(current.customProp).to.eq('Hello'); + Actions.world({ customProp: 'World' }); + expect(current.customProp).to.eq('World'); + + Actions.hello(); + expect(current.customProp).to.eq(undefined); + }); + + it('passes props for tab scenes', () => { + const scene = ( + + + + + ); + + const Actions = new ActionsTest(); + const scenes = Actions.create(scene); + const initialState = getInitialStateFromRoot(scenes); + const reducer = createReducer({ initialState, scenes }); + + let state = { ...initialState, scenes }; + let current = getCurrent(state); + Actions.callback = (action) => { + state = reducer(state, action); + current = getCurrent(state); + }; + + Actions.home({ customProp: 'Home' }); + expect(current.customProp).to.eq('Home'); + Actions.map({ customProp: 'Map', anotherProp: 'Another' }); + expect(current.customProp).to.eq('Map'); + expect(current.anotherProp).to.eq('Another'); + + Actions.home(); + expect(current.customProp).to.eq(undefined); + expect(current.anotherProp).to.eq(undefined); + }); + + it('passes props for nested tab scenes', () => { + const scene = ( + + + + + + + + ); + + const Actions = new ActionsTest(); + const scenes = Actions.create(scene); + const initialState = getInitialStateFromRoot(scenes); + const reducer = createReducer({ initialState, scenes }); + + let state = { ...initialState, scenes }; + let current = getCurrent(state); + Actions.callback = (action) => { + state = reducer(state, action); + current = getCurrent(state); + }; + + Actions.home({ customProp: 'Home', anotherProp: 'Another' }); + expect(current.customProp).to.eq('Home'); + expect(current.anotherProp).to.eq('Another'); + + Actions.map(); + expect(current.customProp).to.eq(undefined); + expect(current.anotherProp).to.eq(undefined); + + Actions.nested2({ customProp: 'Custom' }); + expect(current.customProp).to.eq('Custom'); + expect(current.anotherProp).to.eq(undefined); + }); + + it('passes props for very nested tab scenes', () => { + const scene = ( + + + + + + + + + + + + + ); + + const Actions = new ActionsTest(); + const scenes = Actions.create(scene); + const initialState = getInitialStateFromRoot(scenes); + const reducer = createReducer({ initialState, scenes }); + + let state = { ...initialState, scenes }; + let current = getCurrent(state); + Actions.callback = (action) => { + state = reducer(state, action); + current = getCurrent(state); + }; + + Actions.home({ customProp: 'Home', anotherProp: 'Another' }); + expect(current.customProp).to.eq('Home'); + expect(current.anotherProp).to.eq('Another'); + + Actions.map(); + expect(current.customProp).to.eq(undefined); + expect(current.anotherProp).to.eq(undefined); + + Actions.nestedTabs({ customProp: 'Custom' }); + expect(current.customProp).to.eq('Custom'); + expect(current.anotherProp).to.eq(undefined); + + Actions.nestedTab2(); + expect(current.customProp).to.eq(undefined); + + Actions.map({ customProp: 'Custom' }); + expect(current.customProp).to.eq('Custom'); + }); +}); diff --git a/test/setup.js b/test/setup.js new file mode 100644 index 000000000..598af0ef1 --- /dev/null +++ b/test/setup.js @@ -0,0 +1,15 @@ +require("babel-register")({ + // This will override `node_modules` ignoring - you can alternatively pass + // an array of strings to be explicitly matched or a regex / glob + ignore: false +}); + +jest.mock('Linking', () => { + return { + addEventListener: jest.fn(), + removeEventListener: jest.fn(), + openURL: jest.fn(), + canOpenURL: jest.fn(), + getInitialURL: ()=>new Promise((resolve, reject) => resolve()), + } +});