From 428c25a1c71419fb7d05bd57a527b23d9eb1eda4 Mon Sep 17 00:00:00 2001 From: Shaher-11 Date: Tue, 11 May 2021 15:07:36 +0200 Subject: [PATCH 01/31] Update gemfile --- Gemfile.lock | 198 +++++++++++++++++++++++++-------------------------- 1 file changed, 99 insertions(+), 99 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index b67d4b3306..0db42aea73 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,55 +1,55 @@ GEM remote: https://rubygems.org/ specs: - actioncable (5.2.4.1) - actionpack (= 5.2.4.1) + actioncable (5.2.6) + actionpack (= 5.2.6) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailer (5.2.4.1) - actionpack (= 5.2.4.1) - actionview (= 5.2.4.1) - activejob (= 5.2.4.1) + actionmailer (5.2.6) + actionpack (= 5.2.6) + actionview (= 5.2.6) + activejob (= 5.2.6) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (5.2.4.1) - actionview (= 5.2.4.1) - activesupport (= 5.2.4.1) + actionpack (5.2.6) + actionview (= 5.2.6) + activesupport (= 5.2.6) rack (~> 2.0, >= 2.0.8) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (5.2.4.1) - activesupport (= 5.2.4.1) + actionview (5.2.6) + activesupport (= 5.2.6) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.0.3) - activejob (5.2.4.1) - activesupport (= 5.2.4.1) + activejob (5.2.6) + activesupport (= 5.2.6) globalid (>= 0.3.6) - activemodel (5.2.4.1) - activesupport (= 5.2.4.1) - activerecord (5.2.4.1) - activemodel (= 5.2.4.1) - activesupport (= 5.2.4.1) + activemodel (5.2.6) + activesupport (= 5.2.6) + activerecord (5.2.6) + activemodel (= 5.2.6) + activesupport (= 5.2.6) arel (>= 9.0) - activestorage (5.2.4.1) - actionpack (= 5.2.4.1) - activerecord (= 5.2.4.1) - marcel (~> 0.3.1) - activesupport (5.2.4.1) + activestorage (5.2.6) + actionpack (= 5.2.6) + activerecord (= 5.2.6) + marcel (~> 1.0.0) + activesupport (5.2.6) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) arel (9.0.0) - ast (2.4.0) - bcrypt (3.1.13) + ast (2.4.2) + bcrypt (3.1.16) bindex (0.8.1) - bootsnap (1.4.6) + bootsnap (1.7.5) msgpack (~> 1.0) builder (3.2.4) - byebug (11.1.1) + byebug (11.1.3) coffee-rails (4.2.2) coffee-script (>= 2.2.0) railties (>= 4.0.0) @@ -57,116 +57,116 @@ GEM coffee-script-source execjs coffee-script-source (1.12.2) - concurrent-ruby (1.1.6) + concurrent-ruby (1.1.8) crass (1.0.6) - devise (4.7.1) + devise (4.8.0) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0) responders warden (~> 1.2.3) - diff-lcs (1.3) - erubi (1.9.0) - execjs (2.7.0) - ffi (1.12.2) - ffi (1.12.2-x64-mingw32) + diff-lcs (1.4.4) + erubi (1.10.0) + execjs (2.8.0) + ffi (1.15.0) + ffi (1.15.0-x64-mingw32) globalid (0.4.2) activesupport (>= 4.2.0) - i18n (1.8.2) + i18n (1.8.10) concurrent-ruby (~> 1.0) - jaro_winkler (1.5.4) - jbuilder (2.10.0) + jbuilder (2.11.2) activesupport (>= 5.0.0) listen (3.1.5) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) ruby_dep (~> 1.2) - loofah (2.4.0) + loofah (2.9.1) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) mini_mime (>= 0.1.1) - marcel (0.3.3) - mimemagic (~> 0.3.2) - method_source (0.9.2) - mimemagic (0.3.4) - mini_mime (1.0.2) - mini_portile2 (2.5.0) - minitest (5.14.0) - msgpack (1.3.3) - msgpack (1.3.3-x64-mingw32) - nio4r (2.5.2) - nokogiri (1.11.1) + marcel (1.0.1) + method_source (1.0.0) + mini_mime (1.1.0) + mini_portile2 (2.5.1) + minitest (5.14.4) + msgpack (1.4.2) + nio4r (2.5.7) + nokogiri (1.11.3) mini_portile2 (~> 2.5.0) racc (~> 1.4) - nokogiri (1.11.1-x64-mingw32) + nokogiri (1.11.3-x64-mingw32) racc (~> 1.4) orm_adapter (0.5.0) - parallel (1.19.1) - parser (2.7.0.4) - ast (~> 2.4.0) - pg (1.2.2) - pg (1.2.2-x64-mingw32) + parallel (1.20.1) + parser (3.0.1.1) + ast (~> 2.4.1) + pg (1.2.3) + pg (1.2.3-x64-mingw32) puma (3.12.6) racc (1.5.2) rack (2.2.3) rack-test (1.1.0) rack (>= 1.0, < 3) - rails (5.2.4.1) - actioncable (= 5.2.4.1) - actionmailer (= 5.2.4.1) - actionpack (= 5.2.4.1) - actionview (= 5.2.4.1) - activejob (= 5.2.4.1) - activemodel (= 5.2.4.1) - activerecord (= 5.2.4.1) - activestorage (= 5.2.4.1) - activesupport (= 5.2.4.1) + rails (5.2.6) + actioncable (= 5.2.6) + actionmailer (= 5.2.6) + actionpack (= 5.2.6) + actionview (= 5.2.6) + activejob (= 5.2.6) + activemodel (= 5.2.6) + activerecord (= 5.2.6) + activestorage (= 5.2.6) + activesupport (= 5.2.6) bundler (>= 1.3.0) - railties (= 5.2.4.1) + railties (= 5.2.6) sprockets-rails (>= 2.0.0) rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) rails-html-sanitizer (1.3.0) loofah (~> 2.3) - railties (5.2.4.1) - actionpack (= 5.2.4.1) - activesupport (= 5.2.4.1) + railties (5.2.6) + actionpack (= 5.2.6) + activesupport (= 5.2.6) method_source rake (>= 0.8.7) thor (>= 0.19.0, < 2.0) rainbow (3.0.0) - rake (13.0.1) - rb-fsevent (0.10.3) + rake (13.0.3) + rb-fsevent (0.11.0) rb-inotify (0.10.1) ffi (~> 1.0) - responders (3.0.0) + regexp_parser (2.1.1) + responders (3.0.1) actionpack (>= 5.0) railties (>= 5.0) - rexml (3.2.4) - rspec (3.9.0) - rspec-core (~> 3.9.0) - rspec-expectations (~> 3.9.0) - rspec-mocks (~> 3.9.0) - rspec-core (3.9.1) - rspec-support (~> 3.9.1) - rspec-expectations (3.9.1) + rexml (3.2.5) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.1) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.9.0) - rspec-mocks (3.9.1) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.2) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.9.0) - rspec-support (3.9.2) - rubocop (0.80.1) - jaro_winkler (~> 1.5.1) + rspec-support (~> 3.10.0) + rspec-support (3.10.2) + rubocop (1.14.0) parallel (~> 1.10) - parser (>= 2.7.0.1) + parser (>= 3.0.0.0) rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) rexml + rubocop-ast (>= 1.5.0, < 2.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 1.7) - ruby-progressbar (1.10.1) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.5.0) + parser (>= 3.0.1.1) + ruby-progressbar (1.11.0) ruby_dep (1.5.0) sass (3.7.4) sass-listen (~> 4.0.0) @@ -179,38 +179,38 @@ GEM sprockets (>= 2.8, < 4.0) sprockets-rails (>= 2.0, < 4.0) tilt (>= 1.1, < 3) - spring (2.1.0) + spring (2.1.1) spring-watcher-listen (2.0.1) listen (>= 2.7, < 4.0) spring (>= 1.2, < 3.0) sprockets (3.7.2) concurrent-ruby (~> 1.0) rack (> 1, < 3) - sprockets-rails (3.2.1) + sprockets-rails (3.2.2) actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) - thor (1.0.1) + thor (1.1.0) thread_safe (0.3.6) tilt (2.0.10) turbolinks (5.2.1) turbolinks-source (~> 5.2) turbolinks-source (5.2.0) - tzinfo (1.2.6) + tzinfo (1.2.9) thread_safe (~> 0.1) - tzinfo-data (1.2020.1) + tzinfo-data (1.2021.1) tzinfo (>= 1.0.0) uglifier (4.2.0) execjs (>= 0.3.0, < 3) - unicode-display_width (1.6.1) - warden (1.2.8) - rack (>= 2.0.6) + unicode-display_width (2.0.0) + warden (1.2.9) + rack (>= 2.0.9) web-console (3.7.0) actionview (>= 5.0) activemodel (>= 5.0) bindex (>= 0.4.0) railties (>= 5.0) - websocket-driver (0.7.1) + websocket-driver (0.7.3) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) @@ -242,4 +242,4 @@ RUBY VERSION ruby 2.7.0p0 BUNDLED WITH - 2.1.2 + 2.2.4 From 0c061272eeb66a9bfea7c0a52e3e6d0ac3a9aa67 Mon Sep 17 00:00:00 2001 From: Shaher-11 Date: Tue, 11 May 2021 19:07:41 +0200 Subject: [PATCH 02/31] Add project ERD --- docs/Database ER diagram (crow's foot).png | Bin 0 -> 23593 bytes package-lock.json | 5410 ++++++++++++++++++++ package.json | 7 +- 3 files changed, 5413 insertions(+), 4 deletions(-) create mode 100644 docs/Database ER diagram (crow's foot).png create mode 100644 package-lock.json diff --git a/docs/Database ER diagram (crow's foot).png b/docs/Database ER diagram (crow's foot).png new file mode 100644 index 0000000000000000000000000000000000000000..6e5cab503e1c653a71f88474687e7b8be80b415f GIT binary patch literal 23593 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 literal 0 HcmV?d00001 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..c18918abeb --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5410 @@ +{ + "name": "ror_social_scaffold", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "ror_social_scaffold", + "devDependencies": { + "stylelint": "^13.13.1", + "stylelint-config-standard": "^21.0.0", + "stylelint-csstree-validator": "^1.9.0", + "stylelint-scss": "^3.19.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", + "dev": true + }, + "node_modules/@babel/core": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", + "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", + "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.15", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.13.12" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.13.12" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.13.12" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true + }, + "node_modules/@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/traverse": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "node_modules/@babel/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", + "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@stylelint/postcss-css-in-js": { + "version": "0.37.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz", + "integrity": "sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA==", + "dev": true, + "dependencies": { + "@babel/core": ">=7.9.0" + }, + "peerDependencies": { + "postcss": ">=7.0.0", + "postcss-syntax": ">=0.36.2" + } + }, + "node_modules/@stylelint/postcss-markdown": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", + "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", + "dev": true, + "dependencies": { + "remark": "^13.0.0", + "unist-util-find-all-after": "^3.0.2" + }, + "peerDependencies": { + "postcss": ">=7.0.0", + "postcss-syntax": ">=0.36.2" + } + }, + "node_modules/@types/mdast": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", + "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/minimist": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", + "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", + "dev": true + }, + "node_modules/ajv": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.3.0.tgz", + "integrity": "sha512-RYE7B5An83d7eWnDR8kbdaIFqmKCNsP16ay1hDbJEU+sa0e3H9SebskCt0Uufem6cfAVu7Col6ubcn/W+Sm8/Q==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "dev": true, + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/brace-expansion/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001228", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", + "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/clone-regexp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "dev": true, + "dependencies": { + "is-regexp": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.727", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz", + "integrity": "sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/execall": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", + "dev": true, + "dependencies": { + "clone-regexp": "^2.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true + }, + "node_modules/gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "gonzales": "bin/gonzales.js" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/known-css-properties": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz", + "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==", + "dev": true + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/map-obj": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", + "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", + "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "resolve": "^1.20.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-selector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", + "dev": true + }, + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-html": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", + "dev": true, + "dependencies": { + "htmlparser2": "^3.10.0" + }, + "peerDependencies": { + "postcss": ">=5.0.0", + "postcss-syntax": ">=0.36.0" + } + }, + "node_modules/postcss-less": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", + "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.14" + }, + "engines": { + "node": ">=6.14.4" + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true + }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "dev": true + }, + "node_modules/postcss-safe-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", + "dev": true, + "dependencies": { + "postcss": "^7.0.26" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-sass": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", + "dev": true, + "dependencies": { + "gonzales-pe": "^4.3.0", + "postcss": "^7.0.21" + } + }, + "node_modules/postcss-scss": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", + "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz", + "integrity": "sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-syntax": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", + "dev": true, + "peerDependencies": { + "postcss": ">=5.0.0" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "node_modules/postcss/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/remark": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", + "dev": true, + "dependencies": { + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "dev": true, + "dependencies": { + "mdast-util-from-markdown": "^0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", + "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", + "dev": true, + "dependencies": { + "mdast-util-to-markdown": "^0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "node_modules/specificity": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", + "dev": true, + "bin": { + "specificity": "bin/specificity" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "dev": true + }, + "node_modules/stylelint": { + "version": "13.13.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.13.1.tgz", + "integrity": "sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==", + "dev": true, + "dependencies": { + "@stylelint/postcss-css-in-js": "^0.37.2", + "@stylelint/postcss-markdown": "^0.36.2", + "autoprefixer": "^9.8.6", + "balanced-match": "^2.0.0", + "chalk": "^4.1.1", + "cosmiconfig": "^7.0.0", + "debug": "^4.3.1", + "execall": "^2.0.0", + "fast-glob": "^3.2.5", + "fastest-levenshtein": "^1.0.12", + "file-entry-cache": "^6.0.1", + "get-stdin": "^8.0.0", + "global-modules": "^2.0.0", + "globby": "^11.0.3", + "globjoin": "^0.1.4", + "html-tags": "^3.1.0", + "ignore": "^5.1.8", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "known-css-properties": "^0.21.0", + "lodash": "^4.17.21", + "log-symbols": "^4.1.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.4", + "normalize-selector": "^0.2.0", + "postcss": "^7.0.35", + "postcss-html": "^0.36.0", + "postcss-less": "^3.1.4", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^4.0.2", + "postcss-sass": "^0.4.4", + "postcss-scss": "^2.1.1", + "postcss-selector-parser": "^6.0.5", + "postcss-syntax": "^0.36.2", + "postcss-value-parser": "^4.1.0", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "specificity": "^0.4.1", + "string-width": "^4.2.2", + "strip-ansi": "^6.0.0", + "style-search": "^0.1.0", + "sugarss": "^2.0.0", + "svg-tags": "^1.0.0", + "table": "^6.6.0", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^3.0.3" + }, + "bin": { + "stylelint": "bin/stylelint.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + } + }, + "node_modules/stylelint-config-recommended": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-4.0.0.tgz", + "integrity": "sha512-sgna89Ng+25Hr9kmmaIxpGWt2LStVm1xf1807PdcWasiPDaOTkOHRL61sINw0twky7QMzafCGToGDnHT/kTHtQ==", + "dev": true, + "peerDependencies": { + "stylelint": "^13.12.0" + } + }, + "node_modules/stylelint-config-standard": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-21.0.0.tgz", + "integrity": "sha512-Yf6mx5oYEbQQJxWuW7X3t1gcxqbUx52qC9SMS3saC2ruOVYEyqmr5zSW6k3wXflDjjFrPhar3kp68ugRopmlzg==", + "dev": true, + "dependencies": { + "stylelint-config-recommended": "^4.0.0" + }, + "peerDependencies": { + "stylelint": "^13.12.0" + } + }, + "node_modules/stylelint-csstree-validator": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/stylelint-csstree-validator/-/stylelint-csstree-validator-1.9.0.tgz", + "integrity": "sha512-fVbtWDEWzux/bZSPBk9tD/bvyc8bSmb52BvUDjcduOzXqKqOyFHUvFayVr9ic88l8KJEVV0Ujab9ah5oTdX4Uw==", + "dev": true, + "dependencies": { + "css-tree": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "stylelint": ">=7.0.0 <14.0.0" + } + }, + "node_modules/stylelint-scss": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.19.0.tgz", + "integrity": "sha512-Ic5bsmpS4wVucOw44doC1Yi9f5qbeVL4wPFiEOaUElgsOuLEN6Ofn/krKI8BeNL2gAn53Zu+IcVV4E345r6rBw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "stylelint": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0" + } + }, + "node_modules/sugarss": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "node_modules/table": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.0.tgz", + "integrity": "sha512-SAM+5p6V99gYiiy2gT5ArdzgM1dLDed0nkrWmG6Fry/bUS/m9x83BwpJUOf1Qj/x2qJd+thL6IkIx7qPGRxqBw==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/unified": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", + "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", + "dev": true, + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/unist-util-find-all-after": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", + "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", + "dev": true, + "dependencies": { + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/compat-data": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", + "dev": true + }, + "@babel/core": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", + "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz", + "integrity": "sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.15", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", + "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "dev": true, + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==", + "dev": true + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", + "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.0", + "@babel/types": "^7.14.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.1.tgz", + "integrity": "sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, + "@stylelint/postcss-css-in-js": { + "version": "0.37.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz", + "integrity": "sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA==", + "dev": true, + "requires": { + "@babel/core": ">=7.9.0" + } + }, + "@stylelint/postcss-markdown": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", + "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", + "dev": true, + "requires": { + "remark": "^13.0.0", + "unist-util-find-all-after": "^3.0.2" + } + }, + "@types/mdast": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", + "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/minimist": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", + "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", + "dev": true + }, + "ajv": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.3.0.tgz", + "integrity": "sha512-RYE7B5An83d7eWnDR8kbdaIFqmKCNsP16ay1hDbJEU+sa0e3H9SebskCt0Uufem6cfAVu7Col6ubcn/W+Sm8/Q==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, + "balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + } + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caniuse-lite": { + "version": "1.0.30001228", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", + "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==", + "dev": true + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true + }, + "clone-regexp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "dev": true, + "requires": { + "is-regexp": "^2.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "electron-to-chromium": { + "version": "1.3.727", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz", + "integrity": "sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "execall": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", + "dev": true, + "requires": { + "clone-regexp": "^2.1.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true + }, + "gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "known-css-properties": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz", + "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==", + "dev": true + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "map-obj": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", + "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", + "dev": true + }, + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true + }, + "mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "mdast-util-to-markdown": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + } + }, + "mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "dev": true + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "dev": true + }, + "normalize-package-data": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", + "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "resolve": "^1.20.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-selector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", + "dev": true + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-html": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", + "dev": true, + "requires": { + "htmlparser2": "^3.10.0" + } + }, + "postcss-less": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", + "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "dev": true + }, + "postcss-safe-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", + "dev": true, + "requires": { + "postcss": "^7.0.26" + } + }, + "postcss-sass": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", + "dev": true, + "requires": { + "gonzales-pe": "^4.3.0", + "postcss": "^7.0.21" + } + }, + "postcss-scss": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", + "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "dev": true, + "requires": { + "postcss": "^7.0.6" + } + }, + "postcss-selector-parser": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz", + "integrity": "sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-syntax": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", + "dev": true, + "requires": {} + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "remark": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", + "dev": true, + "requires": { + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" + } + }, + "remark-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "dev": true, + "requires": { + "mdast-util-from-markdown": "^0.8.0" + } + }, + "remark-stringify": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", + "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", + "dev": true, + "requires": { + "mdast-util-to-markdown": "^0.6.0" + } + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "specificity": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "dev": true + }, + "stylelint": { + "version": "13.13.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.13.1.tgz", + "integrity": "sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==", + "dev": true, + "requires": { + "@stylelint/postcss-css-in-js": "^0.37.2", + "@stylelint/postcss-markdown": "^0.36.2", + "autoprefixer": "^9.8.6", + "balanced-match": "^2.0.0", + "chalk": "^4.1.1", + "cosmiconfig": "^7.0.0", + "debug": "^4.3.1", + "execall": "^2.0.0", + "fast-glob": "^3.2.5", + "fastest-levenshtein": "^1.0.12", + "file-entry-cache": "^6.0.1", + "get-stdin": "^8.0.0", + "global-modules": "^2.0.0", + "globby": "^11.0.3", + "globjoin": "^0.1.4", + "html-tags": "^3.1.0", + "ignore": "^5.1.8", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "known-css-properties": "^0.21.0", + "lodash": "^4.17.21", + "log-symbols": "^4.1.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.4", + "normalize-selector": "^0.2.0", + "postcss": "^7.0.35", + "postcss-html": "^0.36.0", + "postcss-less": "^3.1.4", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^4.0.2", + "postcss-sass": "^0.4.4", + "postcss-scss": "^2.1.1", + "postcss-selector-parser": "^6.0.5", + "postcss-syntax": "^0.36.2", + "postcss-value-parser": "^4.1.0", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "specificity": "^0.4.1", + "string-width": "^4.2.2", + "strip-ansi": "^6.0.0", + "style-search": "^0.1.0", + "sugarss": "^2.0.0", + "svg-tags": "^1.0.0", + "table": "^6.6.0", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^3.0.3" + } + }, + "stylelint-config-recommended": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-4.0.0.tgz", + "integrity": "sha512-sgna89Ng+25Hr9kmmaIxpGWt2LStVm1xf1807PdcWasiPDaOTkOHRL61sINw0twky7QMzafCGToGDnHT/kTHtQ==", + "dev": true, + "requires": {} + }, + "stylelint-config-standard": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-21.0.0.tgz", + "integrity": "sha512-Yf6mx5oYEbQQJxWuW7X3t1gcxqbUx52qC9SMS3saC2ruOVYEyqmr5zSW6k3wXflDjjFrPhar3kp68ugRopmlzg==", + "dev": true, + "requires": { + "stylelint-config-recommended": "^4.0.0" + } + }, + "stylelint-csstree-validator": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/stylelint-csstree-validator/-/stylelint-csstree-validator-1.9.0.tgz", + "integrity": "sha512-fVbtWDEWzux/bZSPBk9tD/bvyc8bSmb52BvUDjcduOzXqKqOyFHUvFayVr9ic88l8KJEVV0Ujab9ah5oTdX4Uw==", + "dev": true, + "requires": { + "css-tree": "^1.0.0" + } + }, + "stylelint-scss": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.19.0.tgz", + "integrity": "sha512-Ic5bsmpS4wVucOw44doC1Yi9f5qbeVL4wPFiEOaUElgsOuLEN6Ofn/krKI8BeNL2gAn53Zu+IcVV4E345r6rBw==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "sugarss": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "table": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.0.tgz", + "integrity": "sha512-SAM+5p6V99gYiiy2gT5ArdzgM1dLDed0nkrWmG6Fry/bUS/m9x83BwpJUOf1Qj/x2qJd+thL6IkIx7qPGRxqBw==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "trim-newlines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", + "dev": true + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "unified": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz", + "integrity": "sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + } + } + }, + "unist-util-find-all-after": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", + "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", + "dev": true, + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "requires": { + "@types/unist": "^2.0.2" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs-parser": { + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "dev": true + }, + "zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true + } + } +} diff --git a/package.json b/package.json index 0cb8e1ac37..4c539deb64 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,10 @@ { "name": "ror_social_scaffold", "private": true, - "dependencies": {}, "devDependencies": { - "stylelint": "^13.3.3", - "stylelint-config-standard": "^20.0.0", + "stylelint": "^13.13.1", + "stylelint-config-standard": "^21.0.0", "stylelint-csstree-validator": "^1.9.0", - "stylelint-scss": "^3.17.2" + "stylelint-scss": "^3.19.0" } } From 6372fb3660b4b256353d9bc2578fcdedcda9d95f Mon Sep 17 00:00:00 2001 From: Shaher-11 Date: Wed, 12 May 2021 09:27:44 +0200 Subject: [PATCH 03/31] Update ERD --- docs/Database ER diagram (crow's foot).png | Bin 23593 -> 24610 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/Database ER diagram (crow's foot).png b/docs/Database ER diagram (crow's foot).png index 6e5cab503e1c653a71f88474687e7b8be80b415f..23288adc1cefc714cf62b0d9866678865514cdfa 100644 GIT binary patch literal 24610 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 E50$IrWB>pF literal 23593 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 From 1d588196520a4dc241a6e1753f02ad2da7531ced Mon Sep 17 00:00:00 2001 From: Niko Escobal Date: Fri, 14 May 2021 18:17:30 +0800 Subject: [PATCH 04/31] Create friendship model --- Gemfile | 1 - Gemfile.lock | 5 +---- app/models/friendship.rb | 4 ++++ db/migrate/20210514101622_create_friendships.rb | 11 +++++++++++ 4 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 app/models/friendship.rb create mode 100644 db/migrate/20210514101622_create_friendships.rb diff --git a/Gemfile b/Gemfile index 67b156b339..2d06e7d6d1 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,6 @@ source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } -ruby '2.7.0' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.2.4' diff --git a/Gemfile.lock b/Gemfile.lock index 0db42aea73..5ef979f0a2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -238,8 +238,5 @@ DEPENDENCIES uglifier (>= 1.3.0) web-console (>= 3.3.0) -RUBY VERSION - ruby 2.7.0p0 - BUNDLED WITH - 2.2.4 + 2.2.16 diff --git a/app/models/friendship.rb b/app/models/friendship.rb new file mode 100644 index 0000000000..5db5e0cfc8 --- /dev/null +++ b/app/models/friendship.rb @@ -0,0 +1,4 @@ +class Friendship < ApplicationRecord + belongs_to :user + belongs_to :friend +end diff --git a/db/migrate/20210514101622_create_friendships.rb b/db/migrate/20210514101622_create_friendships.rb new file mode 100644 index 0000000000..18e88fb66a --- /dev/null +++ b/db/migrate/20210514101622_create_friendships.rb @@ -0,0 +1,11 @@ +class CreateFriendships < ActiveRecord::Migration[5.2] + def change + create_table :friendships do |t| + t.references :user, foreign_key: true + t.references :friend, foreign_key: true + t.boolean :confirmed + + t.timestamps + end + end +end From c1a5632aed1451acade147b5ff0aae39804b2ef1 Mon Sep 17 00:00:00 2001 From: Shaher-11 Date: Fri, 14 May 2021 12:25:22 +0200 Subject: [PATCH 05/31] Setup association for friendship model --- db/migrate/20210514101622_create_friendships.rb | 5 +++-- db/schema.rb | 14 +++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/db/migrate/20210514101622_create_friendships.rb b/db/migrate/20210514101622_create_friendships.rb index 18e88fb66a..1f7b573c7e 100644 --- a/db/migrate/20210514101622_create_friendships.rb +++ b/db/migrate/20210514101622_create_friendships.rb @@ -1,11 +1,12 @@ class CreateFriendships < ActiveRecord::Migration[5.2] def change create_table :friendships do |t| - t.references :user, foreign_key: true - t.references :friend, foreign_key: true + t.references :user, index: true, foreign_key: true + t.references :friend, index: true t.boolean :confirmed t.timestamps end + add_foreign_key :friendships, :users, column: :friend_id end end diff --git a/db/schema.rb b/db/schema.rb index 30ee9f3fad..ac9a771f99 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_02_04_165841) do +ActiveRecord::Schema.define(version: 2021_05_14_101622) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -25,6 +25,16 @@ t.index ["user_id"], name: "index_comments_on_user_id" end + create_table "friendships", force: :cascade do |t| + t.bigint "user_id" + t.bigint "friend_id" + t.boolean "confirmed" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["friend_id"], name: "index_friendships_on_friend_id" + t.index ["user_id"], name: "index_friendships_on_user_id" + end + create_table "likes", force: :cascade do |t| t.integer "post_id" t.integer "user_id" @@ -54,4 +64,6 @@ t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end + add_foreign_key "friendships", "users" + add_foreign_key "friendships", "users", column: "friend_id" end From b2fafc652d0d952a820714ccded1fbe0472fdc5f Mon Sep 17 00:00:00 2001 From: Shaher-11 Date: Fri, 14 May 2021 12:26:13 +0200 Subject: [PATCH 06/31] Fix linters --- Gemfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Gemfile b/Gemfile index 2d06e7d6d1..a8ae04ca3a 100644 --- a/Gemfile +++ b/Gemfile @@ -1,7 +1,6 @@ source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } - # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.2.4' # Use postgresql as the database for Active Record From 6fb5faa06d57f26cd557cba5dad22271a78a5e7a Mon Sep 17 00:00:00 2001 From: Shaher-11 Date: Fri, 14 May 2021 17:05:49 +0200 Subject: [PATCH 07/31] Set the complete association for friendhsip model --- app/models/friendship.rb | 2 +- app/models/user.rb | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/app/models/friendship.rb b/app/models/friendship.rb index 5db5e0cfc8..b334b963e5 100644 --- a/app/models/friendship.rb +++ b/app/models/friendship.rb @@ -1,4 +1,4 @@ class Friendship < ApplicationRecord belongs_to :user - belongs_to :friend + belongs_to :friend, class_name: 'User' end diff --git a/app/models/user.rb b/app/models/user.rb index e97f1363c0..1c390fcab9 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -9,4 +9,39 @@ class User < ApplicationRecord has_many :posts has_many :comments, dependent: :destroy has_many :likes, dependent: :destroy + + has_many :friendships + has_many :inverse_friendships, class_name: 'Friendship', foreign_key: 'friend_id' + + has_many :confirmed_friendships, -> { where confirmed: true }, class_name: 'Friendship' + has_many :friends, through: :confirmed_friendships + + has_many :pending_friendships, -> { where confirmed: false }, class_name: 'Friendship', foreign_key: 'user_id' + has_many :pending_friends, through: :pending_friendships, source: :friend + + has_many :inverted_friendships, -> { where confirmed: false }, class_name: 'Friendship', foreign_key: 'friend_id' + has_many :friend_requests, through: :inverted_friendships, source: :user + + def friends_and_own_posts + Post.where(user: (friends << self)) + end + + def confirm_friend(user) + friendship = inverted_friendships.find { |frship| frship.user_id == user.id } + friendship.confirmed = true + friendship.save + Friendship.create!(friend_id: friendship.user_id, nuser_id: id, confirmed: true) + end + + def pending_friends + friendships.map { |friendship| friendship.friend unless friendship.confirmed }.compact + end + + def friend_requests + inverse_friendships.map { |friendship| friendship.user unless friendship.confirmed }.compact + end + + def pending?(user) + pending_friends.include?(user) || friend_requests.include?(user) + end end From 88774f8b34dd23bc7487becf8040e4f150da0f89 Mon Sep 17 00:00:00 2001 From: Shaher-11 Date: Fri, 14 May 2021 17:29:09 +0200 Subject: [PATCH 08/31] Add tests for friendhsip model --- Gemfile | 2 + Gemfile.lock | 25 +++++++- spec/models/friendship_spec.rb | 26 +++++++++ spec/rails_helper.rb | 65 +++++++++++++++++++++ spec/spec_helper.rb | 102 ++++++++++++++++----------------- 5 files changed, 166 insertions(+), 54 deletions(-) create mode 100644 spec/models/friendship_spec.rb create mode 100644 spec/rails_helper.rb diff --git a/Gemfile b/Gemfile index a8ae04ca3a..bd52fce651 100644 --- a/Gemfile +++ b/Gemfile @@ -40,10 +40,12 @@ gem 'devise' group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: %i[mri mingw x64_mingw] + gem "rspec-rails" end group :test do gem 'rspec' + gem "capybara" end group :development do diff --git a/Gemfile.lock b/Gemfile.lock index 5ef979f0a2..00caae9111 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -42,6 +42,8 @@ GEM i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) arel (9.0.0) ast (2.4.2) bcrypt (3.1.16) @@ -50,6 +52,14 @@ GEM msgpack (~> 1.0) builder (3.2.4) byebug (11.1.3) + capybara (3.35.3) + addressable + mini_mime (>= 0.1.3) + nokogiri (~> 1.8) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + regexp_parser (>= 1.5, < 3.0) + xpath (~> 3.2) coffee-rails (4.2.2) coffee-script (>= 2.2.0) railties (>= 4.0.0) @@ -103,6 +113,7 @@ GEM ast (~> 2.4.1) pg (1.2.3) pg (1.2.3-x64-mingw32) + public_suffix (4.0.6) puma (3.12.6) racc (1.5.2) rack (2.2.3) @@ -154,6 +165,14 @@ GEM rspec-mocks (3.10.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.10.0) + rspec-rails (5.0.1) + actionpack (>= 5.2) + activesupport (>= 5.2) + railties (>= 5.2) + rspec-core (~> 3.10) + rspec-expectations (~> 3.10) + rspec-mocks (~> 3.10) + rspec-support (~> 3.10) rspec-support (3.10.2) rubocop (1.14.0) parallel (~> 1.10) @@ -198,8 +217,6 @@ GEM turbolinks-source (5.2.0) tzinfo (1.2.9) thread_safe (~> 0.1) - tzinfo-data (1.2021.1) - tzinfo (>= 1.0.0) uglifier (4.2.0) execjs (>= 0.3.0, < 3) unicode-display_width (2.0.0) @@ -213,6 +230,8 @@ GEM websocket-driver (0.7.3) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) + xpath (3.2.0) + nokogiri (~> 1.8) PLATFORMS ruby @@ -221,6 +240,7 @@ PLATFORMS DEPENDENCIES bootsnap (>= 1.1.0) byebug + capybara coffee-rails (~> 4.2) devise jbuilder (~> 2.5) @@ -229,6 +249,7 @@ DEPENDENCIES puma (~> 3.12) rails (~> 5.2.4) rspec + rspec-rails rubocop sass-rails (~> 5.0) spring diff --git a/spec/models/friendship_spec.rb b/spec/models/friendship_spec.rb new file mode 100644 index 0000000000..f36fa4b6e6 --- /dev/null +++ b/spec/models/friendship_spec.rb @@ -0,0 +1,26 @@ +require 'rails_helper' + +RSpec.describe 'Friendship', type: :model do + let(:user1) { User.create(name: 'user1', email: 'user1@example.com', password: 'password') } + let(:user2) { User.create(name: 'user2', email: 'user22@example.com', password: 'password') } + let(:friendship) { Friendship.create(user_id: user1.id, friend_id: user2.id, confirmed: false) } + let(:inv_friendship) { Friendship.create(user_id: '', friend_id: user1.id, confirmed: false) } + let(:user) { Friendship.reflect_on_association(:user).macro } + let(:friend) { Friendship.reflect_on_association(:friend).macro } + + it 'checks if the friendship it done succefully' do + expect(friendship).to be_valid + end + + it 'check for invaild friendship' do + expect(inv_friendship).to_not be_valid + end + + it 'checks if friendship belongs_to the user' do + expect(user).to eq(:belongs_to) + end + + it 'checks if friendship belongs_to the friend' do + expect(friend).to eq(:belongs_to) + end +end \ No newline at end of file diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb new file mode 100644 index 0000000000..d65cf6bce2 --- /dev/null +++ b/spec/rails_helper.rb @@ -0,0 +1,65 @@ +# This file is copied to spec/ when you run 'rails generate rspec:install' +require "capybara/rspec" +require 'spec_helper' +ENV['RAILS_ENV'] ||= 'test' +require File.expand_path('../config/environment', __dir__) +# Prevent database truncation if the environment is production +abort("The Rails environment is running in production mode!") if Rails.env.production? +require 'rspec/rails' +# Add additional requires below this line. Rails is not loaded until this point! + +# Requires supporting ruby files with custom matchers and macros, etc, in +# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are +# run as spec files by default. This means that files in spec/support that end +# in _spec.rb will both be required and run as specs, causing the specs to be +# run twice. It is recommended that you do not name files matching this glob to +# end with _spec.rb. You can configure this pattern with the --pattern +# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. +# +# The following line is provided for convenience purposes. It has the downside +# of increasing the boot-up time by auto-requiring all files in the support +# directory. Alternatively, in the individual `*_spec.rb` files, manually +# require only the support files necessary. +# +# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } + +# Checks for pending migrations and applies them before tests are run. +# If you are not using ActiveRecord, you can remove these lines. +begin + ActiveRecord::Migration.maintain_test_schema! +rescue ActiveRecord::PendingMigrationError => e + puts e.to_s.strip + exit 1 +end +RSpec.configure do |config| + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_path = "#{::Rails.root}/spec/fixtures" + + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = true + + # You can uncomment this line to turn off ActiveRecord support entirely. + # config.use_active_record = false + + # RSpec Rails can automatically mix in different behaviours to your tests + # based on their file location, for example enabling you to call `get` and + # `post` in specs under `spec/controllers`. + # + # You can disable this behaviour by removing the line below, and instead + # explicitly tag your specs with their type, e.g.: + # + # RSpec.describe UsersController, type: :controller do + # # ... + # end + # + # The different available types are documented in the features, such as in + # https://relishapp.com/rspec/rspec-rails/docs + config.infer_spec_type_from_file_location! + + # Filter lines from Rails gems in backtraces. + config.filter_rails_from_backtrace! + # arbitrary gems may also be filtered via: + # config.filter_gems_from_backtrace("gem name") +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index a403ac5360..ce33d66df6 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,4 +1,4 @@ -# This file was generated by the `rspec --init` command. Conventionally, all +# This file was generated by the `rails generate rspec:install` command. Conventionally, all # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. # The generated `.rspec` file contains `--require spec_helper` which will cause # this file to always be loaded, without a need to explicitly require it in any @@ -44,55 +44,53 @@ # triggering implicit auto-inclusion in groups with matching metadata. config.shared_context_metadata_behavior = :apply_to_host_groups - # The settings below are suggested to provide a good initial experience - # with RSpec, but feel free to customize to your heart's content. - # # This allows you to limit a spec run to individual examples or groups - # # you care about by tagging them with `:focus` metadata. When nothing - # # is tagged with `:focus`, all examples get run. RSpec also provides - # # aliases for `it`, `describe`, and `context` that include `:focus` - # # metadata: `fit`, `fdescribe` and `fcontext`, respectively. - # config.filter_run_when_matching :focus - # - # # Allows RSpec to persist some state between runs in order to support - # # the `--only-failures` and `--next-failure` CLI options. We recommend - # # you configure your source control system to ignore this file. - # config.example_status_persistence_file_path = "spec/examples.txt" - # - # # Limits the available syntax to the non-monkey patched syntax that is - # # recommended. For more details, see: - # # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ - # # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ - # # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode - # config.disable_monkey_patching! - # - # # This setting enables warnings. It's recommended, but in some cases may - # # be too noisy due to issues in dependencies. - # config.warnings = true - # - # # Many RSpec users commonly either run the entire suite or an individual - # # file, and it's useful to allow more verbose output when running an - # # individual spec file. - # if config.files_to_run.one? - # # Use the documentation formatter for detailed output, - # # unless a formatter has already been configured - # # (e.g. via a command-line flag). - # config.default_formatter = "doc" - # end - # - # # Print the 10 slowest examples and example groups at the - # # end of the spec run, to help surface which specs are running - # # particularly slow. - # config.profile_examples = 10 - # - # # Run specs in random order to surface order dependencies. If you find an - # # order dependency and want to debug it, you can fix the order by providing - # # the seed, which is printed after each run. - # # --seed 1234 - # config.order = :random - # - # # Seed global randomization in this process using the `--seed` CLI option. - # # Setting this allows you to use `--seed` to deterministically reproduce - # # test failures related to randomization by passing the same `--seed` value - # # as the one that triggered the failure. - # Kernel.srand config.seed +# The settings below are suggested to provide a good initial experience +# with RSpec, but feel free to customize to your heart's content. +=begin + # This allows you to limit a spec run to individual examples or groups + # you care about by tagging them with `:focus` metadata. When nothing + # is tagged with `:focus`, all examples get run. RSpec also provides + # aliases for `it`, `describe`, and `context` that include `:focus` + # metadata: `fit`, `fdescribe` and `fcontext`, respectively. + config.filter_run_when_matching :focus + + # Allows RSpec to persist some state between runs in order to support + # the `--only-failures` and `--next-failure` CLI options. We recommend + # you configure your source control system to ignore this file. + config.example_status_persistence_file_path = "spec/examples.txt" + + # Limits the available syntax to the non-monkey patched syntax that is + # recommended. For more details, see: + # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ + # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ + # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode + config.disable_monkey_patching! + + # Many RSpec users commonly either run the entire suite or an individual + # file, and it's useful to allow more verbose output when running an + # individual spec file. + if config.files_to_run.one? + # Use the documentation formatter for detailed output, + # unless a formatter has already been configured + # (e.g. via a command-line flag). + config.default_formatter = "doc" + end + + # Print the 10 slowest examples and example groups at the + # end of the spec run, to help surface which specs are running + # particularly slow. + config.profile_examples = 10 + + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + config.order = :random + + # Seed global randomization in this process using the `--seed` CLI option. + # Setting this allows you to use `--seed` to deterministically reproduce + # test failures related to randomization by passing the same `--seed` value + # as the one that triggered the failure. + Kernel.srand config.seed +=end end From da1be4c178e6958f5511fb1d91ce7ece0044b812 Mon Sep 17 00:00:00 2001 From: Shaher-11 Date: Fri, 14 May 2021 17:40:58 +0200 Subject: [PATCH 09/31] Add tests for user model --- Gemfile | 4 +- spec/models/friendship_spec.rb | 2 +- spec/models/user_spec.rb | 40 ++++++++++++++ spec/rails_helper.rb | 4 +- spec/spec_helper.rb | 96 +++++++++++++++++----------------- 5 files changed, 92 insertions(+), 54 deletions(-) create mode 100644 spec/models/user_spec.rb diff --git a/Gemfile b/Gemfile index bd52fce651..3ffc9459a3 100644 --- a/Gemfile +++ b/Gemfile @@ -40,12 +40,12 @@ gem 'devise' group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: %i[mri mingw x64_mingw] - gem "rspec-rails" + gem 'rspec-rails' end group :test do + gem 'capybara' gem 'rspec' - gem "capybara" end group :development do diff --git a/spec/models/friendship_spec.rb b/spec/models/friendship_spec.rb index f36fa4b6e6..a9fc928d43 100644 --- a/spec/models/friendship_spec.rb +++ b/spec/models/friendship_spec.rb @@ -23,4 +23,4 @@ it 'checks if friendship belongs_to the friend' do expect(friend).to eq(:belongs_to) end -end \ No newline at end of file +end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb new file mode 100644 index 0000000000..63c73203b1 --- /dev/null +++ b/spec/models/user_spec.rb @@ -0,0 +1,40 @@ +require 'rails_helper' + +RSpec.describe User, type: :model do + let(:user) { User.create(name: 'test', email: 'test@example.com', password: 'password') } + let(:invalid_user) { User.create(name: '', email: 'test@example.com', password: 'password') } + let(:posts) { User.reflect_on_association(:posts).macro } + let(:comments) { User.reflect_on_association(:comments).macro } + let(:likes) { User.reflect_on_association(:likes).macro } + let(:friendships) { User.reflect_on_association(:friendships).macro } + let(:inverse_friendships) { User.reflect_on_association(:inverse_friendships).macro } + + it 'checks for the user validity' do + @user = User.create(name: 'test', email: 'test@example.com', password: 'password') + expect(@user).to be_valid + end + + it 'user name should not be empty' do + expect(invalid_user).to_not be_valid + end + + it 'checks for correct post association' do + expect(posts).to eq(:has_many) + end + + it 'check for the correct comment association' do + expect(comments).to eq(:has_many) + end + + it 'check for the correct likes association' do + expect(likes).to eq(:has_many) + end + + it 'check for the correct friendship association' do + expect(friendships).to eq(:has_many) + end + + it 'check for the correct inverse_friendships association' do + expect(inverse_friendships).to eq(:has_many) + end +end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index d65cf6bce2..509aa85b33 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -1,10 +1,10 @@ # This file is copied to spec/ when you run 'rails generate rspec:install' -require "capybara/rspec" +require 'capybara/rspec' require 'spec_helper' ENV['RAILS_ENV'] ||= 'test' require File.expand_path('../config/environment', __dir__) # Prevent database truncation if the environment is production -abort("The Rails environment is running in production mode!") if Rails.env.production? +abort('The Rails environment is running in production mode!') if Rails.env.production? require 'rspec/rails' # Add additional requires below this line. Rails is not loaded until this point! diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index ce33d66df6..15a38725be 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -44,53 +44,51 @@ # triggering implicit auto-inclusion in groups with matching metadata. config.shared_context_metadata_behavior = :apply_to_host_groups -# The settings below are suggested to provide a good initial experience -# with RSpec, but feel free to customize to your heart's content. -=begin - # This allows you to limit a spec run to individual examples or groups - # you care about by tagging them with `:focus` metadata. When nothing - # is tagged with `:focus`, all examples get run. RSpec also provides - # aliases for `it`, `describe`, and `context` that include `:focus` - # metadata: `fit`, `fdescribe` and `fcontext`, respectively. - config.filter_run_when_matching :focus - - # Allows RSpec to persist some state between runs in order to support - # the `--only-failures` and `--next-failure` CLI options. We recommend - # you configure your source control system to ignore this file. - config.example_status_persistence_file_path = "spec/examples.txt" - - # Limits the available syntax to the non-monkey patched syntax that is - # recommended. For more details, see: - # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ - # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ - # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode - config.disable_monkey_patching! - - # Many RSpec users commonly either run the entire suite or an individual - # file, and it's useful to allow more verbose output when running an - # individual spec file. - if config.files_to_run.one? - # Use the documentation formatter for detailed output, - # unless a formatter has already been configured - # (e.g. via a command-line flag). - config.default_formatter = "doc" - end - - # Print the 10 slowest examples and example groups at the - # end of the spec run, to help surface which specs are running - # particularly slow. - config.profile_examples = 10 - - # Run specs in random order to surface order dependencies. If you find an - # order dependency and want to debug it, you can fix the order by providing - # the seed, which is printed after each run. - # --seed 1234 - config.order = :random - - # Seed global randomization in this process using the `--seed` CLI option. - # Setting this allows you to use `--seed` to deterministically reproduce - # test failures related to randomization by passing the same `--seed` value - # as the one that triggered the failure. - Kernel.srand config.seed -=end + # The settings below are suggested to provide a good initial experience + # with RSpec, but feel free to customize to your heart's content. + # # This allows you to limit a spec run to individual examples or groups + # # you care about by tagging them with `:focus` metadata. When nothing + # # is tagged with `:focus`, all examples get run. RSpec also provides + # # aliases for `it`, `describe`, and `context` that include `:focus` + # # metadata: `fit`, `fdescribe` and `fcontext`, respectively. + # config.filter_run_when_matching :focus + # + # # Allows RSpec to persist some state between runs in order to support + # # the `--only-failures` and `--next-failure` CLI options. We recommend + # # you configure your source control system to ignore this file. + # config.example_status_persistence_file_path = "spec/examples.txt" + # + # # Limits the available syntax to the non-monkey patched syntax that is + # # recommended. For more details, see: + # # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ + # # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ + # # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode + # config.disable_monkey_patching! + # + # # Many RSpec users commonly either run the entire suite or an individual + # # file, and it's useful to allow more verbose output when running an + # # individual spec file. + # if config.files_to_run.one? + # # Use the documentation formatter for detailed output, + # # unless a formatter has already been configured + # # (e.g. via a command-line flag). + # config.default_formatter = "doc" + # end + # + # # Print the 10 slowest examples and example groups at the + # # end of the spec run, to help surface which specs are running + # # particularly slow. + # config.profile_examples = 10 + # + # # Run specs in random order to surface order dependencies. If you find an + # # order dependency and want to debug it, you can fix the order by providing + # # the seed, which is printed after each run. + # # --seed 1234 + # config.order = :random + # + # # Seed global randomization in this process using the `--seed` CLI option. + # # Setting this allows you to use `--seed` to deterministically reproduce + # # test failures related to randomization by passing the same `--seed` value + # # as the one that triggered the failure. + # Kernel.srand config.seed end From a6ad04d65506fb4db5a53c373483e03c746cca01 Mon Sep 17 00:00:00 2001 From: Shaher-11 Date: Fri, 14 May 2021 17:50:24 +0200 Subject: [PATCH 10/31] Add the integration tests --- config/routes.rb | 1 + spec/capybara/friendship_spec.rb | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 spec/capybara/friendship_spec.rb diff --git a/config/routes.rb b/config/routes.rb index d34298b198..60f8745ab2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -5,6 +5,7 @@ devise_for :users resources :users, only: [:index, :show] + resources :posts, only: [:index, :create] do resources :comments, only: [:create] resources :likes, only: [:create, :destroy] diff --git a/spec/capybara/friendship_spec.rb b/spec/capybara/friendship_spec.rb new file mode 100644 index 0000000000..7160ad790e --- /dev/null +++ b/spec/capybara/friendship_spec.rb @@ -0,0 +1,29 @@ +require 'rails_helper' + +RSpec.feature 'Friendships', type: :feature do + before :each do + @user1 = User.create!(name: 'user1', email: 'user1@example.com', password: 'password') + @user2 = User.create!(name: 'user2', email: 'user2@example.com', password: 'password') + end + + scenario 'fisrt user logs in and sends invitation then the second user accepts it' do + visit new_user_session_path + fill_in 'Email', with: 'user1@example.com' + fill_in 'Password', with: 'password' + click_button 'Log in' + expect(page).to have_content('Recent posts') + visit users_path + click_button 'send invitation' + click_link 'Sign out' + + visit new_user_session_path + fill_in 'Email', with: 'user2@example.com' + fill_in 'Password', with: 'password' + click_button 'Log in' + expect(page).to have_content('Recent posts') + visit users_path + expect(page).to have_selector(:link_or_button, 'Accept') + expect(page).to have_selector(:link_or_button, 'Decline') + click_button 'Accept' + end +end From a4ac04c8f905306355ea5476050a9f32c0cd76fa Mon Sep 17 00:00:00 2001 From: Niko Escobal Date: Mon, 17 May 2021 22:32:49 +0800 Subject: [PATCH 11/31] Add accept and decline methods. --- app/controllers/users_controller.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index b0350d70e4..44616823fe 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -9,4 +9,17 @@ def show @user = User.find(params[:id]) @posts = @user.posts.ordered_by_most_recent end + + def accept + current_user.confirm_friend(@user) + redirect_to request.referrer, notice: "Confirmed friend request" + end + + def decline + user = user.find(params[:data]) + friendship = @user.inverse_friendshiips.find { |f| f.user == user } + friendship.destroy + redirect_to request.referrer, notice: "Declined friend request" + end + end From c25a643ca1f2123f1ff82b8b7eacf5a46b1a2a8b Mon Sep 17 00:00:00 2001 From: Niko Escobal Date: Mon, 17 May 2021 22:46:53 +0800 Subject: [PATCH 12/31] Add create_friendship and set_user methods, add before_action restrictions. --- app/controllers/users_controller.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 44616823fe..1c9d4aa9e8 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,5 +1,6 @@ class UsersController < ApplicationController before_action :authenticate_user! + before_action :set_user, only: %i[show create_friendship accept decline] def index @users = User.all @@ -16,10 +17,18 @@ def accept end def decline - user = user.find(params[:data]) + user = User.find(params[:data]) friendship = @user.inverse_friendshiips.find { |f| f.user == user } friendship.destroy redirect_to request.referrer, notice: "Declined friend request" end + def create_friendship + current_user.friendships.create(user_id: current_user.id, friend_id: @user.id, confirmed:false) + redirect_to request.referrer, notice: "Sent friend request" + end + + def set_user + @user = User.find(params[:id]) + end end From 996ce895cc5940b1c82b2868b811f7388701c149 Mon Sep 17 00:00:00 2001 From: Shaher-11 Date: Mon, 17 May 2021 17:10:58 +0200 Subject: [PATCH 13/31] Add links for friendship invitaions --- app/views/users/_user.html.erb | 1 + app/views/users/show.html.erb | 2 ++ 2 files changed, 3 insertions(+) diff --git a/app/views/users/_user.html.erb b/app/views/users/_user.html.erb index e03c4beb3f..ca5a472320 100644 --- a/app/views/users/_user.html.erb +++ b/app/views/users/_user.html.erb @@ -2,5 +2,6 @@ Name: <%= user.name %> <%= link_to 'See Profile', user_path(user), class: 'profile-link' %> + <%= link_to 'Invite to friendship', user_path(user), class: 'profile-link' %> \ No newline at end of file diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index e9919805de..92c46e37b7 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -1,5 +1,7 @@

