diff --git a/Gemfile b/Gemfile index bb18c0b..d08985f 100644 --- a/Gemfile +++ b/Gemfile @@ -57,3 +57,4 @@ end gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] gem 'devise' gem 'dotenv-rails', groups: [:development, :test] +gem 'react-rails' \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index ad1e02a..e08a0ff 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -62,9 +62,13 @@ GEM zeitwerk (~> 2.3) addressable (2.8.0) public_suffix (>= 2.0.2, < 5.0) + babel-source (5.8.35) + babel-transpiler (0.7.0) + babel-source (>= 4.0, < 6) + execjs (~> 2.0) bcrypt (3.1.16) bindex (0.8.1) - bootsnap (1.9.1) + bootsnap (1.9.3) msgpack (~> 1.0) builder (3.2.4) byebug (11.1.3) @@ -79,6 +83,7 @@ GEM xpath (~> 3.2) childprocess (4.1.0) concurrent-ruby (1.1.9) + connection_pool (2.2.5) crass (1.0.6) devise (4.8.0) bcrypt (~> 3.0) @@ -91,12 +96,13 @@ GEM dotenv (= 2.7.6) railties (>= 3.2) erubi (1.10.0) + execjs (2.8.1) ffi (1.15.4) - globalid (0.5.2) + globalid (1.0.0) activesupport (>= 5.0) i18n (1.8.11) concurrent-ruby (~> 1.0) - jbuilder (2.11.2) + jbuilder (2.11.3) activesupport (>= 5.0.0) listen (3.7.0) rb-fsevent (~> 0.10, >= 0.10.3) @@ -110,12 +116,10 @@ GEM matrix (0.4.2) method_source (1.0.0) mini_mime (1.1.2) - mini_portile2 (2.6.1) minitest (5.14.4) msgpack (1.4.2) nio4r (2.5.8) nokogiri (1.12.5) - mini_portile2 (~> 2.6.1) racc (~> 1.4) nokogiri (1.12.5-x86_64-linux) racc (~> 1.4) @@ -162,8 +166,14 @@ GEM rb-fsevent (0.11.0) rb-inotify (0.10.1) ffi (~> 1.0) + react-rails (2.6.1) + babel-transpiler (>= 0.7.0) + connection_pool + execjs + railties (>= 3.2) + tilt redis (4.5.1) - regexp_parser (2.1.1) + regexp_parser (2.2.0) responders (3.0.1) actionpack (>= 5.0) railties (>= 5.0) @@ -179,16 +189,16 @@ GEM sprockets (> 3.0) sprockets-rails tilt - selenium-webdriver (4.0.3) + selenium-webdriver (4.1.0) childprocess (>= 0.5, < 5.0) rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2) semantic_range (3.0.0) - spring (3.0.0) + spring (3.1.1) sprockets (4.0.2) concurrent-ruby (~> 1.0) rack (> 1, < 3) - sprockets-rails (3.3.0) + sprockets-rails (3.4.1) actionpack (>= 5.2) activesupport (>= 5.2) sprockets (>= 3.0.0) @@ -201,7 +211,7 @@ GEM concurrent-ruby (~> 1.0) warden (1.2.9) rack (>= 2.0.9) - web-console (4.1.0) + web-console (4.2.0) actionview (>= 6.0.0) activemodel (>= 6.0.0) bindex (>= 0.4.0) @@ -239,6 +249,7 @@ DEPENDENCIES puma (~> 5.0) rack-mini-profiler (~> 2.0) rails (~> 6.1.4, >= 6.1.4.1) + react-rails redis (~> 4.0) sass-rails (>= 6) selenium-webdriver diff --git a/app/javascript/packs/menubar.jsx b/app/javascript/packs/menubar.jsx new file mode 100644 index 0000000..772fc97 --- /dev/null +++ b/app/javascript/packs/menubar.jsx @@ -0,0 +1,26 @@ +// Run this example by adding <%= javascript_pack_tag 'hello_react' %> to the head of your layout file, +// like app/views/layouts/application.html.erb. All it does is render
Hello React
at the bottom +// of the page. + +import React from 'react' +import ReactDOM from 'react-dom' +import PropTypes from 'prop-types' + +const Hello = props => ( +
Hello {props.name}!
+) + +Hello.defaultProps = { + name: 'David' +} + +Hello.propTypes = { + name: PropTypes.string +} + +document.addEventListener('DOMContentLoaded', () => { + ReactDOM.render( + , + document.body.appendChild(document.createElement('div')), + ) +}) diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index a8112a4..a2507fd 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -11,6 +11,9 @@ +
+ <%= javascript_pack_tag 'menubar' %> +

