CK Editor 5 built from source + Vue JS + Using component locally = duplicated - vue.js

I have a set of components in my page like this:
BlogEntryPointComponent that contains NewBlogComponent and BlogEditComponent
both NewBlogComponent and BlogEditComponent use the following code:
import BlogEditor from '../../../../js/ckeditor/blogeditor.ts'
export default {
components:{
ckeditor: BlogEditor.ckeditor
},
data(){
return{
editor: BlogEditor.editor,
editorConfig: BlogEditor.config
}
},
...
so now I mount BlogEntryPointComponent but the problem is that this is causing error ckeditor-duplicated-modules: Some CKEditor 5 modules are duplicated
The error page help talks about using two different builds on one page; I guess I am in this case... but those are are two different independent components; how can this be ?
So I tried building the editor from source as per what the doc recommends and I have the same problem..
the editor is the same imported file in both components.
here is the editor:
import EssentialsPlugin from '#ckeditor/ckeditor5-essentials/src/essentials';
import UploadAdapterPlugin from '#ckeditor/ckeditor5-adapter-ckfinder/src/uploadadapter';
import AutoformatPlugin from '#ckeditor/ckeditor5-autoformat/src/autoformat';
import BoldPlugin from '#ckeditor/ckeditor5-basic-styles/src/bold';
import ItalicPlugin from '#ckeditor/ckeditor5-basic-styles/src/italic';
import BlockQuotePlugin from '#ckeditor/ckeditor5-block-quote/src/blockquote';
import HeadingPlugin from '#ckeditor/ckeditor5-heading/src/heading';
import LinkPlugin from '#ckeditor/ckeditor5-link/src/link';
import ListPlugin from '#ckeditor/ckeditor5-list/src/list';
import ParagraphPlugin from '#ckeditor/ckeditor5-paragraph/src/paragraph';
import AlignmentPlugin from '#ckeditor/ckeditor5-alignment/src/alignment';
import EmbedPlugin from '#ckeditor/ckeditor5-media-embed/src/mediaembed';
import MentionPlugin from '#ckeditor/ckeditor5-mention/src/mention';
import HighlightPlugin from '#ckeditor/ckeditor5-highlight/src/highlight'
import ClassicEditorBase from '#ckeditor/ckeditor5-editor- classic/src/classiceditor';
import CKEditor from '#ckeditor/ckeditor5-vue/dist/ckeditor.js'
export default {
ckeditor: CKEditor.component,
editor:ClassicEditorBase,
config:{
plugins: [
EssentialsPlugin,
BoldPlugin,
ItalicPlugin,
LinkPlugin,
ParagraphPlugin,
AlignmentPlugin,
ListPlugin,
HeadingPlugin,
BlockQuotePlugin,
AutoformatPlugin,
UploadAdapterPlugin,
EmbedPlugin,
MentionPlugin,
HighlightPlugin
],
toolbar: {
items: [
'heading',
'|',
'bold',
'italic',
'alignment',
'link',
'bulletedList',
'numberedList',
'mediaEmbed',
'blockQuote',
'highlight',
'undo',
'redo'
]
}
}
}
package.json
{
"devDependencies": {
"#babel/core": "^7.0.0",
"#babel/preset-env": "^7.4.5",
"#babel/preset-typescript": "^7.1.0",
"#babel/register": "^7.0.0",
"#ckeditor/ckeditor5-adapter-ckfinder": "^11.0.1",
"#ckeditor/ckeditor5-alignment": "^11.1.0",
"#ckeditor/ckeditor5-autoformat": "^11.0.1",
"#ckeditor/ckeditor5-basic-styles": "^11.1.0",
"#ckeditor/ckeditor5-block-quote": "^11.0.1",
"#ckeditor/ckeditor5-dev-utils": "^12.0.1",
"#ckeditor/ckeditor5-dev-webpack-plugin": "^8.0.1",
"#ckeditor/ckeditor5-easy-image": "^11.0.1",
"#ckeditor/ckeditor5-editor-classic": "^12.1.0",
"#ckeditor/ckeditor5-essentials": "^11.0.1",
"#ckeditor/ckeditor5-heading": "^11.0.1",
"#ckeditor/ckeditor5-image": "^13.0.1",
"#ckeditor/ckeditor5-link": "^11.0.1",
"#ckeditor/ckeditor5-list": "^12.0.1",
"#ckeditor/ckeditor5-paragraph": "^11.0.1",
"#ckeditor/ckeditor5-theme-lark": "^13.0.1",
"#ckeditor/ckeditor5-undo": "^11.0.1",
"#types/jquery": "^3.3.22",
"babel-loader": "^8.0.4",
"clean-webpack-plugin": "^0.1.19",
"copy-webpack-plugin": "^4.5.4",
"css-loader": "^2.1.0",
"extract-text-webpack-plugin": "^4.0.0-beta.0",
"file-loader": "^2.0.0",
"html-webpack-plugin": "^3.2.0",
"imports-loader": "^0.8.0",
"jquery": "^3.3.1",
"less-loader": "^4.1.0",
"mini-css-extract-plugin": "^0.7.0",
"node-sass": "^4.12.0",
"optimize-css-assets-webpack-plugin": "^5.0.1",
"sass-loader": "^7.1.0",
"select2": "^4.0.6-rc.1",
"style-loader": "^0.23.1",
"terser-webpack-plugin": "^1.3.0",
"to-string-loader": "^1.1.5",
"toastr": "^2.1.4",
"ts-loader": "^5.2.2",
"tslint": "^5.11.0",
"typescript": "^3.1.3",
"url-loader": "^1.1.2",
"vue-cool-select": "^1.6.2",
"vue-loader": "^15.6.1",
"vue-select": "2.4.0",
"vue-style-loader": "^4.1.2",
"vue-template-compiler": "^2.5.22",
"webpack": "^4.32.2",
"webpack-cli": "^3.1.2",
"webpack-manifest-plugin": "^2.0.4",
"webpack-notifier": "^1.7.0",
"write-file-webpack-plugin": "^4.4.1"
},
"dependencies": {
"#ckeditor/ckeditor5-build-classic": "^12.1.0",
"#ckeditor/ckeditor5-build-decoupled-document": "^12.1.0",
"#ckeditor/ckeditor5-highlight": "^11.0.1",
"#ckeditor/ckeditor5-media-embed": "^11.1.0",
"#ckeditor/ckeditor5-mention": "^10.0.0",
"#ckeditor/ckeditor5-vue": "^1.0.0-beta.2",
"axios": "^0.19.0",
"moment": "^2.24.0",
"postcss-loader": "^3.0.0",
"pretty-checkbox-vue": "^1.1.9",
"raw-loader": "^0.5.1",
"svg-url-loader": "^2.3.2",
"vue": "^2.5.22",
"vue-date-pick": "^1.1.0",
"vue-router": "^3.0.2",
"vuelayers": "^0.11.4"
}

What I did is I updated all the packages related to ckeditor5 and added #ckeditor/ckeditor5-ui#latest
When I updated all the packages related to ck5editor I encounred this new multiple errors
plugincollection-plugin-name-conflict through duplicate.....
https://github.com/ckeditor/ckeditor5/issues/1505
so I deleted the node_modules and package.lock or yarn.lock and npm install again
Most probably the cause of the errors is if you have newer version of some plugins and also have older version, it will return an error since it seems you are using both the new and old version or you can't use newer version of plugins with older version of core plugins

Related

Test suite failed to run: node_modules/#react-native/polyfills/error-guard.js: Missing semicolon

I have searched around for this error and found numerous people reporting it, but none of the solution tried have worked for me. The project I'm working with was ejected from expo with react-native v0.63 installed, and then upgraded to react-native v0.64.3. Everything else is working fine, but the tests are failing. On running yarn test, all the unit tests throw the same error:
src/screens/ScreenTest/ScreenTest.test.js
● Test suite failed to run
SyntaxError: /node_modules/#react-native/polyfills/error-guard.js: Missing semicolon. (14:4)
12 | let _inGuard = 0;
13 |
> 14 | type ErrorHandler = (error: mixed, isFatal: boolean) => void;
| ^
15 | type Fn<Args, Return> = (...Args) => Return;
16 |
17 | /**
at instantiate (node_modules/#babel/parser/lib/index.js:72:32)
at constructor (node_modules/#babel/parser/lib/index.js:367:12)
at Parser.raise (node_modules/#babel/parser/lib/index.js:3706:19)
at Parser.semicolon (node_modules/#babel/parser/lib/index.js:4151:10)
at Parser.parseExpressionStatement (node_modules/#babel/parser/lib/index.js:15453:10)
at Parser.parseStatementContent (node_modules/#babel/parser/lib/index.js:14986:19)
at Parser.parseStatement (node_modules/#babel/parser/lib/index.js:14838:17)
at Parser.parseBlockOrModuleBlockBody (node_modules/#babel/parser/lib/index.js:15495:25)
at Parser.parseBlockBody (node_modules/#babel/parser/lib/index.js:15486:10)
at Parser.parseProgram (node_modules/#babel/parser/lib/index.js:14748:10)
at Parser.parseTopLevel (node_modules/#babel/parser/lib/index.js:14735:25)
at Parser.parse (node_modules/#babel/parser/lib/index.js:16764:10)
at parse (node_modules/#babel/parser/lib/index.js:16816:38)
at parser.next (<anonymous>)
at normalizeFile.next (<anonymous>)
at run.next (<anonymous>)
at transform.next (<anonymous>)
at evaluateSync (node_modules/gensync/index.js:251:28)
at sync (node_modules/gensync/index.js:89:14)
at ScriptTransformer.transformSource (node_modules/#jest/transform/build/ScriptTransformer.js:481:35)
at ScriptTransformer._transformAndBuildScript (node_modules/#jest/transform/build/ScriptTransformer.js:586:40)
at ScriptTransformer.transform (node_modules/#jest/transform/build/ScriptTransformer.js:624:25)
at Object.<anonymous> (node_modules/react-native/jest/setup.js:300:6)
Another thing to note is that I have babel.config.js file in my project already, since a lot of answers mentioned moving from .babelrc to babel.config.js as a solution to this problem, but it didn't help. just to be sure i also tried removing the babel.config.js and adding a .babelrc but that did not work either.
I'm at my wits end here and any help is greatly appreciated!
So far I've tried:
Upgrading/downgrading the jest, babel, and any dependencies to a newer version
How can I stop my React Native tests bombing out on Flow types in Node Modules? => Fixes posted in this thread
https://github.com/react-native-community/upgrade-support/issues/152 => More fixes from this issue
Changing babel plugins and adding/removing transformIgnorePatterns
Creating a fresh, bare react-native#0.64.3 project and running the default test (tests pass after downgrading babel to the recommended version)
babel.config.js:
module.exports = function (api) {
api.cache(false)
return {
env: {
production: {
presets: ['module:metro-react-native-babel-preset'],
plugins: [
'module:react-native-dotenv',
'react-native-reanimated/plugin',
'transform-remove-console',
],
},
development: {
presets: ['module:metro-react-native-babel-preset'],
plugins: ['module:react-native-dotenv', 'react-native-reanimated/plugin'],
},
},
}
}
package.json:
{
"dependencies": {
"#expo/vector-icons": "^12.0.0",
"#gorhom/bottom-sheet": "^4.4.2",
"#pnthach95/react-native-root-view-background": "^1.2.0",
"#ptomasroos/react-native-multi-slider": "^2.2.2",
"#react-native-async-storage/async-storage": "^1.13.4",
"#react-native-community/clipboard": "^1.5.1",
"#react-native-community/netinfo": "^8.3.0",
"#react-native-community/push-notification-ios": "^1.8.0",
"#react-native-firebase/analytics": "12.9.3",
"#react-native-firebase/app": "12.9.3",
"#react-native-firebase/auth": "^12.1.0",
"#react-native-firebase/crashlytics": "12.9.3",
"#react-native-firebase/dynamic-links": "10.8.1",
"#react-native-firebase/in-app-messaging": "12.9.3",
"#react-native-firebase/messaging": "^12.1.0",
"#react-native-firebase/perf": "12.9.3",
"#react-native-firebase/remote-config": "12.9.3",
"#react-native-google-signin/google-signin": "^6.0.1",
"#react-native-masked-view/masked-view": "^0.2.6",
"#react-native-picker/picker": "1.9.2",
"#react-navigation/bottom-tabs": "^6.4.0",
"#react-navigation/core": "^5.16.1",
"#react-navigation/native": "^6.0.13",
"#react-navigation/native-stack": "^6.9.6",
"#react-navigation/stack": "^6.3.1",
"#rematch/core": "^2.0.0",
"#rematch/loading": "^2.0.0",
"#sentry/react-native": "^2.6.2",
"#twotalltotems/react-native-otp-input": "^1.3.11",
"accordion-collapse-react-native": "^0.3.2",
"axios": "^0.20.0",
"babel-eslint": "^10.1.0",
"babel-plugin-inline-dotenv": "^1.6.0",
"babel-plugin-transform-remove-console": "^6.9.4",
"eslint-plugin-react-native": "^3.11.0",
"eslint-plugin-unused-imports": "^1.1.1",
"expo": "^40.0.0",
"expo-document-picker": "~8.4.1",
"expo-file-system": "~9.3.0",
"expo-location": "~10.0.0",
"expo-splash-screen": "~0.8.1",
"expo-status-bar": "~1.0.3",
"expo-web-browser": "~8.6.0",
"firebase": "^8.4.3",
"intl": "^1.2.5",
"lodash": "^4.17.20",
"lottie-ios": "3.4.0",
"lottie-react-native": "^5.1.4",
"moment": "^2.29.1",
"moment-duration-format": "^2.3.2",
"patch-package": "^6.4.7",
"postinstall-postinstall": "^2.1.0",
"prop-types": "^15.7.2",
"radio-buttons-react-native": "^1.0.4",
"react": "17.0.2",
"react-calendly": "^4.0.0",
"react-dom": "16.13.1",
"react-intl": "^5.24.6",
"react-native": "0.64.3",
"react-native-appsflyer": "6.8.2",
"react-native-background-timer": "^2.4.1",
"react-native-bootsplash": "^3.2.2",
"react-native-code-push": "^7.0.4",
"react-native-confirmation-code-field": "^6.5.1",
"react-native-date-picker": "^3.2.8",
"react-native-device-info": "^8.0.0",
"react-native-dotenv": "^2.5.0",
"react-native-fast-image": "^8.5.11",
"react-native-fbsdk-next": "^4.2.0",
"react-native-fingerprint-scanner": "^6.0.0",
"react-native-fs": "^2.18.0",
"react-native-gesture-handler": "^1.10.3",
"react-native-image-header-scroll-view": "^0.10.3",
"react-native-image-picker": "~4.2.1",
"react-native-in-app-review": "^4.1.1",
"react-native-inappbrowser-reborn": "^3.5.1",
"react-native-indicators": "^0.17.0",
"react-native-insta-story": "^1.1.8",
"react-native-keyboard-aware-scroll-view": "^0.9.2",
"react-native-linear-gradient": "^2.6.2",
"react-native-modal": "^13.0.0",
"react-native-offline": "^6.0.0",
"react-native-otp-autocomplete": "^1.0.7",
"react-native-pager-view": "5.4.12",
"react-native-paper": "^4.2.0",
"react-native-permissions": "^3.0.0",
"react-native-picker-select": "^8.0.0",
"react-native-play-install-referrer": "^1.1.8",
"react-native-popup-menu": "^0.15.11",
"react-native-portal": "^1.3.0",
"react-native-progress": "^4.1.2",
"react-native-push-notification": "7.3.1",
"react-native-quiz-maker": "^0.1.0",
"react-native-raw-bottom-sheet": "^2.2.0",
"react-native-razorpay": "^2.2.7",
"react-native-reanimated": "~2.5.0",
"react-native-responsive-fontsize": "^0.5.1",
"react-native-restart": "^0.0.22",
"react-native-rss-parser": "https://github.com/adityabishtedu/react-native-rss-parser/tarball/rss-patch",
"react-native-safe-area-context": "3.4.1",
"react-native-screens": "^3.17.0",
"react-native-session-stats": "https://github.com/balazsherczeg/react-native-session-stats.git",
"react-native-shadow-2": "^6.0.5",
"react-native-share": "^7.9.0",
"react-native-signature-canvas": "^4.3.0",
"react-native-simple-toast": "^1.1.3",
"react-native-skeleton-placeholder": "^5.0.0",
"react-native-snap-carousel": "4.0.0-beta.6",
"react-native-step-indicator": "^1.0.3",
"react-native-steps": "^1.3.0",
"react-native-svg": "^12.1.1",
"react-native-tab-view": "^3.1.1",
"react-native-tab-view-fixed": "^0.0.69",
"react-native-thumbnail-video": "^0.1.2",
"react-native-tracking-transparency": "^0.1.1",
"react-native-ultimate-config": "3.4.2",
"react-native-unimodules": "~0.12.0",
"react-native-vector-icons": "^9.1.0",
"react-native-video": "^5.1.1",
"react-native-view-shot": "^3.4.0",
"react-native-walkthrough-tooltip": "^1.1.11",
"react-native-web": "~0.13.12",
"react-native-webp-format": "^1.1.2",
"react-native-webview": "^11.18.1",
"react-native-youtube-iframe": "^2.2.2",
"react-navigation": "^4.4.4",
"react-number-format": "^4.4.1",
"react-redux": "^7.2.1",
"redux": "^4.0.5",
"redux-axios-middleware": "^4.0.1",
"redux-thunk": "^2.3.0",
"rn-faded-scrollview": "^1.0.12",
"rn-fetch-blob": "^0.12.0",
"validate.js": "^0.13.1",
"victory-native": "^36.6.0",
"volkeno-react-native-quiz-multiple-choice": "^1.0.3"
},
"devDependencies": {
"#babel/core": "^7.20.5",
"#babel/runtime": "^7.20.6",
"#babel/preset-typescript": "^7.16.5",
"#commitlint/cli": "^17.0.3",
"#commitlint/config-conventional": "^17.0.3",
"babel-jest": "~26.6.3",
"babel-loader": "^8.2.2",
"babel-plugin-transform-flow-strip-types": "^6.22.0",
"babel-preset-expo": "8.3.0",
"commitizen": "^4.2.4",
"cz-conventional-changelog": "3.3.0",
"eslint": "^7.32.0",
"eslint-config-airbnb": "^18.2.1",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.24.2",
"eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-react": "^7.26.0",
"husky": "^8.0.0",
"jest": "~26.6.3",
"metro-react-native-babel-preset": "^0.73.4",
"prettier": "^2.4.1",
"react-native-bundle-visualizer": "^2.2.1",
"react-test-renderer": "17.0.1"
},
"jest": {
"preset": "react-native"
}
}
Unfortunately, I've had the same issue and so I stumbled over your question. After some hours I found the problem and the solution.
In my case the issue happened when I upgraded jest from 27 to 28 (https://jestjs.io/docs/28.x/upgrading-to-jest28) because of this change:
Babel config
babel-jest now passes root: config.rootDir to Babel when resolving configuration. This improves compatibility when using projects with differing configuration, but
it might mean your babel config isn't picked up in the same way anymore. You can override this option by passing options to babel-jest in your configuration.
My babel.config.js was located in my react native application root .\babel.config.js but my .\jest.config.js file defined as root (to search for the tests): rootDir: "src". With the change from 27 to 28 the babel.config.js file was not longer found because babel-jest searched in ./src/babel.config.js and thus exactly the same error occurred like you described above:
SyntaxError: /node_modules/#react-native/polyfills/error-guard.js: Missing semicolon. (14:4)
because babel no longer transpiled the error-guard.js file.
As you have still jest 26 (in your package.json) your case might be different - but the problem is that your babel.config.js file is not or no longer found and thus babel-jest is no longer transpiling any file.
Not sure if this helps you - I used the following solution:
Create a new file ./babel-jest.js with the content
module.exports = require("babel-jest").createTransformer({
rootMode: "upward",
})
Reference this in .\jest.config.js like:
transform: {
"^.+\\.jsx?$": "../babel-jest.js",
},
Now, instead of babel-jest directly the new transformer from .\src\..\babe-jest.js is called including the option to search for the babel.config.js file upwards (and then finally finding it in .\babel.config.js just one level above).
This solution is also described here:
Babel: root programmatic options
and here
https://github.com/facebook/jest/issues/8006
There are other proposals to use:
transform: {
'^.+\\.(js|jsx|ts|tsx)$': ['babel-jest', { rootMode: 'upward' }],
},
in
https://github.com/facebook/jest/issues/8006
and even on the jest page it self
https://jestjs.io/docs/configuration#transform-objectstring-pathtotransformer--pathtotransformer-object
but unfortunately this was not working for me.
There is another option you can give a try (described also in https://github.com/facebook/jest/issues/8006).
You can create a babel.config.js file in the root for your tests and reference the original file via
module.exports = require('../babel.config.js');
Hope this helps a bit.

What could be wrong with the Vue 3 compat build setup?

TLDR: custom events ($listeners) won't be automatically binded in the vue 3 compat build. It is as if all the components would have inheritAttrs: false (although $attrs will be binded and it doesn't include class/style either as the docs say it would)
I followed the official vue 3 migration guide with the compat build, it should've been relatively easy to migrate, however it seems a bit harder as expected. So I added the following code to the vue.config.js:
// Vue 2 => Vue 3 migration config
config.resolve.alias.set('vue', '#vue/compat');
config.module
.rule('vue')
.use('vue-loader')
.tap((options) => ({
...options,
compilerOptions: {
compatConfig: {
MODE: 3,
},
},
}));
Most of the work is already done, however I realised that none of the listeners seems to be working. After some investigation I found out that the $listeners object won't be automatically binded as they should be. They aren't included for some reason in the $attrs object neither will they be inherited (I guess they are related).
I tried INSTANCE_LISTENERS: false, option with both false and true values, unfortunately neither seemed to work. Now the only option I can see right now is adding v-on="$listeners" to all components that may need to bind any events. This is obviously not a good solution, it is hacky and they are also removed in vue 3 completely but I couldn't think of another solution. Did anybody else experience the same and know maybe a better solution for this?
Thanks for your help in advance!
EDIT:
I thought maybe sharing the dependencies could help in detecting the issue so here they are:
"dependencies": {
"#apollo/client": "^3.5.5",
"#datadog/browser-logs": "^2.17.0",
"#datadog/browser-rum": "^2.17.0",
"#popperjs/core": "^2.10.1",
"#rd-internal/rd-vue-gtm": "^1.1.0",
"#vue/apollo-option": "^4.0.0-alpha.15",
"#vue/compat": "^3.2.23",
"#vue/runtime-dom": "^3.2.23",
"apollo-cache-inmemory": "^1.6.6",
"apollo-client": "^2.6.10",
"apollo-link": "^1.2.14",
"apollo-link-schema": "^1.2.5",
"apollo-upload-client": "^14.1.3",
"bootstrap": "^5.1.0",
"bootstrap-vue": "^2.21.2",
"chart.js": "^2.9.4",
"core-js": "^3.17.2",
"dayjs": "^1.10.6",
"graphql": "^15.7.2",
"graphql-tag": "^2.12.6",
"graphql-tools": "^4.0.7",
"intersection-observer": "^0.12.0",
"loader-utils": "^2.0.0",
"lodash.clonedeep": "^4.5.0",
"lodash.debounce": "^4.0.8",
"lodash.get": "^4.4.2",
"lodash.isequal": "^4.5.0",
"lodash.merge": "^4.6.2",
"lodash.set": "^4.3.2",
"lodash.some": "^4.6.0",
"normalize.css": "^8.0.1",
"papaparse": "^5.3.1",
"tinycolor2": "^1.4.2",
"v-tooltip": "^2.1.3",
"vue": "^3.2.23",
"vue-apollo": "^3.0.7",
"vue-chartjs": "^3.5.1",
"vue-ctk-date-time-picker": "^2.5.0",
"vue-i18n": "^9.2.0-beta.22",
"vue-meta": "^2.4.0",
"vue-router": "^4.0.12",
"vuelidate": "^0.7.6",
"vuelidate-error-extractor": "^2.4.1",
"whatwg-fetch": "^3.6.2"
},
"devDependencies": {
"#intlify/eslint-plugin-vue-i18n": "^1.2.0",
"#jagi/jest-transform-graphql": "^1.0.2",
"#testing-library/jest-dom": "^5.14.1",
"#typescript-eslint/eslint-plugin": "^4.30.0",
"#typescript-eslint/parser": "^4.30.0",
"#vue/cli-plugin-babel": "^4.5.15",
"#vue/cli-plugin-eslint": "^4.5.15",
"#vue/cli-plugin-typescript": "^4.5.15",
"#vue/cli-plugin-unit-jest": "^4.5.15",
"#vue/cli-service": "^4.5.15",
"#vue/compiler-sfc": "^3.2.23",
"#vue/eslint-config-airbnb": "^5.3.0",
"#vue/eslint-config-typescript": "^7.0.0",
"#vue/test-utils": "^1.2.2",
"babel-eslint": "^10.1.0",
"babel-jest": "^27.1.0",
"casual-browserify": "^1.5.19-2",
"change-case": "^4.1.2",
"eslint": "^7.32.0",
"eslint-plugin-import": "^2.24.2",
"eslint-plugin-sonarjs": "^0.10.0",
"eslint-plugin-unicorn": "^35.0.0",
"eslint-plugin-vue": "^7.17.0",
"eslint-plugin-vue-scoped-css": "^1.3.0",
"full-icu": "^1.3.4",
"glob": "^7.1.7",
"html-webpack-plugin": "^4.5.1",
"hygen": "^6.1.0",
"inflection": "^1.13.1",
"jest-junit": "^12.2.0",
"lint-staged": "^11.1.2",
"node-sass": "^6.0.1",
"sass-loader": "^10.2.0",
"sockjs-client": "^1.5.2",
"style-resources-loader": "^1.4.1",
"stylelint": "^13.13.1",
"stylelint-config-standard": "^22.0.0",
"stylelint-declaration-use-variable": "^1.7.3",
"stylelint-no-unsupported-browser-features": "^5.0.1",
"stylelint-order": "^4.1.0",
"stylelint-scss": "^3.20.1",
"ts-jest": "^24.3.0",
"typescript": "^4.4.2",
"vue-cli-plugin-webpack-bundle-analyzer": "~4.0.0",
"vue-composition-test-utils": "^1.0.3"
},

Jest tests break after upgrading to react-native 0.58

all my test using react-test-renderer or enzyme break after upgrading to react-native 0.58.6
Errors I got are e.g.
TypeError: Cannot read property 'default' of undefined
Expected value to be truthy, instead received undefined
TypeError: Cannot read property 'dive' of undefined
TypeError: Cannot read property 'find' of undefined
Has someone experienced a similar behaviour? I tried different versions of enzyme, or jest but hat no luck.
my dependencies:
"dependencies": {
"firebase": "^5.9.0",
"prop-types": "^15.6.0",
"react": "16.6.3",
"react-native": "0.58.6",
"react-native-code-push": "^5.5.2",
"react-native-image-picker": "^0.28.0",
"react-native-keychain": "^3.0.0",
"react-native-paper": "^1.12.0",
"react-native-vector-icons": "^6.4.1",
"react-navigation": "^1.6.1",
"react-redux": "^5.0.7",
"redux": "^3.7.2",
"redux-logger": "^3.0.6",
"redux-thunk": "^2.3.0",
"yarn": "^1.9.4"
},
"devDependencies": {
"babel-eslint": "^8.2.2",
"babel-jest": "^23.6.0",
"enzyme": "^3.8.0",
"enzyme-adapter-react-16": "^1.7.1",
"eslint": "^4.18.1",
"eslint-config-airbnb": "^16.1.0",
"eslint-plugin-import": "^2.7.0",
"eslint-plugin-jsx-a11y": "^6.0.3",
"eslint-plugin-react": "^7.12.3",
"husky": "^0.14.3",
"jest": "^23.6.0",
"jest-fetch-mock": "^2.1.0",
"lint-staged": "^7.2.2",
"metro-react-native-babel-preset": "^0.53.1",
"prettier": "1.10.2",
"react-dom": "^16.7.0",
"react-test-renderer": "^16.7.0",
"redux-mock-store": "^1.5.3"
},
"jest": {
"preset": "react-native",
"setupFiles": ["<rootDir>/tests/setup.js"],
"collectCoverageFrom": ["app/**/*.js", "!app/components/index.js"],
"transform": {
"^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js"
},
"transformIgnorePatterns": [
"node_modules/(?!(jest-)?react-native|react-navigation)"
]
}
reproducer
https://github.com/defrian/TestProject.git
I solved the issue by removing
"transform": {
"^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js"
},
from the package.json
solution found here https://github.com/facebook/react-native/issues/22175#issuecomment-474786382
i also added/updated some dev dependencies:
"babel-core": "^7.0.0-bridge.0", (new)
"babel-jest": "24.5.0", (from "^23.6.0")
"enzyme": "^3.9.0", (from "^3.8.0")
"enzyme-adapter-react-16": "^1.11.2", (from "^1.7.1")
"jest": "^24.5.0", (from "^23.6.0")
"react-test-renderer": "^16.8.4", (from "^16.7.0")

Error: Plugin/Presets are not allowed to export objects, only functions. After update to react native 0.57

I am trying to upgrade my app from react native 0.56 to 0.57.3, but I'm getting the following issue when my app is loading:
error: bundling failed: Error: Plugin/Preset files are not allowed to export objects, only functions. In /Users/otaviogaiao/Projetos/citsmart/citsmart-itsm-mobile-field-service/node_modules/babel-preset-react-native/index.js
at createDescriptor (/Users/otaviogaiao/Projetos/citsmart/citsmart-itsm-mobile-field-service/node_modules/#babel/core/lib/config/config-descriptors.js:178:11)
at items.map (/Users/otaviogaiao/Projetos/citsmart/citsmart-itsm-mobile-field-service/node_modules/#babel/core/lib/config/config-descriptors.js:109:50)
at Array.map (<anonymous>)
at createDescriptors (/Users/otaviogaiao/Projetos/citsmart/citsmart-itsm-mobile-field-service/node_modules/#babel/core/lib/config/config-descriptors.js:109:29)
at createPresetDescriptors (/Users/otaviogaiao/Projetos/citsmart/citsmart-itsm-mobile-field-service/node_modules/#babel/core/lib/config/config-descriptors.js:101:10)
at presets (/Users/otaviogaiao/Projetos/citsmart/citsmart-itsm-mobile-field-service/node_modules/#babel/core/lib/config/config-descriptors.js:47:19)
at mergeChainOpts (/Users/otaviogaiao/Projetos/citsmart/citsmart-itsm-mobile-field-service/node_modules/#babel/core/lib/config/config-chain.js:315:26)
at /Users/otaviogaiao/Projetos/citsmart/citsmart-itsm-mobile-field-service/node_modules/#babel/core/lib/config/config-chain.js:278:7
at mergeExtendsChain (/Users/otaviogaiao/Projetos/citsmart/citsmart-itsm-mobile-field-service/node_modules/#babel/core/lib/config/config-chain.js:294:21)
I have tried deleting node_modules, cleaning the build folder, etc.
My package.json file is:
"dependencies": {
"axios": "^0.18.0",
"date-fns": "^1.29.0",
"lodash.intersection": "^4.4.0",
"lodash.isempty": "^4.4.0",
"lodash.pick": "^4.4.0",
"normalizr": "^3.2.4",
"prop-types": "^15.6.1",
"react": "16.5",
"react-native": "0.57.3",
"react-native-actionsheet": "^2.4.2",
"react-native-code-push": "^5.4.2",
"react-native-datepicker": "^1.7.2",
"react-native-elements": "^0.19.1",
"react-native-geolocation-service": "^1.1.0",
"react-native-i18n": "^2.0.12",
"react-native-image-picker": "^0.26.10",
"react-native-map-link": "^2.0.1",
"react-native-maps": "git+https://github.com/otaviogaiao/react-native-maps#master",
"react-native-maps-super-cluster": "git+https://github.com/otaviogaiao/react-native-maps-super-cluster.git#1.4.2",
"react-native-material-dropdown": "^0.11.1",
"react-native-modal": "^6.5.0",
"react-native-nested-scroll-view": "^7.0.0",
"react-native-responsive-screen": "^1.1.6",
"react-native-splash-screen": "3.0.9",
"react-native-sqlite-storage": "^3.3.5",
"react-native-text-input-mask": "^0.7.0",
"react-native-vector-icons": "^4.6.0",
"react-navigation": "2.0.4",
"react-navigation-redux-helpers": "1.1.2",
"react-redux": "^5.0.7",
"redux": "^4.0.0",
"redux-logger": "^3.0.6",
"redux-persist": "^5.10.0",
"redux-saga": "^0.16.0",
"remove-accents": "^0.4.2",
"rn-fetch-blob": "^0.10.13",
"url": "^0.11.0"
},
"devDependencies": {
"#babel/core": "^7.0.0",
"babel-core": "^7.0.0-bridge.0",
"babel-eslint": "^8.2.3",
"babel-jest": "22.4.4",
"eslint": "^4.19.1",
"eslint-config-airbnb": "^16.1.0",
"eslint-plugin-import": "^2.12.0",
"eslint-plugin-jsx-a11y": "^6.0.3",
"eslint-plugin-prettier": "^2.6.0",
"eslint-plugin-react": "^7.8.2",
"jest": "22.4.4",
"metro-react-native-babel-preset": "^0.45.0",
"prettier": "1.12.1",
"prettier-eslint": "^8.8.1",
"react-test-renderer": "16.5"
},
and this is my .babelrc file:
{
"presets": [
"react-native",
"module:metro-react-native-babel-preset"
],
"env": {
"development": {
"plugins": [
"#babel/plugin-transform-react-jsx-source"
]
}
},
"retainLines": true
}
I looked around for answers, but couldn't find anything that helped me.
Any help is appreciated.

expo does not contain an export named WebBrowser

I have the basic example of using Expo.WebBrowser and it gives the error:
import { WebBrowser } from 'expo'
'expo' does not contain an export named 'WebBrowser'
Dependencies:
"buffer": "^5.1.0",
"color-hash": "^1.0.3",
"debug": "^3.1.0",
"eventemitter2": "^5.0.1",
"expo": "^27.0.2",
"mobx": "^4.3.0",
"mobx-react": "^5.1.2",
"moment": "^2.22.1",
"mqtt": "^2.18.0",
"react": "^16.2.0",
"react-app-rewire-mobx": "^1.0.8",
"react-dom": "^16.2.0",
"react-native": "^0.52.2",
"react-native-elements": "^0.19.1",
"react-native-render-html": "^3.10.0",
"react-native-side-menu": "^1.1.3",
"react-native-storage": "^0.2.2",
"react-native-swipeout": "^2.3.3",
"react-native-web": "^0.3.2",
"react-native-web-webview": "^0.2.5",
"react-router-native": "^4.2.0",
"react-scripts": "1.1.0",
"svgs": "^3.1.2"
Looks like in a browser environment WebBrowser is not available.
Using 'react-native-web' causes import { WebBrowser } from 'expo' to fail.