<%= "Name: #{@user.name}" %>

+ <%= link_to 'Invite to friendship', class: 'profile-link' %> +

Recent posts:

    From db3aa65da5706fb5874df38399240fd631b642e4 Mon Sep 17 00:00:00 2001 From: Shaher-11 Date: Mon, 17 May 2021 20:06:36 +0200 Subject: [PATCH 14/31] Add the helper methods for for the buttons --- app/controllers/users_controller.rb | 10 +++--- app/helpers/application_helper.rb | 47 +++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 1c9d4aa9e8..c7de706e43 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -13,19 +13,19 @@ def show def accept current_user.confirm_friend(@user) - redirect_to request.referrer, notice: "Confirmed friend request" + redirect_to request.referrer, notice: 'Confirmed friend request' end def decline user = User.find(params[:data]) - friendship = @user.inverse_friendshiips.find { |f| f.user == user } + friendship = @user.inverse_friendshiips.find { |f| f.user == user } friendship.destroy - redirect_to request.referrer, notice: "Declined friend request" + redirect_to request.referrer, notice: 'Declined friend request' end def create_friendship - current_user.friendships.create(user_id: current_user.id, friend_id: @user.id, confirmed:false) - redirect_to request.referrer, notice: "Sent friend request" + current_user.friendships.create(user_id: current_user.id, friend_id: @user.id, confirmed: false) + redirect_to request.referrer, notice: 'Sent friend request' end def set_user diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index ea52901dfe..ccbee7fbe3 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -15,4 +15,51 @@ def like_or_dislike_btn(post) link_to('Like!', post_likes_path(post_id: post.id), method: :post) end end + + def friends_names(user) + result = 'There are no friends' + unless user.friends.empty? + result = '' + user.friends.each do |friend| + result += friend.name.to_s + end + end + result.html_safe + end + + def pending_requests(user) + result = 'There are no friend requests' + unless user.friend_requests.empty? + result = '' + user.friend_requests.each do |request| + result += request.name.to_s + if user == current_user + result += (button_to 'Accept', accept_user_path(request.id), method: :get).to_s + result += (button_to 'Decline', decline_user_path, method: :get, params: { data: request.id }).to_s + end + result += ' ' + end + end + result.html_safe + end + + def accept_decline_buttons(user) + result = '' + current_user.friend_requests.each do |request| + if requster == user + result += (button_to 'Accept', accept_user_path(request.id), method: :get).to_s + result += (button_to 'Decline', decline_user_path(request.id), method: :get).to_s + end + end + result.html_safe + end + + def invitation_button(user) + result = '' + if !user.friends.include?(current_user) && user != current_user && !user.pending?(current_user) + result += (button_to 'Invite to friendship', create_friendship_user_path(user.id), + method: :get).to_s + end + result.html_safe + end end From abf2468376abc71bb83e349f7751bd510b75e0d0 Mon Sep 17 00:00:00 2001 From: Niko Escobal Date: Wed, 19 May 2021 17:15:52 +0800 Subject: [PATCH 15/31] Set up routes for user controller actions. --- app/views/users/show.html.erb | 1 - config/routes.rb | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index 92c46e37b7..3e309d5814 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -1,6 +1,5 @@

    <%= "Name: #{@user.name}" %>

    - <%= link_to 'Invite to friendship', class: 'profile-link' %>

    Recent posts:

    diff --git a/config/routes.rb b/config/routes.rb index 60f8745ab2..25293c2ca7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -5,6 +5,14 @@ devise_for :users resources :users, only: [:index, :show] + + resources :users do + members do + get :create_friendship + get :accept + get :decline + end + end resources :posts, only: [:index, :create] do resources :comments, only: [:create] From 4ddfbe9a17d4fbf802655307997fcf5d041b23c4 Mon Sep 17 00:00:00 2001 From: Niko Escobal Date: Wed, 19 May 2021 17:17:05 +0800 Subject: [PATCH 16/31] Add validations to display friendship invitation --- app/views/users/show.html.erb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index 3e309d5814..4cff79e343 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -1,5 +1,10 @@

    <%= "Name: #{@user.name}" %>

    + <%= invitation_button(@user) %> + + <% if @user.friends.include?(current_user) %> +

    Friend

    + <% end %>

    Recent posts:

    From 0a07a1f302a6c435dec3f6206de2d1fc06241589 Mon Sep 17 00:00:00 2001 From: Niko Escobal Date: Wed, 19 May 2021 18:38:38 +0800 Subject: [PATCH 17/31] Add minor styling. --- Gemfile | 1 + app/assets/stylesheets/custom.scss | 9 ++++++++- app/helpers/application_helper.rb | 6 +++--- app/views/users/show.html.erb | 17 +++++++++++++++++ config/routes.rb | 2 +- 5 files changed, 30 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index 3ffc9459a3..3626a668d3 100644 --- a/Gemfile +++ b/Gemfile @@ -55,6 +55,7 @@ group :development do # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'rubocop' gem 'spring' + gem 'hirb' gem 'spring-watcher-listen', '~> 2.0.0' end diff --git a/app/assets/stylesheets/custom.scss b/app/assets/stylesheets/custom.scss index aa50459d37..e00327dfbc 100644 --- a/app/assets/stylesheets/custom.scss +++ b/app/assets/stylesheets/custom.scss @@ -294,10 +294,11 @@ form { .user-section { width: 100%; - margin-left: 16px; + margin-top: 50px; h2 { text-transform: capitalize; + padding: 10px 0; } .timeline { @@ -305,6 +306,7 @@ form { h3 { width: 100%; + padding: 10px 0; } justify-content: start; @@ -322,6 +324,10 @@ form { } } +.my-user { + background: red; +} + @media only screen and (min-width: 480px) { form { width: 60%; @@ -345,5 +351,6 @@ form { .users-section, .user-section { width: 50%; + margin-right: 350px; } } diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index ccbee7fbe3..c78edbe9ad 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -17,7 +17,7 @@ def like_or_dislike_btn(post) end def friends_names(user) - result = 'There are no friends' + result = 'You currently have:' unless user.friends.empty? result = '' user.friends.each do |friend| @@ -28,7 +28,7 @@ def friends_names(user) end def pending_requests(user) - result = 'There are no friend requests' + result = 'You have no friends. How about adopting a dog or a cat?' unless user.friend_requests.empty? result = '' user.friend_requests.each do |request| @@ -57,7 +57,7 @@ def accept_decline_buttons(user) def invitation_button(user) result = '' if !user.friends.include?(current_user) && user != current_user && !user.pending?(current_user) - result += (button_to 'Invite to friendship', create_friendship_user_path(user.id), + result += (button_to 'Add Friend', create_friendship_user_path(user.id), method: :get).to_s end result.html_safe diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index 4cff79e343..2db47002ea 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -6,10 +6,27 @@

    Friend

    <% end %> + <% if @user.inverse_friendships.find { |frd| frd.user_id == current_user.id && !frd.confirmed } %> +

    Pending Requests

    + <% end %> +

    Recent posts:

      <%= render @posts %>
    + + +
    +

    Displaying all friends:

    + <%= friends_names(@user) %> +
    +
    +
    +

    Pending friend requests:

    + <%= pending_requests(@user) %> +
    + +
    diff --git a/config/routes.rb b/config/routes.rb index 25293c2ca7..40366d5668 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -7,7 +7,7 @@ resources :users, only: [:index, :show] resources :users do - members do + member do get :create_friendship get :accept get :decline From ccd012d058823b424b63425662297ba964a3bbfb Mon Sep 17 00:00:00 2001 From: Shaher-11 Date: Wed, 19 May 2021 12:45:38 +0200 Subject: [PATCH 18/31] Add buttons to user partial --- Gemfile.lock | 2 ++ app/views/users/_user.html.erb | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 00caae9111..98e979068a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -82,6 +82,7 @@ GEM ffi (1.15.0-x64-mingw32) globalid (0.4.2) activesupport (>= 4.2.0) + hirb (0.7.3) i18n (1.8.10) concurrent-ruby (~> 1.0) jbuilder (2.11.2) @@ -243,6 +244,7 @@ DEPENDENCIES capybara coffee-rails (~> 4.2) devise + hirb jbuilder (~> 2.5) listen (>= 3.0.5, < 3.2) pg (>= 0.18, < 2.0) diff --git a/app/views/users/_user.html.erb b/app/views/users/_user.html.erb index ca5a472320..6850cd2e52 100644 --- a/app/views/users/_user.html.erb +++ b/app/views/users/_user.html.erb @@ -1,7 +1,8 @@
  • Name: <%= user.name %> - <%= link_to 'See Profile', user_path(user), class: 'profile-link' %> - <%= link_to 'Invite to friendship', user_path(user), class: 'profile-link' %> + <%= link_to user.name, user_path(user), class: 'profile-link' %> + <%= invitation_button(user) %> + <%= accept_decline_buttons(user) %>
  • \ No newline at end of file From 6ac6c67c377dc840ee3d1455fbfce15d39f266be Mon Sep 17 00:00:00 2001 From: Shaher-11 Date: Wed, 19 May 2021 12:47:30 +0200 Subject: [PATCH 19/31] Fix linters --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 3626a668d3..0c8d007659 100644 --- a/Gemfile +++ b/Gemfile @@ -53,9 +53,9 @@ group :development do gem 'listen', '>= 3.0.5', '< 3.2' gem 'web-console', '>= 3.3.0' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'hirb' gem 'rubocop' gem 'spring' - gem 'hirb' gem 'spring-watcher-listen', '~> 2.0.0' end From f8cc3b51bc6501d04cc6451129ff769769bfa8c4 Mon Sep 17 00:00:00 2001 From: Shaher-11 Date: Wed, 19 May 2021 17:45:54 +0200 Subject: [PATCH 20/31] Fix the tests as well the users friendship functionality --- app/helpers/application_helper.rb | 2 +- app/models/user.rb | 2 +- spec/capybara/friendship_spec.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index c78edbe9ad..c669da9ee4 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -46,7 +46,7 @@ def pending_requests(user) def accept_decline_buttons(user) result = '' current_user.friend_requests.each do |request| - if requster == user + if request == user result += (button_to 'Accept', accept_user_path(request.id), method: :get).to_s result += (button_to 'Decline', decline_user_path(request.id), method: :get).to_s end diff --git a/app/models/user.rb b/app/models/user.rb index 1c390fcab9..be9f6fa337 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -30,7 +30,7 @@ def confirm_friend(user) friendship = inverted_friendships.find { |frship| frship.user_id == user.id } friendship.confirmed = true friendship.save - Friendship.create!(friend_id: friendship.user_id, nuser_id: id, confirmed: true) + Friendship.create!(friend_id: friendship.user_id, user_id: id, confirmed: true) end def pending_friends diff --git a/spec/capybara/friendship_spec.rb b/spec/capybara/friendship_spec.rb index 7160ad790e..28bb798ac1 100644 --- a/spec/capybara/friendship_spec.rb +++ b/spec/capybara/friendship_spec.rb @@ -13,7 +13,7 @@ click_button 'Log in' expect(page).to have_content('Recent posts') visit users_path - click_button 'send invitation' + click_button 'Add Friend' click_link 'Sign out' visit new_user_session_path From 45acca71a5e433a465898026c777dea5e2707985 Mon Sep 17 00:00:00 2001 From: Shaher-11 Date: Wed, 19 May 2021 17:48:10 +0200 Subject: [PATCH 21/31] Update the linters file --- .github/workflows/linters.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index bd44d15a92..150f9c4b75 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -13,10 +13,10 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-ruby@v1 with: - ruby-version: 2.6.x + ruby-version: 3.0.x - name: Setup Rubocop run: | - gem install --no-document rubocop:'~>0.81.0' # https://docs.rubocop.org/en/stable/installation/ + gem install --no-document rubocop -v '>= 1.0, < 2.0' # https://docs.rubocop.org/en/stable/installation/ [ -f .rubocop.yml ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/ror/.rubocop.yml - name: Rubocop Report run: rubocop --color @@ -30,7 +30,7 @@ jobs: node-version: "12.x" - name: Setup Stylelint run: | - npm install --save-dev stylelint@13.3.x stylelint-scss@3.17.x stylelint-config-standard@20.0.x stylelint-csstree-validator + npm install --save-dev stylelint@13.x stylelint-scss@3.x stylelint-config-standard@21.x stylelint-csstree-validator@1.x [ -f .stylelintrc.json ] || wget https://raw.githubusercontent.com/microverseinc/linters-config/master/ror/.stylelintrc.json - name: Stylelint Report run: npx stylelint "**/*.{css,scss}" \ No newline at end of file From d2a6d34a733403fb8a9c957fddc029411e50fdc8 Mon Sep 17 00:00:00 2001 From: Shaher-11 Date: Wed, 19 May 2021 21:34:55 +0200 Subject: [PATCH 22/31] Enable user to see his own and friends posts as well as adding more integration tests --- app/controllers/posts_controller.rb | 2 +- app/controllers/users_controller.rb | 3 +-- app/helpers/application_helper.rb | 10 ++++++++++ app/views/users/show.html.erb | 9 ++------- spec/capybara/friendship_spec.rb | 8 ++++++++ 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 0062aebe55..272c6a358e 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -20,7 +20,7 @@ def create private def timeline_posts - @timeline_posts ||= Post.all.ordered_by_most_recent.includes(:user) + @timeline_posts ||= current_user.friends_and_own_posts end def post_params diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index c7de706e43..ad172186d8 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -7,7 +7,6 @@ def index end def show - @user = User.find(params[:id]) @posts = @user.posts.ordered_by_most_recent end @@ -18,7 +17,7 @@ def accept def decline user = User.find(params[:data]) - friendship = @user.inverse_friendshiips.find { |f| f.user == user } + friendship = @user.inverse_friendships.find { |f| f.user == user } friendship.destroy redirect_to request.referrer, notice: 'Declined friend request' end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index c669da9ee4..f799a2f45f 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -62,4 +62,14 @@ def invitation_button(user) end result.html_safe end + + def friend(user) + '

    Friend

    '.html_safe if user.friends.include?(current_user) + end + + def pendings(user) + '

    Pending Requests

    '.html_safe if user.inverse_friendships.find do |frd| + frd.user_id == current_user.id && !frd.confirmed + end + end end diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index 2db47002ea..f65bc8ce1a 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -2,13 +2,8 @@

    <%= "Name: #{@user.name}" %>

    <%= invitation_button(@user) %> - <% if @user.friends.include?(current_user) %> -

    Friend

    - <% end %> - - <% if @user.inverse_friendships.find { |frd| frd.user_id == current_user.id && !frd.confirmed } %> -

    Pending Requests

    - <% end %> + <%= friend(@user) %> + <%= pendings(@user) %>

    Recent posts:

    diff --git a/spec/capybara/friendship_spec.rb b/spec/capybara/friendship_spec.rb index 28bb798ac1..8e922517b5 100644 --- a/spec/capybara/friendship_spec.rb +++ b/spec/capybara/friendship_spec.rb @@ -26,4 +26,12 @@ expect(page).to have_selector(:link_or_button, 'Decline') click_button 'Accept' end + + scenario 'user logs in and see his posts as well as his friends posts in the homepage' do + visit root_path + fill_in 'Email', with: 'user1@example.com' + fill_in 'Password', with: 'password' + click_button 'Log in' + expect(page).to have_content('Recent posts') + end end From d69920d59601da05adb7edccca568c5c5406943e Mon Sep 17 00:00:00 2001 From: Nikolas Escobal Date: Thu, 20 May 2021 18:17:31 +0800 Subject: [PATCH 23/31] Update README.md --- README.md | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e2ff61f120..a83714d0e4 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,7 @@ ## Live Demo -TBA - +[Live Link](https://stormy-cove-12125.herokuapp.com/posts) ## Getting Started @@ -71,13 +70,28 @@ TBA ## Authors -TBA +👤 **Nikolas Escobal** + +[](https://github.com/nikoescobal) +[](https://twitter.com/nikoescobal) +[](https://www.linkedin.com/in/nikolas-escobal/) + + + + + 👤 **Shaher Shamroukh** + +[](https://github.com/Shaher-11) +[](https://twitter.com/ShaherShamroukh/) +[](https://www.linkedin.com/in/shaher-shamroukh/) + + ## 🤝 Contributing Contributions, issues and feature requests are welcome! -Feel free to check the [issues page](issues/). +Feel free to check the [issues page](https://github.com/nikoescobal/members-only/issues). ## Show your support From db61d7d555a8f583ac38648c2cb53abadd889a80 Mon Sep 17 00:00:00 2001 From: Nikolas Escobal Date: Thu, 20 May 2021 18:19:35 +0800 Subject: [PATCH 24/31] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a83714d0e4..876975a1fd 100644 --- a/README.md +++ b/README.md @@ -99,9 +99,9 @@ Give a ⭐️ if you like this project! ## Acknowledgments -TBA - -## 📝 License +- Microverse +- The Odin Project -TBA +## 📝 MIT License +This project makes use of the MIT license. From eb56d0ce7bdc8afedb7fc000afd5ae1723ee4bbb Mon Sep 17 00:00:00 2001 From: Niko Escobal Date: Thu, 6 Jan 2022 15:42:23 +0800 Subject: [PATCH 25/31] Update routes --- app/assets/images/.keep 2 | 0 app/assets/javascripts/channels/.keep 2 | 0 app/controllers/concerns/.keep 2 | 0 app/models/concerns/.keep 2 | 0 config/routes.rb | 2 +- lib/assets/.keep 2 | 0 lib/tasks/.keep 2 | 0 public/.apple-touch-icon 2.png.icloud | Bin 0 -> 171 bytes public/.apple-touch-icon-precomposed 2.png.icloud | Bin 0 -> 183 bytes public/.favicon 2.ico.icloud | Bin 0 -> 160 bytes vendor/.keep 2 | 0 11 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 app/assets/images/.keep 2 create mode 100644 app/assets/javascripts/channels/.keep 2 create mode 100644 app/controllers/concerns/.keep 2 create mode 100644 app/models/concerns/.keep 2 create mode 100644 lib/assets/.keep 2 create mode 100644 lib/tasks/.keep 2 create mode 100644 public/.apple-touch-icon 2.png.icloud create mode 100644 public/.apple-touch-icon-precomposed 2.png.icloud create mode 100644 public/.favicon 2.ico.icloud create mode 100644 vendor/.keep 2 diff --git a/app/assets/images/.keep 2 b/app/assets/images/.keep 2 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/assets/javascripts/channels/.keep 2 b/app/assets/javascripts/channels/.keep 2 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/controllers/concerns/.keep 2 b/app/controllers/concerns/.keep 2 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/models/concerns/.keep 2 b/app/models/concerns/.keep 2 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/config/routes.rb b/config/routes.rb index 40366d5668..28559f26cf 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -7,7 +7,7 @@ resources :users, only: [:index, :show] resources :users do - member do + user do get :create_friendship get :accept get :decline diff --git a/lib/assets/.keep 2 b/lib/assets/.keep 2 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lib/tasks/.keep 2 b/lib/tasks/.keep 2 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/public/.apple-touch-icon 2.png.icloud b/public/.apple-touch-icon 2.png.icloud new file mode 100644 index 0000000000000000000000000000000000000000..cfcba5d28fded2461ef4c1260b824ca8b3636f31 GIT binary patch literal 171 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?4zfvBZLcoK)SC{L Date: Thu, 6 Jan 2022 16:22:14 +0800 Subject: [PATCH 26/31] Add API endpoints for displaying posts and comments in json format. --- app/controllers/comments_controller.rb | 6 ++++++ app/controllers/posts_controller.rb | 4 ++++ config/routes.rb | 8 +++++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 3fc325e146..f64bbe909f 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -11,6 +11,12 @@ def create end end + def comments_index + post_id = params[:post_id] + comments = Post.find_by(id: post_id).comments + render json: comments.to_json + end + private def comment_params diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 272c6a358e..b1d451cf5f 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -17,6 +17,10 @@ def create end end + def posts_index + render json: Post.all + end + private def timeline_posts diff --git a/config/routes.rb b/config/routes.rb index 28559f26cf..594228aae8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,7 @@ Rails.application.routes.draw do + + root 'posts#index' devise_for :users @@ -7,7 +9,7 @@ resources :users, only: [:index, :show] resources :users do - user do + member do get :create_friendship get :accept get :decline @@ -19,5 +21,9 @@ resources :likes, only: [:create, :destroy] end + get "/get_posts", to: "posts#posts_index" + get "/comments/:post_id", to: "comments#comments_index" + + # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end From 2f2e41d28cb9c95f1989e8ea1773a23d6bfbc04b Mon Sep 17 00:00:00 2001 From: Niko Escobal Date: Sat, 8 Jan 2022 03:39:24 +0800 Subject: [PATCH 27/31] Add authentication --- Gemfile | 1 + Gemfile.lock | 7 ++++++- app/controllers/comments_controller.rb | 28 +++++++++++++++++++++++++- app/controllers/users_controller.rb | 5 ++++- config/application.rb | 9 ++++++++- config/routes.rb | 3 ++- 6 files changed, 48 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index 0c8d007659..32a90258e0 100644 --- a/Gemfile +++ b/Gemfile @@ -34,6 +34,7 @@ gem 'wdm', '>= 0.1.0' if Gem.win_platform? # Reduces boot times through caching; required in config/boot.rb gem 'bootsnap', '>= 1.1.0', require: false +gem 'rack-cors' gem 'devise' diff --git a/Gemfile.lock b/Gemfile.lock index 98e979068a..975bcb0f32 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -118,6 +118,8 @@ GEM puma (3.12.6) racc (1.5.2) rack (2.2.3) + rack-cors (1.1.1) + rack (>= 2.0.0) rack-test (1.1.0) rack (>= 1.0, < 3) rails (5.2.6) @@ -218,6 +220,8 @@ GEM turbolinks-source (5.2.0) tzinfo (1.2.9) thread_safe (~> 0.1) + tzinfo-data (1.2021.5) + tzinfo (>= 1.0.0) uglifier (4.2.0) execjs (>= 0.3.0, < 3) unicode-display_width (2.0.0) @@ -249,6 +253,7 @@ DEPENDENCIES listen (>= 3.0.5, < 3.2) pg (>= 0.18, < 2.0) puma (~> 3.12) + rack-cors rails (~> 5.2.4) rspec rspec-rails @@ -262,4 +267,4 @@ DEPENDENCIES web-console (>= 3.3.0) BUNDLED WITH - 2.2.16 + 2.3.4 diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index f64bbe909f..c709a1d18a 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -17,9 +17,35 @@ def comments_index render json: comments.to_json end + # def create_comment + # comment = Comment.create(comment_params) + + # if comment.save + # render json: comment, status: :created + # else + # render json: comment.errors, status: :unprocessable_entity + # end + + + # end + + def create_comment + p '/////////////////////////////////////////////////////////////////////////' + puts comment_params + @comment = Comment.create(comment_params) + render json: @comment + if @comment.save + render json: @comment + # redirect_to posts_path, notice: 'Comment was successfully created.' + else + puts "not saving" + # redirect_to posts_path, alert: @comment.errors.full_messages.join('. ').to_s + end + end + private def comment_params - params.require(:comment).permit(:content) + params.require(:comment_params).permit(:user_id, :post_id, :content) end end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index ad172186d8..58cc27e69d 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,9 +1,12 @@ class UsersController < ApplicationController - before_action :authenticate_user! + # before_action :authenticate_user! before_action :set_user, only: %i[show create_friendship accept decline] def index @users = User.all + puts "//////////////////////" + puts @users + render json: @users end def show diff --git a/config/application.rb b/config/application.rb index 1cbf7597fa..77001fd7fd 100644 --- a/config/application.rb +++ b/config/application.rb @@ -29,5 +29,12 @@ class Application < Rails::Application # Don't generate system test files. config.generators.system_tests = nil + + config.middleware.insert_before 0, Rack::Cors do + allow do + origins 'http://localhost:3000' #1 + resource '*', :headers => :any, :methods => [:get, :post, :put, :patch, :delete, :options] # 2 + end + end end -end +end \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 594228aae8..2879d52ffa 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -23,7 +23,8 @@ get "/get_posts", to: "posts#posts_index" get "/comments/:post_id", to: "comments#comments_index" - + post "/add_comments/:user_id/:post_id/:content", to: "comments#create_comment" + # post "/posts/:post_id/comments" # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end From 3a979eefb608703b10dd49e1a6e0cc83c1699f1e Mon Sep 17 00:00:00 2001 From: Niko Escobal Date: Sat, 8 Jan 2022 03:49:12 +0800 Subject: [PATCH 28/31] Fix linters --- app/controllers/comments_controller.rb | 9 ++++----- app/controllers/users_controller.rb | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index c709a1d18a..277cd35df6 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -19,14 +19,13 @@ def comments_index # def create_comment # comment = Comment.create(comment_params) - + # if comment.save # render json: comment, status: :created # else # render json: comment.errors, status: :unprocessable_entity # end - # end def create_comment @@ -36,11 +35,11 @@ def create_comment render json: @comment if @comment.save render json: @comment - # redirect_to posts_path, notice: 'Comment was successfully created.' + # redirect_to posts_path, notice: 'Comment was successfully created.' else - puts "not saving" + puts 'not saving' # redirect_to posts_path, alert: @comment.errors.full_messages.join('. ').to_s - end + end end private diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 58cc27e69d..2e1fa13a73 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -4,7 +4,7 @@ class UsersController < ApplicationController def index @users = User.all - puts "//////////////////////" + puts '//////////////////////' puts @users render json: @users end From 9805543484f36403338d219d83067276876e4d47 Mon Sep 17 00:00:00 2001 From: Niko Escobal Date: Sat, 8 Jan 2022 04:53:42 +0800 Subject: [PATCH 29/31] Fix double render error and post request api endpoint --- app/controllers/application_controller.rb | 2 +- app/controllers/comments_controller.rb | 42 +++++++++++------------ app/controllers/users_controller.rb | 1 + config/routes.rb | 9 ++--- 4 files changed, 26 insertions(+), 28 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index b5056310d4..9b8b695572 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,6 +1,6 @@ class ApplicationController < ActionController::Base protect_from_forgery with: :exception - + skip_before_action :verify_authenticity_token before_action :configure_permitted_parameters, if: :devise_controller? protected diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 277cd35df6..5dc9f09adf 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -17,34 +17,34 @@ def comments_index render json: comments.to_json end - # def create_comment - # comment = Comment.create(comment_params) - - # if comment.save - # render json: comment, status: :created - # else - # render json: comment.errors, status: :unprocessable_entity - # end - - # end - def create_comment - p '/////////////////////////////////////////////////////////////////////////' - puts comment_params - @comment = Comment.create(comment_params) - render json: @comment - if @comment.save - render json: @comment - # redirect_to posts_path, notice: 'Comment was successfully created.' + comment = Comment.create(comment_params) + + if comment.save + render json: comment, status: :created else - puts 'not saving' - # redirect_to posts_path, alert: @comment.errors.full_messages.join('. ').to_s + render json: comment.errors, status: :unprocessable_entity end + end + # def create_comment + # p '/////////////////////////////////////////////////////////////////////////' + # puts comment_params + # @comment = Comment.create(comment_params) + # render json: @comment + # if @comment.save + # render json: @comment + # # redirect_to posts_path, notice: 'Comment was successfully created.' + # else + # puts 'not saving' + # # redirect_to posts_path, alert: @comment.errors.full_messages.join('. ').to_s + # end + # end + private def comment_params - params.require(:comment_params).permit(:user_id, :post_id, :content) + params.permit(:user_id, :post_id, :content) end end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 2e1fa13a73..9e51b3f17c 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,4 +1,5 @@ class UsersController < ApplicationController + skip_forgery_protection # before_action :authenticate_user! before_action :set_user, only: %i[show create_friendship accept decline] diff --git a/config/routes.rb b/config/routes.rb index 2879d52ffa..c4cbef58d8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,7 +1,4 @@ Rails.application.routes.draw do - - - root 'posts#index' devise_for :users @@ -16,14 +13,14 @@ end end - resources :posts, only: [:index, :create] do - resources :comments, only: [:create] + resources :posts do + resources :comments resources :likes, only: [:create, :destroy] end get "/get_posts", to: "posts#posts_index" get "/comments/:post_id", to: "comments#comments_index" - post "/add_comments/:user_id/:post_id/:content", to: "comments#create_comment" + post "/add_comments/:user_id/:post_id/:content", to: "comments#create_comment"\ # post "/posts/:post_id/comments" # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html From 9f6e919ca737bee5463f79c637eb9c09ffc729e1 Mon Sep 17 00:00:00 2001 From: Niko Escobal Date: Sat, 8 Jan 2022 04:54:28 +0800 Subject: [PATCH 30/31] Remove comments and unnecessary code --- app/controllers/comments_controller.rb | 14 -------------- app/controllers/users_controller.rb | 2 -- 2 files changed, 16 deletions(-) diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 5dc9f09adf..4beca63034 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -28,20 +28,6 @@ def create_comment end - # def create_comment - # p '/////////////////////////////////////////////////////////////////////////' - # puts comment_params - # @comment = Comment.create(comment_params) - # render json: @comment - # if @comment.save - # render json: @comment - # # redirect_to posts_path, notice: 'Comment was successfully created.' - # else - # puts 'not saving' - # # redirect_to posts_path, alert: @comment.errors.full_messages.join('. ').to_s - # end - # end - private def comment_params diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 9e51b3f17c..1d304355fb 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -5,8 +5,6 @@ class UsersController < ApplicationController def index @users = User.all - puts '//////////////////////' - puts @users render json: @users end From 73f15c78d776e51ab791043b72dd06a8a8f13d00 Mon Sep 17 00:00:00 2001 From: Niko Escobal Date: Sat, 8 Jan 2022 04:59:30 +0800 Subject: [PATCH 31/31] Fix rubocop errors --- app/controllers/comments_controller.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 4beca63034..780d59917d 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -25,7 +25,6 @@ def create_comment else render json: comment.errors, status: :unprocessable_entity end - end private