diff --git a/.github/workflows/build-eslint-jest.yaml b/.github/workflows/build-eslint-jest.yaml index 36d2545b0e51..cf19b628bd34 100644 --- a/.github/workflows/build-eslint-jest.yaml +++ b/.github/workflows/build-eslint-jest.yaml @@ -15,7 +15,6 @@ jobs: fail-fast: true runs-on: ${{ matrix.os }} name: ${{ matrix.os }} | Node ${{ matrix.node-version }} latest - if: github.event.pull_request.merged == false steps: - uses: actions/checkout@v2 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 60d85725139c..c5a8483be300 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,6 +8,7 @@ Before interacting with the Redwood community, please read and understand our [C - [Contributing](#contributing) - [Local Development](#local-development) + - [Install Dependencies](#install-dependencies) - [Copy and Watch](#copy-and-watch) - [Specifying a RW_PATH](#specifying-a-rw_path) - [Local Package Registry Emulation](#local-package-registry-emulation) @@ -40,6 +41,14 @@ We offer two workflows for making this possible: "copy and watch", which has som > Both workflows use `redwood-tools` (alias `rwt`), Redwood's companion CLI development tool. +### Install Dependencies +Before running the application for the first time you should run `yarn` in the root directory to install the necessary dependencies. + +```terminal +cd redwood +yarn +``` + ### Copy and Watch > Are you on Windows? If so, you most likely first have to [install rsync](https://tlundberg.com/blog/2020-06-15/installing-rsync-on-windows/). Also, unfortunately you can't use "copy and watch". You'll have to manually run `yarn rwt cp ../path/to/redwood` when you've made changes to the Redwood Framework (this is tracked in [issue #701](https://github.com/redwoodjs/redwood/issues/701)). diff --git a/README.md b/README.md index 5dd255d739b1..d0b320153082 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ use: - [Prisma](https://www.prisma.io/) - [Jest](https://jestjs.io/) (coming soon) - [Storybook](https://storybook.js.org/) (coming soon) -- [Babel](https://babeljs.io/) +- [Babel](https://babeljs.io/) - [Webpack](https://webpack.js.org/) ## Features @@ -392,6 +392,19 @@ And there you have it.
cr1at0rs

qooqu
+
Android Dev Notes
+
Jeremy Kratz
+
Kris Coulson
+ + +
Monica Powell
+
Ganesh Rane
+
Ryan Doyle
+
Anthony Campolo
+
Matt Reetz
+ + +
Punit Makwana
diff --git a/lerna.json b/lerna.json index 8449d82a11d4..dc9a674c9f1b 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "0.19.1", + "version": "0.19.2", "npmClient": "yarn", "useWorkspaces": true, "command": { diff --git a/package.json b/package.json index 989702acf306..663bb0f87418 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "cross-env": "^7.0.2", "jest": "^26.1.0", "lerna": "^3.20.2", - "msw": "0.20.5", + "msw": "0.21.2", "nodemon": "^2.0.2", "rimraf": "^3.0.2", "typescript": "^4.0.2", diff --git a/packages/api-server/package.json b/packages/api-server/package.json index 9f2b177a23f2..adb4ccf39aab 100644 --- a/packages/api-server/package.json +++ b/packages/api-server/package.json @@ -1,7 +1,7 @@ { "name": "@redwoodjs/api-server", "description": "Redwood's HTTP server for Serverless Functions", - "version": "0.19.1", + "version": "0.19.2", "bin": { "api-server": "./dist/index.js" }, diff --git a/packages/api/package.json b/packages/api/package.json index 6b5648d8b4d2..f0a0adf07bea 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "@redwoodjs/api", - "version": "0.19.1", + "version": "0.19.2", "files": [ "dist" ], @@ -8,13 +8,13 @@ "types": "./dist/index.d.ts", "license": "MIT", "dependencies": { - "@prisma/client": "2.7.1", - "@redwoodjs/internal": "^0.19.1", + "@prisma/client": "2.8.1", + "@redwoodjs/internal": "^0.19.2", "apollo-server-lambda": "2.17.0", "core-js": "3.6.5", "graphql": "^15.3.0", "graphql-scalars": "^1.2.7", - "graphql-tools": "6.2.2", + "graphql-tools": "6.2.4", "jsonwebtoken": "^8.5.1", "jwks-rsa": "^1.8.1", "lodash.merge": "^4.6.2", @@ -22,8 +22,8 @@ "merge-graphql-schemas": "^1.7.6" }, "devDependencies": { - "@redwoodjs/auth": "^0.19.1", - "@redwoodjs/dev-server": "^0.19.1", + "@redwoodjs/auth": "^0.19.2", + "@redwoodjs/dev-server": "^0.19.2", "@types/jsonwebtoken": "^8.3.9", "@types/lodash.merge": "^4.6.6", "@types/lodash.omitby": "^4.6.6" diff --git a/packages/auth/package.json b/packages/auth/package.json index eac5eb9e01c9..4eaebe306ee6 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -1,6 +1,6 @@ { "name": "@redwoodjs/auth", - "version": "0.19.1", + "version": "0.19.2", "files": [ "dist" ], diff --git a/packages/cli/package.json b/packages/cli/package.json index e21837e8b785..8d05c83a0435 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "name": "@redwoodjs/cli", "description": "The Redwood Command Line", - "version": "0.19.1", + "version": "0.19.2", "license": "MIT", "bin": { "redwood": "./dist/index.js", @@ -13,9 +13,9 @@ "dist" ], "dependencies": { - "@prisma/sdk": "2.7.1", - "@redwoodjs/internal": "^0.19.1", - "@redwoodjs/structure": "^0.19.1", + "@prisma/sdk": "2.8.1", + "@redwoodjs/internal": "^0.19.2", + "@redwoodjs/structure": "^0.19.2", "boxen": "^4.2.0", "camelcase": "^6.0.0", "chalk": "^4.1.0", diff --git a/packages/cli/src/commands/dbCommands/studio.js b/packages/cli/src/commands/dbCommands/studio.js index 12681e64bdf0..672a83a64a93 100644 --- a/packages/cli/src/commands/dbCommands/studio.js +++ b/packages/cli/src/commands/dbCommands/studio.js @@ -37,7 +37,7 @@ export const handler = async () => { { title: 'Starting Prisma Studio...', cmd: 'yarn prisma', - args: ['studio', '--experimental'], + args: ['studio'], }, ], { verbose: true } diff --git a/packages/cli/src/commands/deploy.js b/packages/cli/src/commands/deploy.js index 18b47da9a7e5..ebecb472ed9a 100644 --- a/packages/cli/src/commands/deploy.js +++ b/packages/cli/src/commands/deploy.js @@ -1,5 +1,5 @@ export const command = 'deploy ' -export const description = 'Deploy your Redwood project.' +export const description = 'Deploy your Redwood project' import terminalLink from 'terminal-link' export const builder = (yargs) => diff --git a/packages/cli/src/commands/destroy.js b/packages/cli/src/commands/destroy.js index 90cf9a919ae9..d208571e4e11 100644 --- a/packages/cli/src/commands/destroy.js +++ b/packages/cli/src/commands/destroy.js @@ -1,6 +1,15 @@ export const command = 'destroy ' export const aliases = ['d'] export const description = 'Rollback changes made by the generate command' +import terminalLink from 'terminal-link' export const builder = (yargs) => - yargs.commandDir('./destroy', { recurse: true }).demandCommand() + yargs + .commandDir('./destroy', { recurse: true }) + .demandCommand() + .epilogue( + `Also see the ${terminalLink( + 'Redwood CLI Reference', + 'https://redwoodjs.com/reference/command-line-interface#destroy' + )}` + ) diff --git a/packages/cli/src/commands/generate/__tests__/helpers.test.js b/packages/cli/src/commands/generate/__tests__/helpers.test.js index 3726c6555b12..679970558267 100644 --- a/packages/cli/src/commands/generate/__tests__/helpers.test.js +++ b/packages/cli/src/commands/generate/__tests__/helpers.test.js @@ -13,10 +13,10 @@ const FooBarPage = () => { <>

FooBarPage

- Find me in ./web/src/pages/FooBarPage/FooBarPage.js + Find me in ./web/src/pages/FooBarPage/FooBarPage.js

- My default route is named fooBar, link to me with \` + My default route is named fooBar, link to me with \` FooBar\`

diff --git a/packages/cli/src/commands/generate/auth/__tests__/auth.test.js b/packages/cli/src/commands/generate/auth/__tests__/auth.test.js index 50d5342cc991..fc2ee478cbfc 100644 --- a/packages/cli/src/commands/generate/auth/__tests__/auth.test.js +++ b/packages/cli/src/commands/generate/auth/__tests__/auth.test.js @@ -1,8 +1,46 @@ global.__dirname = __dirname -// import { loadGeneratorFixture } from 'src/lib/test' -// import * as auth from '../auth' +import { + waitFor, +} from '@testing-library/react' -test('true', () => { - expect(true).toEqual(true) +jest.mock('fs') +jest.mock('src/lib', () => ({ + getPaths: () => ({ + api: { functions: '', src: '', lib: '' }, + web: { src: '' }, + }), +})) + +import fs from 'fs' +import chalk from 'chalk' + +import * as auth from '../auth' + +const EXISTING_AUTH_PROVIDER_ERROR = 'Existing auth provider found.\nUse --force to override existing provider.'; + +test(`no error thrown when auth provider not found`, async () => { + // Mock process.exit to make sure CLI quites + const cSpy = jest.spyOn(console, 'log').mockImplementation(() => {}) + + auth.handler({ provider: 'netlify' }) + await waitFor(() => expect(console.log).toHaveBeenCalledTimes(1)) + expect(console.log).not.toHaveBeenCalledWith(chalk.bold.red(EXISTING_AUTH_PROVIDER_ERROR)) + + // Restore mocks + cSpy.mockRestore() +}) + +test('throws an error if auth provider exists', async () => { + // Mock process.exit to make sure CLI quites + const fsSpy = jest.spyOn(fs, 'readFileSync').mockImplementation(() => `import { AuthProvider } from '@redwoodjs/auth'`) + const cSpy = jest.spyOn(console, 'log').mockImplementation(() => {}) + + auth.handler({ provider: 'netlify' }) + await waitFor(() => expect(console.log).toHaveBeenCalledTimes(1)) + expect(console.log).toHaveBeenCalledWith(chalk.bold.red(EXISTING_AUTH_PROVIDER_ERROR)) + + // Restore mocks + fsSpy.mockRestore() + cSpy.mockRestore() }) diff --git a/packages/cli/src/commands/generate/auth/auth.js b/packages/cli/src/commands/generate/auth/auth.js index 4b5d6df6a39b..9ec6fb312621 100644 --- a/packages/cli/src/commands/generate/auth/auth.js +++ b/packages/cli/src/commands/generate/auth/auth.js @@ -13,6 +13,8 @@ const API_GRAPHQL_PATH = resolveFile( path.join(getPaths().api.functions, 'graphql') ) +const AUTH_PROVIDER_IMPORT = `import { AuthProvider } from '@redwoodjs/auth'` + const API_SRC_PATH = path.join(getPaths().api.src) const TEMPLATES = fs .readdirSync(path.resolve(__dirname, 'templates')) @@ -36,12 +38,7 @@ const SUPPORTED_PROVIDERS = fs // returns the content of index.js with import statements added const addWebImports = (content, imports) => { - return ( - `import { AuthProvider } from '@redwoodjs/auth'\n` + - imports.join('\n') + - '\n' + - content - ) + return `${AUTH_PROVIDER_IMPORT}\n` + imports.join('\n') + '\n' + content } // returns the content of index.js with init lines added @@ -71,6 +68,53 @@ const addWebRender = (content, authProvider) => { ) } +// returns the content of index.js with updated +const updateWebRender = (content, authProvider) => { + const renderContent = `` + return content.replace(//s, renderContent) +} + +// returns the content of index.js without the old auth import +const removeOldWebImports = (content, imports) => { + return content.replace(`${AUTH_PROVIDER_IMPORT}\n` + imports.join('\n'), '') +} + +// returns the content of index.js without the old auth init +const removeOldWebInit = (content, init) => { + return content.replace(init, '') +} + +// returns content with old auth provider removes +const removeOldAuthProvider = async (content) => { + // get the current auth provider + const [_, currentAuthProvider] = content.match( + //s + ) + + let oldAuthProvider + try { + oldAuthProvider = await import(`./providers/${currentAuthProvider}`) + } catch (e) { + throw new Error('Could not replace existing auth provider init') + } + + content = removeOldWebImports(content, oldAuthProvider.config.imports) + content = removeOldWebInit(content, oldAuthProvider.config.init) + + return content +} + +// check to make sure AuthProvider doesn't exist +const checkAuthProviderExists = () => { + const content = fs.readFileSync(WEB_SRC_INDEX_PATH).toString() + + if (content.includes(AUTH_PROVIDER_IMPORT)) { + throw new Error( + 'Existing auth provider found.\nUse --force to override existing provider.' + ) + } +} + // the files to create to support auth export const files = (provider) => { const template = TEMPLATES[provider] ?? TEMPLATES.base @@ -80,12 +124,19 @@ export const files = (provider) => { } // actually inserts the required config lines into index.js -export const addConfigToIndex = (config) => { +export const addConfigToIndex = async (config, force) => { let content = fs.readFileSync(WEB_SRC_INDEX_PATH).toString() + // update existing AuthProvider if --force else add new AuthProvider + if (content.includes(AUTH_PROVIDER_IMPORT) && force) { + content = await removeOldAuthProvider(content) + content = updateWebRender(content, config.authProvider) + } else { + content = addWebRender(content, config.authProvider) + } + content = addWebImports(content, config.imports) content = addWebInit(content, config.init) - content = addWebRender(content, config.authProvider) fs.writeFileSync(WEB_SRC_INDEX_PATH, content) } @@ -93,17 +144,23 @@ export const addConfigToIndex = (config) => { export const addApiConfig = () => { let content = fs.readFileSync(API_GRAPHQL_PATH).toString() - // add import statement - content = content.replace( - /^(.*services.*)$/m, - `$1\n\nimport { getCurrentUser } from 'src/lib/auth'` - ) - // add object to handler - content = content.replace( - /^(\s*)(schema: makeMergedSchema)(.*)$/m, - `$1getCurrentUser,\n$1$2$3` - ) - fs.writeFileSync(API_GRAPHQL_PATH, content) + // default to an array to avoid destructure errors + const [_, hasAuthImport] = + content.match(/(import {.*} from 'src\/lib\/auth.*')/s) || [] + + if (!hasAuthImport) { + // add import statement + content = content.replace( + /^(.*services.*)$/m, + `$1\n\nimport { getCurrentUser } from 'src/lib/auth'` + ) + // add object to handler + content = content.replace( + /^(\s*)(schema: makeMergedSchema)(.*)$/m, + `$1getCurrentUser,\n$1$2$3` + ) + fs.writeFileSync(API_GRAPHQL_PATH, content) + } } export const isProviderSupported = (provider) => { @@ -164,7 +221,7 @@ export const handler = async ({ provider, force }) => { title: 'Adding auth config to web...', task: (_ctx, task) => { if (webIndexDoesExist()) { - addConfigToIndex(providerData.config) + addConfigToIndex(providerData.config, force) } else { task.skip('web/src/index.js not found, skipping') } @@ -228,6 +285,11 @@ export const handler = async ({ provider, force }) => { ) try { + // Don't throw existing provider error when --force exists + if (!force) { + checkAuthProviderExists() + } + await tasks.run() } catch (e) { console.log(c.error(e.message)) diff --git a/packages/cli/src/commands/generate/auth/providers/firebase.js b/packages/cli/src/commands/generate/auth/providers/firebase.js index 097233975741..6afbf5faa7ca 100644 --- a/packages/cli/src/commands/generate/auth/providers/firebase.js +++ b/packages/cli/src/commands/generate/auth/providers/firebase.js @@ -1,3 +1,4 @@ +// the lines that need to be added to index.js export const config = { imports: [ `import * as firebase from 'firebase/app'`, @@ -20,9 +21,11 @@ const firebaseClient = ((config) => { authProvider: { client: 'firebaseClient', type: 'firebase' }, } +// required packages to install export const webPackages = ['firebase'] export const apiPackages = ['firebase-admin'] +// any notes to print out when the job is done export const notes = [ 'You will need to create several environment variables with your Firebase config options.', 'Check out web/src/index.js for the variables you need to add.', diff --git a/packages/cli/src/commands/generate/auth/providers/magicLink.js b/packages/cli/src/commands/generate/auth/providers/magicLink.js index 570d060dd238..915b647ab436 100644 --- a/packages/cli/src/commands/generate/auth/providers/magicLink.js +++ b/packages/cli/src/commands/generate/auth/providers/magicLink.js @@ -1,3 +1,4 @@ +// the lines that need to be added to index.js export const config = { imports: [`import { Magic } from 'magic-sdk'`], init: 'const m = new Magic(process.env.MAGICLINK_PUBLIC)', @@ -7,9 +8,11 @@ export const config = { }, } +// required packages to install export const webPackages = ['magic-sdk'] export const apiPackages = [] +// any notes to print out when the job is done export const notes = [ 'To get your application keys, go to https://dashboard.magic.link/login ', 'Then navigate to the API keys add them to your .env config options.', diff --git a/packages/cli/src/commands/generate/page/__tests__/fixtures/multiWordPage.js b/packages/cli/src/commands/generate/page/__tests__/fixtures/multiWordPage.js index 9592373745b0..bb66e2514fa4 100644 --- a/packages/cli/src/commands/generate/page/__tests__/fixtures/multiWordPage.js +++ b/packages/cli/src/commands/generate/page/__tests__/fixtures/multiWordPage.js @@ -5,10 +5,10 @@ const ContactUsPage = () => { <>

ContactUsPage

- Find me in ./web/src/pages/ContactUsPage/ContactUsPage.js + Find me in ./web/src/pages/ContactUsPage/ContactUsPage.js

- My default route is named contactUs, link to me with ` + My default route is named contactUs, link to me with ` ContactUs`

diff --git a/packages/cli/src/commands/generate/page/__tests__/fixtures/paramPage.js b/packages/cli/src/commands/generate/page/__tests__/fixtures/paramPage.js index a759455b170a..b7a86d715b44 100644 --- a/packages/cli/src/commands/generate/page/__tests__/fixtures/paramPage.js +++ b/packages/cli/src/commands/generate/page/__tests__/fixtures/paramPage.js @@ -5,10 +5,10 @@ const PostPage = ({ id }) => { <>

PostPage

- Find me in ./web/src/pages/PostPage/PostPage.js + Find me in ./web/src/pages/PostPage/PostPage.js

- My default route is named post, link to me with ` + My default route is named post, link to me with ` Post 42`

The parameter passed to me is {id}

diff --git a/packages/cli/src/commands/generate/page/__tests__/fixtures/pluralWordPage.js b/packages/cli/src/commands/generate/page/__tests__/fixtures/pluralWordPage.js index 62c61b8ad8b2..eeabc1c6cc0e 100644 --- a/packages/cli/src/commands/generate/page/__tests__/fixtures/pluralWordPage.js +++ b/packages/cli/src/commands/generate/page/__tests__/fixtures/pluralWordPage.js @@ -5,10 +5,10 @@ const CatsPage = () => { <>

CatsPage

- Find me in ./web/src/pages/CatsPage/CatsPage.js + Find me in ./web/src/pages/CatsPage/CatsPage.js

- My default route is named cats, link to me with ` + My default route is named cats, link to me with ` Cats`

diff --git a/packages/cli/src/commands/generate/page/__tests__/fixtures/singleWordPage.js b/packages/cli/src/commands/generate/page/__tests__/fixtures/singleWordPage.js index d4a0cc24af67..00e9e01d2c77 100644 --- a/packages/cli/src/commands/generate/page/__tests__/fixtures/singleWordPage.js +++ b/packages/cli/src/commands/generate/page/__tests__/fixtures/singleWordPage.js @@ -5,10 +5,10 @@ const HomePage = () => { <>

HomePage

- Find me in ./web/src/pages/HomePage/HomePage.js + Find me in ./web/src/pages/HomePage/HomePage.js

- My default route is named home, link to me with ` + My default route is named home, link to me with ` Home`

diff --git a/packages/cli/src/commands/generate/page/templates/page.js.template b/packages/cli/src/commands/generate/page/templates/page.js.template index d36be83773c1..8b551f13abee 100644 --- a/packages/cli/src/commands/generate/page/templates/page.js.template +++ b/packages/cli/src/commands/generate/page/templates/page.js.template @@ -4,9 +4,9 @@ const ${pascalName}Page = (${propParam}) => { return ( <>

${pascalName}Page

-

Find me in ${outputPath}

+

Find me in ${outputPath}

- My default route is named ${camelName}, link to me with ` + My default route is named ${camelName}, link to me with ` ${pascalName}<%= argumentParam !== '' ? ' 42' : '' %>`

<% if (paramName !== '') { %>

diff --git a/packages/cli/src/commands/generate/util.js b/packages/cli/src/commands/generate/util.js index 1eb28bfe7ba7..f25385eb078a 100644 --- a/packages/cli/src/commands/generate/util.js +++ b/packages/cli/src/commands/generate/util.js @@ -2,7 +2,12 @@ import terminalLink from 'terminal-link' export const command = 'util ' export const aliases = ['u'] -export const description = 'Quality of life utilities' +export const description = 'WARNING: deprecated. Use "yarn rw setup" command.' + +// ******** +// Deprecated as of September 2020 +// Use "setup" command +// ******** export const builder = (yargs) => yargs @@ -11,6 +16,6 @@ export const builder = (yargs) => .epilogue( `Also see the ${terminalLink( 'Redwood CLI Reference', - 'https://redwoodjs.com/reference/command-line-interface' + 'https://redwoodjs.com/reference/command-line-interface#setup' )}` ) diff --git a/packages/cli/src/commands/generate/util/tailwind/tailwind.js b/packages/cli/src/commands/generate/util/tailwind/tailwind.js index 3749e30d57ac..7e9fb9ebc528 100644 --- a/packages/cli/src/commands/generate/util/tailwind/tailwind.js +++ b/packages/cli/src/commands/generate/util/tailwind/tailwind.js @@ -1,15 +1,14 @@ -import fs from 'fs' -import path from 'path' - -import Listr from 'listr' import execa from 'execa' -import chalk from 'chalk' import c from 'src/lib/colors' -import { getPaths, writeFile } from 'src/lib' + +// ******** +// Deprecated as of September 2020 +// Use "setup" command +// ******** export const command = 'tailwind' -export const description = 'Setup tailwindcss' +export const description = 'WARNING: deprecated. Use "yarn rw setup" command.' export const builder = (yargs) => { yargs.option('force', { alias: 'f', @@ -19,105 +18,21 @@ export const builder = (yargs) => { }) } -const tailwindImportsAndNotes = [ - '/**', - ' * START --- TAILWIND GENERATOR EDIT', - ' *', - ' * `yarn rw generate util tailwind` placed these imports here', - " * to inject Tailwind's styles into your CSS.", - ' * For more information, see: https://tailwindcss.com/docs/installation#add-tailwind-to-your-css', - ' */', - '@import "tailwindcss/base";', - '@import "tailwindcss/components";', - '@import "tailwindcss/utilities";', - '/**', - ' * END --- TAILWIND GENERATOR EDIT', - ' */\n', -] - -const INDEX_CSS_PATH = path.join(getPaths().web.src, 'index.css') - export const handler = async ({ force }) => { - const tasks = new Listr([ - { - title: 'Installing packages...', - task: async () => { - /** - * Install postcss-loader, tailwindcss, and autoprefixer - */ - await execa('yarn', [ - 'workspace', - 'web', - 'add', - '-D', - 'postcss-loader@4.0.2', - 'tailwindcss', - 'autoprefixer@9.8.6', - ]) - }, - }, - { - title: 'Configuring PostCSS...', - task: () => { - /** - * Make web/config if it doesn't exist - * and write postcss.config.js there - */ - return writeFile( - getPaths().web.postcss, - fs - .readFileSync( - path.resolve(__dirname, 'templates', 'postcss.config.js.template') - ) - .toString(), - { overwriteExisting: force } - ) - }, - }, - { - title: 'Initializing Tailwind CSS...', - task: async () => { - /** - * If it doesn't already exist, - * initialize tailwind and move tailwind.config.js to web/ - */ - const configExists = fs.existsSync( - path.join(getPaths().web.base, 'tailwind.config.js') - ) - - if (!configExists || force) { - await execa('yarn', ['tailwindcss', 'init']) - /** - * Later, when we can tell the vscode extension where to look for the config, - * we can put it in web/config/ - */ - await execa('mv', ['tailwind.config.js', 'web/']) - } - }, - }, - { - title: 'Adding imports to index.css...', - task: () => { - /** - * Add tailwind imports and notes to the top of index.css - */ - let indexCSS = fs.readFileSync(INDEX_CSS_PATH) - indexCSS = tailwindImportsAndNotes.join('\n') + indexCSS - fs.writeFileSync(INDEX_CSS_PATH, indexCSS) - }, - }, - { - title: 'One more thing...', - task: (_ctx, task) => { - task.title = `One more thing...\n\n ${chalk.hex('#bf4722')( - 'Quick link to the docs: ' - )}https://tailwindcss.com/\n` - }, - }, - ]) - + const cmd = force + ? 'yarn rw setup tailwind --force' + : 'yarn rw setup tailwind' try { - await tasks.run() + console.log(c.warning('\n' + 'WARNING: deprecated "util" command')) + console.log( + c.green('See "setup" command: ') + + 'https://redwoodjs.com/reference/command-line-interface#setup' + + '\n' + ) + await execa(cmd, { + stdio: 'inherit', + shell: true, + }) } catch (e) { console.log(c.error(e.message)) } diff --git a/packages/cli/src/commands/generate/util/tailwind/templates/postcss.config.js.template b/packages/cli/src/commands/generate/util/tailwind/templates/postcss.config.js.template deleted file mode 100644 index 6ee14f7a65af..000000000000 --- a/packages/cli/src/commands/generate/util/tailwind/templates/postcss.config.js.template +++ /dev/null @@ -1,8 +0,0 @@ -const path = require('path') - -module.exports = { - plugins: [ - require('tailwindcss')(path.resolve(__dirname, '../tailwind.config.js')), - require('autoprefixer'), - ], -} diff --git a/packages/cli/src/commands/setup.js b/packages/cli/src/commands/setup.js index 465b26d63830..72fd5db7a570 100644 --- a/packages/cli/src/commands/setup.js +++ b/packages/cli/src/commands/setup.js @@ -1,6 +1,6 @@ +export const command = 'setup ' +export const description = 'Initialize project config and install packages' import terminalLink from 'terminal-link' -export const command = 'setup ' -export const description = 'Execute some setup logic' export const builder = (yargs) => yargs @@ -9,15 +9,6 @@ export const builder = (yargs) => .epilogue( `Also see the ${terminalLink( 'Redwood CLI Reference', - 'https://redwoodjs.com/reference/command-line-interface#setting-up' + 'https://redwoodjs.com/reference/command-line-interface#setup' )}` ) - -export const yargsDefaults = { - force: { - alias: 'f', - default: false, - description: 'Overwrite existing files', - type: 'boolean', - }, -} diff --git a/packages/cli/src/commands/setup/i18n/i18n.js b/packages/cli/src/commands/setup/i18n/i18n.js index 693603da6333..6e2ede6e6fdc 100644 --- a/packages/cli/src/commands/setup/i18n/i18n.js +++ b/packages/cli/src/commands/setup/i18n/i18n.js @@ -19,7 +19,6 @@ export const builder = (yargs) => { }) } - export const handler = async ({ force }) => { const INDEX_JS_PATH = path.join(getPaths().web.src, 'index.js') const tasks = new Listr([ @@ -34,7 +33,7 @@ export const handler = async ({ force }) => { 'i18next', 'i18next-browser-languagedetector', 'i18next-http-backend', - 'react-i18next' + 'react-i18next', ]) }, }, @@ -56,10 +55,10 @@ export const handler = async ({ force }) => { }, }, { - title: 'Adding locale file for \'site\' namespace', - task () { + title: "Adding locale file for 'site' namespace", + task() { return writeFile(getPaths().web.src + '/locales/en/site.json') - } + }, }, { title: 'Adding import to index.js...', @@ -75,9 +74,15 @@ export const handler = async ({ force }) => { { title: 'One more thing...', task: (_ctx, task) => { - task.title = `One more thing...\n\n ${chalk.hex('#bf4722')( - 'Quick link to the docs: ' - )}\n - https://react.i18next.com/guides/quick-start/\n - https://github.com/i18next/i18next-browser-languageDetector\n` + task.title = `One more thing...\n + ${c.green('Quick link to the docs:')}\n + ${chalk.hex('#e8e8e8')( + 'https://react.i18next.com/guides/quick-start/' + )} + ${chalk.hex('#e8e8e8')( + 'https://github.com/i18next/i18next-browser-languageDetector\n' + )} + ` }, }, ]) diff --git a/packages/cli/src/commands/setup/tailwind/tailwind.js b/packages/cli/src/commands/setup/tailwind/tailwind.js index cbae232fae2a..f4e52cb1a988 100644 --- a/packages/cli/src/commands/setup/tailwind/tailwind.js +++ b/packages/cli/src/commands/setup/tailwind/tailwind.js @@ -9,7 +9,7 @@ import c from 'src/lib/colors' import { getPaths, writeFile } from 'src/lib' export const command = 'tailwind' -export const description = 'Setup tailwindcss' +export const description = 'Setup tailwindcss and PostCSS' export const builder = (yargs) => { yargs.option('force', { alias: 'f', @@ -23,7 +23,7 @@ const tailwindImportsAndNotes = [ '/**', ' * START --- TAILWIND GENERATOR EDIT', ' *', - ' * `yarn rw generate util tailwind` placed these imports here', + ' * `yarn rw setup tailwind` placed these imports here', " * to inject Tailwind's styles into your CSS.", ' * For more information, see: https://tailwindcss.com/docs/installation#add-tailwind-to-your-css', ' */', @@ -44,15 +44,16 @@ export const handler = async ({ force }) => { task: async () => { /** * Install postcss-loader, tailwindcss, and autoprefixer + * RedwoodJS currently uses PostCSS v7; postcss-loader and autoprefixers pinned for compatibility */ await execa('yarn', [ 'workspace', 'web', 'add', '-D', - 'postcss-loader', + 'postcss-loader@4.0.2', 'tailwindcss', - 'autoprefixer', + 'autoprefixer@9.8.6', ]) }, }, @@ -87,6 +88,17 @@ export const handler = async ({ force }) => { if (!configExists || force) { await execa('yarn', ['tailwindcss', 'init']) + + // opt-in to upcoming changes + const config = fs.readFileSync('tailwind.config.js', 'utf-8') + + const uncommentFlags = (str) => + str.replace(/\/{2} ([\w-]+: true)/g, '$1') + + const newConfig = config.replace(/future.*purge/s, uncommentFlags) + + fs.writeFileSync('tailwind.config.js', newConfig) + /** * Later, when we can tell the vscode extension where to look for the config, * we can put it in web/config/ @@ -109,9 +121,14 @@ export const handler = async ({ force }) => { { title: 'One more thing...', task: (_ctx, task) => { - task.title = `One more thing...\n\n ${chalk.hex('#bf4722')( - 'Quick link to the docs: ' - )}https://tailwindcss.com/\n` + task.title = `One more thing...\n + ${c.green( + 'Tailwind configured with "upcoming change" opt-in enabled' + )}\n + ${chalk.hex('#e8e8e8')( + 'See this doc for info: https://tailwindcss.com/docs/upcoming-changes' + )} + ` }, }, ]) diff --git a/packages/cli/src/commands/setup/webpack/templates/webpack.config.js.template b/packages/cli/src/commands/setup/webpack/templates/webpack.config.js.template new file mode 100644 index 000000000000..9a515dfce2af --- /dev/null +++ b/packages/cli/src/commands/setup/webpack/templates/webpack.config.js.template @@ -0,0 +1,13 @@ +module.exports = (config, { env }) => { + if (env === 'development') { + // Add dev plugin + } + + // Add custom rules for your project + // config.module.rules.push(YOUR_RULE) + + // Add custom plugins for your project + // config.plugins.push(YOUR_PLUGIN) + + return config +} diff --git a/packages/cli/src/commands/setup/webpack/webpack.js b/packages/cli/src/commands/setup/webpack/webpack.js new file mode 100644 index 000000000000..647d2a136500 --- /dev/null +++ b/packages/cli/src/commands/setup/webpack/webpack.js @@ -0,0 +1,59 @@ +import fs from 'fs' +import Listr from 'listr' +import path from 'path' +import chalk from 'chalk' + +import c from 'src/lib/colors' +import { getPaths, writeFile } from 'src/lib' + +export const command = 'webpack' +export const description = + 'Setup webpack in your project so you can add custom config' +export const builder = (yargs) => { + yargs.option('force', { + alias: 'f', + default: false, + description: 'Overwrite existing configuration', + type: 'boolean', + }) +} + +export const handler = async ({ force }) => { + const tasks = new Listr([ + { + title: 'Adding webpack file to your web folder...', + task: () => { + const webpackConfigFile = `${getPaths().web.config}/webpack.config.js` + + return writeFile( + webpackConfigFile, + fs + .readFileSync( + path.resolve(__dirname, 'templates', 'webpack.config.js.template') + ) + .toString(), + { overwriteExisting: force } + ) + }, + }, + { + title: 'One more thing...', + task: (_ctx, task) => { + task.title = `One more thing...\n + ${c.green( + 'Quick link to the docs on configuring custom webpack config:' + )} + ${chalk.hex('#e8e8e8')( + 'https://redwoodjs.com/docs/webpack-configuration#configuring-webpack' + )} + ` + }, + }, + ]) + + try { + await tasks.run() + } catch (e) { + console.log(c.error(e.message)) + } +} diff --git a/packages/cli/src/commands/upgrade.js b/packages/cli/src/commands/upgrade.js index 3411643d4bea..d82122ef8638 100644 --- a/packages/cli/src/commands/upgrade.js +++ b/packages/cli/src/commands/upgrade.js @@ -9,6 +9,10 @@ export const description = 'Upgrade all @redwoodjs packages via interactive CLI' export const builder = (yargs) => { yargs + .example( + 'rw upgrade -t 0.20.1-canary.5', + 'Specify a version. URL for Version History:\nhttps://www.npmjs.com/package/@redwoodjs/core' + ) .option('dry-run', { alias: 'd', description: 'Check for outdated packages without upgrading', @@ -16,9 +20,8 @@ export const builder = (yargs) => { }) .option('tag', { alias: 't', - choices: ['canary', 'rc'], description: - 'WARNING: Unstable releases! Force upgrades packages to the most recent version for the given --tag', + '[choices: "canary", "rc", or specific-version (see example below)] WARNING: "canary" and "rc" tags are unstable releases!', type: 'string', }) .epilogue( diff --git a/packages/cli/src/lib/colors.js b/packages/cli/src/lib/colors.js index 0488b3f3a081..7327c5166dd4 100644 --- a/packages/cli/src/lib/colors.js +++ b/packages/cli/src/lib/colors.js @@ -1,5 +1,17 @@ import chalk from 'chalk' +/** + * To keep a consistent color/style palette between cli packages, such as + * @redwood/cli and @redwood/create-redwood-app, please keep them compatible + * with one and another. We'll might split up and refactor these into a + * separate package when there is a strong motivation behind it. + * + * Current files: + * + * - packages/cli/src/lib/colors.js (this file) + * - packages/create-redwood-app/src/create-redwood-app.js + * + */ export default { error: chalk.bold.red, warning: chalk.keyword('orange'), diff --git a/packages/core/config/jest.config.js b/packages/core/config/jest.config.js index 905a104014dc..1e944fee74cf 100644 --- a/packages/core/config/jest.config.js +++ b/packages/core/config/jest.config.js @@ -15,4 +15,8 @@ module.exports = { coverageDirectory: path.join(redwoodPaths.base, 'coverage'), rootDir: redwoodPaths.base, projects: ['/{,!(node_modules)/**/}jest.config.js'], + watchPlugins: [ + 'jest-watch-typeahead/filename', + 'jest-watch-typeahead/testname', + ], } diff --git a/packages/core/package.json b/packages/core/package.json index f60364b63261..19a1f3f3d432 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@redwoodjs/core", - "version": "0.19.1", + "version": "0.19.2", "license": "MIT", "files": [ "config", @@ -18,12 +18,12 @@ "@babel/preset-react": "^7.10.4", "@babel/preset-typescript": "^7.10.4", "@babel/runtime-corejs3": "^7.11.2", - "@prisma/cli": "2.7.1", - "@redwoodjs/cli": "^0.19.1", - "@redwoodjs/dev-server": "^0.19.1", - "@redwoodjs/eslint-config": "^0.19.1", - "@redwoodjs/internal": "^0.19.1", - "@redwoodjs/testing": "^0.19.1", + "@prisma/cli": "2.8.1", + "@redwoodjs/cli": "^0.19.2", + "@redwoodjs/dev-server": "^0.19.2", + "@redwoodjs/eslint-config": "^0.19.2", + "@redwoodjs/internal": "^0.19.2", + "@redwoodjs/testing": "^0.19.2", "@storybook/react": "^5.3.19", "@testing-library/jest-dom": "^5.8.0", "@types/jest": "^26.0.10", @@ -46,7 +46,8 @@ "graphql": "^15.3.0", "graphql-tag": "^2.10.3", "html-webpack-plugin": "^4.0.2", - "jest": "^26.1.0", + "jest": "^26.4.2", + "jest-watch-typeahead": "^0.6.1", "lodash.escaperegexp": "^4.1.2", "mini-css-extract-plugin": "^0.11.0", "null-loader": "^4.0.0", diff --git a/packages/create-redwood-app/package.json b/packages/create-redwood-app/package.json index 6872c804d56f..80b89eb80b29 100644 --- a/packages/create-redwood-app/package.json +++ b/packages/create-redwood-app/package.json @@ -1,6 +1,6 @@ { "name": "create-redwood-app", - "version": "0.19.1", + "version": "0.19.2", "license": "MIT", "bin": "./dist/create-redwood-app.js", "files": [ @@ -8,7 +8,7 @@ ], "dependencies": { "@babel/runtime-corejs3": "^7.9.2", - "@redwoodjs/internal": "^0.19.1", + "@redwoodjs/internal": "^0.19.2", "axios": "^0.20.0", "chalk": "^4.1.0", "check-node-version": "^4.0.2", diff --git a/packages/create-redwood-app/src/create-redwood-app.js b/packages/create-redwood-app/src/create-redwood-app.js index 9ea2adcdf84e..93c913e6eda5 100644 --- a/packages/create-redwood-app/src/create-redwood-app.js +++ b/packages/create-redwood-app/src/create-redwood-app.js @@ -20,6 +20,32 @@ import yargs from 'yargs' import { name, version } from '../package' +/** + * To keep a consistent color/style palette between cli packages, such as + * @redwood/create-redwood-app and @redwood/cli, please keep them compatible + * with one and another. We'll might split up and refactor these into a + * separate package when there is a strong motivation behind it. + * + * Current files: + * + * - packages/cli/src/lib/colors.js + * - packages/create-redwood-app/src/create-redwood-app.js (this file) + * + */ +const style = { + error: chalk.bold.red, + warning: chalk.keyword('orange'), + success: chalk.greenBright, + info: chalk.grey, + + header: chalk.bold.underline.hex('#e8e8e8'), + cmd: chalk.hex('#808080'), + redwood: chalk.hex('#ff845e'), + love: chalk.redBright, + + green: chalk.green, +} + const RELEASE_URL = 'https://api.github.com/repos/redwoodjs/create-redwood-app/releases/latest' @@ -164,19 +190,6 @@ const installNodeModulesTasks = ({ newAppDir }) => { ] } -// Inspiration from from @redwood/cli -// https://github.com/redwoodjs/redwood/blob/main/packages/cli/src/lib/colors.js -const style = { - error: chalk.bold.red, - warning: chalk.keyword('orange'), - success: chalk.greenBright, - info: chalk.grey, - header: chalk.bold.underline.hex('#e8e8e8'), - cmd: chalk.hex('#808080'), - redwood: chalk.hex('#ff845e'), - love: chalk.redBright, -} - new Listr( [ { diff --git a/packages/dev-server/package.json b/packages/dev-server/package.json index 5fdae295ad64..4697f3a5f1db 100644 --- a/packages/dev-server/package.json +++ b/packages/dev-server/package.json @@ -1,7 +1,7 @@ { "name": "@redwoodjs/dev-server", "description": "Redwood's HTTP server for serverless Functions", - "version": "0.19.1", + "version": "0.19.2", "bin": { "dev-server": "./dist/main.js" }, @@ -11,7 +11,7 @@ "license": "MIT", "dependencies": { "@babel/register": "^7.9.0", - "@redwoodjs/internal": "^0.19.1", + "@redwoodjs/internal": "^0.19.2", "body-parser": "^1.19.0", "chokidar": "^3.4.0", "express": "^4.17.1", diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 87e9830a70a4..03c56a765b68 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -1,10 +1,10 @@ { "name": "@redwoodjs/eslint-config", - "version": "0.19.1", + "version": "0.19.2", "main": "index.js", "license": "MIT", "dependencies": { - "@redwoodjs/eslint-plugin-redwood": "^0.19.1", + "@redwoodjs/eslint-plugin-redwood": "^0.19.2", "@typescript-eslint/eslint-plugin": "^4.0.1", "@typescript-eslint/parser": "^4.0.1", "babel-eslint": "^10.1.0", diff --git a/packages/eslint-plugin-redwood/package.json b/packages/eslint-plugin-redwood/package.json index 6b2618cb1140..de78dbcefbcb 100644 --- a/packages/eslint-plugin-redwood/package.json +++ b/packages/eslint-plugin-redwood/package.json @@ -1,6 +1,6 @@ { "name": "@redwoodjs/eslint-plugin-redwood", - "version": "0.19.1", + "version": "0.19.2", "description": "eslint plugin for Redwood rules.", "files": [ "dist" diff --git a/packages/forms/package.json b/packages/forms/package.json index e88b300650f1..f0899acdfb7b 100644 --- a/packages/forms/package.json +++ b/packages/forms/package.json @@ -1,6 +1,6 @@ { "name": "@redwoodjs/forms", - "version": "0.19.1", + "version": "0.19.2", "files": [ "dist", "src/index.d.ts" @@ -16,7 +16,7 @@ "devDependencies": { "@testing-library/jest-dom": "^5.11.4", "@testing-library/react": "11.0.2", - "@testing-library/user-event": "12.1.4", + "@testing-library/user-event": "12.1.6", "react": "16.13.1" }, "peerDependencies": { diff --git a/packages/internal/package.json b/packages/internal/package.json index ef68a13d72de..a17ed3932db5 100644 --- a/packages/internal/package.json +++ b/packages/internal/package.json @@ -1,6 +1,6 @@ { "name": "@redwoodjs/internal", - "version": "0.19.1", + "version": "0.19.2", "files": [ "dist" ], diff --git a/packages/internal/src/paths.ts b/packages/internal/src/paths.ts index 1a6fa7de1e8e..c665ec61aafd 100644 --- a/packages/internal/src/paths.ts +++ b/packages/internal/src/paths.ts @@ -69,7 +69,7 @@ const PATH_WEB_DIR_CONFIG_POSTCSS = 'web/config/postcss.config.js' /** * Search the parent directories for the Redwood configuration file. */ -export const getConfigPath = (cwd: string = __dirname): string => { +export const getConfigPath = (cwd: string = process.cwd()): string => { const configPath = findUp(CONFIG_FILE_NAME, { cwd }) if (!configPath) { throw new Error( diff --git a/packages/router/README.md b/packages/router/README.md index 18a3773c7c95..ee085f256dd9 100644 --- a/packages/router/README.md +++ b/packages/router/README.md @@ -46,7 +46,7 @@ Some pages should only be visible to authenticated users. All `Routes` nested in `` require authentication. When a user is not authenticated and attempts to visit this route, -they will be redirected to the route passed as the `unauthenticated` prop and the orignally requested route's path will be added to the querystring in a `redirectTo` param. This lets you send the user to the originally requested once logged in. +they will be redirected to the route passed as the `unauthenticated` prop and the originally requested route's path will be added to the querystring in a `redirectTo` param. This lets you send the user to the originally requested once logged in. ```js // Routes.js diff --git a/packages/router/package.json b/packages/router/package.json index 2a020b66e0a4..ffa846ef1ad4 100644 --- a/packages/router/package.json +++ b/packages/router/package.json @@ -1,6 +1,6 @@ { "name": "@redwoodjs/router", - "version": "0.19.1", + "version": "0.19.2", "files": [ "dist", "src/index.d.ts" diff --git a/packages/structure/package.json b/packages/structure/package.json index 13dc55801d23..9883be4e751c 100644 --- a/packages/structure/package.json +++ b/packages/structure/package.json @@ -1,7 +1,7 @@ { "name": "@redwoodjs/structure", "description": "noun: the arrangement of and relations between the parts or elements of something complex", - "version": "0.19.1", + "version": "0.19.2", "license": "MIT", "main": "dist/index.js", "files": [ @@ -9,8 +9,8 @@ ], "types": "./dist/index.d.ts", "dependencies": { - "@prisma/sdk": "2.7.1", - "@redwoodjs/internal": "^0.19.1", + "@prisma/sdk": "2.8.1", + "@redwoodjs/internal": "^0.19.2", "@types/line-column": "^1.0.0", "camelcase": "^6.0.0", "deepmerge": "^4.2.2", diff --git a/packages/structure/src/language_server/RWLanguageServer.ts b/packages/structure/src/language_server/RWLanguageServer.ts index 2108f2be4b65..a821f4c3a358 100644 --- a/packages/structure/src/language_server/RWLanguageServer.ts +++ b/packages/structure/src/language_server/RWLanguageServer.ts @@ -12,6 +12,7 @@ import { HostWithDocumentsStore, IDEInfo } from '../ide' import { RWProject } from '../model' import { lazy, memo } from '../x/decorators' import { VSCodeWindowMethods_fromConnection } from '../x/vscode' +import { Connection_suppressErrors } from '../x/vscode-languageserver' import { ExtendedDiagnostic_findRelevantQuickFixes, Range_contains, @@ -24,12 +25,16 @@ import { XMethodsManager } from './xmethods' export class RWLanguageServer { initializeParams!: InitializeParams documents = new TextDocuments(TextDocument) - connection = createConnection(ProposedFeatures.all) + @lazy() get connection() { + const c = createConnection(ProposedFeatures.all) + Connection_suppressErrors(c) + return c + } @memo() start() { const { connection, documents } = this connection.onInitialize((params) => { connection.console.log( - `Redwood.js Language Server onInitialize(), PID=${process.pid}` + `Redwood Language Server onInitialize(), PID=${process.pid}` ) this.initializeParams = params return { @@ -50,19 +55,22 @@ export class RWLanguageServer { }) connection.onInitialized(async () => { - connection.console.log('Redwood.js Language Server onInitialized()') + connection.console.log('Redwood Language Server onInitialized()') const folders = await connection.workspace.getWorkspaceFolders() if (folders) { for (const folder of folders) { this.projectRoot = normalize(folder.uri.substr(7)) // remove file:// } } - this.diagnostics.start() - this.commands.start() - this.outline.start() - this.xmethods.start() }) + // initialize these early on to prevent "unhandled methods" + // they are smart enough to short-circuit if this.projectRoot is not ready + this.diagnostics.start() + this.commands.start() + this.outline.start() + this.xmethods.start() + connection.onImplementation(async ({ textDocument: { uri }, position }) => { const info = await this.info(uri, 'Implementation') for (const i of info) { diff --git a/packages/structure/src/model/RWProject.ts b/packages/structure/src/model/RWProject.ts index 8f3893f3f043..17a849442589 100644 --- a/packages/structure/src/model/RWProject.ts +++ b/packages/structure/src/model/RWProject.ts @@ -79,18 +79,29 @@ export class RWProject extends BaseNode { } // TODO: do we move this to a separate node? (ex: RWDatabase) @memo() async prismaDMMF() { - return await getDMMF({ - datamodel: this.host.readFileSync(this.pathHelper.api.dbSchema), - }) + try { + // consider case where dmmf doesn't exist (or fails to parse) + return await getDMMF({ + datamodel: this.host.readFileSync(this.pathHelper.api.dbSchema), + }) + } catch (e) { + return undefined + } } @memo() async prismaDMMFModelNames() { - return (await this.prismaDMMF()).datamodel.models.map((m) => m.name) + const dmmf = await this.prismaDMMF() + if (!dmmf) return [] + return dmmf.datamodel.models.map((m) => m.name) } @lazy() get redwoodTOML(): RWTOML { return new RWTOML(join(this.projectRoot, 'redwood.toml'), this) } @lazy() private get processPagesDir() { - return processPagesDir(this.pathHelper.web.pages) + try { + return processPagesDir(this.pathHelper.web.pages) + } catch (e) { + return [] + } } @lazy() get pages(): RWPage[] { return this.processPagesDir.map((p) => new RWPage(p.const, p.path, this)) diff --git a/packages/structure/src/outline/outline.ts b/packages/structure/src/outline/outline.ts index f9e118a0a265..980e8a50a178 100644 --- a/packages/structure/src/outline/outline.ts +++ b/packages/structure/src/outline/outline.ts @@ -205,6 +205,7 @@ function _schema(project: RWProject): TreeItem2 { ...resourceUriAndCommandFor(project.pathHelper.api.dbSchema), async children() { const dmmf = await project.prismaDMMF() + if (!dmmf) return [] const models = dmmf.datamodel.models.map((model) => { return { label: model.name, diff --git a/packages/structure/src/x/vscode-languageserver.ts b/packages/structure/src/x/vscode-languageserver.ts new file mode 100644 index 000000000000..a6f8577d72a4 --- /dev/null +++ b/packages/structure/src/x/vscode-languageserver.ts @@ -0,0 +1,57 @@ +import { Connection } from 'vscode-languageserver' + +/** + * will monkey patch the connection object + * so that any errors thrown by subsequently installed handlers are caught and logged + * (ex: connection.onHover(() => throw new Error('oops!'))) + * this prevents the LSP client, on the other end, to receive errors + * which can sometimes cause error messages to pop-up uncontrollably + * + * @param conn + */ +export function Connection_suppressErrors(conn: T) { + for (const k of Object.keys(conn)) { + if (!k.startsWith('on')) continue // only onHover, onCodeLens, etc? + const v = conn[k] + if (typeof v !== 'function') continue + conn[k] = (...args) => { + const args2 = args.map((arg) => + typeof arg === 'function' + ? with_catch2(arg, (e, fargs) => { + const data = { + handler: k, + handlerInstallParams: args, + handlerExecParams: fargs, + error: e + '', + } + const dd = JSON.stringify(data, null, 2) + conn.console.error(dd) + return null + }) + : arg + ) + return v.apply(conn, args2) + } + } +} + +type CatchClause = (e?, args?) => unknown + +function with_catch2(f, clause: CatchClause) { + return (...args) => + catch2( + () => f(...args), + (e) => clause(e, args) + ) + function catch2(f, clause2) { + try { + const res = f() + if (typeof res?.then === 'function') + // promise + return res.catch?.(clause2) + return res + } catch (e) { + return clause2(e) + } + } +} diff --git a/packages/testing/package.json b/packages/testing/package.json index ae57687eb286..868514c062aa 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,18 +1,18 @@ { "name": "@redwoodjs/testing", "description": "Tools, wrappers and configuration for testing a Redwood project.", - "version": "0.19.1", + "version": "0.19.2", "files": [ "dist" ], "main": "dist/index.js", "license": "MIT", "dependencies": { - "@redwoodjs/internal": "^0.19.1", - "@redwoodjs/web": "^0.19.1", + "@redwoodjs/internal": "^0.19.2", + "@redwoodjs/web": "^0.19.2", "@testing-library/react": "^11.0.2", "@types/react": "16.9.38", - "msw": "^0.20.0" + "msw": "^0.21.2" }, "scripts": { "build": "yarn build:js && yarn build:types", diff --git a/packages/web/package.json b/packages/web/package.json index c41bdfd7c9a0..a72b47abddb5 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -1,12 +1,11 @@ { "name": "@redwoodjs/web", - "version": "0.19.1", + "version": "0.19.2", "files": [ - "dist", - "src/index.d.ts" + "dist" ], "main": "dist/index.js", - "types": "src/index.d.ts", + "types": "dist/index.d.ts", "license": "MIT", "dependencies": { "@apollo/client": "^3.1.5", @@ -20,9 +19,10 @@ "react": "*" }, "scripts": { - "build": "yarn build:js", + "build": "yarn build:js && yarn build:types", "prepublishOnly": "yarn cross-env NODE_ENV=production yarn build", "build:js": "babel src -d dist --extensions \".js,.ts,.tsx\"", + "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,ts,tsx\" --ignore dist --exec \"yarn build\"", "test": "jest", "test:watch": "yarn test --watch" diff --git a/packages/web/src/global.web-auto-imports.ts b/packages/web/src/global.web-auto-imports.ts new file mode 100644 index 000000000000..588aa278e84f --- /dev/null +++ b/packages/web/src/global.web-auto-imports.ts @@ -0,0 +1,13 @@ +/* eslint-disable no-redeclare, no-undef */ +import type _gql from 'graphql-tag' +import type _React from 'react' +import type _PropTypes from 'prop-types' + +declare global { + const React: typeof _React + const PropTypes: typeof _PropTypes + const gql: typeof _gql + + // Extend the existing `window` interface. + interface Window { __REDWOOD__API_PROXY_PATH: string } +} diff --git a/packages/web/src/graphql/index.js b/packages/web/src/graphql/index.tsx similarity index 52% rename from packages/web/src/graphql/index.js rename to packages/web/src/graphql/index.tsx index e02337353ac8..e4edff6e4849 100644 --- a/packages/web/src/graphql/index.js +++ b/packages/web/src/graphql/index.tsx @@ -1,13 +1,23 @@ -import { ApolloClient, InMemoryCache } from '@apollo/client' +import { + ApolloClient, + ApolloClientOptions, + InMemoryCache, +} from '@apollo/client' import { ApolloProvider } from '@apollo/client/react' +import { ApolloProviderProps } from '@apollo/client/react/context' export { withCell } from './withCell' +type GraphQLClientConfig = Omit< + ApolloClientOptions, + 'uri' | 'cache' +> + /** * Create a GraphQL Client (Apollo) that points to the `apiProxyPath` that's * specified in `redwood.toml`. */ -export const createGraphQLClient = (config) => { +export const createGraphQLClient = (config: GraphQLClientConfig) => { return new ApolloClient({ uri: `${window.__REDWOOD__API_PROXY_PATH}/graphql`, cache: new InMemoryCache(), @@ -18,6 +28,11 @@ export const createGraphQLClient = (config) => { /** * A GraphQL provider that instantiates a client automatically. */ -export const GraphQLProvider = ({ config, ...rest }) => { +export const GraphQLProvider = ({ + config, + ...rest +}: { + config: GraphQLClientConfig +} & Omit, 'client'>) => { return } diff --git a/packages/web/src/graphql/withCell.js b/packages/web/src/graphql/withCell.tsx similarity index 63% rename from packages/web/src/graphql/withCell.js rename to packages/web/src/graphql/withCell.tsx index 747376c137a5..b7824a6fb377 100644 --- a/packages/web/src/graphql/withCell.js +++ b/packages/web/src/graphql/withCell.tsx @@ -1,5 +1,27 @@ import React from 'react' import { Query } from '@apollo/client/react/components/Query' +import { DocumentNode } from 'graphql' +import { + BaseQueryOptions, + OperationVariables, + QueryResult, +} from '@apollo/client' + +export type DataObject = { [key: string]: unknown } + +export type QueryResultAlias = QueryResult> + +export type CellFailureStateComponent = Omit< + QueryResultAlias, + 'data' | 'loading' +> +export type CellLoadingEmptyStateComponent = Omit< + QueryResultAlias, + 'error' | 'loading' | 'data' +> +export type CellSuccessStateComponent = + | Omit + | DataObject /** * Is a higher-order-component that executes a GraphQL query and automatically @@ -39,42 +61,50 @@ import { Query } from '@apollo/client/react/components/Query' export const withCell = ({ beforeQuery = (props) => ({ variables: props, - fetchPolicy: 'cache-and-network', }), QUERY, afterQuery = (data) => ({ ...data }), - Loading = () => 'Loading...', + Loading = () => <>Loading..., Failure, Empty, Success, +}: { + beforeQuery?: (props: OperationVariables) => BaseQueryOptions + QUERY: DocumentNode | ((before: BaseQueryOptions) => DocumentNode) + afterQuery?: (data: DataObject) => DataObject + Loading?: React.FC + Failure?: React.FC + Empty?: React.FC + Success: React.FC }) => { - const isDataNull = (data) => { + const isDataNull = (data: DataObject) => { return dataField(data) === null } - const isDataEmptyArray = (data) => { - return Array.isArray(dataField(data)) && dataField(data).length === 0 + const isDataEmptyArray = (data: DataObject) => { + const field = dataField(data) + return Array.isArray(field) && field.length === 0 } - const dataField = (data) => { + const dataField = (data: DataObject) => { return data[Object.keys(data)[0]] } - const isEmpty = (data) => { + const isEmpty = (data: DataObject) => { return isDataNull(data) || isDataEmptyArray(data) } - return (props) => ( + return (props: OperationVariables) => ( - {({ error, loading, data, ...queryRest }) => { + {({ error, loading, data, ...queryRest }: QueryResultAlias) => { if (error) { if (Failure) { return } else { - throw new Error(error) + throw error } } else if (loading) { return @@ -89,6 +119,7 @@ export const withCell = ({ 'Cannot render cell: graphQL success but `data` is null' ) } + return null }} ) diff --git a/packages/web/src/index.d.ts b/packages/web/src/index.d.ts deleted file mode 100644 index db79c056e056..000000000000 --- a/packages/web/src/index.d.ts +++ /dev/null @@ -1,65 +0,0 @@ -/* eslint-disable no-redeclare, no-undef */ -import type _React from 'react' -import type _gql from 'graphql-tag' -import type _PropTypes from 'prop-types' -import type { - useSubscription as _useSubscription, - useLazyQuery as _useLazyQuery, - useQuery as _useQuery, - useMutation as _useMutation, - useApolloClient as _useApolloClient, -} from '@apollo/client' - -declare global { - // We reduce the number of imports that a user has to do by making them - // globals via `Webpack.ProvidePlugin` - const React: typeof _React - const gql: typeof _gql - const PropTypes: typeof _PropTypes -} - -declare module '@redwoodjs/web' { - const useQuery: typeof _useQuery - const useMutation: typeof _useMutation - const useLazyQuery: typeof _useLazyQuery - - const useSubscription: typeof _useSubscription - const useApolloClient: typeof _useApolloClient - - type messages = { - id: number // id - text: string // default string - classes: string // css classes - persist: boolean // true will persist the message through each cycle until it is dismissed manually - viewed: boolean // once true, the message will be dismissed on the next cycle - } - const useFlash: () => { - messages: messages[] - addMessage: ( - text: string, // default string - options?: { - text?: string // overwrites the text param passed to addMessage() - classes?: string // css classes - persist?: boolean // true will persist the message through each cycle until it is dismissed manually - viewed?: boolean // once true, the message will be dismissed on the next cycle - } - ) => void - dismissMessage: (messageId: number) => void - cycleMessage: (messageId: number) => void - } - - type ContextProps = { - messages: messages[] - } - - type FlashProps = { - timeout: number // number in ms - } - const Flash: _React.FC - - const FlashProvider: any - const GraphQLProvider: any - const createGraphQLClient: any - - // TODO: RedwoodProvider -} diff --git a/packages/web/src/index.js b/packages/web/src/index.ts similarity index 82% rename from packages/web/src/index.js rename to packages/web/src/index.ts index 6daa63682343..b2116c3b4c9c 100644 --- a/packages/web/src/index.js +++ b/packages/web/src/index.ts @@ -1,3 +1,4 @@ +import './global.web-auto-imports' import './config' export { useSubscription } from '@apollo/client/react/hooks/useSubscription' @@ -6,8 +7,11 @@ export { useQuery } from '@apollo/client/react/hooks/useQuery' export { useMutation } from '@apollo/client/react/hooks/useMutation' export { useApolloClient } from '@apollo/client/react/hooks/useApolloClient' +// @ts-expect-error - no defs export { default as FatalErrorBoundary } from 'src/components/FatalErrorBoundary' +// @ts-expect-error - no defs export { default as RedwoodProvider } from 'src/components/RedwoodProvider' export * from './graphql' +// @ts-expect-error - no defs export * from './flash' diff --git a/packages/web/tsconfig.json b/packages/web/tsconfig.json new file mode 100644 index 000000000000..fabf60e3eb27 --- /dev/null +++ b/packages/web/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.compilerOption.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src", + "tsBuildInfoFile": "dist/tsconfig.tsbuildinfo", + "outDir": "dist", + }, + "include": ["src"], +} diff --git a/tasks/all-contributors/.all-contributorsrc b/tasks/all-contributors/.all-contributorsrc index fcefd5b88277..e757129c0569 100644 --- a/tasks/all-contributors/.all-contributorsrc +++ b/tasks/all-contributors/.all-contributorsrc @@ -56,7 +56,8 @@ "avatar_url": "https://avatars3.githubusercontent.com/u/51720070?v=4", "profile": "https://twitter.com/kimadeline_m", "contributions": [ - "code" + "code", + "doc" ] }, { @@ -266,7 +267,8 @@ "profile": "https://github.com/Thieffen", "contributions": [ "code", - "doc" + "doc", + "tool" ] }, { @@ -1005,7 +1007,87 @@ "contributions": [ "doc" ] + }, + { + "login": "androiddevnotes", + "name": "Android Dev Notes", + "avatar_url": "https://avatars2.githubusercontent.com/u/66256957?v=4", + "profile": "https://www.youtube.com/c/awesomedevnotes", + "contributions": [ + "code" + ] + }, + { + "login": "jwkratz", + "name": "Jeremy Kratz", + "avatar_url": "https://avatars3.githubusercontent.com/u/1337020?v=4", + "profile": "http://jeremykratz.com/", + "contributions": [ + "code" + ] + }, + { + "login": "KrisCoulson", + "name": "Kris Coulson", + "avatar_url": "https://avatars3.githubusercontent.com/u/6943688?v=4", + "profile": "http://kriscoulson.com/", + "contributions": [ + "code" + ] + }, + { + "login": "M0nica", + "name": "Monica Powell", + "avatar_url": "https://avatars0.githubusercontent.com/u/6998954?v=4", + "profile": "https://www.aboutmonica.com/", + "contributions": [ + "code" + ] + }, + { + "login": "bboygary", + "name": "Ganesh Rane", + "avatar_url": "https://avatars0.githubusercontent.com/u/65660344?v=4", + "profile": "https://github.com/bboygary", + "contributions": [ + "doc" + ] + }, + { + "login": "ryanmdoyle", + "name": "Ryan Doyle", + "avatar_url": "https://avatars2.githubusercontent.com/u/20651020?v=4", + "profile": "https://github.com/ryanmdoyle", + "contributions": [ + "doc" + ] + }, + { + "login": "ajcwebdev", + "name": "Anthony Campolo", + "avatar_url": "https://avatars0.githubusercontent.com/u/12433465?v=4", + "profile": "https://ajcwebdev.substack.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "matthewcarlreetz", + "name": "Matt Reetz", + "avatar_url": "https://avatars0.githubusercontent.com/u/1760821?v=4", + "profile": "https://github.com/matthewcarlreetz", + "contributions": [ + "doc" + ] + }, + { + "login": "punitcodes", + "name": "Punit Makwana", + "avatar_url": "https://avatars1.githubusercontent.com/u/16760252?v=4", + "profile": "https://in.linkedin.com/in/punit-makwana/", + "contributions": [ + "doc" + ] } - ], - "contributorsPerLine": 7 + ] } \ No newline at end of file diff --git a/tasks/all-contributors/.crwa.all-contributorsrc b/tasks/all-contributors/.crwa.all-contributorsrc index b87e0b7a588e..e223963b223c 100644 --- a/tasks/all-contributors/.crwa.all-contributorsrc +++ b/tasks/all-contributors/.crwa.all-contributorsrc @@ -118,6 +118,15 @@ "contributions": [ "tool" ] + }, + { + "login": "Thieffen", + "name": "Thieffen Delabaere", + "avatar_url": "https://avatars1.githubusercontent.com/u/847877?v=4", + "profile": "https://github.com/Thieffen", + "contributions": [ + "tool" + ] } ], "contributorsPerLine": 7 diff --git a/tasks/all-contributors/.rwjs.com.all-contributorsrc b/tasks/all-contributors/.rwjs.com.all-contributorsrc index 24460e4f92d4..22d5407d900f 100644 --- a/tasks/all-contributors/.rwjs.com.all-contributorsrc +++ b/tasks/all-contributors/.rwjs.com.all-contributorsrc @@ -514,6 +514,60 @@ "contributions": [ "doc" ] + }, + { + "login": "bboygary", + "name": "Ganesh Rane", + "avatar_url": "https://avatars0.githubusercontent.com/u/65660344?v=4", + "profile": "https://github.com/bboygary", + "contributions": [ + "doc" + ] + }, + { + "login": "ryanmdoyle", + "name": "Ryan Doyle", + "avatar_url": "https://avatars2.githubusercontent.com/u/20651020?v=4", + "profile": "https://github.com/ryanmdoyle", + "contributions": [ + "doc" + ] + }, + { + "login": "ajcwebdev", + "name": "Anthony Campolo", + "avatar_url": "https://avatars0.githubusercontent.com/u/12433465?v=4", + "profile": "https://ajcwebdev.substack.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "kimadeline", + "name": "Kim-Adeline Miguel", + "avatar_url": "https://avatars3.githubusercontent.com/u/51720070?v=4", + "profile": "https://twitter.com/kimadeline_m", + "contributions": [ + "doc" + ] + }, + { + "login": "matthewcarlreetz", + "name": "Matt Reetz", + "avatar_url": "https://avatars0.githubusercontent.com/u/1760821?v=4", + "profile": "https://github.com/matthewcarlreetz", + "contributions": [ + "doc" + ] + }, + { + "login": "punitcodes", + "name": "Punit Makwana", + "avatar_url": "https://avatars1.githubusercontent.com/u/16760252?v=4", + "profile": "https://in.linkedin.com/in/punit-makwana/", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7 diff --git a/tasks/all-contributors/README.md b/tasks/all-contributors/README.md index b380a8ff84aa..f2aecbb4396a 100644 --- a/tasks/all-contributors/README.md +++ b/tasks/all-contributors/README.md @@ -20,9 +20,11 @@ In general, this is a three-part process: 2. Merge changes into the main `.all-contributorsrc` file 3. Update README.md#Contributors with changes -**FILES** -**Framework** `redwoodjs/redwood` project: -_note: this file is also used for all aggregated contributors_ +**FILES** + +**Framework** `redwoodjs/redwood` project: + +_note: this file is also used for all aggregated contributors_ - `.all-contributorsrc` **CRWA** `redwoodjs/create-redwood-app` project: @@ -78,7 +80,7 @@ node mergeContributors.js ### Step 3: Update the content in README.md#Contributors ```bash -yarn all-contributors generate --config .all-contributorsrc +yarn all-contributors generate --contributorsPerLine 5 --config .all-contributorsrc ``` Don't forget to commit and PR changes. diff --git a/tsconfig.json b/tsconfig.json index d8fe174d9186..c186cb250af1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,6 +8,7 @@ { "path": "packages/dev-server" }, { "path": "packages/api-server" }, { "path": "packages/auth" }, + { "path": "packages/web" }, ], "files": [] } diff --git a/yarn.lock b/yarn.lock index dd2b178eb60a..7e1909784940 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,24 +2,6 @@ # yarn lockfile v1 -"@apollo/client@^3.0.2": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.1.3.tgz#4ea9c3818bd2836a3dbe26088227c3d8cb46ad2b" - integrity sha512-zXMiaj+dX0sgXIwEV5d/PI6B8SZT2bqlKNjZWcEXRY7NjESF5J3nd4v8KOsrhHe+A3YhNv63tIl35Sq7uf41Pg== - dependencies: - "@types/zen-observable" "^0.8.0" - "@wry/context" "^0.5.2" - "@wry/equality" "^0.2.0" - fast-json-stable-stringify "^2.0.0" - graphql-tag "^2.11.0" - hoist-non-react-statics "^3.3.2" - optimism "^0.12.1" - prop-types "^15.7.2" - symbol-observable "^1.2.0" - ts-invariant "^0.4.4" - tslib "^1.10.0" - zen-observable "^0.8.14" - "@apollo/client@^3.1.5": version "3.1.5" resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.1.5.tgz#5865f5c32f061cd520459c5809e8debea6f4886c" @@ -80,9 +62,9 @@ tslib "~2.0.1" "@auth0/auth0-spa-js@^1.7.0": - version "1.12.0" - resolved "https://registry.yarnpkg.com/@auth0/auth0-spa-js/-/auth0-spa-js-1.12.0.tgz#632e22c022bd3d28c279fbbbcd45586f5fb73cf0" - integrity sha512-BBuUDj5ZgRpTs+Lk+1o9oVI3HvmhfeNdd7hY7/KjzL6GtDJ7kVXTdJ6Ik8OUsZiHWFik69pBBwFBjBLlOZ8ctA== + version "1.12.1" + resolved "https://registry.yarnpkg.com/@auth0/auth0-spa-js/-/auth0-spa-js-1.12.1.tgz#791cdda722afa25f4c8879b93b8d7ab54a26e4c1" + integrity sha512-YdXtA1T2wK4iNG79VlGS/CPfNNezS1nqZURerj71jKSf8ICVKmvJgUNXFEZEwNNU/KFdCCPCHd5wMeWLDyEILw== dependencies: abortcontroller-polyfill "^1.5.0" browser-tabs-lock "^1.2.9" @@ -1224,7 +1206,7 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2", "@babel/runtime@^7.9.6": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2", "@babel/runtime@^7.9.6": version "7.11.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== @@ -1568,10 +1550,10 @@ dependencies: "@firebase/app-types" "0.6.1" -"@firebase/database@0.6.12", "@firebase/database@^0.6.10": - version "0.6.12" - resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.6.12.tgz#60b484d34add1c0aad4999e2b1cb58b8f2b707c6" - integrity sha512-OLUxp8TkXiML4X5LWM5IACsSDvo3fcf4mTbTe5RF+N6TRFv0Svzlet5OgGIa3ET1dQvNiisrMX7zzRa0OTLs7Q== +"@firebase/database@0.6.13", "@firebase/database@^0.6.10": + version "0.6.13" + resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.6.13.tgz#b96fe0c53757dd6404ee085fdcb45c0f9f525c17" + integrity sha512-NommVkAPzU7CKd1gyehmi3lz0K78q0KOfiex7Nfy7MBMwknLm7oNqKovXSgQV1PCLvKXvvAplDSFhDhzIf9obA== dependencies: "@firebase/auth-interop-types" "0.1.5" "@firebase/component" "0.1.19" @@ -1581,24 +1563,24 @@ faye-websocket "0.11.3" tslib "^1.11.1" -"@firebase/firestore-types@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-1.12.1.tgz#67e999798043d1b3156d0a2c52d4299a92345deb" - integrity sha512-CpWcDriYnGDoAl0D9DcSuwX0b/fXqi7qOwuuTI1M0SYxau48G8cqhVjzjqPDgEM3kDGYJTnPN3ALS0Z4cnwERQ== +"@firebase/firestore-types@1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-1.13.0.tgz#4ab9c40e1e66e8193a929460d64507acd07d9230" + integrity sha512-QF5CAuYOHE6Zbsn1uEg6wkl836iP+i6C0C/Zs3kF60eebxZvTWp8JSZk19Ar+jj4w+ye8/7H5olu5CqDNjWpEA== -"@firebase/firestore@1.16.7": - version "1.16.7" - resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-1.16.7.tgz#046da8e129205538335f261b804273ec04c6df42" - integrity sha512-MrX7te1eUib2pUzD3dLWdRuM7EPcCxtPwO4M9og3IFYr1U3XlxybD7kxyYswltHcUm6+kba3VKL1rvkqZ1sn2g== +"@firebase/firestore@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-1.17.1.tgz#fba94eef755e48b6aa31a586311e3f0a946aafe5" + integrity sha512-FJlNmFIBr9wrkA5g9JBPJWPmxYIzUhBDfsJGHNTUCxMbwm12pz/1Y6CW56kvZOgl6l+iPNlF911iduUDFzNUqw== dependencies: "@firebase/component" "0.1.19" - "@firebase/firestore-types" "1.12.1" + "@firebase/firestore-types" "1.13.0" "@firebase/logger" "0.2.6" "@firebase/util" "0.3.2" "@firebase/webchannel-wrapper" "0.3.0" "@grpc/grpc-js" "^1.0.0" "@grpc/proto-loader" "^0.5.0" - node-fetch "2.6.0" + node-fetch "2.6.1" tslib "^1.11.1" "@firebase/functions-types@0.3.17": @@ -1767,7 +1749,7 @@ resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-2.0.2.tgz#81d654b4cb227c65c7ad2f9a7715262febd409ed" integrity sha512-EvuabjzzZ9E2+OaYf+7P9OAiiwbTxKYL0oGLnREQd+Su2NTQBpomkdlkBowFvyWsaV0d1sSGxrKpSNcrhPqbxg== -"@google-cloud/storage@^5.0.0": +"@google-cloud/storage@^5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-5.3.0.tgz#cf86683911cce68829e46de544abb41947d29da2" integrity sha512-3t5UF3SZ14Bw2kcBHubCai6EIugU2GnQOstYWVSFuoO8IJ94RAaIOPq/dtexvQbUTpBTAGpd5smVR9WPL1mJVw== @@ -1821,127 +1803,127 @@ graphql-tools "5.0.0" tslib "1.11.1" -"@graphql-tools/batch-delegate@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/batch-delegate/-/batch-delegate-6.2.2.tgz#f81026796f5e953eede7d460d45019d02bf79ea5" - integrity sha512-xXJKVvBxafdn9tVWe3oJreTHuFAKWblw4zK0KvKhEVJOjPytKweGCZI3kTs9hdmjgPz1ZjSQEVvgmZJ0GubrWA== +"@graphql-tools/batch-delegate@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/batch-delegate/-/batch-delegate-6.2.4.tgz#8aab19ff69939c1a8bd3bebb4b1a3ff13c933559" + integrity sha512-sDWHMuTVGB2ShAnMAF1fLgaPMDgvweUYBXKuef9qHtCE0YtSO8xhP72CtQvHDOIJf30emWTmFFIsw6zbRe1ZWA== dependencies: - "@graphql-tools/delegate" "6.2.2" + "@graphql-tools/delegate" "^6.2.4" dataloader "2.0.0" tslib "~2.0.1" -"@graphql-tools/code-file-loader@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-6.2.2.tgz#9640a4e593ab4aa91b05adb0968ec8aeea969264" - integrity sha512-2EDdgNR2fu1aKnU77jpkfwuUNOOZjBe6VQW/hI//GSVK5AYh+a/zm2vusAwdJQdC4yt2A1zEY8095bk4i9XD7w== +"@graphql-tools/code-file-loader@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-6.2.4.tgz#ce194c19b2fcd714bffa4c0c529a4c65a6b0db4b" + integrity sha512-aDVI/JVUXIdqSJJKLjpBaqOAOCa5yUvsgQZu2Q9nVwV9faGlQi5MUuYAh1xp0LW80/5/unbiZ5/taRUyUY/6Eg== dependencies: - "@graphql-tools/graphql-tag-pluck" "6.2.2" - "@graphql-tools/utils" "6.2.2" + "@graphql-tools/graphql-tag-pluck" "^6.2.4" + "@graphql-tools/utils" "^6.2.4" fs-extra "9.0.1" tslib "~2.0.1" -"@graphql-tools/delegate@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-6.2.2.tgz#3c401a06f6f7c3ef068d78217bde5e9b7b3830a0" - integrity sha512-8VycfZYQ+m4HgajewQT6v6BzAEFxc6mh6rO+uqewnvh143nvv3ud4nXEAfOddUm0PrE6iD3Ng2BZtPSWF5mt+w== +"@graphql-tools/delegate@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-6.2.4.tgz#db553b63eb9512d5eb5bbfdfcd8cb1e2b534699c" + integrity sha512-mXe6DfoWmq49kPcDrpKHgC2DSWcD5q0YCaHHoXYPAOlnLH8VMTY8BxcE8y/Do2eyg+GLcwAcrpffVszWMwqw0w== dependencies: "@ardatan/aggregate-error" "0.0.6" - "@graphql-tools/schema" "6.2.2" - "@graphql-tools/utils" "6.2.2" + "@graphql-tools/schema" "^6.2.4" + "@graphql-tools/utils" "^6.2.4" dataloader "2.0.0" is-promise "4.0.0" tslib "~2.0.1" -"@graphql-tools/git-loader@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/git-loader/-/git-loader-6.2.2.tgz#6e2fe4e5853b90a3096dc88d9827f3d4b47c16d9" - integrity sha512-gfhQX5ZQ7nc4AAW6tT0s2d0o2lkYtMMhaeX4miPMGd+Hgej1phLrIeSSEAfrlSy0JWgARmmsoXGuz76wDZdhjw== +"@graphql-tools/git-loader@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/git-loader/-/git-loader-6.2.4.tgz#2502d48cb1253bde7df3f3e1dfd2bdcf7ff72b82" + integrity sha512-urMwWhhsZUKnX9MDHXbMUfZd568pWwj1Bx1O2M7N8I25GqZDW54Fzj9DudlVKE5M9twMtoEyBTH7sH4tscliqg== dependencies: - "@graphql-tools/graphql-tag-pluck" "6.2.2" - "@graphql-tools/utils" "6.2.2" + "@graphql-tools/graphql-tag-pluck" "^6.2.4" + "@graphql-tools/utils" "^6.2.4" tslib "~2.0.1" -"@graphql-tools/github-loader@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/github-loader/-/github-loader-6.2.2.tgz#6d0bf63e5dd0319c47cfb0cd52e2b6632e7bb7da" - integrity sha512-tPUWfD8Dwc2YuiO8WtMg9rtsnq1tyfk8NEfjwxqe7cKwyEKRb8ybRURT/acwEroAgENc3Jwa3cgju+OJCbw4pQ== +"@graphql-tools/github-loader@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/github-loader/-/github-loader-6.2.4.tgz#38520b5964594a578dbb4a7693a76938a79877a1" + integrity sha512-p4peplm/Ot989bCD4XATK5NEXX7l39BXNw+YKaqgoEoHopyQ142I2Zb0GJiMRjW9yXGqIlDjG4reZazleiprgQ== dependencies: - "@graphql-tools/graphql-tag-pluck" "6.2.2" - "@graphql-tools/utils" "6.2.2" - cross-fetch "3.0.5" + "@graphql-tools/graphql-tag-pluck" "^6.2.4" + "@graphql-tools/utils" "^6.2.4" + cross-fetch "3.0.6" tslib "~2.0.1" -"@graphql-tools/graphql-file-loader@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-6.2.2.tgz#88e9d41f8fb1aac7f9f486cb61fbdb6bdc18d6f6" - integrity sha512-dKuOk4vH2WWzVGydL13FjdR3WEmJHMoud3MXF9uyvLcjuDm9L0r+PdSI1PSPiCYs7Ii2bJ8zgmdz32jCBHZszA== +"@graphql-tools/graphql-file-loader@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-6.2.4.tgz#1765b644cd621040f232f5c32321b45c187399a7" + integrity sha512-IcdUZoOlkCGr0KO8QCO8G031CDDv5dzHBZeN5H1gzE2AVFFwn2AexysrUXBxftm2DQIOuV+Knap7dC4Ol54kNA== dependencies: - "@graphql-tools/import" "6.2.2" - "@graphql-tools/utils" "6.2.2" + "@graphql-tools/import" "^6.2.4" + "@graphql-tools/utils" "^6.2.4" fs-extra "9.0.1" tslib "~2.0.1" -"@graphql-tools/graphql-tag-pluck@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-6.2.2.tgz#b6c2ef7fe04c58a3ef242926e0b7b7845e555b68" - integrity sha512-KH6QoJYo3WXtc4+3e2oTfm627oszRGsKVpMF7A0IvtiVUU0XxoXLAjmJBlNrGN/PdqpBDPEVSdz2VLX2eDkokw== +"@graphql-tools/graphql-tag-pluck@^6.2.4": + version "6.2.5" + resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-6.2.5.tgz#5c0c47362406a55aaf661c4af0209b542b8483dc" + integrity sha512-qvdIOTanBuKYLIMSYl9Tk+ej9dq00B4BqUnHqoCvYtSjD1n1UINGrqXgwMT+JXp66gUZWw8BU9Ke92mQ4UwTpg== dependencies: "@babel/parser" "7.11.5" "@babel/traverse" "7.11.5" "@babel/types" "7.11.5" - "@graphql-tools/utils" "6.2.2" + "@graphql-tools/utils" "^6.2.4" tslib "~2.0.1" optionalDependencies: vue-template-compiler "^2.6.12" -"@graphql-tools/import@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-6.2.2.tgz#5f5341ff419851c1d2cf18d10d48abbb7763902e" - integrity sha512-fxQx+960CBzG6+MGGRaWv9tQ71ir2NZQeVC2dfieQLv5/LXH0fqKe9ltYCfJFskscAmzWeuS19Sibhdn0JMecw== +"@graphql-tools/import@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-6.2.4.tgz#0547f6d4754a924e80439d6af013577cdb617194" + integrity sha512-Q6fk6hbtDevoEVcgwb3WRn7XOqGY4MnX3Mvc+x8/b8k4RZ4wT+0WSLRDXGAKiVKRxGhgouU2lZVnGE/LDrGSCg== dependencies: fs-extra "9.0.1" resolve-from "5.0.0" tslib "~2.0.1" -"@graphql-tools/json-file-loader@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-6.2.2.tgz#d411a0195797a47028a97101a7c8059679364011" - integrity sha512-m/gKQGJS+4bUy/8v0uup3su9RcCLdWvmhYW9+J8WDSzDE2QEdYQMeyDFYV14x0r92IhRpftLd//JvoE3cTV5Kg== +"@graphql-tools/json-file-loader@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-6.2.4.tgz#0707fedfced73dd91b1dd81dfa02e83413e5aeaa" + integrity sha512-1iL6wwZrUt888hExlNEloSpNXuuUFYD2KV2FZ82t6yiq6bO9Iyg12SUuGd5xVXx9jUkdaHRZc0plMyuIA6gTGA== dependencies: - "@graphql-tools/utils" "6.2.2" + "@graphql-tools/utils" "^6.2.4" fs-extra "9.0.1" tslib "~2.0.1" -"@graphql-tools/links@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/links/-/links-6.2.2.tgz#cf3620b6b68f48137637f7eee73eb0274dcda924" - integrity sha512-x1B75Flc10PSmF1hzar1kty9q9wfWjlwlPXYC5AYGmRIVfzbZui3SEZcEPP8cviedBCI84l9O+dX5S4dE2Oz6Q== +"@graphql-tools/links@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/links/-/links-6.2.4.tgz#f06bfae67ec2485706af98ae9ad58dbf78a6bcea" + integrity sha512-dQH3oWVTkCwzGmfIi1OjyKAjPw1jOexP1f3hv8UajgU7Um/DCjVkvXQHeMGlihXg4bH/wogFheCJ0SwF4oFFUA== dependencies: - "@graphql-tools/utils" "6.2.2" + "@graphql-tools/utils" "^6.2.4" apollo-link "1.2.14" - apollo-upload-client "14.1.1" - cross-fetch "3.0.5" + apollo-upload-client "14.1.2" + cross-fetch "3.0.6" form-data "3.0.0" is-promise "4.0.0" tslib "~2.0.1" -"@graphql-tools/load-files@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/load-files/-/load-files-6.2.2.tgz#8c67e28b714d2f7cced28066ec97a9472c6950f2" - integrity sha512-fyE8X2vohEHbHntyDHXXJaQkflHWaK8OkaIlbmi1A9CVuXdvhDcEBaUrbC69Wu02vOYeNgmwPB22qyeh6a3FHw== +"@graphql-tools/load-files@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/load-files/-/load-files-6.2.4.tgz#17a6c10791d040da31458c8cfe70b187b13f169f" + integrity sha512-uQt8Bbd1WC8yewjChnvtxFdSw4reOM1B4MN17EzQr4Bw0nqp5LKXWfte0Y8ienS8MrGgjCUma1GWLKxvmRdTWQ== dependencies: fs-extra "9.0.1" globby "11.0.1" tslib "~2.0.1" unixify "1.0.0" -"@graphql-tools/load@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-6.2.2.tgz#54fb6f3594e3fb4774a1adb8d7129f788512c752" - integrity sha512-p5fvGSvtrIjL3rmQbdESnYH5zxqdKeQOIwoPnfvx6uDqqm3HaRBzS+k5V/PkhGsFRR5VFrqA8kPAbE87BYpkqw== +"@graphql-tools/load@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-6.2.4.tgz#a1a860bdc9d9e0bd93e1dffdbd2cf8839a521c41" + integrity sha512-FlQC50VELwRxoWUbJMMMs5gG0Dl8BaQYMrXUHTsxwqR7UmksUYnysC21rdousvs6jVZ7pf4unZfZFtBjz+8Edg== dependencies: - "@graphql-tools/merge" "6.2.2" - "@graphql-tools/utils" "6.2.2" + "@graphql-tools/merge" "^6.2.4" + "@graphql-tools/utils" "^6.2.4" globby "11.0.1" import-from "3.0.0" is-glob "4.0.1" @@ -1950,104 +1932,104 @@ unixify "1.0.0" valid-url "1.0.9" -"@graphql-tools/merge@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-6.2.2.tgz#49d8da0e706530ad484dee8ba7b91f8d80126030" - integrity sha512-2YyErSvq4hn5mjE6qJ/0Q8r3WU9JB3+obv2xyvb+oW+E/T1iYRJGxSFldi6lqO5IADZz8QASLJeSpRBw40gpBg== +"@graphql-tools/merge@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-6.2.4.tgz#5b3b68083d55a38a7f3caac6e0adc46f428c2a3b" + integrity sha512-hQbiSzCJgzUYG1Aspj5EAUY9DsbTI2OK30GLBOjUI16DWkoLVXLXy4ljQYJxq6wDc4fqixMOmvxwf8FoJ9okmw== dependencies: - "@graphql-tools/schema" "6.2.2" - "@graphql-tools/utils" "6.2.2" + "@graphql-tools/schema" "^6.2.4" + "@graphql-tools/utils" "^6.2.4" tslib "~2.0.1" -"@graphql-tools/mock@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/mock/-/mock-6.2.2.tgz#a3566684e8ff248fd6bc35ec3f5b8d09c2d91c53" - integrity sha512-+r4B+E6BfW464pKE/fOW1edctEJp4Pm2TZLScwMiJdMb8BH11LDj7ByxPg9i/y+QiMRZIoJWbsKdJuqVULtbkQ== +"@graphql-tools/mock@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/mock/-/mock-6.2.4.tgz#205323c51f89dd855d345d130c7713d0420909ea" + integrity sha512-O5Zvq/mcDZ7Ptky0IZ4EK9USmxV6FEVYq0Jxv2TI80kvxbCjt0tbEpZ+r1vIt1gZOXlAvadSHYyzWnUPh+1vkQ== dependencies: - "@graphql-tools/schema" "6.2.2" - "@graphql-tools/utils" "6.2.2" + "@graphql-tools/schema" "^6.2.4" + "@graphql-tools/utils" "^6.2.4" tslib "~2.0.1" -"@graphql-tools/module-loader@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/module-loader/-/module-loader-6.2.2.tgz#0e98dc2bbea06aa84f8ae1bf0b8791289fd2da22" - integrity sha512-qa+tM4GBBxJpXQ21+HRaO/yzTqRtsQcq+unCkFjsMpwiGM5MCGRBIV/KOJIhuDpyBssfdc3cQG0p8Uzdqidbag== +"@graphql-tools/module-loader@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/module-loader/-/module-loader-6.2.4.tgz#d5d4c3d0c398ba0d52319a7baa37bb38e3289574" + integrity sha512-xfdgAvuwvQxRpS27jWyHFlEvrdlrJ+EuCeTmX34eYwzmGTHdI/MBrpAfUgk9z3HEi/gSw3qwbzm2qpWZKZf5Ng== dependencies: - "@graphql-tools/utils" "6.2.2" + "@graphql-tools/utils" "^6.2.4" tslib "~2.0.1" -"@graphql-tools/relay-operation-optimizer@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.2.2.tgz#136ccca5ea33466391a9295c33408b27fe675fe6" - integrity sha512-4kU+X/IpTNtO1MS/rBxW1ybflFonZ1WeBV9gv4tqXGPpHywJsO3y085PwMumoNfBpF755UfEu6XjE43SPg0m1g== +"@graphql-tools/relay-operation-optimizer@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.2.4.tgz#1cba2ea7ebc30aa28d1e5461a6079aca173fabd0" + integrity sha512-lvBCrRupmVpKfwgOmwz7epm28Nwmk9McddG1htRiAPRCg5MB7/52bYP/QgklDQgkRXWsaDEBXfxKyoGkvLvu0w== dependencies: - "@graphql-tools/utils" "6.2.2" + "@graphql-tools/utils" "^6.2.4" relay-compiler "10.0.1" tslib "~2.0.1" -"@graphql-tools/resolvers-composition@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/resolvers-composition/-/resolvers-composition-6.2.2.tgz#d8b834769a314fa6825d2aa37fd8a5f9a67a837a" - integrity sha512-Ejrf/5eyg+QCQ5TZaBIttiBmwQ3RQD+eF1zcLN9aXF7S6nz90CEKzZjPHxvEfC2ZeMWDZhq81BPDk0mvUsqJuA== +"@graphql-tools/resolvers-composition@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/resolvers-composition/-/resolvers-composition-6.2.4.tgz#03dbb83c220b4d3a371b3c8290a3548c64c4eeb5" + integrity sha512-qcFHXZJykHvMymJKJnLBr9vxFhD/cefRjyVHhe5SxFxbY6h2CUVNcgSWfR74x59GWFj3bWsxCt6/JW1G0Ws+nQ== dependencies: - "@graphql-tools/utils" "6.2.2" + "@graphql-tools/utils" "^6.2.4" lodash "4.17.20" tslib "~2.0.1" -"@graphql-tools/schema@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-6.2.2.tgz#2dd7c6fbb4b6ccad239d0fefc3eb6d98a1bfcb01" - integrity sha512-KITlyr//1oKyxIOlGvNZDl4c6bLj2Gc+3eJXyUKWfSmgsmAZPudpQNa/8VbiVujpm7UaX0cyM3FdeCaxWFeBgg== +"@graphql-tools/schema@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-6.2.4.tgz#cc4e9f5cab0f4ec48500e666719d99fc5042481d" + integrity sha512-rh+14lSY1q8IPbEv2J9x8UBFJ5NrDX9W5asXEUlPp+7vraLp/Tiox4GXdgyA92JhwpYco3nTf5Bo2JDMt1KnAQ== dependencies: - "@graphql-tools/utils" "6.2.2" + "@graphql-tools/utils" "^6.2.4" tslib "~2.0.1" -"@graphql-tools/stitch@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/stitch/-/stitch-6.2.2.tgz#b3436d1146d53f1b05e903e0fccd19c1a24b216c" - integrity sha512-VysuOBik1ICqsgV3VGXysJfdUl4/ro95rsnREma9BJP3oNqriPd6v8JhrnZqP2LbfzF7G2xndRoSRAQgYOzsUQ== - dependencies: - "@graphql-tools/batch-delegate" "6.2.2" - "@graphql-tools/delegate" "6.2.2" - "@graphql-tools/merge" "6.2.2" - "@graphql-tools/schema" "6.2.2" - "@graphql-tools/utils" "6.2.2" - "@graphql-tools/wrap" "6.2.2" +"@graphql-tools/stitch@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/stitch/-/stitch-6.2.4.tgz#acfa6a577a33c0f02e4940ffff04753b23b87fd6" + integrity sha512-0C7PNkS7v7iAc001m7c1LPm5FUB0/DYw+s3OyCii6YYYHY8NwdI0roeOyeDGFJkFubWBQfjc3hoSyueKtU73mw== + dependencies: + "@graphql-tools/batch-delegate" "^6.2.4" + "@graphql-tools/delegate" "^6.2.4" + "@graphql-tools/merge" "^6.2.4" + "@graphql-tools/schema" "^6.2.4" + "@graphql-tools/utils" "^6.2.4" + "@graphql-tools/wrap" "^6.2.4" is-promise "4.0.0" tslib "~2.0.1" -"@graphql-tools/url-loader@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-6.2.2.tgz#cd5e83f31abea8d7de40c7e569e0242f7ece5c50" - integrity sha512-vNDjhf7SJr9RnIDPBBEyTfKBb3aWRA3uy3jDkqQ/AFyh4hXRkg8xnECH7c6glRnWiZJeObMTxowZSUnDA68IyA== +"@graphql-tools/url-loader@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-6.2.4.tgz#999c38b03ffea9220840211356a766fb7f527224" + integrity sha512-T14Ng02H2gzK5IRVNLKHM1ncQ2d+ou6+twGRNat3ETSP6arkS3jg0LPtJfu+8r6Op/4C3EXM6QbdaSNIkvatAQ== dependencies: - "@graphql-tools/delegate" "6.2.2" - "@graphql-tools/utils" "6.2.2" - "@graphql-tools/wrap" "6.2.2" + "@graphql-tools/delegate" "^6.2.4" + "@graphql-tools/utils" "^6.2.4" + "@graphql-tools/wrap" "^6.2.4" "@types/websocket" "1.0.1" - cross-fetch "3.0.5" + cross-fetch "3.0.6" subscriptions-transport-ws "0.9.18" tslib "~2.0.1" valid-url "1.0.9" websocket "1.0.32" -"@graphql-tools/utils@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-6.2.2.tgz#490236f539754ec59cd0490919b00ed9e0dba604" - integrity sha512-a0SSYF76dnKHs8te4Igfnrrq1VOO4sFG8yx3ehO7464eGUfUUYo2QmNRjhxny2HRMvqzX40xuQikyg6LBXDNLQ== +"@graphql-tools/utils@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-6.2.4.tgz#38a2314d2e5e229ad4f78cca44e1199e18d55856" + integrity sha512-ybgZ9EIJE3JMOtTrTd2VcIpTXtDrn2q6eiYkeYMKRVh3K41+LZa6YnR2zKERTXqTWqhobROwLt4BZbw2O3Aeeg== dependencies: "@ardatan/aggregate-error" "0.0.6" camel-case "4.1.1" tslib "~2.0.1" -"@graphql-tools/wrap@6.2.2": - version "6.2.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-6.2.2.tgz#034fb885ad0812a13db3db7eec37d9dd300c7145" - integrity sha512-FjCE+NvMwcCiAlt9EAw9uDi2zblE4Z5CEkY+z4NRO1AmCB5THoWJKG+csPh8tGuU80mAJI51Wy9FQGyUo/EU0g== +"@graphql-tools/wrap@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-6.2.4.tgz#2709817da6e469753735a9fe038c9e99736b2c57" + integrity sha512-cyQgpybolF9DjL2QNOvTS1WDCT/epgYoiA8/8b3nwv5xmMBQ6/6nYnZwityCZ7njb7MMyk7HBEDNNlP9qNJDcA== dependencies: - "@graphql-tools/delegate" "6.2.2" - "@graphql-tools/schema" "6.2.2" - "@graphql-tools/utils" "6.2.2" + "@graphql-tools/delegate" "^6.2.4" + "@graphql-tools/schema" "^6.2.4" + "@graphql-tools/utils" "^6.2.4" is-promise "4.0.0" tslib "~2.0.1" @@ -3135,33 +3117,33 @@ resolved "https://registry.yarnpkg.com/@prisma/ci-info/-/ci-info-2.1.2.tgz#3da64f54584bde0aaf4b42f298a6c63f025aeb3f" integrity sha512-RhAHY+wp6Nqu89Tp3zfUVkpGfqk4TfngeOWaMGgmhP7mB2ASDtOl8dkwxHmI8eN4edo+luyjPmbJBC4kST321A== -"@prisma/cli@2.7.1": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@prisma/cli/-/cli-2.7.1.tgz#98f2cb434bb931341e6c6292c7bab601e5f842f8" - integrity sha512-0uA+gWkNQ35DveVHDPltiTCTr4wcXtEhnPs463IEM+Xn8dTv9x0gtZiYHSuQM3t7uwlOxj1rurBsqSbiljynfQ== +"@prisma/cli@2.8.1": + version "2.8.1" + resolved "https://registry.yarnpkg.com/@prisma/cli/-/cli-2.8.1.tgz#fdfeb56857f2fb08ec9769537279745749effcf7" + integrity sha512-mEGJplClGnXI5ki4R0Xq8nq62zcyu7Wzdhybege+cFPZFUbFj0petaPZl/tqta9o5neDyvpU/lDgOwef6mwySg== -"@prisma/client@2.7.1": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@prisma/client/-/client-2.7.1.tgz#0a37ddff7fe80ae3a86dfa620c1141c8607be6c2" - integrity sha512-IEWDCuvIaQTira8/jAyf+uY+AuPPUFDIXMSN4zEA/gvoJv2woq7RmkaubS+NQVgDbbyOR6F3UcXLiFTYQDzZkQ== +"@prisma/client@2.8.1": + version "2.8.1" + resolved "https://registry.yarnpkg.com/@prisma/client/-/client-2.8.1.tgz#6fe87968eed42901cf76c623985222ebc318c292" + integrity sha512-apt6ioi2euOZA1O9mPA8AMRjPoPECsva76gMCcHCVgHvhkMNpFkcbn+UTkErJYrTgcRR7CPQt4D+fw8pkAHfjA== dependencies: pkg-up "^3.1.0" -"@prisma/debug@2.7.1": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-2.7.1.tgz#8ac51f9735fe07bc5e29ef247ff18625ccb96c4a" - integrity sha512-qF9xBjNWtf7yZBAKtHJB+Sp0kxdF/K5rUyVk9VoMNNgTrIFkaOcDY68DUlldxh+txjydUT4YacR5P4qXZocsqg== +"@prisma/debug@2.8.1": + version "2.8.1" + resolved "https://registry.yarnpkg.com/@prisma/debug/-/debug-2.8.1.tgz#ab6006fe8c669bfa3f806fab6949af13cdf0d8f9" + integrity sha512-MX7zIz0hP4JvL/WxBFTrpBsjb/pQSMBrJFiwCmpBzJeCI/CMpLnca7pEI9OHs/LVtoJBplhz05kLcrX2hMhN4w== dependencies: debug "^4.1.1" -"@prisma/engine-core@2.7.1": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@prisma/engine-core/-/engine-core-2.7.1.tgz#87dd6deba49508e3475bc668c3ede2060d782b31" - integrity sha512-vbNeKBl6Nl1KJuwCCwva8v4BXuv/jydA/Yl5Jnrf11KGM3BSCRavDGj4N1rxdxXpnp+L4Icb2OkxXYgdEWKPdA== +"@prisma/engine-core@2.8.1": + version "2.8.1" + resolved "https://registry.yarnpkg.com/@prisma/engine-core/-/engine-core-2.8.1.tgz#2384649aaed9ba7f9ebc314b20a1337b4421a051" + integrity sha512-aHE9DhJagYFzfIBuGt2GdNx0fL9IvekNDnjx97Ys6WiT/MskZf1RiLD2Sfarc7nBKx8BdSS1BHHGYm5sBOQzlg== dependencies: - "@prisma/debug" "2.7.1" - "@prisma/generator-helper" "2.7.1" - "@prisma/get-platform" "2.7.1" + "@prisma/debug" "2.8.1" + "@prisma/generator-helper" "2.8.1" + "@prisma/get-platform" "2.8.1" chalk "^4.0.0" cross-fetch "^3.0.4" execa "^4.0.2" @@ -3170,15 +3152,15 @@ new-github-issue-url "^0.2.1" p-retry "^4.2.0" terminal-link "^2.1.1" - undici "git://github.com/nodejs/undici.git#e76f6a37836537f08c2d9b7d8805d6ff21d1e744" + undici "2.0.5" -"@prisma/fetch-engine@2.7.1": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-2.7.1.tgz#855a32cdcb22e3c105b5f10e5490e25b7a96d02a" - integrity sha512-BmJW8RGQCMAtYSgmCOH3X4trdzzejum4yuutruDKJQDP67fPmd8Waq/SRlnDcjhDs+2ZI6lKMaj6qTCU9Qd+MQ== +"@prisma/fetch-engine@2.8.1": + version "2.8.1" + resolved "https://registry.yarnpkg.com/@prisma/fetch-engine/-/fetch-engine-2.8.1.tgz#4e424961edc9b6900c38bca88fabf038f8f08555" + integrity sha512-mJ3vj6dhs5Ez4rb6BpAKlEv2yiKjEmxF/hETGG6PG++v5GILnmironZHNpr5Z2+HDBdvQTjsxAZIE+6AwtAa0w== dependencies: - "@prisma/debug" "2.7.1" - "@prisma/get-platform" "2.7.1" + "@prisma/debug" "2.8.1" + "@prisma/get-platform" "2.8.1" chalk "^4.0.0" execa "^4.0.0" find-cache-dir "^3.3.1" @@ -3194,40 +3176,40 @@ progress "^2.0.3" rimraf "^3.0.2" temp-dir "^2.0.0" - tempy "^0.6.0" + tempy "^0.7.0" -"@prisma/generator-helper@2.7.1": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@prisma/generator-helper/-/generator-helper-2.7.1.tgz#31158537cb79777f42ec2b15e71943edd6c39924" - integrity sha512-gG2BRDefyIIXSx6uMFTof8Nd0jkZjPs6ExvTcra7xi36+oqkdgjOmq1vp6x3+VfC+EXzY1qReBZViuZZSFH4Cg== +"@prisma/generator-helper@2.8.1": + version "2.8.1" + resolved "https://registry.yarnpkg.com/@prisma/generator-helper/-/generator-helper-2.8.1.tgz#8858f2cd9ef23ec55d5bafe38532e05472f46e5c" + integrity sha512-f9rgTvrFpjSn3Ity2zPfFv5khiQZ7F+eBr4+pL0eFmm+ffJBAsdGUv1Xl4qEgSfMzQEOmVnVUgtCMcUQgwNfXg== dependencies: - "@prisma/debug" "2.7.1" + "@prisma/debug" "2.8.1" "@types/cross-spawn" "^6.0.1" chalk "^4.0.0" cross-spawn "^7.0.2" -"@prisma/get-platform@2.7.1": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-2.7.1.tgz#3da81ad3ea96c7ff8bed7cb3a4058c1f919dd123" - integrity sha512-2G/dbvIUC8rC4pKR+MX9jdcqnTbdSvYvhTLhc99y5Z2pI2dV+/vb3dWSXHWqmLWsmY482n9X+HngxQGnX4V4bQ== +"@prisma/get-platform@2.8.1": + version "2.8.1" + resolved "https://registry.yarnpkg.com/@prisma/get-platform/-/get-platform-2.8.1.tgz#bcb78b8fae0a4a7190565c3da1fd372e585c64fb" + integrity sha512-CW7S7nM03Po+N6w8g6AcR8k/u4CLFaecL2Hm7k12j/Ns1F2lX0F1mRKxoTccg0b11t3lM/vjakia4L5ogDS8KA== dependencies: - "@prisma/debug" "2.7.1" + "@prisma/debug" "2.8.1" -"@prisma/sdk@2.7.1": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@prisma/sdk/-/sdk-2.7.1.tgz#cb3f33ef74e335dc0741dcc0b89fbb4c8c8508e0" - integrity sha512-vXPxcoxVuxXkNcMOx9+Bx89uiTfTDSJ/dOiNjWKV3Y7NaQj5kphik7wdt76QQees7Zu3cG6MwHRY7Awbkc6ZLw== - dependencies: - "@prisma/debug" "2.7.1" - "@prisma/engine-core" "2.7.1" - "@prisma/fetch-engine" "2.7.1" - "@prisma/generator-helper" "2.7.1" - "@prisma/get-platform" "2.7.1" +"@prisma/sdk@2.8.1": + version "2.8.1" + resolved "https://registry.yarnpkg.com/@prisma/sdk/-/sdk-2.8.1.tgz#7edb228b98906afc42a267a6b38cf5dc8e8ec753" + integrity sha512-xoeuWnP8+jke4VfIfU0zv92ACKJ85CmXLUnkWmRdYS0GndRWDpe/mRkA+RNBpDFA62R9lYVW1sPT3KaUGokEUA== + dependencies: + "@prisma/debug" "2.8.1" + "@prisma/engine-core" "2.8.1" + "@prisma/fetch-engine" "2.8.1" + "@prisma/generator-helper" "2.8.1" + "@prisma/get-platform" "2.8.1" "@timsuchanek/copy" "^1.4.5" archiver "^4.0.0" arg "^4.1.3" chalk "4.1.0" - checkpoint-client "1.1.11" + checkpoint-client "1.1.12" cli-truncate "^2.1.0" dotenv "^8.2.0" execa "^4.0.0" @@ -3246,7 +3228,7 @@ tar "^6.0.1" temp-dir "^2.0.0" temp-write "^4.0.0" - tempy "^0.6.0" + tempy "^0.7.0" terminal-link "^2.1.1" tmp "0.2.1" url-parse "^1.4.7" @@ -3829,10 +3811,10 @@ "@babel/runtime" "^7.11.2" "@testing-library/dom" "^7.23.0" -"@testing-library/user-event@12.1.4", "@testing-library/user-event@^12.0.11": - version "12.1.4" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-12.1.4.tgz#a1f257dd2ec5fc19ca5d96ef2d096f6f5888e67a" - integrity sha512-vd5s43lNfyq/JEr8ndQmS+An6dEVUmjW9zqtpmMHU+rrPMaHLrUIlWZ9wDE8ALS/dFMsu6U00A5X/7Dv/2tWnw== +"@testing-library/user-event@12.1.6", "@testing-library/user-event@^12.0.11": + version "12.1.6" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-12.1.6.tgz#f550b138dfdc20387b89cbe3e9f3d969ab10c2bd" + integrity sha512-BdSe6cmzDEapTBH3s1NKbzu+GyX5bJKraKwVpM2vZF1+EEWxZr0EiA0z9bA5Nux8P+6nKMOZKsXQrj5q/kicfQ== dependencies: "@babel/runtime" "^7.10.2" @@ -3909,9 +3891,9 @@ "@types/babel-types" "*" "@types/babel-plugin-tester@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@types/babel-plugin-tester/-/babel-plugin-tester-9.0.0.tgz#dcb6fa137a71ade0b8431696fed5193a72e2441e" - integrity sha512-+YTsSQgllJTOrvWT+DR34GQbLs/oKMODZV2WbypdoZTrZlr/+jkv4HK+E69ljoThECXErzQeItCNE/tZDOoZRA== + version "9.0.1" + resolved "https://registry.yarnpkg.com/@types/babel-plugin-tester/-/babel-plugin-tester-9.0.1.tgz#5f1dc3b9da821b119f74544cda308d1e040c4cba" + integrity sha512-RGZzADCDXd9MIxQzOM2I6guMFRtZw+XwVx+vmPliPAvGeh228ZYA3hoTEF9u3jNR2Nf/gyb55HI3D9pMl3m1LA== dependencies: "@types/babel__core" "*" "@types/prettier" "*" @@ -4978,7 +4960,7 @@ ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -ansi-escapes@^4.2.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== @@ -5222,13 +5204,13 @@ apollo-tracing@^0.11.2: apollo-server-env "^2.4.5" apollo-server-plugin-base "^0.9.1" -apollo-upload-client@14.1.1: - version "14.1.1" - resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-14.1.1.tgz#2b21bb3424293a56ad9c4b9678395f5898f9b9be" - integrity sha512-6H6AW5habDHH/9XCJ8l2qlkaohwIcO+Lt/8P2908/yx0TC0oaiDNVu+0v2YE/5gA6NP0RvztUodzJUZJz27C0g== +apollo-upload-client@14.1.2: + version "14.1.2" + resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-14.1.2.tgz#7a72b000f1cd67eaf8f12b4bda2796d0898c0dae" + integrity sha512-ozaW+4tnVz1rpfwiQwG3RCdCcZ93RV/37ZQbRnObcQ9mjb+zur58sGDPVg9Ef3fiujLmiE/Fe9kdgvIMA3VOjA== dependencies: - "@apollo/client" "^3.0.2" - "@babel/runtime" "^7.10.5" + "@apollo/client" "^3.1.5" + "@babel/runtime" "^7.11.2" extract-files "^9.0.0" apollo-upload-client@^13.0.0: @@ -6782,10 +6764,10 @@ check-types@^8.0.3: resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== -checkpoint-client@1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/checkpoint-client/-/checkpoint-client-1.1.11.tgz#992818640b9ef12d66304bf973d993760b1e6926" - integrity sha512-p+eDmbuKlP6oHgknetUoqWTHnQsWfSbDlaMlKgwNh8RiEdLQVZ5z1rcU4+0iBynZe2z8sJHHSdWo9VQTmGWRLw== +checkpoint-client@1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/checkpoint-client/-/checkpoint-client-1.1.12.tgz#406fb898a95c2911235aa3e3bf4564de66cb6d8d" + integrity sha512-YbQMJe28YfLWBst/YvQhrh12afZGy67J7Uo/q9U0OfrFXZq3D8OyDPgjZkc+zRRK3wppC28SiCQ0fbgalsmCqA== dependencies: "@prisma/ci-info" "2.1.2" cross-spawn "7.0.3" @@ -6793,8 +6775,8 @@ checkpoint-client@1.1.11: fast-write-atomic "0.2.1" make-dir "3.1.0" ms "2.1.2" - node-fetch "2.6.0" - uuid "8.1.0" + node-fetch "2.6.1" + uuid "8.3.0" chokidar@^2.0.4, chokidar@^2.1.8: version "2.1.8" @@ -6815,7 +6797,7 @@ chokidar@^2.0.4, chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.2.2, chokidar@^3.4.0, chokidar@^3.4.1: +chokidar@^3.2.2, chokidar@^3.4.0, chokidar@^3.4.1, chokidar@^3.4.2: version "3.4.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== @@ -7410,9 +7392,9 @@ copy-to-clipboard@^3.0.8: toggle-selection "^1.0.6" copy-webpack-plugin@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.1.0.tgz#5bde7f826d87e716d8d5e761ddd34bb675448458" - integrity sha512-aWjIuLt1OVQxaDVffnt3bnGmLA8zGgAJaFwPA+a+QYVPh1vhIKjVfh3SbOFLV0kRPvGBITbw17n5CsmiBS4LQQ== + version "6.1.1" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.1.1.tgz#737a3ba21c16cc6ddca972f5cf8de25568ca0616" + integrity sha512-4TlkHFYkrZ3WppLA5XkPmBLI5lnEpFsXvpeqxCf5PzkratZiVklNXsvoQkLhUU43q7ZL3AOXtaHAd9jLNJoU0w== dependencies: cacache "^15.0.5" fast-glob "^3.2.4" @@ -7423,7 +7405,7 @@ copy-webpack-plugin@^6.1.0: normalize-path "^3.0.0" p-limit "^3.0.2" schema-utils "^2.7.1" - serialize-javascript "^4.0.0" + serialize-javascript "^5.0.1" webpack-sources "^1.4.3" core-js-compat@^3.6.2: @@ -7552,7 +7534,14 @@ cross-env@^7.0.2: dependencies: cross-spawn "^7.0.1" -cross-fetch@3.0.5, cross-fetch@^3.0.4: +cross-fetch@3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.6.tgz#3a4040bc8941e653e0e9cf17f29ebcd177d3365c" + integrity sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ== + dependencies: + node-fetch "2.6.1" + +cross-fetch@^3.0.4: version "3.0.5" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.5.tgz#2739d2981892e7ab488a7ad03b92df2816e03f4c" integrity sha512-FFLcLtraisj5eteosnX1gf01qYDCOc4fDy0+euOt8Kn9YBY2NtXL/pCoYPavw24NIQkQqm5ZOLsGD5Zzj0gyew== @@ -7621,9 +7610,9 @@ css-loader@^3.0.0: semver "^6.3.0" css-loader@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.2.2.tgz#b668b3488d566dc22ebcf9425c5f254a05808c89" - integrity sha512-omVGsTkZPVwVRpckeUnLshPp12KsmMSLqYxs12+RzM9jRR5Y+Idn/tBffjXRvOE+qW7if24cuceFJqYR5FmGBg== + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e" + integrity sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg== dependencies: camelcase "^6.0.0" cssesc "^3.0.0" @@ -7635,7 +7624,7 @@ css-loader@^4.2.2: postcss-modules-scope "^2.2.0" postcss-modules-values "^3.0.0" postcss-value-parser "^4.1.0" - schema-utils "^2.7.0" + schema-utils "^2.7.1" semver "^7.3.2" css-select-base-adapter@^0.1.1: @@ -8064,6 +8053,20 @@ del@^4.1.1: pify "^4.0.1" rimraf "^2.6.3" +del@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" + integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -8819,9 +8822,9 @@ eslint-plugin-import@^2.22.0: tsconfig-paths "^3.9.0" eslint-plugin-jest-dom@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-3.2.2.tgz#d343b820093e382002177445e53a9a3868c0980e" - integrity sha512-e92SJEC/KPbQyMd9on0CbwDQxCHjiBVVe8dwzDqp0tjvVQWB9FXGTq9EZcFhJdsLPuXdZOWkU9DIcDT5DUTCXw== + version "3.2.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-3.2.3.tgz#2ee4ef409484b9d175f169e5fc12caf8be854b4e" + integrity sha512-3eEne+h1JsTV4ExZ022xJALKKgWwjYTakRzXZ575CzB6kOZ3No5cvW9XVdF0CfgHt+4ZaMq2AFgm2BiA3sHmRg== dependencies: "@babel/runtime" "^7.9.6" requireindex "^1.2.0" @@ -9546,31 +9549,31 @@ findup-sync@^4.0.0: resolve-dir "^1.0.1" firebase-admin@^9.1.1: - version "9.1.1" - resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-9.1.1.tgz#153aff515140a41d92ebc51231c12c7b2f4c3e69" - integrity sha512-HkzY9yN/kOe1EQgjheURAQ4pFBerI54TBL0+nj1fwzKnAnGCpcI73Bbwx99Pk3u2x4rj6bDcsZfz9bA8y7DWtQ== + version "9.2.0" + resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-9.2.0.tgz#df5176e2d0c5711df6dbf7012320492a703538ea" + integrity sha512-LhnMYl71B4gP1FlTLfwaYlOWhBCAcNF+byb2CPTfaW/T4hkp4qlXOgo2bws/zbAv5X9GTFqGir3KexMslVGsIA== dependencies: "@firebase/database" "^0.6.10" "@firebase/database-types" "^0.5.2" "@types/node" "^10.10.0" dicer "^0.3.0" jsonwebtoken "^8.5.1" - node-forge "^0.9.1" + node-forge "^0.10.0" optionalDependencies: "@google-cloud/firestore" "^4.0.0" - "@google-cloud/storage" "^5.0.0" + "@google-cloud/storage" "^5.3.0" firebase@^7.14.5: - version "7.20.0" - resolved "https://registry.yarnpkg.com/firebase/-/firebase-7.20.0.tgz#ac1557a0962070d19d61d150c69421a5503710ec" - integrity sha512-ijgiUPB93UGWw2P2kgUQgghu5WOn/WR2J8C/V6ZSeI1PQqiEwsfn0kvw4iMJeqLQpA/FVeZz/+p0ubE5kzqhBA== + version "7.21.1" + resolved "https://registry.yarnpkg.com/firebase/-/firebase-7.21.1.tgz#45c92d6c53136a07d637e9da227726460e86e746" + integrity sha512-ogqWUXIP2/1BTee112QJiAjgch/Ig7pzlAw2mfWOhl9E0IUX46OKv0hypLX62MBgaAKwPHfICIwsWOCxlQ9dZQ== dependencies: "@firebase/analytics" "0.5.0" "@firebase/app" "0.6.11" "@firebase/app-types" "0.6.1" "@firebase/auth" "0.14.9" - "@firebase/database" "0.6.12" - "@firebase/firestore" "1.16.7" + "@firebase/database" "0.6.13" + "@firebase/firestore" "1.17.1" "@firebase/functions" "0.4.51" "@firebase/installations" "0.4.17" "@firebase/messaging" "0.7.1" @@ -10319,33 +10322,33 @@ graphql-tools@5.0.0: tslib "^1.11.1" uuid "^7.0.3" -graphql-tools@6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-6.2.2.tgz#7cfd6ee6ec66d6ee3847c31129a02cf2bd162eff" - integrity sha512-bCAKS/VnlhUCC/dLIl2U1LuUaujCts66lPP8KP6QhHsQSLQd8xeCQcqGsPk7M1yYkbSODlrCAhQQOvKN2hVaHg== - dependencies: - "@graphql-tools/batch-delegate" "6.2.2" - "@graphql-tools/code-file-loader" "6.2.2" - "@graphql-tools/delegate" "6.2.2" - "@graphql-tools/git-loader" "6.2.2" - "@graphql-tools/github-loader" "6.2.2" - "@graphql-tools/graphql-file-loader" "6.2.2" - "@graphql-tools/graphql-tag-pluck" "6.2.2" - "@graphql-tools/import" "6.2.2" - "@graphql-tools/json-file-loader" "6.2.2" - "@graphql-tools/links" "6.2.2" - "@graphql-tools/load" "6.2.2" - "@graphql-tools/load-files" "6.2.2" - "@graphql-tools/merge" "6.2.2" - "@graphql-tools/mock" "6.2.2" - "@graphql-tools/module-loader" "6.2.2" - "@graphql-tools/relay-operation-optimizer" "6.2.2" - "@graphql-tools/resolvers-composition" "6.2.2" - "@graphql-tools/schema" "6.2.2" - "@graphql-tools/stitch" "6.2.2" - "@graphql-tools/url-loader" "6.2.2" - "@graphql-tools/utils" "6.2.2" - "@graphql-tools/wrap" "6.2.2" +graphql-tools@6.2.4: + version "6.2.4" + resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-6.2.4.tgz#e4573ab65ea53a1e64dbe1fd4ccb483b59946fd2" + integrity sha512-yA5E6QRz6IRZ3TrxGkh+xIGeinISZVzb3Mc0Z/3q3gu1MgqnB/3y7Iv3tXuL1DNvoNcJV5WiAU8KYMsvNSF1gQ== + dependencies: + "@graphql-tools/batch-delegate" "^6.2.4" + "@graphql-tools/code-file-loader" "^6.2.4" + "@graphql-tools/delegate" "^6.2.4" + "@graphql-tools/git-loader" "^6.2.4" + "@graphql-tools/github-loader" "^6.2.4" + "@graphql-tools/graphql-file-loader" "^6.2.4" + "@graphql-tools/graphql-tag-pluck" "^6.2.4" + "@graphql-tools/import" "^6.2.4" + "@graphql-tools/json-file-loader" "^6.2.4" + "@graphql-tools/links" "^6.2.4" + "@graphql-tools/load" "^6.2.4" + "@graphql-tools/load-files" "^6.2.4" + "@graphql-tools/merge" "^6.2.4" + "@graphql-tools/mock" "^6.2.4" + "@graphql-tools/module-loader" "^6.2.4" + "@graphql-tools/relay-operation-optimizer" "^6.2.4" + "@graphql-tools/resolvers-composition" "^6.2.4" + "@graphql-tools/schema" "^6.2.4" + "@graphql-tools/stitch" "^6.2.4" + "@graphql-tools/url-loader" "^6.2.4" + "@graphql-tools/utils" "^6.2.4" + "@graphql-tools/wrap" "^6.2.4" tslib "~2.0.1" graphql-tools@^4.0.0: @@ -10654,9 +10657,9 @@ html-minifier-terser@^5.0.1: terser "^4.6.3" html-webpack-plugin@^4.0.0-beta.2, html-webpack-plugin@^4.0.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.4.1.tgz#61ab85aa1a84ba181443345ebaead51abbb84149" - integrity sha512-nEtdEIsIGXdXGG7MjTTZlmhqhpHU9pJFc1OYxcP36c5/ZKP6b0BJMww2QTvJGQYA9aMxUnjDujpZdYcVOXiBCQ== + version "4.5.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz#625097650886b97ea5dae331c320e3238f6c121c" + integrity sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw== dependencies: "@types/html-minifier-terser" "^5.0.0" "@types/tapable" "^1.0.5" @@ -11445,7 +11448,7 @@ is-observable@^1.1.0: dependencies: symbol-observable "^1.1.0" -is-path-cwd@^2.0.0: +is-path-cwd@^2.0.0, is-path-cwd@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== @@ -11464,7 +11467,7 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-path-inside@^3.0.1: +is-path-inside@^3.0.1, is-path-inside@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== @@ -12075,6 +12078,19 @@ jest-validate@^26.4.2: leven "^3.1.0" pretty-format "^26.4.2" +jest-watch-typeahead@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.6.1.tgz#45221b86bb6710b7e97baaa1640ae24a07785e63" + integrity sha512-ITVnHhj3Jd/QkqQcTqZfRgjfyRhDFM/auzgVo2RKvSwi18YMvh0WvXDJFoFED6c7jd/5jxtu4kSOb9PTu2cPVg== + dependencies: + ansi-escapes "^4.3.1" + chalk "^4.0.0" + jest-regex-util "^26.0.0" + jest-watcher "^26.3.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + jest-watcher@^26.3.0: version "26.3.0" resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.3.0.tgz#f8ef3068ddb8af160ef868400318dc4a898eed08" @@ -12105,7 +12121,7 @@ jest-worker@^26.3.0: merge-stream "^2.0.0" supports-color "^7.0.0" -jest@^26.1.0: +jest@^26.1.0, jest@^26.4.2: version "26.4.2" resolved "https://registry.yarnpkg.com/jest/-/jest-26.4.2.tgz#7e8bfb348ec33f5459adeaffc1a25d5752d9d312" integrity sha512-LLCjPrUh98Ik8CzW8LLVnSCfLaiY+wbK53U7VxnFSX7Q+kWC4noVeDvGWIFw0Amfq1lq2VfGm7YHWSLBV62MJw== @@ -13577,22 +13593,23 @@ ms@2.1.2, ms@^2.0.0, ms@^2.1.1, ms@^2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -msw@0.20.5, msw@^0.20.0: - version "0.20.5" - resolved "https://registry.yarnpkg.com/msw/-/msw-0.20.5.tgz#b6141080c0d8b17c451d9ca36c28cc47b4ac487a" - integrity sha512-hmEsey5BbVicMGt7aOh/GZ9ltga5N3tK6NiJXnbfCkAGKgnAVnjASr3i7Z+sWlZyY5uuMUFyLCEcqrlXxC6qIA== +msw@0.21.2, msw@^0.21.2: + version "0.21.2" + resolved "https://registry.yarnpkg.com/msw/-/msw-0.21.2.tgz#74ed10b8eb224325652a3c3812b5460dac297bd8" + integrity sha512-XOJehxtJThNFdMJdVjxDAbZ8KuC3UltOlO5nQDks0Q1yzSUqqKcVUjbKrH7T+K2hckBr0KEY2fwJHv21R4BV2A== dependencies: "@open-draft/until" "^1.0.3" "@types/cookie" "^0.4.0" chalk "^4.1.0" + chokidar "^3.4.2" cookie "^0.4.1" graphql "^15.3.0" headers-utils "^1.2.0" - node-fetch "^2.6.0" + node-fetch "^2.6.1" node-match-path "^0.4.4" - node-request-interceptor "^0.3.5" + node-request-interceptor "^0.5.1" statuses "^2.0.0" - yargs "^15.4.1" + yargs "^16.0.3" multicast-dns-service-types@^1.1.0: version "1.1.0" @@ -13758,7 +13775,7 @@ node-fetch@2.6.0: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== -node-fetch@2.6.1, node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.5.0, node-fetch@^2.6.0: +node-fetch@2.6.1, node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.5.0, node-fetch@^2.6.0, node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== @@ -13776,7 +13793,12 @@ node-forge@0.9.0: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== -node-forge@^0.9.0, node-forge@^0.9.1: +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-forge@^0.9.0: version "0.9.1" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.1.tgz#775368e6846558ab6676858a4d8c6e8d16c677b5" integrity sha512-G6RlQt5Sb4GMBzXvhfkeFmbqR6MzhtnT7VTHuLadjkii3rdYHNdw0m8zA4BTxVIh68FicCQ2NSUANpsqkr9jvQ== @@ -13864,10 +13886,10 @@ node-releases@^1.1.29, node-releases@^1.1.60: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== -node-request-interceptor@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/node-request-interceptor/-/node-request-interceptor-0.3.6.tgz#c411065a424b17a17503ecfce11a6a2a2f5d9a87" - integrity sha512-pN8Tt43XuLamN+bspAZ9tEMGDp1bOfaxluYop1/qmNRQmM5BOelFqr4jRvARD6y/7iuhLjOEjMQgy5HweXN7Kg== +node-request-interceptor@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/node-request-interceptor/-/node-request-interceptor-0.5.1.tgz#b4757a033bde4412d9ffc4503804abb28ed962d2" + integrity sha512-ex5mlI5nGokxocomS2Rj2r1aspmt7qZoI8OvKLt24ylp1bYCzGQ+0XD911guCNDb/kKLMIGC67HHyeFrJCz7jA== dependencies: "@open-draft/until" "^1.0.3" debug "^4.1.1" @@ -14985,9 +15007,9 @@ prettier@^1.19.1: integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== prettier@^2.0.1, prettier@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.1.tgz#d9485dd5e499daa6cb547023b87a6cf51bee37d6" - integrity sha512-9bY+5ZWCfqj3ghYBLxApy2zf6m+NJo5GzmLTpr9FsApsfjriNnS2dahWReHMi7qNPhhHl9SYHJs2cHZLgexNIw== + version "2.1.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5" + integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg== pretty-error@^2.1.1: version "2.1.1" @@ -15509,9 +15531,9 @@ react-helmet-async@^1.0.2: shallowequal "^1.1.0" react-hook-form@^6.5.3: - version "6.8.3" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-6.8.3.tgz#208f46b96ced2859e2a3465eef8125751e99e4ee" - integrity sha512-IsYcATD4fodv9BiwWBwiBHE50+IyvhpPTi+jIab4fQZLbDPJnN7YXnJ+/2oMXDJ94n+PnUs4wklr9pg8TNdOrQ== + version "6.8.6" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-6.8.6.tgz#c82b38b01e0a77689214c3ceb873eab9405d27a0" + integrity sha512-ZCp7Y+IrlsQma08uy3H6l/qF7dZWqAWMkZ4vVbHVfh1EHjsO1SwU7aYVHgJSQpriHtEdGszCW8NS/aujGsLk0g== react-hotkeys@2.0.0: version "2.0.0" @@ -16370,6 +16392,13 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + serve-favicon@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.5.0.tgz#935d240cdfe0f5805307fdfe967d88942a2cbcf0" @@ -17472,11 +17501,12 @@ temp-write@^4.0.0: temp-dir "^1.0.0" uuid "^3.3.2" -tempy@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" - integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== +tempy@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.7.1.tgz#5a654e6dbd1747cdd561efb112350b55cd9c1d46" + integrity sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg== dependencies: + del "^6.0.0" is-stream "^2.0.0" temp-dir "^2.0.0" type-fest "^0.16.0" @@ -17987,9 +18017,10 @@ undefsafe@^2.0.2: dependencies: debug "^2.2.0" -"undici@git://github.com/nodejs/undici.git#e76f6a37836537f08c2d9b7d8805d6ff21d1e744": - version "1.3.1" - resolved "git://github.com/nodejs/undici.git#e76f6a37836537f08c2d9b7d8805d6ff21d1e744" +undici@2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/undici/-/undici-2.0.5.tgz#b604e203184002d2ecf6524581ac994346700a09" + integrity sha512-KluDT7X78oGS+/3bxwGE06e/4x4wbuK7TNmTMLPJNmEOkzrLGBMwAnWMxm3PukR9BnB7k20IzOpGjl90AltwFQ== unfetch@^4.1.0: version "4.1.0" @@ -18258,10 +18289,10 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.1.0.tgz#6f1536eb43249f473abc6bd58ff983da1ca30d8d" - integrity sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg== +uuid@8.3.0, uuid@^8.0.0, uuid@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" + integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2, uuid@^3.4.0: version "3.4.0" @@ -18273,11 +18304,6 @@ uuid@^7.0.3: resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== -uuid@^8.0.0, uuid@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" - integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== - v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" @@ -19067,7 +19093,7 @@ yargs@^14.2.2: y18n "^4.0.0" yargs-parser "^15.0.1" -yargs@^15.3.1, yargs@^15.4.1: +yargs@^15.3.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==