diff --git a/.codeclimate.yml b/.codeclimate.yml index 73434eafa5..2baccd0f1a 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -25,7 +25,7 @@ checks: plugins: eslint: enabled: true - channel: 'eslint-7' + channel: 'eslint-8' config: config: .eslintrc.js checks: diff --git a/.eslintrc.js b/.eslintrc.js index 6a90c14a43..4cd1d8f504 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -4,7 +4,7 @@ const rules = require('./uwazi-eslint-rules'); module.exports = { extends: ['airbnb', 'plugin:cypress/recommended', 'plugin:storybook/recommended'], env: { browser: true, node: true, jest: true, jasmine: true, es6: true, 'cypress/globals': true }, - parserOptions: { ecmaVersion: 2020 }, + parserOptions: { ecmaVersion: 2022 }, plugins: [ 'react', 'jest', diff --git a/app/react/PDF/PDFJS.js b/app/react/PDF/PDFJS.js index 1551a5c762..3ec1e8eef1 100644 --- a/app/react/PDF/PDFJS.js +++ b/app/react/PDF/PDFJS.js @@ -1,23 +1,26 @@ /* eslint-disable import/no-mutable-exports, global-require, prefer-destructuring */ +import * as pdfjs from 'pdfjs-dist'; +import { EventBus } from 'pdfjs-dist/web/pdf_viewer.mjs'; import { isClient } from 'app/utils'; -import { EventBus } from 'pdfjs-dist/web/pdf_viewer'; let PDFJS = {}; let pdfjsLib = {}; -if (isClient) { - require('../../../node_modules/pdfjs-dist/web/pdf_viewer.css'); - PDFJS = require('../../../node_modules/pdfjs-dist/web/pdf_viewer.js'); +const pdfjsLoader = async () => { + if (isClient) { + import('pdfjs-dist/web/pdf_viewer.css'); + PDFJS = await import('pdfjs-dist/web/pdf_viewer.mjs'); - if (process.env.HOT || process.env.NODE_ENV === 'test') { - pdfjsLib = require('pdfjs-dist'); - } else { - pdfjsLib = require('pdfjs-dist/webpack'); + if (process.env.HOT || process.env.NODE_ENV === 'test') { + pdfjsLib = pdfjs; + pdfjsLib.GlobalWorkerOptions.workerSrc = await import('pdfjs-dist/build/pdf.worker.min.mjs'); + } else { + pdfjsLib = await import('pdfjs-dist/webpack.mjs'); + } } +}; - pdfjsLib.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/build/pdf.worker.entry'); -} +await pdfjsLoader(); export default { ...PDFJS, ...pdfjsLib }; - export { EventBus }; diff --git a/app/react/V2/Components/PDFViewer/pdfjs.ts b/app/react/V2/Components/PDFViewer/pdfjs.ts index 8ff3aa88d4..d204810c61 100644 --- a/app/react/V2/Components/PDFViewer/pdfjs.ts +++ b/app/react/V2/Components/PDFViewer/pdfjs.ts @@ -1,22 +1,27 @@ -/* eslint-disable global-require */ import * as pdfJsDist from 'pdfjs-dist'; -import * as viewer from 'pdfjs-dist/web/pdf_viewer'; +import * as viewer from 'pdfjs-dist/web/pdf_viewer.mjs'; import 'pdfjs-dist/web/pdf_viewer.css'; -let pdfjs; +let pdfjs = pdfJsDist; const PDFJSViewer = viewer; const { EventBus } = viewer; const CMAP_URL = 'legacy_character_maps'; -if (process.env.HOT || process.env.NODE_ENV === 'test') { - //this is to trigger pdfjs-dist fake worker instantiation in non production environments - const fakeWorker = require('pdfjs-dist//build/pdf.worker.entry.js'); - pdfjs = pdfJsDist; - pdfjs.GlobalWorkerOptions.workerSrc = fakeWorker; -} else { - pdfjs = require('pdfjs-dist/webpack'); -} +const pdfjsLoader = async () => { + if (process.env.HOT || process.env.NODE_ENV === 'test') { + //@ts-ignore + //this is to trigger pdfjs-dist fake worker instantiation in non production environments + const fakeWorker = await import('pdfjs-dist/build/pdf.worker.min.mjs'); + pdfjs.GlobalWorkerOptions.workerSrc = fakeWorker; + } else { + //@ts-ignore + //webpack bundled version for production, types are not needed. + pdfjs = await import('pdfjs-dist/webpack.mjs'); + } +}; -const PDFJS: typeof pdfjs = pdfjs; +await pdfjsLoader(); + +const PDFJS = pdfjs; export { PDFJS, PDFJSViewer, EventBus, CMAP_URL }; diff --git a/e2e/regression_suites/entities.test.ts b/e2e/regression_suites/entities.test.ts index f48071e604..2f2b8ceed9 100644 --- a/e2e/regression_suites/entities.test.ts +++ b/e2e/regression_suites/entities.test.ts @@ -49,8 +49,9 @@ describe('Homepage entities', () => { it('should display entity relationship page', async () => { await page.goto(`${host}/entity/7amlebw43dw8kt9`); + await disableTransitions(); + await page.waitForSelector('div.page-wrapper'); await expect(page).toClick('div[aria-label="Relationships"]'); - await page.waitForSelector('.relationships-graph'); await testSelectorShot('main.app-content', { threshold: 0.08 }); }); diff --git a/package.json b/package.json index 7e273272ab..6947513b64 100644 --- a/package.json +++ b/package.json @@ -180,7 +180,7 @@ "otplib": "^11.0.1", "passport": "^0.6.0", "passport-local": "^1.0.0", - "pdfjs-dist": "^3.8.162", + "pdfjs-dist": "^4.0.379", "postcss-loader": "^7.3.3", "postcss-prefix-selector": "^1.16.0", "prom-client": "^14.2.0", diff --git a/tsconfig.json b/tsconfig.json index cd7cfc1d4d..5d5de96c3b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,8 +6,8 @@ "useUnknownInCatchVariables": false, "allowJs": true, "noEmit": true, - "module": "commonjs", - "target": "es2020", + "module": "ES2022", + "target": "es2022", "jsx": "react", "moduleResolution": "node", "isolatedModules": true, diff --git a/yarn.lock b/yarn.lock index ee2e524b3d..db4b8d12ee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17286,10 +17286,10 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -pdfjs-dist@^3.8.162: - version "3.8.162" - resolved "https://registry.yarnpkg.com/pdfjs-dist/-/pdfjs-dist-3.8.162.tgz#aff9026aa7fc0dffd62fba1111b64207f861343d" - integrity sha512-Do0Lpuk1ItcNnIPr9MM+/jnnMOb4i6asRX7gVnL6fFUW1QPC7ERfHQkbhF7jkAri1o6GxttX0Yn7ZhOmpFUeGA== +pdfjs-dist@^4.0.379: + version "4.0.379" + resolved "https://registry.yarnpkg.com/pdfjs-dist/-/pdfjs-dist-4.0.379.tgz#e2e967255d63c9caf0b6fe944e99ec9a746649da" + integrity sha512-6H0Gv1nna+wmrr3CakaKlZ4rbrL8hvGIFAgg4YcoFuGC0HC4B2DVjXEGTFjJEjLlf8nYi3C3/MYRcM5bNx0elA== optionalDependencies: canvas "^2.11.2" path2d-polyfill "^2.0.1"