<%= notice %>

<%= alert %>

diff --git a/babel.config.js b/babel.config.js index 19a07f3..ce41503 100644 --- a/babel.config.js +++ b/babel.config.js @@ -22,8 +22,10 @@ module.exports = function(api) { { targets: { node: 'current' - } - } + }, + modules: 'commonjs' + }, + '@babel/preset-react' ], (isProductionEnv || isDevelopmentEnv) && [ '@babel/preset-env', @@ -34,6 +36,13 @@ module.exports = function(api) { modules: false, exclude: ['transform-typeof-symbol'] } + ], + [ + '@babel/preset-react', + { + development: isDevelopmentEnv || isTestEnv, + useBuiltIns: true + } ] ].filter(Boolean), plugins: [ @@ -68,7 +77,9 @@ module.exports = function(api) { [ '@babel/plugin-transform-runtime', { - helpers: false + helpers: false, + regenerator: true, + corejs: false } ], [ @@ -76,6 +87,12 @@ module.exports = function(api) { { async: false } + ], + isProductionEnv && [ + 'babel-plugin-transform-react-remove-prop-types', + { + removeImport: true + } ] ].filter(Boolean) } diff --git a/config/webpacker.yml b/config/webpacker.yml index a6b1465..ba8415e 100644 --- a/config/webpacker.yml +++ b/config/webpacker.yml @@ -33,6 +33,7 @@ default: &default - .woff2 extensions: + - .jsx - .mjs - .js - .sass diff --git a/default.nix b/default.nix index fea8900..402f610 100644 --- a/default.nix +++ b/default.nix @@ -1,16 +1,13 @@ -{pkgs ? import {}}: -with pkgs; +{stdenv, bundlerEnv, ruby_3_0}: let - ruby = ruby_3_0; - rubyEnv = bundlerEnv { - name = "project-bundler-env"; - inherit ruby; - gemdir = ./.; - }; + gems = bundlerEnv { + name = "env"; + inherit ruby_3_0; + gemdir = ./.; + }; in - mkShell { - buildInputs = [ - rubyEnv - rubyEnv.wrappedRuby - ]; - } +stdenv.mkDerivation { + name = "janus"; + src = ./.; + buildInputs = [gems ruby_3_0]; +} diff --git a/fuck.nix b/fuck.nix new file mode 100644 index 0000000..954056f --- /dev/null +++ b/fuck.nix @@ -0,0 +1,24 @@ +{pkgs ? import {}}: +with pkgs; +let + ruby = ruby_3_0; + rubyEnv = bundlerEnv { + name = "project-bundler-env"; + inherit ruby; + gemdir = ./.; + gemfile = ./Gemfile; + lockfile = ./Gemfile.lock; + gemset = ./gemset.nix; + }; +in + mkShell { + nativeBuildInputs = [ + #rubyPackages_3_0.nokogiri + ]; + buildInputs = [ + #rubyPackages_3_0.nokogiri + rubyEnv + rubyEnv.wrappedRuby + yarn + ]; + } diff --git a/gemset.nix b/gemset.nix index 274d404..d0bb02a 100644 --- a/gemset.nix +++ b/gemset.nix @@ -131,6 +131,27 @@ }; version = "2.8.0"; }; + babel-source = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ncq8h82k6hypzfb5dk7z95mmcdwnhsxmc53xz17m1nbklm25vvr"; + type = "gem"; + }; + version = "5.8.35"; + }; + babel-transpiler = { + dependencies = ["babel-source" "execjs"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0w0minwxj56w96xps1msm6n75fs0y7r1vqcr9zlsn74fksnz81jc"; + type = "gem"; + }; + version = "0.7.0"; + }; bcrypt = { groups = ["default"]; platforms = []; @@ -157,10 +178,10 @@ platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "1ndjra3h86dq28njm2swmaw6n3vsywrycrf7i5iy9l8hrhfhv4x2"; + sha256 = "18prmylz53gsw651f0sibb2mvdxgd2zzdzh6a9a1idpqhyxcnbg7"; type = "gem"; }; - version = "1.9.1"; + version = "1.9.3"; }; builder = { groups = ["default" "development" "test"]; @@ -221,6 +242,16 @@ }; version = "1.1.9"; }; + connection_pool = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ffdxhgirgc86qb42yvmfj6v1v0x4lvi0pxn9zhghkff44wzra0k"; + type = "gem"; + }; + version = "2.2.5"; + }; crass = { groups = ["default" "development" "test"]; platforms = []; @@ -273,6 +304,16 @@ }; version = "1.10.0"; }; + execjs = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "121h6af4i6wr3wxvv84y53jcyw2sk71j5wsncm6wq6yqrwcrk4vd"; + type = "gem"; + }; + version = "2.8.1"; + }; ffi = { groups = ["default" "development"]; platforms = []; @@ -289,10 +330,10 @@ platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "0k6ww3shk3mv119xvr9m99l6ql0czq91xhd66hm8hqssb18r2lvm"; + sha256 = "1n5yc058i8xhi1fwcp1w7mfi6xaxfmrifdb4r4hjfff33ldn8lqj"; type = "gem"; }; - version = "0.5.2"; + version = "1.0.0"; }; i18n = { dependencies = ["concurrent-ruby"]; @@ -311,10 +352,10 @@ platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "1vz0vp5lbp1bz2samyn8nk49vyh6zhvcqz35faq4i3kgsd4xlnhp"; + sha256 = "1a8fhj01wqsjyr3cm6fzrv54p879v83xpm2vrh7if9q5zwvkqmfn"; type = "gem"; }; - version = "2.11.2"; + version = "2.11.3"; }; listen = { dependencies = ["rb-fsevent" "rb-inotify"]; @@ -389,16 +430,6 @@ }; version = "1.1.2"; }; - mini_portile2 = { - groups = ["default" "development" "test"]; - platforms = []; - source = { - remotes = ["https://rubygems.org"]; - sha256 = "1lvxm91hi0pabnkkg47wh1siv56s6slm2mdq1idfm86dyfidfprq"; - type = "gem"; - }; - version = "2.6.1"; - }; minitest = { groups = ["default" "development" "test"]; platforms = []; @@ -430,7 +461,7 @@ version = "2.5.8"; }; nokogiri = { - dependencies = ["mini_portile2" "racc"]; + dependencies = ["racc"]; groups = ["default" "development" "test"]; platforms = []; source = { @@ -609,6 +640,17 @@ }; version = "0.10.1"; }; + react-rails = { + dependencies = ["babel-transpiler" "connection_pool" "execjs" "railties" "tilt"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1m5n1k2bcl9z1pfmdm0xgy90hkjmvvk19hbxymx9yn4vvfmimw1y"; + type = "gem"; + }; + version = "2.6.1"; + }; redis = { groups = ["default"]; platforms = []; @@ -624,10 +666,10 @@ platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "0vg7imjnfcqjx7kw94ccj5r78j4g190cqzi1i59sh4a0l940b9cr"; + sha256 = "008yn8j44414qxhn1c0nxp4a70rq0bqhz70hnjpgx8cjh2g0makp"; type = "gem"; }; - version = "2.1.1"; + version = "2.2.0"; }; responders = { dependencies = ["actionpack" "railties"]; @@ -699,10 +741,10 @@ platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "1kiz6afx2mdl9pad2ji5yv3bhfm474ns7cwry171di0lq78aa8na"; + sha256 = "17hilxa40cj7q48k6wcx1cbdb1v3q9c4nx89fji7gyqpcfm16vq7"; type = "gem"; }; - version = "4.0.3"; + version = "4.1.0"; }; semantic_range = { groups = ["default"]; @@ -719,10 +761,10 @@ platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "12kyz3jdnaarhf2jbykmd9mqg085gxsx00c16la5q7czxvpb2x2r"; + sha256 = "0w0v6fyic3a4vq1imzcp0x4b3cgbm1gi7jn7qma9768zaqmxv8gw"; type = "gem"; }; - version = "3.0.0"; + version = "3.1.1"; }; sprockets = { dependencies = ["concurrent-ruby" "rack"]; @@ -741,10 +783,10 @@ platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "18iic4rx82v0wq7criigfsj96dqw3dmdnpqpqwpqy32nn4yh1p2w"; + sha256 = "0pjz4lbv2v0p9fa5nsrxy5lphsixb9a69gq2rxp0h5sr61m18mdq"; type = "gem"; }; - version = "3.3.0"; + version = "3.4.1"; }; thor = { groups = ["default" "development" "test"]; @@ -815,10 +857,10 @@ platforms = []; source = { remotes = ["https://rubygems.org"]; - sha256 = "0d9hk929cmisix2l1w9kkh05b57ih9yvnh4wv52axxw41scnv2d9"; + sha256 = "1hrkaj4131rh3kq519gkn2lrlpm22f6q5ys1b5fk0v9xm1bm1w78"; type = "gem"; }; - version = "4.1.0"; + version = "4.2.0"; }; webdrivers = { dependencies = ["nokogiri" "rubyzip" "selenium-webdriver"]; diff --git a/package.json b/package.json index 7fcb8a0..8fee3f9 100644 --- a/package.json +++ b/package.json @@ -2,10 +2,15 @@ "name": "janus", "private": true, "dependencies": { + "@babel/preset-react": "^7.16.0", "@rails/actioncable": "^6.0.0", "@rails/activestorage": "^6.0.0", "@rails/ujs": "^6.0.0", "@rails/webpacker": "5.4.3", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24", + "prop-types": "^15.7.2", + "react": "^17.0.2", + "react-dom": "^17.0.2", "turbolinks": "^5.2.0", "webpack": "^4.46.0", "webpack-cli": "^3.3.12" diff --git a/shell.nix b/shell.nix index 601851e..9e9b203 100644 --- a/shell.nix +++ b/shell.nix @@ -1,28 +1,13 @@ -with (import {}); +with import {}; -let ruby = ruby_3_0; -in -ruby.withPackages ( -ps: with ps; [ - nokogiri - rails - pg - puma - sass-rails - webpacker - turbolinks - jbuilder - redis - bootsnap - web-console - rack-mini-profiler - listen - spring - capybara - selenium-webdriver - webdrivers - tzinfo-data - devise - dotenv-rails -] -) +stdenv.mkDerivation { + name = "env"; + buildInputs = [ + ruby_3_0.devEnv + libxml2 + libxslt + zlib + bundix + gnumake + ]; +} diff --git a/shell_broken.nix b/shell_broken.nix deleted file mode 100644 index 80a11b0..0000000 --- a/shell_broken.nix +++ /dev/null @@ -1,48 +0,0 @@ -with (import {}); -with builtins; - -let - ruby = ruby_3_0; - minitest = buildRubyGem { - inherit ruby; - gemName = "minitest"; - type = "gem"; - version = "5.10.1"; - source.sha256 = "1yk2m8sp0p5m1niawa3ncg157a4i0594cg7z91rzjxv963rzrwab"; - gemPath = []; - }; - - rake = buildRubyGem { - inherit ruby; - gemName = "rake"; - type = "gem"; - version = "12.0.0"; - source.sha256 = "01j8fc9bqjnrsxbppncai05h43315vmz9fwg28qdsgcjw9ck1d7n"; - gemPath = []; - }; - - srcWithout = rootPath: ignoredPaths: - let - ignoreStrings = map (path: toString path ) ignoredPaths; - in - filterSource (path: type: (all (i: i != path) ignoreStrings)) rootPath; -in - stdenv.mkDerivation { - name = "bundix"; - src = builtins.fetchGit { - url = "https://github.com/jdelStrother/bundix.git"; - ref = "multi-platform"; - }; - phases = "installPhase"; - installPhase = '' - mkdir -p $out - makeWrapper $src/bin/bundix $out/bin/bundix \ - --prefix PATH : "${nix.out}/bin" \ - --prefix PATH : "${nix-prefetch-git.out}/bin" \ - --set GEM_PATH "${bundler}/${bundler.ruby.gemPath}" - ''; - - nativeBuildInputs = [makeWrapper]; - - buildInputs = [bundler ruby minitest rake nix-prefetch-scripts git sqlite libpcap postgresql libxml2 libxslt pkg-config gnumake]; -} diff --git a/yarn.lock b/yarn.lock index 313b14a..cbb5594 100644 --- a/yarn.lock +++ b/yarn.lock @@ -442,6 +442,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz#f9624394317365a9a88c82358d3f8471154698f1" + integrity sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -681,6 +688,39 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-react-display-name@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.0.tgz#9a0ad8aa8e8790883a7bd2736f66229a58125676" + integrity sha512-FJFdJAqaCpndL+pIf0aeD/qlQwT7QXOvR6Cc8JPvNhKJBi2zc/DPc4g05Y3fbD/0iWAMQFGij4+Xw+4L/BMpTg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-react-jsx-development@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.0.tgz#1cb52874678d23ab11d0d16488d54730807303ef" + integrity sha512-qq65iSqBRq0Hr3wq57YG2AmW0H6wgTnIzpffTphrUWUgLCOK+zf1f7G0vuOiXrp7dU1qq+fQBoqZ3wCDAkhFzw== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.16.0" + +"@babel/plugin-transform-react-jsx@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.0.tgz#55b797d4960c3de04e07ad1c0476e2bc6a4889f1" + integrity sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-jsx" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/plugin-transform-react-pure-annotations@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.0.tgz#23db6ddf558d8abde41b8ad9d59f48ad5532ccab" + integrity sha512-NC/Bj2MG+t8Ef5Pdpo34Ay74X4Rt804h5y81PwOpfPtmAK3i6CizmQqwyBQzIepz1Yt8wNr2Z2L7Lu3qBMfZMA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-regenerator@^7.14.5", "@babel/plugin-transform-regenerator@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz#eaee422c84b0232d03aea7db99c97deeaf6125a4" @@ -849,6 +889,18 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" +"@babel/preset-react@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.0.tgz#f71d3e8dff5218478011df037fad52660ee6d82a" + integrity sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-transform-react-display-name" "^7.16.0" + "@babel/plugin-transform-react-jsx" "^7.16.0" + "@babel/plugin-transform-react-jsx-development" "^7.16.0" + "@babel/plugin-transform-react-pure-annotations" "^7.16.0" + "@babel/runtime@^7.15.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": version "7.16.3" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5" @@ -1414,6 +1466,11 @@ babel-plugin-polyfill-regenerator@^0.2.3: dependencies: "@babel/helper-define-polyfill-provider" "^0.2.4" +babel-plugin-transform-react-remove-prop-types@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" + integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -3800,7 +3857,7 @@ jest-worker@^26.5.0: merge-stream "^2.0.0" supports-color "^7.0.0" -js-tokens@^4.0.0: +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -3977,6 +4034,13 @@ loglevel@^1.6.8: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== +loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -5443,6 +5507,15 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + proxy-addr@~2.0.5: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -5571,6 +5644,28 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" +react-dom@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + +react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + read-cache@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" @@ -5842,6 +5937,14 @@ sax@~1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"