diff --git a/frontend/before-tests.js b/frontend/before-tests.js index 10fe31fc6a5..4e06289506a 100644 --- a/frontend/before-tests.js +++ b/frontend/before-tests.js @@ -2,8 +2,35 @@ import { configure } from 'enzyme'; import * as Adapter from '@wojtekmaj/enzyme-adapter-react-17'; +import { URLSearchParams } from 'url'; +import fetch, { Headers } from 'node-fetch'; -import 'url-search-params-polyfill'; +// FIXME: Remove when jest is updated to at least 25.1.0 -- see https://github.com/jsdom/jsdom/issues/1555 +Element.prototype.closest = function (this, selector) { + // eslint-disable-next-line consistent-this + let el = this; + while (el) { + if (el.matches(selector)) { + return el; + } + el = el.parentElement; + } + return null; +}; +// FIXME: Remove when jest is updated to at least 25 +Object.defineProperty(window, 'Headers', { + value: Headers, + writable: true, +}); +// FIXME: Remove when jest is updated to at least 22 +Object.defineProperty(window, 'URLSearchParams', { + value: URLSearchParams, + writable: true, +}); +Object.defineProperty(window, 'fetch', { + value: fetch, + writable: true, +}); // http://airbnb.io/enzyme/docs/installation/index.html#working-with-react-16 configure({ adapter: new Adapter() }); diff --git a/frontend/package.json b/frontend/package.json index c3daebd3610..2cb927b0c60 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -153,7 +153,6 @@ "@patternfly/react-user-feedback": "^6.1.0-prerelease.1", "@patternfly/react-virtualized-extension": "^6.0.0", "@rjsf/core": "^2.5.1", - "abort-controller": "3.0.0", "ajv": "^6.12.3", "apollo-cache-inmemory": "^1.6.5", "apollo-client": "^2.6.8", @@ -178,7 +177,7 @@ "i18next-v4-format-converter": "^1.0.3", "immutable": "3.x", "istextorbinary": "^9.5.0", - "js-base64": "^2.5.1", + "js-base64": "^3.7.7", "js-yaml": "^3.13.1", "json-schema": "^0.3.0", "lodash-es": "^4.17.21", @@ -215,11 +214,8 @@ "semver": "6.x", "showdown": "1.8.6", "subscriptions-transport-ws": "^0.9.16", - "text-encoding": "0.x", "typesafe-actions": "^4.2.1", - "url-search-params-polyfill": "2.x", "victory": "^37.3.6", - "whatwg-fetch": "2.x", "xterm": "^4.10.0", "xterm-addon-attach": "0.6.0", "xterm-addon-fit": "0.5.0", @@ -258,8 +254,6 @@ "@types/semver": "^6.0.0", "@types/showdown": "1.9.4", "@wojtekmaj/enzyme-adapter-react-17": "^0.4.1", - "acorn": "^7.0.0", - "acorn-jsx": "5.2.0", "axe-core": "^4.10.2", "babel-loader": "^8.2.1", "browser-env": "3.x", diff --git a/frontend/packages/console-dynamic-plugin-sdk/scripts/package-definitions.ts b/frontend/packages/console-dynamic-plugin-sdk/scripts/package-definitions.ts index de93130b41b..aa31e0371a0 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/scripts/package-definitions.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/scripts/package-definitions.ts @@ -124,7 +124,7 @@ export const getCorePackage: GetPackageDefinition = ( ...parseSharedModuleDeps(rootPackage, missingDepCallback), ...parseDeps( rootPackage, - ['classnames', 'immutable', 'reselect', 'typesafe-actions', 'whatwg-fetch'], + ['classnames', 'immutable', 'reselect', 'typesafe-actions'], missingDepCallback, ), ...parseDepsAs(rootPackage, { 'lodash-es': 'lodash' }, missingDepCallback), diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/utils/fetch/console-fetch.ts b/frontend/packages/console-dynamic-plugin-sdk/src/utils/fetch/console-fetch.ts index 788c4349752..507915a5bf1 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/utils/fetch/console-fetch.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/utils/fetch/console-fetch.ts @@ -1,5 +1,4 @@ import * as _ from 'lodash'; -import 'whatwg-fetch'; import { getUtilsConfig } from '../../app/configSetup'; import { setAdmissionWebhookWarning } from '../../app/core/actions'; import storeHandler from '../../app/storeHandler'; diff --git a/frontend/packages/git-service/src/services/bitbucket-service.ts b/frontend/packages/git-service/src/services/bitbucket-service.ts index 2527c655374..ef564ef468a 100644 --- a/frontend/packages/git-service/src/services/bitbucket-service.ts +++ b/frontend/packages/git-service/src/services/bitbucket-service.ts @@ -1,6 +1,5 @@ import { Base64 } from 'js-base64'; import * as ParseBitbucketUrl from 'parse-bitbucket-url'; -import 'whatwg-fetch'; import { consoleFetchJSON } from '@console/dynamic-plugin-sdk/src/lib-core'; import { DevConsoleEndpointResponse } from '@console/shared/src'; import { diff --git a/frontend/packages/git-service/src/services/gitea-service.ts b/frontend/packages/git-service/src/services/gitea-service.ts index 84b2f821574..05cfebd070e 100644 --- a/frontend/packages/git-service/src/services/gitea-service.ts +++ b/frontend/packages/git-service/src/services/gitea-service.ts @@ -1,7 +1,6 @@ import * as GitUrlParse from 'git-url-parse'; import { Base64 } from 'js-base64'; import * as _ from 'lodash'; -import 'whatwg-fetch'; import { consoleFetchJSON } from '@console/dynamic-plugin-sdk/src/lib-core'; import { BranchList, diff --git a/frontend/packages/pipelines-plugin/src/components/quicksearch/__tests__/PipelineQuickSearchVersionDropdown.spec.tsx b/frontend/packages/pipelines-plugin/src/components/quicksearch/__tests__/PipelineQuickSearchVersionDropdown.spec.tsx index 9247cd1379c..2faed2e5c6a 100644 --- a/frontend/packages/pipelines-plugin/src/components/quicksearch/__tests__/PipelineQuickSearchVersionDropdown.spec.tsx +++ b/frontend/packages/pipelines-plugin/src/components/quicksearch/__tests__/PipelineQuickSearchVersionDropdown.spec.tsx @@ -13,19 +13,6 @@ import PipelineQuickSearchVersionDropdown from '../PipelineQuickSearchVersionDro configure({ testIdAttribute: 'data-test' }); -// FIXME Remove this code when jest is updated to at least 25.1.0 -- see https://github.com/jsdom/jsdom/issues/1555 -if (!Element.prototype.closest) { - Element.prototype.closest = function (this: Element, selector: string) { - // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this - let el: Element | null = this; - while (el) { - if (el.matches(selector)) return el; - el = el.parentElement; - } - return null; - }; -} - describe('pipelineQuickSearchVersionDropdown', () => { const onChange = jest.fn(); const versionDropdownProps = { diff --git a/frontend/packages/pipelines-plugin/src/components/quicksearch/__tests__/PipelineQuicksearchDetails.spec.tsx b/frontend/packages/pipelines-plugin/src/components/quicksearch/__tests__/PipelineQuicksearchDetails.spec.tsx index 72b6c4005dd..8285cb952d6 100644 --- a/frontend/packages/pipelines-plugin/src/components/quicksearch/__tests__/PipelineQuicksearchDetails.spec.tsx +++ b/frontend/packages/pipelines-plugin/src/components/quicksearch/__tests__/PipelineQuicksearchDetails.spec.tsx @@ -28,19 +28,6 @@ jest.mock('@console/shared/src/hooks/useTelemetry', () => ({ useTelemetry: () => {}, })); -// FIXME Remove this code when jest is updated to at least 25.1.0 -- see https://github.com/jsdom/jsdom/issues/1555 -if (!Element.prototype.closest) { - Element.prototype.closest = function (this: Element, selector: string) { - // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this - let el: Element | null = this; - while (el) { - if (el.matches(selector)) return el; - el = el.parentElement; - } - return null; - }; -} - beforeEach(() => { coFetchMock.mockClear(); coFetchMock.mockReturnValue( diff --git a/frontend/packages/topology/src/filters/__tests__/FilterDropdown.spec.tsx b/frontend/packages/topology/src/filters/__tests__/FilterDropdown.spec.tsx index 50eef2f03bf..1985a7d5ec4 100644 --- a/frontend/packages/topology/src/filters/__tests__/FilterDropdown.spec.tsx +++ b/frontend/packages/topology/src/filters/__tests__/FilterDropdown.spec.tsx @@ -13,19 +13,6 @@ jest.mock('@console/shared/src/hooks/useTelemetry', () => ({ useTelemetry: () => {}, })); -// FIXME Remove this code when jest is updated to at least 25.1.0 -- see https://github.com/jsdom/jsdom/issues/1555 -if (!Element.prototype.closest) { - Element.prototype.closest = function (this: Element, selector: string) { - // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this - let el: Element | null = this; - while (el) { - if (el.matches(selector)) return el; - el = el.parentElement; - } - return null; - }; -} - describe(FilterDropdown.displayName, () => { let dropdownFilter: DisplayFilters; let onChange: () => void; diff --git a/frontend/packages/topology/src/filters/__tests__/KindFilterDropdown.spec.tsx b/frontend/packages/topology/src/filters/__tests__/KindFilterDropdown.spec.tsx index c36e5eb79e0..88ae6711a3a 100644 --- a/frontend/packages/topology/src/filters/__tests__/KindFilterDropdown.spec.tsx +++ b/frontend/packages/topology/src/filters/__tests__/KindFilterDropdown.spec.tsx @@ -4,19 +4,6 @@ import { DisplayFilters, TopologyDisplayFilterType } from '../../topology-types' import { DEFAULT_TOPOLOGY_FILTERS } from '../const'; import KindFilterDropdown from '../KindFilterDropdown'; -// FIXME Remove this code when jest is updated to at least 25.1.0 -- see https://github.com/jsdom/jsdom/issues/1555 -if (!Element.prototype.closest) { - Element.prototype.closest = function (this: Element, selector: string) { - // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this - let el: Element | null = this; - while (el) { - if (el.matches(selector)) return el; - el = el.parentElement; - } - return null; - }; -} - describe(KindFilterDropdown.displayName, () => { let dropdownFilter: DisplayFilters; let onChange: () => void; diff --git a/frontend/public/actions/ui.ts b/frontend/public/actions/ui.ts index 34cf5fcfbaf..ee8052391e6 100644 --- a/frontend/public/actions/ui.ts +++ b/frontend/public/actions/ui.ts @@ -215,17 +215,7 @@ export const setActiveNamespace = (namespace: string = '') => { }; export const startImpersonate = (kind: string, name: string) => async (dispatch, getState) => { - let textEncoder; - try { - textEncoder = new TextEncoder(); - } catch (e) { - // eslint-disable-next-line no-console - console.info('Browser lacks TextEncoder. Falling back to polyfill.', e); - } - - if (!textEncoder) { - textEncoder = await import('text-encoding').then((module) => new module.TextEncoder('utf-8')); - } + const textEncoder = new TextEncoder(); const imp = getImpersonate(getState()); if ((imp?.name && imp.name !== name) || (imp?.kind && imp.kind !== kind)) { @@ -238,9 +228,9 @@ export const startImpersonate = (kind: string, name: string) => async (dispatch, * Subprotocols are comma-separated, so commas aren't allowed. Also "=" * and "/" aren't allowed, so base64 but replace illegal chars. */ - let encodedName = textEncoder.encode(name); - encodedName = Base64.encode(String.fromCharCode.apply(String, encodedName)); - encodedName = encodedName.replace(/=/g, '_').replace(/\//g, '-'); + const encodedName = Base64.encode(String.fromCharCode.apply(String, textEncoder.encode(name))) + .replace(/=/g, '_') + .replace(/\//g, '-'); let subprotocols; if (kind === 'User') { diff --git a/frontend/public/components/app.jsx b/frontend/public/components/app.jsx index 913d5926746..5a8ed43aecb 100644 --- a/frontend/public/components/app.jsx +++ b/frontend/public/components/app.jsx @@ -7,8 +7,6 @@ import { linkify } from 'react-linkify'; import { Provider, useSelector, useDispatch } from 'react-redux'; import { Router } from 'react-router-dom'; import { useParams, useLocation, CompatRouter, Routes, Route } from 'react-router-dom-v5-compat'; -// AbortController is not supported in some older browser versions -import 'abort-controller/polyfill'; import store, { applyReduxExtensions } from '../redux'; import { useTranslation } from 'react-i18next'; import { coFetchJSON, appInternalFetch } from '../co-fetch'; @@ -58,7 +56,7 @@ import { useFlag } from '@console/shared/src/hooks/flag'; import Lightspeed from '@console/app/src/components/lightspeed/Lightspeed'; import { ThemeProvider } from './ThemeProvider'; import { init as initI18n } from '../i18n'; -import { Page, SkipToContent, AlertVariant } from '@patternfly/react-core'; // PF4 Imports +import { Page, SkipToContent, AlertVariant } from '@patternfly/react-core'; import { AuthenticationErrorPage } from './error'; import '../vendor.scss'; import '../style.scss'; @@ -67,8 +65,6 @@ import '@patternfly/quickstarts/dist/quickstarts.min.css'; const PF_BREAKPOINT_MD = 768; const PF_BREAKPOINT_XL = 1200; const NOTIFICATION_DRAWER_BREAKPOINT = 1800; -// Edge lacks URLSearchParams -import 'url-search-params-polyfill'; import { withoutSensitiveInformations, getTelemetryTitle } from './utils/telemetry'; import { graphQLReady } from '../graphql/client'; import { AdmissionWebhookWarningNotifications } from '@console/app/src/components/admission-webhook-warnings/AdmissionWebhookWarningNotifications'; diff --git a/frontend/public/components/utils/__tests__/single-typeahead-dropdown.spec.tsx b/frontend/public/components/utils/__tests__/single-typeahead-dropdown.spec.tsx index 255ccf46919..6ed2c2df478 100644 --- a/frontend/public/components/utils/__tests__/single-typeahead-dropdown.spec.tsx +++ b/frontend/public/components/utils/__tests__/single-typeahead-dropdown.spec.tsx @@ -3,21 +3,6 @@ import { SingleTypeaheadDropdown } from '../single-typeahead-dropdown'; import { act } from 'react-dom/test-utils'; import { Button, Select, SelectOption } from '@patternfly/react-core'; -// FIXME Remove this code when jest is updated to at least 25.1.0 -- see https://github.com/jsdom/jsdom/issues/1555 -if (!Element.prototype.closest) { - Element.prototype.closest = function (this: Element, selector: string) { - // eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this - let el: Element | null = this; - while (el) { - if (el.matches(selector)) { - return el; - } - el = el.parentElement; - } - return null; - }; -} - describe('SingleTypeaheadDropdown', () => { let onChange: jest.Mock; diff --git a/frontend/yarn.lock b/frontend/yarn.lock index df8a1ff6a17..510515899f8 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -3295,7 +3295,7 @@ abab@^2.0.0: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== -abort-controller@3.0.0, abort-controller@^3.0.0: +abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== @@ -3332,7 +3332,7 @@ acorn-globals@^4.3.0: acorn "^6.0.1" acorn-walk "^6.0.1" -acorn-jsx@5.2.0, acorn-jsx@^5.1.0: +acorn-jsx@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== @@ -11041,10 +11041,10 @@ jquery@3.5.1, jquery@^3.4.0: resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz#d7b4d08e1bfdb86ad2f1a3d039ea17304717abb5" integrity sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg== -js-base64@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" - integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== +js-base64@^3.7.7: + version "3.7.7" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.7.tgz#e51b84bf78fbf5702b9541e2cb7bfcb893b43e79" + integrity sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw== js-combinatorics@0.5.x: version "0.5.4" @@ -16426,10 +16426,6 @@ text-decoder@^1.1.0: dependencies: b4a "^1.6.4" -text-encoding@0.x: - version "0.6.4" - resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19" - text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -17100,11 +17096,6 @@ url-parse@^1.4.4, url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" -url-search-params-polyfill@2.x: - version "2.0.3" - resolved "https://registry.yarnpkg.com/url-search-params-polyfill/-/url-search-params-polyfill-2.0.3.tgz#466b451df7e707f9a0de601fa39b0a5816402dcd" - integrity sha512-DLQzhOippXPJOS+XJOwZGV5tILjGhIQEPbjEDAvTh5nWcZOpbGZG0xXj/lss+dAA1oC/8HYR5xFfC28TW0b+VQ== - url@^0.11.3: version "0.11.4" resolved "https://registry.yarnpkg.com/url/-/url-0.11.4.tgz#adca77b3562d56b72746e76b330b7f27b6721f3c" @@ -17975,7 +17966,7 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: dependencies: iconv-lite "0.4.24" -whatwg-fetch@2.0.4, whatwg-fetch@2.x: +whatwg-fetch@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==