diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 000000000..7d66fc904 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,21 @@ +module.exports = { + presets: [ + [ + require.resolve('@babel/preset-env'), + { + modules: 'cjs', + targets: [ + 'defaults', + 'not IE 11', + 'not IE_Mob 11', + ], + }, + ], + require.resolve('@babel/preset-react'), + ], + plugins: [ + require.resolve('@babel/plugin-proposal-class-properties'), + require.resolve('@babel/plugin-proposal-optional-chaining'), + require.resolve('babel-plugin-add-module-exports'), + ], +}; diff --git a/demo/payload.config.js b/demo/payload.config.js index d22da1d3d..8e4eba04a 100644 --- a/demo/payload.config.js +++ b/demo/payload.config.js @@ -36,11 +36,9 @@ module.exports = { }, disable: false, components: { - layout: { - // Sidebar: () => ( - //
Hello
- // ), - }, + // nav: () => ( + //
Hello
+ // ), }, }, email: { diff --git a/demo/server.js b/demo/server.js index f98d77cf6..13ff99eda 100644 --- a/demo/server.js +++ b/demo/server.js @@ -38,12 +38,13 @@ expressApp.use('/external-route', externalRouter); exports.start = (cb) => { const server = expressApp.listen(3000, async () => { logger.info(`listening on ${3000}...`); - if (cb) cb(); const creds = await payload.getMockEmailCredentials(); logger.info(`Mock email account username: ${creds.user}`); logger.info(`Mock email account password: ${creds.pass}`); logger.info(`Log in to mock email provider at ${creds.web}`); + + if (cb) cb(); }); return server; diff --git a/jest.config.js b/jest.config.js index b3d0efc35..953725801 100644 --- a/jest.config.js +++ b/jest.config.js @@ -4,4 +4,8 @@ module.exports = { globalSetup: '/src/tests/globalSetup.js', globalTeardown: '/src/tests/globalTeardown.js', testTimeout: 15000, + moduleNameMapper: { + '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '/src/mocks/fileMock.js', + '\\.(css|scss)$': '/src/mocks/emptyModule.js', + }, }; diff --git a/package.json b/package.json index ad86ceb14..a010d22b3 100644 --- a/package.json +++ b/package.json @@ -33,9 +33,9 @@ "@udecode/slate-plugins": "^0.64.3", "async-some": "^1.0.2", "autoprefixer": "^9.7.4", - "babel-loader": "^8.0.6", + "babel-jest": "^26.3.0", + "babel-loader": "^8.1.0", "babel-plugin-add-module-exports": "^1.0.4", - "babel-plugin-module-resolver": "^4.0.0", "body-parser": "^1.19.0", "compression": "^1.7.4", "connect-history-api-fallback": "^1.6.0", @@ -99,7 +99,6 @@ "react-document-meta": "^3.0.0-beta.2", "react-dom": "^16.13.1", "react-helmet": "^6.1.0", - "react-hook-form": "^5.7.2", "react-router-dom": "^5.1.2", "react-router-navigation-prompt": "^1.8.11", "react-select": "^3.0.8", diff --git a/src/auth/auth.spec.js b/src/auth/auth.spec.js index 362273ad8..23f28448d 100644 --- a/src/auth/auth.spec.js +++ b/src/auth/auth.spec.js @@ -6,9 +6,9 @@ const { email, password } = require('../tests/credentials'); * @jest-environment node */ -const config = require('../../demo/payload.config'); +const getConfig = require('../utilities/getConfig'); -const url = config.serverURL; +const { serverURL: url } = getConfig(); let token = null; diff --git a/src/bin/build.js b/src/bin/build.js index c850e5701..bdf6157d9 100755 --- a/src/bin/build.js +++ b/src/bin/build.js @@ -4,13 +4,14 @@ const webpack = require('webpack'); const getWebpackProdConfig = require('../webpack/getWebpackProdConfig'); const findConfig = require('../utilities/findConfig'); +const getConfig = require('../utilities/getConfig'); const sanitizeConfig = require('../utilities/sanitizeConfig'); -module.exports = () => { - const configPath = findConfig(); +const configPath = findConfig(); +module.exports = () => { try { - const unsanitizedConfig = require(configPath); + const unsanitizedConfig = getConfig(); const config = sanitizeConfig(unsanitizedConfig); const webpackProdConfig = getWebpackProdConfig({ diff --git a/src/client/components/elements/Nav/index.js b/src/client/components/elements/Nav/index.js index a8662d665..6f1cf726f 100644 --- a/src/client/components/elements/Nav/index.js +++ b/src/client/components/elements/Nav/index.js @@ -2,6 +2,7 @@ import React, { useState, useEffect } from 'react'; import { NavLink, Link, useHistory } from 'react-router-dom'; import { useConfig } from '../../providers/Config'; import { useAuthentication } from '../../providers/Authentication'; +import RenderCustomComponent from '../../utilities/RenderCustomComponent'; import Chevron from '../../icons/Chevron'; import LogOut from '../../icons/LogOut'; import Menu from '../../icons/Menu'; @@ -14,7 +15,7 @@ import './index.scss'; const baseClass = 'nav'; -const Nav = () => { +const DefaultNav = () => { const { permissions } = useAuthentication(); const [menuActive, setMenuActive] = useState(false); const history = useHistory(); @@ -126,4 +127,21 @@ const Nav = () => { ); }; +const Nav = () => { + const { + admin: { + components: { + nav: CustomNav, + } = {} + } = {}, + } = useConfig(); + + return ( + + ); +} + export default Nav; diff --git a/src/client/components/forms/field-types/Relationship/index.js b/src/client/components/forms/field-types/Relationship/index.js index 8f35f4739..2c33bfdd8 100644 --- a/src/client/components/forms/field-types/Relationship/index.js +++ b/src/client/components/forms/field-types/Relationship/index.js @@ -422,7 +422,7 @@ const RelationshipFieldType = (props) => { relationTo, validate, path, name, required, } = props; - const config = useConfig; + const config = useConfig(); const hasMultipleRelations = Array.isArray(relationTo); diff --git a/src/collections/graphql/resolvers/resolvers.spec.js b/src/collections/graphql/resolvers/resolvers.spec.js index 7692edd51..45298e962 100644 --- a/src/collections/graphql/resolvers/resolvers.spec.js +++ b/src/collections/graphql/resolvers/resolvers.spec.js @@ -4,10 +4,11 @@ // eslint-disable-next-line no-unused-vars const fetch = require('isomorphic-fetch'); const { request, GraphQLClient } = require('graphql-request'); -const faker = require('faker'); -const config = require('../../../../demo/payload.config'); +const getConfig = require('../../../utilities/getConfig'); const { email, password } = require('../../../tests/credentials'); +const config = getConfig(); + const url = `${config.serverURL}${config.routes.api}${config.routes.graphQL}`; let client = null; diff --git a/src/collections/requestHandlers/collections.spec.js b/src/collections/requestHandlers/collections.spec.js index 9acb36008..564553926 100644 --- a/src/collections/requestHandlers/collections.spec.js +++ b/src/collections/requestHandlers/collections.spec.js @@ -7,11 +7,11 @@ const path = require('path'); require('isomorphic-fetch'); const faker = require('faker'); const FormData = require('form-data'); -const config = require('../../../demo/payload.config'); +const getConfig = require('../../utilities/getConfig'); const { email, password } = require('../../tests/credentials'); const fileExists = require('../../tests/utils/fileExists'); -const url = config.serverURL; +const { serverURL: url } = getConfig(); let token = null; diff --git a/src/globals/requestHandlers/globals.rest.spec.js b/src/globals/requestHandlers/globals.spec.js similarity index 97% rename from src/globals/requestHandlers/globals.rest.spec.js rename to src/globals/requestHandlers/globals.spec.js index f14c27c16..eea5cc184 100644 --- a/src/globals/requestHandlers/globals.rest.spec.js +++ b/src/globals/requestHandlers/globals.spec.js @@ -3,10 +3,10 @@ */ require('isomorphic-fetch'); -const config = require('../../../demo/payload.config'); +const getConfig = require('../../utilities/getConfig'); const { email, password } = require('../../tests/credentials'); -const url = config.serverURL; +const { serverURL: url } = getConfig(); let token = null; diff --git a/src/index.js b/src/index.js index e0b7a8e8f..86450a9bf 100644 --- a/src/index.js +++ b/src/index.js @@ -29,9 +29,24 @@ const localGlobalOperations = require('./globals/operations/local'); class Payload { init(options) { logger.info('Starting Payload...'); - const config = getConfig(options); - this.config = sanitizeConfig(config); + if (!options.secret) { + throw new Error('Error: missing secret key. A secret key is needed to secure Payload.'); + } + + if (!options.mongoURL) { + throw new Error('Error: missing MongoDB connection URL.'); + } + + const config = getConfig(options); + const email = { ...(config.email || {}), ...(options.email || {}) }; + + this.config = sanitizeConfig({ + ...config, + email, + secret: options.secret, + mongoURL: options.mongoURL, + }); if (typeof this.config.paths === 'undefined') this.config.paths = {}; diff --git a/src/webpack/mockModule.js b/src/mocks/emptyModule.js similarity index 100% rename from src/webpack/mockModule.js rename to src/mocks/emptyModule.js diff --git a/src/mocks/fileMock.js b/src/mocks/fileMock.js new file mode 100644 index 000000000..105ff4974 --- /dev/null +++ b/src/mocks/fileMock.js @@ -0,0 +1 @@ +module.exports = 'file-stub'; diff --git a/src/tests/globalSetup.js b/src/tests/globalSetup.js index c865feebf..0a04d80b2 100644 --- a/src/tests/globalSetup.js +++ b/src/tests/globalSetup.js @@ -1,17 +1,15 @@ require('isomorphic-fetch'); + const server = require('../../demo/server'); -const config = require('../../demo/payload.config'); -// const payload = require('..'); +const getConfig = require('../utilities/getConfig'); const { email, password } = require('./credentials'); -const url = config.serverURL; +const { serverURL } = getConfig(); const globalSetup = async () => { global.PAYLOAD_SERVER = server.start(); - // ensureIndexes payload.collections....... etc loop through and await promise.all ensure indexes - - const response = await fetch(`${url}/api/admins/first-register`, { + const response = await fetch(`${serverURL}/api/admins/first-register`, { body: JSON.stringify({ email, password, diff --git a/src/utilities/getConfig.js b/src/utilities/getConfig.js index f872d2a99..442930058 100644 --- a/src/utilities/getConfig.js +++ b/src/utilities/getConfig.js @@ -3,58 +3,19 @@ const findConfig = require('./findConfig'); const configPath = findConfig(); +const babelConfig = require('../../babel.config'); require('ignore-styles'); -require('@babel/register')({ - presets: [ - [ - '@babel/preset-env', - { - targets: [ - 'defaults', - 'not IE 11', - 'not IE_Mob 11', - 'maintained node versions', - ], - }, - ], - '@babel/preset-react', - ], - plugins: [ - ['module-resolver', { - alias: { - 'payload/unsanitizedConfig': configPath, - '@payloadcms/payload$': '../', - }, - }], - '@babel/plugin-proposal-class-properties', - '@babel/plugin-proposal-optional-chaining', - 'add-module-exports', - ], - ignore: [ - '*.scss', - '*.css', - 'node_modules', - ], -}); -const getConfig = (options = {}) => { - if (!options.secret) { - throw new Error('Error: missing secret key. A secret key is needed to secure Payload.'); - } - - if (!options.mongoURL) { - throw new Error('Error: missing MongoDB connection URL.'); - } +if (process.env.NODE_ENV !== 'test') { + require('@babel/register')(babelConfig); +} +const getConfig = () => { const publicConfig = require(configPath); - const email = { ...(publicConfig.email || {}), ...(options.email || {}) }; return { ...publicConfig, - secret: options.secret, - mongoURL: options.mongoURL, - email, paths: { configDir: configPath.substring(0, configPath.lastIndexOf('/')), ...(publicConfig.paths || {}), diff --git a/src/webpack/getWebpackDevConfig.js b/src/webpack/getWebpackDevConfig.js index 98b013755..c094ecfde 100644 --- a/src/webpack/getWebpackDevConfig.js +++ b/src/webpack/getWebpackDevConfig.js @@ -3,8 +3,9 @@ const path = require('path'); const webpack = require('webpack'); const Dotenv = require('dotenv-webpack'); const getStyleLoaders = require('./getStyleLoaders'); +const babelConfig = require('../../babel.config'); -const mockModulePath = path.resolve(__dirname, './mockModule.js'); +const mockModulePath = path.resolve(__dirname, '../mocks/emptyModule.js'); module.exports = (config) => { let webpackConfig = { @@ -29,26 +30,7 @@ module.exports = (config) => { exclude: /node_modules\/(?!(@payloadcms\/payload)\/).*/, use: [{ loader: 'babel-loader', - options: { - presets: [ - [ - require.resolve('@babel/preset-env'), - { - targets: [ - 'defaults', - 'not IE 11', - 'not IE_Mob 11', - ], - }, - ], - require.resolve('@babel/preset-react'), - ], - plugins: [ - 'add-module-exports', - '@babel/plugin-proposal-class-properties', - '@babel/plugin-proposal-optional-chaining', - ], - }, + options: babelConfig, }, // { // loader: 'eslint-loader', diff --git a/src/webpack/getWebpackProdConfig.js b/src/webpack/getWebpackProdConfig.js index b90647cfd..920bf611c 100644 --- a/src/webpack/getWebpackProdConfig.js +++ b/src/webpack/getWebpackProdConfig.js @@ -3,8 +3,9 @@ const Dotenv = require('dotenv-webpack'); // const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); const path = require('path'); const getStyleLoaders = require('./getStyleLoaders'); +const babelConfig = require('../../babel.config'); -const mockModulePath = path.resolve(__dirname, './mockModule.js'); +const mockModulePath = path.resolve(__dirname, '../mocks/emptyModule.js'); module.exports = (config) => { let webpackConfig = { @@ -21,40 +22,12 @@ module.exports = (config) => { resolveLoader: { modules: ['node_modules', path.join(__dirname, '../../node_modules')] }, module: { rules: [ - { - test: require.resolve('../client/components/customComponents'), - use: [ - { - loader: 'val-loader', - options: config, - }, - ], - }, { test: /\.js$/, exclude: /node_modules\/(?!(@payloadcms\/payload)\/).*/, use: { loader: 'babel-loader', - options: { - presets: [ - [ - require.resolve('@babel/preset-env'), - { - targets: [ - 'defaults', - 'not IE 11', - 'not IE_Mob 11', - ], - }, - ], - require.resolve('@babel/preset-react'), - ], - plugins: [ - 'add-module-exports', - require.resolve('@babel/plugin-proposal-optional-chaining'), - require.resolve('@babel/plugin-proposal-class-properties'), - ], - }, + options: babelConfig, }, }, { @@ -104,7 +77,6 @@ module.exports = (config) => { modules: ['node_modules', path.resolve(__dirname, '../../node_modules')], alias: { 'payload/unsanitizedConfig': config.paths.config, - 'payload/config': path.resolve(__dirname, '../client/config.js'), '@payloadcms/payload$': mockModulePath, }, }, diff --git a/yarn.lock b/yarn.lock index 831874619..d9cb1af5d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1294,6 +1294,27 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" +"@jest/transform@^26.3.0": + version "26.3.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.3.0.tgz#c393e0e01459da8a8bfc6d2a7c2ece1a13e8ba55" + integrity sha512-Isj6NB68QorGoFWvcOjlUhpkT56PqNIsXKR7XfvoDlCANn/IANlh8DrKAA2l2JKC3yWSMH5wS0GwuQM20w3b2A== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.3.0" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.3.0" + jest-regex-util "^26.0.0" + jest-util "^26.3.0" + micromatch "^4.0.2" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + "@jest/types@^25.5.0": version "25.5.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" @@ -1304,6 +1325,17 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" +"@jest/types@^26.3.0": + version "26.3.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.3.0.tgz#97627bf4bdb72c55346eef98e3b3f7ddc4941f71" + integrity sha512-BDPG23U0qDeAvU4f99haztXwdAg3hz4El95LkAM+tHAqqhiVzRpEGHHU8EDxT/AnxOrA65YjLBwDahdJ9pTLJQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + "@microsoft/load-themed-styles@^1.10.26": version "1.10.97" resolved "https://registry.yarnpkg.com/@microsoft/load-themed-styles/-/load-themed-styles-1.10.97.tgz#39106393e134e68870072784c595a432d9ae9051" @@ -1337,7 +1369,7 @@ object.assign "^4.1.0" object.entries "^1.1.1" -"@types/babel__core@^7.1.7": +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.9" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d" integrity sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw== @@ -1417,6 +1449,13 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" +"@types/istanbul-reports@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" + integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== + dependencies: + "@types/istanbul-lib-report" "*" + "@types/js-cookie@2.2.6": version "2.2.6" resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.6.tgz#f1a1cb35aff47bc5cfb05cb0c441ca91e914c26f" @@ -2171,7 +2210,21 @@ babel-jest@^25.5.1: graceful-fs "^4.2.4" slash "^3.0.0" -babel-loader@^8.0.6: +babel-jest@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.3.0.tgz#10d0ca4b529ca3e7d1417855ef7d7bd6fc0c3463" + integrity sha512-sxPnQGEyHAOPF8NcUsD0g7hDCnvLL2XyblRBcgrzTWBB/mAIpWow3n1bEL+VghnnZfreLhFSBsFluRoK2tRK4g== + dependencies: + "@jest/transform" "^26.3.0" + "@jest/types" "^26.3.0" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.3.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-loader@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== @@ -2230,6 +2283,16 @@ babel-plugin-jest-hoist@^25.5.0: "@babel/types" "^7.3.3" "@types/babel__traverse" "^7.0.6" +babel-plugin-jest-hoist@^26.2.0: + version "26.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.2.0.tgz#bdd0011df0d3d513e5e95f76bd53b51147aca2dd" + integrity sha512-B/hVMRv8Nh1sQ1a3EY8I0n4Y1Wty3NrR5ebOyVT302op+DOAau+xNEImGMsUWOC3++ZlMooCytKz+NgN8aKGbA== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + babel-plugin-macros@^2.0.0: version "2.8.0" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" @@ -2255,7 +2318,7 @@ babel-plugin-syntax-jsx@^6.18.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= -babel-preset-current-node-syntax@^0.1.2: +babel-preset-current-node-syntax@^0.1.2, babel-preset-current-node-syntax@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz#b4b547acddbf963cba555ba9f9cbbb70bfd044da" integrity sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ== @@ -2280,6 +2343,14 @@ babel-preset-jest@^25.5.0: babel-plugin-jest-hoist "^25.5.0" babel-preset-current-node-syntax "^0.1.2" +babel-preset-jest@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.3.0.tgz#ed6344506225c065fd8a0b53e191986f74890776" + integrity sha512-5WPdf7nyYi2/eRxCbVrE1kKCWxgWY4RsPEbdJWFm7QsesFGqjdkyLeu1zRkwM1cxK6EPIlNd6d2AxLk7J+t4pw== + dependencies: + babel-plugin-jest-hoist "^26.2.0" + babel-preset-current-node-syntax "^0.1.3" + bail@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" @@ -6327,6 +6398,27 @@ jest-haste-map@^25.5.1: optionalDependencies: fsevents "^2.1.2" +jest-haste-map@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.3.0.tgz#c51a3b40100d53ab777bfdad382d2e7a00e5c726" + integrity sha512-DHWBpTJgJhLLGwE5Z1ZaqLTYqeODQIZpby0zMBsCU9iRFHYyhklYqP4EiG73j5dkbaAdSZhgB938mL51Q5LeZA== + dependencies: + "@jest/types" "^26.3.0" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.3.0" + jest-util "^26.3.0" + jest-worker "^26.3.0" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + jest-jasmine2@^25.5.4: version "25.5.4" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968" @@ -6399,6 +6491,11 @@ jest-regex-util@^25.2.6: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + jest-resolve-dependencies@^25.5.4: version "25.5.4" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7" @@ -6487,6 +6584,14 @@ jest-serializer@^25.5.0: dependencies: graceful-fs "^4.2.4" +jest-serializer@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.3.0.tgz#1c9d5e1b74d6e5f7e7f9627080fa205d976c33ef" + integrity sha512-IDRBQBLPlKa4flg77fqg0n/pH87tcRKwe8zxOVTWISxGpPHYkRZ1dXKyh04JOja7gppc60+soKVZ791mruVdow== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + jest-snapshot@^25.5.1: version "25.5.1" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f" @@ -6519,6 +6624,18 @@ jest-util@^25.5.0: is-ci "^2.0.0" make-dir "^3.0.0" +jest-util@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.3.0.tgz#a8974b191df30e2bf523ebbfdbaeb8efca535b3e" + integrity sha512-4zpn6bwV0+AMFN0IYhH/wnzIQzRaYVrz1A8sYnRnj4UXDXbOVtWmlaZkO9mipFqZ13okIfN87aDoJWB7VH6hcw== + dependencies: + "@jest/types" "^26.3.0" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + jest-validate@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a" @@ -6551,6 +6668,15 @@ jest-worker@^25.5.0: merge-stream "^2.0.0" supports-color "^7.0.0" +jest-worker@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f" + integrity sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + jest@^25.3.0: version "25.5.4" resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db" @@ -9408,11 +9534,6 @@ react-helmet@^6.1.0: react-fast-compare "^3.1.1" react-side-effect "^2.1.0" -react-hook-form@^5.7.2: - version "5.7.2" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-5.7.2.tgz#a84e259e5d37dd30949af4f79c4dac31101b79ac" - integrity sha512-bJvY348vayIvEUmSK7Fvea/NgqbT2racA2IbnJz/aPlQ3GBtaTeDITH6rtCa6y++obZzG6E3Q8VuoXPir7QYUg== - react-input-autosize@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.2.tgz#fcaa7020568ec206bc04be36f4eb68e647c4d8c2"