diff --git a/jest.config.js b/jest.config.js index 1fe3c136dbc4..8539e09be8d8 100644 --- a/jest.config.js +++ b/jest.config.js @@ -11,6 +11,8 @@ module.exports = { }, testURL: 'http://localhost:8080', snapshotSerializers: ['jest-emotion'], - transformIgnorePatterns: ['node_modules/(?!copy-text-to-clipboard)'], + transformIgnorePatterns: [ + 'node_modules/(?!copy-text-to-clipboard|clean-stack|escape-string-regexp)', + ], testEnvironment: 'jsdom', }; diff --git a/packages/netlify-cms-core/package.json b/packages/netlify-cms-core/package.json index e3a8014837b2..a25862f45832 100644 --- a/packages/netlify-cms-core/package.json +++ b/packages/netlify-cms-core/package.json @@ -29,6 +29,7 @@ "ajv": "8.1.0", "ajv-errors": "^3.0.0", "ajv-keywords": "^5.0.0", + "clean-stack": "^4.1.0", "copy-text-to-clipboard": "^3.0.0", "deepmerge": "^4.2.2", "diacritics": "^1.3.0", diff --git a/packages/netlify-cms-core/src/components/UI/ErrorBoundary.js b/packages/netlify-cms-core/src/components/UI/ErrorBoundary.js index 415cc45c9b24..5f2428fb4ae3 100644 --- a/packages/netlify-cms-core/src/components/UI/ErrorBoundary.js +++ b/packages/netlify-cms-core/src/components/UI/ErrorBoundary.js @@ -7,6 +7,7 @@ import { truncate } from 'lodash'; import copyToClipboard from 'copy-text-to-clipboard'; import { localForage } from 'netlify-cms-lib-util'; import { buttons, colors } from 'netlify-cms-ui-default'; +import cleanStack from 'clean-stack'; const ISSUE_URL = 'https://github.com/netlify/netlify-cms/issues/new?'; @@ -142,7 +143,11 @@ export class ErrorBoundary extends React.Component { static getDerivedStateFromError(error) { console.error(error); - return { hasError: true, errorMessage: error.stack.toString(), errorTitle: error.toString() }; + return { + hasError: true, + errorMessage: cleanStack(error.stack, { basePath: process.cwd() }), + errorTitle: error.toString(), + }; } shouldComponentUpdate(nextProps, nextState) { diff --git a/packages/netlify-cms-core/src/components/UI/__tests__/__snapshots__/ErrorBoundary.spec.js.snap b/packages/netlify-cms-core/src/components/UI/__tests__/__snapshots__/ErrorBoundary.spec.js.snap index 74edfb6bd26e..f66e0846b60a 100644 --- a/packages/netlify-cms-core/src/components/UI/__tests__/__snapshots__/ErrorBoundary.spec.js.snap +++ b/packages/netlify-cms-core/src/components/UI/__tests__/__snapshots__/ErrorBoundary.spec.js.snap @@ -69,6 +69,47 @@ exports[`Editor should match snapshot with issue URL 1`] = `

Error: Some unknown error + at WithError (/packages/netlify-cms-core/src/components/UI/__tests__/ErrorBoundary.spec.js:8:9) + at renderWithHooks (/node_modules/react-dom/cjs/react-dom.development.js:14803:18) + at mountIndeterminateComponent (/node_modules/react-dom/cjs/react-dom.development.js:17482:13) + at beginWork (/node_modules/react-dom/cjs/react-dom.development.js:18596:16) + at HTMLUnknownElement.callCallback (/node_modules/react-dom/cjs/react-dom.development.js:188:14) + at HTMLUnknownElement.callTheUserObjectsOperation (/node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30) + at innerInvokeEventListeners (/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:338:25) + at invokeEventListeners (/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:274:3) + at HTMLUnknownElementImpl._dispatch (/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:221:9) + at HTMLUnknownElementImpl.dispatchEvent (/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:94:17) + at HTMLUnknownElement.dispatchEvent (/node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:231:34) + at Object.invokeGuardedCallbackDev (/node_modules/react-dom/cjs/react-dom.development.js:237:16) + at invokeGuardedCallback (/node_modules/react-dom/cjs/react-dom.development.js:292:31) + at beginWork$1 (/node_modules/react-dom/cjs/react-dom.development.js:23203:7) + at performUnitOfWork (/node_modules/react-dom/cjs/react-dom.development.js:22157:12) + at workLoopSync (/node_modules/react-dom/cjs/react-dom.development.js:22130:22) + at performSyncWorkOnRoot (/node_modules/react-dom/cjs/react-dom.development.js:21756:9) + at scheduleUpdateOnFiber (/node_modules/react-dom/cjs/react-dom.development.js:21188:7) + at updateContainer (/node_modules/react-dom/cjs/react-dom.development.js:24373:3) + at /node_modules/react-dom/cjs/react-dom.development.js:24758:7 + at unbatchedUpdates (/node_modules/react-dom/cjs/react-dom.development.js:21903:12) + at legacyRenderSubtreeIntoContainer (/node_modules/react-dom/cjs/react-dom.development.js:24757:5) + at Object.render (/node_modules/react-dom/cjs/react-dom.development.js:24840:10) + at /node_modules/@testing-library/react/dist/pure.js:101:25 + at batchedUpdates$1 (/node_modules/react-dom/cjs/react-dom.development.js:21856:12) + at act (/node_modules/react-dom/cjs/react-dom-test-utils.development.js:929:14) + at render (/node_modules/@testing-library/react/dist/pure.js:97:26) + at Object.<anonymous> (/packages/netlify-cms-core/src/components/UI/__tests__/ErrorBoundary.spec.js:37:41) + at Promise.then.completed (/node_modules/jest-circus/build/utils.js:391:28) + at new Promise (<anonymous>) + at callAsyncCircusFn (/node_modules/jest-circus/build/utils.js:316:10) + at _callCircusTest (/node_modules/jest-circus/build/run.js:218:40) + at _runTest (/node_modules/jest-circus/build/run.js:155:3) + at _runTestsForDescribeBlock (/node_modules/jest-circus/build/run.js:66:9) + at _runTestsForDescribeBlock (/node_modules/jest-circus/build/run.js:60:9) + at run (/node_modules/jest-circus/build/run.js:25:3) + at runAndTransformResultsToJestFormat (/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:170:21) + at jestAdapter (/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:82:19) + at runTestInternal (/node_modules/jest-runner/build/runTest.js:389:16) + at runTest (/node_modules/jest-runner/build/runTest.js:475:34) + at Object.worker (/node_modules/jest-runner/build/testWorker.js:133:12)

diff --git a/yarn.lock b/yarn.lock index ddd330095be1..0b87b375de02 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6127,6 +6127,13 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +clean-stack@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-4.1.0.tgz#5ce5a2fd19a12aecdce8570daefddb7ac94b6b4e" + integrity sha512-dxXQYI7mfQVcaF12s6sjNFoZ6ZPDQuBBLp3QJ5156k9EvUFClUoZ11fo8HnLQO241DDVntHEug8MOuFO5PSfRg== + dependencies: + escape-string-regexp "5.0.0" + cli-boxes@^2.2.0, cli-boxes@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" @@ -6849,7 +6856,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-react-class@^15.7.0: +create-react-class@^15.5.1, create-react-class@^15.7.0: version "15.7.0" resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.7.0.tgz#7499d7ca2e69bb51d13faf59bd04f0c65a1d6c1e" integrity sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng== @@ -8026,6 +8033,11 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + escape-string-regexp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" @@ -10303,7 +10315,7 @@ interpret@^2.0.0, interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4: +invariant@^2.0.0, invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -15126,7 +15138,19 @@ react-popper@^1.3.7: typed-styles "^0.0.7" warning "^4.0.2" -react-redux@^4.0.0, react-redux@^7.2.0: +react-redux@^4.0.0: + version "4.4.10" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.10.tgz#ad57bd1db00c2d0aa7db992b360ce63dd0b80ec5" + integrity sha512-tjL0Bmpkj75Td0k+lXlF8Fc8a9GuXFv/3ahUOCXExWs/jhsKiQeTffdH0j5byejCGCRL4tvGFYlrwBF1X/Aujg== + dependencies: + create-react-class "^15.5.1" + hoist-non-react-statics "^3.3.0" + invariant "^2.0.0" + lodash "^4.17.11" + loose-envify "^1.4.0" + prop-types "^15.7.2" + +react-redux@^7.2.0: version "7.2.8" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.8.tgz#a894068315e65de5b1b68899f9c6ee0923dd28de" integrity sha512-6+uDjhs3PSIclqoCk0kd6iX74gzrGc3W5zcAjbrFgEdIjRSQObdIwfx80unTkVUYvbQ95Y8Av3OvFHq1w5EOUw==