From 9b8789d003e0879e2fb2bd089a69b534b48d045d Mon Sep 17 00:00:00 2001 From: Aka jazzy Date: Mon, 22 Aug 2022 20:13:08 +0800 Subject: [PATCH 01/55] feat(test): add playwright testing framework and remove old testing framework --- .github/workflows/test.yml | 8 + .gitignore | 5 + .vim/.vimrc | 1 - bdd/common/enums/path.js | 5 - bdd/common/enums/script.js | 4 - bdd/common/enums/time.js | 5 - bdd/features/home_page.feature | 46 - bdd/features/login_logout.feature | 19 - bdd/features/side_bar.feature | 50 - bdd/shells/init.sh | 15 - bdd/steps/common.js | 58 - bdd/steps/home_page.js | 159 -- bdd/steps/login_logout.js | 66 - bdd/steps/side_bar.js | 118 - cucumber.conf.js | 25 - nightwatch.conf.js | 52 - package-lock.json | 4401 +---------------------------- package.json | 8 +- playwright.config.ts | 107 + tests/example.spec.ts | 20 + 20 files changed, 188 insertions(+), 4984 deletions(-) delete mode 100644 bdd/common/enums/path.js delete mode 100644 bdd/common/enums/script.js delete mode 100644 bdd/common/enums/time.js delete mode 100644 bdd/features/home_page.feature delete mode 100644 bdd/features/login_logout.feature delete mode 100644 bdd/features/side_bar.feature delete mode 100644 bdd/shells/init.sh delete mode 100644 bdd/steps/common.js delete mode 100644 bdd/steps/home_page.js delete mode 100644 bdd/steps/login_logout.js delete mode 100644 bdd/steps/side_bar.js delete mode 100644 cucumber.conf.js delete mode 100644 nightwatch.conf.js create mode 100644 playwright.config.ts create mode 100644 tests/example.spec.ts diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 172abf96e7..dca526a5bf 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -48,3 +48,11 @@ jobs: run: | npm run lint \ && npm run format:check + - name: Run Playwright tests + run: npx playwright test + uses: actions/upload-artifact@v2 + if: always() + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 diff --git a/.gitignore b/.gitignore index 56ee296114..45d16dfee8 100644 --- a/.gitignore +++ b/.gitignore @@ -121,3 +121,8 @@ service-worker.js* storybook-static tsconfig.tsbuildinfo + +# playwright test result +/test-results/ +/playwright-report/ +/playwright/.cache/ diff --git a/.vim/.vimrc b/.vim/.vimrc index 6ca5e77a4b..74d5ca68bd 100644 --- a/.vim/.vimrc +++ b/.vim/.vimrc @@ -16,7 +16,6 @@ Plug 'leafgarland/typescript-vim' Plug 'peitalin/vim-jsx-typescript' Plug 'jparise/vim-graphql' Plug 'sbdchd/neoformat' -Plug 'tpope/vim-cucumber' call plug#end() diff --git a/bdd/common/enums/path.js b/bdd/common/enums/path.js deleted file mode 100644 index d243ed70fd..0000000000 --- a/bdd/common/enums/path.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - HOME: (prefix) => { - return `https://${prefix}web-develop.matters.news` - }, -} diff --git a/bdd/common/enums/script.js b/bdd/common/enums/script.js deleted file mode 100644 index d5bbe87733..0000000000 --- a/bdd/common/enums/script.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - SCROLL_TOP: 'window.scrollTo(0, 0);', - SCROLL_DOWN: 'window.scrollTo(0, document.body.scrollHeight);', -} diff --git a/bdd/common/enums/time.js b/bdd/common/enums/time.js deleted file mode 100644 index e337f4b53c..0000000000 --- a/bdd/common/enums/time.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - HALF_SECOND: 500, - SECOND: 1000, - MINTUE: 60 * 1000, -} diff --git a/bdd/features/home_page.feature b/bdd/features/home_page.feature deleted file mode 100644 index 4cf4b18809..0000000000 --- a/bdd/features/home_page.feature +++ /dev/null @@ -1,46 +0,0 @@ -Feature: Home Page Feed - Test functionalities of home page feed components. - - Scenario: Load Matters Today - Given I visit home page - Then the Matters Today title should be visible - Then the Matters Today description should visible - When I click the Matters Today's cover - Then the Article page should be visible - - Scenario: Load Hottest Feed - Given I visit home page - Then the hottest list should be visible - Then the article title and description in hottest list should be visible - When I scroll down to the end of the hottest list - Then the load more button should be visible - When I click the load more button - Then more hottest articles are loaded - - Scenario: Load ICYMI Feed - Given I visit home page - Then the ICYMI list should be visible - Then the article title in ICYMI list should be visible - When I click the ICYMI article title - Then the Article page should be visible - - Scenario: Load Topics Feed - Given I visit home page - Then the topics list should be visible - Then the article title in topics list should be visible - When I click the topics article title - Then the Article page should be visible - - Scenario: Load Authors Feed - Given I visit home page - Then the authors list should be visible - Then the author name in auhtors list should be visible - When I click the authors name - Then the User page should be visible - - Scenario: Load Tags Feed - Given I visit home page - Then the tags list should be visible - Then the tag name in tags list should be visible - When I click the tags name - Then the Tag page should be visible diff --git a/bdd/features/login_logout.feature b/bdd/features/login_logout.feature deleted file mode 100644 index 241e79502d..0000000000 --- a/bdd/features/login_logout.feature +++ /dev/null @@ -1,19 +0,0 @@ -Feature: Login and logout - Test functionalities of login components. - - Scenario: Login - Given I visit home page - Then the header should be unlogged status - When I click the login button in the header - Then the login modal should be visible - When I fill up the login form - When I click the login button - Then the header should be logged status - - Scenario: Logout - Given I visit home page - Then the header should be logged status - When I move mouse to the user avatar in the header - Then the user drop down should be visible - When I click the logout button in drop down menu - Then the header should be unlogged status diff --git a/bdd/features/side_bar.feature b/bdd/features/side_bar.feature deleted file mode 100644 index c89de302a1..0000000000 --- a/bdd/features/side_bar.feature +++ /dev/null @@ -1,50 +0,0 @@ -Feature: Side Bar - Test functionalities of side bar components. - - Scenario: Load Matters Today - Given I visit home page - Then the Side Bar is visible - - - Scenario: Don't Miss Section Test - Given the Cannot Miss section is visible - When I click the fisrt article - Then the first article page should be visible - Then go back to previous page - Given the Cannot Miss section is visible - When I click the first author - Then the author page should be visible - - Scenario: Hashtag Section Test - Then go back to previous page - When I scroll down to the hashtag section - Given the hashtag section is visible - When I click the first hashtag - Then the first hashtag page should be visible - Then go back to previous page - Given the hashtag section is visible - When I click check all hashtag button - Then the all hashtag page should be visible - -Scenario: Hot Topics Test - Then go back to previous page - When I scroll down to the hot topics section - Given the hot topics section is visible - When I click the first hot topic - Then the first topic page should be visible - Then go back to previous page - Given the hot topics section is visible - When I click the all hot topics button - Then the all hot topics page should be visible - -Scenario: Active Authors Test - Then go back to previous page - When I scroll down to the active authors section - Given the active authors section is visible - When I click the first active author - Then the author page should be visible - Then go back to previous page - Given the hot topics section is visible - Given the sign-in button is visible - When I click the follow button - Then the require sign-in notification should be visible diff --git a/bdd/shells/init.sh b/bdd/shells/init.sh deleted file mode 100644 index 71b95ff754..0000000000 --- a/bdd/shells/init.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -apt update -apt install -y build-essential - -# chrome -wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -apt install -y ./google-chrome-stable_current_amd64.deb - -# firefox -# apt install -y packagekit-gtk3-module -# wget -O FirefoxSetup.tar.bz2 "https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=en-US" -# mkdir /opt/firefox -# tar xjf FirefoxSetup.tar.bz2 -C /opt/firefox/ -# ln -s /opt/firefox/firefox/firefox /usr/bin/firefox diff --git a/bdd/steps/common.js b/bdd/steps/common.js deleted file mode 100644 index e42afb9d1a..0000000000 --- a/bdd/steps/common.js +++ /dev/null @@ -1,58 +0,0 @@ -const { client } = require('nightwatch-api') -const { Given, Then, When } = require('cucumber') - -const PATH = require('../common/enums/path') -const TIME = require('../common/enums/time') - -const waitPageToBeVisible = (client, query) => { - return client - .waitForElementVisible('body') - .waitForElementVisible(query, 10 * TIME.SECOND) -} - -Given('I visit home page', () => { - return client - .url(PATH.HOME(`${process.env.BDD_USER}:${process.env.BDD_PASSWD}@`)) - .waitForElementVisible('body') - .waitForElementVisible('header') - .waitForElementVisible('main') -}) - -Then('the Article page should be visible', () => { - return waitPageToBeVisible(client, 'h1.article') -}) - -Then('go back to home page', () => { - return client.url('http://matters.news').waitForElementVisible('body', 1000) -}) - -Then('go back to previous page', () => { - return client.back().waitForElementVisible('body', 1000) -}) - -Then('the first article page should be visible', () => { - return waitPageToBeVisible(client, 'h1.article') -}) - -Then('the author page should be visible', () => { - return waitPageToBeVisible(client, 'main > section > div:nth-child(2)') -}) - -Then('the first hashtag page should be visible', () => { - return waitPageToBeVisible(client, 'main > article > header > section.title') -}) - -Then('the all hashtag page should be visible', () => { - return waitPageToBeVisible(client, 'main > article > header > section.title') -}) - -Then('the all hot topics page should be visible', () => { - return waitPageToBeVisible(client, 'main > article > header > section.title') -}) - -Then('the first topic page should be visible', () => { - return waitPageToBeVisible( - client, - 'main > article > section.jsx-2196064359.title > h1' - ) -}) diff --git a/bdd/steps/home_page.js b/bdd/steps/home_page.js deleted file mode 100644 index 7b9347c0df..0000000000 --- a/bdd/steps/home_page.js +++ /dev/null @@ -1,159 +0,0 @@ -const { client } = require('nightwatch-api') -const { Given, Then, When } = require('cucumber') - -const PATH = require('../common/enums/path') -const SCRIPT = require('../common/enums/script') -const TIME = require('../common/enums/time') - -/*----- Matters Today -----*/ - -Then('the Matters Today title should be visible', () => { - return client.assert.visible('h2.feature') -}) - -Then('the Matters Today description should visible', () => { - return client.assert.visible('div.description') -}) - -When("I click the Matters Today's cover", () => { - return client.click('div.cover-container').pause(2 * TIME.SECOND) -}) - -/*----- Hottest Feed -----*/ - -Then('the hottest list should be visible', () => { - const query = 'main > article > div > ul' - return client - .waitForElementVisible(`${query}`) - .expect.elements(`${query} > li`) - .count.to.equal(10) -}) - -Then( - 'the article title and description in hottest list should be visible', - () => { - const query = 'main > article > div > ul > li:first-child > section > div' - return client.assert - .visible(`${query} > div.title > a > h2.feed`) - .assert.visible(`${query} > div.description`) - } -) - -When('I scroll down to the end of the hottest list', () => { - const query = 'main > article > div:last-child > button' - return client.execute( - `document.querySelector('${query}').scrollIntoView({ block: 'center' })` - ) -}) - -Then('the load more button should be visible', () => { - return client.assert.visible('main > article > div:last-child > button') -}) - -When('I click the load more button', () => { - return client - .click('main > article > div:last-child > button') - .pause(2 * TIME.SECOND) -}) - -Then('more hottest articles are loaded', () => { - return client.expect - .elements('main > article > div > ul > li') - .count.to.equal(20) -}) - -/*----- ICYMI Feed -----*/ - -Then('the ICYMI list should be visible', () => { - const query = 'main > aside > section:first-child > ul' - return client.assert - .visible(`${query}`) - .expect.elements(`${query} > li`) - .count.not.to.equal(0) -}) - -Then('the article title in ICYMI list should be visible', () => { - return client.assert.visible( - 'main > aside > section:first-child > ul > li:first-child > section h2.sidebar' - ) -}) - -When('I click the ICYMI article title', () => { - return client - .execute(SCRIPT.SCROLL_TOP) - .click( - 'main > aside > section:first-child > ul > li:first-child > section > div > div > a' - ) - .pause(2 * TIME.SECOND) -}) - -/*----- Topics Feed -----*/ - -Then('the topics list should be visible', () => { - const query = 'main > aside > section:nth-child(2) > ol' - return client.assert - .visible(`${query}`) - .expect.elements(`${query} > li`) - .count.not.to.equal(0) -}) - -Then('the article title in topics list should be visible', () => { - return client.assert.visible( - 'main > aside > section:nth-child(2) > ol > li > section h2.sidebar' - ) -}) - -When('I click the topics article title', () => { - return client - .execute(SCRIPT.SCROLL_TOP) - .click( - 'main > aside > section:nth-child(2) > ol > li > section > div > div > a' - ) - .pause(2 * TIME.SECOND) -}) - -/*----- Authors Feed -----*/ - -Then('the authors list should be visible', () => { - const query = 'main > aside > section:nth-child(3) > ul' - return client.assert - .visible(`${query}`) - .expect.elements(`${query} > li`) - .count.not.to.equal(0) -}) - -Then('the author name in auhtors list should be visible', () => { - return client.assert.visible( - 'main > aside > section:nth-child(3) > ul > li:first-child > section > section > a' - ) -}) - -When('I click the authors name', () => { - return client - .click( - 'main > aside > section:nth-child(3) > ul > li:first-child > section > section > a' - ) - .pause(2 * TIME.SECOND) -}) - -/*----- Tags Feed -----*/ - -Then('the tags list should be visible', () => { - const query = 'main > aside > section:nth-child(4) > ul' - return client.assert - .visible(`${query}`) - .expect.elements(`${query} > li`) - .count.not.to.equal(0) -}) - -Then('the tag name in tags list should be visible', () => { - return client.assert.visible( - 'main > aside > section:nth-child(4) > ul > li:first-child > a' - ) -}) - -When('I click the tags name', () => { - return client - .click('main > aside > section:nth-child(4) > ul > li:first-child > a') - .pause(2 * TIME.SECOND) -}) diff --git a/bdd/steps/login_logout.js b/bdd/steps/login_logout.js deleted file mode 100644 index 285f31820a..0000000000 --- a/bdd/steps/login_logout.js +++ /dev/null @@ -1,66 +0,0 @@ -const { client } = require('nightwatch-api') -const { Given, Then, When } = require('cucumber') - -const PATH = require('../common/enums/path') -const TIME = require('../common/enums/time') - -/*----- Common -----*/ - -Then('the header should be logged status', () => { - return client.assert.visible('header section.me div.avatar') -}) - -Then('the header should be unlogged status', () => { - return client.expect - .elements('header > div > div > section.right > button') - .count.to.equal(2) -}) - -/*----- Login -----*/ - -When('I click the login button in the header', () => { - return client.click( - 'header > div > div > section:nth-child(2) > button:first-child' - ) -}) - -Then('the login modal should be visible', () => { - return client.assert.visible('#modal-anchor form') -}) - -When('I fill up the login form', () => { - const query = '#modal-anchor form' - return client - .setValue(`${query} input[name='email']`, process.env.BDD_TEST_USER_EMAIL) - .setValue( - `${query} input[name='password']`, - process.env.BDD_TEST_USER_PASSWD - ) - .click(`${query} button[type='submit']`) -}) - -When('I click the login button', () => { - return client - .click(`#modal-anchor form button[type='submit']`) - .pause(2 * TIME.SECOND) -}) - -/*----- Logout -----*/ - -When('I move mouse to the user avatar in the header', () => { - return client.moveToElement('header section.me div.avatar', 10, 10) -}) - -Then('the user drop down should be visible', () => { - return client - .moveToElement('header section.me div.avatar', 10, 10) - .waitForElementVisible('div.tippy-popper') - .expect.elements('div.tippy-popper div.tippy-content ul.menu li') - .count.not.equal(0) -}) - -When('I click the logout button in drop down menu', () => { - return client - .click('div.tippy-popper div.tippy-content ul.menu li:last-child') - .pause(2 * TIME.SECOND) -}) diff --git a/bdd/steps/side_bar.js b/bdd/steps/side_bar.js deleted file mode 100644 index c7f7a9591d..0000000000 --- a/bdd/steps/side_bar.js +++ /dev/null @@ -1,118 +0,0 @@ -const { client } = require('nightwatch-api') -const { Given, Then, When } = require('cucumber') - -const PATH = require('../common/enums/path') -const SCRIPT = require('../common/enums/script') -const TIME = require('../common/enums/time') - -Then('the Side Bar is visible', () => { - const query = 'main > aside' - return client.maximizeWindow().assert.visible(`${query}`) -}) - -/*----- Cannot Miss -----*/ - -Given('the Cannot Miss section is visible', () => { - const query = 'main > aside' - return client.assert.visible(`${query} > section:nth-child(1)`) -}) - -When('I click the fisrt article', () => { - const query = - 'main > aside > section:nth-child(1) > section > section:nth-child(1) > section > section ' - return client.click(`${query} > header > a`).pause(2 * TIME.SECOND) -}) - -When('I click the first author', () => { - const query = - 'main > aside > section:nth-child(1) > section > section:nth-child(1) > section > section ' - return client.click(`${query} > footer > a`).pause(2 * TIME.SECOND) -}) - -/*----- Hashtag list -----*/ -When('I scroll down to the hashtag section', () => { - const query = '#__next > main > aside > section.jsx-1380876058' - return client.execute( - `document.querySelector('${query}').scrollIntoView({ block: 'center' })` - ) -}) - -Given('the hashtag section is visible', () => { - const query = 'main > aside' - return client.assert.visible(`${query} > section.jsx-1380876058`) -}) - -When('I click the first hashtag', () => { - const query = '#__next > main > aside > section.jsx-1380876058 > ul' - return client.click(`${query} > li:nth-child(1) > a`).pause(2 * TIME.SECOND) -}) - -When('I click check all hashtag button', () => { - const query = '#__next > main > aside > section.jsx-1380876058' - return client.click(`${query} > header > a`).pause(2 * TIME.SECOND) -}) - -/*----- Hot topics -----*/ -When('I scroll down to the hot topics section', () => { - const query = '#__next > main > aside > section.jsx-1380876058' - return client.execute( - `document.querySelector('${query}').scrollIntoView({ block: 'center' })` - ) -}) - -Given('the hot topics section is visible', () => { - const query = 'main > aside' - return client.assert.visible(`${query} > section:nth-child(3)`) -}) - -When('I click the first hot topic', () => { - const query = '#__next > main > aside > section:nth-child(3) > ol' - return client - .click(`${query} > li:nth-child(1) > section > section > a`) - .pause(2 * TIME.SECOND) -}) - -When('I click the all hot topics button', () => { - const query = '#__next > main > aside > section:nth-child(3)' - return client.click(`${query} > header > a`).pause(2 * TIME.SECOND) -}) - -/*----- Active authors -----*/ -When('I scroll down to the active authors section', () => { - const query = '#__next > main > aside > section:nth-child(4)' - return client.execute( - `document.querySelector('${query}').scrollIntoView({ block: 'center' })` - ) -}) - -Given('the active authors section is visible', () => { - const query = 'main > aside' - return client.assert.visible(`${query} > section:nth-child(4)`) -}) - -When('I click the first active author', () => { - const query = '#__next > main > aside > section:nth-child(4) > section' - return client - .click(`${query} > section:nth-child(1) > section > section`) - .pause(2 * TIME.SECOND) -}) - -When('I click the follow button', () => { - const query = - '#__next > main > aside > section:nth-child(4) > section > section:nth-child(1)' - return client - .click( - `${query} > section > section > section.jsx-2972492538.extra-button > button` - ) - .pause(3 * TIME.SECOND) -}) - -Given('the sign-in button is visible', () => { - return client.assert.visible( - `header > div > div > section.jsx-3112733317.right > button.jsx-1553655394` - ) -}) - -Then('the require sign-in notification should be visible', () => { - return client.assert.visible(`section > div > div > section`) -}) diff --git a/cucumber.conf.js b/cucumber.conf.js deleted file mode 100644 index 2466720feb..0000000000 --- a/cucumber.conf.js +++ /dev/null @@ -1,25 +0,0 @@ -const { setDefaultTimeout, AfterAll, BeforeAll } = require('cucumber') -const { - createSession, - closeSession, - startWebDriver, - stopWebDriver, -} = require('nightwatch-api') - -const driver = process.env.BDD_DRIVER - -setDefaultTimeout(10000) - -BeforeAll(async () => { - await startWebDriver({ - env: driver, - }) - await createSession({ - env: driver, - }) -}) - -AfterAll(async () => { - await closeSession() - await stopWebDriver() -}) diff --git a/nightwatch.conf.js b/nightwatch.conf.js deleted file mode 100644 index d101cc63ac..0000000000 --- a/nightwatch.conf.js +++ /dev/null @@ -1,52 +0,0 @@ -const base = { - launch: 'http://localhost:3000', -} - -const baseDriver = { - start_process: true, -} - -module.exports = { - src_folders: ['bdd/steps'], - - test_settings: { - // chrome - default: { - ...base, - webdriver: { - ...baseDriver, - server_path: 'node_modules/.bin/chromedriver', - port: 9000, - cli_args: ['--port=9000'], - }, - desiredCapabilities: { - browserName: 'chrome', - chromeOptions: { - args: ['headless', 'no-sandbox'], - }, - }, - }, - - // firefox - firefox: { - ...base, - webdriver: { - ...baseDriver, - server_path: 'node_modules/.bin/geckodriver', - port: 9001, - cli_args: ['--port=9001'], - }, - desiredCapabilities: { - browserName: 'firefox', - elementScrollBehavior: 1, - javascriptEnabled: true, - acceptSslCerts: true, - alwaysMatch: { - 'moz:firefoxOptions': { - args: ['--headless'], - }, - }, - }, - }, - }, -} diff --git a/package-lock.json b/package-lock.json index 19637f4e29..0b942a0b0a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -85,6 +85,7 @@ "devDependencies": { "@apollo/react-testing": "^3.1.3", "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@playwright/test": "^1.25.0", "@storybook/addon-a11y": "^6.4.9", "@storybook/addon-actions": "^6.4.9", "@storybook/addon-essentials": "^6.4.9", @@ -120,15 +121,11 @@ "babel-plugin-dynamic-import-node": "^2.3.3", "babel-polyfill": "^6.26.0", "chromedriver": "^92.0.1", - "cucumber": "^6.0.5", - "cucumber-pretty": "^6.0.0", "cz-conventional-changelog": "^3.3.0", "file-loader": "^6.2.0", "geckodriver": "^2.0.2", "identity-obj-proxy": "^3.0.0", "jest": "^27.0.6", - "nightwatch": "^1.7.8", - "nightwatch-api": "^3.0.2", "postcss-calc": "^7.0.5", "postcss-color-function": "^4.1.0", "postcss-mixins": "^6.2.3", @@ -152,7 +149,7 @@ "webpack-merge": "^5.8.0" }, "engines": { - "node": "16.14" + "node": "16.16" } }, "node_modules/@ampproject/remapping": { @@ -7112,6 +7109,22 @@ "resolved": "https://registry.npmjs.org/@pedrouid/environment/-/environment-1.0.1.tgz", "integrity": "sha512-HaW78NszGzRZd9SeoI3JD11JqY+lubnaOx7Pewj5pfjqWXOEATpeKIFb9Z4t2WBUK2iryiXX3lzWwmYWgUL0Ug==" }, + "node_modules/@playwright/test": { + "version": "1.25.0", + "resolved": "https://registry.npmmirror.com/@playwright/test/-/test-1.25.0.tgz", + "integrity": "sha512-j4EZhTTQI3dBeWblE21EV//swwmBtOpIrLdOIJIRv4uqsLdHgBg1z+JtTg+AeC5o2bAXIE26kDNW5A0TimG8Bg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "playwright-core": "1.25.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/@pmmmwh/react-refresh-webpack-plugin": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz", @@ -12442,12 +12455,6 @@ "@types/d3-selection": "*" } }, - "node_modules/@types/debug": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", - "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", - "dev": true - }, "node_modules/@types/eslint": { "version": "8.4.5", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", @@ -13881,12 +13888,6 @@ "node": ">=6" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true - }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -14683,15 +14684,6 @@ "node": ">=8" } }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -14720,15 +14712,6 @@ "util": "0.10.3" } }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/assert/node_modules/inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", @@ -14744,26 +14727,6 @@ "inherits": "2.0.1" } }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/assertion-error-formatter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/assertion-error-formatter/-/assertion-error-formatter-3.0.0.tgz", - "integrity": "sha512-6YyAVLrEze0kQ7CmJfUgrLHb+Y7XghmL2Ie7ijVa2Y9ynP3LV+VDiwFk62Dn0qtqbmY0BT0ss6p1xxpiF2PYbQ==", - "dev": true, - "dependencies": { - "diff": "^4.0.1", - "pad-right": "^0.2.2", - "repeat-string": "^1.6.1" - } - }, "node_modules/assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -14773,15 +14736,6 @@ "node": ">=0.10.0" } }, - "node_modules/ast-types": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz", - "integrity": "sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -14791,12 +14745,6 @@ "node": ">=4" } }, - "node_modules/async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true - }, "node_modules/async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", @@ -14898,21 +14846,6 @@ "node": ">=6.0.0" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, "node_modules/axe-core": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.2.tgz", @@ -15768,26 +15701,11 @@ "integrity": "sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=", "dev": true }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, "node_modules/bech32": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" }, - "node_modules/becke-ch--regex--s0-0-v1--base--pl--lib": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz", - "integrity": "sha1-Qpzuu/pffpNueNc/vcfacWKyDiA=", - "dev": true - }, "node_modules/better-opn": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz", @@ -16096,12 +16014,6 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -16754,12 +16666,6 @@ "node": ">=4" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, "node_modules/ccount": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", @@ -16770,28 +16676,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/chai-nightwatch": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chai-nightwatch/-/chai-nightwatch-0.4.0.tgz", - "integrity": "sha512-1xw74vR02XiHzo4wQfHqme2nqYPIzYnK5s3DMST7UW8FIHDWD7qplg+DTJ5FIPcmWiGYX/Re0CzvOcZQKJm1Uw==", - "dev": true, - "dependencies": { - "assertion-error": "1.0.0", - "deep-eql": "0.1.3" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/chai-nightwatch/node_modules/assertion-error": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz", - "integrity": "sha1-x/hUOP3UZrx8oWq5DIFRN5el0js=", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -17045,18 +16929,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/cli-progress": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.9.0.tgz", @@ -17099,18 +16971,6 @@ "node": ">=8" } }, - "node_modules/cli-spinners": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", - "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cli-table3": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", @@ -18954,232 +18814,6 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.6.tgz", "integrity": "sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw==" }, - "node_modules/cucumber": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-6.0.5.tgz", - "integrity": "sha512-x+W9Fwk6TvcapQsYMxwFU5AsQJDOIJVGrPKmH15OC7jzb9/Dk7Hb0ZAyw4WcpaDcUDRc8bi2k2yJejDp5eTRlg==", - "deprecated": "The npm package has moved to @cucumber/cucumber", - "dev": true, - "dependencies": { - "assertion-error-formatter": "^3.0.0", - "bluebird": "^3.4.1", - "cli-table3": "^0.5.1", - "colors": "^1.1.2", - "commander": "^3.0.1", - "cucumber-expressions": "^8.1.0", - "cucumber-tag-expressions": "^2.0.2", - "duration": "^0.2.1", - "escape-string-regexp": "^2.0.0", - "figures": "^3.0.0", - "gherkin": "5.0.0", - "glob": "^7.1.3", - "indent-string": "^4.0.0", - "is-generator": "^1.0.2", - "is-stream": "^2.0.0", - "knuth-shuffle-seeded": "^1.0.6", - "lodash": "^4.17.14", - "mz": "^2.4.0", - "progress": "^2.0.0", - "resolve": "^1.3.3", - "serialize-error": "^4.1.0", - "stack-chain": "^2.0.0", - "stacktrace-js": "^2.0.0", - "string-argv": "^0.3.0", - "title-case": "^2.1.1", - "util-arity": "^1.0.2", - "verror": "^1.9.0" - }, - "bin": { - "cucumber-js": "bin/cucumber-js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cucumber-expressions": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/cucumber-expressions/-/cucumber-expressions-8.3.0.tgz", - "integrity": "sha512-cP2ya0EiorwXBC7Ll7Cj7NELYbasNv9Ty42L4u7sso9KruWemWG1ZiTq4PMqir3SNDSrbykoqI5wZgMbLEDjLQ==", - "dev": true, - "dependencies": { - "becke-ch--regex--s0-0-v1--base--pl--lib": "^1.4.0", - "xregexp": "^4.2.4" - } - }, - "node_modules/cucumber-pretty": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cucumber-pretty/-/cucumber-pretty-6.0.0.tgz", - "integrity": "sha512-ddx/VInPVKFB7N86QujgLivihJhuzexKwExMuFaUjSlEs5zVVqBgaf55f88h97VafXTWX+ZAcxTUwMBS4mYj/g==", - "dev": true, - "dependencies": { - "cli-table3": "^0.5.1", - "colors": "^1.4.0", - "figures": "^3.0.0" - }, - "peerDependencies": { - "cucumber": ">=6.0.0" - } - }, - "node_modules/cucumber-pretty/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cucumber-pretty/node_modules/cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "colors": "^1.1.2" - } - }, - "node_modules/cucumber-pretty/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cucumber-pretty/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cucumber-pretty/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cucumber-tag-expressions": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/cucumber-tag-expressions/-/cucumber-tag-expressions-2.0.3.tgz", - "integrity": "sha512-+x5j1IfZrBtbvYHuoUX0rl4nUGxaey6Do9sM0CABmZfDCcWXuuRm1fQeCaklIYQgOFHQ6xOHvDSdkMHHpni6tQ==", - "dev": true - }, - "node_modules/cucumber/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cucumber/node_modules/cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "colors": "^1.1.2" - } - }, - "node_modules/cucumber/node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "node_modules/cucumber/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cucumber/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cucumber/node_modules/serialize-error": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-4.1.0.tgz", - "integrity": "sha512-5j9GgyGsP9vV9Uj1S0lDCvlsd+gc2LEPVK7HHHte7IyPwOD4lVQFeaX143gx3U5AnoCi+wbcb3mvaxVysjpxEw==", - "dev": true, - "dependencies": { - "type-fest": "^0.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cucumber/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cucumber/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cucumber/node_modules/type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/cyclist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", @@ -19205,16 +18839,6 @@ "@commitlint/load": ">6.1.1" } }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, "node_modules/d3-array": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", @@ -19348,27 +18972,6 @@ "d3-selection": "2" } }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -19506,27 +19109,6 @@ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, - "node_modules/deep-eql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", - "dev": true, - "dependencies": { - "type-detect": "0.1.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/deep-eql/node_modules/type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/deep-equal": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", @@ -19563,24 +19145,6 @@ "node": ">=0.10.0" } }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", @@ -19665,42 +19229,6 @@ "node": ">=0.10.0" } }, - "node_modules/degenerator": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz", - "integrity": "sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==", - "dev": true, - "dependencies": { - "ast-types": "^0.13.2", - "escodegen": "^1.8.1", - "esprima": "^4.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/degenerator/node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, "node_modules/del": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", @@ -19865,12 +19393,6 @@ "node": ">= 4.2.1" } }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -20142,26 +19664,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/duration": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", - "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "~0.10.46" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -20183,21 +19685,6 @@ "@json-rpc-tools/provider": "^1.5.5" } }, - "node_modules/ejs": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", - "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", - "dev": true, - "dependencies": { - "jake": "^10.6.1" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/electron-to-chromium": { "version": "1.4.151", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.151.tgz", @@ -20482,18 +19969,6 @@ "node": ">= 8" } }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", @@ -20630,17 +20105,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, "node_modules/es5-shim": { "version": "4.6.7", "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.7.tgz", @@ -20656,33 +20120,12 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, "node_modules/es6-shim": { "version": "0.35.6", "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.6.tgz", "integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==", "dev": true }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -21459,21 +20902,6 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, - "node_modules/ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dev": true, - "dependencies": { - "type": "^2.0.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", - "dev": true - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -21674,15 +21102,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/extsprintf": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.0.tgz", - "integrity": "sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -21820,21 +21239,6 @@ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -21918,24 +21322,6 @@ "node": ">= 10.0.0" } }, - "node_modules/file-uri-to-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", - "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/filelist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", - "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.4" - } - }, "node_modules/filesize": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", @@ -22086,18 +21472,6 @@ "node": "^8.13.0 || >=10.10.0" } }, - "node_modules/flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "dependencies": { - "is-buffer": "~2.0.3" - }, - "bin": { - "flat": "cli.js" - } - }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -22126,29 +21500,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/flat/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/flatted": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", @@ -22309,15 +21660,6 @@ "node": ">= 8" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", @@ -22675,52 +22017,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "dev": true, - "dependencies": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ftp/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/ftp/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ftp/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "node_modules/ftp/node_modules/xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -22986,78 +22282,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", - "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "data-uri-to-buffer": "3", - "debug": "4", - "file-uri-to-path": "2", - "fs-extra": "^8.1.0", - "ftp": "^0.3.10" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/get-uri/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/get-uri/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/get-uri/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/get-uri/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/get-uri/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -23067,24 +22291,6 @@ "node": ">=0.10.0" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/gherkin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-5.0.0.tgz", - "integrity": "sha1-lt70EZjsOQgli1Ea909lWidk0qE=", - "dev": true, - "bin": { - "gherkin-javascript": "bin/gherkin" - } - }, "node_modules/git-parse": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/git-parse/-/git-parse-1.0.4.tgz", @@ -23494,15 +22700,6 @@ "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" } }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, "node_modules/gtoken": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.2.1.tgz", @@ -23551,29 +22748,6 @@ "uglify-js": "^3.1.4" } }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -24267,21 +23441,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, "node_modules/http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -25130,12 +24289,6 @@ "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", "dev": true }, - "node_modules/is-generator": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", - "integrity": "sha1-wUwhBX7TbjKNuANHlmxpP4hjifM=", - "dev": true - }, "node_modules/is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", @@ -25175,15 +24328,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -25560,12 +24704,6 @@ "unfetch": "^4.2.0" } }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, "node_modules/istanbul-lib-coverage": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", @@ -25702,24 +24840,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jake": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", - "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", - "dev": true, - "dependencies": { - "async": "0.9.x", - "chalk": "^2.4.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/java-properties": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", @@ -29557,12 +28677,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, "node_modules/jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", @@ -29710,12 +28824,6 @@ "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==" }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -29775,30 +28883,6 @@ "node": "*" } }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "node_modules/jsprim/node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, "node_modules/jump.js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/jump.js/-/jump.js-1.0.2.tgz", @@ -29893,15 +28977,6 @@ "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==", "dev": true }, - "node_modules/knuth-shuffle-seeded": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz", - "integrity": "sha1-AfG2VzOqdUDuCNiwF0Fk0iCB5OE=", - "dev": true, - "dependencies": { - "seed-random": "~2.2.0" - } - }, "node_modules/lazy-universal-dotenv": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz", @@ -30256,72 +29331,6 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, - "node_modules/lodash._arraycopy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", - "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=", - "dev": true - }, - "node_modules/lodash._arrayeach": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz", - "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754=", - "dev": true - }, - "node_modules/lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true, - "dependencies": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "node_modules/lodash._baseclone": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz", - "integrity": "sha1-MDUZv2OT/n5C802LYw73eU41Qrc=", - "dev": true, - "dependencies": { - "lodash._arraycopy": "^3.0.0", - "lodash._arrayeach": "^3.0.0", - "lodash._baseassign": "^3.0.0", - "lodash._basefor": "^3.0.0", - "lodash.isarray": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "node_modules/lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "node_modules/lodash._basefor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", - "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=", - "dev": true - }, - "node_modules/lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", - "dev": true - }, - "node_modules/lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "node_modules/lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, "node_modules/lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", @@ -30332,17 +29341,6 @@ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" }, - "node_modules/lodash.clone": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-3.0.3.tgz", - "integrity": "sha1-hGiMc9MrWpDKJWFpY/GJJSqZcEM=", - "dev": true, - "dependencies": { - "lodash._baseclone": "^3.0.0", - "lodash._bindcallback": "^3.0.0", - "lodash._isiterateecall": "^3.0.0" - } - }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -30354,12 +29352,6 @@ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" }, - "node_modules/lodash.defaultsdeep": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", - "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", - "dev": true - }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -30372,29 +29364,6 @@ "integrity": "sha1-rXvGpOZH15yXLhuA/u968VYmeHY=", "dev": true }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "node_modules/lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "node_modules/lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "dependencies": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, "node_modules/lodash.map": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", @@ -31593,333 +30562,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mkpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-1.0.0.tgz", - "integrity": "sha1-67Opd+evHGg65v2hK1Raa6bFhT0=", - "dev": true - }, - "node_modules/mocha": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", - "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", - "dev": true, - "dependencies": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "2.2.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.4", - "ms": "2.1.1", - "node-environment-flags": "1.0.5", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/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/mocha/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/mocha/node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/mocha/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "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": "*" - } - }, - "node_modules/mocha/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "dependencies": { - "chalk": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mocha/node_modules/mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/mocha/node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mocha/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/mocha/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/mocha/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, "node_modules/moment": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", @@ -31947,23 +30589,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "node_modules/nan": { "version": "2.16.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", @@ -32047,15 +30672,6 @@ "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", "dev": true }, - "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/next": { "version": "12.1.4", "resolved": "https://registry.npmjs.org/next/-/next-12.1.4.tgz", @@ -32153,12 +30769,6 @@ "node": ">= 4.0.0" } }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, "node_modules/next-with-apollo": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/next-with-apollo/-/next-with-apollo-5.3.0.tgz", @@ -32178,100 +30788,6 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "node_modules/nightwatch": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/nightwatch/-/nightwatch-1.7.8.tgz", - "integrity": "sha512-GTY2VoPU2EuoBUB+mz5tAjeEWRQmuT54Il2lOUTmpv87D7cO8fXaadrxSHwl2YDX9rDFvNZovqwiKBtk3/5R6w==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "chai-nightwatch": "^0.4.0", - "ci-info": "^2.0.0", - "didyoumean": "^1.2.1", - "dotenv": "7.0.0", - "ejs": "^3.1.6", - "envinfo": "^7.5.1", - "lodash.clone": "3.0.3", - "lodash.defaultsdeep": "^4.6.1", - "lodash.merge": "^4.6.2", - "minimatch": "3.0.4", - "minimist": "^1.2.5", - "mkpath": "1.0.0", - "mocha": "6.2.3", - "ora": "^4.0.3", - "proxy-agent": "^4.0.1", - "request": "^2.88.2", - "request-promise": "^4.2.5", - "semver": "^6.3.0", - "strip-ansi": "^6.0.0" - }, - "bin": { - "nightwatch": "bin/nightwatch" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "chromedriver": "*", - "geckodriver": "*" - }, - "peerDependenciesMeta": { - "chromedriver": { - "optional": true - }, - "geckodriver": { - "optional": true - } - } - }, - "node_modules/nightwatch-api": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/nightwatch-api/-/nightwatch-api-3.0.2.tgz", - "integrity": "sha512-jxnjqt09kgYy0KWixGMGe7znc0xHSKqrY91QX9tG5qhShoPbfz7ULqtLCleKvtsgtKkHJOm/ml8KhrOb8LkKEg==", - "dev": true, - "dependencies": { - "@types/debug": "^4.1.5", - "debug": "^4.3.1" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "nightwatch": "^1.5.1" - } - }, - "node_modules/nightwatch-api/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/nightwatch-api/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/nightwatch/node_modules/dotenv": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", - "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -32305,25 +30821,6 @@ "node": ">= 0.10.5" } }, - "node_modules/node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", - "dev": true, - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "node_modules/node-environment-flags/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/node-fetch": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", @@ -32570,15 +31067,6 @@ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -32906,169 +31394,6 @@ "node": ">= 0.8.0" } }, - "node_modules/ora": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", - "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.2.0", - "is-interactive": "^1.0.0", - "log-symbols": "^3.0.0", - "mute-stream": "0.0.8", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/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/ora/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/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/ora/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/ora/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/ora/node_modules/log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/log-symbols/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/ora/node_modules/log-symbols/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/ora/node_modules/log-symbols/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/ora/node_modules/log-symbols/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/ora/node_modules/log-symbols/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/ora/node_modules/log-symbols/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/ora/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/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -33263,75 +31588,6 @@ "node": ">=6" } }, - "node_modules/pac-proxy-agent": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz", - "integrity": "sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4", - "get-uri": "3", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "5", - "pac-resolver": "^4.1.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pac-proxy-agent/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/pac-proxy-agent/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/pac-resolver": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.2.0.tgz", - "integrity": "sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==", - "dev": true, - "dependencies": { - "degenerator": "^2.2.0", - "ip": "^1.1.5", - "netmask": "^2.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pad-right": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", - "integrity": "sha1-b7ySQEXSRPKiokRQMGDTv8YAl3Q=", - "dev": true, - "dependencies": { - "repeat-string": "^1.5.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -33669,12 +31925,6 @@ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "dev": true }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -33793,6 +32043,18 @@ "node": ">=4" } }, + "node_modules/playwright-core": { + "version": "1.25.0", + "resolved": "https://registry.npmmirror.com/playwright-core/-/playwright-core-1.25.0.tgz", + "integrity": "sha512-kZ3Jwaf3wlu0GgU0nB8UMQ+mXFTqBIFz9h1svTlNduNKjnbPXFxw7mJanLVjqxHJRn62uBfmgBj93YHidk2N5Q==", + "dev": true, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/pngjs": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", @@ -35747,15 +34009,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -35892,63 +34145,6 @@ "node": ">= 0.10" } }, - "node_modules/proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz", - "integrity": "sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.0", - "debug": "4", - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^4.1.0", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/proxy-agent/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/proxy-agent/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/proxy-agent/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -37913,121 +36109,6 @@ "node": ">=0.10" } }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", - "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", - "deprecated": "request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "bluebird": "^3.5.0", - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -38177,19 +36258,6 @@ "lowercase-keys": "^2.0.0" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -38628,12 +36696,6 @@ "node": ">=10.0.0" } }, - "node_modules/seed-random": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", - "integrity": "sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ=", - "dev": true - }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -38950,16 +37012,6 @@ "node": ">=0.10.0" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, "node_modules/snake-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", @@ -39125,57 +37177,6 @@ "node": ">=0.10.0" } }, - "node_modules/socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", - "dev": true, - "dependencies": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/socks-proxy-agent/node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socks-proxy-agent/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/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -39306,31 +37307,6 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ssri": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", @@ -39345,21 +37321,6 @@ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, - "node_modules/stack-chain": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-2.0.0.tgz", - "integrity": "sha512-GGrHXePi305aW7XQweYZZwiRwR7Js3MWoK/EHzzB9ROdc75nCnjSJVi21rdAGxFl+yCx2L2qdfl5y7NO4lTyqg==", - "dev": true - }, - "node_modules/stack-generator": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.5.tgz", - "integrity": "sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q==", - "dev": true, - "dependencies": { - "stackframe": "^1.1.1" - } - }, "node_modules/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", @@ -39387,36 +37348,6 @@ "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", "dev": true }, - "node_modules/stacktrace-gps": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.4.tgz", - "integrity": "sha512-qIr8x41yZVSldqdqe6jciXEaSCKw1U8XTXpjDuy0ki/apyTn/r3w9hDAAQOhZdxvsC93H+WwwEu5cq5VemzYeg==", - "dev": true, - "dependencies": { - "source-map": "0.5.6", - "stackframe": "^1.1.1" - } - }, - "node_modules/stacktrace-gps/node_modules/source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stacktrace-js": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", - "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", - "dev": true, - "dependencies": { - "error-stack-parser": "^2.0.6", - "stack-generator": "^2.0.5", - "stacktrace-gps": "^3.0.4" - } - }, "node_modules/state-toggle": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", @@ -39460,15 +37391,6 @@ "node": ">= 0.6" } }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/store2": { "version": "2.14.1", "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.1.tgz", @@ -39823,15 +37745,6 @@ } ] }, - "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -40049,15 +37962,6 @@ "node": ">=8" } }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/style-loader": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", @@ -41433,27 +39337,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dev": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", @@ -41536,37 +39419,6 @@ "@popperjs/core": "^2.8.3" } }, - "node_modules/title-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", - "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", - "dev": true, - "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.0.3" - } - }, - "node_modules/title-case/node_modules/lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "node_modules/title-case/node_modules/no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "dependencies": { - "lower-case": "^1.1.1" - } - }, - "node_modules/title-case/node_modules/upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -42167,18 +40019,6 @@ "node": "*" } }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -42864,12 +40704,6 @@ "inherits": "2.0.3" } }, - "node_modules/util-arity": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", - "integrity": "sha1-WdAa8f2z/t4KxOYysKtfbOl8kzA=", - "dev": true - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -42975,20 +40809,6 @@ "node": ">= 0.8" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "node_modules/vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", @@ -43446,15 +41266,6 @@ "node": ">=0.10.0" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, "node_modules/web-namespaces": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", @@ -44456,15 +42267,6 @@ "node": ">=0.4.0" } }, - "node_modules/xregexp": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.4.1.tgz", - "integrity": "sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag==", - "dev": true, - "dependencies": { - "@babel/runtime-corejs3": "^7.12.1" - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -44519,187 +42321,6 @@ "node": ">=10" } }, - "node_modules/yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "dependencies": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/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/yargs-unparser/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/yargs-unparser/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs-unparser/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/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/yargs-unparser/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs-unparser/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/yargs-unparser/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -49971,6 +47592,16 @@ "resolved": "https://registry.npmjs.org/@pedrouid/environment/-/environment-1.0.1.tgz", "integrity": "sha512-HaW78NszGzRZd9SeoI3JD11JqY+lubnaOx7Pewj5pfjqWXOEATpeKIFb9Z4t2WBUK2iryiXX3lzWwmYWgUL0Ug==" }, + "@playwright/test": { + "version": "1.25.0", + "resolved": "https://registry.npmmirror.com/@playwright/test/-/test-1.25.0.tgz", + "integrity": "sha512-j4EZhTTQI3dBeWblE21EV//swwmBtOpIrLdOIJIRv4uqsLdHgBg1z+JtTg+AeC5o2bAXIE26kDNW5A0TimG8Bg==", + "dev": true, + "requires": { + "@types/node": "*", + "playwright-core": "1.25.0" + } + }, "@pmmmwh/react-refresh-webpack-plugin": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz", @@ -53818,12 +51449,6 @@ "@types/d3-selection": "*" } }, - "@types/debug": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", - "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", - "dev": true - }, "@types/eslint": { "version": "8.4.5", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", @@ -55153,12 +52778,6 @@ "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", "dev": true }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true - }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -55792,15 +53411,6 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -55848,53 +53458,18 @@ } } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "assertion-error-formatter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/assertion-error-formatter/-/assertion-error-formatter-3.0.0.tgz", - "integrity": "sha512-6YyAVLrEze0kQ7CmJfUgrLHb+Y7XghmL2Ie7ijVa2Y9ynP3LV+VDiwFk62Dn0qtqbmY0BT0ss6p1xxpiF2PYbQ==", - "dev": true, - "requires": { - "diff": "^4.0.1", - "pad-right": "^0.2.2", - "repeat-string": "^1.6.1" - } - }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, - "ast-types": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz", - "integrity": "sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==", - "dev": true - }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true - }, "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", @@ -55974,18 +53549,6 @@ "integrity": "sha512-CHBC6gQGCIzjZ09tJ+XmpQoZOn4GdWePB4qUweCaKNJ0D3f115YdhmYVTZ4rMVpiJ3cFzZcTYK1VMYEICV4YXw==", "dev": true }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, "axe-core": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.2.tgz", @@ -56675,26 +54238,11 @@ "integrity": "sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, "bech32": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" }, - "becke-ch--regex--s0-0-v1--base--pl--lib": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz", - "integrity": "sha1-Qpzuu/pffpNueNc/vcfacWKyDiA=", - "dev": true - }, "better-opn": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz", @@ -56943,12 +54491,6 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -57451,36 +54993,12 @@ "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, "ccount": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", "dev": true }, - "chai-nightwatch": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chai-nightwatch/-/chai-nightwatch-0.4.0.tgz", - "integrity": "sha512-1xw74vR02XiHzo4wQfHqme2nqYPIzYnK5s3DMST7UW8FIHDWD7qplg+DTJ5FIPcmWiGYX/Re0CzvOcZQKJm1Uw==", - "dev": true, - "requires": { - "assertion-error": "1.0.0", - "deep-eql": "0.1.3" - }, - "dependencies": { - "assertion-error": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz", - "integrity": "sha1-x/hUOP3UZrx8oWq5DIFRN5el0js=", - "dev": true - } - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -57677,15 +55195,6 @@ "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, "cli-progress": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.9.0.tgz", @@ -57721,12 +55230,6 @@ } } }, - "cli-spinners": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", - "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", - "dev": true - }, "cli-table3": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", @@ -59199,183 +56702,6 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.6.tgz", "integrity": "sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw==" }, - "cucumber": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-6.0.5.tgz", - "integrity": "sha512-x+W9Fwk6TvcapQsYMxwFU5AsQJDOIJVGrPKmH15OC7jzb9/Dk7Hb0ZAyw4WcpaDcUDRc8bi2k2yJejDp5eTRlg==", - "dev": true, - "requires": { - "assertion-error-formatter": "^3.0.0", - "bluebird": "^3.4.1", - "cli-table3": "^0.5.1", - "colors": "^1.1.2", - "commander": "^3.0.1", - "cucumber-expressions": "^8.1.0", - "cucumber-tag-expressions": "^2.0.2", - "duration": "^0.2.1", - "escape-string-regexp": "^2.0.0", - "figures": "^3.0.0", - "gherkin": "5.0.0", - "glob": "^7.1.3", - "indent-string": "^4.0.0", - "is-generator": "^1.0.2", - "is-stream": "^2.0.0", - "knuth-shuffle-seeded": "^1.0.6", - "lodash": "^4.17.14", - "mz": "^2.4.0", - "progress": "^2.0.0", - "resolve": "^1.3.3", - "serialize-error": "^4.1.0", - "stack-chain": "^2.0.0", - "stacktrace-js": "^2.0.0", - "string-argv": "^0.3.0", - "title-case": "^2.1.1", - "util-arity": "^1.0.2", - "verror": "^1.9.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "dev": true, - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - } - }, - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "serialize-error": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-4.1.0.tgz", - "integrity": "sha512-5j9GgyGsP9vV9Uj1S0lDCvlsd+gc2LEPVK7HHHte7IyPwOD4lVQFeaX143gx3U5AnoCi+wbcb3mvaxVysjpxEw==", - "dev": true, - "requires": { - "type-fest": "^0.3.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "dev": true - } - } - }, - "cucumber-expressions": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/cucumber-expressions/-/cucumber-expressions-8.3.0.tgz", - "integrity": "sha512-cP2ya0EiorwXBC7Ll7Cj7NELYbasNv9Ty42L4u7sso9KruWemWG1ZiTq4PMqir3SNDSrbykoqI5wZgMbLEDjLQ==", - "dev": true, - "requires": { - "becke-ch--regex--s0-0-v1--base--pl--lib": "^1.4.0", - "xregexp": "^4.2.4" - } - }, - "cucumber-pretty": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cucumber-pretty/-/cucumber-pretty-6.0.0.tgz", - "integrity": "sha512-ddx/VInPVKFB7N86QujgLivihJhuzexKwExMuFaUjSlEs5zVVqBgaf55f88h97VafXTWX+ZAcxTUwMBS4mYj/g==", - "dev": true, - "requires": { - "cli-table3": "^0.5.1", - "colors": "^1.4.0", - "figures": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "dev": true, - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "cucumber-tag-expressions": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/cucumber-tag-expressions/-/cucumber-tag-expressions-2.0.3.tgz", - "integrity": "sha512-+x5j1IfZrBtbvYHuoUX0rl4nUGxaey6Do9sM0CABmZfDCcWXuuRm1fQeCaklIYQgOFHQ6xOHvDSdkMHHpni6tQ==", - "dev": true - }, "cyclist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", @@ -59396,16 +56722,6 @@ "word-wrap": "^1.0.3" } }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, "d3-array": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", @@ -59538,21 +56854,6 @@ "d3-timer": "1 - 2" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", - "dev": true - }, "data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -59654,23 +56955,6 @@ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, - "deep-eql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", - "dev": true, - "requires": { - "type-detect": "0.1.1" - }, - "dependencies": { - "type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", - "dev": true - } - } - }, "deep-equal": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", @@ -59701,23 +56985,6 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - } - } - }, "defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", @@ -59780,32 +57047,6 @@ } } }, - "degenerator": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz", - "integrity": "sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==", - "dev": true, - "requires": { - "ast-types": "^0.13.2", - "escodegen": "^1.8.1", - "esprima": "^4.0.0" - }, - "dependencies": { - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - } - } - }, "del": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", @@ -59927,12 +57168,6 @@ "debug": "^2.6.0" } }, - "didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -60179,26 +57414,6 @@ } } }, - "duration": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", - "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.46" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -60220,15 +57435,6 @@ "@json-rpc-tools/provider": "^1.5.5" } }, - "ejs": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", - "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", - "dev": true, - "requires": { - "jake": "^10.6.1" - } - }, "electron-to-chromium": { "version": "1.4.151", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.151.tgz", @@ -60458,12 +57664,6 @@ } } }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, "errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", @@ -60586,17 +57786,6 @@ "is-symbol": "^1.0.2" } }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, "es5-shim": { "version": "4.6.7", "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.7.tgz", @@ -60609,33 +57798,12 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, "es6-shim": { "version": "0.35.6", "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.6.tgz", "integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==", "dev": true }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -61269,23 +58437,6 @@ } } }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dev": true, - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", - "dev": true - } - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -61437,12 +58588,6 @@ } } }, - "extsprintf": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.0.tgz", - "integrity": "sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=", - "dev": true - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -61571,15 +58716,6 @@ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -61641,21 +58777,6 @@ } } }, - "file-uri-to-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", - "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", - "dev": true - }, - "filelist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", - "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, "filesize": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", @@ -61777,23 +58898,6 @@ "@firebase/util": "0.3.2" } }, - "flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - }, - "dependencies": { - "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 - } - } - }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -61939,12 +59043,6 @@ } } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, "fork-ts-checker-webpack-plugin": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", @@ -62213,48 +59311,6 @@ "dev": true, "optional": true }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "dev": true, - "requires": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", - "dev": true - } - } - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -62448,84 +59504,12 @@ "get-intrinsic": "^1.1.1" } }, - "get-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", - "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "data-uri-to-buffer": "3", - "debug": "4", - "file-uri-to-path": "2", - "fs-extra": "^8.1.0", - "ftp": "^0.3.10" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "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 - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - } - } - }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "gherkin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-5.0.0.tgz", - "integrity": "sha1-lt70EZjsOQgli1Ea909lWidk0qE=", - "dev": true - }, "git-parse": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/git-parse/-/git-parse-1.0.4.tgz", @@ -62850,12 +59834,6 @@ "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.11.0.tgz", "integrity": "sha512-VmsD5pJqWJnQZMUeRwrDhfgoyqcfwEkvtpANqcoUG8/tOLkwNgU9mzub/Mc78OJMhHjx7gfAMTxzdG43VGg3bA==" }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, "gtoken": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.2.1.tgz", @@ -62887,22 +59865,6 @@ "wordwrap": "^1.0.0" } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, "hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -63458,17 +60420,6 @@ } } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -64094,12 +61045,6 @@ "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", "dev": true }, - "is-generator": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", - "integrity": "sha1-wUwhBX7TbjKNuANHlmxpP4hjifM=", - "dev": true - }, "is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", @@ -64125,12 +61070,6 @@ "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, "is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -64402,12 +61341,6 @@ "unfetch": "^4.2.0" } }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, "istanbul-lib-coverage": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", @@ -64513,18 +61446,6 @@ "iterate-iterator": "^1.0.1" } }, - "jake": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", - "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", - "dev": true, - "requires": { - "async": "0.9.x", - "chalk": "^2.4.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - } - }, "java-properties": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", @@ -67500,12 +64421,6 @@ "esprima": "^4.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, "jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", @@ -67620,12 +64535,6 @@ "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==" }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -67673,26 +64582,6 @@ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==" }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - } - } - }, "jump.js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/jump.js/-/jump.js-1.0.2.tgz", @@ -67771,15 +64660,6 @@ "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==", "dev": true }, - "knuth-shuffle-seeded": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz", - "integrity": "sha1-AfG2VzOqdUDuCNiwF0Fk0iCB5OE=", - "dev": true, - "requires": { - "seed-random": "~2.2.0" - } - }, "lazy-universal-dotenv": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz", @@ -68056,72 +64936,6 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, - "lodash._arraycopy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", - "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=", - "dev": true - }, - "lodash._arrayeach": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz", - "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754=", - "dev": true - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true, - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash._baseclone": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz", - "integrity": "sha1-MDUZv2OT/n5C802LYw73eU41Qrc=", - "dev": true, - "requires": { - "lodash._arraycopy": "^3.0.0", - "lodash._arrayeach": "^3.0.0", - "lodash._baseassign": "^3.0.0", - "lodash._basefor": "^3.0.0", - "lodash.isarray": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basefor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", - "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=", - "dev": true - }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, "lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", @@ -68132,17 +64946,6 @@ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" }, - "lodash.clone": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-3.0.3.tgz", - "integrity": "sha1-hGiMc9MrWpDKJWFpY/GJJSqZcEM=", - "dev": true, - "requires": { - "lodash._baseclone": "^3.0.0", - "lodash._bindcallback": "^3.0.0", - "lodash._isiterateecall": "^3.0.0" - } - }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -68154,12 +64957,6 @@ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" }, - "lodash.defaultsdeep": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", - "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", - "dev": true - }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -68172,29 +64969,6 @@ "integrity": "sha1-rXvGpOZH15yXLhuA/u968VYmeHY=", "dev": true }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, "lodash.map": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", @@ -69149,266 +65923,6 @@ "minimist": "^1.2.5" } }, - "mkpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-1.0.0.tgz", - "integrity": "sha1-67Opd+evHGg65v2hK1Raa6bFhT0=", - "dev": true - }, - "mocha": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", - "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", - "dev": true, - "requires": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "2.2.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.4", - "ms": "2.1.1", - "node-environment-flags": "1.0.5", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "dependencies": { - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "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 - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "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" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, - "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "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": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, "moment": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", @@ -69433,23 +65947,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "nan": { "version": "2.16.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", @@ -69518,12 +66015,6 @@ "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", "dev": true }, - "netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", - "dev": true - }, "next": { "version": "12.1.4", "resolved": "https://registry.npmjs.org/next/-/next-12.1.4.tgz", @@ -69587,12 +66078,6 @@ } } }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, "next-with-apollo": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/next-with-apollo/-/next-with-apollo-5.3.0.tgz", @@ -69607,69 +66092,6 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "nightwatch": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/nightwatch/-/nightwatch-1.7.8.tgz", - "integrity": "sha512-GTY2VoPU2EuoBUB+mz5tAjeEWRQmuT54Il2lOUTmpv87D7cO8fXaadrxSHwl2YDX9rDFvNZovqwiKBtk3/5R6w==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "chai-nightwatch": "^0.4.0", - "ci-info": "^2.0.0", - "didyoumean": "^1.2.1", - "dotenv": "7.0.0", - "ejs": "^3.1.6", - "envinfo": "^7.5.1", - "lodash.clone": "3.0.3", - "lodash.defaultsdeep": "^4.6.1", - "lodash.merge": "^4.6.2", - "minimatch": "3.0.4", - "minimist": "^1.2.5", - "mkpath": "1.0.0", - "mocha": "6.2.3", - "ora": "^4.0.3", - "proxy-agent": "^4.0.1", - "request": "^2.88.2", - "request-promise": "^4.2.5", - "semver": "^6.3.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "dotenv": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", - "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", - "dev": true - } - } - }, - "nightwatch-api": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/nightwatch-api/-/nightwatch-api-3.0.2.tgz", - "integrity": "sha512-jxnjqt09kgYy0KWixGMGe7znc0xHSKqrY91QX9tG5qhShoPbfz7ULqtLCleKvtsgtKkHJOm/ml8KhrOb8LkKEg==", - "dev": true, - "requires": { - "@types/debug": "^4.1.5", - "debug": "^4.3.1" - }, - "dependencies": { - "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" - } - }, - "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 - } - } - }, "no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -69702,24 +66124,6 @@ "minimatch": "^3.0.2" } }, - "node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "node-fetch": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", @@ -69940,12 +66344,6 @@ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -70188,134 +66586,6 @@ "word-wrap": "~1.2.3" } }, - "ora": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", - "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.2.0", - "is-interactive": "^1.0.0", - "log-symbols": "^3.0.0", - "mute-stream": "0.0.8", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "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" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.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 - }, - "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 - }, - "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2" - }, - "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" - } - } - } - }, - "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" - } - } - } - }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -70453,60 +66723,6 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, - "pac-proxy-agent": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz", - "integrity": "sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4", - "get-uri": "3", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "5", - "pac-resolver": "^4.1.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "5" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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 - } - } - }, - "pac-resolver": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.2.0.tgz", - "integrity": "sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ==", - "dev": true, - "requires": { - "degenerator": "^2.2.0", - "ip": "^1.1.5", - "netmask": "^2.0.1" - } - }, - "pad-right": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", - "integrity": "sha1-b7ySQEXSRPKiokRQMGDTv8YAl3Q=", - "dev": true, - "requires": { - "repeat-string": "^1.5.2" - } - }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -70804,12 +67020,6 @@ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "dev": true }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -70894,6 +67104,12 @@ } } }, + "playwright-core": { + "version": "1.25.0", + "resolved": "https://registry.npmmirror.com/playwright-core/-/playwright-core-1.25.0.tgz", + "integrity": "sha512-kZ3Jwaf3wlu0GgU0nB8UMQ+mXFTqBIFz9h1svTlNduNKjnbPXFxw7mJanLVjqxHJRn62uBfmgBj93YHidk2N5Q==", + "dev": true + }, "pngjs": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", @@ -72382,12 +68598,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -72501,54 +68711,6 @@ "ipaddr.js": "1.9.1" } }, - "proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz", - "integrity": "sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==", - "dev": true, - "requires": { - "agent-base": "^6.0.0", - "debug": "4", - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^4.1.0", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^5.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "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 - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -74055,96 +70217,6 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "request-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", - "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.0", - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -74265,16 +70337,6 @@ "lowercase-keys": "^2.0.0" } }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -74600,12 +70662,6 @@ "node-gyp-build": "^4.2.0" } }, - "seed-random": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", - "integrity": "sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ=", - "dev": true - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -74871,12 +70927,6 @@ "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "dev": true }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true - }, "snake-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", @@ -75014,44 +71064,6 @@ } } }, - "socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", - "dev": true, - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "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 - } - } - }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -75163,23 +71175,6 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, "ssri": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", @@ -75194,21 +71189,6 @@ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, - "stack-chain": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-2.0.0.tgz", - "integrity": "sha512-GGrHXePi305aW7XQweYZZwiRwR7Js3MWoK/EHzzB9ROdc75nCnjSJVi21rdAGxFl+yCx2L2qdfl5y7NO4lTyqg==", - "dev": true - }, - "stack-generator": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.5.tgz", - "integrity": "sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q==", - "dev": true, - "requires": { - "stackframe": "^1.1.1" - } - }, "stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", @@ -75232,35 +71212,6 @@ "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", "dev": true }, - "stacktrace-gps": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.4.tgz", - "integrity": "sha512-qIr8x41yZVSldqdqe6jciXEaSCKw1U8XTXpjDuy0ki/apyTn/r3w9hDAAQOhZdxvsC93H+WwwEu5cq5VemzYeg==", - "dev": true, - "requires": { - "source-map": "0.5.6", - "stackframe": "^1.1.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", - "dev": true - } - } - }, - "stacktrace-js": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", - "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", - "dev": true, - "requires": { - "error-stack-parser": "^2.0.6", - "stack-generator": "^2.0.5", - "stacktrace-gps": "^3.0.4" - } - }, "state-toggle": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", @@ -75293,12 +71244,6 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, "store2": { "version": "2.14.1", "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.1.tgz", @@ -75565,12 +71510,6 @@ } } }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -75732,12 +71671,6 @@ "min-indent": "^1.0.0" } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, "style-loader": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", @@ -76750,24 +72683,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, "throat": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", @@ -76846,39 +72761,6 @@ "@popperjs/core": "^2.8.3" } }, - "title-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", - "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.0.3" - }, - "dependencies": { - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "requires": { - "lower-case": "^1.1.1" - } - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - } - } - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -77318,18 +73200,6 @@ "safe-buffer": "^5.0.1" } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -77822,12 +73692,6 @@ } } }, - "util-arity": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", - "integrity": "sha1-WdAa8f2z/t4KxOYysKtfbOl8kzA=", - "dev": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -77910,17 +73774,6 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", @@ -78284,15 +74137,6 @@ } } }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, "web-namespaces": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", @@ -79092,15 +74936,6 @@ "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" }, - "xregexp": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.4.1.tgz", - "integrity": "sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag==", - "dev": true, - "requires": { - "@babel/runtime-corejs3": "^7.12.1" - } - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -79174,150 +75009,6 @@ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true }, - "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "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 - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "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": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, "yarn": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.10.tgz", diff --git a/package.json b/package.json index b567938596..7acd032f5f 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "sideEffects": false, "author": "Matters ", "engines": { - "node": "16.14" + "node": "16.16" }, "license": "Apache-2.0", "scripts": { @@ -28,7 +28,6 @@ "gen:watch:prod": "npm run gen:type:prod -- --watch", "gen:clean": "find . | grep -E '__generated__' | xargs rm -rf", "gen:fragmentTypes": "node bin/buildFragmentTypes.js", - "bdd": "cucumber-js bdd/features/*.feature -r cucumber.conf.js -r \"bdd/steps/*.js\" --format node_modules/cucumber-pretty", "storybook": "start-storybook -p 6006", "build-storybook": "build-storybook", "prepare": "husky install", @@ -111,6 +110,7 @@ "devDependencies": { "@apollo/react-testing": "^3.1.3", "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@playwright/test": "^1.25.0", "@storybook/addon-a11y": "^6.4.9", "@storybook/addon-actions": "^6.4.9", "@storybook/addon-essentials": "^6.4.9", @@ -146,15 +146,11 @@ "babel-plugin-dynamic-import-node": "^2.3.3", "babel-polyfill": "^6.26.0", "chromedriver": "^92.0.1", - "cucumber": "^6.0.5", - "cucumber-pretty": "^6.0.0", "cz-conventional-changelog": "^3.3.0", "file-loader": "^6.2.0", "geckodriver": "^2.0.2", "identity-obj-proxy": "^3.0.0", "jest": "^27.0.6", - "nightwatch": "^1.7.8", - "nightwatch-api": "^3.0.2", "postcss-calc": "^7.0.5", "postcss-color-function": "^4.1.0", "postcss-mixins": "^6.2.3", diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000000..92e807dca9 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,107 @@ +import type { PlaywrightTestConfig } from '@playwright/test' +import { devices } from '@playwright/test' + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// require('dotenv').config(); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +const config: PlaywrightTestConfig = { + testDir: './tests', + /* Maximum time one test can run for. */ + timeout: 30 * 1000, + expect: { + /** + * Maximum time expect() should wait for the condition to be met. + * For example in `await expect(locator).toHaveText();` + */ + timeout: 5000, + }, + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */ + actionTimeout: 0, + /* Base URL to use in actions like `await page.goto('/')`. */ + // baseURL: 'http://localhost:3000', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { + ...devices['Desktop Chrome'], + }, + }, + + { + name: 'firefox', + use: { + ...devices['Desktop Firefox'], + }, + }, + + { + name: 'webkit', + use: { + ...devices['Desktop Safari'], + }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { + // ...devices['Pixel 5'], + // }, + // }, + // { + // name: 'Mobile Safari', + // use: { + // ...devices['iPhone 12'], + // }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { + // channel: 'msedge', + // }, + // }, + // { + // name: 'Google Chrome', + // use: { + // channel: 'chrome', + // }, + // }, + ], + + /* Folder for test artifacts such as screenshots, videos, traces, etc. */ + // outputDir: 'test-results/', + + /* Run your local dev server before starting the tests */ + // webServer: { + // command: 'npm run start', + // port: 3000, + // }, +} + +export default config diff --git a/tests/example.spec.ts b/tests/example.spec.ts new file mode 100644 index 0000000000..ab79c198d4 --- /dev/null +++ b/tests/example.spec.ts @@ -0,0 +1,20 @@ +import { test, expect } from '@playwright/test'; + +test('homepage has Playwright in title and get started link linking to the intro page', async ({ page }) => { + await page.goto('https://playwright.dev/'); + + // Expect a title "to contain" a substring. + await expect(page).toHaveTitle(/Playwright/); + + // create a locator + const getStarted = page.locator('text=Get Started'); + + // Expect an attribute "to be strictly equal" to the value. + await expect(getStarted).toHaveAttribute('href', '/docs/intro'); + + // Click the get started link. + await getStarted.click(); + + // Expects the URL to contain intro. + await expect(page).toHaveURL(/.*intro/); +}); From 386e7229ac7488583f9cd9d09f5c457d3ffdb52f Mon Sep 17 00:00:00 2001 From: Aka jazzy Date: Mon, 22 Aug 2022 20:31:49 +0800 Subject: [PATCH 02/55] feat(test): modify test.yml to enable test reporter --- .github/workflows/test.yml | 3 +++ package.json | 2 +- playwright.config.ts | 3 +-- tests/example.spec.ts | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index dca526a5bf..0928cc4e25 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -48,8 +48,11 @@ jobs: run: | npm run lint \ && npm run format:check + - name: Run Playwright tests run: npx playwright test + + - name: Output Playwright tests uses: actions/upload-artifact@v2 if: always() with: diff --git a/package.json b/package.json index 7acd032f5f..6f2bec3e8d 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "@matters/apollo-upload-client": "^11.1.0", "@matters/matters-editor": "^0.1.26", "@next/bundle-analyzer": "^12.0.9", + "@playwright/test": "^1.25.0", "@reach/alert": "^0.16.0", "@reach/dialog": "^0.16.2", "@reach/visually-hidden": "^0.16.0", @@ -110,7 +111,6 @@ "devDependencies": { "@apollo/react-testing": "^3.1.3", "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@playwright/test": "^1.25.0", "@storybook/addon-a11y": "^6.4.9", "@storybook/addon-actions": "^6.4.9", "@storybook/addon-essentials": "^6.4.9", diff --git a/playwright.config.ts b/playwright.config.ts index 92e807dca9..bf0686d50c 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,5 +1,4 @@ -import type { PlaywrightTestConfig } from '@playwright/test' -import { devices } from '@playwright/test' +import { devices, type PlaywrightTestConfig } from '@playwright/test' /** * Read environment variables from file. diff --git a/tests/example.spec.ts b/tests/example.spec.ts index ab79c198d4..28e8128fe5 100644 --- a/tests/example.spec.ts +++ b/tests/example.spec.ts @@ -1,4 +1,4 @@ -import { test, expect } from '@playwright/test'; +import { expect, test } from '@playwright/test'; test('homepage has Playwright in title and get started link linking to the intro page', async ({ page }) => { await page.goto('https://playwright.dev/'); From 735e9c3227e45ed0a78bd67f057f1c753b9c6fca Mon Sep 17 00:00:00 2001 From: Aka jazzy Date: Mon, 22 Aug 2022 20:40:33 +0800 Subject: [PATCH 03/55] feat(test): add playwright browsers installation --- .github/workflows/test.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0928cc4e25..47be8e0e58 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -48,7 +48,10 @@ jobs: run: | npm run lint \ && npm run format:check - + + - name: Install Playwright Browsers + run: npx playwright install --with-deps + - name: Run Playwright tests run: npx playwright test From f561860a87a3e01215a233b20be3c568fb09c2cc Mon Sep 17 00:00:00 2001 From: 49659410+tx0c <> Date: Tue, 23 Aug 2022 15:28:35 +0000 Subject: [PATCH 04/55] fix(prefetch-src): fix prefetch-src console warnings --- src/common/enums/csp.ts | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/src/common/enums/csp.ts b/src/common/enums/csp.ts index fc8de65ed5..4be8f3353b 100644 --- a/src/common/enums/csp.ts +++ b/src/common/enums/csp.ts @@ -25,7 +25,7 @@ const SCRIPT_SRC = [ // Stripe 'js.stripe.com', -].join(' ') +] // .join(' ') const STYLE_SRC = [ "'self'", @@ -35,7 +35,7 @@ const STYLE_SRC = [ // Programmable Google Search 'www.google.com/cse/', -].join(' ') +] // .join(' ') /* const { hostname: NEXT_PUBLIC_API_HOSTNAME } = new URL( process.env.NEXT_PUBLIC_API_URL as string @@ -60,7 +60,7 @@ const IMG_SRC = [ // GA 'www.google-analytics.com', -].join(' ') +] // .join(' ') const MEDIA_SRC = IMG_SRC @@ -113,7 +113,7 @@ const CONNECT_SRC = [ 'ipfs.stibarc.com/ipfs/', 'ipfs.best-practice.se/ipfs/', 'ipfs.2read.net/ipfs/', -].join(' ') +] // .join(' ') const FRAME_SRC = [ "'self'", @@ -132,6 +132,33 @@ const FRAME_SRC = [ // Stripe 'js.stripe.com', 'hooks.stripe.com', -].join(' ') +] // .join(' ') -export const CSP_POLICY = `default-src 'self'; script-src ${SCRIPT_SRC}; style-src ${STYLE_SRC}; img-src ${IMG_SRC}; media-src ${MEDIA_SRC}; frame-src ${FRAME_SRC}; connect-src ${CONNECT_SRC}` +const PREFETCH_SRC = [ + "'self'", + + // Next.js Assets + process.env.NEXT_PUBLIC_NEXT_ASSET_DOMAIN, +] // .join(' ') + +export const CSP_POLICY = Object.entries({ + 'script-src': SCRIPT_SRC, + 'style-src': STYLE_SRC, + 'img-src': IMG_SRC, + 'media-src': MEDIA_SRC, + 'connect-src': CONNECT_SRC, + 'frame-src': FRAME_SRC, + 'prefetch-src': PREFETCH_SRC, + 'default-src': ["'self'"], +}) + .map( + ([k, v]) => + `${k} ${(Array.isArray(v) + ? v + .map((s) => s?.trim()) + .filter(Boolean) + .join(' ') + : v + ).trim()}` + ) + .join('; ') From 62f0d0371fc42ec41d015f1d80b1a302f93651a2 Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Tue, 30 Aug 2022 21:41:35 +0800 Subject: [PATCH 05/55] feat(i18n): use cookie `__language` as secondary language --- next.config.js | 6 +- package-lock.json | 33 +++- package.json | 2 + src/common/enums/cookie.ts | 3 + src/common/enums/index.ts | 4 +- src/common/enums/storage.ts | 2 - src/common/utils/cookie.ts | 4 + src/common/utils/dom.ts | 6 - src/common/utils/language.ts | 34 +--- .../utils/resolvers/clientPreference.ts | 1 - .../Context/Language/LanguageContext.tsx | 150 ++++++++---------- .../GQL/queries/clientPreference.ts | 1 - src/components/Head/index.tsx | 22 +-- src/components/Root/index.tsx | 4 +- src/pages/_app.tsx | 41 +++-- src/pages/_document.tsx | 35 +--- 16 files changed, 153 insertions(+), 195 deletions(-) create mode 100644 src/common/enums/cookie.ts diff --git a/next.config.js b/next.config.js index 90f4bb440a..9b549cc24b 100644 --- a/next.config.js +++ b/next.config.js @@ -84,7 +84,11 @@ const nextConfig = { * Runtime configs * */ - poweredByHeader: false, + i18n: { + locales: ['zh-Hant', 'zh-Hans', 'en'], + defaultLocale: 'zh-Hant', + localeDetection: false, + }, // custom HTTP headers async headers() { diff --git a/package-lock.json b/package-lock.json index 19637f4e29..78086e0745 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "matters-web", - "version": "4.3.7", + "version": "4.4.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "matters-web", - "version": "4.3.7", + "version": "4.4.0", "license": "Apache-2.0", "dependencies": { "@apollo/react-common": "^3.1.3", @@ -56,6 +56,7 @@ "husky": "^7.0.4", "isomorphic-unfetch": "^3.1.0", "js-base64": "^3.7.2", + "js-cookie": "^3.0.1", "jump.js": "^1.0.2", "lodash": "^4.17.21", "next": "^12.1.4", @@ -101,6 +102,7 @@ "@types/fingerprintjs2": "^2.0.0", "@types/grecaptcha": "^3.0.3", "@types/jest": "^26.0.23", + "@types/js-cookie": "^3.0.2", "@types/jump.js": "^1.0.4", "@types/lodash": "^4.14.178", "@types/nprogress": "0.2.0", @@ -152,7 +154,7 @@ "webpack-merge": "^5.8.0" }, "engines": { - "node": "16.14" + "node": ">=16.14" } }, "node_modules/@ampproject/remapping": { @@ -12603,6 +12605,12 @@ "pretty-format": "^26.0.0" } }, + "node_modules/@types/js-cookie": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.2.tgz", + "integrity": "sha512-6+0ekgfusHftJNYpihfkMu8BWdeHs9EOJuGcSofErjstGPfPGEu9yTu4t460lTzzAMl2cM5zngQJqPMHbbnvYA==", + "dev": true + }, "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -29520,6 +29528,14 @@ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" }, + "node_modules/js-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz", + "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==", + "engines": { + "node": ">=12" + } + }, "node_modules/js-sha256": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", @@ -53979,6 +53995,12 @@ "pretty-format": "^26.0.0" } }, + "@types/js-cookie": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.2.tgz", + "integrity": "sha512-6+0ekgfusHftJNYpihfkMu8BWdeHs9EOJuGcSofErjstGPfPGEu9yTu4t460lTzzAMl2cM5zngQJqPMHbbnvYA==", + "dev": true + }, "@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -67469,6 +67491,11 @@ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" }, + "js-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz", + "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==" + }, "js-sha256": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", diff --git a/package.json b/package.json index 9c0bb3b80c..3663fcf10d 100644 --- a/package.json +++ b/package.json @@ -82,6 +82,7 @@ "husky": "^7.0.4", "isomorphic-unfetch": "^3.1.0", "js-base64": "^3.7.2", + "js-cookie": "^3.0.1", "jump.js": "^1.0.2", "lodash": "^4.17.21", "next": "^12.1.4", @@ -127,6 +128,7 @@ "@types/fingerprintjs2": "^2.0.0", "@types/grecaptcha": "^3.0.3", "@types/jest": "^26.0.23", + "@types/js-cookie": "^3.0.2", "@types/jump.js": "^1.0.4", "@types/lodash": "^4.14.178", "@types/nprogress": "0.2.0", diff --git a/src/common/enums/cookie.ts b/src/common/enums/cookie.ts new file mode 100644 index 0000000000..6479f7a403 --- /dev/null +++ b/src/common/enums/cookie.ts @@ -0,0 +1,3 @@ +export const COOKIE_TOKEN_NAME = '__token' +export const COOKIE_USER_GROUP = '__user_group' +export const COOKIE_LANGUAGE = '__language' diff --git a/src/common/enums/index.ts b/src/common/enums/index.ts index 6f7a1c30f5..7449e798e5 100644 --- a/src/common/enums/index.ts +++ b/src/common/enums/index.ts @@ -17,6 +17,7 @@ export * from './url' export * from './csp' export * from './chart' export * from './wallet' +export * from './cookie' export const Z_INDEX = { GLOBAL_HEADER: 100, @@ -45,9 +46,6 @@ export const VERIFICATION_CODE_TYPES = { payment_password_reset: 'payment_password_reset', } -export const COOKIE_TOKEN_NAME = '__token' -export const COOKIE_USER_GROUP = '__user_group' - export const MAX_ARTICLE_REVISION_COUNT = 4 export const MAX_ARTICLE_REVISION_DIFF = 50 diff --git a/src/common/enums/storage.ts b/src/common/enums/storage.ts index 53602d849a..9924e6b4bb 100644 --- a/src/common/enums/storage.ts +++ b/src/common/enums/storage.ts @@ -8,6 +8,4 @@ export const STORAGE_KEY_ONBOARDING_TASKS = '__ONBOARDING_TASKS' export const STORAGE_KEY_CIRCLE_BANNER = '__CIRCLE_BANNER' -export const STORAGE_KEY_LANGUAGE = '__LANGUAGE' - export const STORAGE_KEY_ANNOUNCEMENT = '__ANNOUNCEMENT' diff --git a/src/common/utils/cookie.ts b/src/common/utils/cookie.ts index ef784b9c70..d35088cd54 100644 --- a/src/common/utils/cookie.ts +++ b/src/common/utils/cookie.ts @@ -1,4 +1,8 @@ export const getCookie = (cookie: string, name: string) => { + if (!cookie) { + return '' + } + const regexp = new RegExp(`(^| )${name}=([^;]+)`) const match = cookie.match(regexp) diff --git a/src/common/utils/dom.ts b/src/common/utils/dom.ts index 042d833bc8..0254a20a6a 100644 --- a/src/common/utils/dom.ts +++ b/src/common/utils/dom.ts @@ -33,11 +33,6 @@ const getAttributes = (name: string, str: string): string[] | [] => { return matches.filter((m) => !!m) } -export const getLangFromRoot = (): HTMLLanguage => { - return (document.documentElement.getAttribute('lang') || - 'zh-Hant') as HTMLLanguage -} - export const dom = { $, $$, @@ -45,5 +40,4 @@ export const dom = { getWindowWidth, offset, getAttributes, - getLangFromRoot, } diff --git a/src/common/utils/language.ts b/src/common/utils/language.ts index 2f97130b64..893ce0ec4e 100644 --- a/src/common/utils/language.ts +++ b/src/common/utils/language.ts @@ -1,38 +1,10 @@ import { UserLanguage } from '@/__generated__/globalTypes' export const langConvert = { - og2html: (lang: OGLanguage): HTMLLanguage => { - return ({ - zh_HK: 'zh-Hant', - zh_TW: 'zh-Hant', - zh_CN: 'zh-Hans', - en: 'en', - }[lang] || 'zh-Hant') as HTMLLanguage - }, - sys2html: (lang: Language): HTMLLanguage => { - return ({ - zh_hans: 'zh-Hans', - zh_hant: 'zh-Hant', - en: 'en', - }[lang] || 'zh-Hant') as HTMLLanguage - }, - html2sys: (lang: HTMLLanguage): Language => { - return ({ - 'zh-Hans': UserLanguage.zh_hans, - 'zh-Hant': UserLanguage.zh_hant, - en: UserLanguage.en, - }[lang] || UserLanguage.zh_hant) as Language - }, - sys2Og: (lang: Language): OGLanguage => { - return ({ - zh_hant: 'zh-HK', - zh_hans: 'zh-CN', - en: 'en', - }[lang] || 'zh_HK') as OGLanguage - }, - bcp472sys: (Lang: string): UserLanguage => { + bcp47toSys: (Lang: string): UserLanguage => { const lang = Lang.toLowerCase() - if (lang === 'zh' || lang === 'zh-cn') { + + if (lang === 'zh-cn') { return UserLanguage.zh_hans } diff --git a/src/common/utils/resolvers/clientPreference.ts b/src/common/utils/resolvers/clientPreference.ts index c3c17d3a49..2125671f41 100644 --- a/src/common/utils/resolvers/clientPreference.ts +++ b/src/common/utils/resolvers/clientPreference.ts @@ -11,7 +11,6 @@ const clientPreferenceResolver = (_: any) => { }, circleBanner: true, announcement: 0, - language: '', } } diff --git a/src/components/Context/Language/LanguageContext.tsx b/src/components/Context/Language/LanguageContext.tsx index 1a9c585ca0..1df5d4fe4b 100644 --- a/src/components/Context/Language/LanguageContext.tsx +++ b/src/components/Context/Language/LanguageContext.tsx @@ -1,15 +1,14 @@ -import { useQuery } from '@apollo/react-hooks' import gql from 'graphql-tag' -import { createContext, useContext } from 'react' +import Cookie from 'js-cookie' +import { useRouter } from 'next/router' +import { createContext, useContext, useState } from 'react' import { Translate, useMutation, ViewerContext } from '~/components' -import CLIENT_PREFERENCE from '~/components/GQL/queries/clientPreference' -import { ADD_TOAST, STORAGE_KEY_LANGUAGE } from '~/common/enums' -import { langConvert, storage } from '~/common/utils' +import { ADD_TOAST, COOKIE_LANGUAGE } from '~/common/enums' +import { getCookie, langConvert } from '~/common/utils' import { UserLanguage } from '@/__generated__/globalTypes' -import { ClientPreference } from '~/components/GQL/queries/__generated__/ClientPreference' import { UpdateLanguage } from './__generated__/UpdateLanguage' const UPDATE_VIEWER_LANGUAGE = gql` @@ -26,106 +25,97 @@ const UPDATE_VIEWER_LANGUAGE = gql` export const LanguageContext = createContext( {} as { lang: UserLanguage - setLang: (lang: UserLanguage) => void + setLang: (lang: UserLanguage) => Promise } ) export const LanguageConsumer = LanguageContext.Consumer export const LanguageProvider = ({ + cookie, children, }: { + cookie: string children: React.ReactNode }) => { - const { data: clientPreferenceData, client } = useQuery( - CLIENT_PREFERENCE, - { variables: { id: 'local' } } - ) - const [updateLanguage] = useMutation(UPDATE_VIEWER_LANGUAGE) + + // read from authed viewer object const viewer = useContext(ViewerContext) + const viewerLang = viewer.isAuthed ? viewer.settings.language : '' - const viewerLang = viewer?.settings?.language - let storedLang + // read from URL subpath + const router = useRouter() + const routerLang = router.locale ? langConvert.bcp47toSys(router.locale) : '' + // read from cookie (both server-side and client-side) + let cookieLang = getCookie(cookie, COOKIE_LANGUAGE) if (typeof window !== 'undefined') { - storedLang = storage.get(STORAGE_KEY_LANGUAGE) + const cookieLanguage = Cookie.get(COOKIE_LANGUAGE) + if (cookieLanguage) { + cookieLang = cookieLanguage + } } - const localLang = - clientPreferenceData?.clientPreference?.language || storedLang - let lang = (viewer.isAuthed && viewerLang) || localLang - // fallback to browser preference - if (typeof window !== 'undefined' && !lang && navigator?.language) { - lang = langConvert.bcp472sys(navigator.language) + let fallbackLang = '' + if (typeof window !== 'undefined' && navigator?.language) { + fallbackLang = langConvert.bcp47toSys(navigator.language) } - const setLang = (targetLang: UserLanguage) => { - storage.set(STORAGE_KEY_LANGUAGE, targetLang) - - client.writeData({ - id: 'ClientPreference:local', - data: { - language: targetLang, - }, - }) + const initLocalLang = (viewerLang || + cookieLang || + routerLang || + fallbackLang) as UserLanguage + const [localLang, setLocalLang] = useState(initLocalLang) + + console.log({ localLang, viewerLang, routerLang, cookieLang, fallbackLang }) + + const setLang = async (language: UserLanguage) => { + setLocalLang(language) + + if (!viewer.isAuthed) { + Cookie.set(COOKIE_LANGUAGE, language, { + domain: window.location.hostname, + expires: 90, + secure: false, + sameSite: 'Lax', + }) + return + } - document.documentElement.setAttribute( - 'lang', - langConvert.sys2html(targetLang) - ) + // logged-in user + try { + await updateLanguage({ + variables: { input: { language } }, + optimisticResponse: { + updateUserInfo: { + id: viewer.id, + settings: { + language, + __typename: 'UserSettings', + }, + __typename: 'User', + }, + }, + }) + } catch (e) { + window.dispatchEvent( + new CustomEvent(ADD_TOAST, { + detail: { + color: 'red', + content: , + }, + }) + ) + } } return ( { - if (viewer.isAuthed) { - try { - await updateLanguage({ - variables: { input: { language: targetLang } }, - optimisticResponse: { - updateUserInfo: { - id: viewer.id, - settings: { - language: targetLang as any, - __typename: 'UserSettings', - }, - __typename: 'User', - }, - }, - }) - - window.dispatchEvent( - new CustomEvent(ADD_TOAST, { - detail: { - color: 'green', - content: ( - - ), - }, - }) - ) - } catch (e) { - window.dispatchEvent( - new CustomEvent(ADD_TOAST, { - detail: { - color: 'red', - content: , - }, - }) - ) - } - } - - setLang(targetLang) - }, + lang: localLang, + setLang, }} > {children} diff --git a/src/components/GQL/queries/clientPreference.ts b/src/components/GQL/queries/clientPreference.ts index 143f202a3c..d4e1926a4b 100644 --- a/src/components/GQL/queries/clientPreference.ts +++ b/src/components/GQL/queries/clientPreference.ts @@ -12,7 +12,6 @@ export default gql` } circleBanner announcement - language } } ` diff --git a/src/components/Head/index.tsx b/src/components/Head/index.tsx index 845d2c1815..1a936cb26c 100644 --- a/src/components/Head/index.tsx +++ b/src/components/Head/index.tsx @@ -3,7 +3,7 @@ import { useContext } from 'react' import { LanguageContext, useRoute } from '~/components' -import { langConvert, translate, TranslateArgs } from '~/common/utils' +import { translate, TranslateArgs } from '~/common/utils' import IMAGE_APPLE_TOUCH_ICON from '@/public/static/apple-touch-icon.png' import IMAGE_FAVICON_16 from '@/public/static/favicon-16x16.png' @@ -117,26 +117,6 @@ export const Head: React.FC = (props) => { key="og:description" content={head.description} /> - - - - + cookie: string children: React.ReactNode }) => { const { isInPath } = useRoute() @@ -157,7 +159,7 @@ const Root = ({ - + {shouldApplyLayout ? {children} : children} diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 2dee4f7e33..6bd08a34c1 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -2,6 +2,7 @@ import { ApolloProvider } from '@apollo/react-hooks' import { getDataFromTree } from '@apollo/react-ssr' import { InMemoryCache } from 'apollo-cache-inmemory' import { ApolloClient } from 'apollo-client' +import { NextPageContext } from 'next' import { AppProps } from 'next/app' import { ErrorBoundary } from '~/components' @@ -15,20 +16,36 @@ const InnerApp = ({ Component, pageProps, apollo, -}: AppProps & { apollo: ApolloClient }) => ( - - - + cookie, +}: AppProps & { apollo: ApolloClient; cookie: string }) => { + return ( + + + - - + + - - - - -) + + + + + ) +} -const MattersApp = withApollo(InnerApp, { getDataFromTree }) +InnerApp.getInitialProps = async ({ + ctx, + ...rest +}: { + ctx: NextPageContext +}) => { + if (!ctx) { + return { cookie: '' } + } + + return { cookie: ctx?.req?.headers.cookie } +} + +const MattersApp = withApollo(InnerApp as any, { getDataFromTree }) export default MattersApp diff --git a/src/pages/_document.tsx b/src/pages/_document.tsx index d70d61a575..eed1389498 100644 --- a/src/pages/_document.tsx +++ b/src/pages/_document.tsx @@ -1,47 +1,16 @@ -import _get from 'lodash/get' -import Document, { - DocumentContext, - Head, - Html, - Main, - NextScript, -} from 'next/document' +import Document, { Head, Html, Main, NextScript } from 'next/document' import React from 'react' import { CSP_POLICY } from '~/common/enums' -import { langConvert } from '~/common/utils' interface MattersDocumentProps { lang: HTMLLanguage } class MattersDocument extends Document { - public static async getInitialProps(ctx: DocumentContext) { - const initialProps = await Document.getInitialProps(ctx) - const heads = initialProps.head - - let lang: HTMLLanguage = 'zh-Hant' - if (heads) { - heads.every((head) => { - const property = _get(head, 'props.property') - const content = _get(head, 'props.content') - if (property === 'og:locale') { - lang = langConvert.og2html(content) - return false - } - return true - }) - } - - return { - lang, - ...initialProps, - } - } - public render() { return ( - + From 70d119b1432a309f30261a8c74bae548368bc1a1 Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Tue, 30 Aug 2022 22:22:31 +0800 Subject: [PATCH 06/55] feat(i18n): fallback language from accept-language (server-side) --- next.config.js | 5 +-- src/common/enums/lang.ts | 2 ++ src/common/utils/language.ts | 27 +++++++++------- .../Context/Language/LanguageContext.tsx | 31 ++++++++++++------- src/components/Root/index.tsx | 6 ++-- src/pages/_app.tsx | 20 ++++++------ 6 files changed, 52 insertions(+), 39 deletions(-) diff --git a/next.config.js b/next.config.js index 9b549cc24b..40bc061d80 100644 --- a/next.config.js +++ b/next.config.js @@ -85,8 +85,9 @@ const nextConfig = { * */ i18n: { - locales: ['zh-Hant', 'zh-Hans', 'en'], - defaultLocale: 'zh-Hant', + locales: ['zh-Hant', 'zh-Hans', 'en', '__defaultLocale'], + // FIXME: Disable Next.js auto detection and prefixing since we have a fallback strategy based on user request and browser perference in `` + defaultLocale: '__defaultLocale', localeDetection: false, }, diff --git a/src/common/enums/lang.ts b/src/common/enums/lang.ts index 9285930fc7..3f7910e5be 100644 --- a/src/common/enums/lang.ts +++ b/src/common/enums/lang.ts @@ -32,3 +32,5 @@ export const CONTENT_LANG_TEXT_MAP = { ru: 'Russian', }, } + +export const DEFAULT_LOCALE = '__defaultLocale' diff --git a/src/common/utils/language.ts b/src/common/utils/language.ts index 893ce0ec4e..1fb9d4fbc7 100644 --- a/src/common/utils/language.ts +++ b/src/common/utils/language.ts @@ -1,17 +1,22 @@ import { UserLanguage } from '@/__generated__/globalTypes' -export const langConvert = { - bcp47toSys: (Lang: string): UserLanguage => { - const lang = Lang.toLowerCase() +export const toUserLanguage = (lang: string) => { + lang = lang.toLowerCase() - if (lang === 'zh-cn') { - return UserLanguage.zh_hans - } - - if (lang.startsWith('en')) { - return UserLanguage.en - } + // zh_hans + if (['zh-cn', 'zh-hans', 'zh_hans'].indexOf(lang) >= 0) { + return UserLanguage.zh_hans + } + // zh_hant + if (['zh', 'zh-tw', 'zh-hk', 'zh-hant', 'zh_hant'].indexOf(lang) >= 0) { return UserLanguage.zh_hant - }, + } + + // en + if (['en', 'en-us', 'en-au', 'en-za', 'en-gb'].indexOf(lang) >= 0) { + return UserLanguage.en + } + + return '' } diff --git a/src/components/Context/Language/LanguageContext.tsx b/src/components/Context/Language/LanguageContext.tsx index 1df5d4fe4b..976be7ce8f 100644 --- a/src/components/Context/Language/LanguageContext.tsx +++ b/src/components/Context/Language/LanguageContext.tsx @@ -5,8 +5,8 @@ import { createContext, useContext, useState } from 'react' import { Translate, useMutation, ViewerContext } from '~/components' -import { ADD_TOAST, COOKIE_LANGUAGE } from '~/common/enums' -import { getCookie, langConvert } from '~/common/utils' +import { ADD_TOAST, COOKIE_LANGUAGE, DEFAULT_LOCALE } from '~/common/enums' +import { getCookie, toUserLanguage } from '~/common/utils' import { UserLanguage } from '@/__generated__/globalTypes' import { UpdateLanguage } from './__generated__/UpdateLanguage' @@ -32,10 +32,10 @@ export const LanguageContext = createContext( export const LanguageConsumer = LanguageContext.Consumer export const LanguageProvider = ({ - cookie, + headers, children, }: { - cookie: string + headers?: any children: React.ReactNode }) => { const [updateLanguage] = useMutation(UPDATE_VIEWER_LANGUAGE) @@ -46,10 +46,13 @@ export const LanguageProvider = ({ // read from URL subpath const router = useRouter() - const routerLang = router.locale ? langConvert.bcp47toSys(router.locale) : '' + const routerLang = + router.locale && router.locale !== DEFAULT_LOCALE + ? toUserLanguage(router.locale) + : '' // read from cookie (both server-side and client-side) - let cookieLang = getCookie(cookie, COOKIE_LANGUAGE) + let cookieLang = getCookie(headers?.cookie, COOKIE_LANGUAGE) if (typeof window !== 'undefined') { const cookieLanguage = Cookie.get(COOKIE_LANGUAGE) if (cookieLanguage) { @@ -57,11 +60,17 @@ export const LanguageProvider = ({ } } - // fallback to browser preference - let fallbackLang = '' - if (typeof window !== 'undefined' && navigator?.language) { - fallbackLang = langConvert.bcp47toSys(navigator.language) + // fallback to browser preference (both server-side and client-side) + let fallbackLang + if (typeof window !== 'undefined') { + fallbackLang = toUserLanguage(navigator.language) + } else { + const acceptLanguage = (headers['accept-language'] || '') + .split(',') + .map((l: string) => l.trim())[0] + fallbackLang = toUserLanguage(acceptLanguage) } + fallbackLang = fallbackLang || UserLanguage.zh_hant const initLocalLang = (viewerLang || cookieLang || @@ -69,8 +78,6 @@ export const LanguageProvider = ({ fallbackLang) as UserLanguage const [localLang, setLocalLang] = useState(initLocalLang) - console.log({ localLang, viewerLang, routerLang, cookieLang, fallbackLang }) - const setLang = async (language: UserLanguage) => { setLocalLang(language) diff --git a/src/components/Root/index.tsx b/src/components/Root/index.tsx index 8deb9bc5ea..bf89f5de27 100644 --- a/src/components/Root/index.tsx +++ b/src/components/Root/index.tsx @@ -73,11 +73,11 @@ const wagmiClient = createClient({ const Root = ({ client, - cookie, + headers, children, }: { client: ApolloClient - cookie: string + headers?: any children: React.ReactNode }) => { const { isInPath } = useRoute() @@ -159,7 +159,7 @@ const Root = ({ - + {shouldApplyLayout ? {children} : children} diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 6bd08a34c1..4beadcfa54 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -16,14 +16,17 @@ const InnerApp = ({ Component, pageProps, apollo, - cookie, -}: AppProps & { apollo: ApolloClient; cookie: string }) => { + headers, +}: AppProps & { + apollo: ApolloClient + headers?: any +}) => { return ( - + @@ -33,17 +36,12 @@ const InnerApp = ({ ) } -InnerApp.getInitialProps = async ({ - ctx, - ...rest -}: { - ctx: NextPageContext -}) => { +InnerApp.getInitialProps = async ({ ctx }: { ctx: NextPageContext }) => { if (!ctx) { - return { cookie: '' } + return { headers: {} } } - return { cookie: ctx?.req?.headers.cookie } + return { headers: ctx?.req?.headers } } const MattersApp = withApollo(InnerApp as any, { getDataFromTree }) From f18869ddaafa81d4ad951673d29a3661760673a4 Mon Sep 17 00:00:00 2001 From: 49659410+tx0c <> Date: Thu, 25 Aug 2022 09:47:05 +0000 Subject: [PATCH 07/55] feat(anchor-link): Anchor link supports for circle broadcast & discussion resolve #1903 --- src/common/utils/route.ts | 33 ++-- src/components/Comment/CreatedAt/index.tsx | 27 ++-- .../Comment/FooterActions/index.tsx | 1 + src/views/Circle/Broadcast/Broadcast.tsx | 69 ++++++++- src/views/Circle/Broadcast/gql.ts | 19 ++- src/views/Circle/Discussion/Discussion.tsx | 143 ++++++++++++++---- src/views/Circle/Discussion/gql.ts | 19 ++- 7 files changed, 250 insertions(+), 61 deletions(-) diff --git a/src/common/utils/route.ts b/src/common/utils/route.ts index f9e44b403f..cfc613e7b4 100644 --- a/src/common/utils/route.ts +++ b/src/common/utils/route.ts @@ -24,6 +24,7 @@ interface CircleArgs { interface CommentArgs { id: string + type: 'article' | 'circleDiscussion' | 'circleBroadcast' // comment type: article/discussion/broadcast parentComment: { id: string } | null @@ -46,11 +47,13 @@ type ToPathArgs = | 'circleEditProfile' | 'circleManageInvitation' circle: CircleArgs + fragment?: string } | { page: 'commentDetail' comment: CommentArgs - article: ArticleArgs + article?: ArticleArgs + circle?: CircleArgs } | { page: 'draftDetail'; id: string; slug: string } | { @@ -132,13 +135,15 @@ export const toPath = ( } } case 'circleDiscussion': { + const hash = args.fragment ? `#${args.fragment}` : '' return { - href: `/~${args.circle.name}/discussion`, + href: `/~${args.circle.name}/discussion${hash}`, } } case 'circleBroadcast': { + const hash = args.fragment ? `#${args.fragment}` : '' return { - href: `/~${args.circle.name}/broadcast`, + href: `/~${args.circle.name}/broadcast${hash}`, } } case 'circleSettings': { @@ -162,14 +167,24 @@ export const toPath = ( } } case 'commentDetail': { - const { parentComment, id } = args.comment + const { parentComment, id, type } = args.comment const fragment = parentComment?.id ? `${parentComment.id}-${id}` : id - return toPath({ - page: 'articleDetail', - article: args.article, - fragment, - }) + switch (type) { + case 'article': + return toPath({ + page: 'articleDetail', + article: args.article!, + fragment, + }) + case 'circleDiscussion': + case 'circleBroadcast': + return toPath({ + page: type, // 'circleDiscussion' or 'circleBroadcast' + circle: args.circle!, // as { name: string }, + fragment, + }) + } } case 'draftDetail': { return { diff --git a/src/components/Comment/CreatedAt/index.tsx b/src/components/Comment/CreatedAt/index.tsx index 67e0f0d23d..a1b21d626f 100644 --- a/src/components/Comment/CreatedAt/index.tsx +++ b/src/components/Comment/CreatedAt/index.tsx @@ -18,6 +18,7 @@ const fragments = { comment: gql` fragment CreatedAtComment on Comment { id + type parentComment { id } @@ -37,19 +38,25 @@ const fragments = { } const CreatedAt = ({ comment, hasLink }: CreatedAtProps) => { - const article = comment.node.__typename === 'Article' && comment.node + const article = + comment.node.__typename === 'Article' ? comment.node : undefined + const circle = comment.node.__typename === 'Circle' ? comment.node : undefined - if (!article) { - return + if (article || circle) { + const path = toPath({ + page: 'commentDetail', + comment, + article, + circle: circle! as unknown as { __typename: 'Circle'; name: string }, + }) + return ( + + + + ) } - const path = toPath({ page: 'commentDetail', comment, article }) - - return ( - - - - ) + return } CreatedAt.fragments = fragments diff --git a/src/components/Comment/FooterActions/index.tsx b/src/components/Comment/FooterActions/index.tsx index b662c42b9e..7b07b85fb5 100644 --- a/src/components/Comment/FooterActions/index.tsx +++ b/src/components/Comment/FooterActions/index.tsx @@ -57,6 +57,7 @@ const fragments = { node { ... on Circle { id + name owner { id isBlocking diff --git a/src/views/Circle/Broadcast/Broadcast.tsx b/src/views/Circle/Broadcast/Broadcast.tsx index 92e44cfde4..126612b53e 100644 --- a/src/views/Circle/Broadcast/Broadcast.tsx +++ b/src/views/Circle/Broadcast/Broadcast.tsx @@ -1,3 +1,4 @@ +import jump from 'jump.js' import _differenceBy from 'lodash/differenceBy' import _get from 'lodash/get' import { useContext, useEffect } from 'react' @@ -19,8 +20,13 @@ import { ViewerContext, } from '~/components' -import { ADD_TOAST } from '~/common/enums' -import { filterComments, mergeConnections, translate } from '~/common/utils' +import { ADD_TOAST, URL_FRAGMENT } from '~/common/enums' +import { + dom, + filterComments, + mergeConnections, + translate, +} from '~/common/utils' import CircleDetailTabs from '../CircleDetailTabs' import { BROADCAST_PRIVATE, BROADCAST_PUBLIC } from './gql' @@ -36,6 +42,8 @@ type CommentPublic = BroadcastPublic_circle_broadcast_edges_node type CommentPrivate = BroadcastPrivate_nodes_Comment type Comment = CommentPublic & Partial> +const RESPONSES_COUNT = 15 + const CricleBroadcast = () => { const { getQuery } = useRoute() const viewer = useContext(ViewerContext) @@ -96,9 +104,18 @@ const CricleBroadcast = () => { }, [circle?.id, viewer.id]) // load next page - const loadMore = async () => { + const loadMore = async (params?: { before: string }) => { + const loadBefore = params?.before || null + const noLimit = loadBefore && pageInfo?.endCursor + const { data: newData } = await fetchMore({ - variables: { after: pageInfo?.endCursor }, + variables: { + after: pageInfo?.endCursor, + before: loadBefore, + first: noLimit ? null : RESPONSES_COUNT, + includeBefore: !!loadBefore, + // articleOnly: articleOnlyMode, + }, updateQuery: (previousResult, { fetchMoreResult }) => mergeConnections({ oldData: previousResult, @@ -117,6 +134,46 @@ const CricleBroadcast = () => { } usePullToRefresh.Handler(refetch) + /** + * Fragment Patterns + * + * 0. `` + * 1. `#comment` + * 2. `#parentCommentId` + * 3. `#parentComemntId-childCommentId` + */ + let fragment = '' + let parentId = '' + let descendantId = '' + if (process.browser) { + fragment = window.location.hash.replace('#', '') + ;[parentId, descendantId] = fragment.split('-') // [0] ; = fragment.split('-')[1] + } + + // jump to comment area + useEffect(() => { + if (window.location.hash && circle) { + jump('#comments', { offset: -10 }) + } + + if (!fragment || !circle?.id) { + return + } + + const jumpToFragment = () => { + jump(`#${fragment}`, { + offset: fragment === URL_FRAGMENT.COMMENTS ? -10 : -64, + }) + } + const element = dom.$(`#${fragment}`) + + if (!element) { + loadMore({ before: parentId }).then(jumpToFragment) + } else { + jumpToFragment() + } + }, [circle?.id]) + /** * Render */ @@ -167,7 +224,7 @@ const CricleBroadcast = () => { <> -
+
{isOwner && (
{ 's circleIsMember: isMember @connection(key: "circleBroadcastIsMember") - broadcast(input: { first: 10, after: $after }) { + broadcast( + input: { + after: $after + before: $before + first: $first + includeAfter: $includeAfter + includeBefore: $includeBefore + } + ) { totalCount pageInfo { startCursor diff --git a/src/views/Circle/Discussion/Discussion.tsx b/src/views/Circle/Discussion/Discussion.tsx index 5d0c7c120c..705fcaf33d 100644 --- a/src/views/Circle/Discussion/Discussion.tsx +++ b/src/views/Circle/Discussion/Discussion.tsx @@ -1,6 +1,7 @@ -import { useLazyQuery } from '@apollo/react-hooks' -import _differenceBy from 'lodash/differenceBy' -import _get from 'lodash/get' +// import { useLazyQuery } from '@apollo/react-hooks' +import jump from 'jump.js' +// import _differenceBy from 'lodash/differenceBy' +// import _get from 'lodash/get' import { useContext, useEffect, useState } from 'react' import { @@ -20,8 +21,13 @@ import { ViewerContext, } from '~/components' -import { ADD_TOAST } from '~/common/enums' -import { filterComments, mergeConnections, translate } from '~/common/utils' +import { ADD_TOAST, URL_FRAGMENT } from '~/common/enums' +import { + dom, + filterComments, + mergeConnections, + translate, +} from '~/common/utils' import CircleDetailTabs from '../CircleDetailTabs' import { @@ -40,23 +46,14 @@ import { DiscussionPublic } from './__generated__/DiscussionPublic' type Comment = DiscussionComments_circle_discussion_edges_node +const RESPONSES_COUNT = 15 + const CricleDiscussion = () => { const { getQuery } = useRoute() const viewer = useContext(ViewerContext) const { lang } = useContext(LanguageContext) const name = getQuery('name') - /** - * Data Fetching - */ - const [ - fetchDicussion, - { data: discussionData, loading: discussionLoading, fetchMore, refetch }, - ] = useLazyQuery(DISCUSSION_COMMENTS, { - fetchPolicy: 'network-only', - variables: { name }, - }) - // public data const { data, loading, error, client } = usePublicQuery( DISCUSSION_PUBLIC, @@ -69,13 +66,6 @@ const CricleDiscussion = () => { const isMember = circle?.circleIsMember const hasPermission = isOwner || isMember - // pagination - const connectionPath = 'circle.discussion' - const { edges, pageInfo } = discussionData?.circle?.discussion || {} - const comments = filterComments( - (edges || []).map(({ node }) => node) - ) - // private data const [privateFetched, setPrivateFetched] = useState(false) const loadPrivate = async (publicData?: DiscussionPublic) => { @@ -105,17 +95,53 @@ const CricleDiscussion = () => { } }, [circle?.id, viewer.privateFetched]) - // fetch discussion - useEffect(() => { - if (hasPermission) { - fetchDicussion() - } - }, [hasPermission]) + /** + * Fragment Patterns + * + * 0. `` + * 1. `#comments` + * 2. `#parentCommentId` + * 3. `#parentComemntId-childCommentId` + */ + let fragment = '' + let parentId = '' + let descendantId = '' + if (process.browser) { + fragment = window.location.hash.replace('#', '') + ;[parentId, descendantId] = fragment.split('-') // [0] ; = fragment.split('-')[1] + } + + /** + * Data Fetching + */ + const // fetchDicussion, + { + data: discussionData, + loading: discussionLoading, + fetchMore, + refetch, + } = usePublicQuery( + DISCUSSION_COMMENTS, + { + fetchPolicy: 'network-only', + variables: { name }, + skip: !hasPermission, + }, + { publicQuery: !viewer.isAuthed } + ) // load next page - const loadMore = () => - fetchMore({ - variables: { after: pageInfo?.endCursor }, + const loadMore = async (params?: { before: string }) => { + const loadBefore = params?.before || null + const noLimit = loadBefore && pageInfo?.endCursor + + return fetchMore({ + variables: { + after: pageInfo?.endCursor, + before: loadBefore, + first: noLimit ? null : RESPONSES_COUNT, + includeBefore: !!loadBefore, + }, updateQuery: (previousResult, { fetchMoreResult }) => mergeConnections({ oldData: previousResult, @@ -124,6 +150,16 @@ const CricleDiscussion = () => { }), }) + // loadPrivate(newData) + } + + // pagination + const connectionPath = 'circle.discussion' + const { edges, pageInfo } = discussionData?.circle?.discussion || {} + const comments = filterComments( + (edges || []).map(({ node }) => node) + ) + // refetch & pull to refresh usePullToRefresh.Handler(refetch) @@ -140,6 +176,45 @@ const CricleDiscussion = () => { refetch() } + // fetch discussion + useEffect(() => { + if (hasPermission) { + refetch() // fetchDicussion() + } + }, [hasPermission]) + + // jump to comment area + useEffect(() => { + if ( + error || + discussionLoading || + !circle || + !privateFetched || + !hasPermission || + !fragment || + !circle?.id + ) { + return + } + + if (window.location.hash && circle) { + jump('#comments', { offset: -10 }) + } + + const jumpToFragment = () => { + jump(`#${fragment}`, { + offset: fragment === URL_FRAGMENT.COMMENTS ? -10 : -64, + }) + } + const element = dom.$(`#${fragment}`) + + if (!element) { + loadMore({ before: parentId }).then(jumpToFragment) + } else { + jumpToFragment() + } + }, [error, privateFetched, discussionLoading, hasPermission, circle?.id]) + /** * Render */ @@ -183,7 +258,7 @@ const CricleDiscussion = () => { <> -
+
{!circle.owner.isBlocking && (
{ Date: Wed, 31 Aug 2022 10:41:04 +0800 Subject: [PATCH 08/55] feat(test): add create-article test --- .github/workflows/test.yml | 2 +- playwright.config.ts | 5 ++- tests/create-article.spec.ts | 61 ++++++++++++++++++++++++++++++++++++ tests/example.spec.ts | 20 ------------ 4 files changed, 64 insertions(+), 24 deletions(-) create mode 100644 tests/create-article.spec.ts delete mode 100644 tests/example.spec.ts diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 47be8e0e58..2f33bae21c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -48,7 +48,7 @@ jobs: run: | npm run lint \ && npm run format:check - + - name: Install Playwright Browsers run: npx playwright install --with-deps diff --git a/playwright.config.ts b/playwright.config.ts index bf0686d50c..f7b322fc7b 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -12,7 +12,7 @@ import { devices, type PlaywrightTestConfig } from '@playwright/test' const config: PlaywrightTestConfig = { testDir: './tests', /* Maximum time one test can run for. */ - timeout: 30 * 1000, + timeout: 80 * 1000, expect: { /** * Maximum time expect() should wait for the condition to be met. @@ -35,8 +35,7 @@ const config: PlaywrightTestConfig = { /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */ actionTimeout: 0, /* Base URL to use in actions like `await page.goto('/')`. */ - // baseURL: 'http://localhost:3000', - + baseURL: process.env.PLAYWRIGHT_TEST_BASE_URL || 'http://localhost:3000', /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ trace: 'on-first-retry', }, diff --git a/tests/create-article.spec.ts b/tests/create-article.spec.ts new file mode 100644 index 0000000000..cd2c10dd5b --- /dev/null +++ b/tests/create-article.spec.ts @@ -0,0 +1,61 @@ +import { test, expect } from '@playwright/test' +// import { Base64 } from 'js-base64' + +test.beforeEach(async ({page}) => { + await page.goto('https://web-next.matters.news/') + }) + + +test('login and create, with likeid already exists', async ({ page }) => { + + // Click button:has-text("Enter") + await page.locator('button:has-text("Enter")').click(); + // Click section:has-text("Continue with EmailUser registered by email can login and enable wallet login la") >> nth=3 + await page.locator('section:has-text("Continue with EmailUser registered by email can login and enable wallet login la")').nth(3).click(); + // Click [placeholder="Email"] + await page.locator('[placeholder="Email"]').click(); + // Fill [placeholder="Email"] + await page.locator('[placeholder="Email"]').fill('Your email address'); + // Click [placeholder="Password"] + await page.locator('[placeholder="Password"]').click(); + // Fill [placeholder="Password"] + await page.locator('[placeholder="Password"]').fill('Your password'); + // Click button:has-text("Confirm") + await page.locator('button:has-text("Confirm")').click(); + await expect(page).toHaveURL('https://web-next.matters.news/'); + // Click button:has-text("Create") + await page.locator('button:has-text("Create")').click() + // await page.locator('button:has-text("Create")').click(); + await expect(page).toHaveURL(new RegExp('^https://web-next.matters.news/me/drafts/')); + // Click [placeholder="Enter title \.\.\."] + await page.locator('[placeholder="Enter title \\.\\.\\."]').click(); + // Fill [placeholder="Enter title \.\.\."] + await page.locator('[placeholder="Enter title \\.\\.\\."]').fill('playwright'); + // Click [aria-label="Enter summary \.\.\."] + await page.locator('[aria-label="Enter summary \\.\\.\\."]').click(); + // Fill [aria-label="Enter summary \.\.\."] + await page.locator('[aria-label="Enter summary \\.\\.\\."]').fill('hiiiiiii'); + // Click .ql-editor + await page.locator('.ql-editor').click(); + await page.locator('.ql-editor').fill('噢噢噢噢噢噢噢噢噢'); + // Click button:has-text("Publish") + await page.locator('button:has-text("Publish")').click(); + // Click button:has-text("Publish Now") + await page.locator('button:has-text("Publish Now")').click(); + // Click div[role="dialog"] button:has-text("Publish") + await page.locator('div[role="dialog"] button:has-text("Publish")').click(); + // Click button:has-text("View article") + await page.locator('button:has-text("View article")').click() + await expect(page).toHaveURL(new RegExp('^https://web-next.matters.news/@username')); + + //Click button:has-text("IPFS") + await page.locator('button:has-text("IPFS")').click(); + await page.locator('text=Content HashThe Fingerprint from IPFS, you can read it via a gateway >> button').click(); + const contenthHash = await (page.$(".copy >> input")).then( (value) => value?.inputValue()) + expect(contenthHash).not.toEqual(null) + + // Check if there's any available gateway + const gatewayUrl = await page.locator('.gateway-url').first().innerText() + expect(gatewayUrl).not.toBeNull() + +}); diff --git a/tests/example.spec.ts b/tests/example.spec.ts deleted file mode 100644 index 28e8128fe5..0000000000 --- a/tests/example.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { expect, test } from '@playwright/test'; - -test('homepage has Playwright in title and get started link linking to the intro page', async ({ page }) => { - await page.goto('https://playwright.dev/'); - - // Expect a title "to contain" a substring. - await expect(page).toHaveTitle(/Playwright/); - - // create a locator - const getStarted = page.locator('text=Get Started'); - - // Expect an attribute "to be strictly equal" to the value. - await expect(getStarted).toHaveAttribute('href', '/docs/intro'); - - // Click the get started link. - await getStarted.click(); - - // Expects the URL to contain intro. - await expect(page).toHaveURL(/.*intro/); -}); From fa7d4e08c351799afb8a9a5e9292968e95faea02 Mon Sep 17 00:00:00 2001 From: Aka jazzy Date: Wed, 31 Aug 2022 12:38:42 +0800 Subject: [PATCH 09/55] feat(test): add more comment --- tests/create-article.spec.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/create-article.spec.ts b/tests/create-article.spec.ts index 4fbfd2119f..1dfc19141d 100644 --- a/tests/create-article.spec.ts +++ b/tests/create-article.spec.ts @@ -51,8 +51,10 @@ test('login and create, with likeid already exists', async ({ page }) => { // Click button:has-text("IPFS") await page.locator('button:has-text("IPFS")').click(); await page.locator('text=Content HashThe Fingerprint from IPFS, you can read it via a gateway >> button').click(); - const contenthHash = await (page.$(".copy >> input")).then( (value) => value?.inputValue()) - expect(contenthHash).not.toEqual(null) + + // Check if content hash exists + const contentHash = await (page.$(".copy >> input")).then( (value) => value?.inputValue()) + expect(contentHash).not.toEqual(null) // Check if there's any available gateway const gatewayUrl = await page.locator('.gateway-url').first().innerText() From 2ce387bf7aeab31cdc953168bae80549aec3434b Mon Sep 17 00:00:00 2001 From: 49659410+tx0c <> Date: Tue, 30 Aug 2022 21:03:53 +0000 Subject: [PATCH 10/55] fix(circle-comments): avoid jump twice in discussion --- src/views/Circle/Discussion/Discussion.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/views/Circle/Discussion/Discussion.tsx b/src/views/Circle/Discussion/Discussion.tsx index 705fcaf33d..8dcf6611bf 100644 --- a/src/views/Circle/Discussion/Discussion.tsx +++ b/src/views/Circle/Discussion/Discussion.tsx @@ -197,9 +197,7 @@ const CricleDiscussion = () => { return } - if (window.location.hash && circle) { - jump('#comments', { offset: -10 }) - } + // if (window.location.hash && circle) { jump('#comments', { offset: -10 }) } const jumpToFragment = () => { jump(`#${fragment}`, { From f8ca28916016957d4ebd1b4b071f589704c1cbb3 Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Tue, 30 Aug 2022 16:17:38 +0800 Subject: [PATCH 11/55] add a setting page --- src/common/enums/route.ts | 2 + src/components/Layout/index.tsx | 3 +- src/pages/settings.tsx | 3 + .../SwitchLanguage/index.tsx | 45 ++++++++++++ .../Settings/DisplayPreferences/index.tsx | 13 ++++ src/views/Settings/Learn/index.tsx | 38 ++++++++++ src/views/Settings/index.tsx | 70 +++++++++++++++++++ src/views/Settings/styles.css | 13 ++++ 8 files changed, 186 insertions(+), 1 deletion(-) create mode 100644 src/pages/settings.tsx create mode 100644 src/views/Settings/DisplayPreferences/SwitchLanguage/index.tsx create mode 100644 src/views/Settings/DisplayPreferences/index.tsx create mode 100644 src/views/Settings/Learn/index.tsx create mode 100644 src/views/Settings/index.tsx create mode 100644 src/views/Settings/styles.css diff --git a/src/common/enums/route.ts b/src/common/enums/route.ts index 0de519119a..19efe20f3f 100644 --- a/src/common/enums/route.ts +++ b/src/common/enums/route.ts @@ -13,6 +13,7 @@ type ROUTE_KEY = | 'FOLLOW' | 'AUTHORS' | 'SEARCH' + | 'SETTINGS' // Tag | 'TAGS' | 'TAG_DETAIL' @@ -81,6 +82,7 @@ export const ROUTES: { { key: 'FOLLOW', pathname: '/follow' }, { key: 'AUTHORS', pathname: '/authors' }, { key: 'SEARCH', pathname: '/search' }, + { key: 'SETTINGS', pathname: '/settings' }, // experient page for recommendation engine testing { key: 'RECOMMENDATION', pathname: '/recommendation' }, diff --git a/src/components/Layout/index.tsx b/src/components/Layout/index.tsx index 8531ebd551..a0a0f22479 100644 --- a/src/components/Layout/index.tsx +++ b/src/components/Layout/index.tsx @@ -68,6 +68,7 @@ const Main: React.FC> = ({ }) => { const { isInPath, isPathStartWith } = useRoute() const isInSearch = isInPath('SEARCH') + const isInSettings = isInPath('SETTINGS') const isInArticleDetail = isInPath('ARTICLE_DETAIL') const isInCircle = isPathStartWith('/~', true) const isLargeUp = useResponsive('lg-up') @@ -117,7 +118,7 @@ const Main: React.FC> = ({ {aside} - {!inEditor && ( + {!inEditor && !isInSettings && (
diff --git a/src/pages/settings.tsx b/src/pages/settings.tsx new file mode 100644 index 0000000000..ca991702c5 --- /dev/null +++ b/src/pages/settings.tsx @@ -0,0 +1,3 @@ +import Settings from '~/views/Settings' + +export default Settings diff --git a/src/views/Settings/DisplayPreferences/SwitchLanguage/index.tsx b/src/views/Settings/DisplayPreferences/SwitchLanguage/index.tsx new file mode 100644 index 0000000000..0384cab90c --- /dev/null +++ b/src/views/Settings/DisplayPreferences/SwitchLanguage/index.tsx @@ -0,0 +1,45 @@ +import { useContext } from 'react' + +import { + DropdownDialog, + Form, + LanguageContext, + LanguageSwitchContent, + Translate, +} from '~/components' + +import { LANG_TEXT_MAP } from '~/common/enums' + +const SwitchLanguage = () => { + const { lang } = useContext(LanguageContext) + + return ( + , + placement: 'bottom-end', + }} + dialog={{ + content: , + title: ( + + ), + }} + > + {({ openDialog, ref }) => ( + } + onClick={openDialog} + rightText={LANG_TEXT_MAP[lang]} + ref={ref} + /> + )} + + ) +} + +export default SwitchLanguage diff --git a/src/views/Settings/DisplayPreferences/index.tsx b/src/views/Settings/DisplayPreferences/index.tsx new file mode 100644 index 0000000000..fbe775256f --- /dev/null +++ b/src/views/Settings/DisplayPreferences/index.tsx @@ -0,0 +1,13 @@ +import { Form, Translate } from '~/components' + +import SwitchLanguage from './SwitchLanguage' + +const DisplayPreferences = () => { + return ( + }> + + + ) +} + +export default DisplayPreferences diff --git a/src/views/Settings/Learn/index.tsx b/src/views/Settings/Learn/index.tsx new file mode 100644 index 0000000000..80ce28b031 --- /dev/null +++ b/src/views/Settings/Learn/index.tsx @@ -0,0 +1,38 @@ +import { Form, Translate } from '~/components' + +import { PATHS } from '~/common/enums' +import { toPath } from '~/common/utils' + +const downloadAppLink = toPath({ + page: 'articleDetail', + article: { + slug: 'guidance-如何让你的matters之旅更便捷', + mediaHash: 'bafyreiayiuxi4qc2a7qpgjp3fe42wmaoppqykckcvtq4hiukl5pgs3dn2m', + author: { userName: '1ampa55ag3' }, + }, +}) + +const Learn = () => { + return ( + // TODO: update Learn + + } href={PATHS.ABOUT} /> + } href={PATHS.GUIDE} /> + } + href={PATHS.COMMUNITY} + /> + } + href={PATHS.MIGRATION} + /> + } href={PATHS.TOS} /> + } + {...downloadAppLink} + /> + + ) +} + +export default Learn diff --git a/src/views/Settings/index.tsx b/src/views/Settings/index.tsx new file mode 100644 index 0000000000..33902f7bdb --- /dev/null +++ b/src/views/Settings/index.tsx @@ -0,0 +1,70 @@ +import { useContext } from 'react' + +import { + ConnectWalletButton, + Head, + IconLogo, + Layout, + PullToRefresh, + UniversalAuthButton, + useResponsive, + ViewerContext, +} from '@/src/components' + +import Build from './Build' +import DisplayPreferences from './DisplayPreferences' +import Learn from './Learn' +import styles from './styles.css' + +const Settings = () => { + const isSmallUp = useResponsive('sm-up') + const viewer = useContext(ViewerContext) + + const year = new Date().getFullYear() + + const showConnect = viewer.isAuthed && !viewer.info.ethAddress + + return ( + + + + + {isSmallUp ? ( +
Settings
+ ) : ( +
+ +
+ )} + + {(!viewer.isAuthed || showConnect) && ( +
+ {showConnect && } + {!viewer.isAuthed && } +
+ )} + + } + /> + + + + + + +
+ + {'@ '} + {year}{' '} + Matters + +
+
+ +
+ ) +} + +export default Settings diff --git a/src/views/Settings/styles.css b/src/views/Settings/styles.css new file mode 100644 index 0000000000..5c1dba1f4f --- /dev/null +++ b/src/views/Settings/styles.css @@ -0,0 +1,13 @@ +.title { + font-size: var(--font-size-nav-title); + font-weight: var(--font-weight-nav-title); + line-height: 1.6; +} + +.copyright { + @mixin flex-center-all; + + margin: var(--spacing-loose) auto; + font-size: var(--font-size-sm-s); + color: var(--color-grey); +} From c39861f433719fe46adea217316d0a5889f04909 Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Tue, 30 Aug 2022 16:30:38 +0800 Subject: [PATCH 12/55] Update navigation for visitor mode --- public/static/icons/24px/nav-settings.svg | 4 ++++ src/components/Icon/IconNavSettings24.tsx | 5 +++++ src/components/Icon/index.tsx | 1 + src/components/Layout/NavBar/index.tsx | 25 ++++++++++++++++------- src/components/Layout/SideNav/index.tsx | 13 ++++++++++++ 5 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 public/static/icons/24px/nav-settings.svg create mode 100644 src/components/Icon/IconNavSettings24.tsx diff --git a/public/static/icons/24px/nav-settings.svg b/public/static/icons/24px/nav-settings.svg new file mode 100644 index 0000000000..362b7a9177 --- /dev/null +++ b/public/static/icons/24px/nav-settings.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/components/Icon/IconNavSettings24.tsx b/src/components/Icon/IconNavSettings24.tsx new file mode 100644 index 0000000000..ccc39cc5b6 --- /dev/null +++ b/src/components/Icon/IconNavSettings24.tsx @@ -0,0 +1,5 @@ +import { ReactComponent as Icon } from '@/public/static/icons/24px/nav-settings.svg' + +import { withIcon } from './withIcon' + +export const IconNavSettings24 = withIcon(Icon) diff --git a/src/components/Icon/index.tsx b/src/components/Icon/index.tsx index ce97f05e64..05836853f0 100644 --- a/src/components/Icon/index.tsx +++ b/src/components/Icon/index.tsx @@ -97,6 +97,7 @@ export * from './IconNavHomeActive24' export * from './IconNavNotification24' export * from './IconNavNotificationActive24' export * from './IconNavSearch24' +export * from './IconNavSettings24' export * from './IconPaywall16' export * from './IconPen16' export * from './IconPin24' diff --git a/src/components/Layout/NavBar/index.tsx b/src/components/Layout/NavBar/index.tsx index 8e8d3a4a3c..272a4d08b9 100644 --- a/src/components/Layout/NavBar/index.tsx +++ b/src/components/Layout/NavBar/index.tsx @@ -4,6 +4,7 @@ import { IconNavHome24, IconNavHomeActive24, IconNavSearch24, + IconNavSettings24, useRoute, ViewerContext, WriteButton, @@ -21,6 +22,7 @@ const NavBar = () => { const isInHome = isInPath('HOME') const isInFollow = isInPath('FOLLOW') const isInNotification = isInPath('ME_NOTIFICATIONS') + const isInSettings = isInPath('SETTINGS') const isInSearch = isInPath('SEARCH') const isInDraftDetail = isInPath('ME_DRAFT_DETAIL') @@ -61,13 +63,22 @@ const NavBar = () => { href={PATHS.SEARCH} /> - } - activeIcon={} - active={isInNotification} - href={PATHS.ME_NOTIFICATIONS} - /> + {viewer.isAuthed && (} + activeIcon={} + active={isInNotification} + href={PATHS.ME_NOTIFICATIONS} + /> + )} + + {!viewer.isAuthed && (} + activeIcon={} + active={isInSettings} + href={PATHS.SETTINGS} + />)} diff --git a/src/components/Layout/SideNav/index.tsx b/src/components/Layout/SideNav/index.tsx index d0ee4b7e2c..938512801a 100644 --- a/src/components/Layout/SideNav/index.tsx +++ b/src/components/Layout/SideNav/index.tsx @@ -11,6 +11,7 @@ import { IconNavHome24, IconNavHomeActive24, IconNavSearch24, + IconNavSettings24, LanguageContext, Menu, Translate, @@ -44,6 +45,7 @@ const SideNav = () => { const isInFollow = isInPath('FOLLOW') const isInNotification = isInPath('ME_NOTIFICATIONS') const isInSearch = isInPath('SEARCH') + const isInSettings = isInPath('SETTINGS') const isInDraftDetail = isInPath('ME_DRAFT_DETAIL') const isInMe = (!isInNotification && isPathStartWith('/me')) || userName === viewerUserName @@ -99,6 +101,17 @@ const SideNav = () => { /> )} + {!viewer.isAuthed && ( + } + icon={} + activeIcon={} + active={isInSettings} + isMediumUp={isMediumUp} + href={PATHS.SETTINGS} + /> + )} + {viewer.isAuthed && ( Date: Tue, 30 Aug 2022 16:33:07 +0800 Subject: [PATCH 13/55] Update index.tsx --- src/components/Layout/NavBar/index.tsx | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/components/Layout/NavBar/index.tsx b/src/components/Layout/NavBar/index.tsx index 272a4d08b9..c6276400ea 100644 --- a/src/components/Layout/NavBar/index.tsx +++ b/src/components/Layout/NavBar/index.tsx @@ -63,7 +63,8 @@ const NavBar = () => { href={PATHS.SEARCH} /> - {viewer.isAuthed && (} activeIcon={} @@ -72,13 +73,15 @@ const NavBar = () => { /> )} - {!viewer.isAuthed && (} - activeIcon={} - active={isInSettings} - href={PATHS.SETTINGS} - />)} + {!viewer.isAuthed && ( + } + activeIcon={} + active={isInSettings} + href={PATHS.SETTINGS} + /> + )} From 9b875486d69aab4e043046976e599db3bcec664a Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Tue, 30 Aug 2022 16:41:14 +0800 Subject: [PATCH 14/55] add TODO --- src/views/Settings/Learn/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/Settings/Learn/index.tsx b/src/views/Settings/Learn/index.tsx index 80ce28b031..ae9a47c889 100644 --- a/src/views/Settings/Learn/index.tsx +++ b/src/views/Settings/Learn/index.tsx @@ -14,7 +14,7 @@ const downloadAppLink = toPath({ const Learn = () => { return ( - // TODO: update Learn + // TODO: update groupName } href={PATHS.ABOUT} /> } href={PATHS.GUIDE} /> From 91d5162c1a2f92d442d0549f1675e4ed9c63d196 Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Tue, 30 Aug 2022 16:48:20 +0800 Subject: [PATCH 15/55] Add Enhance Component --- src/views/Settings/Enhance/index.tsx | 19 +++++++++++++++++++ src/views/Settings/index.tsx | 4 ++-- 2 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 src/views/Settings/Enhance/index.tsx diff --git a/src/views/Settings/Enhance/index.tsx b/src/views/Settings/Enhance/index.tsx new file mode 100644 index 0000000000..1b43407534 --- /dev/null +++ b/src/views/Settings/Enhance/index.tsx @@ -0,0 +1,19 @@ +import { Form, Translate } from '~/components' + +const Enhance = () => { + return ( + // TODO: update groupName + + } + href="https://github.com/thematters/developer-resource" + /> + } + href="https://github.com/thematters/developer-resource/blob/master/SECURITY.md" + /> + + ) +} + +export default Enhance diff --git a/src/views/Settings/index.tsx b/src/views/Settings/index.tsx index 33902f7bdb..479876caf8 100644 --- a/src/views/Settings/index.tsx +++ b/src/views/Settings/index.tsx @@ -11,7 +11,7 @@ import { ViewerContext, } from '@/src/components' -import Build from './Build' +import Enhance from './Enhance' import DisplayPreferences from './DisplayPreferences' import Learn from './Learn' import styles from './styles.css' @@ -52,7 +52,7 @@ const Settings = () => { - +
From cc185f253187c72adfacb66e970e931f5e818d68 Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Tue, 30 Aug 2022 16:50:37 +0800 Subject: [PATCH 16/55] Update index.tsx --- src/views/Settings/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/Settings/index.tsx b/src/views/Settings/index.tsx index 479876caf8..0128e0d3ca 100644 --- a/src/views/Settings/index.tsx +++ b/src/views/Settings/index.tsx @@ -11,8 +11,8 @@ import { ViewerContext, } from '@/src/components' -import Enhance from './Enhance' import DisplayPreferences from './DisplayPreferences' +import Enhance from './Enhance' import Learn from './Learn' import styles from './styles.css' From 0a3e8dd779bc96a49237df2f81d259a013d4510a Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Wed, 31 Aug 2022 14:25:16 +0800 Subject: [PATCH 17/55] update title --- src/views/Settings/Enhance/index.tsx | 7 +++++-- src/views/Settings/Learn/index.tsx | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/views/Settings/Enhance/index.tsx b/src/views/Settings/Enhance/index.tsx index 1b43407534..a45ae9a563 100644 --- a/src/views/Settings/Enhance/index.tsx +++ b/src/views/Settings/Enhance/index.tsx @@ -2,8 +2,11 @@ import { Form, Translate } from '~/components' const Enhance = () => { return ( - // TODO: update groupName - + }> } href="https://github.com/thematters/developer-resource" diff --git a/src/views/Settings/Learn/index.tsx b/src/views/Settings/Learn/index.tsx index ae9a47c889..a0c8ce9f34 100644 --- a/src/views/Settings/Learn/index.tsx +++ b/src/views/Settings/Learn/index.tsx @@ -14,8 +14,11 @@ const downloadAppLink = toPath({ const Learn = () => { return ( - // TODO: update groupName - + }> } href={PATHS.ABOUT} /> } href={PATHS.GUIDE} /> Date: Wed, 31 Aug 2022 14:31:25 +0800 Subject: [PATCH 18/55] update --- src/views/Settings/Enhance/index.tsx | 10 +++++----- src/views/Settings/Learn/index.tsx | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/views/Settings/Enhance/index.tsx b/src/views/Settings/Enhance/index.tsx index a45ae9a563..724ae9182d 100644 --- a/src/views/Settings/Enhance/index.tsx +++ b/src/views/Settings/Enhance/index.tsx @@ -2,11 +2,11 @@ import { Form, Translate } from '~/components' const Enhance = () => { return ( - }> + + } + > } href="https://github.com/thematters/developer-resource" diff --git a/src/views/Settings/Learn/index.tsx b/src/views/Settings/Learn/index.tsx index a0c8ce9f34..6c1270ae4e 100644 --- a/src/views/Settings/Learn/index.tsx +++ b/src/views/Settings/Learn/index.tsx @@ -14,11 +14,11 @@ const downloadAppLink = toPath({ const Learn = () => { return ( - }> + + } + > } href={PATHS.ABOUT} /> } href={PATHS.GUIDE} /> Date: Wed, 31 Aug 2022 17:36:35 +0800 Subject: [PATCH 19/55] feat: remove PullToRefresh --- src/views/Settings/index.tsx | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/views/Settings/index.tsx b/src/views/Settings/index.tsx index 0128e0d3ca..833ed347ef 100644 --- a/src/views/Settings/index.tsx +++ b/src/views/Settings/index.tsx @@ -5,7 +5,6 @@ import { Head, IconLogo, Layout, - PullToRefresh, UniversalAuthButton, useResponsive, ViewerContext, @@ -49,19 +48,17 @@ const Settings = () => { } /> - - - - + + + -
- - {'@ '} - {year}{' '} - Matters - -
-
+
+ + {'@ '} + {year}{' '} + Matters + +
) From 149a2eba41bf9a30b528f1362e784273d3dc0dec Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Thu, 1 Sep 2022 23:52:51 +0800 Subject: [PATCH 20/55] fix(article): redundant article query --- src/components/Head/index.tsx | 2 +- src/views/ArticleDetail/MetaInfo/index.tsx | 6 +- src/views/ArticleDetail/TagList/index.tsx | 3 +- src/views/ArticleDetail/gql.ts | 159 ++++++++------------- src/views/ArticleDetail/index.tsx | 76 ++++------ 5 files changed, 88 insertions(+), 158 deletions(-) diff --git a/src/components/Head/index.tsx b/src/components/Head/index.tsx index 845d2c1815..fb0c7c4485 100644 --- a/src/components/Head/index.tsx +++ b/src/components/Head/index.tsx @@ -26,7 +26,7 @@ interface HeadProps { path?: string image?: string | null noSuffix?: boolean - paymentPointer?: string + paymentPointer?: string | null jsonLdData?: object | null } diff --git a/src/views/ArticleDetail/MetaInfo/index.tsx b/src/views/ArticleDetail/MetaInfo/index.tsx index 9a19b01fdf..7c1deb717d 100644 --- a/src/views/ArticleDetail/MetaInfo/index.tsx +++ b/src/views/ArticleDetail/MetaInfo/index.tsx @@ -10,7 +10,7 @@ import { ArticleDetailPublic_article } from '../__generated__/ArticleDetailPubli type MetaInfoProps = { article: ArticleDetailPublic_article translated: boolean - shouldTranslate: boolean + canTranslate: boolean toggleTranslate: () => any canReadFullContent: boolean } @@ -18,7 +18,7 @@ type MetaInfoProps = { const MetaInfo = ({ article, translated, - shouldTranslate, + canTranslate, toggleTranslate, canReadFullContent, }: MetaInfoProps) => { @@ -37,7 +37,7 @@ const MetaInfo = ({ {canReadFullContent && ( <> - {shouldTranslate && ( + {canTranslate && ( { { analytics.trackEvent('click_button', { type: 'click_tag', diff --git a/src/views/ArticleDetail/gql.ts b/src/views/ArticleDetail/gql.ts index f53ecd59ed..2b142fca16 100644 --- a/src/views/ArticleDetail/gql.ts +++ b/src/views/ArticleDetail/gql.ts @@ -11,57 +11,52 @@ import TagList from './TagList' import Toolbar from './Toolbar' import CircleWall from './Wall/Circle' -export const ARTICLE_DETAIL_PUBLIC = gql` - query ArticleDetailPublic( - $mediaHash: String! - $includeCanSuperLike: Boolean = true - ) { - article(input: { mediaHash: $mediaHash }) { +const articlePublicFragment = gql` + fragment ArticlePublicArticle on Article { + id + title + slug + mediaHash + state + cover + summary + summaryCustomized + createdAt + revisedAt + language + author { id - title - slug - mediaHash - state - cover - summary - summaryCustomized - createdAt - revisedAt - language - author { - id - paymentPointer - ...UserDigestRichUserPublic - ...UserDigestRichUserPrivate - } - collection(input: { first: 0 }) @connection(key: "articleCollection") { - totalCount - } - access { - type - circle { - id - ...CircleWallCirclePublic - ...CircleWallCirclePrivate - } - } - license - drafts { + paymentPointer + ...UserDigestRichUserPublic + ...UserDigestRichUserPrivate + } + collection(input: { first: 0 }) @connection(key: "articleCollection") { + totalCount + } + access { + type + circle { id - mediaHash - publishState - iscnPublish + ...CircleWallCirclePublic + ...CircleWallCirclePrivate } - ...MetaInfoArticle - ...ContentArticle - ...TagListArticle - ...RelatedArticles - ...StateArticle - ...ToolbarArticlePublic - ...ToolbarArticlePrivate - ...SupportWidgetArticlePublic - ...SupportWidgetArticlePrivate } + license + drafts { + id + mediaHash + publishState + iscnPublish + } + ...MetaInfoArticle + ...ContentArticle + ...TagListArticle + ...RelatedArticles + ...StateArticle + ...ToolbarArticlePublic + ...ToolbarArticlePrivate + ...SupportWidgetArticlePublic + ...SupportWidgetArticlePrivate } ${MetaInfo.fragments.article} ${Content.fragments.article} @@ -78,6 +73,18 @@ export const ARTICLE_DETAIL_PUBLIC = gql` ${CircleWall.fragments.circle.private} ` +export const ARTICLE_DETAIL_PUBLIC = gql` + query ArticleDetailPublic( + $mediaHash: String! + $includeCanSuperLike: Boolean = true + ) { + article(input: { mediaHash: $mediaHash }) { + ...ArticlePublicArticle + } + } + ${articlePublicFragment} +` + export const ARTICLE_DETAIL_PUBLIC_BY_NODE_ID = gql` query ArticleDetailPublicByNodeId( $id: ID! @@ -85,65 +92,11 @@ export const ARTICLE_DETAIL_PUBLIC_BY_NODE_ID = gql` ) { article: node(input: { id: $id }) { ... on Article { - id - title - slug - mediaHash - state - cover - summary - summaryCustomized - createdAt - revisedAt - language - author { - id - paymentPointer - ...UserDigestRichUserPublic - ...UserDigestRichUserPrivate - } - collection(input: { first: 0 }) @connection(key: "articleCollection") { - totalCount - } - access { - type - circle { - id - ...CircleWallCirclePublic - ...CircleWallCirclePrivate - } - } - license - drafts { - id - mediaHash - publishState - } - ...MetaInfoArticle - ...ContentArticle - ### ...TagListArticle - ...RelatedArticles - ...StateArticle - ...ToolbarArticlePublic - ...ToolbarArticlePrivate - ...SupportWidgetArticlePublic - ...SupportWidgetArticlePrivate + ...ArticlePublicArticle } } } - ${MetaInfo.fragments.article} - ${Content.fragments.article} - ### $ {TagList.fragments.article} - ${RelatedArticles.fragments.article} - ${State.fragments.article} - ${UserDigest.Rich.fragments.user.public} - ${UserDigest.Rich.fragments.user.private} - ${Toolbar.fragments.article.public} - ${Toolbar.fragments.article.private} - ${SupportWidget.fragments.article.public} - ${SupportWidget.fragments.article.private} - ${CircleWall.fragments.circle.public} - ${CircleWall.fragments.circle.private} + ${articlePublicFragment} ` export const ARTICLE_DETAIL_PRIVATE = gql` diff --git a/src/views/ArticleDetail/index.tsx b/src/views/ArticleDetail/index.tsx index 2bfdeedbca..b86eba1edb 100644 --- a/src/views/ArticleDetail/index.tsx +++ b/src/views/ArticleDetail/index.tsx @@ -55,7 +55,6 @@ import VisitorWall from './Wall/Visitor' import { ArticleAccessType } from '@/__generated__/globalTypes' import { ClientPreference } from '~/components/GQL/queries/__generated__/ClientPreference' import { ArticleDetailPublic } from './__generated__/ArticleDetailPublic' -// import { ArticleDetailPublicByNodeId } from './__generated__/ArticleDetailPublicByNodeId' import { ArticleTranslation } from './__generated__/ArticleTranslation' const DynamicResponse = dynamic(() => import('./Responses'), { @@ -72,19 +71,6 @@ const DynamicEditMode = dynamic(() => import('./EditMode'), { ), }) -const isValidMediaHash = (mediaHash: string | null | undefined) => { - // is there a better way to detect valid? - // a valid mediaHash, should have length 49 or 59 chars - // 'zdpuAsCXC87Tm1fFvAbysV7HVt7J8aV6chaTKeJZ5ryLALK3Z' - // 'bafyreief6bryqsa4byabnmx222jvo4khlodvpypw27af43frecbumn6ocq' - - return ( - mediaHash && - ((mediaHash?.length === 49 && mediaHash.startsWith('zdpu')) || - (mediaHash?.length === 59 && mediaHash.startsWith('bafy'))) - ) -} - const ArticleDetail = () => { const { getQuery, router } = useRoute() const mediaHash = getQuery('mediaHash') @@ -105,45 +91,37 @@ const ArticleDetail = () => { const { wall } = clientPreferenceData?.clientPreference || { wall: true } const shouldShowWall = !viewer.isAuthed && wall - // public data - const data1 = usePublicQuery(ARTICLE_DETAIL_PUBLIC, { - variables: { mediaHash }, - }) - const data2 = usePublicQuery( + /** + * fetch public data + */ + // backward compatible with: + // - `/:username:/:articleId:-:slug:-:mediaHash` + // - `/:username:/:articleId:` + // - `/:username:/:slug:-:mediaHash:` + const resultByHash = usePublicQuery( + ARTICLE_DETAIL_PUBLIC, + { variables: { mediaHash }, skip: !!articleId } + ) + const resultByNodeId = usePublicQuery( ARTICLE_DETAIL_PUBLIC_BY_NODE_ID, { variables: { id: toGlobalId({ type: 'Article', id: articleId }) }, - skip: articleId?.length === 0, + skip: !articleId, } ) - useEffect(() => { - if ( - !isValidMediaHash(mediaHash) && - isValidMediaHash(data2?.data?.article?.mediaHash) - ) { - // if getByNodeId got something looks like a valid mediaHash, call refetch with it - data1.refetch({ - mediaHash: data2?.data?.article?.mediaHash as string, - }) - } - }, [mediaHash, data2]) - const { data, loading, error, client, refetch: refetchPublic, - } = isValidMediaHash(mediaHash) || - isValidMediaHash(data1?.data?.article?.mediaHash) || // if something look like a valid mediaHash - data2.error - ? data1 - : data2 // data2 from node id is in-use for server-side rendering only + } = resultByHash.data ? resultByHash : resultByNodeId const article = data?.article const authorId = article?.author?.id - const paymentPointer = article?.author?.paymentPointer || undefined + const summary = article?.summary + const paymentPointer = article?.author?.paymentPointer const collectionCount = article?.collection?.totalCount || 0 const isAuthor = viewer.id === authorId const circle = article?.access.circle @@ -153,9 +131,10 @@ const ArticleDetail = () => { circle.isMember || article?.access.type === ArticleAccessType.public ) - const summary = article?.summary - // fetch private data + /** + * fetch private data + */ const [privateFetched, setPrivateFetched] = useState(false) const loadPrivate = async () => { if (!viewer.isAuthed || !article || !article?.mediaHash) { @@ -174,19 +153,20 @@ const ArticleDetail = () => { setPrivateFetched(true) } + // reset state to private fetchable when URL query is changed useEffect(() => { setPrivateFetched(false) }, [mediaHash]) + // fetch private data when mediaHash of public data is changed useEffect(() => { loadPrivate() }, [article?.mediaHash, viewer.id]) // redirect to latest published article - const latestArticle = article?.drafts?.filter( + const latestHash = article?.drafts?.filter( (d) => d.publishState === 'published' - )[0] - const latestHash = latestArticle?.mediaHash + )[0]?.mediaHash useEffect(() => { if (!article || !latestHash) { return @@ -194,10 +174,7 @@ const ArticleDetail = () => { const newPath = toPath({ page: 'articleDetail', - article: { - ...article, - mediaHash: latestHash, - }, + article: { ...article, mediaHash: latestHash }, }) // parse current URL: router.asPath @@ -209,6 +186,7 @@ const ArticleDetail = () => { newPath.href || newPath.pathname }` ) + // hide all utm_ tracking code parameters // copy all others const rems = [ @@ -227,7 +205,7 @@ const ArticleDetail = () => { const [translated, setTranslate] = useState(false) const language = article?.language const { lang: viewerLanguage } = useContext(LanguageContext) - const shouldTranslate = !!(language && language !== viewerLanguage) + const canTranslate = !!(language && language !== viewerLanguage) const [getTranslation, { data: translationData, loading: translating }] = useLazyQuery(ARTICLE_TRANSLATION) @@ -444,7 +422,7 @@ const ArticleDetail = () => { From 6fac9b177153dfb9cb2a9f3634534b7d28bcf1ee Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Fri, 2 Sep 2022 09:58:35 +0800 Subject: [PATCH 21/55] feat(article): query by mediahash/id based on validity of mediahash --- src/views/ArticleDetail/index.tsx | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/views/ArticleDetail/index.tsx b/src/views/ArticleDetail/index.tsx index b86eba1edb..a57c6321b6 100644 --- a/src/views/ArticleDetail/index.tsx +++ b/src/views/ArticleDetail/index.tsx @@ -71,6 +71,19 @@ const DynamicEditMode = dynamic(() => import('./EditMode'), { ), }) +const isValidMediaHash = (mediaHash: string | null | undefined) => { + // is there a better way to detect valid? + // a valid mediaHash, should have length 49 or 59 chars + // 'zdpuAsCXC87Tm1fFvAbysV7HVt7J8aV6chaTKeJZ5ryLALK3Z' + // 'bafyreief6bryqsa4byabnmx222jvo4khlodvpypw27af43frecbumn6ocq' + + return ( + mediaHash && + ((mediaHash?.length === 49 && mediaHash.startsWith('zdpu')) || + (mediaHash?.length === 59 && mediaHash.startsWith('bafy'))) + ) +} + const ArticleDetail = () => { const { getQuery, router } = useRoute() const mediaHash = getQuery('mediaHash') @@ -98,15 +111,19 @@ const ArticleDetail = () => { // - `/:username:/:articleId:-:slug:-:mediaHash` // - `/:username:/:articleId:` // - `/:username:/:slug:-:mediaHash:` + const isQueryByHash = !!(mediaHash && isValidMediaHash(mediaHash)) const resultByHash = usePublicQuery( ARTICLE_DETAIL_PUBLIC, - { variables: { mediaHash }, skip: !!articleId } + { + variables: { mediaHash }, + skip: !isQueryByHash, + } ) const resultByNodeId = usePublicQuery( ARTICLE_DETAIL_PUBLIC_BY_NODE_ID, { variables: { id: toGlobalId({ type: 'Article', id: articleId }) }, - skip: !articleId, + skip: isQueryByHash, } ) From de4aa092fde6d73abe8fb829c058a579f9640624 Mon Sep 17 00:00:00 2001 From: 49659410+tx0c <> Date: Wed, 31 Aug 2022 17:36:08 +0000 Subject: [PATCH 22/55] cleanup(): remove all iscn publish dead code (commented) iscn should be mature enough --- .../Editor/SettingsDialog/List/index.tsx | 4 ---- .../Editor/SettingsDialog/index.tsx | 11 ++--------- src/components/Editor/ToggleAccess/index.tsx | 2 +- src/components/Editor/index.tsx | 2 +- src/views/ArticleDetail/EditMode/index.tsx | 19 +++---------------- 5 files changed, 7 insertions(+), 31 deletions(-) diff --git a/src/components/Editor/SettingsDialog/List/index.tsx b/src/components/Editor/SettingsDialog/List/index.tsx index ee11e9e102..713c620186 100644 --- a/src/components/Editor/SettingsDialog/List/index.tsx +++ b/src/components/Editor/SettingsDialog/List/index.tsx @@ -41,10 +41,6 @@ const SettingsList = ({ collectionCount, tagsCount, - // iscnPublish, // : draft.iscnPublish, // : boolean - // togglePublishISCN, // : (iscnPublish: boolean) => Promise - // iscnPublishSaving, - ...restProps }: SettingsListDialogProps) => { return ( diff --git a/src/components/Editor/SettingsDialog/index.tsx b/src/components/Editor/SettingsDialog/index.tsx index 348b218e52..b4dde4810b 100644 --- a/src/components/Editor/SettingsDialog/index.tsx +++ b/src/components/Editor/SettingsDialog/index.tsx @@ -76,8 +76,8 @@ const BaseEditorSettingsDialog = ({ license, canToggleCircle, - iscnPublish, // : draft.iscnPublish, // : boolean - togglePublishISCN, // : (iscnPublish: boolean) => Promise + iscnPublish, + togglePublishISCN, iscnPublishSaving, saving, @@ -131,12 +131,6 @@ const BaseEditorSettingsDialog = ({ iscnPublishSaving, } - // const iscnPublishProps: SetPublishISCNProps = { - // iscnPublish, // : draft.iscnPublish, // : boolean - // togglePublishISCN, // : (iscnPublish: boolean) => Promise - // iscnPublishSaving, - // } - return ( <> {children({ openDialog })} @@ -155,7 +149,6 @@ const BaseEditorSettingsDialog = ({ collectionCount={collection.length} tagsCount={tags.length} {...accessProps} - // {...iscnPublishProps} /> )} diff --git a/src/components/Editor/ToggleAccess/index.tsx b/src/components/Editor/ToggleAccess/index.tsx index eb0d824335..94f94852aa 100644 --- a/src/components/Editor/ToggleAccess/index.tsx +++ b/src/components/Editor/ToggleAccess/index.tsx @@ -24,7 +24,7 @@ export type ToggleAccessProps = { canToggleCircle: boolean iscnPublish?: boolean | null - togglePublishISCN: (iscnPublish: boolean) => void // Promise + togglePublishISCN: (iscnPublish: boolean) => void iscnPublishSaving: boolean inSidebar?: boolean diff --git a/src/components/Editor/index.tsx b/src/components/Editor/index.tsx index 4f49b01cf8..480a5e7758 100644 --- a/src/components/Editor/index.tsx +++ b/src/components/Editor/index.tsx @@ -18,6 +18,6 @@ export type SetTagsProps = { export type SetPublishISCNProps = { iscnPublish?: boolean | null - togglePublishISCN: (iscnPublish: boolean) => void // Promise + togglePublishISCN: (iscnPublish: boolean) => void iscnPublishSaving: boolean } diff --git a/src/views/ArticleDetail/EditMode/index.tsx b/src/views/ArticleDetail/EditMode/index.tsx index fb40467c45..9938bb7783 100644 --- a/src/views/ArticleDetail/EditMode/index.tsx +++ b/src/views/ArticleDetail/EditMode/index.tsx @@ -124,10 +124,7 @@ const EditMode: React.FC = ({ article, onCancel, onSaved }) => { editCollection(data.article.collection.edges?.map(({ node }) => node) || []) }, [data?.article?.id]) - const [iscnPublish, setIscnPublish] = useState( - // article.drafts?.[0].iscnPublish || - false - ) + const [iscnPublish, setIscnPublish] = useState(false) // always start false /** * Render @@ -193,21 +190,13 @@ const EditMode: React.FC = ({ article, onCancel, onSaved }) => { accessSaving: false, editAccess, canToggleCircle: !!hasOwnCircle && !isReviseDisabled, - iscnPublish, // : false, // : draft.iscnPublish, // : boolean + iscnPublish, togglePublishISCN() { setIscnPublish(!iscnPublish) - }, // : (iscnPublish: boolean) => Promise + }, iscnPublishSaving: false, } - // const iscnPublishProps: SetPublishISCNProps = { - // iscnPublish, // : false, // : draft.iscnPublish, // : boolean - // togglePublishISCN() { - // setIscnPublish(!iscnPublish) - // }, // : (iscnPublish: boolean) => Promise - // iscnPublishSaving: false, - // } - return ( <> @@ -220,7 +209,6 @@ const EditMode: React.FC = ({ article, onCancel, onSaved }) => {
@@ -242,7 +230,6 @@ const EditMode: React.FC = ({ article, onCancel, onSaved }) => { {...tagsProps} {...collectionProps} {...accessProps} - // {...iscnPublishProps} article={article} editData={editData} coverId={cover?.id} From a596a203bd1ca2fa3f809006491b4a49e5d75852 Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Fri, 2 Sep 2022 14:56:55 +0800 Subject: [PATCH 23/55] feat(i18n): auto translate article and share with locale prefix --- src/common/enums/lang.ts | 3 + src/common/utils/language.ts | 21 + .../Context/Language/LanguageContext.tsx | 13 +- src/views/ArticleDetail/Content/index.tsx | 6 +- .../MetaInfo/TranslationButton/index.tsx | 2 +- src/views/ArticleDetail/MetaInfo/index.tsx | 8 +- src/views/ArticleDetail/Toolbar/index.tsx | 26 +- src/views/ArticleDetail/gql.ts | 12 + src/views/ArticleDetail/index.tsx | 427 ++++++++++-------- 9 files changed, 306 insertions(+), 212 deletions(-) diff --git a/src/common/enums/lang.ts b/src/common/enums/lang.ts index 3f7910e5be..b4ae33c054 100644 --- a/src/common/enums/lang.ts +++ b/src/common/enums/lang.ts @@ -14,6 +14,7 @@ export const CONTENT_LANG_TEXT_MAP = { vi: '越南語', ja: '日文', ru: '俄文', + la: '拉丁', }, zh_hans: { zh_hant: '繁中', @@ -22,6 +23,7 @@ export const CONTENT_LANG_TEXT_MAP = { vi: '越南语', ja: '日文', ru: '俄文', + la: '拉丁', }, en: { zh_hant: 'Traditional Chinese', @@ -30,6 +32,7 @@ export const CONTENT_LANG_TEXT_MAP = { vi: 'Vietnamese', ja: 'Japanese', ru: 'Russian', + la: 'Latin', }, } diff --git a/src/common/utils/language.ts b/src/common/utils/language.ts index 1fb9d4fbc7..c5b7e93b9c 100644 --- a/src/common/utils/language.ts +++ b/src/common/utils/language.ts @@ -20,3 +20,24 @@ export const toUserLanguage = (lang: string) => { return '' } + +export const toLocale = (lang: string) => { + lang = lang.toLowerCase() + + // zh_hans + if (['zh-cn', 'zh-hans', 'zh_hans'].indexOf(lang) >= 0) { + return 'zh-Hans' + } + + // zh_hant + if (['zh', 'zh-tw', 'zh-hk', 'zh-hant', 'zh_hant'].indexOf(lang) >= 0) { + return 'zh-Hant' + } + + // en + if (['en', 'en-us', 'en-au', 'en-za', 'en-gb'].indexOf(lang) >= 0) { + return 'en' + } + + return '' +} diff --git a/src/components/Context/Language/LanguageContext.tsx b/src/components/Context/Language/LanguageContext.tsx index 976be7ce8f..8481c7542d 100644 --- a/src/components/Context/Language/LanguageContext.tsx +++ b/src/components/Context/Language/LanguageContext.tsx @@ -81,13 +81,14 @@ export const LanguageProvider = ({ const setLang = async (language: UserLanguage) => { setLocalLang(language) + Cookie.set(COOKIE_LANGUAGE, language, { + domain: window.location.hostname, + expires: 90, + secure: false, + sameSite: 'Lax', + }) + if (!viewer.isAuthed) { - Cookie.set(COOKIE_LANGUAGE, language, { - domain: window.location.hostname, - expires: 90, - secure: false, - sameSite: 'Lax', - }) return } diff --git a/src/views/ArticleDetail/Content/index.tsx b/src/views/ArticleDetail/Content/index.tsx index 308168706a..eebcb1d1bf 100644 --- a/src/views/ArticleDetail/Content/index.tsx +++ b/src/views/ArticleDetail/Content/index.tsx @@ -26,11 +26,11 @@ const READ_ARTICLE = gql` const Content = ({ article, - translation, + content, translating, }: { article: ContentArticle - translation?: string | null + content: string translating?: boolean }) => { const viewer = useContext(ViewerContext) @@ -149,7 +149,7 @@ const Content = ({
{ - if (k === originalLanguage) originalLang.en = `(${v})` + if (k === originalLanguage) originalLang.en = ` (${v})` }) return ( diff --git a/src/views/ArticleDetail/MetaInfo/index.tsx b/src/views/ArticleDetail/MetaInfo/index.tsx index 7c1deb717d..bcf3c097e7 100644 --- a/src/views/ArticleDetail/MetaInfo/index.tsx +++ b/src/views/ArticleDetail/MetaInfo/index.tsx @@ -23,14 +23,18 @@ const MetaInfo = ({ canReadFullContent, }: MetaInfoProps) => { const originalLanguage = article?.language ? article.language : '' + return (
{article.revisedAt && ( -   - + )}
diff --git a/src/views/ArticleDetail/Toolbar/index.tsx b/src/views/ArticleDetail/Toolbar/index.tsx index aa82762f18..15f30b9d5e 100644 --- a/src/views/ArticleDetail/Toolbar/index.tsx +++ b/src/views/ArticleDetail/Toolbar/index.tsx @@ -10,7 +10,7 @@ import DropdownActions, { DropdownActionsControls, } from '~/components/ArticleDigest/DropdownActions' -import { stripAllPunct, toPath } from '~/common/utils' +import { stripAllPunct, toLocale, toPath } from '~/common/utils' import AppreciationButton from '../AppreciationButton' import Appreciators from './Appreciators' @@ -23,6 +23,8 @@ import { ToolbarArticlePublic } from './__generated__/ToolbarArticlePublic' export type ToolbarProps = { article: ToolbarArticlePublic & Partial + translated: boolean + translatedLanguage?: string | null privateFetched: boolean lock: boolean } & DropdownActionsControls @@ -62,9 +64,22 @@ const fragments = { }, } -const Toolbar = ({ article, privateFetched, lock, ...props }: ToolbarProps) => { +const Toolbar = ({ + article, + translated, + translatedLanguage, + privateFetched, + lock, + ...props +}: ToolbarProps) => { const isSmallUp = useResponsive('sm-up') + const path = toPath({ page: 'articleDetail', article }) + const shareUrl = + translated && translatedLanguage + ? `/${toLocale(translatedLanguage)}${path.href}` + : path.href + return (
@@ -89,12 +104,7 @@ const Toolbar = ({ article, privateFetched, lock, ...props }: ToolbarProps) => { iconSize="md-s" inCard={false} // title={makeTitle(article.title)} - path={ - toPath({ - page: 'articleDetail', - article, - }).href - } + path={shareUrl} tags={article.tags ?.map(({ content }) => content) .join(' ') diff --git a/src/views/ArticleDetail/gql.ts b/src/views/ArticleDetail/gql.ts index 2b142fca16..5f9c993338 100644 --- a/src/views/ArticleDetail/gql.ts +++ b/src/views/ArticleDetail/gql.ts @@ -48,6 +48,13 @@ const articlePublicFragment = gql` publishState iscnPublish } + translation(input: { language: $language }) + @include(if: $includeTranslation) { + content + title + summary + language + } ...MetaInfoArticle ...ContentArticle ...TagListArticle @@ -76,6 +83,8 @@ const articlePublicFragment = gql` export const ARTICLE_DETAIL_PUBLIC = gql` query ArticleDetailPublic( $mediaHash: String! + $language: UserLanguage! + $includeTranslation: Boolean = false $includeCanSuperLike: Boolean = true ) { article(input: { mediaHash: $mediaHash }) { @@ -88,6 +97,8 @@ export const ARTICLE_DETAIL_PUBLIC = gql` export const ARTICLE_DETAIL_PUBLIC_BY_NODE_ID = gql` query ArticleDetailPublicByNodeId( $id: ID! + $language: UserLanguage! + $includeTranslation: Boolean = false $includeCanSuperLike: Boolean = true ) { article: node(input: { id: $id }) { @@ -135,6 +146,7 @@ export const ARTICLE_TRANSLATION = gql` content title summary + language } } } diff --git a/src/views/ArticleDetail/index.tsx b/src/views/ArticleDetail/index.tsx index b86eba1edb..68df2ab97c 100644 --- a/src/views/ArticleDetail/index.tsx +++ b/src/views/ArticleDetail/index.tsx @@ -29,8 +29,13 @@ import { import CLIENT_PREFERENCE from '~/components/GQL/queries/clientPreference' import { UserDigest } from '~/components/UserDigest' -import { ADD_TOAST, URL_QS } from '~/common/enums' -import { stripAllPunct, toGlobalId, toPath } from '~/common/utils' +import { ADD_TOAST, DEFAULT_LOCALE, URL_QS } from '~/common/enums' +import { + stripAllPunct, + toGlobalId, + toPath, + toUserLanguage, +} from '~/common/utils' import Collection from './Collection' import Content from './Content' @@ -52,9 +57,12 @@ import Toolbar from './Toolbar' import CircleWall from './Wall/Circle' import VisitorWall from './Wall/Visitor' -import { ArticleAccessType } from '@/__generated__/globalTypes' +import { ArticleAccessType, UserLanguage } from '@/__generated__/globalTypes' import { ClientPreference } from '~/components/GQL/queries/__generated__/ClientPreference' -import { ArticleDetailPublic } from './__generated__/ArticleDetailPublic' +import { + ArticleDetailPublic, + ArticleDetailPublic_article, +} from './__generated__/ArticleDetailPublic' import { ArticleTranslation } from './__generated__/ArticleTranslation' const DynamicResponse = dynamic(() => import('./Responses'), { @@ -71,18 +79,34 @@ const DynamicEditMode = dynamic(() => import('./EditMode'), { ), }) -const ArticleDetail = () => { +const BaseArticleDetail = ({ + article, + privateFetched, +}: { + article: ArticleDetailPublic_article + privateFetched: boolean +}) => { const { getQuery, router } = useRoute() const mediaHash = getQuery('mediaHash') - const articleId = - (router.query.mediaHash as string)?.match(/^(\d+)/)?.[1] || '' const viewer = useContext(ViewerContext) + const locale = router.locale !== DEFAULT_LOCALE ? router.locale : '' - // UI const features = useFeatures() const isLargeUp = useResponsive('lg-up') const [fixedWall, setFixedWall] = useState(false) + const authorId = article.author?.id + const paymentPointer = article.author?.paymentPointer + const collectionCount = article.collection?.totalCount || 0 + const isAuthor = viewer.id === authorId + const circle = article.access.circle + const canReadFullContent = !!( + isAuthor || + !circle || + circle.isMember || + article.access.type === ArticleAccessType.public + ) + // wall const { data: clientPreferenceData } = useQuery( CLIENT_PREFERENCE, @@ -91,6 +115,188 @@ const ArticleDetail = () => { const { wall } = clientPreferenceData?.clientPreference || { wall: true } const shouldShowWall = !viewer.isAuthed && wall + // translation + const [autoTranslation] = useState(article.translation) + const [translated, setTranslate] = useState(!!locale) + const originalLang = article.language + const { lang: preferredLang } = useContext(LanguageContext) + const canTranslate = !!(originalLang && originalLang !== preferredLang) + const [getTranslation, { data: translationData, loading: translating }] = + useLazyQuery(ARTICLE_TRANSLATION) + + const translate = () => { + getTranslation({ variables: { mediaHash, language: preferredLang } }) + + window.dispatchEvent( + new CustomEvent(ADD_TOAST, { + detail: { + color: 'green', + content: ( + + ), + }, + }) + ) + } + + const toggleTranslate = () => { + setTranslate(!translated) + + if (!translated) { + translate() + } + } + + const { + title: translatedTitle, + summary: translatedSummary, + content: translatedContent, + language: translatedLanguage, + } = translationData?.article?.translation || autoTranslation || {} + const title = translated && translatedTitle ? translatedTitle : article.title + const summary = + translated && translatedSummary ? translatedSummary : article.summary + const content = + translated && translatedContent ? translatedContent : article.content + const keywords = (article.tags || []).map(({ content: c }) => + stripAllPunct(c) + ) + + return ( + }> + } + right={ + + } + /> + + + + + + +
+ + +
+ {title} + + { + if (shouldShowWall) { + setFixedWall(true) + } + }} + /> + + +
+ + {article?.summaryCustomized && ( + + )} + + + {circle && !canReadFullContent && } + + {features.payment && canReadFullContent && ( + + )} + + + + {collectionCount > 0 && ( +
+ +
+ )} + +
+ +
+ + {!isLargeUp && } +
+ + + + {shouldShowWall && ( + <> + + + + )} +
+ + {article.access.circle && ( + + )} + + +
+ ) +} + +const ArticleDetail = () => { + const { getQuery, router } = useRoute() + const mediaHash = getQuery('mediaHash') + const articleId = + (router.query.mediaHash as string)?.match(/^(\d+)/)?.[1] || '' + const viewer = useContext(ViewerContext) + const locale = router.locale !== DEFAULT_LOCALE ? router.locale : '' + /** * fetch public data */ @@ -100,12 +306,23 @@ const ArticleDetail = () => { // - `/:username:/:slug:-:mediaHash:` const resultByHash = usePublicQuery( ARTICLE_DETAIL_PUBLIC, - { variables: { mediaHash }, skip: !!articleId } + { + variables: { + mediaHash, + language: locale ? toUserLanguage(locale) : UserLanguage.zh_hant, + includeTranslation: !!locale, + }, + skip: !!articleId, + } ) const resultByNodeId = usePublicQuery( ARTICLE_DETAIL_PUBLIC_BY_NODE_ID, { - variables: { id: toGlobalId({ type: 'Article', id: articleId }) }, + variables: { + id: toGlobalId({ type: 'Article', id: articleId }), + language: locale ? toUserLanguage(locale) : UserLanguage.zh_hant, + includeTranslation: !!locale, + }, skip: !articleId, } ) @@ -120,17 +337,7 @@ const ArticleDetail = () => { const article = data?.article const authorId = article?.author?.id - const summary = article?.summary - const paymentPointer = article?.author?.paymentPointer - const collectionCount = article?.collection?.totalCount || 0 const isAuthor = viewer.id === authorId - const circle = article?.access.circle - const canReadFullContent = !!( - isAuthor || - !circle || - circle.isMember || - article?.access.type === ArticleAccessType.public - ) /** * fetch private data @@ -163,7 +370,7 @@ const ArticleDetail = () => { loadPrivate() }, [article?.mediaHash, viewer.id]) - // redirect to latest published article + // shadow replace URL const latestHash = article?.drafts?.filter( (d) => d.publishState === 'published' )[0]?.mediaHash @@ -196,46 +403,14 @@ const ArticleDetail = () => { const nsearch = rems.length > 0 ? `?${new URLSearchParams(rems)}` : '' const nhref = `${n.pathname}${nsearch}${n.hash || u.hash}` - if (nhref !== router.asPath) { - router.replace(nhref, undefined, { shallow: true }) + if ( + nhref !== router.asPath || + (router.locale && router.locale !== DEFAULT_LOCALE) + ) { + router.replace(nhref, undefined, { shallow: true, locale: false }) } }, [latestHash]) - // translation - const [translated, setTranslate] = useState(false) - const language = article?.language - const { lang: viewerLanguage } = useContext(LanguageContext) - const canTranslate = !!(language && language !== viewerLanguage) - const [getTranslation, { data: translationData, loading: translating }] = - useLazyQuery(ARTICLE_TRANSLATION) - - const titleTranslation = translationData?.article?.translation?.title - const contentTranslation = translationData?.article?.translation?.content - const summaryTranslation = translationData?.article?.translation?.summary - - const toggleTranslate = () => { - setTranslate(!translated) - - if (!translated) { - getTranslation({ variables: { mediaHash, language: viewerLanguage } }) - - window.dispatchEvent( - new CustomEvent(ADD_TOAST, { - detail: { - color: 'green', - content: ( - - ), - }, - }) - ) - } - } - // edit mode const canEdit = isAuthor && !viewer.isInactive const mode = getQuery(URL_QS.MODE_EDIT.key) @@ -347,142 +522,10 @@ const ArticleDetail = () => { ) } - const keywords = (article.tags || []).map(({ content }) => - stripAllPunct(content) - ) - /** - * Render + * Render:Article */ - return ( - }> - } - right={ - - } - /> - - - - - - -
- - -
- - {translated && titleTranslation - ? titleTranslation - : article.title} - - - { - if (shouldShowWall) { - setFixedWall(true) - } - }} - /> - - -
- - {article?.summaryCustomized && ( - - )} - - - {circle && !canReadFullContent && } - - {features.payment && canReadFullContent && ( - - )} - - - - {collectionCount > 0 && ( -
- -
- )} - -
- -
- - {!isLargeUp && } -
- - - - {shouldShowWall && ( - <> - - - - )} -
- - {article.access.circle && ( - - )} - - -
- ) + return } export default ArticleDetail From e9e9f96cc4dcd236a98df1c2e89b7b7063aa8a94 Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Fri, 2 Sep 2022 15:15:35 +0800 Subject: [PATCH 24/55] fix(article): loading & error states --- src/views/ArticleDetail/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/ArticleDetail/index.tsx b/src/views/ArticleDetail/index.tsx index b4109bfcf3..f1645c26a2 100644 --- a/src/views/ArticleDetail/index.tsx +++ b/src/views/ArticleDetail/index.tsx @@ -343,11 +343,11 @@ const ArticleDetail = () => { const { data, - loading, - error, client, refetch: refetchPublic, } = resultByHash.data ? resultByHash : resultByNodeId + const loading = resultByHash.loading || resultByNodeId.loading + const error = resultByHash.error || resultByNodeId.error const article = data?.article const authorId = article?.author?.id From 4a3bbd457ece57ce25bb2b66a12f87ee5a70b9f7 Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Sun, 4 Sep 2022 16:30:33 +0800 Subject: [PATCH 25/55] feat(i18n): multilingual meta tags --- src/common/utils/url.ts | 12 +++++++ .../Context/Language/LanguageContext.tsx | 6 ++-- src/components/Head/index.tsx | 36 ++++++++++++++++++- src/views/ArticleDetail/index.tsx | 19 ++++++++-- 4 files changed, 67 insertions(+), 6 deletions(-) diff --git a/src/common/utils/url.ts b/src/common/utils/url.ts index b3337048b2..c77aaa6130 100644 --- a/src/common/utils/url.ts +++ b/src/common/utils/url.ts @@ -5,6 +5,18 @@ export const extractDomain = (url: string) => { return parts[3] } +// not yet supports for TLD like .co.jp +// use https://www.npmjs.com/package/psl if needed +export const extractRootDomain = (url: string) => { + const parts = url.match(/^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i) + + if (!parts) { + return + } + + return parts[1].split('.').slice(-2).join('.') +} + export const parseURL = (url: string) => { const parser = document.createElement('a') diff --git a/src/components/Context/Language/LanguageContext.tsx b/src/components/Context/Language/LanguageContext.tsx index 8481c7542d..00c44b936e 100644 --- a/src/components/Context/Language/LanguageContext.tsx +++ b/src/components/Context/Language/LanguageContext.tsx @@ -6,7 +6,7 @@ import { createContext, useContext, useState } from 'react' import { Translate, useMutation, ViewerContext } from '~/components' import { ADD_TOAST, COOKIE_LANGUAGE, DEFAULT_LOCALE } from '~/common/enums' -import { getCookie, toUserLanguage } from '~/common/utils' +import { extractRootDomain, getCookie, toUserLanguage } from '~/common/utils' import { UserLanguage } from '@/__generated__/globalTypes' import { UpdateLanguage } from './__generated__/UpdateLanguage' @@ -25,6 +25,7 @@ const UPDATE_VIEWER_LANGUAGE = gql` export const LanguageContext = createContext( {} as { lang: UserLanguage + cookieLang: string setLang: (lang: UserLanguage) => Promise } ) @@ -82,7 +83,7 @@ export const LanguageProvider = ({ setLocalLang(language) Cookie.set(COOKIE_LANGUAGE, language, { - domain: window.location.hostname, + domain: extractRootDomain(window.location.href), expires: 90, secure: false, sameSite: 'Lax', @@ -123,6 +124,7 @@ export const LanguageProvider = ({ diff --git a/src/components/Head/index.tsx b/src/components/Head/index.tsx index 576f48ddb5..bc57584ac0 100644 --- a/src/components/Head/index.tsx +++ b/src/components/Head/index.tsx @@ -3,7 +3,7 @@ import { useContext } from 'react' import { LanguageContext, useRoute } from '~/components' -import { translate, TranslateArgs } from '~/common/utils' +import { toLocale, translate, TranslateArgs } from '~/common/utils' import IMAGE_APPLE_TOUCH_ICON from '@/public/static/apple-touch-icon.png' import IMAGE_FAVICON_16 from '@/public/static/favicon-16x16.png' @@ -11,6 +11,8 @@ import IMAGE_FAVICON_32 from '@/public/static/favicon-32x32.png' import IMAGE_FAVICON_64 from '@/public/static/favicon-64x64.png' import IMAGE_INTRO from '@/public/static/images/intro.jpg' +import { UserLanguage } from '@/__generated__/globalTypes' + const siteDomain = process.env.NEXT_PUBLIC_SITE_DOMAIN_CANONICAL || // for web-next, set this different as serving domain; suggested canonical domain ('matters.news') to robots process.env.NEXT_PUBLIC_SITE_DOMAIN || @@ -51,6 +53,12 @@ export const Head: React.FC = (props) => { : `https://${siteDomain}${router.asPath || '/'}`, image: props.image || IMAGE_INTRO.src, } + + const i18nUrl = (language: string) => { + return props.path + ? `https://${siteDomain}/${language}${props.path}` + : `https://${siteDomain}/${language}${router.asPath || '/'}` + } const canonicalUrl = head.url?.split('#')[0].split('?')[0] return ( @@ -131,6 +139,32 @@ export const Head: React.FC = (props) => { /> + {/* i18n */} + + + + + {/* PWA */} (ARTICLE_TRANSLATION) @@ -160,6 +164,15 @@ const BaseArticleDetail = ({ } } + // set language cookie for anonymous if it doesn't exist + useEffect(() => { + if (cookieLang || viewer.isAuthed || !locale) { + return + } + + setLang(toUserLanguage(locale) as UserLanguage) + }, []) + const { title: translatedTitle, summary: translatedSummary, @@ -190,10 +203,10 @@ const BaseArticleDetail = ({ /> Date: Tue, 6 Sep 2022 19:46:58 +0800 Subject: [PATCH 26/55] feat(test): add testing account into CI/CD --- .github/workflows/test.yml | 5 ++- tests/login.spec.ts | 44 +++++++++++++++++++ ...rticle.spec.ts => publish-article.spec.ts} | 33 +++++++------- 3 files changed, 65 insertions(+), 17 deletions(-) create mode 100644 tests/login.spec.ts rename tests/{create-article.spec.ts => publish-article.spec.ts} (71%) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2f33bae21c..c0f51747b7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,6 +7,9 @@ on: - main - master - stage +env: + MATTERS_TESTING_ACCOUNT_EMAIL: ${{ secrets.MATTERS_TESTING_ACCOUNT_EMAIL }} + MATTERS_TESTING_ACCOUNT_PASSWORD: ${{ secrets.MATTERS_TESTING_ACCOUNT_PASSWORD }} jobs: build_and_test: @@ -53,7 +56,7 @@ jobs: run: npx playwright install --with-deps - name: Run Playwright tests - run: npx playwright test + run: MATTERS_TESTING_ACCOUNT_EMAIL=${{ secrets.MATTERS_TESTING_ACCOUNT_EMAIL }} MATTERS_TESTING_ACCOUNT_PASSWORD=${{ secrets.MATTERS_TESTING_ACCOUNT_PASSWORD }} npx playwright test - name: Output Playwright tests uses: actions/upload-artifact@v2 diff --git a/tests/login.spec.ts b/tests/login.spec.ts new file mode 100644 index 0000000000..3aa6cfe5ad --- /dev/null +++ b/tests/login.spec.ts @@ -0,0 +1,44 @@ +import { expect, Page, test } from '@playwright/test' + +test.beforeEach(async ({page}) => { + await page.goto('https://web-develop.matters.news') + }) + + const testEmail = process.env.MATTERS_TESTING_ACCOUNT_EMAIL ?? ''; + const testPassword = process.env.MATTERS_TESTING_ACCOUNT_PASSWORD ?? ''; + +const login = async (email: string, password: string, page: Page) => { + + await page.locator('section:has-text("Continue with EmailUser registered by email can login and enable wallet login la")').nth(3).click(); + // Click [placeholder="Email"] + await page.locator('[placeholder="Email"]').click(); + // Fill [placeholder="Email"] + await page.locator('[placeholder="Email"]').fill(email); + // Click [placeholder="Password"] + await page.locator('[placeholder="Password"]').click(); + // Fill [placeholder="Password"] + await page.locator('[placeholder="Password"]').fill(password); + // Click button:has-text("Confirm") + await page.locator('button:has-text("Confirm")').click(); + await expect(page).toHaveURL('https://web-develop.matters.news/'); + // Click nav[role="navigation"] >> text=Notification + await page.locator('nav[role="navigation"] >> text=Notification').click(); + await expect(page).toHaveURL('https://web-develop.matters.news/me/notifications'); + } + +test('Model login', async ({ page }) => { + + // Click button:has-text("Enter") + await page.locator('button:has-text("Enter")').click(); + + await login(testEmail, testPassword, page) + +}); + +test('Page login', async ({ page }) => { + + await page.goto('https://web-develop.matters.news/signup?target=https%3A%2F%2Fweb-develop.matters.news%2F') + + await login(testEmail, testPassword, page) + +}); \ No newline at end of file diff --git a/tests/create-article.spec.ts b/tests/publish-article.spec.ts similarity index 71% rename from tests/create-article.spec.ts rename to tests/publish-article.spec.ts index 1dfc19141d..173c27746c 100644 --- a/tests/create-article.spec.ts +++ b/tests/publish-article.spec.ts @@ -1,43 +1,44 @@ import { expect, test } from '@playwright/test' -// import { Base64 } from 'js-base64' -test.beforeEach(async ({page}) => { - await page.goto('https://web-next.matters.news/') +test.beforeEach(async ({ page }) => { + await page.goto('https://web-develop.matters.news') }) +test('login and publish article, with likeid already exists', async ({ page }) => { -test('login and create, with likeid already exists', async ({ page }) => { - + const testEmail = process.env.MATTERS_TESTING_ACCOUNT_EMAIL ?? ''; + const testPassword = process.env.MATTERS_TESTING_ACCOUNT_PASSWORD ?? ''; + // Click button:has-text("Enter") await page.locator('button:has-text("Enter")').click(); - // Click section:has-text("Continue with EmailUser registered by email can login and enable wallet login la") >> nth=3 + // Click section:has-text("Continue with Email User registered by email can login and enable wallet login la") >> nth=3 await page.locator('section:has-text("Continue with EmailUser registered by email can login and enable wallet login la")').nth(3).click(); // Click [placeholder="Email"] await page.locator('[placeholder="Email"]').click(); // Fill [placeholder="Email"] - await page.locator('[placeholder="Email"]').fill('Your email address'); + await page.locator('[placeholder="Email"]').fill(testEmail); // Click [placeholder="Password"] await page.locator('[placeholder="Password"]').click(); // Fill [placeholder="Password"] - await page.locator('[placeholder="Password"]').fill('Your password'); + await page.locator('[placeholder="Password"]').fill(testPassword); // Click button:has-text("Confirm") await page.locator('button:has-text("Confirm")').click(); - await expect(page).toHaveURL('https://web-next.matters.news/'); + // Click button:has-text("Create") await page.locator('button:has-text("Create")').click() // await page.locator('button:has-text("Create")').click(); - await expect(page).toHaveURL(new RegExp('^https://web-next.matters.news/me/drafts/')); + await expect(page).toHaveURL(new RegExp('^https://web-develop.matters.news/me/drafts/')); // Click [placeholder="Enter title \.\.\."] await page.locator('[placeholder="Enter title \\.\\.\\."]').click(); // Fill [placeholder="Enter title \.\.\."] - await page.locator('[placeholder="Enter title \\.\\.\\."]').fill('playwright'); + await page.locator('[placeholder="Enter title \\.\\.\\."]').fill('Hello world'); // Click [aria-label="Enter summary \.\.\."] await page.locator('[aria-label="Enter summary \\.\\.\\."]').click(); // Fill [aria-label="Enter summary \.\.\."] - await page.locator('[aria-label="Enter summary \\.\\.\\."]').fill('hiiiiiii'); + await page.locator('[aria-label="Enter summary \\.\\.\\."]').fill('test'); // Click .ql-editor await page.locator('.ql-editor').click(); - await page.locator('.ql-editor').fill('噢噢噢噢噢噢噢噢噢'); + await page.locator('.ql-editor').fill('Testing article creation'); // Click button:has-text("Publish") await page.locator('button:has-text("Publish")').click(); // Click button:has-text("Publish Now") @@ -46,17 +47,17 @@ test('login and create, with likeid already exists', async ({ page }) => { await page.locator('div[role="dialog"] button:has-text("Publish")').click(); // Click button:has-text("View article") await page.locator('button:has-text("View article")').click() - await expect(page).toHaveURL(new RegExp('^https://web-next.matters.news/@username')); + await expect(page).toHaveURL(new RegExp('^https://web-develop.matters.news/@dev_testing/')); // Click button:has-text("IPFS") await page.locator('button:has-text("IPFS")').click(); await page.locator('text=Content HashThe Fingerprint from IPFS, you can read it via a gateway >> button').click(); - + // Check if content hash exists const contentHash = await (page.$(".copy >> input")).then( (value) => value?.inputValue()) expect(contentHash).not.toEqual(null) - // Check if there's any available gateway + // Check if there's any available public gateway const gatewayUrl = await page.locator('.gateway-url').first().innerText() expect(gatewayUrl).not.toBeNull() From 26ece189f9a287b36353c3fe3953db680d60968c Mon Sep 17 00:00:00 2001 From: Aka jazzy Date: Tue, 6 Sep 2022 21:24:11 +0800 Subject: [PATCH 27/55] feat(test): change node verson --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 0b942a0b0a..ed6d9c0fdd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -149,7 +149,7 @@ "webpack-merge": "^5.8.0" }, "engines": { - "node": "16.16" + "node": ">=16.14" } }, "node_modules/@ampproject/remapping": { From 2b0165d27ea5e2baafd9a217acc003efd6fddd81 Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Mon, 5 Sep 2022 14:59:59 +0800 Subject: [PATCH 28/55] feat: add placement and remove when click in toasts --- src/components/Toast/Container/index.tsx | 29 +++++++++++++++++++---- src/components/Toast/Container/styles.css | 23 ++++++++++++++---- src/components/Toast/Instance/index.tsx | 14 +++++++++-- src/components/Toast/Instance/styles.css | 5 ++++ 4 files changed, 59 insertions(+), 12 deletions(-) diff --git a/src/components/Toast/Container/index.tsx b/src/components/Toast/Container/index.tsx index 58d6bc8cc7..e1dcad9710 100644 --- a/src/components/Toast/Container/index.tsx +++ b/src/components/Toast/Container/index.tsx @@ -44,13 +44,32 @@ const Container = () => { useEventListener(ADD_TOAST, add) useEventListener(REMOVE_TOAST, remove) + const topToasts: any[] = [] + const bottomToasts: any[] = [] + toasts.forEach((t) => { + if (t.placement === 'bottom') { + bottomToasts.push(t) + } else { + topToasts.push(t) + } + }) return (
- - {toasts.map((toast) => ( - - ))} - +
+ + {topToasts.map((toast) => ( + + ))} + +
+ +
+ + {bottomToasts.map((toast) => ( + + ))} + +
diff --git a/src/components/Toast/Container/styles.css b/src/components/Toast/Container/styles.css index af84f5a271..995a042a7c 100644 --- a/src/components/Toast/Container/styles.css +++ b/src/components/Toast/Container/styles.css @@ -1,10 +1,23 @@ .toast-container { - & :global(.fixed-main) { - top: calc(var(--global-header-height-mobile) + var(--spacing-base)); - z-index: var(--z-index-over-dialog); + & .toast-top { + & :global(.fixed-main) { + top: calc(var(--global-header-height-mobile) + var(--spacing-base)); + z-index: var(--z-index-over-dialog); - @media (--sm-up) { - top: calc(var(--global-header-height) + var(--spacing-base)); + @media (--sm-up) { + top: calc(var(--global-header-height) + var(--spacing-base)); + } + } + } + + & .toast-bottom { + & :global(.fixed-main) { + bottom: calc(var(--global-header-height-mobile) + var(--spacing-base)); + z-index: var(--z-index-over-dialog); + + @media (--sm-up) { + bottom: calc(var(--global-header-height) + var(--spacing-base)); + } } } } diff --git a/src/components/Toast/Instance/index.tsx b/src/components/Toast/Instance/index.tsx index b95aac8343..d249406a80 100644 --- a/src/components/Toast/Instance/index.tsx +++ b/src/components/Toast/Instance/index.tsx @@ -18,12 +18,13 @@ import styles from './styles.css' */ export interface ToastInstanceProps { - color: 'green' | 'grey' | 'red' + color: 'green' | 'grey' | 'red' | 'black' content?: string | React.ReactNode subDescription?: string | React.ReactNode buttonPlacement?: 'top' | 'bottom' | 'center' customButton?: React.ReactNode + onClick?: (event?: React.MouseEvent) => any } export const ToastInstance = ({ @@ -32,6 +33,7 @@ export const ToastInstance = ({ subDescription, buttonPlacement = 'top', customButton, + ...restProps }: ToastInstanceProps) => { const mainClasses = classNames({ toast: true, @@ -42,7 +44,7 @@ export const ToastInstance = ({ const alertType = color === 'red' ? 'assertive' : 'polite' return ( -
+
{content &&

{content}

} @@ -84,11 +86,13 @@ export const ToastWithEffect = ({ id, duration = TOAST_DURATION, fixed, + placement = 'top', ...toastProps }: { id: string duration?: number fixed?: boolean + placement?: 'top' | 'bottom' } & ToastInstanceProps) => { const remove = () => { window.dispatchEvent(new CustomEvent(REMOVE_TOAST, { detail: { id } })) @@ -98,6 +102,12 @@ export const ToastWithEffect = ({ remove() } + const onClick = (event?: React.MouseEvent) => { + remove() + } + + toastProps.onClick = onClick + useEffect(() => { if (!fixed) { closeAfterDuration() diff --git a/src/components/Toast/Instance/styles.css b/src/components/Toast/Instance/styles.css index 32565eb807..736964f587 100644 --- a/src/components/Toast/Instance/styles.css +++ b/src/components/Toast/Instance/styles.css @@ -61,6 +61,11 @@ background: var(--color-red); } +.black { + color: var(--color-white); + background: var(--color-black); +} + @keyframes toastFadeIn { from { visibility: hidden; From bfea4e6baa72d7e2f72137a97ea29de9831eb374 Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Mon, 5 Sep 2022 16:13:32 +0800 Subject: [PATCH 29/55] feat: update copy component in ShareDialog --- public/static/icons/16px/link.svg | 11 +++++ src/components/Dialogs/ShareDialog/Copy.tsx | 48 ++++++++++++------- src/components/Dialogs/ShareDialog/styles.css | 31 ++++++++---- src/components/Icon/IconLink16.tsx | 5 ++ src/components/Icon/index.tsx | 1 + 5 files changed, 68 insertions(+), 28 deletions(-) create mode 100644 public/static/icons/16px/link.svg create mode 100644 src/components/Icon/IconLink16.tsx diff --git a/public/static/icons/16px/link.svg b/public/static/icons/16px/link.svg new file mode 100644 index 0000000000..2935d153b9 --- /dev/null +++ b/public/static/icons/16px/link.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/components/Dialogs/ShareDialog/Copy.tsx b/src/components/Dialogs/ShareDialog/Copy.tsx index 97f2643dfd..c465db734d 100644 --- a/src/components/Dialogs/ShareDialog/Copy.tsx +++ b/src/components/Dialogs/ShareDialog/Copy.tsx @@ -1,37 +1,49 @@ -import { useContext, useRef } from 'react' +import { useContext } from 'react' import { - Button, CopyToClipboard, - IconCopy16, + IconLink16, LanguageContext, + TextIcon, + Translate, } from '~/components' -import { translate } from '~/common/utils' +import { toLocale, translate } from '~/common/utils' import styles from './styles.css' const Copy = ({ link }: { link: string }) => { const { lang } = useContext(LanguageContext) - - const inputRef: React.RefObject | null = useRef(null) + const url = new URL(link) + const pathnames = url.pathname.split('/') + const showTranslation = toLocale(pathnames[1]) !== '' return (
- + - - - - -
) diff --git a/src/components/Dialogs/ShareDialog/styles.css b/src/components/Dialogs/ShareDialog/styles.css index 2c2c4c2b40..16bac96214 100644 --- a/src/components/Dialogs/ShareDialog/styles.css +++ b/src/components/Dialogs/ShareDialog/styles.css @@ -24,19 +24,30 @@ } .copy { - @mixin flex-center-space-between; - @mixin border-top-grey; - - padding: var(--spacing-base) var(--spacing-loose); + & button { + display: block; + width: 100%; + height: 3rem; + padding-right: var(--spacing-loose); + padding-left: var(--spacing-loose); + font-weight: var(--font-weight-medium); + text-align: left; - & :global(.text-icon) { - flex-shrink: 0; + &:hover, + &:focus { + background: var(--color-grey-lighter); + } } - & input { - margin-left: var(--spacing-x-tight); - font-size: var(--font-size-sm); - color: var(--color-grey); + & .text { + display: flex; + flex-direction: column; + line-height: 1.5; + & .share-translation { + font-size: var(--font-size-xs); + line-height: 1; + color: var(--color-grey); + } } } diff --git a/src/components/Icon/IconLink16.tsx b/src/components/Icon/IconLink16.tsx new file mode 100644 index 0000000000..3b23725bfb --- /dev/null +++ b/src/components/Icon/IconLink16.tsx @@ -0,0 +1,5 @@ +import { ReactComponent as Icon } from '@/public/static/icons/16px/link.svg' + +import { withIcon } from './withIcon' + +export const IconLink16 = withIcon(Icon) diff --git a/src/components/Icon/index.tsx b/src/components/Icon/index.tsx index 05836853f0..01cb604aac 100644 --- a/src/components/Icon/index.tsx +++ b/src/components/Icon/index.tsx @@ -79,6 +79,7 @@ export * from './IconIPFS24' export * from './IconIPFSGreen24' export * from './IconISCN24' export * from './IconLeft32' +export * from './IconLink16' export * from './IconLogbook1' export * from './IconLogbook2' export * from './IconLogbookBadge16' From eaac349d044c4c9dceac5b9af79536e37518259e Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Tue, 6 Sep 2022 18:40:38 +0800 Subject: [PATCH 30/55] feat: update translation toast --- src/components/Toast/Instance/styles.css | 2 +- .../ArticleDetail/TranslationToast/index.tsx | 29 +++++++++++++++++++ .../ArticleDetail/TranslationToast/styles.css | 9 ++++++ src/views/ArticleDetail/index.tsx | 23 ++++++++++++++- 4 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 src/views/ArticleDetail/TranslationToast/index.tsx create mode 100644 src/views/ArticleDetail/TranslationToast/styles.css diff --git a/src/components/Toast/Instance/styles.css b/src/components/Toast/Instance/styles.css index 736964f587..2a4d8ef9e1 100644 --- a/src/components/Toast/Instance/styles.css +++ b/src/components/Toast/Instance/styles.css @@ -63,7 +63,7 @@ .black { color: var(--color-white); - background: var(--color-black); + background: rgba(0, 0, 0, 0.8); } @keyframes toastFadeIn { diff --git a/src/views/ArticleDetail/TranslationToast/index.tsx b/src/views/ArticleDetail/TranslationToast/index.tsx new file mode 100644 index 0000000000..503b79b038 --- /dev/null +++ b/src/views/ArticleDetail/TranslationToast/index.tsx @@ -0,0 +1,29 @@ +import { Translate } from '@/src/components' + +import styles from './styles.css' + +const TranslationToast = ({ + onClick, +}: { + onClick: (event?: React.MouseEvent) => any +}) => { + return ( +

+ + + + + +

+ ) +} + +export default TranslationToast diff --git a/src/views/ArticleDetail/TranslationToast/styles.css b/src/views/ArticleDetail/TranslationToast/styles.css new file mode 100644 index 0000000000..1bd40ef18a --- /dev/null +++ b/src/views/ArticleDetail/TranslationToast/styles.css @@ -0,0 +1,9 @@ +.wrapper { + font-size: var(--font-size-md-s); + line-height: 1.5rem; + + & .switchButton { + text-decoration: underline; + cursor: pointer; + } +} diff --git a/src/views/ArticleDetail/index.tsx b/src/views/ArticleDetail/index.tsx index 6d1cb1d5ef..e59c2c1190 100644 --- a/src/views/ArticleDetail/index.tsx +++ b/src/views/ArticleDetail/index.tsx @@ -54,6 +54,7 @@ import styles from './styles.css' import SupportWidget from './SupportWidget' import TagList from './TagList' import Toolbar from './Toolbar' +import TranslationToast from './TranslationToast' import CircleWall from './Wall/Circle' import VisitorWall from './Wall/Visitor' @@ -149,7 +150,11 @@ const BaseArticleDetail = ({ detail: { color: 'green', content: ( - + ), }, }) @@ -163,6 +168,22 @@ const BaseArticleDetail = ({ translate() } } + useEffect(() => { + if (!!autoTranslation) { + setTimeout(() => { + window.dispatchEvent( + new CustomEvent(ADD_TOAST, { + detail: { + color: 'black', + placement: 'bottom', + duration: 5 * 1000, + content: , + }, + }) + ) + }) + } + }, []) // set language cookie for anonymous if it doesn't exist useEffect(() => { From 48b54a54078f50d98b9ad096800346197543b784 Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Tue, 6 Sep 2022 19:01:58 +0800 Subject: [PATCH 31/55] fix: typo --- src/views/ArticleDetail/EditMode/index.tsx | 4 +--- src/views/ArticleDetail/TranslationToast/index.tsx | 8 ++++---- src/views/ArticleDetail/index.tsx | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/views/ArticleDetail/EditMode/index.tsx b/src/views/ArticleDetail/EditMode/index.tsx index 9938bb7783..cbd9c0ec57 100644 --- a/src/views/ArticleDetail/EditMode/index.tsx +++ b/src/views/ArticleDetail/EditMode/index.tsx @@ -207,9 +207,7 @@ const EditMode: React.FC = ({ article, onCancel, onSaved }) => { - +
} diff --git a/src/views/ArticleDetail/TranslationToast/index.tsx b/src/views/ArticleDetail/TranslationToast/index.tsx index 503b79b038..dd0aaa7c87 100644 --- a/src/views/ArticleDetail/TranslationToast/index.tsx +++ b/src/views/ArticleDetail/TranslationToast/index.tsx @@ -10,14 +10,14 @@ const TranslationToast = ({ return (

diff --git a/src/views/ArticleDetail/index.tsx b/src/views/ArticleDetail/index.tsx index e59c2c1190..22096f130c 100644 --- a/src/views/ArticleDetail/index.tsx +++ b/src/views/ArticleDetail/index.tsx @@ -176,7 +176,7 @@ const BaseArticleDetail = ({ detail: { color: 'black', placement: 'bottom', - duration: 5 * 1000, + duration: 8 * 1000, content: , }, }) From 15c39c985aaadd841f5ec588e73b3ca2258e9e2e Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Wed, 7 Sep 2022 10:24:54 +0800 Subject: [PATCH 32/55] fix: typo --- src/components/Share/Buttons/Douban.tsx | 2 +- src/components/Share/Buttons/Email.tsx | 2 +- src/components/Share/Buttons/Weibo.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Share/Buttons/Douban.tsx b/src/components/Share/Buttons/Douban.tsx index 6cde79ac81..c458704bb4 100644 --- a/src/components/Share/Buttons/Douban.tsx +++ b/src/components/Share/Buttons/Douban.tsx @@ -39,7 +39,7 @@ const Douban = ({ {!circle && ( - + )} diff --git a/src/components/Share/Buttons/Email.tsx b/src/components/Share/Buttons/Email.tsx index f8a6c8fb3f..99c162cbe2 100644 --- a/src/components/Share/Buttons/Email.tsx +++ b/src/components/Share/Buttons/Email.tsx @@ -36,7 +36,7 @@ const Email = ({ {!circle && ( - + )} diff --git a/src/components/Share/Buttons/Weibo.tsx b/src/components/Share/Buttons/Weibo.tsx index 117f8a5b1f..595b7f5485 100644 --- a/src/components/Share/Buttons/Weibo.tsx +++ b/src/components/Share/Buttons/Weibo.tsx @@ -36,7 +36,7 @@ const Weibo = ({ {!circle && ( - + )} From 8ca22f9033e5ae895f533e3d3a3378bf4c44b004 Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Wed, 7 Sep 2022 23:31:13 +0800 Subject: [PATCH 33/55] fix(i18n): missing language subpath on mobile sharing dialog --- src/components/ArticleDigest/DropdownActions/index.tsx | 3 ++- src/views/ArticleDetail/Toolbar/index.tsx | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/ArticleDigest/DropdownActions/index.tsx b/src/components/ArticleDigest/DropdownActions/index.tsx index 422aff194d..a0ddc2197c 100644 --- a/src/components/ArticleDigest/DropdownActions/index.tsx +++ b/src/components/ArticleDigest/DropdownActions/index.tsx @@ -41,6 +41,7 @@ import { DropdownActionsArticle } from './__generated__/DropdownActionsArticle' export interface DropdownActionsControls { icon?: React.ReactNode size?: IconSize + sharePath?: string /** * options to control visibility @@ -257,7 +258,7 @@ const DropdownActions = (props: DropdownActionsProps) => { } return ( - + {({ openDialog: openShareDialog }) => ( {({ openDialog: openFingerprintDialog }) => ( diff --git a/src/views/ArticleDetail/Toolbar/index.tsx b/src/views/ArticleDetail/Toolbar/index.tsx index 15f30b9d5e..dc65a52e06 100644 --- a/src/views/ArticleDetail/Toolbar/index.tsx +++ b/src/views/ArticleDetail/Toolbar/index.tsx @@ -75,7 +75,7 @@ const Toolbar = ({ const isSmallUp = useResponsive('sm-up') const path = toPath({ page: 'articleDetail', article }) - const shareUrl = + const sharePath = translated && translatedLanguage ? `/${toLocale(translatedLanguage)}${path.href}` : path.href @@ -104,7 +104,7 @@ const Toolbar = ({ iconSize="md-s" inCard={false} // title={makeTitle(article.title)} - path={shareUrl} + path={sharePath} tags={article.tags ?.map(({ content }) => content) .join(' ') @@ -118,6 +118,7 @@ const Toolbar = ({ size="md-s" inCard={false} hasShare={!isSmallUp} + sharePath={sharePath} hasExtend={!lock} {...props} /> From 4db40334512498adca6a4fdf0a3e3784761f7eb6 Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Fri, 9 Sep 2022 21:51:16 +0800 Subject: [PATCH 34/55] fix(tag): use hardcoded length to clamp tag --- src/common/enums/index.ts | 1 + src/components/Tag/index.tsx | 15 +++++++++------ src/components/Tag/styles.css | 4 ---- src/components/UserDigest/Rich/index.tsx | 6 +++--- src/components/UserDigest/Rich/styles.css | 2 +- src/views/ArticleDetail/TagList/index.tsx | 2 +- src/views/Home/Feed/Authors/index.tsx | 2 +- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/common/enums/index.ts b/src/common/enums/index.ts index 7449e798e5..76fece03dc 100644 --- a/src/common/enums/index.ts +++ b/src/common/enums/index.ts @@ -51,3 +51,4 @@ export const MAX_ARTICLE_REVISION_DIFF = 50 export const MAX_TAG_CONTENT_LENGTH = 50 export const MAX_TAG_DESCRIPTION_LENGTH = 200 +export const TAG_CONTENT_CLAMP_LENGTH = 7 diff --git a/src/components/Tag/index.tsx b/src/components/Tag/index.tsx index f4a7842413..e44a98622f 100644 --- a/src/components/Tag/index.tsx +++ b/src/components/Tag/index.tsx @@ -10,6 +10,7 @@ import { TextIconProps, } from '~/components' +import { TAG_CONTENT_CLAMP_LENGTH } from '~/common/enums' import { toPath } from '~/common/utils' import styles from './styles.css' @@ -25,7 +26,7 @@ interface TagProps { disabled?: boolean // disable default hasCount?: boolean hasClose?: boolean - hasLengthLimit?: boolean + canClamp?: boolean removeTag?: (tag: DigestTag) => void onClick?: () => void } @@ -63,7 +64,7 @@ export const Tag = ({ disabled, hasCount = true, hasClose, - hasLengthLimit = false, + canClamp = false, removeTag, onClick, }: TagProps) => { @@ -73,9 +74,13 @@ export const Tag = ({ active, clickable: !!onClick, disabled: !!disabled && !onClick, - limit: hasLengthLimit, }) + const tagName = + canClamp && tag.content.length > TAG_CONTENT_CLAMP_LENGTH + ? `${tag.content.slice(0, TAG_CONTENT_CLAMP_LENGTH)}⋯` + : tag.content + const path = toPath({ page: 'tagDetail', id: tag.id, @@ -149,9 +154,7 @@ export const Tag = ({ size={textIconProps.size} allowUserSelect > - - {tag.__typename === 'Tag' ? tag.content : tag.content} - + {tagName} {hasClose && ( diff --git a/src/components/Tag/styles.css b/src/components/Tag/styles.css index 1daeaef252..a0cc418f0d 100644 --- a/src/components/Tag/styles.css +++ b/src/components/Tag/styles.css @@ -8,10 +8,6 @@ line-height: inherit; } -.limit .name { - max-width: 6.9375rem; -} - .list { position: relative; display: block; diff --git a/src/components/UserDigest/Rich/index.tsx b/src/components/UserDigest/Rich/index.tsx index ad2e688269..53d1795bba 100644 --- a/src/components/UserDigest/Rich/index.tsx +++ b/src/components/UserDigest/Rich/index.tsx @@ -35,7 +35,7 @@ export type UserDigestRichProps = { hasState?: boolean hasUnblock?: boolean hasDescriptionReplacement?: boolean - hasLengthLimit?: boolean + canClamp?: boolean } & CardProps & AvatarProps @@ -51,7 +51,7 @@ const Rich = ({ hasState = true, hasUnblock, hasDescriptionReplacement = false, - hasLengthLimit = false, + canClamp = false, ...cardProps }: UserDigestRichProps) => { @@ -64,7 +64,7 @@ const Rich = ({ container: true, [`size-${size}`]: !!size, disabled: isArchived, - limit: hasLengthLimit, + clamp: canClamp, }) if (isArchived) { diff --git a/src/components/UserDigest/Rich/styles.css b/src/components/UserDigest/Rich/styles.css index aa0cb664fb..9f9ca3c9c7 100644 --- a/src/components/UserDigest/Rich/styles.css +++ b/src/components/UserDigest/Rich/styles.css @@ -10,7 +10,7 @@ } } - &.limit .name { + &.clamp .name { max-width: 6.9375rem; } } diff --git a/src/views/ArticleDetail/TagList/index.tsx b/src/views/ArticleDetail/TagList/index.tsx index d3cb5f5bf7..cd5ff296a8 100644 --- a/src/views/ArticleDetail/TagList/index.tsx +++ b/src/views/ArticleDetail/TagList/index.tsx @@ -39,7 +39,7 @@ const TagList = ({ article }: { article: TagListArticle }) => { pageType: 'article_detail', }) }} - hasLengthLimit + canClamp /> diff --git a/src/views/Home/Feed/Authors/index.tsx b/src/views/Home/Feed/Authors/index.tsx index 60604a55a8..24d2fd58d1 100644 --- a/src/views/Home/Feed/Authors/index.tsx +++ b/src/views/Home/Feed/Authors/index.tsx @@ -105,7 +105,7 @@ const Authors = () => { id: node.id, }) } - hasLengthLimit + canClamp /> ))}

From e08369b31cb45ba5d9f5dc9e88e14c9c2f2f45f5 Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Fri, 9 Sep 2022 17:57:41 +0800 Subject: [PATCH 35/55] fix: revert change at #2494 --- src/components/Head/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Head/index.tsx b/src/components/Head/index.tsx index bc57584ac0..ca1dd5b517 100644 --- a/src/components/Head/index.tsx +++ b/src/components/Head/index.tsx @@ -67,7 +67,7 @@ export const Head: React.FC = (props) => { {head.title} From 20d437fc4c0855b6a179b7f0fe4bc0180f07040d Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Fri, 9 Sep 2022 18:40:40 +0800 Subject: [PATCH 36/55] fix(csp): add `ws:` to connect-src for Safari local dev --- src/common/enums/csp.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/common/enums/csp.ts b/src/common/enums/csp.ts index 4be8f3353b..47f12bbed5 100644 --- a/src/common/enums/csp.ts +++ b/src/common/enums/csp.ts @@ -66,6 +66,7 @@ const MEDIA_SRC = IMG_SRC const CONNECT_SRC = [ "'self'", + 'ws:', 'wss:', // API From 652aa0e76bf0d565a0745b7898d5851f172180c0 Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Fri, 9 Sep 2022 20:41:02 +0800 Subject: [PATCH 37/55] fix(i18n): revise english copies --- src/common/enums/text.ts | 15 +++------------ src/common/utils/datetime/relative.ts | 2 +- .../DropdownActions/ArchiveArticle/Button.tsx | 2 +- .../DropdownActions/ArchiveArticle/Dialog.tsx | 5 +++-- .../CommentFormDialog/CommentForm/index.tsx | 3 ++- .../LikeCoinDialog/SetupLikeCoin/Select/Intro.tsx | 2 +- src/components/Forms/CommentForm/index.tsx | 4 +++- src/components/Layout/SideNav/index.tsx | 6 ++++-- src/stories/components/Toast/Toasts.tsx | 1 + .../AppreciationButton/CivicLikerDialog.tsx | 1 + .../ArticleDetail/AppreciationButton/index.tsx | 2 +- src/views/Circle/Broadcast/Broadcast.tsx | 8 +++++++- src/views/Circle/Discussion/Discussion.tsx | 8 +++++++- src/views/TagDetail/DropdownActions/index.tsx | 6 +++++- src/views/TagDetail/index.tsx | 2 +- 15 files changed, 41 insertions(+), 26 deletions(-) diff --git a/src/common/enums/text.ts b/src/common/enums/text.ts index 416991714b..e18e1af8e7 100644 --- a/src/common/enums/text.ts +++ b/src/common/enums/text.ts @@ -24,7 +24,7 @@ export const TEXT = { allTopics: '熱議廣場', appreciationsReceived: '讚賞我的', appreciationsSent: '我讚賞的', - archived: '隱藏', + archive: '隱藏', ARTICLE_NOT_FOUND: '作品不存在', ARTICLE_REVISION_CONTENT_INVALID: '作品正文編輯距離超出上限', ARTICLE_REVISION_REACH_LIMIT: '作品修訂次數超出上限', @@ -126,7 +126,6 @@ export const TEXT = { failureLogout: '登出失敗,請重試', failurePublish: '發布失敗', failureUploadImage: '圖片上傳失敗', - featured: '精選', featuredComments: '社區精選', follow: '追蹤', followAuthor: '追蹤創作者', @@ -142,7 +141,6 @@ export const TEXT = { guide: '玩轉 Matters 實用指南', help: '說明', helpCenter: '幫助中心', - hide: '站內隱藏', hintAddTag: '通過添加標籤幫助讀者更好地找到你的作品。如果沒有合適的標籤,你可以創建新的。', hintAddRecommendedTag: '下方是你近期使用過標籤,點選添加:', @@ -313,7 +311,6 @@ export const TEXT = { tag: '標籤', tagAddArticle: '添加我的作品', tagAddEditor: '添加協作者', - tagAddSelectedArticle: '添加精選', tagCreated: '標籤已創建', tagDescription: '標籤描述', tagDescriptionPlaceholder: '輸入一段標籤描述…', @@ -390,7 +387,7 @@ export const TEXT = { allTopics: '热议广场', appreciationsReceived: '赞赏我的', appreciationsSent: '我赞赏的', - archived: '隐藏', + archive: '隐藏', ARTICLE_NOT_FOUND: '作品不存在', ARTICLE_REVISION_CONTENT_INVALID: '作品正文编辑距离超出上限', ARTICLE_REVISION_REACH_LIMIT: '作品修订次数超出上限', @@ -492,7 +489,6 @@ export const TEXT = { failureLogout: '登出失败,再来一次', failurePublish: '发布失败', failureUploadImage: '图片上传失败', - featured: '精选', featuredComments: '社区精选', follow: '追踪', followAuthor: '追踪创作者', @@ -508,7 +504,6 @@ export const TEXT = { guide: '玩转 Matters 实用指南', help: '说明', helpCenter: '帮助中心', - hide: '站内隐藏', hintAddTag: '通过添加标签帮助读者更好地找到你的作品。如果没有合适的标签,你可以创建新的。', hintAddRecommendedTag: '下方是你近期使用过标签,点选添加:', @@ -679,7 +674,6 @@ export const TEXT = { tag: '标签', tagAddArticle: '添加我的作品', tagAddEditor: '添加协作者', - tagAddSelectedArticle: '添加精选', tagCreated: '标签已创建', tagDescription: '标签描述', tagDescriptionPlaceholder: '输入一段话题描述…', @@ -756,7 +750,7 @@ export const TEXT = { allTopics: 'Recommended Topics', appreciationsReceived: 'Appreciation Received', appreciationsSent: 'Appreciation Given', - archived: 'Archived', + archive: 'Archive', ARTICLE_NOT_FOUND: 'Article not found', ARTICLE_REVISION_CONTENT_INVALID: 'Article revision content is invalid', ARTICLE_REVISION_REACH_LIMIT: 'Article revision count reach limit', @@ -864,7 +858,6 @@ export const TEXT = { failureLogout: 'Failed to log out, please try again.', failurePublish: 'Failed to publish, please try again.', failureUploadImage: 'Failed to upload, please try again.', - featured: 'Recommended for you', featuredComments: 'Community Selected', follow: 'Follow', followAuthor: 'Follow Author', @@ -881,7 +874,6 @@ export const TEXT = { guide: 'Explore Matters', help: 'Help', helpCenter: 'Help Center', - hide: 'Archived', hintAddTag: 'Adding tags helps readers find your articles. Add or create new tags.', hintAddRecommendedTag: 'Click to add tags you recently used :', @@ -1069,7 +1061,6 @@ export const TEXT = { tag: 'Tag', tagAddArticle: 'Add Article', tagAddEditor: 'Add tag editor', - tagAddSelectedArticle: 'Add Articles Into Selected', tagCreated: 'Tag Created', tagDescription: 'Description', tagDescriptionPlaceholder: 'Enter Description...', diff --git a/src/common/utils/datetime/relative.ts b/src/common/utils/datetime/relative.ts index e2d22f807d..6fd5a2bba3 100644 --- a/src/common/utils/datetime/relative.ts +++ b/src/common/utils/datetime/relative.ts @@ -11,7 +11,7 @@ import absolute from './absolute' const DIFFS = { zh_hant: { - justNow: '剛刚', + justNow: '剛剛', minuteAgo: ' 分钟前', minutesAgo: ' 分钟前', hourAgo: ' 小时前', diff --git a/src/components/ArticleDigest/DropdownActions/ArchiveArticle/Button.tsx b/src/components/ArticleDigest/DropdownActions/ArchiveArticle/Button.tsx index 3e5d3c2bdb..b74c8d9d1d 100644 --- a/src/components/ArticleDigest/DropdownActions/ArchiveArticle/Button.tsx +++ b/src/components/ArticleDigest/DropdownActions/ArchiveArticle/Button.tsx @@ -4,7 +4,7 @@ const ArchiveArticleButton = ({ openDialog }: { openDialog: () => void }) => { return ( } size="md" spacing="base"> - + ) diff --git a/src/components/ArticleDigest/DropdownActions/ArchiveArticle/Dialog.tsx b/src/components/ArticleDigest/DropdownActions/ArchiveArticle/Dialog.tsx index 62a66411fc..8dddd258e6 100644 --- a/src/components/ArticleDigest/DropdownActions/ArchiveArticle/Dialog.tsx +++ b/src/components/ArticleDigest/DropdownActions/ArchiveArticle/Dialog.tsx @@ -68,13 +68,14 @@ const ArchiveArticleDialog = ({ {children({ openDialog })} - +

@@ -87,7 +88,7 @@ const ArchiveArticleDialog = ({ closeDialog() }} > - + = ({ ), buttonPlacement: 'center', @@ -150,7 +151,7 @@ const CommentForm: React.FC = ({ type="submit" form={formId} disabled={isSubmitting || !isValid} - text={} + text={} loading={isSubmitting} /> } diff --git a/src/components/Dialogs/LikeCoinDialog/SetupLikeCoin/Select/Intro.tsx b/src/components/Dialogs/LikeCoinDialog/SetupLikeCoin/Select/Intro.tsx index cc766d31a0..18d346a439 100644 --- a/src/components/Dialogs/LikeCoinDialog/SetupLikeCoin/Select/Intro.tsx +++ b/src/components/Dialogs/LikeCoinDialog/SetupLikeCoin/Select/Intro.tsx @@ -16,7 +16,7 @@ const Intro = () => (
help.like.co diff --git a/src/components/Forms/CommentForm/index.tsx b/src/components/Forms/CommentForm/index.tsx index 478e1b0244..73f5db6fc9 100644 --- a/src/components/Forms/CommentForm/index.tsx +++ b/src/components/Forms/CommentForm/index.tsx @@ -159,7 +159,9 @@ export const CommentForm: React.FC = ({ weight="md" icon={isSubmitting && } > - {isSubmitting ? null : } + {isSubmitting ? null : ( + + )} diff --git a/src/components/Layout/SideNav/index.tsx b/src/components/Layout/SideNav/index.tsx index 938512801a..0ce5836574 100644 --- a/src/components/Layout/SideNav/index.tsx +++ b/src/components/Layout/SideNav/index.tsx @@ -71,7 +71,7 @@ const SideNav = () => { /> } + name={} icon={} activeIcon={} active={isInFollow} @@ -81,7 +81,9 @@ const SideNav = () => { {viewer.isAuthed && ( } + name={ + + } icon={} activeIcon={} active={isInNotification} diff --git a/src/stories/components/Toast/Toasts.tsx b/src/stories/components/Toast/Toasts.tsx index 7ac2bd0bb4..f2ca724ad4 100644 --- a/src/stories/components/Toast/Toasts.tsx +++ b/src/stories/components/Toast/Toasts.tsx @@ -66,6 +66,7 @@ const Toasts = () => ( ), customButton: , diff --git a/src/views/ArticleDetail/AppreciationButton/CivicLikerDialog.tsx b/src/views/ArticleDetail/AppreciationButton/CivicLikerDialog.tsx index 98eb81ea90..9a555ed9c1 100644 --- a/src/views/ArticleDetail/AppreciationButton/CivicLikerDialog.tsx +++ b/src/views/ArticleDetail/AppreciationButton/CivicLikerDialog.tsx @@ -55,6 +55,7 @@ const CivicLikerDialog = ({

diff --git a/src/views/ArticleDetail/AppreciationButton/index.tsx b/src/views/ArticleDetail/AppreciationButton/index.tsx index 6f39c178f1..8573061866 100644 --- a/src/views/ArticleDetail/AppreciationButton/index.tsx +++ b/src/views/ArticleDetail/AppreciationButton/index.tsx @@ -259,7 +259,7 @@ const AppreciationButton = ({ ), customButton: , diff --git a/src/views/Circle/Broadcast/Broadcast.tsx b/src/views/Circle/Broadcast/Broadcast.tsx index 126612b53e..955fd5c5be 100644 --- a/src/views/Circle/Broadcast/Broadcast.tsx +++ b/src/views/Circle/Broadcast/Broadcast.tsx @@ -212,7 +212,13 @@ const CricleBroadcast = () => { new CustomEvent(ADD_TOAST, { detail: { color: 'green', - content: , + content: ( + + ), buttonPlacement: 'center', }, }) diff --git a/src/views/Circle/Discussion/Discussion.tsx b/src/views/Circle/Discussion/Discussion.tsx index 8dcf6611bf..ea7ac24631 100644 --- a/src/views/Circle/Discussion/Discussion.tsx +++ b/src/views/Circle/Discussion/Discussion.tsx @@ -168,7 +168,13 @@ const CricleDiscussion = () => { new CustomEvent(ADD_TOAST, { detail: { color: 'green', - content: , + content: ( + + ), buttonPlacement: 'center', }, }) diff --git a/src/views/TagDetail/DropdownActions/index.tsx b/src/views/TagDetail/DropdownActions/index.tsx index 9f3b810054..f2d0ecc973 100644 --- a/src/views/TagDetail/DropdownActions/index.tsx +++ b/src/views/TagDetail/DropdownActions/index.tsx @@ -83,7 +83,11 @@ const BaseDropdownActions = ({ {hasAddSelectedArticle && ( } size="md" spacing="base"> - + )} diff --git a/src/views/TagDetail/index.tsx b/src/views/TagDetail/index.tsx index 609c91e541..f325611bb5 100644 --- a/src/views/TagDetail/index.tsx +++ b/src/views/TagDetail/index.tsx @@ -206,7 +206,7 @@ const TagDetail = ({ tag }: { tag: TagFragment }) => { selected={isSelected} onClick={() => changeFeed('selected')} > - + )} From 77f4bc38f2b97544e91ad840f00fb2b720aded31 Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Fri, 9 Sep 2022 21:21:15 +0800 Subject: [PATCH 38/55] fix(i18n): change "View All" to "All" --- src/common/enums/text.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/enums/text.ts b/src/common/enums/text.ts index e18e1af8e7..5e0687de52 100644 --- a/src/common/enums/text.ts +++ b/src/common/enums/text.ts @@ -1110,7 +1110,7 @@ export const TEXT = { userDescription: 'Profile', useWallet: 'Continue with Wallet', verificationCode: 'Verification Code', - viewAll: 'Show All', + viewAll: 'All', viewAppreciators: 'Likers', viewDonators: 'Donors', waitingForPublish: 'Waiting for publish.', From dc3de9c8e645778dbf2cde1f04e0ca0c41f3d2bb Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Fri, 9 Sep 2022 21:26:11 +0800 Subject: [PATCH 39/55] feat(error): add error message for `TOO_MANY_TAGS_FOR_ARTICLE` --- src/common/enums/errorCode.ts | 1 + src/common/enums/text.ts | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/common/enums/errorCode.ts b/src/common/enums/errorCode.ts index 4ae7d26563..348739b063 100644 --- a/src/common/enums/errorCode.ts +++ b/src/common/enums/errorCode.ts @@ -50,6 +50,7 @@ export const ERROR_CODES = { // Tag DUPLICATE_TAG: 'DUPLICATE_TAG', + TOO_MANY_TAGS_FOR_ARTICLE: 'TOO_MANY_TAGS_FOR_ARTICLE', NOT_ALLOW_ADD_TAG: 'NOT_ALLOW_ADD_TAG', NOT_ALLOW_ADD_OFFICIAL_TAG: 'NOT_ALLOW_ADD_OFFICIAL_TAG', TAG_EDITORS_REACH_LIMIT: 'TAG_EDITORS_REACH_LIMIT', diff --git a/src/common/enums/text.ts b/src/common/enums/text.ts index 5e0687de52..0d66b8b753 100644 --- a/src/common/enums/text.ts +++ b/src/common/enums/text.ts @@ -308,6 +308,7 @@ export const TEXT = { successUploadImage: '圖片上傳成功', TAG_EDITORS_REACH_LIMIT: '一個標籤最多僅可有 4 名協作者共同管理', TAG_NOT_FOUND: '標籤不存在', + TOO_MANY_TAGS_FOR_ARTICLE: '標籤添加最多至 10 個', tag: '標籤', tagAddArticle: '添加我的作品', tagAddEditor: '添加協作者', @@ -671,6 +672,7 @@ export const TEXT = { successUploadImage: '图片上传成功', TAG_EDITORS_REACH_LIMIT: '一个标签最多仅可有 4 名协作者共同管理', TAG_NOT_FOUND: '标签不存在', + TOO_MANY_TAGS_FOR_ARTICLE: '标签添加最多至 10 个', tag: '标签', tagAddArticle: '添加我的作品', tagAddEditor: '添加协作者', @@ -1058,6 +1060,7 @@ export const TEXT = { successUploadImage: 'Image uploaded', TAG_EDITORS_REACH_LIMIT: 'Maximum 4 editors allowed for each tag', TAG_NOT_FOUND: 'Tag not found', + TOO_MANY_TAGS_FOR_ARTICLE: 'Add up to 10 tags', tag: 'Tag', tagAddArticle: 'Add Article', tagAddEditor: 'Add tag editor', From 713b9ecde697034bd816ffd65b0b60bf06cddc3b Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Fri, 9 Sep 2022 21:08:05 +0800 Subject: [PATCH 40/55] fix(meta-tags): use tag name as page title --- src/views/TagDetail/index.tsx | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/views/TagDetail/index.tsx b/src/views/TagDetail/index.tsx index f325611bb5..9bd0aed6d5 100644 --- a/src/views/TagDetail/index.tsx +++ b/src/views/TagDetail/index.tsx @@ -1,5 +1,3 @@ -// import _find from 'lodash/find' -// import _some from 'lodash/some' import dynamic from 'next/dynamic' import { useContext, useEffect, useState } from 'react' @@ -33,7 +31,7 @@ import { toPath, } from '~/common/utils' -import IMAGE_INTRO from '@/public/static/images/intro.jpg' +import IMAGE_TAG_COVER from '@/public/static/images/tag-cover.png' import TagDetailArticles from './Articles' import ArticlesCount from './ArticlesCount' @@ -50,10 +48,7 @@ import Owner from './Owner' import RelatedTags from './RelatedTags' import styles from './styles.css' -import { - TagDetailPublic, - // TagDetailPublic_node_Tag, -} from './__generated__/TagDetailPublic' +import { TagDetailPublic } from './__generated__/TagDetailPublic' import { TagDetailPublicBySearch } from './__generated__/TagDetailPublicBySearch' import { TagFragment } from './__generated__/TagFragment' @@ -120,7 +115,7 @@ const TagDetail = ({ tag }: { tag: TagFragment }) => { (tag.description ? `${makeTitle(tag.description, 80)} ` : '') + '#' + stripAllPunct(tag.content) - const keywords = tag.content.split(/\s+/).filter(Boolean).map(stripAllPunct) // title.includes(tag.content) ?? + const keywords = tag.content.split(/\s+/).filter(Boolean).map(stripAllPunct) /** * Render @@ -150,12 +145,12 @@ const TagDetail = ({ tag }: { tag: TagFragment }) => { /> { description: tag.description, image: tag.cover || - `https://${process.env.NEXT_PUBLIC_SITE_DOMAIN}${IMAGE_INTRO.src}`, + `https://${process.env.NEXT_PUBLIC_SITE_DOMAIN}${IMAGE_TAG_COVER.src}`, url: `https://${process.env.NEXT_PUBLIC_SITE_DOMAIN}/tags/${tag.id}`, }} /> From 6d0df758912e52688f73a757edee5d23111c620c Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Fri, 9 Sep 2022 21:59:10 +0800 Subject: [PATCH 41/55] feat(responsive-image): revert to use WebP as animated image instead of GIF --- src/components/ResponsiveImage/index.tsx | 40 +++++++++++------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/src/components/ResponsiveImage/index.tsx b/src/components/ResponsiveImage/index.tsx index bbd743a443..eaa91ca260 100644 --- a/src/components/ResponsiveImage/index.tsx +++ b/src/components/ResponsiveImage/index.tsx @@ -21,7 +21,7 @@ const BaseResponsiveImage = ({ }: ResponsiveImageProps) => { const [error, setError] = useState(false) - const isGIF = /gif/i.test(url) + // const isGIF = /gif/i.test(url) // Fallback to the raw `url` if manually disable or responsive image is failed to load if (disabled || error) { @@ -30,17 +30,15 @@ const BaseResponsiveImage = ({ return ( setError(true)}> - {smUpSize && !isGIF && ( - - )} + {smUpSize && ( )} - {!isGIF && ( - - )} + From 0b0542b0a822a959c70e0f00ea181b74febe434b Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Wed, 7 Sep 2022 20:13:18 +0800 Subject: [PATCH 42/55] feat: support collapse in Expandable --- package-lock.json | 887 +++++------------- src/components/Expandable/index.tsx | 90 +- src/components/Expandable/styles.css | 45 + src/components/Notice/NoticeComment.tsx | 2 +- src/components/UserProfile/index.tsx | 7 +- src/components/UserProfile/styles.css | 8 - .../Circle/Profile/AuthorWidget/index.tsx | 2 +- src/views/Circle/Profile/index.tsx | 7 +- src/views/Circle/Profile/styles.css | 8 - .../Feed/FollowingFeedComment/index.tsx | 2 +- src/views/TagDetail/index.tsx | 9 +- src/views/TagDetail/styles.css | 7 - 12 files changed, 352 insertions(+), 722 deletions(-) diff --git a/package-lock.json b/package-lock.json index d8680d4f33..cdca1d1750 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13316,7 +13316,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, "dependencies": { "@webassemblyjs/helper-module-context": "1.9.0", "@webassemblyjs/helper-wasm-bytecode": "1.9.0", @@ -13326,26 +13325,22 @@ "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" }, "node_modules/@webassemblyjs/helper-code-frame": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, "dependencies": { "@webassemblyjs/wast-printer": "1.9.0" } @@ -13353,14 +13348,12 @@ "node_modules/@webassemblyjs/helper-fsm": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" }, "node_modules/@webassemblyjs/helper-module-context": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0" } @@ -13391,14 +13384,12 @@ "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -13410,7 +13401,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -13419,7 +13409,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -13427,14 +13416,12 @@ "node_modules/@webassemblyjs/utf8": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -13450,7 +13437,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-wasm-bytecode": "1.9.0", @@ -13463,7 +13449,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -13475,7 +13460,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-api-error": "1.9.0", @@ -13489,7 +13473,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/floating-point-hex-parser": "1.9.0", @@ -13503,7 +13486,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/wast-parser": "1.9.0", @@ -13530,14 +13512,12 @@ "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "node_modules/abab": { "version": "2.0.5", @@ -13900,7 +13880,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, + "devOptional": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -14535,7 +14515,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -14544,7 +14523,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -14553,7 +14531,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -14605,7 +14582,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -14696,7 +14672,6 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -14707,14 +14682,12 @@ "node_modules/asn1.js/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/assert": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, "dependencies": { "object-assign": "^4.1.1", "util": "0.10.3" @@ -14723,14 +14696,12 @@ "node_modules/assert/node_modules/inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "dev": true + "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==" }, "node_modules/assert/node_modules/util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "dev": true, "dependencies": { "inherits": "2.0.1" } @@ -14739,7 +14710,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -14757,7 +14727,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, "optional": true }, "node_modules/async-mutex": { @@ -14792,7 +14761,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, "bin": { "atob": "bin/atob.js" }, @@ -15603,7 +15571,6 @@ "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, "dependencies": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -15629,7 +15596,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "dependencies": { "is-descriptor": "^1.0.0" }, @@ -15641,7 +15607,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "dependencies": { "kind-of": "^6.0.0" }, @@ -15653,7 +15618,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "dependencies": { "kind-of": "^6.0.0" }, @@ -15665,7 +15629,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "dependencies": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -15679,7 +15642,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -15754,7 +15716,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -15768,7 +15730,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, "optional": true, "dependencies": { "file-uri-to-path": "1.0.0" @@ -15778,7 +15739,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, "optional": true }, "node_modules/blakejs": { @@ -15974,7 +15934,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, + "devOptional": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -16039,7 +15999,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -16050,7 +16009,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -16062,7 +16020,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, "dependencies": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" @@ -16072,7 +16029,6 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, "dependencies": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", @@ -16089,7 +16045,6 @@ "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", @@ -16109,7 +16064,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, "dependencies": { "pako": "~1.0.5" } @@ -16277,8 +16231,7 @@ "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" }, "node_modules/byline": { "version": "5.0.0", @@ -16423,7 +16376,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, "dependencies": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -16443,7 +16395,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -16783,7 +16734,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, + "devOptional": true, "funding": [ { "type": "individual", @@ -16815,7 +16766,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, "engines": { "node": ">=6.0" } @@ -16867,7 +16817,6 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, "dependencies": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -16882,7 +16831,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "dependencies": { "is-descriptor": "^0.1.0" }, @@ -16894,7 +16842,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -17424,7 +17371,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, "dependencies": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -17636,8 +17582,7 @@ "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "node_modules/compressible": { "version": "2.0.18", @@ -17728,8 +17673,7 @@ "node_modules/console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" }, "node_modules/console-control-strings": { "version": "1.1.0", @@ -17762,8 +17706,7 @@ "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" }, "node_modules/content-disposition": { "version": "0.5.3", @@ -17828,7 +17771,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -18282,7 +18224,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" @@ -18291,8 +18232,7 @@ "node_modules/create-ecdh/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/create-hash": { "version": "1.2.0", @@ -18390,7 +18330,6 @@ "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -19181,7 +19120,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, "dependencies": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -19194,7 +19132,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "dependencies": { "kind-of": "^6.0.0" }, @@ -19206,7 +19143,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "dependencies": { "kind-of": "^6.0.0" }, @@ -19218,7 +19154,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "dependencies": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -19232,7 +19167,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -19301,7 +19235,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -19423,7 +19356,6 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -19433,8 +19365,7 @@ "node_modules/diffie-hellman/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/dijkstrajs": { "version": "1.0.2", @@ -19529,7 +19460,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, "engines": { "node": ">=0.4", "npm": ">=1.2" @@ -19811,7 +19741,6 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "memory-fs": "^0.5.0", @@ -19825,7 +19754,6 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, "dependencies": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -19838,7 +19766,6 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -19853,7 +19780,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -19981,7 +19907,6 @@ "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, "dependencies": { "prr": "~1.0.1" }, @@ -20190,7 +20115,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, "dependencies": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -20216,7 +20140,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -20228,7 +20151,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "engines": { "node": ">=4.0" } @@ -20237,7 +20159,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, "engines": { "node": ">=4.0" } @@ -20673,7 +20594,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, "dependencies": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -20691,7 +20611,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "dependencies": { "is-descriptor": "^0.1.0" }, @@ -20703,7 +20622,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, @@ -20919,7 +20837,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -20932,7 +20849,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "dependencies": { "is-plain-object": "^2.0.4" }, @@ -20958,7 +20874,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, "dependencies": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -20977,7 +20892,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "dependencies": { "is-descriptor": "^1.0.0" }, @@ -20989,7 +20903,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, @@ -21001,7 +20914,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "dependencies": { "kind-of": "^6.0.0" }, @@ -21013,7 +20925,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "dependencies": { "kind-of": "^6.0.0" }, @@ -21025,7 +20936,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "dependencies": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -21343,7 +21253,7 @@ "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, + "devOptional": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -21591,7 +21501,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -21893,7 +21802,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, "dependencies": { "map-cache": "^0.2.2" }, @@ -22015,7 +21923,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -22294,7 +22201,6 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -22389,7 +22295,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "devOptional": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -22890,7 +22796,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, "dependencies": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -22904,7 +22809,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -22913,7 +22817,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, "dependencies": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -22926,7 +22829,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -22938,7 +22840,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -22950,7 +22851,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -23465,8 +23365,7 @@ "node_modules/https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" }, "node_modules/https-proxy-agent": { "version": "5.0.0", @@ -23648,7 +23547,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==", - "dev": true, + "devOptional": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -24021,7 +23920,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -24033,7 +23931,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -24095,7 +23992,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, + "devOptional": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -24122,8 +24019,7 @@ "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "node_modules/is-callable": { "version": "1.2.4", @@ -24164,7 +24060,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -24176,7 +24071,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -24209,7 +24103,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -24223,7 +24116,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -24266,7 +24158,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -24366,7 +24257,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.12.0" } @@ -24446,7 +24337,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, "dependencies": { "isobject": "^3.0.1" }, @@ -24458,7 +24348,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -24645,7 +24534,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -24664,7 +24552,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true, "engines": { "node": ">=4" } @@ -28814,8 +28701,7 @@ "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -28964,7 +28850,6 @@ "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" } @@ -29306,7 +29191,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true, "engines": { "node": ">=4.3.0 <5.0.0 || >=5.10" } @@ -29778,7 +29662,6 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -29802,7 +29685,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, "dependencies": { "object-visit": "^1.0.0" }, @@ -30071,7 +29953,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dev": true, "dependencies": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -30081,7 +29962,6 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -30096,7 +29976,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -30187,7 +30066,6 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -30211,7 +30089,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -30232,7 +30109,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, @@ -30244,7 +30120,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -30259,7 +30134,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, @@ -30271,7 +30145,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -30283,7 +30156,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -30295,7 +30167,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -30304,7 +30175,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, "dependencies": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -30322,7 +30192,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -30334,8 +30203,7 @@ "node_modules/miller-rabin/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/mime": { "version": "1.6.0", @@ -30546,7 +30414,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, "dependencies": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -30559,7 +30426,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "dependencies": { "is-plain-object": "^2.0.4" }, @@ -30609,7 +30475,6 @@ "version": "2.16.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", - "dev": true, "optional": true }, "node_modules/nano-time": { @@ -30635,7 +30500,6 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -30679,8 +30543,7 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "node_modules/nested-error-stacks": { "version": "2.1.1", @@ -30873,7 +30736,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, "dependencies": { "assert": "^1.1.1", "browserify-zlib": "^0.2.0", @@ -30904,7 +30766,6 @@ "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", @@ -30914,14 +30775,12 @@ "node_modules/node-libs-browser/node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, "node_modules/node-libs-browser/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -30936,7 +30795,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, "dependencies": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" @@ -30946,7 +30804,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -31095,7 +30952,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, "dependencies": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -31109,7 +30965,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "dependencies": { "is-descriptor": "^0.1.0" }, @@ -31121,7 +30976,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -31173,7 +31027,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, "dependencies": { "isobject": "^3.0.0" }, @@ -31185,7 +31038,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -31260,7 +31112,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, "dependencies": { "isobject": "^3.0.1" }, @@ -31272,7 +31123,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -31413,8 +31263,7 @@ "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" }, "node_modules/os-tmpdir": { "version": "1.0.2", @@ -31607,8 +31456,7 @@ "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "node_modules/parallel-transform": { "version": "1.2.0", @@ -31679,7 +31527,6 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, "dependencies": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", @@ -31824,7 +31671,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -31851,8 +31697,7 @@ "node_modules/path-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" }, "node_modules/path-case": { "version": "3.0.4", @@ -32107,7 +31952,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -34015,7 +33859,6 @@ "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true, "engines": { "node": ">= 0.6.0" } @@ -34170,8 +34013,7 @@ "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" }, "node_modules/psl": { "version": "1.8.0", @@ -34183,7 +34025,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -34196,8 +34037,7 @@ "node_modules/public-encrypt/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/pulltorefreshjs": { "version": "0.1.22", @@ -34458,7 +34298,6 @@ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, "engines": { "node": ">=0.4.x" } @@ -34467,7 +34306,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true, "engines": { "node": ">=0.4.x" } @@ -34546,7 +34384,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -35506,7 +35343,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, + "devOptional": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -35646,7 +35483,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, "dependencies": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -35957,7 +35793,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true + "devOptional": true }, "node_modules/renderkid": { "version": "2.0.7", @@ -36111,7 +35947,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -36120,7 +35955,6 @@ "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" } @@ -36246,8 +36080,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true + "deprecated": "https://github.com/lydell/resolve-url#deprecated" }, "node_modules/resolve-url-loader": { "version": "5.0.0", @@ -36278,7 +36111,6 @@ "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, "engines": { "node": ">=0.12" } @@ -36503,7 +36335,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, "dependencies": { "ret": "~0.1.10" } @@ -36845,7 +36676,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -36860,7 +36690,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, @@ -37048,7 +36877,6 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, "dependencies": { "base": "^0.11.1", "debug": "^2.2.0", @@ -37067,7 +36895,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, "dependencies": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -37081,7 +36908,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "dependencies": { "is-descriptor": "^1.0.0" }, @@ -37093,7 +36919,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "dependencies": { "kind-of": "^6.0.0" }, @@ -37105,7 +36930,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "dependencies": { "kind-of": "^6.0.0" }, @@ -37117,7 +36941,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "dependencies": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -37131,7 +36954,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -37140,7 +36962,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, "dependencies": { "kind-of": "^3.2.0" }, @@ -37152,7 +36973,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -37164,7 +36984,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "dependencies": { "is-descriptor": "^0.1.0" }, @@ -37176,7 +36995,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "dependencies": { "is-extendable": "^0.1.0" }, @@ -37188,7 +37006,6 @@ "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" } @@ -37218,7 +37035,6 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, "dependencies": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -37309,7 +37125,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, "dependencies": { "extend-shallow": "^3.0.0" }, @@ -37378,7 +37193,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, "dependencies": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -37391,7 +37205,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "dependencies": { "is-descriptor": "^0.1.0" }, @@ -37688,7 +37501,6 @@ "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", @@ -37701,7 +37513,6 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -37716,7 +37527,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -39019,7 +38829,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, "engines": { "node": ">=6" } @@ -39409,7 +39218,6 @@ "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, "dependencies": { "setimmediate": "^1.0.4" }, @@ -39456,8 +39264,7 @@ "node_modules/to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "dev": true + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==" }, "node_modules/to-fast-properties": { "version": "2.0.0", @@ -39471,7 +39278,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, "dependencies": { "kind-of": "^3.0.2" }, @@ -39483,7 +39289,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "dependencies": { "is-buffer": "^1.1.5" }, @@ -39495,7 +39300,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, "dependencies": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -39510,7 +39314,7 @@ "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, + "devOptional": true, "dependencies": { "is-number": "^7.0.0" }, @@ -40020,8 +39824,7 @@ "node_modules/tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "dev": true + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==" }, "node_modules/tunnel-agent": { "version": "0.6.0", @@ -40234,7 +40037,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -40435,7 +40237,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, "dependencies": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -40448,7 +40249,6 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, "dependencies": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -40462,7 +40262,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, "dependencies": { "isarray": "1.0.0" }, @@ -40474,7 +40273,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -40483,7 +40281,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -40539,14 +40336,12 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true + "deprecated": "Please see https://github.com/lydell/urix#deprecated" }, "node_modules/url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -40600,14 +40395,12 @@ "node_modules/url/node_modules/punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" }, "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -40715,7 +40508,6 @@ "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, "dependencies": { "inherits": "2.0.3" } @@ -40738,8 +40530,7 @@ "node_modules/util/node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "node_modules/utila": { "version": "0.4.0", @@ -40891,8 +40682,7 @@ "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, "node_modules/vscode-jsonrpc": { "version": "4.0.0", @@ -41020,7 +40810,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, "optional": true, "dependencies": { "chokidar": "^2.1.8" @@ -41030,7 +40819,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, "optional": true, "dependencies": { "micromatch": "^3.1.4", @@ -41041,7 +40829,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, "optional": true, "dependencies": { "remove-trailing-separator": "^1.0.1" @@ -41054,7 +40841,6 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, "optional": true, "engines": { "node": ">=0.10.0" @@ -41064,7 +40850,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, "optional": true, "dependencies": { "arr-flatten": "^1.1.0", @@ -41087,7 +40872,6 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dev": true, "optional": true, "dependencies": { "anymatch": "^2.0.0", @@ -41110,7 +40894,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, "optional": true, "dependencies": { "is-extendable": "^0.1.0" @@ -41123,7 +40906,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, "optional": true, "dependencies": { "extend-shallow": "^2.0.1", @@ -41140,7 +40922,6 @@ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -41158,7 +40939,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, "optional": true, "dependencies": { "is-glob": "^3.1.0", @@ -41169,7 +40949,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, "optional": true, "dependencies": { "is-extglob": "^2.1.0" @@ -41182,7 +40961,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, "optional": true, "dependencies": { "binary-extensions": "^1.0.0" @@ -41195,7 +40973,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, "optional": true, "dependencies": { "kind-of": "^3.0.2" @@ -41208,7 +40985,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, "optional": true, "engines": { "node": ">=0.10.0" @@ -41218,7 +40994,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, "optional": true, "dependencies": { "is-buffer": "^1.1.5" @@ -41231,7 +41006,6 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "optional": true, "dependencies": { "core-util-is": "~1.0.0", @@ -41247,7 +41021,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, "optional": true, "dependencies": { "graceful-fs": "^4.1.11", @@ -41262,7 +41035,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "optional": true, "dependencies": { "safe-buffer": "~5.1.0" @@ -41272,7 +41044,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, "optional": true, "dependencies": { "is-number": "^3.0.0", @@ -41301,7 +41072,6 @@ "version": "4.46.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-module-context": "1.9.0", @@ -41568,7 +41338,6 @@ "version": "6.4.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -41580,7 +41349,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, "dependencies": { "commondir": "^1.0.1", "make-dir": "^2.0.0", @@ -41594,7 +41362,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, "dependencies": { "locate-path": "^3.0.0" }, @@ -41606,7 +41373,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, "dependencies": { "minimist": "^1.2.0" }, @@ -41618,7 +41384,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -41632,7 +41397,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -41645,7 +41409,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -41658,7 +41421,6 @@ "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" }, @@ -41673,7 +41435,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, "dependencies": { "p-limit": "^2.0.0" }, @@ -41685,7 +41446,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, "engines": { "node": ">=4" } @@ -41694,7 +41454,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, "dependencies": { "find-up": "^3.0.0" }, @@ -41706,7 +41465,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, "dependencies": { "ajv": "^6.1.0", "ajv-errors": "^1.0.0", @@ -41720,7 +41478,6 @@ "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" } @@ -41729,7 +41486,6 @@ "version": "1.4.5", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, "dependencies": { "cacache": "^12.0.2", "find-cache-dir": "^2.1.0", @@ -41752,7 +41508,6 @@ "version": "1.7.5", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" @@ -42133,7 +41888,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, "dependencies": { "errno": "~0.1.7" } @@ -42575,7 +42329,8 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@apollographql/graphql-language-service-types/-/graphql-language-service-types-2.0.2.tgz", "integrity": "sha512-vE+Dz8pG+Xa1Z2nMl82LoO66lQ6JqBUjaXqLDvS3eMjvA3N4hf+YUDOWfPdNZ0zjhHhHXzUIIZCkax6bXfFbzQ==", - "dev": true + "dev": true, + "requires": {} }, "@apollographql/graphql-language-service-utils": { "version": "2.0.2", @@ -44513,7 +44268,8 @@ "ws": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} } } }, @@ -44701,12 +44457,14 @@ "@firebase/auth-interop-types": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.5.tgz", - "integrity": "sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw==" + "integrity": "sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw==", + "requires": {} }, "@firebase/auth-types": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.10.1.tgz", - "integrity": "sha512-/+gBHb1O9x/YlG7inXfxff/6X3BPZt4zgBv4kql6HEmdzNQCodIRlEYnI+/da+lN+dha7PjaFH7C7ewMmfV7rw==" + "integrity": "sha512-/+gBHb1O9x/YlG7inXfxff/6X3BPZt4zgBv4kql6HEmdzNQCodIRlEYnI+/da+lN+dha7PjaFH7C7ewMmfV7rw==", + "requires": {} }, "@firebase/component": { "version": "0.1.19", @@ -44758,7 +44516,8 @@ "@firebase/firestore-types": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-1.13.0.tgz", - "integrity": "sha512-QF5CAuYOHE6Zbsn1uEg6wkl836iP+i6C0C/Zs3kF60eebxZvTWp8JSZk19Ar+jj4w+ye8/7H5olu5CqDNjWpEA==" + "integrity": "sha512-QF5CAuYOHE6Zbsn1uEg6wkl836iP+i6C0C/Zs3kF60eebxZvTWp8JSZk19Ar+jj4w+ye8/7H5olu5CqDNjWpEA==", + "requires": {} }, "@firebase/functions": { "version": "0.5.1", @@ -44792,7 +44551,8 @@ "@firebase/installations-types": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.3.4.tgz", - "integrity": "sha512-RfePJFovmdIXb6rYwtngyxuEcWnOrzdZd9m7xAW0gRxDIjBT20n3BOhjpmgRWXo/DAxRmS7bRjWAyTHY9cqN7Q==" + "integrity": "sha512-RfePJFovmdIXb6rYwtngyxuEcWnOrzdZd9m7xAW0gRxDIjBT20n3BOhjpmgRWXo/DAxRmS7bRjWAyTHY9cqN7Q==", + "requires": {} }, "@firebase/logger": { "version": "0.2.6", @@ -44815,7 +44575,8 @@ "@firebase/messaging-types": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.5.0.tgz", - "integrity": "sha512-QaaBswrU6umJYb/ZYvjR5JDSslCGOH6D9P136PhabFAHLTR4TWjsaACvbBXuvwrfCXu10DtcjMxqfhdNIB1Xfg==" + "integrity": "sha512-QaaBswrU6umJYb/ZYvjR5JDSslCGOH6D9P136PhabFAHLTR4TWjsaACvbBXuvwrfCXu10DtcjMxqfhdNIB1Xfg==", + "requires": {} }, "@firebase/performance": { "version": "0.4.2", @@ -44884,7 +44645,8 @@ "@firebase/storage-types": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.13.tgz", - "integrity": "sha512-pL7b8d5kMNCCL0w9hF7pr16POyKkb3imOW7w0qYrhBnbyJTdVxMWZhb0HxCFyQWC0w3EiIFFmxoz8NTFZDEFog==" + "integrity": "sha512-pL7b8d5kMNCCL0w9hF7pr16POyKkb3imOW7w0qYrhBnbyJTdVxMWZhb0HxCFyQWC0w3EiIFFmxoz8NTFZDEFog==", + "requires": {} }, "@firebase/util": { "version": "0.3.2", @@ -46474,7 +46236,8 @@ "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "dev": true + "dev": true, + "requires": {} }, "@mdx-js/util": { "version": "1.6.22", @@ -48872,7 +48635,8 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true + "dev": true, + "requires": {} }, "jest-worker": { "version": "27.5.1", @@ -48910,7 +48674,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -49620,7 +49385,8 @@ "version": "8.8.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -50171,7 +49937,8 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true + "dev": true, + "requires": {} }, "jest-worker": { "version": "27.5.1", @@ -50241,7 +50008,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -52309,7 +52077,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, "requires": { "@webassemblyjs/helper-module-context": "1.9.0", "@webassemblyjs/helper-wasm-bytecode": "1.9.0", @@ -52319,26 +52086,22 @@ "@webassemblyjs/floating-point-hex-parser": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" }, "@webassemblyjs/helper-api-error": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" }, "@webassemblyjs/helper-buffer": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" }, "@webassemblyjs/helper-code-frame": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, "requires": { "@webassemblyjs/wast-printer": "1.9.0" } @@ -52346,14 +52109,12 @@ "@webassemblyjs/helper-fsm": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" }, "@webassemblyjs/helper-module-context": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0" } @@ -52386,14 +52147,12 @@ "@webassemblyjs/helper-wasm-bytecode": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" }, "@webassemblyjs/helper-wasm-section": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -52405,7 +52164,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } @@ -52414,7 +52172,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, "requires": { "@xtuc/long": "4.2.2" } @@ -52422,14 +52179,12 @@ "@webassemblyjs/utf8": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" }, "@webassemblyjs/wasm-edit": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -52445,7 +52200,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-wasm-bytecode": "1.9.0", @@ -52458,7 +52212,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -52470,7 +52223,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-api-error": "1.9.0", @@ -52484,7 +52236,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/floating-point-hex-parser": "1.9.0", @@ -52498,7 +52249,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/wast-parser": "1.9.0", @@ -52525,14 +52275,12 @@ "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "abab": { "version": "2.0.5", @@ -52584,13 +52332,15 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true + "dev": true, + "requires": {} }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "requires": {} }, "acorn-walk": { "version": "8.1.1", @@ -52696,12 +52446,14 @@ "ajv-errors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "requires": {} }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} }, "ansi-align": { "version": "3.0.1", @@ -52804,7 +52556,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, + "devOptional": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -53264,7 +53016,8 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.5.0.tgz", "integrity": "sha512-lO5oTjgiC3vlVg2RKr3RiXIIQ5pGXBFxYGGUkKDhTud3jMIhs+gel8L8zsEjKaKxkjHhCQAA/bcEfYiKkGQIvA==", - "dev": true + "dev": true, + "requires": {} }, "apollo-utilities": { "version": "1.3.4", @@ -53326,20 +53079,17 @@ "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, "array-flatten": { "version": "1.1.1", @@ -53375,8 +53125,7 @@ "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "array.prototype.flat": { "version": "1.3.0", @@ -53437,7 +53186,6 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -53448,8 +53196,7 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, @@ -53457,7 +53204,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, "requires": { "object-assign": "^4.1.1", "util": "0.10.3" @@ -53466,14 +53212,12 @@ "inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "dev": true + "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==" }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "dev": true, "requires": { "inherits": "2.0.1" } @@ -53483,8 +53227,7 @@ "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "astral-regex": { "version": "1.0.0", @@ -53496,7 +53239,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, "optional": true }, "async-mutex": { @@ -53529,8 +53271,7 @@ "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "autoprefixer": { "version": "9.8.6", @@ -53945,7 +53686,8 @@ "version": "0.3.8", "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "dev": true + "dev": true, + "requires": {} }, "babel-plugin-polyfill-corejs2": { "version": "0.3.1", @@ -54184,7 +53926,6 @@ "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -54199,7 +53940,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -54208,7 +53948,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -54217,7 +53956,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -54226,7 +53964,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -54236,8 +53973,7 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -54293,7 +54029,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true + "devOptional": true }, "bind-decorator": { "version": "1.0.11", @@ -54304,7 +54040,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, "optional": true, "requires": { "file-uri-to-path": "1.0.0" @@ -54314,7 +54049,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, "optional": true } } @@ -54472,7 +54206,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, + "devOptional": true, "requires": { "fill-range": "^7.0.1" } @@ -54530,7 +54264,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, "requires": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -54541,7 +54274,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -54553,7 +54285,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, "requires": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" @@ -54563,7 +54294,6 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, "requires": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", @@ -54579,8 +54309,7 @@ "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 + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, @@ -54588,7 +54317,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, "requires": { "pako": "~1.0.5" } @@ -54710,8 +54438,7 @@ "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" }, "byline": { "version": "5.0.0", @@ -54824,7 +54551,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -54840,8 +54566,7 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -55103,7 +54828,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, + "devOptional": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -55123,8 +54848,7 @@ "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" }, "chromedriver": { "version": "92.0.1", @@ -55166,7 +54890,6 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -55178,7 +54901,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -55186,8 +54908,7 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -55599,7 +55320,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -55766,8 +55486,7 @@ "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "compressible": { "version": "2.0.18", @@ -55850,8 +55569,7 @@ "console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" }, "console-control-strings": { "version": "1.1.0", @@ -55886,8 +55604,7 @@ "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" }, "content-disposition": { "version": "0.5.3", @@ -55942,8 +55659,7 @@ "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "copy-to-clipboard": { "version": "3.3.1", @@ -56288,7 +56004,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, "requires": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" @@ -56297,8 +56012,7 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, @@ -56385,7 +56099,6 @@ "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, "requires": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -57026,7 +56739,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -57036,7 +56748,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -57045,7 +56756,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -57054,7 +56764,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -57064,8 +56773,7 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -57117,7 +56825,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, "requires": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -57206,7 +56913,6 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, "requires": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -57216,8 +56922,7 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, @@ -57300,8 +57005,7 @@ "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" }, "domelementtype": { "version": "1.3.1", @@ -57558,7 +57262,6 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "memory-fs": "^0.5.0", @@ -57569,7 +57272,6 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, "requires": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -57579,7 +57281,6 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -57594,7 +57295,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -57690,7 +57390,6 @@ "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, "requires": { "prr": "~1.0.1" } @@ -57866,7 +57565,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -57882,7 +57580,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "requires": { "estraverse": "^5.2.0" }, @@ -57890,16 +57587,14 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" } } }, "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "estree-to-babel": { "version": "3.2.1", @@ -58268,7 +57963,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -58283,7 +57977,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -58292,7 +57985,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -58468,7 +58160,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -58478,7 +58169,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -58500,7 +58190,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -58516,7 +58205,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -58525,7 +58213,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -58534,7 +58221,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -58543,7 +58229,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -58552,7 +58237,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -58809,7 +58493,7 @@ "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, + "devOptional": true, "requires": { "to-regex-range": "^5.0.1" } @@ -59009,8 +58693,7 @@ "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, "foreground-child": { "version": "2.0.0", @@ -59216,7 +58899,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, "requires": { "map-cache": "^0.2.2" } @@ -59330,7 +59012,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "optional": true }, "function-bind": { @@ -59529,8 +59210,7 @@ "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" }, "git-parse": { "version": "1.0.4", @@ -59617,7 +59297,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "devOptional": true, "requires": { "is-glob": "^4.0.1" } @@ -59854,7 +59534,8 @@ "graphql-tag": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.11.0.tgz", - "integrity": "sha512-VmsD5pJqWJnQZMUeRwrDhfgoyqcfwEkvtpANqcoUG8/tOLkwNgU9mzub/Mc78OJMhHjx7gfAMTxzdG43VGg3bA==" + "integrity": "sha512-VmsD5pJqWJnQZMUeRwrDhfgoyqcfwEkvtpANqcoUG8/tOLkwNgU9mzub/Mc78OJMhHjx7gfAMTxzdG43VGg3bA==", + "requires": {} }, "gtoken": { "version": "5.2.1", @@ -59986,7 +59667,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -59996,8 +59676,7 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -60005,7 +59684,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -60015,7 +59693,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -60024,7 +59701,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -60035,7 +59711,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -60455,8 +60130,7 @@ "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" }, "https-proxy-agent": { "version": "5.0.0", @@ -60577,7 +60251,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==", - "dev": true + "devOptional": true }, "import-cwd": { "version": "2.1.0", @@ -60872,7 +60546,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -60881,7 +60554,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -60925,7 +60597,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, + "devOptional": true, "requires": { "binary-extensions": "^2.0.0" } @@ -60943,8 +60615,7 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { "version": "1.2.4", @@ -60973,7 +60644,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -60982,7 +60652,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -61004,7 +60673,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -61014,8 +60682,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, @@ -61044,8 +60711,7 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { "version": "2.1.1", @@ -61113,7 +60779,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "devOptional": true }, "is-number-object": { "version": "1.0.7", @@ -61166,7 +60832,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, "requires": { "isobject": "^3.0.1" }, @@ -61174,8 +60839,7 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -61311,8 +60975,7 @@ "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, "is-word-character": { "version": "1.0.4", @@ -61323,8 +60986,7 @@ "is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" }, "is2": { "version": "2.0.7", @@ -63100,7 +62762,8 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true + "dev": true, + "requires": {} }, "jest-regex-util": { "version": "26.0.0", @@ -64539,8 +64202,7 @@ "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, "json-parse-even-better-errors": { "version": "2.3.1", @@ -64666,8 +64328,7 @@ "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 + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "kleur": { "version": "3.0.3", @@ -64930,8 +64591,7 @@ "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" }, "loader-utils": { "version": "2.0.0", @@ -65316,8 +64976,7 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" }, "map-obj": { "version": "1.0.1", @@ -65335,7 +64994,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, "requires": { "object-visit": "^1.0.0" } @@ -65350,7 +65008,8 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.7.tgz", "integrity": "sha512-VI3TyyHlGkO8uFle0IOibzpO1c1iJDcXcS/zBrQrXQQvJ2tpdwVzVZ7XdKsyRz1NdRmre4dqQkMZzUHaKIG/1w==", - "dev": true + "dev": true, + "requires": {} }, "match-sorter": { "version": "6.3.1", @@ -65539,7 +65198,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dev": true, "requires": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -65549,7 +65207,6 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -65564,7 +65221,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -65635,7 +65291,6 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -65656,7 +65311,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -65674,7 +65328,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -65685,7 +65338,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -65697,7 +65349,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -65708,7 +65359,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -65717,7 +65367,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -65727,14 +65376,12 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -65751,7 +65398,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -65760,8 +65406,7 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, @@ -65925,7 +65570,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -65935,7 +65579,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -65978,7 +65621,6 @@ "version": "2.16.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", - "dev": true, "optional": true }, "nano-time": { @@ -65998,7 +65640,6 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -66033,8 +65674,7 @@ "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "nested-error-stacks": { "version": "2.1.1", @@ -66176,7 +65816,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, "requires": { "assert": "^1.1.1", "browserify-zlib": "^0.2.0", @@ -66207,7 +65846,6 @@ "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", @@ -66217,14 +65855,12 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -66239,7 +65875,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, "requires": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" @@ -66249,7 +65884,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -66380,7 +66014,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -66391,7 +66024,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -66400,7 +66032,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -66436,7 +66067,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, "requires": { "isobject": "^3.0.0" }, @@ -66444,8 +66074,7 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -66498,7 +66127,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, "requires": { "isobject": "^3.0.1" }, @@ -66506,8 +66134,7 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -66616,8 +66243,7 @@ "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" }, "os-tmpdir": { "version": "1.0.2", @@ -66753,8 +66379,7 @@ "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "parallel-transform": { "version": "1.2.0", @@ -66826,7 +66451,6 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, "requires": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", @@ -66946,8 +66570,7 @@ "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, "password-prompt": { "version": "1.1.2", @@ -66970,8 +66593,7 @@ "path-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" }, "path-case": { "version": "3.0.4", @@ -67163,8 +66785,7 @@ "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { "version": "8.4.5", @@ -68504,7 +68125,8 @@ "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 + "dev": true, + "requires": {} }, "postcss-value-parser": { "version": "4.1.0", @@ -68617,8 +68239,7 @@ "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" }, "process-nextick-args": { "version": "2.0.1", @@ -68747,8 +68368,7 @@ "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" }, "psl": { "version": "1.8.0", @@ -68760,7 +68380,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -68773,8 +68392,7 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, @@ -68981,14 +68599,12 @@ "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "dev": true + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" }, "querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==" }, "queue": { "version": "6.0.2", @@ -69051,7 +68667,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, "requires": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -69131,7 +68746,8 @@ "version": "5.5.1", "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.5.1.tgz", "integrity": "sha512-M1TJH2X3RXEt12sWkpa6hLc/bbYS0H6F4rIqjQZ+RxNBstpY67d9TrFXtqdZwhpmBXcCwEi7stKqFue3ZRkiOg==", - "dev": true + "dev": true, + "requires": {} }, "react-copy-to-clipboard": { "version": "5.0.4", @@ -69329,7 +68945,8 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", - "dev": true + "dev": true, + "requires": {} }, "react-dom": { "version": "17.0.2", @@ -69686,7 +69303,8 @@ "react-use-gesture": { "version": "9.1.3", "resolved": "https://registry.npmjs.org/react-use-gesture/-/react-use-gesture-9.1.3.tgz", - "integrity": "sha512-CdqA2SmS/fj3kkS2W8ZU8wjTbVBAIwDWaRprX7OKaj7HlGwBasGEFggmk5qNklknqk9zK/h8D355bEJFTpqEMg==" + "integrity": "sha512-CdqA2SmS/fj3kkS2W8ZU8wjTbVBAIwDWaRprX7OKaj7HlGwBasGEFggmk5qNklknqk9zK/h8D355bEJFTpqEMg==", + "requires": {} }, "react-virtualized": { "version": "9.22.3", @@ -69765,7 +69383,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, + "devOptional": true, "requires": { "picomatch": "^2.2.1" } @@ -69884,7 +69502,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -70123,7 +69740,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true + "devOptional": true }, "renderkid": { "version": "2.0.7", @@ -70235,14 +69852,12 @@ "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" }, "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 + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "require-directory": { "version": "2.1.1", @@ -70339,8 +69954,7 @@ "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, "resolve-url-loader": { "version": "5.0.0", @@ -70367,8 +69981,7 @@ "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, "reusify": { "version": "1.0.4", @@ -70542,7 +70155,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, "requires": { "ret": "~0.1.10" } @@ -70810,7 +70422,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -70822,7 +70433,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -70976,7 +70586,6 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -70992,7 +70601,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -71001,7 +70609,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -71009,8 +70616,7 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, @@ -71018,7 +70624,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -71029,7 +70634,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -71038,7 +70642,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -71047,7 +70650,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -71056,7 +70658,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -71066,8 +70667,7 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -71075,7 +70675,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, "requires": { "kind-of": "^3.2.0" }, @@ -71084,7 +70683,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -71110,7 +70708,6 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, "requires": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -71191,7 +70788,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, "requires": { "extend-shallow": "^3.0.0" } @@ -71249,7 +70845,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -71259,7 +70854,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -71477,7 +71071,6 @@ "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, "requires": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", @@ -71490,7 +71083,6 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -71505,7 +71097,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -71726,7 +71317,8 @@ "styled-jsx": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.1.tgz", - "integrity": "sha512-+PIZ/6Uk40mphiQJJI1202b+/dYeTVd9ZnMPR80pgiWbjIwvN2zIp4r9et0BgqBuShh48I0gttPlAXA7WVvBxw==" + "integrity": "sha512-+PIZ/6Uk40mphiQJJI1202b+/dYeTVd9ZnMPR80pgiWbjIwvN2zIp4r9et0BgqBuShh48I0gttPlAXA7WVvBxw==", + "requires": {} }, "styled-jsx-plugin-postcss": { "version": "4.0.1", @@ -72207,7 +71799,8 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-8.0.2.tgz", "integrity": "sha512-TN1l93iVTXpF9NJstlvP7nOu9zY2k+mN0NSFQ/VEGz15ZIP9ohdDZTtCWHs5LjctAhSAzaILULGbgiM0ItId3A==", - "dev": true + "dev": true, + "requires": {} }, "stylelint-config-recess-order": { "version": "2.5.0", @@ -72222,7 +71815,8 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-5.0.0.tgz", "integrity": "sha512-c8aubuARSu5A3vEHLBeOSJt1udOdS+1iue7BmJDTSXoCBmfEQmmWX+59vYIj3NQdJBY6a/QRv1ozVFpaB9jaqA==", - "dev": true + "dev": true, + "requires": {} }, "stylelint-config-standard": { "version": "22.0.0", @@ -72464,8 +72058,7 @@ "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, "tar": { "version": "6.1.11", @@ -72765,7 +72358,6 @@ "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, "requires": { "setimmediate": "^1.0.4" } @@ -72806,8 +72398,7 @@ "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "dev": true + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==" }, "to-fast-properties": { "version": "2.0.0", @@ -72818,7 +72409,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -72827,7 +72417,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -72838,7 +72427,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -72850,7 +72438,7 @@ "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, + "devOptional": true, "requires": { "is-number": "^7.0.0" } @@ -73195,7 +72783,8 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/tslint-react-hooks/-/tslint-react-hooks-2.2.2.tgz", "integrity": "sha512-gtwA14+WevNUtlBhvAD5Ukpxt2qMegYI7IDD8zN/3JXLksdLdEuU/T/oqlI1CtZhMJffqyNn+aqq2oUqUFXiNA==", - "dev": true + "dev": true, + "requires": {} }, "tsutils": { "version": "2.29.0", @@ -73215,8 +72804,7 @@ "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "dev": true + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==" }, "tunnel-agent": { "version": "0.6.0", @@ -73360,7 +72948,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -73509,7 +73096,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -73519,7 +73105,6 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -73530,7 +73115,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, "requires": { "isarray": "1.0.0" } @@ -73540,14 +73124,12 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -73601,14 +73183,12 @@ "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, "requires": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -73617,8 +73197,7 @@ "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" } } }, @@ -73649,30 +73228,33 @@ "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "use-callback-ref": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.2.5.tgz", - "integrity": "sha512-gN3vgMISAgacF7sqsLPByqoePooY3n2emTH59Ur5d/M8eg4WTWu1xp8i8DHjohftIyEx0S08RiYxbffr4j8Peg==" + "integrity": "sha512-gN3vgMISAgacF7sqsLPByqoePooY3n2emTH59Ur5d/M8eg4WTWu1xp8i8DHjohftIyEx0S08RiYxbffr4j8Peg==", + "requires": {} }, "use-composed-ref": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "dev": true + "dev": true, + "requires": {} }, "use-debounce": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/use-debounce/-/use-debounce-7.0.1.tgz", - "integrity": "sha512-fOrzIw2wstbAJuv8PC9Vg4XgwyTLEOdq4y/Z3IhVl8DAE4svRcgyEUvrEXu+BMNgMoc3YND6qLT61kkgEKXh7Q==" + "integrity": "sha512-fOrzIw2wstbAJuv8PC9Vg4XgwyTLEOdq4y/Z3IhVl8DAE4svRcgyEUvrEXu+BMNgMoc3YND6qLT61kkgEKXh7Q==", + "requires": {} }, "use-isomorphic-layout-effect": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "dev": true + "dev": true, + "requires": {} }, "use-latest": { "version": "1.2.1", @@ -73686,7 +73268,8 @@ "use-memo-one": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.2.tgz", - "integrity": "sha512-u2qFKtxLsia/r8qG0ZKkbytbztzRb317XCkT7yP8wxL0tZ/CzK2G+WWie5vWvpyeP7+YoPIwbJoIHJ4Ba4k0oQ==" + "integrity": "sha512-u2qFKtxLsia/r8qG0ZKkbytbztzRb317XCkT7yP8wxL0tZ/CzK2G+WWie5vWvpyeP7+YoPIwbJoIHJ4Ba4k0oQ==", + "requires": {} }, "use-sidecar": { "version": "1.0.5", @@ -73700,13 +73283,13 @@ "use-sync-external-store": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz", - "integrity": "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==" + "integrity": "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==", + "requires": {} }, "util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, "requires": { "inherits": "2.0.3" }, @@ -73714,8 +73297,7 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" } } }, @@ -73840,8 +73422,7 @@ "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, "vscode-jsonrpc": { "version": "4.0.0", @@ -73943,7 +73524,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, "optional": true, "requires": { "chokidar": "^2.1.8" @@ -73953,7 +73533,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, "optional": true, "requires": { "micromatch": "^3.1.4", @@ -73964,7 +73543,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, "optional": true, "requires": { "remove-trailing-separator": "^1.0.1" @@ -73976,14 +73554,12 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, "optional": true }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, "optional": true, "requires": { "arr-flatten": "^1.1.0", @@ -74002,7 +73578,6 @@ "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, "optional": true, "requires": { "anymatch": "^2.0.0", @@ -74023,7 +73598,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, "optional": true, "requires": { "is-extendable": "^0.1.0" @@ -74033,7 +73607,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, "optional": true, "requires": { "extend-shallow": "^2.0.1", @@ -74046,7 +73619,6 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, "optional": true, "requires": { "bindings": "^1.5.0", @@ -74057,7 +73629,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, "optional": true, "requires": { "is-glob": "^3.1.0", @@ -74068,7 +73639,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, "optional": true, "requires": { "is-extglob": "^2.1.0" @@ -74080,7 +73650,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, "optional": true, "requires": { "binary-extensions": "^1.0.0" @@ -74090,7 +73659,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, "optional": true, "requires": { "kind-of": "^3.0.2" @@ -74100,14 +73668,12 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, "optional": true }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, "optional": true, "requires": { "is-buffer": "^1.1.5" @@ -74117,7 +73683,6 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "optional": true, "requires": { "core-util-is": "~1.0.0", @@ -74133,7 +73698,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, "optional": true, "requires": { "graceful-fs": "^4.1.11", @@ -74145,7 +73709,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "optional": true, "requires": { "safe-buffer": "~5.1.0" @@ -74155,7 +73718,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, "optional": true, "requires": { "is-number": "^3.0.0", @@ -74179,7 +73741,6 @@ "version": "4.46.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-module-context": "1.9.0", @@ -74209,14 +73770,12 @@ "acorn": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" }, "find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, "requires": { "commondir": "^1.0.1", "make-dir": "^2.0.0", @@ -74227,7 +73786,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, "requires": { "locate-path": "^3.0.0" } @@ -74236,7 +73794,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, "requires": { "minimist": "^1.2.0" } @@ -74245,7 +73802,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -74256,7 +73812,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -74266,7 +73821,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, "requires": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -74276,7 +73830,6 @@ "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" } @@ -74285,7 +73838,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, "requires": { "p-limit": "^2.0.0" } @@ -74293,14 +73845,12 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, "requires": { "find-up": "^3.0.0" } @@ -74309,7 +73859,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, "requires": { "ajv": "^6.1.0", "ajv-errors": "^1.0.0", @@ -74319,14 +73868,12 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "terser-webpack-plugin": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, "requires": { "cacache": "^12.0.2", "find-cache-dir": "^2.1.0", @@ -74343,7 +73890,6 @@ "version": "1.7.5", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, "requires": { "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", @@ -74449,7 +73995,8 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz", "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==", - "dev": true + "dev": true, + "requires": {} }, "webpack-hot-middleware": { "version": "2.25.1", @@ -74850,7 +74397,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, "requires": { "errno": "~0.1.7" } @@ -74944,7 +74490,8 @@ "ws": { "version": "7.5.3", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", - "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==" + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", + "requires": {} }, "xml-name-validator": { "version": "3.0.0", diff --git a/src/components/Expandable/index.tsx b/src/components/Expandable/index.tsx index cb2aefa847..05d57400a1 100644 --- a/src/components/Expandable/index.tsx +++ b/src/components/Expandable/index.tsx @@ -1,43 +1,75 @@ import VisuallyHidden from '@reach/visually-hidden' -import React, { useEffect, useRef, useState } from 'react' +import classNames from 'classnames' +import React, { ReactElement, useEffect, useRef, useState } from 'react' -import { Button, IconExpand16, TextIcon, Translate } from '~/components' +import { Button, IconArrowUp16, TextIcon, Translate } from '~/components' + +import { stripHtml } from '@/src/common/utils/text' import styles from './styles.css' +type CollapseTextColor = + | 'black' + | 'grey' + | 'grey-light' + | 'grey-darker' + | 'grey-dark' + | 'white' + interface ExpandableProps { + children: ReactElement + content: string | null limit?: number buffer?: number + color?: CollapseTextColor + size?: 'sm' | 'md-s' | 'md' + spacingTop?: 'base' } -export const Expandable: React.FC> = ({ +export const Expandable: React.FC = ({ children, + content, limit = 3, buffer = 0, + color, + size, + spacingTop, }) => { const [expandable, setExpandable] = useState(false) const [expand, setExpand] = useState(true) - const node: React.RefObject | null = useRef(null) + const collapseContent = stripHtml( + content && content.replace(/\r?\n|\r|\s\s/g, '') + ) + const contentClasses = classNames({ + expandable: true, + [`${color}`]: !!color, + [`size-${size}`]: !!size, + [`spacing-top-${spacingTop}`]: !!spacingTop, + }) useEffect(() => { - if (node?.current) { - const height = node.current.firstElementChild?.clientHeight || 0 - const lineHeight = window - .getComputedStyle(node.current, null) - .getPropertyValue('line-height') - const lines = Math.max(Math.ceil(height / parseInt(lineHeight, 10)), 0) + setExpandable(false) + setExpand(true) + setTimeout(() => { + if (node?.current) { + const height = node.current.firstElementChild?.clientHeight || 0 + const lineHeight = window + .getComputedStyle(node.current, null) + .getPropertyValue('line-height') + const lines = Math.max(Math.ceil(height / parseInt(lineHeight, 10)), 0) - if (lines > limit + buffer) { - setExpandable(true) - setExpand(false) + if (lines > limit + buffer) { + setExpandable(true) + setExpand(false) + } } - } - }, []) + }) + }, [content]) return (
> = ({
{children}
-
{children}
+ {(!expandable || (expandable && expand)) &&
{children}
}
- - {expandable && !expand && ( + {expandable && expand && ( )} + {expandable && !expand && ( +

+ {collapseContent} + { + setExpand(!expand) + }} + className="expandButton" + > + ... + + +

+ )}
) diff --git a/src/components/Expandable/styles.css b/src/components/Expandable/styles.css index a33bb351d6..331d9c12b6 100644 --- a/src/components/Expandable/styles.css +++ b/src/components/Expandable/styles.css @@ -1,5 +1,6 @@ .expandable { position: relative; + white-space: pre-wrap; @mixin line-clamp; @@ -10,4 +11,48 @@ right: 0; bottom: 0; } + + & .expandButton { + color: var(--color-grey); + cursor: pointer; + } +} + +/* color */ +.black { + color: var(--color-black); +} + +.grey { + color: var(--color-grey); +} + +.grey-light { + color: var(--color-grey-light); +} + +.grey-dark { + color: var(--color-grey-dark); +} + +.grey-darker { + color: var(--color-grey-darker); +} + +/* size */ +.size-sm { + font-size: var(--font-size-sm); +} + +.size-md-s { + font-size: var(--font-size-md-s); +} + +.size-md { + font-size: var(--font-size-md); +} + +/* space top */ +.spacing-top-base { + margin-top: var(--spacing-base); } diff --git a/src/components/Notice/NoticeComment.tsx b/src/components/Notice/NoticeComment.tsx index f6c73778c2..31043409f8 100644 --- a/src/components/Notice/NoticeComment.tsx +++ b/src/components/Notice/NoticeComment.tsx @@ -63,7 +63,7 @@ const NoticeComment = ({ comment }: { comment: NoticeCommentType | null }) => { spacing={['xtight', 'base']} borderRadius="xtight" > - + diff --git a/src/components/UserProfile/index.tsx b/src/components/UserProfile/index.tsx index 97534fa07b..49eb884953 100644 --- a/src/components/UserProfile/index.tsx +++ b/src/components/UserProfile/index.tsx @@ -256,7 +256,12 @@ export const UserProfile = () => { )} - +

{user.info.description}

diff --git a/src/components/UserProfile/styles.css b/src/components/UserProfile/styles.css index 54ace0734f..25ea59e72f 100644 --- a/src/components/UserProfile/styles.css +++ b/src/components/UserProfile/styles.css @@ -50,14 +50,6 @@ header { line-height: 1; color: var(--color-grey-dark); } - - & .description { - position: relative; - margin-top: var(--spacing-base); - font-size: var(--font-size-md); - color: var(--color-grey-darker); - white-space: pre-wrap; - } } footer { diff --git a/src/views/Circle/Profile/AuthorWidget/index.tsx b/src/views/Circle/Profile/AuthorWidget/index.tsx index 1e2d58cbf0..b56a123978 100644 --- a/src/views/Circle/Profile/AuthorWidget/index.tsx +++ b/src/views/Circle/Profile/AuthorWidget/index.tsx @@ -41,7 +41,7 @@ const AuthorWidget = ({ circle }: AuthorWidgetProps) => { - + { {circle.description && (
- +

{circle.description}

diff --git a/src/views/Circle/Profile/styles.css b/src/views/Circle/Profile/styles.css index 98ce47bd58..a6cb68187e 100644 --- a/src/views/Circle/Profile/styles.css +++ b/src/views/Circle/Profile/styles.css @@ -53,14 +53,6 @@ header { .description { padding: 0 var(--spacing-base); - - & p { - position: relative; - margin-top: var(--spacing-base); - font-size: var(--font-size-md); - color: var(--color-grey-darker); - white-space: pre-wrap; - } } footer { diff --git a/src/views/Follow/Feed/FollowingFeedComment/index.tsx b/src/views/Follow/Feed/FollowingFeedComment/index.tsx index 9ee2af02c5..c2622c485c 100644 --- a/src/views/Follow/Feed/FollowingFeedComment/index.tsx +++ b/src/views/Follow/Feed/FollowingFeedComment/index.tsx @@ -23,7 +23,7 @@ const FollowingFeedComment: React.FC & { {header}
- + {
{tag.description && ( - -

{tag.description}

+ +

{tag.description}

)} diff --git a/src/views/TagDetail/styles.css b/src/views/TagDetail/styles.css index e4a75ee78c..89986d2d4e 100644 --- a/src/views/TagDetail/styles.css +++ b/src/views/TagDetail/styles.css @@ -5,13 +5,6 @@ margin-bottom: var(--spacing-x-tight); } -.description { - margin-top: var(--spacing-base); - font-size: var(--font-size-md-s); - color: var(--color-grey-darker); - white-space: pre-wrap; -} - .statistics { @mixin flex-center-space-between; From 34cb64a95fbbfdc7d40b40cc06863084c747d35d Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Thu, 8 Sep 2022 11:43:06 +0800 Subject: [PATCH 43/55] fix(auto-translate): update translate text --- src/views/ArticleDetail/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/ArticleDetail/index.tsx b/src/views/ArticleDetail/index.tsx index 22096f130c..e6d62dcf7d 100644 --- a/src/views/ArticleDetail/index.tsx +++ b/src/views/ArticleDetail/index.tsx @@ -151,8 +151,8 @@ const BaseArticleDetail = ({ color: 'green', content: ( ), From 72cd0df9b234e8a8b4ca61027d6c1a7d2c78959b Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Thu, 8 Sep 2022 19:52:42 +0800 Subject: [PATCH 44/55] fix: collapse content truncated --- package-lock.json | 48 ++++++++++++++++++++++---- package.json | 2 ++ src/components/Expandable/index.tsx | 51 ++++++++++++++++++++-------- src/components/Expandable/styles.css | 4 +-- 4 files changed, 82 insertions(+), 23 deletions(-) diff --git a/package-lock.json b/package-lock.json index cdca1d1750..6888feaf67 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@matters/apollo-upload-client": "^11.1.0", "@matters/matters-editor": "^0.1.26", "@next/bundle-analyzer": "^12.0.9", + "@playwright/test": "^1.25.0", "@reach/alert": "^0.16.0", "@reach/dialog": "^0.16.2", "@reach/visually-hidden": "^0.16.0", @@ -75,6 +76,7 @@ "react-focus-lock": "^2.7.1", "react-remove-scroll": "^2.4.3", "react-spring": "^9.4.2", + "react-text-truncate": "^0.19.0", "react-use-gesture": "^9.1.3", "react-virtualized": "^9.22.3", "react-waypoint": "^10.1.0", @@ -86,7 +88,6 @@ "devDependencies": { "@apollo/react-testing": "^3.1.3", "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@playwright/test": "^1.25.0", "@storybook/addon-a11y": "^6.4.9", "@storybook/addon-actions": "^6.4.9", "@storybook/addon-essentials": "^6.4.9", @@ -113,6 +114,7 @@ "@types/react-copy-to-clipboard": "^5.0.2", "@types/react-dom": "^17.0.11", "@types/react-responsive": "^8.0.5", + "@types/react-text-truncate": "^0.14.1", "@types/react-virtualized": "^9.21.16", "@types/segment-analytics": "0.0.34", "@types/styled-jsx": "^2.2.9", @@ -7115,7 +7117,6 @@ "version": "1.25.0", "resolved": "https://registry.npmmirror.com/@playwright/test/-/test-1.25.0.tgz", "integrity": "sha512-j4EZhTTQI3dBeWblE21EV//swwmBtOpIrLdOIJIRv4uqsLdHgBg1z+JtTg+AeC5o2bAXIE26kDNW5A0TimG8Bg==", - "dev": true, "dependencies": { "@types/node": "*", "playwright-core": "1.25.0" @@ -12857,6 +12858,15 @@ "@types/react": "*" } }, + "node_modules/@types/react-text-truncate": { + "version": "0.14.1", + "resolved": "https://registry.npmmirror.com/@types/react-text-truncate/-/react-text-truncate-0.14.1.tgz", + "integrity": "sha512-yCtOOOJzrsfWF6TbnTDZz0gM5JYOxJmewExaTJTv01E7yrmpkNcmVny2fAtsNgSFCp8k2VgCePBoIvFBpKyEOw==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/react-virtualized": { "version": "9.21.16", "resolved": "https://registry.npmjs.org/@types/react-virtualized/-/react-virtualized-9.21.16.tgz", @@ -31908,7 +31918,6 @@ "version": "1.25.0", "resolved": "https://registry.npmmirror.com/playwright-core/-/playwright-core-1.25.0.tgz", "integrity": "sha512-kZ3Jwaf3wlu0GgU0nB8UMQ+mXFTqBIFz9h1svTlNduNKjnbPXFxw7mJanLVjqxHJRn62uBfmgBj93YHidk2N5Q==", - "dev": true, "bin": { "playwright": "cli.js" }, @@ -35219,6 +35228,18 @@ "react": ">= 0.14.0" } }, + "node_modules/react-text-truncate": { + "version": "0.19.0", + "resolved": "https://registry.npmmirror.com/react-text-truncate/-/react-text-truncate-0.19.0.tgz", + "integrity": "sha512-QxHpZABfGG0Z3WEYbRTZ+rXdZn50Zvp+sWZXgVAd7FCKAMzv/kcwctTpNmWgXDTpAoHhMjOVwmgRtX3x5yeF4w==", + "dependencies": { + "prop-types": "^15.5.7" + }, + "peerDependencies": { + "react": "^15.4.1 || ^16.0.0 || ^17.0.0 || || ^18.0.0", + "react-dom": "^15.4.1 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-textarea-autosize": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz", @@ -47375,7 +47396,6 @@ "version": "1.25.0", "resolved": "https://registry.npmmirror.com/@playwright/test/-/test-1.25.0.tgz", "integrity": "sha512-j4EZhTTQI3dBeWblE21EV//swwmBtOpIrLdOIJIRv4uqsLdHgBg1z+JtTg+AeC5o2bAXIE26kDNW5A0TimG8Bg==", - "dev": true, "requires": { "@types/node": "*", "playwright-core": "1.25.0" @@ -51633,6 +51653,15 @@ "@types/react": "*" } }, + "@types/react-text-truncate": { + "version": "0.14.1", + "resolved": "https://registry.npmmirror.com/@types/react-text-truncate/-/react-text-truncate-0.14.1.tgz", + "integrity": "sha512-yCtOOOJzrsfWF6TbnTDZz0gM5JYOxJmewExaTJTv01E7yrmpkNcmVny2fAtsNgSFCp8k2VgCePBoIvFBpKyEOw==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, "@types/react-virtualized": { "version": "9.21.16", "resolved": "https://registry.npmjs.org/@types/react-virtualized/-/react-virtualized-9.21.16.tgz", @@ -66756,8 +66785,7 @@ "playwright-core": { "version": "1.25.0", "resolved": "https://registry.npmmirror.com/playwright-core/-/playwright-core-1.25.0.tgz", - "integrity": "sha512-kZ3Jwaf3wlu0GgU0nB8UMQ+mXFTqBIFz9h1svTlNduNKjnbPXFxw7mJanLVjqxHJRn62uBfmgBj93YHidk2N5Q==", - "dev": true + "integrity": "sha512-kZ3Jwaf3wlu0GgU0nB8UMQ+mXFTqBIFz9h1svTlNduNKjnbPXFxw7mJanLVjqxHJRn62uBfmgBj93YHidk2N5Q==" }, "pngjs": { "version": "3.4.0", @@ -69289,6 +69317,14 @@ "refractor": "^3.1.0" } }, + "react-text-truncate": { + "version": "0.19.0", + "resolved": "https://registry.npmmirror.com/react-text-truncate/-/react-text-truncate-0.19.0.tgz", + "integrity": "sha512-QxHpZABfGG0Z3WEYbRTZ+rXdZn50Zvp+sWZXgVAd7FCKAMzv/kcwctTpNmWgXDTpAoHhMjOVwmgRtX3x5yeF4w==", + "requires": { + "prop-types": "^15.5.7" + } + }, "react-textarea-autosize": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz", diff --git a/package.json b/package.json index 6d53336f55..68a67392ee 100644 --- a/package.json +++ b/package.json @@ -101,6 +101,7 @@ "react-focus-lock": "^2.7.1", "react-remove-scroll": "^2.4.3", "react-spring": "^9.4.2", + "react-text-truncate": "^0.19.0", "react-use-gesture": "^9.1.3", "react-virtualized": "^9.22.3", "react-waypoint": "^10.1.0", @@ -138,6 +139,7 @@ "@types/react-copy-to-clipboard": "^5.0.2", "@types/react-dom": "^17.0.11", "@types/react-responsive": "^8.0.5", + "@types/react-text-truncate": "^0.14.1", "@types/react-virtualized": "^9.21.16", "@types/segment-analytics": "0.0.34", "@types/styled-jsx": "^2.2.9", diff --git a/src/components/Expandable/index.tsx b/src/components/Expandable/index.tsx index 05d57400a1..2509b88610 100644 --- a/src/components/Expandable/index.tsx +++ b/src/components/Expandable/index.tsx @@ -1,6 +1,7 @@ import VisuallyHidden from '@reach/visually-hidden' import classNames from 'classnames' import React, { ReactElement, useEffect, useRef, useState } from 'react' +import TextTruncate from 'react-text-truncate' import { Button, IconArrowUp16, TextIcon, Translate } from '~/components' @@ -37,10 +38,13 @@ export const Expandable: React.FC = ({ }) => { const [expandable, setExpandable] = useState(false) const [expand, setExpand] = useState(true) + const [truncated, setTruncated] = useState(false) const node: React.RefObject | null = useRef(null) const collapseContent = stripHtml( content && content.replace(/\r?\n|\r|\s\s/g, '') ) + // const collapseContent = content + console.log({ collapseContent }) const contentClasses = classNames({ expandable: true, [`${color}`]: !!color, @@ -51,8 +55,10 @@ export const Expandable: React.FC = ({ useEffect(() => { setExpandable(false) setExpand(true) + setTruncated(false) setTimeout(() => { if (node?.current) { + console.log('styled', window.getComputedStyle(node.current, null)) const height = node.current.firstElementChild?.clientHeight || 0 const lineHeight = window .getComputedStyle(node.current, null) @@ -68,12 +74,7 @@ export const Expandable: React.FC = ({ }, [content]) return ( -
+
{children}
@@ -96,16 +97,36 @@ export const Expandable: React.FC = ({ )} {expandable && !expand && (

- {collapseContent} - { - setExpand(!expand) + { + setTruncated(true) }} - className="expandButton" - > - ... - - + textTruncateChild={ + { + setExpand(!expand) + }} + className="expandButton" + > + + + } + /> + {!truncated && ( + { + setExpand(!expand) + }} + className="expandButton" + > + ... + + + )}

)} diff --git a/src/components/Expandable/styles.css b/src/components/Expandable/styles.css index 331d9c12b6..7e8336234d 100644 --- a/src/components/Expandable/styles.css +++ b/src/components/Expandable/styles.css @@ -2,9 +2,9 @@ position: relative; white-space: pre-wrap; - @mixin line-clamp; + /* @mixin line-clamp; */ - -webkit-line-clamp: 2; + /* -webkit-line-clamp: 2; */ & :global(> button) { position: absolute; From 486927fb1b2a16eef2d55f940ae6da76879eac9c Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Thu, 8 Sep 2022 20:33:08 +0800 Subject: [PATCH 45/55] feat: revise collapse wrapper --- src/components/Expandable/index.tsx | 29 +++++++++++++++------------- src/components/Expandable/styles.css | 14 ++++---------- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/components/Expandable/index.tsx b/src/components/Expandable/index.tsx index 2509b88610..fee49679b4 100644 --- a/src/components/Expandable/index.tsx +++ b/src/components/Expandable/index.tsx @@ -82,25 +82,27 @@ export const Expandable: React.FC = ({ {(!expandable || (expandable && expand)) &&
{children}
}
{expandable && expand && ( - +
+ +
)} {expandable && !expand && (

{ setTruncated(true) @@ -112,6 +114,7 @@ export const Expandable: React.FC = ({ }} className="expandButton" > + ... } diff --git a/src/components/Expandable/styles.css b/src/components/Expandable/styles.css index 7e8336234d..9ac0ab6fab 100644 --- a/src/components/Expandable/styles.css +++ b/src/components/Expandable/styles.css @@ -2,20 +2,14 @@ position: relative; white-space: pre-wrap; - /* @mixin line-clamp; */ - - /* -webkit-line-clamp: 2; */ - - & :global(> button) { - position: absolute; - right: 0; - bottom: 0; - } - & .expandButton { color: var(--color-grey); cursor: pointer; } + + & .collapseWrapper { + @mixin flex-center-end; + } } /* color */ From 72ba6b947cdb89d91b1426356e257d27be646c58 Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Tue, 13 Sep 2022 13:23:36 +0800 Subject: [PATCH 46/55] fix: text indent props --- src/components/Expandable/index.tsx | 15 +++++++++------ src/components/Expandable/styles.css | 4 ++++ src/views/Circle/Profile/AuthorWidget/index.tsx | 7 +++++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/components/Expandable/index.tsx b/src/components/Expandable/index.tsx index fee49679b4..4ebc510688 100644 --- a/src/components/Expandable/index.tsx +++ b/src/components/Expandable/index.tsx @@ -25,6 +25,7 @@ interface ExpandableProps { color?: CollapseTextColor size?: 'sm' | 'md-s' | 'md' spacingTop?: 'base' + textIndent?: boolean } export const Expandable: React.FC = ({ @@ -35,21 +36,22 @@ export const Expandable: React.FC = ({ color, size, spacingTop, + textIndent = false, }) => { const [expandable, setExpandable] = useState(false) const [expand, setExpand] = useState(true) const [truncated, setTruncated] = useState(false) const node: React.RefObject | null = useRef(null) const collapseContent = stripHtml( - content && content.replace(/\r?\n|\r|\s\s/g, '') + content && content.replace(/\r?\n|\r|\s\s/g, ''), + '' ) - // const collapseContent = content - console.log({ collapseContent }) const contentClasses = classNames({ expandable: true, [`${color}`]: !!color, [`size-${size}`]: !!size, [`spacing-top-${spacingTop}`]: !!spacingTop, + [`textIndent`]: textIndent, }) useEffect(() => { @@ -58,7 +60,6 @@ export const Expandable: React.FC = ({ setTruncated(false) setTimeout(() => { if (node?.current) { - console.log('styled', window.getComputedStyle(node.current, null)) const height = node.current.firstElementChild?.clientHeight || 0 const lineHeight = window .getComputedStyle(node.current, null) @@ -109,8 +110,9 @@ export const Expandable: React.FC = ({ }} textTruncateChild={ { + onClick={(e) => { setExpand(!expand) + e.stopPropagation() }} className="expandButton" > @@ -121,8 +123,9 @@ export const Expandable: React.FC = ({ /> {!truncated && ( { + onClick={(e) => { setExpand(!expand) + e.stopPropagation() }} className="expandButton" > diff --git a/src/components/Expandable/styles.css b/src/components/Expandable/styles.css index 9ac0ab6fab..6c0ee63d4d 100644 --- a/src/components/Expandable/styles.css +++ b/src/components/Expandable/styles.css @@ -50,3 +50,7 @@ .spacing-top-base { margin-top: var(--spacing-base); } + +.textIndent { + text-indent: 2rem; +} diff --git a/src/views/Circle/Profile/AuthorWidget/index.tsx b/src/views/Circle/Profile/AuthorWidget/index.tsx index b56a123978..dbc9a8f3cd 100644 --- a/src/views/Circle/Profile/AuthorWidget/index.tsx +++ b/src/views/Circle/Profile/AuthorWidget/index.tsx @@ -18,7 +18,6 @@ const AuthorWidget = ({ circle }: AuthorWidgetProps) => { page: 'userProfile', userName: circle.owner.userName || '', }) - return (

{ - + Date: Tue, 13 Sep 2022 20:54:45 +0800 Subject: [PATCH 47/55] feat: revise ShareDialog --- .../Dialogs/ShareDialog/Content.tsx | 109 +++++++++--------- src/components/Dialogs/ShareDialog/Copy.tsx | 14 +-- src/components/Dialogs/ShareDialog/styles.css | 8 +- 3 files changed, 62 insertions(+), 69 deletions(-) diff --git a/src/components/Dialogs/ShareDialog/Content.tsx b/src/components/Dialogs/ShareDialog/Content.tsx index 0da873fc68..a8b24456b5 100644 --- a/src/components/Dialogs/ShareDialog/Content.tsx +++ b/src/components/Dialogs/ShareDialog/Content.tsx @@ -1,6 +1,7 @@ import { Dialog, ShareButtons, Translate } from '~/components' import { TextId } from '~/common/enums' +import { toLocale } from '~/common/utils' import Copy from './Copy' import styles from './styles.css' @@ -27,61 +28,63 @@ const ShareDialogContent: React.FC = ({ headerTitle, description, footerButtons, -}) => ( - <> - - - - {description && ( -
- {description} +}) => { + const url = new URL(shareLink) + const pathnames = url.pathname.split('/') + const showTranslation = toLocale(pathnames[1]) !== '' + if (showTranslation) { + description = ( + + ) + } + return ( + <> + + } + /> + + + {description && ( +
+ {description} + + +
+ )} + +
+
+ + + + + +
+ +
+ + + + +
- )} - -
-
- - - - -
- -
- - - - -
- - -
- - -
- - - {footerButtons || ( - - - - )} - - -) + + + ) +} export default ShareDialogContent diff --git a/src/components/Dialogs/ShareDialog/Copy.tsx b/src/components/Dialogs/ShareDialog/Copy.tsx index c465db734d..05f59cfa86 100644 --- a/src/components/Dialogs/ShareDialog/Copy.tsx +++ b/src/components/Dialogs/ShareDialog/Copy.tsx @@ -8,15 +8,12 @@ import { Translate, } from '~/components' -import { toLocale, translate } from '~/common/utils' +import { translate } from '~/common/utils' import styles from './styles.css' const Copy = ({ link }: { link: string }) => { const { lang } = useContext(LanguageContext) - const url = new URL(link) - const pathnames = url.pathname.split('/') - const showTranslation = toLocale(pathnames[1]) !== '' return (
@@ -31,15 +28,6 @@ const Copy = ({ link }: { link: string }) => { en="Copy Link" /> - {showTranslation && ( - - - - )} diff --git a/src/components/Dialogs/ShareDialog/styles.css b/src/components/Dialogs/ShareDialog/styles.css index 16bac96214..7933cc2bff 100644 --- a/src/components/Dialogs/ShareDialog/styles.css +++ b/src/components/Dialogs/ShareDialog/styles.css @@ -1,5 +1,7 @@ .socials-container { + display: flex; padding-top: var(--spacing-x-tight); + padding-bottom: var(--spacing-xx-loose); } .left, @@ -52,11 +54,11 @@ } .description { - @mixin border-bottom-grey; + @mixin border-top-grey; - padding: var(--spacing-x-tight) var(--spacing-base) var(--spacing-loose); + padding: var(--spacing-base) var(--spacing-base) var(--spacing-x-tight); font-size: var(--font-size-md-s); line-height: 1.5rem; - color: var(--color-grey-dark); + color: var(--color-black); text-align: center; } From 8f2c6ef94429cf93cbfa7f0fde39cf1f2b6d16ba Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Tue, 13 Sep 2022 20:58:01 +0800 Subject: [PATCH 48/55] feat: revise translation toast --- src/components/Toast/Instance/index.tsx | 49 +++++++++---- src/components/Toast/Instance/styles.css | 12 ++++ .../MetaInfo/TranslationButton/index.tsx | 2 +- .../ArticleDetail/TranslationToast/index.tsx | 69 ++++++++++++++----- .../ArticleDetail/TranslationToast/styles.css | 11 ++- src/views/ArticleDetail/index.tsx | 8 ++- 6 files changed, 110 insertions(+), 41 deletions(-) diff --git a/src/components/Toast/Instance/index.tsx b/src/components/Toast/Instance/index.tsx index d249406a80..cfa528c32a 100644 --- a/src/components/Toast/Instance/index.tsx +++ b/src/components/Toast/Instance/index.tsx @@ -2,6 +2,8 @@ import Alert from '@reach/alert' import classNames from 'classnames' import { useEffect } from 'react' +import { Button, IconClear16 } from '~/components' + import { REMOVE_TOAST, TOAST_DURATION } from '~/common/enums' import { sleep } from '~/common/utils' @@ -21,9 +23,11 @@ export interface ToastInstanceProps { color: 'green' | 'grey' | 'red' | 'black' content?: string | React.ReactNode subDescription?: string | React.ReactNode + clearable?: boolean - buttonPlacement?: 'top' | 'bottom' | 'center' + buttonPlacement?: 'top' | 'bottom' | 'center' | 'center-all' customButton?: React.ReactNode + switchContent?: React.ReactNode onClick?: (event?: React.MouseEvent) => any } @@ -31,8 +35,11 @@ export const ToastInstance = ({ color, content, subDescription, + clearable = false, buttonPlacement = 'top', customButton, + switchContent, + onClick, ...restProps }: ToastInstanceProps) => { const mainClasses = classNames({ @@ -44,19 +51,35 @@ export const ToastInstance = ({ const alertType = color === 'red' ? 'assertive' : 'polite' return ( -
-
- - {content &&

{content}

} - {subDescription && ( -

{subDescription}

- )} -
-
- - {customButton && ( -
{customButton}
+
+ {clearable && ( +
+ +
)} +
+
+ + {content && ( +

+ {content} + {switchContent && ( + {switchContent} + )} +

+ )} + {subDescription && ( +

{subDescription}

+ )} +
+
+ + {customButton && ( +
{customButton}
+ )} +
) diff --git a/src/components/Toast/Instance/styles.css b/src/components/Toast/Instance/styles.css index 2a4d8ef9e1..af362009b0 100644 --- a/src/components/Toast/Instance/styles.css +++ b/src/components/Toast/Instance/styles.css @@ -1,4 +1,5 @@ .toast { + position: relative; padding: var(--spacing-x-tight) var(--spacing-base); margin: 0 var(--spacing-base) var(--spacing-base); font-size: var(--font-size-sm); @@ -20,6 +21,10 @@ @mixin flex-center-space-between; } + &.center-all { + @mixin flex-center-all; + } + &.center-x { & section { width: 100%; @@ -66,6 +71,13 @@ background: rgba(0, 0, 0, 0.8); } +.clearButton { + @mixin flex-center-end; + + margin: 0 var(--spacing-base); + color: black; +} + @keyframes toastFadeIn { from { visibility: hidden; diff --git a/src/views/ArticleDetail/MetaInfo/TranslationButton/index.tsx b/src/views/ArticleDetail/MetaInfo/TranslationButton/index.tsx index 3f29d0c878..4373915fb9 100644 --- a/src/views/ArticleDetail/MetaInfo/TranslationButton/index.tsx +++ b/src/views/ArticleDetail/MetaInfo/TranslationButton/index.tsx @@ -47,7 +47,7 @@ const TranslationButton: FC<{ en={`Original${originalLang.en}`} /> ) : ( - + )} diff --git a/src/views/ArticleDetail/TranslationToast/index.tsx b/src/views/ArticleDetail/TranslationToast/index.tsx index dd0aaa7c87..087075a04c 100644 --- a/src/views/ArticleDetail/TranslationToast/index.tsx +++ b/src/views/ArticleDetail/TranslationToast/index.tsx @@ -1,29 +1,60 @@ +import { CONTENT_LANG_TEXT_MAP } from '@/src/common/enums' +import { toLocale } from '@/src/common/utils' import { Translate } from '@/src/components' import styles from './styles.css' -const TranslationToast = ({ - onClick, -}: { - onClick: (event?: React.MouseEvent) => any -}) => { - return ( -

+const Content = ({ language }: { language: string | null }) => { + if (language && toLocale(language) !== '') { + const targetLang = { + zh_hant: '', + zh_hans: '', + en: '', + } + Object.entries(CONTENT_LANG_TEXT_MAP.zh_hant).forEach(([k, v]) => { + if (k === language) targetLang.zh_hant = v + }) + Object.entries(CONTENT_LANG_TEXT_MAP.zh_hans).forEach(([k, v]) => { + if (k === language) targetLang.zh_hans = v + }) + Object.entries(CONTENT_LANG_TEXT_MAP.en).forEach(([k, v]) => { + if (k === language) targetLang.en = v + }) + return ( - - - - -

+ ) + } + return ( + ) } +const SwitchContent = ({ + onClick, +}: { + onClick: (event?: React.MouseEvent) => any +}) => ( + + + + +) + +const TranslationToast = { + Content, + SwitchContent, +} + export default TranslationToast diff --git a/src/views/ArticleDetail/TranslationToast/styles.css b/src/views/ArticleDetail/TranslationToast/styles.css index 1bd40ef18a..43a05bab52 100644 --- a/src/views/ArticleDetail/TranslationToast/styles.css +++ b/src/views/ArticleDetail/TranslationToast/styles.css @@ -1,9 +1,6 @@ -.wrapper { - font-size: var(--font-size-md-s); +.switchButton { + font-size: var(--font-size-sm); line-height: 1.5rem; - - & .switchButton { - text-decoration: underline; - cursor: pointer; - } + text-decoration: underline; + cursor: pointer; } diff --git a/src/views/ArticleDetail/index.tsx b/src/views/ArticleDetail/index.tsx index 22096f130c..054f7ee7c3 100644 --- a/src/views/ArticleDetail/index.tsx +++ b/src/views/ArticleDetail/index.tsx @@ -177,7 +177,13 @@ const BaseArticleDetail = ({ color: 'black', placement: 'bottom', duration: 8 * 1000, - content: , + clearable: true, + content: ( + + ), + switchContent: ( + + ), }, }) ) From 8ff9a8db9a184de7b11192bc7bf7b3939dcfedff Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Tue, 13 Sep 2022 20:54:45 +0800 Subject: [PATCH 49/55] feat: revise ShareDialog --- .../Dialogs/ShareDialog/Content.tsx | 109 +++++++++--------- src/components/Dialogs/ShareDialog/Copy.tsx | 14 +-- src/components/Dialogs/ShareDialog/styles.css | 8 +- 3 files changed, 62 insertions(+), 69 deletions(-) diff --git a/src/components/Dialogs/ShareDialog/Content.tsx b/src/components/Dialogs/ShareDialog/Content.tsx index 0da873fc68..a8b24456b5 100644 --- a/src/components/Dialogs/ShareDialog/Content.tsx +++ b/src/components/Dialogs/ShareDialog/Content.tsx @@ -1,6 +1,7 @@ import { Dialog, ShareButtons, Translate } from '~/components' import { TextId } from '~/common/enums' +import { toLocale } from '~/common/utils' import Copy from './Copy' import styles from './styles.css' @@ -27,61 +28,63 @@ const ShareDialogContent: React.FC = ({ headerTitle, description, footerButtons, -}) => ( - <> - - - - {description && ( -
- {description} +}) => { + const url = new URL(shareLink) + const pathnames = url.pathname.split('/') + const showTranslation = toLocale(pathnames[1]) !== '' + if (showTranslation) { + description = ( + + ) + } + return ( + <> + + } + /> + + + {description && ( +
+ {description} + + +
+ )} + +
+
+ + + + + +
+ +
+ + + + +
- )} - -
-
- - - - -
- -
- - - - -
- - -
- - -
- - - {footerButtons || ( - - - - )} - - -) + + + ) +} export default ShareDialogContent diff --git a/src/components/Dialogs/ShareDialog/Copy.tsx b/src/components/Dialogs/ShareDialog/Copy.tsx index c465db734d..05f59cfa86 100644 --- a/src/components/Dialogs/ShareDialog/Copy.tsx +++ b/src/components/Dialogs/ShareDialog/Copy.tsx @@ -8,15 +8,12 @@ import { Translate, } from '~/components' -import { toLocale, translate } from '~/common/utils' +import { translate } from '~/common/utils' import styles from './styles.css' const Copy = ({ link }: { link: string }) => { const { lang } = useContext(LanguageContext) - const url = new URL(link) - const pathnames = url.pathname.split('/') - const showTranslation = toLocale(pathnames[1]) !== '' return (
@@ -31,15 +28,6 @@ const Copy = ({ link }: { link: string }) => { en="Copy Link" /> - {showTranslation && ( - - - - )} diff --git a/src/components/Dialogs/ShareDialog/styles.css b/src/components/Dialogs/ShareDialog/styles.css index 16bac96214..7933cc2bff 100644 --- a/src/components/Dialogs/ShareDialog/styles.css +++ b/src/components/Dialogs/ShareDialog/styles.css @@ -1,5 +1,7 @@ .socials-container { + display: flex; padding-top: var(--spacing-x-tight); + padding-bottom: var(--spacing-xx-loose); } .left, @@ -52,11 +54,11 @@ } .description { - @mixin border-bottom-grey; + @mixin border-top-grey; - padding: var(--spacing-x-tight) var(--spacing-base) var(--spacing-loose); + padding: var(--spacing-base) var(--spacing-base) var(--spacing-x-tight); font-size: var(--font-size-md-s); line-height: 1.5rem; - color: var(--color-grey-dark); + color: var(--color-black); text-align: center; } From 473810cecfac56211d5a94f44986c956ae728557 Mon Sep 17 00:00:00 2001 From: bluecloud <96812901+pitb2022@users.noreply.github.com> Date: Tue, 13 Sep 2022 20:58:01 +0800 Subject: [PATCH 50/55] feat: revise translation toast --- src/components/Toast/Instance/index.tsx | 49 +++++++++---- src/components/Toast/Instance/styles.css | 12 ++++ .../MetaInfo/TranslationButton/index.tsx | 2 +- .../ArticleDetail/TranslationToast/index.tsx | 69 ++++++++++++++----- .../ArticleDetail/TranslationToast/styles.css | 11 ++- src/views/ArticleDetail/index.tsx | 8 ++- 6 files changed, 110 insertions(+), 41 deletions(-) diff --git a/src/components/Toast/Instance/index.tsx b/src/components/Toast/Instance/index.tsx index d249406a80..cfa528c32a 100644 --- a/src/components/Toast/Instance/index.tsx +++ b/src/components/Toast/Instance/index.tsx @@ -2,6 +2,8 @@ import Alert from '@reach/alert' import classNames from 'classnames' import { useEffect } from 'react' +import { Button, IconClear16 } from '~/components' + import { REMOVE_TOAST, TOAST_DURATION } from '~/common/enums' import { sleep } from '~/common/utils' @@ -21,9 +23,11 @@ export interface ToastInstanceProps { color: 'green' | 'grey' | 'red' | 'black' content?: string | React.ReactNode subDescription?: string | React.ReactNode + clearable?: boolean - buttonPlacement?: 'top' | 'bottom' | 'center' + buttonPlacement?: 'top' | 'bottom' | 'center' | 'center-all' customButton?: React.ReactNode + switchContent?: React.ReactNode onClick?: (event?: React.MouseEvent) => any } @@ -31,8 +35,11 @@ export const ToastInstance = ({ color, content, subDescription, + clearable = false, buttonPlacement = 'top', customButton, + switchContent, + onClick, ...restProps }: ToastInstanceProps) => { const mainClasses = classNames({ @@ -44,19 +51,35 @@ export const ToastInstance = ({ const alertType = color === 'red' ? 'assertive' : 'polite' return ( -
-
- - {content &&

{content}

} - {subDescription && ( -

{subDescription}

- )} -
-
- - {customButton && ( -
{customButton}
+
+ {clearable && ( +
+ +
)} +
+
+ + {content && ( +

+ {content} + {switchContent && ( + {switchContent} + )} +

+ )} + {subDescription && ( +

{subDescription}

+ )} +
+
+ + {customButton && ( +
{customButton}
+ )} +
) diff --git a/src/components/Toast/Instance/styles.css b/src/components/Toast/Instance/styles.css index 2a4d8ef9e1..af362009b0 100644 --- a/src/components/Toast/Instance/styles.css +++ b/src/components/Toast/Instance/styles.css @@ -1,4 +1,5 @@ .toast { + position: relative; padding: var(--spacing-x-tight) var(--spacing-base); margin: 0 var(--spacing-base) var(--spacing-base); font-size: var(--font-size-sm); @@ -20,6 +21,10 @@ @mixin flex-center-space-between; } + &.center-all { + @mixin flex-center-all; + } + &.center-x { & section { width: 100%; @@ -66,6 +71,13 @@ background: rgba(0, 0, 0, 0.8); } +.clearButton { + @mixin flex-center-end; + + margin: 0 var(--spacing-base); + color: black; +} + @keyframes toastFadeIn { from { visibility: hidden; diff --git a/src/views/ArticleDetail/MetaInfo/TranslationButton/index.tsx b/src/views/ArticleDetail/MetaInfo/TranslationButton/index.tsx index 3f29d0c878..4373915fb9 100644 --- a/src/views/ArticleDetail/MetaInfo/TranslationButton/index.tsx +++ b/src/views/ArticleDetail/MetaInfo/TranslationButton/index.tsx @@ -47,7 +47,7 @@ const TranslationButton: FC<{ en={`Original${originalLang.en}`} /> ) : ( - + )} diff --git a/src/views/ArticleDetail/TranslationToast/index.tsx b/src/views/ArticleDetail/TranslationToast/index.tsx index dd0aaa7c87..087075a04c 100644 --- a/src/views/ArticleDetail/TranslationToast/index.tsx +++ b/src/views/ArticleDetail/TranslationToast/index.tsx @@ -1,29 +1,60 @@ +import { CONTENT_LANG_TEXT_MAP } from '@/src/common/enums' +import { toLocale } from '@/src/common/utils' import { Translate } from '@/src/components' import styles from './styles.css' -const TranslationToast = ({ - onClick, -}: { - onClick: (event?: React.MouseEvent) => any -}) => { - return ( -

+const Content = ({ language }: { language: string | null }) => { + if (language && toLocale(language) !== '') { + const targetLang = { + zh_hant: '', + zh_hans: '', + en: '', + } + Object.entries(CONTENT_LANG_TEXT_MAP.zh_hant).forEach(([k, v]) => { + if (k === language) targetLang.zh_hant = v + }) + Object.entries(CONTENT_LANG_TEXT_MAP.zh_hans).forEach(([k, v]) => { + if (k === language) targetLang.zh_hans = v + }) + Object.entries(CONTENT_LANG_TEXT_MAP.en).forEach(([k, v]) => { + if (k === language) targetLang.en = v + }) + return ( - - - - -

+ ) + } + return ( + ) } +const SwitchContent = ({ + onClick, +}: { + onClick: (event?: React.MouseEvent) => any +}) => ( + + + + +) + +const TranslationToast = { + Content, + SwitchContent, +} + export default TranslationToast diff --git a/src/views/ArticleDetail/TranslationToast/styles.css b/src/views/ArticleDetail/TranslationToast/styles.css index 1bd40ef18a..43a05bab52 100644 --- a/src/views/ArticleDetail/TranslationToast/styles.css +++ b/src/views/ArticleDetail/TranslationToast/styles.css @@ -1,9 +1,6 @@ -.wrapper { - font-size: var(--font-size-md-s); +.switchButton { + font-size: var(--font-size-sm); line-height: 1.5rem; - - & .switchButton { - text-decoration: underline; - cursor: pointer; - } + text-decoration: underline; + cursor: pointer; } diff --git a/src/views/ArticleDetail/index.tsx b/src/views/ArticleDetail/index.tsx index e6d62dcf7d..75d9ffda50 100644 --- a/src/views/ArticleDetail/index.tsx +++ b/src/views/ArticleDetail/index.tsx @@ -177,7 +177,13 @@ const BaseArticleDetail = ({ color: 'black', placement: 'bottom', duration: 8 * 1000, - content: , + clearable: true, + content: ( + + ), + switchContent: ( + + ), }, }) ) From 2f6e12bdb5b2f73f9555df02e2353107c7715fd7 Mon Sep 17 00:00:00 2001 From: Zeck Li Date: Wed, 14 Sep 2022 17:13:58 +0800 Subject: [PATCH 51/55] fix(copy): correct copy of entering description --- src/common/enums/text.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/enums/text.ts b/src/common/enums/text.ts index 0d66b8b753..808168e416 100644 --- a/src/common/enums/text.ts +++ b/src/common/enums/text.ts @@ -927,7 +927,7 @@ export const TEXT = { myNFTCollections: 'My NFT Collections', login: 'Log in', authEntries: 'Enter', - authMethod: 'Choose method to enter', + authMethod: 'Choose a method to enter', successLinkWallet: 'Wallet successfully linked', loginPassword: 'Password', logout: 'Log Out', From fc8239051e78f43a12ca9ba363e2e61d3c34768f Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Wed, 14 Sep 2022 17:27:19 +0800 Subject: [PATCH 52/55] feat(notice): support anchor link for circle notice --- src/common/utils/route.ts | 4 +- src/components/Comment/CreatedAt/index.tsx | 6 +- src/components/Expandable/index.tsx | 2 +- .../ArticleNewAppreciationNotice.tsx | 24 +---- .../Notice/ArticleNotice/CircleNewArticle.tsx | 3 +- .../CircleNewBroadcastComments.tsx | 66 ++++++++----- .../CircleNewDiscussionComments.tsx | 98 +++++++++++++------ .../CircleNotice/CircleNewUserNotice.tsx | 24 +---- .../CommentNewReplyNotice.tsx | 27 ++--- .../CommentNotice/ArticleNewCommentNotice.tsx | 24 +---- .../CircleNewBroadcastNotice.tsx | 43 ++++---- .../CommentMentionedYouNotice.tsx | 47 +++++++-- .../SubscribedArticleNewCommentNotice.tsx | 24 +---- src/components/Notice/NoticeCircleName.tsx | 6 +- src/components/Notice/NoticeComment.tsx | 9 +- src/components/Notice/NoticeHeadActors.tsx | 52 ++++++++++ .../UserNotice/UserNewFollowerNotice.tsx | 24 +---- src/components/Tag/index.tsx | 4 +- .../ArticleDetail/TranslationToast/index.tsx | 7 +- src/views/Settings/index.tsx | 2 +- 20 files changed, 278 insertions(+), 218 deletions(-) create mode 100644 src/components/Notice/NoticeHeadActors.tsx diff --git a/src/common/utils/route.ts b/src/common/utils/route.ts index cfc613e7b4..3292113b2a 100644 --- a/src/common/utils/route.ts +++ b/src/common/utils/route.ts @@ -52,8 +52,8 @@ type ToPathArgs = | { page: 'commentDetail' comment: CommentArgs - article?: ArticleArgs - circle?: CircleArgs + article?: ArticleArgs | null + circle?: CircleArgs | null } | { page: 'draftDetail'; id: string; slug: string } | { diff --git a/src/components/Comment/CreatedAt/index.tsx b/src/components/Comment/CreatedAt/index.tsx index a1b21d626f..f456801e1b 100644 --- a/src/components/Comment/CreatedAt/index.tsx +++ b/src/components/Comment/CreatedAt/index.tsx @@ -31,6 +31,10 @@ const fragments = { userName } } + ... on Circle { + id + name + } } createdAt } @@ -47,7 +51,7 @@ const CreatedAt = ({ comment, hasLink }: CreatedAtProps) => { page: 'commentDetail', comment, article, - circle: circle! as unknown as { __typename: 'Circle'; name: string }, + circle, }) return ( diff --git a/src/components/Expandable/index.tsx b/src/components/Expandable/index.tsx index 4ebc510688..70c23bc4eb 100644 --- a/src/components/Expandable/index.tsx +++ b/src/components/Expandable/index.tsx @@ -5,7 +5,7 @@ import TextTruncate from 'react-text-truncate' import { Button, IconArrowUp16, TextIcon, Translate } from '~/components' -import { stripHtml } from '@/src/common/utils/text' +import { stripHtml } from '~/common/utils/text' import styles from './styles.css' diff --git a/src/components/Notice/ArticleNotice/ArticleNewAppreciationNotice.tsx b/src/components/Notice/ArticleNotice/ArticleNewAppreciationNotice.tsx index ae94b8aac6..9ca2eeb1ff 100644 --- a/src/components/Notice/ArticleNotice/ArticleNewAppreciationNotice.tsx +++ b/src/components/Notice/ArticleNotice/ArticleNewAppreciationNotice.tsx @@ -1,15 +1,12 @@ import gql from 'graphql-tag' -import { Fragment } from 'react' import { Translate } from '~/components' -import { numAbbr } from '~/common/utils' - import NoticeActorAvatar from '../NoticeActorAvatar' -import NoticeActorName from '../NoticeActorName' import NoticeArticleCard from '../NoticeArticleCard' import NoticeDate from '../NoticeDate' import NoticeHead from '../NoticeHead' +import NoticeHeadActors from '../NoticeHeadActors' import NoticeTypeIcon from '../NoticeTypeIcon' import styles from '../styles.css' @@ -35,19 +32,8 @@ const ArticleNewAppreciationNotice = ({ notice }: { notice: NoticeType }) => {
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + { } > - + diff --git a/src/components/Notice/CircleNotice/CircleNewBroadcastComments.tsx b/src/components/Notice/CircleNotice/CircleNewBroadcastComments.tsx index fea059bbbe..73a5fcacd9 100644 --- a/src/components/Notice/CircleNotice/CircleNewBroadcastComments.tsx +++ b/src/components/Notice/CircleNotice/CircleNewBroadcastComments.tsx @@ -1,16 +1,16 @@ import gql from 'graphql-tag' -import { Fragment, useContext } from 'react' +import { useContext } from 'react' import { Translate, ViewerContext } from '~/components' -import { numAbbr } from '~/common/utils' +import { toPath } from '~/common/utils' import NoticeActorAvatar from '../NoticeActorAvatar' -import NoticeActorName from '../NoticeActorName' import NoticeCircleCard from '../NoticeCircleCard' import NoticeCircleName from '../NoticeCircleName' import NoticeDate from '../NoticeDate' import NoticeHead from '../NoticeHead' +import NoticeHeadActors from '../NoticeHeadActors' import NoticeTypeIcon from '../NoticeTypeIcon' import styles from '../styles.css' @@ -24,7 +24,7 @@ const CircleNewBroadcastComments = ({ notice, }: CircleNewBroadcastCommentsType) => { const viewer = useContext(ViewerContext) - const { replies, mentions } = notice + const { comments, replies, mentions } = notice if (!notice.actors) { return null @@ -41,6 +41,17 @@ const CircleNewBroadcastComments = ({ const actorsCount = notice.actors.length const isMultiActors = actorsCount > 1 + const latestComment = [ + ...(comments || []), + ...(replies || []), + ...(mentions || []), + ].filter(Boolean)[0] + const circleCommentPath = toPath({ + page: 'commentDetail', + comment: latestComment, + circle: notice.circle, + }) + return (
@@ -53,49 +64,42 @@ const CircleNewBroadcastComments = ({
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + <> {isCircleOwner ? ( ) : ( - + )} - + {replyCount && !mentionCount && ( )} {!replyCount && mentionCount && ( )} {replyCount && mentionCount && ( )} @@ -122,26 +126,38 @@ CircleNewBroadcastComments.fragments = { ...NoticeDate actors { ...NoticeActorAvatarUser - ...NoticeActorNameUser + ...NoticeHeadActorsUser } circle: target { ...NoticeCircleCard } comments { id + type + parentComment { + id + } } replies { id + type + parentComment { + id + } author { id } } mentions { id + type + parentComment { + id + } } } ${NoticeActorAvatar.fragments.user} - ${NoticeActorName.fragments.user} + ${NoticeHeadActors.fragments.user} ${NoticeCircleCard.fragments.circle} ${NoticeDate.fragments.notice} `, diff --git a/src/components/Notice/CircleNotice/CircleNewDiscussionComments.tsx b/src/components/Notice/CircleNotice/CircleNewDiscussionComments.tsx index 44c0360841..e424fd28a4 100644 --- a/src/components/Notice/CircleNotice/CircleNewDiscussionComments.tsx +++ b/src/components/Notice/CircleNotice/CircleNewDiscussionComments.tsx @@ -1,16 +1,16 @@ import gql from 'graphql-tag' -import { Fragment, useContext } from 'react' +import { useContext } from 'react' -import { Translate, ViewerContext } from '~/components' +import { LanguageContext, Translate, ViewerContext } from '~/components' -import { numAbbr } from '~/common/utils' +import { toPath } from '~/common/utils' import NoticeActorAvatar from '../NoticeActorAvatar' -import NoticeActorName from '../NoticeActorName' import NoticeCircleCard from '../NoticeCircleCard' import NoticeCircleName from '../NoticeCircleName' import NoticeDate from '../NoticeDate' import NoticeHead from '../NoticeHead' +import NoticeHeadActors from '../NoticeHeadActors' import NoticeTypeIcon from '../NoticeTypeIcon' import styles from '../styles.css' @@ -25,6 +25,8 @@ const CircleNewDiscussionComments = ({ }: CircleNewDiscussionCommentsType) => { const viewer = useContext(ViewerContext) const { comments, replies, mentions } = notice + const { lang } = useContext(LanguageContext) + const isEn = lang === 'en' if (!notice.actors) { return null @@ -42,6 +44,17 @@ const CircleNewDiscussionComments = ({ const actorsCount = notice.actors.length const isMultiActors = actorsCount > 1 + const latestComment = [ + ...(comments || []), + ...(replies || []), + ...(mentions || []), + ].filter(Boolean)[0] + const circleCommentPath = toPath({ + page: 'commentDetail', + comment: latestComment, + circle: notice.circle, + }) + return (
@@ -54,38 +67,39 @@ const CircleNewDiscussionComments = ({
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + <> - {isCircleOwner ? ( - - ) : ( - - )} - + {!isEn ? ( + <> + {isCircleOwner ? ( + + ) : ( + + )} + + + ) : null} + {newDiscussionCount && !replyCount && !mentionCount && ( )} {!newDiscussionCount && replyCount && !mentionCount && ( )} {!newDiscussionCount && !replyCount && mentionCount && ( @@ -99,30 +113,40 @@ const CircleNewDiscussionComments = ({ )} {newDiscussionCount && !replyCount && mentionCount && ( )} {!newDiscussionCount && replyCount && mentionCount && ( )} {newDiscussionCount && replyCount && mentionCount && ( )} + {isEn ? ( + <> + {isCircleOwner ? <> in your circle : <> in } + +  Discussion + + ) : null} {isMultiActors && (
@@ -147,16 +171,24 @@ CircleNewDiscussionComments.fragments = { ...NoticeDate actors { ...NoticeActorAvatarUser - ...NoticeActorNameUser + ...NoticeHeadActorsUser } circle: target { ...NoticeCircleCard } comments { id + type + parentComment { + id + } } replies { id + type + parentComment { + id + } replyTo { author { id @@ -165,10 +197,14 @@ CircleNewDiscussionComments.fragments = { } mentions { id + type + parentComment { + id + } } } ${NoticeActorAvatar.fragments.user} - ${NoticeActorName.fragments.user} + ${NoticeHeadActors.fragments.user} ${NoticeCircleCard.fragments.circle} ${NoticeDate.fragments.notice} `, diff --git a/src/components/Notice/CircleNotice/CircleNewUserNotice.tsx b/src/components/Notice/CircleNotice/CircleNewUserNotice.tsx index b0ba9feb62..b2a6f5671b 100644 --- a/src/components/Notice/CircleNotice/CircleNewUserNotice.tsx +++ b/src/components/Notice/CircleNotice/CircleNewUserNotice.tsx @@ -1,14 +1,11 @@ import gql from 'graphql-tag' -import { Fragment } from 'react' import { Translate } from '~/components' -import { numAbbr } from '~/common/utils' - import NoticeActorAvatar from '../NoticeActorAvatar' -import NoticeActorName from '../NoticeActorName' import NoticeDate from '../NoticeDate' import NoticeHead from '../NoticeHead' +import NoticeHeadActors from '../NoticeHeadActors' import NoticeTypeIcon from '../NoticeTypeIcon' import NoticeUserCard from '../NoticeUserCard' import styles from '../styles.css' @@ -39,19 +36,8 @@ const CircleNewUserNotice = ({ notice, userType }: CircleNewUserNotice) => {
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + {isNewFollower && ( { const actorsCount = notice.actors.length const isMultiActors = actorsCount > 1 + const replyCommentArticle = notice.reply?.node.__typename === 'Article' ? notice.reply.node : null const replyCommentCircle = @@ -41,19 +39,8 @@ const CommentNewReplyNotice = ({ notice }: { notice: NoticeType }) => {
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + {replyCommentArticle && ( <> { @@ -104,7 +91,7 @@ CommentNewReplyNotice.fragments = { ...NoticeDate actors { ...NoticeActorAvatarUser - ...NoticeActorNameUser + ...NoticeHeadActorsUser } comment: target { ...NoticeComment @@ -122,7 +109,7 @@ CommentNewReplyNotice.fragments = { } } ${NoticeActorAvatar.fragments.user} - ${NoticeActorName.fragments.user} + ${NoticeHeadActors.fragments.user} ${NoticeArticleTitle.fragments.article} ${NoticeCircleName.fragments.circle} ${NoticeComment.fragments.comment} diff --git a/src/components/Notice/CommentNotice/ArticleNewCommentNotice.tsx b/src/components/Notice/CommentNotice/ArticleNewCommentNotice.tsx index 632530aa0f..1bec7593a0 100644 --- a/src/components/Notice/CommentNotice/ArticleNewCommentNotice.tsx +++ b/src/components/Notice/CommentNotice/ArticleNewCommentNotice.tsx @@ -1,16 +1,13 @@ import gql from 'graphql-tag' -import { Fragment } from 'react' import { Translate } from '~/components' -import { numAbbr } from '~/common/utils' - import NoticeActorAvatar from '../NoticeActorAvatar' -import NoticeActorName from '../NoticeActorName' import NoticeArticleTitle from '../NoticeArticleTitle' import NoticeComment from '../NoticeComment' import NoticeDate from '../NoticeDate' import NoticeHead from '../NoticeHead' +import NoticeHeadActors from '../NoticeHeadActors' import NoticeTypeIcon from '../NoticeTypeIcon' import styles from '../styles.css' @@ -40,19 +37,8 @@ const ArticleNewCommentNotice = ({ notice }: { notice: NoticeType }) => {
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + { ? notice.comment.node : undefined + const latestComment = notice.comment + const circleCommentPath = toPath({ + page: 'commentDetail', + comment: latestComment, + circle: commentCircle, + }) + return (
@@ -41,28 +46,20 @@ const CircleNewBroadcastNotice = ({ notice }: { notice: NoticeType }) => {
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + - {commentCircle && } + {commentCircle && ( + + )} @@ -92,7 +89,7 @@ CircleNewBroadcastNotice.fragments = { ...NoticeDate actors { ...NoticeActorAvatarUser - ...NoticeActorNameUser + ...NoticeHeadActorsUser } comment: target { ...NoticeComment @@ -104,7 +101,7 @@ CircleNewBroadcastNotice.fragments = { } } ${NoticeActorAvatar.fragments.user} - ${NoticeActorName.fragments.user} + ${NoticeHeadActors.fragments.user} ${NoticeCircleName.fragments.circle} ${NoticeComment.fragments.comment} ${NoticeDate.fragments.notice} diff --git a/src/components/Notice/CommentNotice/CommentMentionedYouNotice.tsx b/src/components/Notice/CommentNotice/CommentMentionedYouNotice.tsx index 705c004840..7c03a3ebcb 100644 --- a/src/components/Notice/CommentNotice/CommentMentionedYouNotice.tsx +++ b/src/components/Notice/CommentNotice/CommentMentionedYouNotice.tsx @@ -2,13 +2,16 @@ import gql from 'graphql-tag' import { Translate } from '~/components' +import { toPath } from '~/common/utils' + import NoticeActorAvatar from '../NoticeActorAvatar' -import NoticeActorName from '../NoticeActorName' import NoticeArticleTitle from '../NoticeArticleTitle' import NoticeCircleName from '../NoticeCircleName' import NoticeComment from '../NoticeComment' import NoticeDate from '../NoticeDate' import NoticeHead from '../NoticeHead' +import NoticeHeadActors from '../NoticeHeadActors' +import NoticeTypeIcon from '../NoticeTypeIcon' import styles from '../styles.css' import { CommentMentionedYouNotice as NoticeType } from './__generated__/CommentMentionedYouNotice' @@ -18,7 +21,9 @@ const CommentMentionedYouNotice = ({ notice }: { notice: NoticeType }) => { return null } - const actor = notice.actors[0] + const actorsCount = notice.actors.length + const isMultiActors = actorsCount > 1 + const commentArticle = notice.comment?.node.__typename === 'Article' ? notice.comment.node : null const commentCircle = @@ -29,15 +34,26 @@ const CommentMentionedYouNotice = ({ notice }: { notice: NoticeType }) => { const commentCircleBroadcast = notice.comment?.type === 'circleBroadcast' ? notice.comment.type : null + const latestComment = notice.comment + const circleCommentPath = toPath({ + page: 'commentDetail', + comment: latestComment, + circle: commentCircle, + }) + return (
- + {isMultiActors ? ( + + ) : ( + + )}
- + {commentArticle && ( <> @@ -59,21 +75,24 @@ const CommentMentionedYouNotice = ({ notice }: { notice: NoticeType }) => { + - {commentCircleDiscussion && ( )} {commentCircleBroadcast && ( )} @@ -82,6 +101,14 @@ const CommentMentionedYouNotice = ({ notice }: { notice: NoticeType }) => { + {isMultiActors && ( +
+ {notice.actors.map((actor, index) => ( + + ))} +
+ )} +
@@ -97,7 +124,7 @@ CommentMentionedYouNotice.fragments = { ...NoticeDate actors { ...NoticeActorAvatarUser - ...NoticeActorNameUser + ...NoticeHeadActorsUser } comment: target { ...NoticeComment @@ -112,7 +139,7 @@ CommentMentionedYouNotice.fragments = { } } ${NoticeActorAvatar.fragments.user} - ${NoticeActorName.fragments.user} + ${NoticeHeadActors.fragments.user} ${NoticeArticleTitle.fragments.article} ${NoticeCircleName.fragments.circle} ${NoticeComment.fragments.comment} diff --git a/src/components/Notice/CommentNotice/SubscribedArticleNewCommentNotice.tsx b/src/components/Notice/CommentNotice/SubscribedArticleNewCommentNotice.tsx index 15c2bef107..86bec4db5c 100644 --- a/src/components/Notice/CommentNotice/SubscribedArticleNewCommentNotice.tsx +++ b/src/components/Notice/CommentNotice/SubscribedArticleNewCommentNotice.tsx @@ -1,16 +1,13 @@ import gql from 'graphql-tag' -import { Fragment } from 'react' import { Translate } from '~/components' -import { numAbbr } from '~/common/utils' - import NoticeActorAvatar from '../NoticeActorAvatar' -import NoticeActorName from '../NoticeActorName' import NoticeArticleTitle from '../NoticeArticleTitle' import NoticeComment from '../NoticeComment' import NoticeDate from '../NoticeDate' import NoticeHead from '../NoticeHead' +import NoticeHeadActors from '../NoticeHeadActors' import NoticeTypeIcon from '../NoticeTypeIcon' import styles from '../styles.css' @@ -44,19 +41,8 @@ const SubscribedArticleNewCommentNotice = ({
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + { if (!circle) { return null } - const path = toPath({ + const circlePath = toPath({ page: 'circleDetail', circle, }) return ( - + {circle.displayName} ) diff --git a/src/components/Notice/NoticeComment.tsx b/src/components/Notice/NoticeComment.tsx index 31043409f8..8afe6b6a8f 100644 --- a/src/components/Notice/NoticeComment.tsx +++ b/src/components/Notice/NoticeComment.tsx @@ -26,6 +26,10 @@ const fragments = { userName } } + ... on Circle { + id + name + } } parentComment { id @@ -41,17 +45,20 @@ const fragments = { const NoticeComment = ({ comment }: { comment: NoticeCommentType | null }) => { const article = comment?.node.__typename === 'Article' ? comment.node : undefined + const circle = + comment?.node.__typename === 'Circle' ? comment.node : undefined if (!comment) { return null } const path = - comment.state === 'active' && article + comment.state === 'active' ? toPath({ page: 'commentDetail', comment, article, + circle, }) : {} diff --git a/src/components/Notice/NoticeHeadActors.tsx b/src/components/Notice/NoticeHeadActors.tsx new file mode 100644 index 0000000000..6fc0317ce2 --- /dev/null +++ b/src/components/Notice/NoticeHeadActors.tsx @@ -0,0 +1,52 @@ +import gql from 'graphql-tag' +import { Fragment } from 'react' + +import { Translate } from '~/components' + +import { numAbbr } from '~/common/utils' + +import NoticeActorName from './NoticeActorName' + +type NoticeHeadActorsProps = { + actors: any[] +} + +const NoticeHeadActors = ({ actors }: NoticeHeadActorsProps) => { + const actorsCount = actors.length + const isMultiActors = actorsCount > 1 + const restActorCount = actorsCount - 2 + + return ( + <> + {actors.slice(0, 2).map((actor, index) => ( + + + {isMultiActors && index < 1 && ( + + + + )} + + ))}{' '} + {isMultiActors && ( + 0 ? `and ${numAbbr(restActorCount)} users` : ' '} + /> + )} + + ) +} + +NoticeHeadActors.fragments = { + user: gql` + fragment NoticeHeadActorsUser on User { + id + ...NoticeActorNameUser + } + ${NoticeActorName.fragments.user} + `, +} + +export default NoticeHeadActors diff --git a/src/components/Notice/UserNotice/UserNewFollowerNotice.tsx b/src/components/Notice/UserNotice/UserNewFollowerNotice.tsx index d4c87d8830..feadf6021c 100644 --- a/src/components/Notice/UserNotice/UserNewFollowerNotice.tsx +++ b/src/components/Notice/UserNotice/UserNewFollowerNotice.tsx @@ -1,14 +1,11 @@ import gql from 'graphql-tag' -import { Fragment } from 'react' import { Translate } from '~/components' -import { numAbbr } from '~/common/utils' - import NoticeActorAvatar from '../NoticeActorAvatar' -import NoticeActorName from '../NoticeActorName' import NoticeDate from '../NoticeDate' import NoticeHead from '../NoticeHead' +import NoticeHeadActors from '../NoticeHeadActors' import NoticeTypeIcon from '../NoticeTypeIcon' import NoticeUserCard from '../NoticeUserCard' import styles from '../styles.css' @@ -31,19 +28,8 @@ const UserNewFollowerNotice = ({ notice }: { notice: NoticeType }) => {
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + @@ -72,12 +58,12 @@ UserNewFollowerNotice.fragments = { ...NoticeDate actors { ...NoticeActorAvatarUser - ...NoticeActorNameUser + ...NoticeHeadActorsUser ...NoticeUserCard } } ${NoticeActorAvatar.fragments.user} - ${NoticeActorName.fragments.user} + ${NoticeHeadActors.fragments.user} ${NoticeUserCard.fragments.follower} ${NoticeDate.fragments.notice} `, diff --git a/src/components/Tag/index.tsx b/src/components/Tag/index.tsx index e44a98622f..e0226c8cfb 100644 --- a/src/components/Tag/index.tsx +++ b/src/components/Tag/index.tsx @@ -168,9 +168,9 @@ export const Tag = ({ )} - {hasCount && type === 'list' && tag?.numArticles && ( + {hasCount && type === 'list' && tag?.numArticles ? ( {tag.numArticles} - )} + ) : null} diff --git a/src/views/ArticleDetail/TranslationToast/index.tsx b/src/views/ArticleDetail/TranslationToast/index.tsx index 087075a04c..233865e159 100644 --- a/src/views/ArticleDetail/TranslationToast/index.tsx +++ b/src/views/ArticleDetail/TranslationToast/index.tsx @@ -1,6 +1,7 @@ -import { CONTENT_LANG_TEXT_MAP } from '@/src/common/enums' -import { toLocale } from '@/src/common/utils' -import { Translate } from '@/src/components' +import { Translate } from '~/components' + +import { CONTENT_LANG_TEXT_MAP } from '~/common/enums' +import { toLocale } from '~/common/utils' import styles from './styles.css' diff --git a/src/views/Settings/index.tsx b/src/views/Settings/index.tsx index 833ed347ef..278b006f03 100644 --- a/src/views/Settings/index.tsx +++ b/src/views/Settings/index.tsx @@ -8,7 +8,7 @@ import { UniversalAuthButton, useResponsive, ViewerContext, -} from '@/src/components' +} from '~/components' import DisplayPreferences from './DisplayPreferences' import Enhance from './Enhance' From 9ac8a64f5cb08ae453b2f3eec7e97350aaddfb72 Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Wed, 14 Sep 2022 17:27:19 +0800 Subject: [PATCH 53/55] feat(notice): support anchor link for circle notice --- src/common/utils/route.ts | 4 +- src/components/Comment/CreatedAt/index.tsx | 6 +- src/components/Expandable/index.tsx | 2 +- .../ArticleNewAppreciationNotice.tsx | 24 +---- .../Notice/ArticleNotice/CircleNewArticle.tsx | 3 +- .../CircleNewBroadcastComments.tsx | 66 ++++++++----- .../CircleNewDiscussionComments.tsx | 98 +++++++++++++------ .../CircleNotice/CircleNewUserNotice.tsx | 24 +---- .../CommentNewReplyNotice.tsx | 27 ++--- .../CommentNotice/ArticleNewCommentNotice.tsx | 24 +---- .../CircleNewBroadcastNotice.tsx | 43 ++++---- .../CommentMentionedYouNotice.tsx | 47 +++++++-- .../SubscribedArticleNewCommentNotice.tsx | 24 +---- src/components/Notice/NoticeCircleName.tsx | 6 +- src/components/Notice/NoticeComment.tsx | 9 +- src/components/Notice/NoticeHeadActors.tsx | 52 ++++++++++ .../UserNotice/UserNewFollowerNotice.tsx | 24 +---- src/components/Tag/index.tsx | 4 +- .../ArticleDetail/TranslationToast/index.tsx | 7 +- src/views/Settings/index.tsx | 2 +- 20 files changed, 278 insertions(+), 218 deletions(-) create mode 100644 src/components/Notice/NoticeHeadActors.tsx diff --git a/src/common/utils/route.ts b/src/common/utils/route.ts index cfc613e7b4..3292113b2a 100644 --- a/src/common/utils/route.ts +++ b/src/common/utils/route.ts @@ -52,8 +52,8 @@ type ToPathArgs = | { page: 'commentDetail' comment: CommentArgs - article?: ArticleArgs - circle?: CircleArgs + article?: ArticleArgs | null + circle?: CircleArgs | null } | { page: 'draftDetail'; id: string; slug: string } | { diff --git a/src/components/Comment/CreatedAt/index.tsx b/src/components/Comment/CreatedAt/index.tsx index a1b21d626f..f456801e1b 100644 --- a/src/components/Comment/CreatedAt/index.tsx +++ b/src/components/Comment/CreatedAt/index.tsx @@ -31,6 +31,10 @@ const fragments = { userName } } + ... on Circle { + id + name + } } createdAt } @@ -47,7 +51,7 @@ const CreatedAt = ({ comment, hasLink }: CreatedAtProps) => { page: 'commentDetail', comment, article, - circle: circle! as unknown as { __typename: 'Circle'; name: string }, + circle, }) return ( diff --git a/src/components/Expandable/index.tsx b/src/components/Expandable/index.tsx index 4ebc510688..70c23bc4eb 100644 --- a/src/components/Expandable/index.tsx +++ b/src/components/Expandable/index.tsx @@ -5,7 +5,7 @@ import TextTruncate from 'react-text-truncate' import { Button, IconArrowUp16, TextIcon, Translate } from '~/components' -import { stripHtml } from '@/src/common/utils/text' +import { stripHtml } from '~/common/utils/text' import styles from './styles.css' diff --git a/src/components/Notice/ArticleNotice/ArticleNewAppreciationNotice.tsx b/src/components/Notice/ArticleNotice/ArticleNewAppreciationNotice.tsx index ae94b8aac6..9ca2eeb1ff 100644 --- a/src/components/Notice/ArticleNotice/ArticleNewAppreciationNotice.tsx +++ b/src/components/Notice/ArticleNotice/ArticleNewAppreciationNotice.tsx @@ -1,15 +1,12 @@ import gql from 'graphql-tag' -import { Fragment } from 'react' import { Translate } from '~/components' -import { numAbbr } from '~/common/utils' - import NoticeActorAvatar from '../NoticeActorAvatar' -import NoticeActorName from '../NoticeActorName' import NoticeArticleCard from '../NoticeArticleCard' import NoticeDate from '../NoticeDate' import NoticeHead from '../NoticeHead' +import NoticeHeadActors from '../NoticeHeadActors' import NoticeTypeIcon from '../NoticeTypeIcon' import styles from '../styles.css' @@ -35,19 +32,8 @@ const ArticleNewAppreciationNotice = ({ notice }: { notice: NoticeType }) => {
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + { } > - + diff --git a/src/components/Notice/CircleNotice/CircleNewBroadcastComments.tsx b/src/components/Notice/CircleNotice/CircleNewBroadcastComments.tsx index fea059bbbe..73a5fcacd9 100644 --- a/src/components/Notice/CircleNotice/CircleNewBroadcastComments.tsx +++ b/src/components/Notice/CircleNotice/CircleNewBroadcastComments.tsx @@ -1,16 +1,16 @@ import gql from 'graphql-tag' -import { Fragment, useContext } from 'react' +import { useContext } from 'react' import { Translate, ViewerContext } from '~/components' -import { numAbbr } from '~/common/utils' +import { toPath } from '~/common/utils' import NoticeActorAvatar from '../NoticeActorAvatar' -import NoticeActorName from '../NoticeActorName' import NoticeCircleCard from '../NoticeCircleCard' import NoticeCircleName from '../NoticeCircleName' import NoticeDate from '../NoticeDate' import NoticeHead from '../NoticeHead' +import NoticeHeadActors from '../NoticeHeadActors' import NoticeTypeIcon from '../NoticeTypeIcon' import styles from '../styles.css' @@ -24,7 +24,7 @@ const CircleNewBroadcastComments = ({ notice, }: CircleNewBroadcastCommentsType) => { const viewer = useContext(ViewerContext) - const { replies, mentions } = notice + const { comments, replies, mentions } = notice if (!notice.actors) { return null @@ -41,6 +41,17 @@ const CircleNewBroadcastComments = ({ const actorsCount = notice.actors.length const isMultiActors = actorsCount > 1 + const latestComment = [ + ...(comments || []), + ...(replies || []), + ...(mentions || []), + ].filter(Boolean)[0] + const circleCommentPath = toPath({ + page: 'commentDetail', + comment: latestComment, + circle: notice.circle, + }) + return (
@@ -53,49 +64,42 @@ const CircleNewBroadcastComments = ({
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + <> {isCircleOwner ? ( ) : ( - + )} - + {replyCount && !mentionCount && ( )} {!replyCount && mentionCount && ( )} {replyCount && mentionCount && ( )} @@ -122,26 +126,38 @@ CircleNewBroadcastComments.fragments = { ...NoticeDate actors { ...NoticeActorAvatarUser - ...NoticeActorNameUser + ...NoticeHeadActorsUser } circle: target { ...NoticeCircleCard } comments { id + type + parentComment { + id + } } replies { id + type + parentComment { + id + } author { id } } mentions { id + type + parentComment { + id + } } } ${NoticeActorAvatar.fragments.user} - ${NoticeActorName.fragments.user} + ${NoticeHeadActors.fragments.user} ${NoticeCircleCard.fragments.circle} ${NoticeDate.fragments.notice} `, diff --git a/src/components/Notice/CircleNotice/CircleNewDiscussionComments.tsx b/src/components/Notice/CircleNotice/CircleNewDiscussionComments.tsx index 44c0360841..e424fd28a4 100644 --- a/src/components/Notice/CircleNotice/CircleNewDiscussionComments.tsx +++ b/src/components/Notice/CircleNotice/CircleNewDiscussionComments.tsx @@ -1,16 +1,16 @@ import gql from 'graphql-tag' -import { Fragment, useContext } from 'react' +import { useContext } from 'react' -import { Translate, ViewerContext } from '~/components' +import { LanguageContext, Translate, ViewerContext } from '~/components' -import { numAbbr } from '~/common/utils' +import { toPath } from '~/common/utils' import NoticeActorAvatar from '../NoticeActorAvatar' -import NoticeActorName from '../NoticeActorName' import NoticeCircleCard from '../NoticeCircleCard' import NoticeCircleName from '../NoticeCircleName' import NoticeDate from '../NoticeDate' import NoticeHead from '../NoticeHead' +import NoticeHeadActors from '../NoticeHeadActors' import NoticeTypeIcon from '../NoticeTypeIcon' import styles from '../styles.css' @@ -25,6 +25,8 @@ const CircleNewDiscussionComments = ({ }: CircleNewDiscussionCommentsType) => { const viewer = useContext(ViewerContext) const { comments, replies, mentions } = notice + const { lang } = useContext(LanguageContext) + const isEn = lang === 'en' if (!notice.actors) { return null @@ -42,6 +44,17 @@ const CircleNewDiscussionComments = ({ const actorsCount = notice.actors.length const isMultiActors = actorsCount > 1 + const latestComment = [ + ...(comments || []), + ...(replies || []), + ...(mentions || []), + ].filter(Boolean)[0] + const circleCommentPath = toPath({ + page: 'commentDetail', + comment: latestComment, + circle: notice.circle, + }) + return (
@@ -54,38 +67,39 @@ const CircleNewDiscussionComments = ({
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + <> - {isCircleOwner ? ( - - ) : ( - - )} - + {!isEn ? ( + <> + {isCircleOwner ? ( + + ) : ( + + )} + + + ) : null} + {newDiscussionCount && !replyCount && !mentionCount && ( )} {!newDiscussionCount && replyCount && !mentionCount && ( )} {!newDiscussionCount && !replyCount && mentionCount && ( @@ -99,30 +113,40 @@ const CircleNewDiscussionComments = ({ )} {newDiscussionCount && !replyCount && mentionCount && ( )} {!newDiscussionCount && replyCount && mentionCount && ( )} {newDiscussionCount && replyCount && mentionCount && ( )} + {isEn ? ( + <> + {isCircleOwner ? <> in your circle : <> in } + +  Discussion + + ) : null} {isMultiActors && (
@@ -147,16 +171,24 @@ CircleNewDiscussionComments.fragments = { ...NoticeDate actors { ...NoticeActorAvatarUser - ...NoticeActorNameUser + ...NoticeHeadActorsUser } circle: target { ...NoticeCircleCard } comments { id + type + parentComment { + id + } } replies { id + type + parentComment { + id + } replyTo { author { id @@ -165,10 +197,14 @@ CircleNewDiscussionComments.fragments = { } mentions { id + type + parentComment { + id + } } } ${NoticeActorAvatar.fragments.user} - ${NoticeActorName.fragments.user} + ${NoticeHeadActors.fragments.user} ${NoticeCircleCard.fragments.circle} ${NoticeDate.fragments.notice} `, diff --git a/src/components/Notice/CircleNotice/CircleNewUserNotice.tsx b/src/components/Notice/CircleNotice/CircleNewUserNotice.tsx index b0ba9feb62..b2a6f5671b 100644 --- a/src/components/Notice/CircleNotice/CircleNewUserNotice.tsx +++ b/src/components/Notice/CircleNotice/CircleNewUserNotice.tsx @@ -1,14 +1,11 @@ import gql from 'graphql-tag' -import { Fragment } from 'react' import { Translate } from '~/components' -import { numAbbr } from '~/common/utils' - import NoticeActorAvatar from '../NoticeActorAvatar' -import NoticeActorName from '../NoticeActorName' import NoticeDate from '../NoticeDate' import NoticeHead from '../NoticeHead' +import NoticeHeadActors from '../NoticeHeadActors' import NoticeTypeIcon from '../NoticeTypeIcon' import NoticeUserCard from '../NoticeUserCard' import styles from '../styles.css' @@ -39,19 +36,8 @@ const CircleNewUserNotice = ({ notice, userType }: CircleNewUserNotice) => {
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + {isNewFollower && ( { const actorsCount = notice.actors.length const isMultiActors = actorsCount > 1 + const replyCommentArticle = notice.reply?.node.__typename === 'Article' ? notice.reply.node : null const replyCommentCircle = @@ -41,19 +39,8 @@ const CommentNewReplyNotice = ({ notice }: { notice: NoticeType }) => {
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + {replyCommentArticle && ( <> { @@ -104,7 +91,7 @@ CommentNewReplyNotice.fragments = { ...NoticeDate actors { ...NoticeActorAvatarUser - ...NoticeActorNameUser + ...NoticeHeadActorsUser } comment: target { ...NoticeComment @@ -122,7 +109,7 @@ CommentNewReplyNotice.fragments = { } } ${NoticeActorAvatar.fragments.user} - ${NoticeActorName.fragments.user} + ${NoticeHeadActors.fragments.user} ${NoticeArticleTitle.fragments.article} ${NoticeCircleName.fragments.circle} ${NoticeComment.fragments.comment} diff --git a/src/components/Notice/CommentNotice/ArticleNewCommentNotice.tsx b/src/components/Notice/CommentNotice/ArticleNewCommentNotice.tsx index 632530aa0f..1bec7593a0 100644 --- a/src/components/Notice/CommentNotice/ArticleNewCommentNotice.tsx +++ b/src/components/Notice/CommentNotice/ArticleNewCommentNotice.tsx @@ -1,16 +1,13 @@ import gql from 'graphql-tag' -import { Fragment } from 'react' import { Translate } from '~/components' -import { numAbbr } from '~/common/utils' - import NoticeActorAvatar from '../NoticeActorAvatar' -import NoticeActorName from '../NoticeActorName' import NoticeArticleTitle from '../NoticeArticleTitle' import NoticeComment from '../NoticeComment' import NoticeDate from '../NoticeDate' import NoticeHead from '../NoticeHead' +import NoticeHeadActors from '../NoticeHeadActors' import NoticeTypeIcon from '../NoticeTypeIcon' import styles from '../styles.css' @@ -40,19 +37,8 @@ const ArticleNewCommentNotice = ({ notice }: { notice: NoticeType }) => {
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + { ? notice.comment.node : undefined + const latestComment = notice.comment + const circleCommentPath = toPath({ + page: 'commentDetail', + comment: latestComment, + circle: commentCircle, + }) + return (
@@ -41,28 +46,20 @@ const CircleNewBroadcastNotice = ({ notice }: { notice: NoticeType }) => {
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + - {commentCircle && } + {commentCircle && ( + + )} @@ -92,7 +89,7 @@ CircleNewBroadcastNotice.fragments = { ...NoticeDate actors { ...NoticeActorAvatarUser - ...NoticeActorNameUser + ...NoticeHeadActorsUser } comment: target { ...NoticeComment @@ -104,7 +101,7 @@ CircleNewBroadcastNotice.fragments = { } } ${NoticeActorAvatar.fragments.user} - ${NoticeActorName.fragments.user} + ${NoticeHeadActors.fragments.user} ${NoticeCircleName.fragments.circle} ${NoticeComment.fragments.comment} ${NoticeDate.fragments.notice} diff --git a/src/components/Notice/CommentNotice/CommentMentionedYouNotice.tsx b/src/components/Notice/CommentNotice/CommentMentionedYouNotice.tsx index 705c004840..7c03a3ebcb 100644 --- a/src/components/Notice/CommentNotice/CommentMentionedYouNotice.tsx +++ b/src/components/Notice/CommentNotice/CommentMentionedYouNotice.tsx @@ -2,13 +2,16 @@ import gql from 'graphql-tag' import { Translate } from '~/components' +import { toPath } from '~/common/utils' + import NoticeActorAvatar from '../NoticeActorAvatar' -import NoticeActorName from '../NoticeActorName' import NoticeArticleTitle from '../NoticeArticleTitle' import NoticeCircleName from '../NoticeCircleName' import NoticeComment from '../NoticeComment' import NoticeDate from '../NoticeDate' import NoticeHead from '../NoticeHead' +import NoticeHeadActors from '../NoticeHeadActors' +import NoticeTypeIcon from '../NoticeTypeIcon' import styles from '../styles.css' import { CommentMentionedYouNotice as NoticeType } from './__generated__/CommentMentionedYouNotice' @@ -18,7 +21,9 @@ const CommentMentionedYouNotice = ({ notice }: { notice: NoticeType }) => { return null } - const actor = notice.actors[0] + const actorsCount = notice.actors.length + const isMultiActors = actorsCount > 1 + const commentArticle = notice.comment?.node.__typename === 'Article' ? notice.comment.node : null const commentCircle = @@ -29,15 +34,26 @@ const CommentMentionedYouNotice = ({ notice }: { notice: NoticeType }) => { const commentCircleBroadcast = notice.comment?.type === 'circleBroadcast' ? notice.comment.type : null + const latestComment = notice.comment + const circleCommentPath = toPath({ + page: 'commentDetail', + comment: latestComment, + circle: commentCircle, + }) + return (
- + {isMultiActors ? ( + + ) : ( + + )}
- + {commentArticle && ( <> @@ -59,21 +75,24 @@ const CommentMentionedYouNotice = ({ notice }: { notice: NoticeType }) => { + - {commentCircleDiscussion && ( )} {commentCircleBroadcast && ( )} @@ -82,6 +101,14 @@ const CommentMentionedYouNotice = ({ notice }: { notice: NoticeType }) => { + {isMultiActors && ( +
+ {notice.actors.map((actor, index) => ( + + ))} +
+ )} +
@@ -97,7 +124,7 @@ CommentMentionedYouNotice.fragments = { ...NoticeDate actors { ...NoticeActorAvatarUser - ...NoticeActorNameUser + ...NoticeHeadActorsUser } comment: target { ...NoticeComment @@ -112,7 +139,7 @@ CommentMentionedYouNotice.fragments = { } } ${NoticeActorAvatar.fragments.user} - ${NoticeActorName.fragments.user} + ${NoticeHeadActors.fragments.user} ${NoticeArticleTitle.fragments.article} ${NoticeCircleName.fragments.circle} ${NoticeComment.fragments.comment} diff --git a/src/components/Notice/CommentNotice/SubscribedArticleNewCommentNotice.tsx b/src/components/Notice/CommentNotice/SubscribedArticleNewCommentNotice.tsx index 15c2bef107..86bec4db5c 100644 --- a/src/components/Notice/CommentNotice/SubscribedArticleNewCommentNotice.tsx +++ b/src/components/Notice/CommentNotice/SubscribedArticleNewCommentNotice.tsx @@ -1,16 +1,13 @@ import gql from 'graphql-tag' -import { Fragment } from 'react' import { Translate } from '~/components' -import { numAbbr } from '~/common/utils' - import NoticeActorAvatar from '../NoticeActorAvatar' -import NoticeActorName from '../NoticeActorName' import NoticeArticleTitle from '../NoticeArticleTitle' import NoticeComment from '../NoticeComment' import NoticeDate from '../NoticeDate' import NoticeHead from '../NoticeHead' +import NoticeHeadActors from '../NoticeHeadActors' import NoticeTypeIcon from '../NoticeTypeIcon' import styles from '../styles.css' @@ -44,19 +41,8 @@ const SubscribedArticleNewCommentNotice = ({
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + { if (!circle) { return null } - const path = toPath({ + const circlePath = toPath({ page: 'circleDetail', circle, }) return ( - + {circle.displayName} ) diff --git a/src/components/Notice/NoticeComment.tsx b/src/components/Notice/NoticeComment.tsx index 31043409f8..8afe6b6a8f 100644 --- a/src/components/Notice/NoticeComment.tsx +++ b/src/components/Notice/NoticeComment.tsx @@ -26,6 +26,10 @@ const fragments = { userName } } + ... on Circle { + id + name + } } parentComment { id @@ -41,17 +45,20 @@ const fragments = { const NoticeComment = ({ comment }: { comment: NoticeCommentType | null }) => { const article = comment?.node.__typename === 'Article' ? comment.node : undefined + const circle = + comment?.node.__typename === 'Circle' ? comment.node : undefined if (!comment) { return null } const path = - comment.state === 'active' && article + comment.state === 'active' ? toPath({ page: 'commentDetail', comment, article, + circle, }) : {} diff --git a/src/components/Notice/NoticeHeadActors.tsx b/src/components/Notice/NoticeHeadActors.tsx new file mode 100644 index 0000000000..6fc0317ce2 --- /dev/null +++ b/src/components/Notice/NoticeHeadActors.tsx @@ -0,0 +1,52 @@ +import gql from 'graphql-tag' +import { Fragment } from 'react' + +import { Translate } from '~/components' + +import { numAbbr } from '~/common/utils' + +import NoticeActorName from './NoticeActorName' + +type NoticeHeadActorsProps = { + actors: any[] +} + +const NoticeHeadActors = ({ actors }: NoticeHeadActorsProps) => { + const actorsCount = actors.length + const isMultiActors = actorsCount > 1 + const restActorCount = actorsCount - 2 + + return ( + <> + {actors.slice(0, 2).map((actor, index) => ( + + + {isMultiActors && index < 1 && ( + + + + )} + + ))}{' '} + {isMultiActors && ( + 0 ? `and ${numAbbr(restActorCount)} users` : ' '} + /> + )} + + ) +} + +NoticeHeadActors.fragments = { + user: gql` + fragment NoticeHeadActorsUser on User { + id + ...NoticeActorNameUser + } + ${NoticeActorName.fragments.user} + `, +} + +export default NoticeHeadActors diff --git a/src/components/Notice/UserNotice/UserNewFollowerNotice.tsx b/src/components/Notice/UserNotice/UserNewFollowerNotice.tsx index d4c87d8830..feadf6021c 100644 --- a/src/components/Notice/UserNotice/UserNewFollowerNotice.tsx +++ b/src/components/Notice/UserNotice/UserNewFollowerNotice.tsx @@ -1,14 +1,11 @@ import gql from 'graphql-tag' -import { Fragment } from 'react' import { Translate } from '~/components' -import { numAbbr } from '~/common/utils' - import NoticeActorAvatar from '../NoticeActorAvatar' -import NoticeActorName from '../NoticeActorName' import NoticeDate from '../NoticeDate' import NoticeHead from '../NoticeHead' +import NoticeHeadActors from '../NoticeHeadActors' import NoticeTypeIcon from '../NoticeTypeIcon' import NoticeUserCard from '../NoticeUserCard' import styles from '../styles.css' @@ -31,19 +28,8 @@ const UserNewFollowerNotice = ({ notice }: { notice: NoticeType }) => {
- {notice.actors.slice(0, 2).map((actor, index) => ( - - - {isMultiActors && index < 1 && } - - ))}{' '} - {isMultiActors && ( - - )} + + @@ -72,12 +58,12 @@ UserNewFollowerNotice.fragments = { ...NoticeDate actors { ...NoticeActorAvatarUser - ...NoticeActorNameUser + ...NoticeHeadActorsUser ...NoticeUserCard } } ${NoticeActorAvatar.fragments.user} - ${NoticeActorName.fragments.user} + ${NoticeHeadActors.fragments.user} ${NoticeUserCard.fragments.follower} ${NoticeDate.fragments.notice} `, diff --git a/src/components/Tag/index.tsx b/src/components/Tag/index.tsx index e44a98622f..e0226c8cfb 100644 --- a/src/components/Tag/index.tsx +++ b/src/components/Tag/index.tsx @@ -168,9 +168,9 @@ export const Tag = ({ )} - {hasCount && type === 'list' && tag?.numArticles && ( + {hasCount && type === 'list' && tag?.numArticles ? ( {tag.numArticles} - )} + ) : null} diff --git a/src/views/ArticleDetail/TranslationToast/index.tsx b/src/views/ArticleDetail/TranslationToast/index.tsx index 087075a04c..233865e159 100644 --- a/src/views/ArticleDetail/TranslationToast/index.tsx +++ b/src/views/ArticleDetail/TranslationToast/index.tsx @@ -1,6 +1,7 @@ -import { CONTENT_LANG_TEXT_MAP } from '@/src/common/enums' -import { toLocale } from '@/src/common/utils' -import { Translate } from '@/src/components' +import { Translate } from '~/components' + +import { CONTENT_LANG_TEXT_MAP } from '~/common/enums' +import { toLocale } from '~/common/utils' import styles from './styles.css' diff --git a/src/views/Settings/index.tsx b/src/views/Settings/index.tsx index 833ed347ef..278b006f03 100644 --- a/src/views/Settings/index.tsx +++ b/src/views/Settings/index.tsx @@ -8,7 +8,7 @@ import { UniversalAuthButton, useResponsive, ViewerContext, -} from '@/src/components' +} from '~/components' import DisplayPreferences from './DisplayPreferences' import Enhance from './Enhance' From 147dad1673f639b6a3843fdd8da622b43a0b47fd Mon Sep 17 00:00:00 2001 From: robertu <4065233+robertu7@users.noreply.github.com> Date: Wed, 14 Sep 2022 17:46:12 +0800 Subject: [PATCH 54/55] fix(i18): fallback to `zh_hant` only if `en` is nullish --- src/common/utils/translate.ts | 4 +++- src/components/Dialogs/ReviseArticleDialog/index.tsx | 2 +- .../Notice/CommentNotice/CircleNewBroadcastNotice.tsx | 2 +- src/views/ArticleDetail/EditMode/Header/index.tsx | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/common/utils/translate.ts b/src/common/utils/translate.ts index 54dd673a2f..f0f2b4f280 100644 --- a/src/common/utils/translate.ts +++ b/src/common/utils/translate.ts @@ -52,5 +52,7 @@ export const translate = ({ lang, ...props }: TranslateArgs): string => { translations = { zh_hant, zh_hans, en } } - return translations[lang || 'zh_hant'] || translations.zh_hant + const translation = translations[lang || 'zh_hant'] + + return typeof translation === 'string' ? translation : translations.zh_hant } diff --git a/src/components/Dialogs/ReviseArticleDialog/index.tsx b/src/components/Dialogs/ReviseArticleDialog/index.tsx index 981c0a2da1..3271bcb7dc 100644 --- a/src/components/Dialogs/ReviseArticleDialog/index.tsx +++ b/src/components/Dialogs/ReviseArticleDialog/index.tsx @@ -55,7 +55,7 @@ export const ReviseArticleDialog = ({ children, revisionCountLeft }: Props) => {

- + {revisionCountLeft} { diff --git a/src/views/ArticleDetail/EditMode/Header/index.tsx b/src/views/ArticleDetail/EditMode/Header/index.tsx index 77e4e7187c..527341e138 100644 --- a/src/views/ArticleDetail/EditMode/Header/index.tsx +++ b/src/views/ArticleDetail/EditMode/Header/index.tsx @@ -114,7 +114,7 @@ const EditModeHeader = ({ {revisionCountLeft} Date: Thu, 15 Sep 2022 11:35:48 +0800 Subject: [PATCH 55/55] chore(release): v4.5.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 68a67392ee..3c71aa6894 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "matters-web", - "version": "4.4.0", + "version": "4.5.0", "description": "codebase of Matters' website", "sideEffects": false, "author": "Matters ",