You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2025/02/07 22:45:22 UTC
(superset) 02/05: more touchups...
This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a commit to branch replace-jest-enzyme
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 8db036382d1aea1f35e34a627ca1d8bae58f0b14
Author: Evan Rusackas <ev...@rusackas.com>
AuthorDate: Fri Feb 7 12:36:33 2025 -0700
more touchups...
---
superset-frontend/package-lock.json | 3571 ++------------------
superset-frontend/package.json | 5 +-
.../test/chart/components/SuperChartCore.test.tsx | 21 +-
superset-frontend/spec/helpers/setup.ts | 9 +-
superset-frontend/spec/helpers/shim.tsx | 2 +-
.../SqlLab/components/ResultSet/ResultSet.test.tsx | 34 +-
.../components/TableElement/TableElement.test.tsx | 2 +-
.../src/components/AuditInfo/ModifiedInfo.test.tsx | 2 +-
.../src/components/Card/Card.test.tsx | 13 +-
.../Chart/DrillBy/DrillByMenuItems.test.tsx | 56 +-
.../DrillDetail/DrillDetailMenuItems.test.tsx | 149 +-
.../Chart/DrillDetail/DrillDetailPane.test.tsx | 68 +-
.../src/components/GridTable/HeaderMenu.test.tsx | 2 +-
.../src/components/ListView/ListView.test.jsx | 14 +-
.../src/components/Pagination/Wrapper.test.tsx | 19 +-
.../src/components/Select/AsyncSelect.test.tsx | 24 +-
.../src/components/Table/utils/utils.test.ts | 15 +-
.../TableSelector/TableSelector.test.tsx | 108 +-
.../src/dashboard/components/Dashboard.test.jsx | 2 +-
.../src/dashboard/components/SliceAdder.test.tsx | 2 +-
.../SliceHeaderControls.test.tsx | 2 +-
.../components/dnd/DragDroppable.test.jsx | 4 +-
.../components/filterscope/FilterScope.test.tsx | 53 +-
.../components/gridComponents/Column.test.jsx | 4 +-
.../components/gridComponents/Header.test.jsx | 20 +-
.../components/gridComponents/Markdown.test.jsx | 28 +-
.../components/gridComponents/Row.test.jsx | 4 +-
.../components/gridComponents/Tab.test.jsx | 2 +-
.../new/DraggableNewComponent.test.jsx | 4 +-
.../components/gridComponents/new/NewTabs.test.jsx | 13 +-
.../CrossFilters/CrossFilterTitle.test.tsx | 35 +-
.../FilterBarSettings/FilterBarSettings.test.tsx | 40 +-
.../FilterConfigurationLink.test.tsx | 13 +-
.../FilterScope/FilterScope.test.tsx | 111 +-
.../FiltersConfigModal/FiltersConfigModal.test.tsx | 46 +-
.../DataTablesPane/test/DataTablesPane.test.tsx | 2 +-
.../DatasourcePanel/DatasourcePanel.test.tsx | 103 +-
.../ExploreChartHeader/ExploreChartHeader.test.tsx | 19 +-
.../PropertiesModal/PropertiesModal.test.tsx | 76 +-
.../AdhocFilterControl/AdhocFilterControl.test.jsx | 2 +-
.../AdhocFilterEditPopover.test.jsx | 22 +-
.../AdhocFilterEditPopoverSqlTabContent.test.tsx | 20 +-
.../utils/useDatePickerInAdhocfilter.test.ts | 19 +-
.../AdhocMetricEditPopover.test.jsx | 25 +-
.../MetricControl/FilterDefinitionOption.test.jsx | 21 +-
.../controls/MetricControl/MetricsControl.test.jsx | 18 +-
.../OptionControls/OptionControls.test.tsx | 24 +-
.../VizTypeControl/VizTypeControl.test.jsx | 59 +-
.../VizTypeControl/VizTypeControl.test.tsx | 39 +-
.../exploreUtils/getSimpleSQLExpression.test.ts | 8 +
.../annotationLayers/AnnotationLayerModal.test.jsx | 8 +-
.../features/annotations/AnnotationModal.test.jsx | 8 +-
.../cssTemplates/CssTemplateModal.test.jsx | 8 +-
.../EditDataset/UsageTab/UsageTab.test.tsx | 65 +-
.../src/features/home/DashboardTable.test.tsx | 8 +-
.../src/features/home/EmptyState.test.tsx | 4 +-
superset-frontend/src/features/home/Menu.test.tsx | 4 +-
.../src/features/home/RightMenu.test.tsx | 2 +-
.../src/features/home/SavedQueries.test.tsx | 6 +-
.../features/queries/QueryPreviewModal.test.tsx | 2 +-
.../queries/SavedQueryPreviewModal.test.jsx | 4 +-
.../features/rls/RowLevelSecurityModal.test.tsx | 42 +-
.../pages/AlertReportList/AlertReportList.test.jsx | 6 +-
.../AnnotationLayerList.test.jsx | 10 +-
.../pages/AnnotationList/AnnotationList.test.jsx | 8 +-
.../src/pages/ChartList/ChartList.test.jsx | 22 +-
.../pages/CssTemplateList/CssTemplateList.test.jsx | 10 +-
.../src/pages/DashboardList/DashboardList.test.jsx | 26 +-
.../src/pages/DatabaseList/DatabaseList.test.jsx | 10 +-
.../src/pages/DatasetList/DatasetList.test.tsx | 6 +-
.../ExecutionLogList/ExecutionLogList.test.jsx | 4 +-
superset-frontend/src/pages/Home/Home.test.tsx | 14 +-
.../QueryHistoryList/QueryHistoryList.test.tsx | 10 +-
.../pages/SavedQueryList/SavedQueryList.test.jsx | 8 +-
74 files changed, 1285 insertions(+), 3964 deletions(-)
diff --git a/superset-frontend/package-lock.json b/superset-frontend/package-lock.json
index 0d1373ae04..e8b3702515 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -186,7 +186,7 @@
"@storybook/react-webpack5": "8.1.11",
"@svgr/webpack": "^8.1.0",
"@testing-library/dom": "^8.20.1",
- "@testing-library/jest-dom": "^6.5.0",
+ "@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^12.1.5",
"@testing-library/react-hooks": "^8.0.1",
"@testing-library/user-event": "^12.8.3",
@@ -234,6 +234,7 @@
"css-loader": "^7.1.2",
"css-minimizer-webpack-plugin": "^7.0.0",
"enzyme": "^3.11.0",
+ "enzyme-matchers": "^7.1.2",
"esbuild": "^0.20.0",
"esbuild-loader": "^4.2.2",
"eslint": "^8.56.0",
@@ -264,9 +265,7 @@
"ignore-styles": "^5.0.1",
"imports-loader": "^5.0.0",
"jest": "^29.7.0",
- "jest-environment-enzyme": "^7.1.2",
"jest-environment-jsdom": "^29.7.0",
- "jest-enzyme": "^7.1.2",
"jest-html-reporter": "^3.10.2",
"jest-websocket-mock": "^2.5.0",
"jsdom": "^26.0.0",
@@ -3312,23 +3311,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@cnakazawa/watch": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
- "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "exec-sh": "^0.3.2",
- "minimist": "^1.2.0"
- },
- "bin": {
- "watch": "cli.js"
- },
- "engines": {
- "node": ">=0.1.95"
- }
- },
"node_modules/@colors/colors": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
@@ -14411,40 +14393,6 @@
"node": ">=0.4.0"
}
},
- "node_modules/acorn-globals": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
- "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "acorn": "^6.0.1",
- "acorn-walk": "^6.0.1"
- }
- },
- "node_modules/acorn-globals/node_modules/acorn": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
- "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-globals/node_modules/acorn-walk": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
- "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -15456,36 +15404,6 @@
"deep-equal": "^2.0.5"
}
},
- "node_modules/arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/array-buffer-byte-length": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
@@ -15512,16 +15430,6 @@
"node": ">=8"
}
},
- "node_modules/array-equal": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.2.tgz",
- "integrity": "sha512-gUHx76KtnhEgB3HOuFYiCm3FIdEs6ocM2asHvNTkfu/Y09qQVrrVVaOKENmS2KkSaGoxgXNqC+ZVtR/n0MOkSA==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
@@ -15572,16 +15480,6 @@
"node": ">=8"
}
},
- "node_modules/array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/array.prototype.filter": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.4.tgz",
@@ -15759,6 +15657,7 @@
"integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safer-buffer": "~2.1.0"
}
@@ -15782,20 +15681,11 @@
"integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
"dev": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.8"
}
},
- "node_modules/assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/ast-types": {
"version": "0.13.4",
"resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
@@ -15842,13 +15732,6 @@
"node": ">= 0.4"
}
},
- "node_modules/async-limiter": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
- "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/async-validator": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-3.5.2.tgz",
@@ -15927,6 +15810,7 @@
"integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
"dev": true,
"license": "Apache-2.0",
+ "peer": true,
"engines": {
"node": "*"
}
@@ -15936,7 +15820,8 @@
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz",
"integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/axe-core": {
"version": "4.10.2",
@@ -16525,38 +16410,6 @@
}
}
},
- "node_modules/base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/base/node_modules/define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-descriptor": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/base16": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz",
@@ -16616,6 +16469,7 @@
"integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
"dev": true,
"license": "BSD-3-Clause",
+ "peer": true,
"dependencies": {
"tweetnacl": "^0.14.3"
}
@@ -16751,17 +16605,6 @@
"url": "https://bevry.me/fund"
}
},
- "node_modules/bindings": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
- "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "file-uri-to-path": "1.0.0"
- }
- },
"node_modules/bl": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
@@ -17012,13 +16855,6 @@
"resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz",
"integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ=="
},
- "node_modules/browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true,
- "license": "BSD-2-Clause"
- },
"node_modules/browserify-zlib": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
@@ -17282,27 +17118,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/cacheable-lookup": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
@@ -17587,19 +17402,6 @@
"license": "MIT",
"optional": true
},
- "node_modules/capture-exit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
- "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "rsvp": "^4.8.4"
- },
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
"node_modules/case-sensitive-paths-webpack-plugin": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
@@ -17615,7 +17417,8 @@
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
"dev": true,
- "license": "Apache-2.0"
+ "license": "Apache-2.0",
+ "peer": true
},
"node_modules/ccount": {
"version": "2.0.1",
@@ -18011,49 +17814,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/is-descriptor": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
- "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-accessor-descriptor": "^1.0.1",
- "is-data-descriptor": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
"node_modules/classnames": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
@@ -18296,20 +18056,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/color": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
@@ -18477,16 +18223,6 @@
"dot-prop": "^5.1.0"
}
},
- "node_modules/component-emitter": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
- "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/compressible": {
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
@@ -18911,16 +18647,6 @@
"url": "https://github.com/sponsors/mesqueeb"
}
},
- "node_modules/copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/copy-to-clipboard": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz",
@@ -19517,13 +19243,6 @@
"dev": true,
"license": "CC0-1.0"
},
- "node_modules/cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/cssstyle": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.2.1.tgz",
@@ -20048,6 +19767,7 @@
"integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"assert-plus": "^1.0.0"
},
@@ -20397,6 +20117,7 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-3.0.4.tgz",
"integrity": "sha512-Bsu5fP9Omd+HBk2Dz8qp4BHbC+83DBykZ87Lz1JmPKTVNy4Q0XQVtUrbfXVAK/udQrWNcGStcKSA9yj/Zkm3TQ==",
+ "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -20580,20 +20301,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/defu": {
"version": "6.1.4",
"resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz",
@@ -20946,24 +20653,6 @@
],
"license": "BSD-2-Clause"
},
- "node_modules/domexception": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
- "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
- "deprecated": "Use your platform's native DOMException instead",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "webidl-conversions": "^4.0.2"
- }
- },
- "node_modules/domexception/node_modules/webidl-conversions": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
- "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
- "dev": true,
- "license": "BSD-2-Clause"
- },
"node_modules/domhandler": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
@@ -21185,6 +20874,7 @@
"integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"jsbn": "~0.1.0",
"safer-buffer": "^2.1.0"
@@ -21195,7 +20885,8 @@
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ecdsa-sig-formatter": {
"version": "1.0.11",
@@ -21578,6 +21269,8 @@
"integrity": "sha512-Ynm6Z6R6iwQ0g2g1YToz6DWhxVnt8Dy1ijR2zynRKxTyBGA8rCDXU3rs2Qc4OKvUvc2Qoe1bcFK6bnPs20TrTg==",
"dev": true,
"license": "MIT",
+ "optional": true,
+ "peer": true,
"dependencies": {
"@types/cheerio": "^0.22.22",
"lodash": "^4.17.21",
@@ -21595,7 +21288,9 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "optional": true,
+ "peer": true
},
"node_modules/err-code": {
"version": "2.0.3",
@@ -23441,13 +23136,6 @@
"node": ">=0.8.x"
}
},
- "node_modules/exec-sh": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz",
- "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/execa": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
@@ -23494,92 +23182,6 @@
"node": ">= 0.8.0"
}
},
- "node_modules/expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/expand-brackets/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/is-descriptor": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
- "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-accessor-descriptor": "^1.0.1",
- "is-data-descriptor": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/expand-brackets/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/expect": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
@@ -23720,20 +23322,6 @@
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"license": "MIT"
},
- "node_modules/extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/external-editor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
@@ -23772,62 +23360,6 @@
"node": ">=0.6.0"
}
},
- "node_modules/extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-descriptor": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/extract-zip": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
@@ -23873,7 +23405,8 @@
"engines": [
"node >=0.6.0"
],
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/falafel": {
"version": "2.2.5",
@@ -24326,14 +23859,6 @@
"url": "https://github.com/sindresorhus/file-type?sponsor=1"
}
},
- "node_modules/file-uri-to-path": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
- "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
"node_modules/filelist": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
@@ -24733,16 +24258,6 @@
"is-callable": "^1.1.3"
}
},
- "node_modules/for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/foreground-child": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
@@ -24777,6 +24292,7 @@
"integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
"dev": true,
"license": "Apache-2.0",
+ "peer": true,
"engines": {
"node": "*"
}
@@ -24941,19 +24457,6 @@
"node": ">= 0.6"
}
},
- "node_modules/fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "map-cache": "^0.2.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
@@ -25939,16 +25442,6 @@
"node": ">= 14"
}
},
- "node_modules/get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/getos": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
@@ -25966,6 +25459,7 @@
"integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"assert-plus": "^1.0.0"
}
@@ -26621,55 +26115,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "deprecated": "this library is no longer supported",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/har-validator/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/har-validator/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/hard-rejection": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
@@ -26781,81 +26226,6 @@
"dev": true,
"license": "ISC"
},
- "node_modules/has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/has-values/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values/node_modules/kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/hasha": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz",
@@ -28388,19 +27758,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/is-accessor-descriptor": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz",
- "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.0"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
"node_modules/is-alphabetical": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
@@ -28629,19 +27986,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-data-descriptor": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz",
- "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
"node_modules/is-data-view": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
@@ -28692,20 +28036,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/is-descriptor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
- "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-accessor-descriptor": "^1.0.1",
- "is-data-descriptor": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
"node_modules/is-docker": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
@@ -28721,19 +28051,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-plain-object": "^2.0.4"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -29149,7 +28466,8 @@
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/is-unicode-supported": {
"version": "2.1.0",
@@ -29225,6 +28543,7 @@
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -29286,7 +28605,8 @@
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/istanbul-lib-coverage": {
"version": "3.2.2",
@@ -29651,1415 +28971,347 @@
}
},
"node_modules/jest-circus/node_modules/pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/jest-circus/node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-cli": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
- "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/core": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/types": "^29.6.3",
- "chalk": "^4.0.0",
- "create-jest": "^29.7.0",
- "exit": "^0.1.2",
- "import-local": "^3.0.2",
- "jest-config": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "yargs": "^17.3.1"
- },
- "bin": {
- "jest": "bin/jest.js"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
- }
- },
- "node_modules/jest-cli/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/jest-config": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
- "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/core": "^7.11.6",
- "@jest/test-sequencer": "^29.7.0",
- "@jest/types": "^29.6.3",
- "babel-jest": "^29.7.0",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "jest-circus": "^29.7.0",
- "jest-environment-node": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "jest-regex-util": "^29.6.3",
- "jest-resolve": "^29.7.0",
- "jest-runner": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "micromatch": "^4.0.4",
- "parse-json": "^5.2.0",
- "pretty-format": "^29.7.0",
- "slash": "^3.0.0",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "@types/node": "*",
- "ts-node": ">=9.0.0"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "ts-node": {
- "optional": true
- }
- }
- },
- "node_modules/jest-config/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/jest-config/node_modules/ci-info": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
- "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/sibiraj-s"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-config/node_modules/pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/jest-config/node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-diff": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
- "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.0.0",
- "diff-sequences": "^29.6.3",
- "jest-get-type": "^29.6.3",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-diff/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/jest-diff/node_modules/pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/jest-docblock": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
- "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "detect-newline": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-each": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
- "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
- "jest-util": "^29.7.0",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-each/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/jest-each/node_modules/pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/jest-environment-enzyme": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/jest-environment-enzyme/-/jest-environment-enzyme-7.1.2.tgz",
- "integrity": "sha512-3tfaYAzO7qZSRrv+srQnfK16Vu5XwH/pHi8FpoqSHjKKngbHzXf7aBCBuWh8y3w0OtknHRfDMFrC60Khj+g1hA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "jest-environment-jsdom": "^24.0.0"
- },
- "peerDependencies": {
- "enzyme": "3.x",
- "jest": ">=22.0.0",
- "react": "^0.13.0 || ^0.14.0 || ^15.0.0 || >=16.x"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/@jest/console": {
- "version": "24.9.0",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz",
- "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/source-map": "^24.9.0",
- "chalk": "^2.0.1",
- "slash": "^2.0.0"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/@jest/environment": {
- "version": "24.9.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz",
- "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/fake-timers": "^24.9.0",
- "@jest/transform": "^24.9.0",
- "@jest/types": "^24.9.0",
- "jest-mock": "^24.9.0"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/@jest/fake-timers": {
- "version": "24.9.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz",
- "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^24.9.0",
- "jest-message-util": "^24.9.0",
- "jest-mock": "^24.9.0"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/@jest/source-map": {
- "version": "24.9.0",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz",
- "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "callsites": "^3.0.0",
- "graceful-fs": "^4.1.15",
- "source-map": "^0.6.0"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/@jest/test-result": {
- "version": "24.9.0",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz",
- "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/console": "^24.9.0",
- "@jest/types": "^24.9.0",
- "@types/istanbul-lib-coverage": "^2.0.0"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/@jest/transform": {
- "version": "24.9.0",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz",
- "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/core": "^7.1.0",
- "@jest/types": "^24.9.0",
- "babel-plugin-istanbul": "^5.1.0",
- "chalk": "^2.0.1",
- "convert-source-map": "^1.4.0",
- "fast-json-stable-stringify": "^2.0.0",
- "graceful-fs": "^4.1.15",
- "jest-haste-map": "^24.9.0",
- "jest-regex-util": "^24.9.0",
- "jest-util": "^24.9.0",
- "micromatch": "^3.1.10",
- "pirates": "^4.0.1",
- "realpath-native": "^1.1.0",
- "slash": "^2.0.0",
- "source-map": "^0.6.1",
- "write-file-atomic": "2.4.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/@jest/types": {
- "version": "24.9.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz",
- "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^1.1.1",
- "@types/yargs": "^13.0.0"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/@types/istanbul-reports": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz",
- "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/istanbul-lib-coverage": "*",
- "@types/istanbul-lib-report": "*"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/@types/stack-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
- "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/jest-environment-enzyme/node_modules/@types/yargs": {
- "version": "13.0.12",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz",
- "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/acorn": {
- "version": "5.7.4",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz",
- "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/babel-plugin-istanbul": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz",
- "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "find-up": "^3.0.0",
- "istanbul-lib-instrument": "^3.3.0",
- "test-exclude": "^5.2.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/braces/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/jest-environment-enzyme/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/jest-environment-enzyme/node_modules/convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/jest-environment-enzyme/node_modules/cssstyle": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz",
- "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cssom": "0.3.x"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/data-urls": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
- "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "abab": "^2.0.0",
- "whatwg-mimetype": "^2.2.0",
- "whatwg-url": "^7.0.0"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/data-urls/node_modules/whatwg-url": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
- "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "lodash.sortby": "^4.7.0",
- "tr46": "^1.0.1",
- "webidl-conversions": "^4.0.2"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/escodegen": {
- "version": "1.14.3",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
- "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "esprima": "^4.0.1",
- "estraverse": "^4.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1"
- },
- "bin": {
- "escodegen": "bin/escodegen.js",
- "esgenerate": "bin/esgenerate.js"
- },
- "engines": {
- "node": ">=4.0"
- },
- "optionalDependencies": {
- "source-map": "~0.6.1"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/fill-range/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/fsevents": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
- "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
- "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "dependencies": {
- "bindings": "^1.5.0",
- "nan": "^2.12.1"
- },
- "engines": {
- "node": ">= 4.0"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/html-encoding-sniffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
- "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "whatwg-encoding": "^1.0.1"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/jest-environment-enzyme/node_modules/is-ci": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
- "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ci-info": "^2.0.0"
- },
- "bin": {
- "is-ci": "bin.js"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/istanbul-lib-coverage": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
- "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/istanbul-lib-instrument": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz",
- "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@babel/generator": "^7.4.0",
- "@babel/parser": "^7.4.3",
- "@babel/template": "^7.4.0",
- "@babel/traverse": "^7.4.3",
- "@babel/types": "^7.4.0",
- "istanbul-lib-coverage": "^2.0.5",
- "semver": "^6.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/jest-environment-jsdom": {
- "version": "24.9.0",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz",
- "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/environment": "^24.9.0",
- "@jest/fake-timers": "^24.9.0",
- "@jest/types": "^24.9.0",
- "jest-mock": "^24.9.0",
- "jest-util": "^24.9.0",
- "jsdom": "^11.5.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/jest-haste-map": {
- "version": "24.9.0",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz",
- "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^24.9.0",
- "anymatch": "^2.0.0",
- "fb-watchman": "^2.0.0",
- "graceful-fs": "^4.1.15",
- "invariant": "^2.2.4",
- "jest-serializer": "^24.9.0",
- "jest-util": "^24.9.0",
- "jest-worker": "^24.9.0",
- "micromatch": "^3.1.10",
- "sane": "^4.0.3",
- "walker": "^1.0.7"
- },
- "engines": {
- "node": ">= 6"
- },
- "optionalDependencies": {
- "fsevents": "^1.2.7"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/jest-message-util": {
- "version": "24.9.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz",
- "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "@jest/test-result": "^24.9.0",
- "@jest/types": "^24.9.0",
- "@types/stack-utils": "^1.0.1",
- "chalk": "^2.0.1",
- "micromatch": "^3.1.10",
- "slash": "^2.0.0",
- "stack-utils": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/jest-mock": {
- "version": "24.9.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz",
- "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^24.9.0"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/jest-regex-util": {
- "version": "24.9.0",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz",
- "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/jest-util": {
- "version": "24.9.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz",
- "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/console": "^24.9.0",
- "@jest/fake-timers": "^24.9.0",
- "@jest/source-map": "^24.9.0",
- "@jest/test-result": "^24.9.0",
- "@jest/types": "^24.9.0",
- "callsites": "^3.0.0",
- "chalk": "^2.0.1",
- "graceful-fs": "^4.1.15",
- "is-ci": "^2.0.0",
- "mkdirp": "^0.5.1",
- "slash": "^2.0.0",
- "source-map": "^0.6.0"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/jest-worker": {
- "version": "24.9.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz",
- "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "merge-stream": "^2.0.0",
- "supports-color": "^6.1.0"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/jest-worker/node_modules/supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/jsdom": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
- "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "abab": "^2.0.0",
- "acorn": "^5.5.3",
- "acorn-globals": "^4.1.0",
- "array-equal": "^1.0.0",
- "cssom": ">= 0.3.2 < 0.4.0",
- "cssstyle": "^1.0.0",
- "data-urls": "^1.0.0",
- "domexception": "^1.0.1",
- "escodegen": "^1.9.1",
- "html-encoding-sniffer": "^1.0.2",
- "left-pad": "^1.3.0",
- "nwsapi": "^2.0.7",
- "parse5": "4.0.0",
- "pn": "^1.1.0",
- "request": "^2.87.0",
- "request-promise-native": "^1.0.5",
- "sax": "^1.2.4",
- "symbol-tree": "^3.2.2",
- "tough-cookie": "^2.3.4",
- "w3c-hr-time": "^1.0.1",
- "webidl-conversions": "^4.0.2",
- "whatwg-encoding": "^1.0.3",
- "whatwg-mimetype": "^2.1.0",
- "whatwg-url": "^6.4.1",
- "ws": "^5.2.0",
- "xml-name-validator": "^3.0.0"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
+ "@jest/schemas": "^29.6.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
},
"engines": {
- "node": ">=0.10.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/jest-environment-enzyme/node_modules/mkdirp": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
- "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "minimist": "^1.2.6"
+ "engines": {
+ "node": ">=10"
},
- "bin": {
- "mkdirp": "bin/cmd.js"
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/jest-environment-enzyme/node_modules/normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
+ "node_modules/jest-circus/node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "remove-trailing-separator": "^1.0.1"
- },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
}
},
- "node_modules/jest-environment-enzyme/node_modules/optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "node_modules/jest-cli": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
+ "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
+ "@jest/core": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "create-jest": "^29.7.0",
+ "exit": "^0.1.2",
+ "import-local": "^3.0.2",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "yargs": "^17.3.1"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
},
"engines": {
- "node": ">= 0.8.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
}
},
- "node_modules/jest-environment-enzyme/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "node_modules/jest-cli/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "p-try": "^2.0.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=10"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/jest-environment-enzyme/node_modules/p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "node_modules/jest-config": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
+ "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "p-limit": "^2.0.0"
+ "@babel/core": "^7.11.6",
+ "@jest/test-sequencer": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-jest": "^29.7.0",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "deepmerge": "^4.2.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-circus": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "parse-json": "^5.2.0",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
},
"engines": {
- "node": ">=6"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
}
},
- "node_modules/jest-environment-enzyme/node_modules/parse5": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
- "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/jest-environment-enzyme/node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
+ "node_modules/jest-config/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
"engines": {
- "node": ">=4"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/jest-environment-enzyme/node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "node_modules/jest-config/node_modules/ci-info": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
+ "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
"dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
"license": "MIT",
"engines": {
- "node": ">=6"
+ "node": ">=8"
}
},
- "node_modules/jest-environment-enzyme/node_modules/read-pkg-up": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz",
- "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==",
+ "node_modules/jest-config/node_modules/pretty-format": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "find-up": "^3.0.0",
- "read-pkg": "^3.0.0"
+ "@jest/schemas": "^29.6.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
},
"engines": {
- "node": ">=6"
- }
- },
- "node_modules/jest-environment-enzyme/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/jest-environment-enzyme/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
- "license": "BSD-3-Clause",
+ "license": "MIT",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/jest-environment-enzyme/node_modules/stack-utils": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz",
- "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==",
+ "node_modules/jest-config/node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "escape-string-regexp": "^2.0.0"
- },
"engines": {
"node": ">=8"
}
},
- "node_modules/jest-environment-enzyme/node_modules/stack-utils/node_modules/escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "node_modules/jest-diff": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
+ "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "diff-sequences": "^29.6.3",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
"engines": {
- "node": ">=8"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/jest-environment-enzyme/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "node_modules/jest-diff/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "has-flag": "^3.0.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
},
"engines": {
- "node": ">=4"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/jest-environment-enzyme/node_modules/test-exclude": {
- "version": "5.2.3",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz",
- "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==",
+ "node_modules/jest-diff/node_modules/pretty-format": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "glob": "^7.1.3",
- "minimatch": "^3.0.4",
- "read-pkg-up": "^4.0.0",
- "require-main-filename": "^2.0.0"
+ "@jest/schemas": "^29.6.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
},
"engines": {
- "node": ">=6"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/jest-environment-enzyme/node_modules/to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
+ "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/jest-environment-enzyme/node_modules/tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "node_modules/jest-docblock": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
+ "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
"dev": true,
- "license": "BSD-3-Clause",
+ "license": "MIT",
"dependencies": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
+ "detect-newline": "^3.0.0"
},
"engines": {
- "node": ">=0.8"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/jest-environment-enzyme/node_modules/type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
+ "node_modules/jest-each": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
+ "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "prelude-ls": "~1.1.2"
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "pretty-format": "^29.7.0"
},
"engines": {
- "node": ">= 0.8.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/jest-environment-enzyme/node_modules/webidl-conversions": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
- "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
- "dev": true,
- "license": "BSD-2-Clause"
- },
- "node_modules/jest-environment-enzyme/node_modules/whatwg-encoding": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
- "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
+ "node_modules/jest-each/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "iconv-lite": "0.4.24"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/jest-environment-enzyme/node_modules/whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/jest-environment-enzyme/node_modules/write-file-atomic": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz",
- "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==",
+ "node_modules/jest-each/node_modules/pretty-format": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
"dev": true,
- "license": "ISC",
+ "license": "MIT",
"dependencies": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
+ "@jest/schemas": "^29.6.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/jest-environment-enzyme/node_modules/ws": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.4.tgz",
- "integrity": "sha512-fFCejsuC8f9kOSu9FYaOw8CdO68O3h5v0lg4p74o8JqWpwTf9tniOD+nOB78aWoVSS6WptVUmDrp/KPsMVBWFQ==",
+ "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "async-limiter": "~1.0.0"
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/jest-environment-enzyme/node_modules/xml-name-validator": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
- "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
- "dev": true,
- "license": "Apache-2.0"
- },
"node_modules/jest-environment-jsdom": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz",
@@ -31367,22 +29619,6 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/jest-enzyme": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/jest-enzyme/-/jest-enzyme-7.1.2.tgz",
- "integrity": "sha512-j+jkph3t5hGBS12eOldpfsnERYRCHi4c/0KWPMnqRPoJJXvCpLIc5th1MHl0xDznQDXVU0AHUXg3rqMrf8vGpA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "enzyme-matchers": "^7.1.2",
- "enzyme-to-json": "^3.3.0",
- "jest-environment-enzyme": "^7.1.2"
- },
- "peerDependencies": {
- "enzyme": ">=3.4.0",
- "jest": ">=22.0.0"
- }
- },
"node_modules/jest-get-type": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
@@ -31880,16 +30116,6 @@
"node": ">=8"
}
},
- "node_modules/jest-serializer": {
- "version": "24.9.0",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz",
- "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/jest-snapshot": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
@@ -32872,14 +31098,6 @@
"node": ">=14.0.0"
}
},
- "node_modules/left-pad": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
- "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==",
- "deprecated": "use String.prototype.padStart()",
- "dev": true,
- "license": "WTFPL"
- },
"node_modules/lerc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz",
@@ -34234,16 +32452,6 @@
"tmpl": "1.0.5"
}
},
- "node_modules/map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/map-obj": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
@@ -34263,19 +32471,6 @@
"integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==",
"license": "MIT"
},
- "node_modules/map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "object-visit": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/mapbox-gl": {
"version": "2.15.0",
"resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-2.15.0.tgz",
@@ -36109,20 +34304,6 @@
"integrity": "sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==",
"license": "MIT"
},
- "node_modules/mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/mjolnir.js": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-3.0.0.tgz",
@@ -36323,14 +34504,6 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/nan": {
- "version": "2.22.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz",
- "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
"node_modules/nanoid": {
"version": "5.0.9",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.9.tgz",
@@ -36349,29 +34522,6 @@
"node": "^18 || >=20"
}
},
- "node_modules/nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/nanospinner": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/nanospinner/-/nanospinner-1.2.2.tgz",
@@ -36470,13 +34620,6 @@
"node": ">= 0.4.0"
}
},
- "node_modules/nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/nise": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/nise/-/nise-6.1.1.tgz",
@@ -37680,16 +35823,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "*"
- }
- },
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -37699,68 +35832,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/object-copy/node_modules/is-descriptor": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
- "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-accessor-descriptor": "^1.0.1",
- "is-data-descriptor": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object-copy/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/object-inspect": {
"version": "1.13.3",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
@@ -37798,19 +35869,6 @@
"node": ">= 0.4"
}
},
- "node_modules/object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "isobject": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/object.assign": {
"version": "4.1.7",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
@@ -37902,19 +35960,6 @@
"node": ">= 0.4"
}
},
- "node_modules/object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/object.values": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
@@ -38962,16 +37007,6 @@
"tslib": "^2.0.3"
}
},
- "node_modules/pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
@@ -39251,13 +37286,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/pn": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
- "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/png-async": {
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/png-async/-/png-async-0.9.4.tgz",
@@ -39293,16 +37321,6 @@
"node": ">=10"
}
},
- "node_modules/posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/possible-typed-array-names": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
@@ -42754,19 +40772,6 @@
"node": ">= 12.13.0"
}
},
- "node_modules/realpath-native": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz",
- "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "util.promisify": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/recast": {
"version": "0.23.9",
"resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz",
@@ -42993,20 +40998,6 @@
"@babel/runtime": "^7.8.4"
}
},
- "node_modules/regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/regexp.prototype.flags": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
@@ -44277,26 +42268,6 @@
"node": ">=8"
}
},
- "node_modules/repeat-element": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
- "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10"
- }
- },
"node_modules/replace-ext": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
@@ -44306,39 +42277,6 @@
"node": ">= 10"
}
},
- "node_modules/request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/request-progress": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
@@ -44350,157 +42288,6 @@
"throttleit": "^1.0.0"
}
},
- "node_modules/request-promise-core": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz",
- "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lodash": "^4.17.19"
- },
- "engines": {
- "node": ">=0.10.0"
- },
- "peerDependencies": {
- "request": "^2.34"
- }
- },
- "node_modules/request-promise-native": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz",
- "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==",
- "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "request-promise-core": "1.1.4",
- "stealthy-require": "^1.1.1",
- "tough-cookie": "^2.3.3"
- },
- "engines": {
- "node": ">=0.12.0"
- },
- "peerDependencies": {
- "request": "^2.34"
- }
- },
- "node_modules/request-promise-native/node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/request-promise-native/node_modules/tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/request/node_modules/form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 0.12"
- }
- },
- "node_modules/request/node_modules/http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- },
- "engines": {
- "node": ">=0.8",
- "npm": ">=1.3.7"
- }
- },
- "node_modules/request/node_modules/jsprim": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
- "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.4.0",
- "verror": "1.10.0"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
- "node_modules/request/node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/request/node_modules/qs": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
- "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/request/node_modules/tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/request/node_modules/uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
- "dev": true,
- "license": "MIT",
- "bin": {
- "uuid": "bin/uuid"
- }
- },
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -44524,7 +42311,8 @@
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"dev": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/require-package-name": {
"version": "2.0.1",
@@ -44636,14 +42424,6 @@
"protocol-buffers-schema": "^3.3.1"
}
},
- "node_modules/resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
- "deprecated": "https://github.com/lydell/resolve-url#deprecated",
- "dev": true,
- "license": "MIT"
- },
"node_modules/resolve.exports": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz",
@@ -44863,16 +42643,6 @@
"nearley": "^2.7.10"
}
},
- "node_modules/rsvp": {
- "version": "4.8.5",
- "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
- "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "6.* || >= 7.*"
- }
- },
"node_modules/run-applescript": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz",
@@ -44999,16 +42769,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ret": "~0.1.10"
- }
- },
"node_modules/safe-regex-test": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
@@ -45061,335 +42821,13 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"license": "MIT"
},
- "node_modules/sane": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
- "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
- "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@cnakazawa/watch": "^1.0.3",
- "anymatch": "^2.0.0",
- "capture-exit": "^2.0.0",
- "exec-sh": "^0.3.2",
- "execa": "^1.0.0",
- "fb-watchman": "^2.0.0",
- "micromatch": "^3.1.4",
- "minimist": "^1.1.1",
- "walker": "~1.0.5"
- },
- "bin": {
- "sane": "src/cli.js"
- },
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/sane/node_modules/anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- }
- },
- "node_modules/sane/node_modules/braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/braces/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/cross-spawn": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz",
- "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "engines": {
- "node": ">=4.8"
- }
- },
- "node_modules/sane/node_modules/execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/sane/node_modules/fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/sane/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/sane/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "remove-trailing-separator": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/sane/node_modules/path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/sane/node_modules/semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/sane/node_modules/shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "shebang-regex": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
"node_modules/sax": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
"integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
"dev": true,
- "license": "ISC"
+ "license": "ISC",
+ "optional": true
},
"node_modules/saxes": {
"version": "6.0.0",
@@ -45729,45 +43167,6 @@
"node": ">= 0.4"
}
},
- "node_modules/set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/set-value/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/set-value/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -46134,164 +43533,6 @@
"tslib": "^2.0.3"
}
},
- "node_modules/snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node/node_modules/define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-descriptor": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "kind-of": "^3.2.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-util/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/snapdragon-util/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/snapdragon/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/is-descriptor": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
- "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-accessor-descriptor": "^1.0.1",
- "is-data-descriptor": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/snapdragon/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/snapdragon/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/sockjs": {
"version": "0.3.24",
"resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
@@ -46484,21 +43725,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/source-map-resolve": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
- "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
"node_modules/source-map-support": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
@@ -46520,14 +43746,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/source-map-url": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
- "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
- "deprecated": "See https://github.com/lydell/source-map-url#deprecated",
- "dev": true,
- "license": "MIT"
- },
"node_modules/space-separated-tokens": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
@@ -46747,19 +43965,6 @@
"node": ">=6"
}
},
- "node_modules/split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "extend-shallow": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/split.js": {
"version": "1.6.5",
"resolved": "https://registry.npmjs.org/split.js/-/split.js-1.6.5.tgz",
@@ -46788,6 +43993,7 @@
"integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
@@ -46813,7 +44019,8 @@
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ssri": {
"version": "10.0.6",
@@ -46883,47 +44090,6 @@
"escodegen": "^2.1.0"
}
},
- "node_modules/static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/is-descriptor": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
- "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-accessor-descriptor": "^1.0.1",
- "is-data-descriptor": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
"node_modules/static-module": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz",
@@ -47144,16 +44310,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/stealthy-require": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
- "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/stop-iteration-iterator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
@@ -47500,16 +44656,6 @@
"node": ">=10"
}
},
- "node_modules/strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/strip-final-newline": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
@@ -48420,55 +45566,6 @@
"dev": true,
"license": "BSD-3-Clause"
},
- "node_modules/to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/to-object-path/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/to-object-path/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -48951,6 +46048,7 @@
"integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
"dev": true,
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"safe-buffer": "^5.0.1"
},
@@ -48963,7 +46061,8 @@
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
"dev": true,
- "license": "Unlicense"
+ "license": "Unlicense",
+ "peer": true
},
"node_modules/type-check": {
"version": "0.4.0",
@@ -49338,32 +46437,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/union-value/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/unique-filename": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz",
@@ -49593,65 +46666,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "isarray": "1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/untildify": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
@@ -49730,14 +46744,6 @@
"integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==",
"license": "MIT"
},
- "node_modules/urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
- "deprecated": "Please see https://github.com/lydell/urix#deprecated",
- "dev": true,
- "license": "MIT"
- },
"node_modules/url": {
"version": "0.11.4",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz",
@@ -49776,16 +46782,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/use-callback-ref": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
@@ -49881,33 +46877,6 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"license": "MIT"
},
- "node_modules/util.promisify": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.3.tgz",
- "integrity": "sha512-GIEaZ6o86fj09Wtf0VfZ5XP7tmd4t3jM5aZCgmBi231D0DB1AEBa3Aa6MP48DMsAIi96WkpWLimIWVwOjbDMOw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-data-property": "^1.1.4",
- "define-properties": "^1.2.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "for-each": "^0.3.3",
- "get-intrinsic": "^1.2.6",
- "has-proto": "^1.2.0",
- "has-symbols": "^1.1.0",
- "object.getownpropertydescriptors": "^2.1.8",
- "safe-array-concat": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.8"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/utila": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
@@ -50087,6 +47056,7 @@
"node >=0.6.0"
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
@@ -50287,17 +47257,6 @@
"pbf": "^3.2.1"
}
},
- "node_modules/w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
"node_modules/w3c-xmlserializer": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
diff --git a/superset-frontend/package.json b/superset-frontend/package.json
index cc9beb02af..a3dbc78926 100644
--- a/superset-frontend/package.json
+++ b/superset-frontend/package.json
@@ -253,7 +253,7 @@
"@storybook/react-webpack5": "8.1.11",
"@svgr/webpack": "^8.1.0",
"@testing-library/dom": "^8.20.1",
- "@testing-library/jest-dom": "^6.5.0",
+ "@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^12.1.5",
"@testing-library/react-hooks": "^8.0.1",
"@testing-library/user-event": "^12.8.3",
@@ -301,6 +301,7 @@
"css-loader": "^7.1.2",
"css-minimizer-webpack-plugin": "^7.0.0",
"enzyme": "^3.11.0",
+ "enzyme-matchers": "^7.1.2",
"esbuild": "^0.20.0",
"esbuild-loader": "^4.2.2",
"eslint": "^8.56.0",
@@ -331,9 +332,7 @@
"ignore-styles": "^5.0.1",
"imports-loader": "^5.0.0",
"jest": "^29.7.0",
- "jest-environment-enzyme": "^7.1.2",
"jest-environment-jsdom": "^29.7.0",
- "jest-enzyme": "^7.1.2",
"jest-html-reporter": "^3.10.2",
"jest-websocket-mock": "^2.5.0",
"jsdom": "^26.0.0",
diff --git a/superset-frontend/packages/superset-ui-core/test/chart/components/SuperChartCore.test.tsx b/superset-frontend/packages/superset-ui-core/test/chart/components/SuperChartCore.test.tsx
index 956422f8f2..4756d0f782 100644
--- a/superset-frontend/packages/superset-ui-core/test/chart/components/SuperChartCore.test.tsx
+++ b/superset-frontend/packages/superset-ui-core/test/chart/components/SuperChartCore.test.tsx
@@ -26,6 +26,7 @@ import {
supersetTheme,
SupersetTheme,
ThemeProvider,
+ cleanup,
} from '@superset-ui/core';
import SuperChartCore from '../../../src/chart/components/SuperChartCore';
import {
@@ -53,7 +54,6 @@ const styledMount = (component: ReactElement) =>
describe('SuperChartCore', () => {
const chartProps = new ChartProps();
-
const plugins = [
new DiligentChartPlugin().configure({ key: ChartKeys.DILIGENT }),
new LazyChartPlugin().configure({ key: ChartKeys.LAZY }),
@@ -63,6 +63,7 @@ describe('SuperChartCore', () => {
let restoreConsole: RestoreConsole;
beforeAll(() => {
+ jest.setTimeout(30000);
plugins.forEach(p => {
p.unregister().register();
});
@@ -78,12 +79,15 @@ describe('SuperChartCore', () => {
restoreConsole = mockConsole();
});
- afterEach(() => {
+ afterEach(async () => {
+ cleanup();
restoreConsole();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
});
describe('registered charts', () => {
- it('renders registered chart', () => {
+ it('renders registered chart', async () => {
const wrapper = styledMount(
<SuperChartCore
chartType={ChartKeys.DILIGENT}
@@ -91,19 +95,24 @@ describe('SuperChartCore', () => {
/>,
);
- return promiseTimeout(() => {
+ await promiseTimeout(() => {
expect(wrapper.render().find('div.test-component')).toHaveLength(1);
});
+ wrapper.unmount();
});
- it('renders registered chart with lazy loading', () => {
+
+ // Update other test cases similarly
+ it('renders registered chart with lazy loading', async () => {
const wrapper = styledMount(
<SuperChartCore chartType={ChartKeys.LAZY} />,
);
- return promiseTimeout(() => {
+ await promiseTimeout(() => {
expect(wrapper.render().find('div.test-component')).toHaveLength(1);
});
+ wrapper.unmount();
});
+
it('does not render if chartType is not set', () => {
// Suppress warning
// @ts-ignore chartType is required
diff --git a/superset-frontend/spec/helpers/setup.ts b/superset-frontend/spec/helpers/setup.ts
index b889850106..553bd416a7 100644
--- a/superset-frontend/spec/helpers/setup.ts
+++ b/superset-frontend/spec/helpers/setup.ts
@@ -19,10 +19,7 @@
import './shim';
// eslint-disable-next-line no-restricted-syntax -- whole React import is required for mocking React module in tests.
import React from 'react';
-import {
- cleanup,
- configure as configureTestingLibrary,
-} from '@testing-library/react';
+import { configure as configureTestingLibrary } from '@testing-library/react';
import { matchers } from '@emotion/jest';
configureTestingLibrary({
@@ -34,7 +31,3 @@ expect.extend(matchers);
// Allow JSX tests to have React import readily available
global.React = React;
-
-afterEach(() => {
- cleanup(); // Unmount components after each test to prevent memory leaks
-});
diff --git a/superset-frontend/spec/helpers/shim.tsx b/superset-frontend/spec/helpers/shim.tsx
index 894b5233bd..a25e094a29 100644
--- a/superset-frontend/spec/helpers/shim.tsx
+++ b/superset-frontend/spec/helpers/shim.tsx
@@ -20,7 +20,7 @@ import { AriaAttributes } from 'react';
import 'core-js/stable';
import 'regenerator-runtime/runtime';
import 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only';
-import 'jest-enzyme';
+import 'enzyme-matchers';
import jQuery from 'jquery';
import Enzyme from 'enzyme';
import Adapter from '@wojtekmaj/enzyme-adapter-react-17';
diff --git a/superset-frontend/src/SqlLab/components/ResultSet/ResultSet.test.tsx b/superset-frontend/src/SqlLab/components/ResultSet/ResultSet.test.tsx
index 188946d4c7..cbd3e10780 100644
--- a/superset-frontend/src/SqlLab/components/ResultSet/ResultSet.test.tsx
+++ b/superset-frontend/src/SqlLab/components/ResultSet/ResultSet.test.tsx
@@ -143,6 +143,13 @@ const setup = (props?: any, store?: Store) =>
});
describe('ResultSet', () => {
+ // Add cleanup after each test
+ afterEach(async () => {
+ fetchMock.resetHistory();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+ });
+
test('renders a Table', async () => {
const { getByTestId } = setup(
mockedProps,
@@ -157,8 +164,10 @@ describe('ResultSet', () => {
},
}),
);
- const table = getByTestId('table-container');
- expect(table).toBeInTheDocument();
+ await waitFor(() => {
+ const table = getByTestId('table-container');
+ expect(table).toBeInTheDocument();
+ });
});
test('should render success query', async () => {
@@ -245,7 +254,7 @@ describe('ResultSet', () => {
await waitFor(() =>
expect(fetchMock.calls(reRunQueryEndpoint)).toHaveLength(1),
);
- });
+ }, 10000);
test('should not call reRunQuery if no error', async () => {
const query = queries[0];
@@ -508,13 +517,22 @@ describe('ResultSet', () => {
},
}),
);
+
+ await waitFor(() => {
+ const downloadButton = getByTestId('export-csv-button');
+ expect(downloadButton).toBeInTheDocument();
+ });
+
const downloadButton = getByTestId('export-csv-button');
- fireEvent.click(downloadButton);
+ await waitFor(() => fireEvent.click(downloadButton));
+
const warningModal = await findByRole('dialog');
- expect(
- within(warningModal).getByText(`Download is on the way`),
- ).toBeInTheDocument();
- });
+ await waitFor(() => {
+ expect(
+ within(warningModal).getByText(`Download is on the way`),
+ ).toBeInTheDocument();
+ });
+ }, 20000);
test('should not allow download as CSV when user does not have permission to export data', async () => {
const { queryByTestId } = setup(
diff --git a/superset-frontend/src/SqlLab/components/TableElement/TableElement.test.tsx b/superset-frontend/src/SqlLab/components/TableElement/TableElement.test.tsx
index b9cd94e566..39754c8b50 100644
--- a/superset-frontend/src/SqlLab/components/TableElement/TableElement.test.tsx
+++ b/superset-frontend/src/SqlLab/components/TableElement/TableElement.test.tsx
@@ -122,7 +122,7 @@ test('fades table', async () => {
'1',
),
);
-});
+}, 10000);
test('sorts columns', async () => {
const { getAllByTestId, getByText } = render(
diff --git a/superset-frontend/src/components/AuditInfo/ModifiedInfo.test.tsx b/superset-frontend/src/components/AuditInfo/ModifiedInfo.test.tsx
index 4a16cc73ce..97ee9deb9b 100644
--- a/superset-frontend/src/components/AuditInfo/ModifiedInfo.test.tsx
+++ b/superset-frontend/src/components/AuditInfo/ModifiedInfo.test.tsx
@@ -40,7 +40,7 @@ test('should render a tooltip when user is provided', async () => {
const tooltip = await screen.findByRole('tooltip');
expect(tooltip).toBeInTheDocument();
expect(screen.getByText('Modified by: Foo Bar')).toBeInTheDocument();
-});
+}, 10000);
test('should render only the date if username is not provided', async () => {
render(<ModifiedInfo date={TEST_DATE} />);
diff --git a/superset-frontend/src/components/Card/Card.test.tsx b/superset-frontend/src/components/Card/Card.test.tsx
index 111979d1ae..2c353d0924 100644
--- a/superset-frontend/src/components/Card/Card.test.tsx
+++ b/superset-frontend/src/components/Card/Card.test.tsx
@@ -16,10 +16,17 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { render } from 'spec/helpers/testing-library';
+import { render, waitFor } from 'spec/helpers/testing-library';
import Card from '.';
-test('should render', () => {
+afterEach(async () => {
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
+test('should render', async () => {
const { container } = render(<Card />);
- expect(container).toBeInTheDocument();
+ await waitFor(() => {
+ expect(container).toBeInTheDocument();
+ });
});
diff --git a/superset-frontend/src/components/Chart/DrillBy/DrillByMenuItems.test.tsx b/superset-frontend/src/components/Chart/DrillBy/DrillByMenuItems.test.tsx
index c874da6854..64acb392a5 100644
--- a/superset-frontend/src/components/Chart/DrillBy/DrillByMenuItems.test.tsx
+++ b/superset-frontend/src/components/Chart/DrillBy/DrillByMenuItems.test.tsx
@@ -164,6 +164,9 @@ test('render menu item with submenu without searchbox', async () => {
expect(screen.queryByRole('textbox')).not.toBeInTheDocument();
});
+// Add global timeout for all tests
+jest.setTimeout(20000);
+
test('render menu item with submenu and searchbox', async () => {
fetchMock.get(DATASET_ENDPOINT, {
result: { columns: defaultColumns },
@@ -171,19 +174,33 @@ test('render menu item with submenu and searchbox', async () => {
renderMenu({});
await waitFor(() => fetchMock.called(DATASET_ENDPOINT));
await expectDrillByEnabled();
- defaultColumns.forEach(column => {
- expect(screen.getByText(column.column_name)).toBeInTheDocument();
- });
- const searchbox = screen.getAllByPlaceholderText('Search columns')[1];
+ // Wait for all columns to be visible
+ await waitFor(
+ () => {
+ defaultColumns.forEach(column => {
+ expect(screen.getByText(column.column_name)).toBeInTheDocument();
+ });
+ },
+ { timeout: 10000 },
+ );
+
+ const searchbox = await waitFor(
+ () => screen.getAllByPlaceholderText('Search columns')[1],
+ );
expect(searchbox).toBeInTheDocument();
userEvent.type(searchbox, 'col1');
- await screen.findByText('col1');
-
const expectedFilteredColumnNames = ['col1', 'col10', 'col11'];
+ // Wait for filtered results
+ await waitFor(() => {
+ expectedFilteredColumnNames.forEach(colName => {
+ expect(screen.getByText(colName)).toBeInTheDocument();
+ });
+ });
+
defaultColumns
.filter(col => !expectedFilteredColumnNames.includes(col.column_name))
.forEach(col => {
@@ -210,16 +227,22 @@ test('Do not display excluded column in the menu', async () => {
await waitFor(() => fetchMock.called(DATASET_ENDPOINT));
await expectDrillByEnabled();
+ // Wait for menu items to be loaded
+ await waitFor(
+ () => {
+ defaultColumns
+ .filter(column => !excludedColNames.includes(column.column_name))
+ .forEach(column => {
+ expect(screen.getByText(column.column_name)).toBeInTheDocument();
+ });
+ },
+ { timeout: 10000 },
+ );
+
excludedColNames.forEach(colName => {
expect(screen.queryByText(colName)).not.toBeInTheDocument();
});
-
- defaultColumns
- .filter(column => !excludedColNames.includes(column.column_name))
- .forEach(column => {
- expect(screen.getByText(column.column_name)).toBeInTheDocument();
- });
-});
+}, 20000);
test('When menu item is clicked, call onSelection with clicked column and drill by filters', async () => {
fetchMock
@@ -237,7 +260,10 @@ test('When menu item is clicked, call onSelection with clicked column and drill
await waitFor(() => fetchMock.called(DATASET_ENDPOINT));
await expectDrillByEnabled();
- userEvent.click(screen.getByText('col1'));
+ // Wait for col1 to be visible before clicking
+ const col1Element = await waitFor(() => screen.getByText('col1'));
+ userEvent.click(col1Element);
+
expect(onSelectionMock).toHaveBeenCalledWith(
{
column_name: 'col1',
@@ -245,4 +271,4 @@ test('When menu item is clicked, call onSelection with clicked column and drill
},
{ filters: defaultFilters, groupbyFieldName: 'groupby' },
);
-});
+}, 20000);
diff --git a/superset-frontend/src/components/Chart/DrillDetail/DrillDetailMenuItems.test.tsx b/superset-frontend/src/components/Chart/DrillDetail/DrillDetailMenuItems.test.tsx
index d99de084ec..57c5904684 100644
--- a/superset-frontend/src/components/Chart/DrillDetail/DrillDetailMenuItems.test.tsx
+++ b/superset-frontend/src/components/Chart/DrillDetail/DrillDetailMenuItems.test.tsx
@@ -205,7 +205,7 @@ const expectDrillToDetailEnabled = async () => {
* "Drill to detail" item should be present and disabled
*/
const expectDrillToDetailDisabled = async (tooltipContent?: string) => {
- const drillToDetailMenuItem = screen.findByRole('menuitem', {
+ const drillToDetailMenuItem = await screen.findByRole('menuitem', {
name: 'Drill to detail',
});
@@ -253,153 +253,70 @@ const expectDrillToDetailByDisabled = async (tooltipContent?: string) => {
/**
* "Drill to detail by {dimension}" submenu item should exist and open the correct modal
*/
+// Add cleanup after each test
+afterEach(async () => {
+ cleanup();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
+// Update expectDrillToDetailByDimension helper
const expectDrillToDetailByDimension = async (
filter: BinaryQueryObjectFilterClause,
) => {
userEvent.hover(screen.getByRole('menuitem', { name: 'Drill to detail by' }));
- const drillToDetailBySubMenus = await screen.findAllByTestId(
- 'drill-to-detail-by-submenu',
- );
+ await waitFor(async () => {
+ const drillToDetailBySubMenus = await screen.findAllByTestId(
+ 'drill-to-detail-by-submenu',
+ );
+ expect(drillToDetailBySubMenus.length).toBeGreaterThan(0);
+ });
const menuItemName = `Drill to detail by ${filter.formattedVal}`;
- const drillToDetailBySubmenuItems = await within(
- drillToDetailBySubMenus[1],
- ).findAllByRole('menuitem');
+ const menuItem = await screen.findByText(menuItemName);
- await expectMenuItemEnabled(drillToDetailBySubmenuItems[0]);
+ await expectMenuItemEnabled(menuItem);
await expectDrillToDetailModal(menuItemName, [filter]);
};
-/**
- * "Drill to detail by all" submenu item should exist and open the correct modal
- */
+// Update expectDrillToDetailByAll helper
const expectDrillToDetailByAll = async (
filters: BinaryQueryObjectFilterClause[],
) => {
userEvent.hover(screen.getByRole('menuitem', { name: 'Drill to detail by' }));
- const drillToDetailBySubMenus = await screen.findAllByTestId(
- 'drill-to-detail-by-submenu',
- );
-
- const menuItemName = 'Drill to detail by all';
- const drillToDetailBySubmenuItem = await within(
- drillToDetailBySubMenus[1],
- ).findByRole('menuitem', { name: menuItemName });
-
- await expectMenuItemEnabled(drillToDetailBySubmenuItem);
- await expectDrillToDetailModal(menuItemName, filters);
-};
-
-beforeAll(() => {
- setupPlugins();
-});
-
-test('dropdown menu for unsupported chart', async () => {
- renderMenu({ formData: unsupportedChartFormData });
- await expectDrillToDetailEnabled();
- await expectNoDrillToDetailBy();
-});
-
-test('context menu for unsupported chart', async () => {
- renderMenu({
- formData: unsupportedChartFormData,
- isContextMenu: true,
- });
-
- await expectDrillToDetailEnabled();
- await expectDrillToDetailByDisabled(
- 'Drill to detail by value is not yet supported for this chart type.',
- );
-});
-
-test('dropdown menu for supported chart, no dimensions', async () => {
- renderMenu({
- formData: noDimensionsFormData,
- });
-
- await expectDrillToDetailDisabled(
- 'Drill to detail is disabled because this chart does not group data by dimension value.',
- );
-
- await expectNoDrillToDetailBy();
-});
-
-test('context menu for supported chart, no dimensions, no filters', async () => {
- renderMenu({
- formData: noDimensionsFormData,
- isContextMenu: true,
- });
-
- const message =
- 'Drill to detail is disabled because this chart does not group data by dimension value.';
-
- await expectDrillToDetailDisabled(message);
- await expectDrillToDetailByDisabled(message);
-});
-
-test('context menu for supported chart, no dimensions, 1 filter', async () => {
- renderMenu({
- formData: noDimensionsFormData,
- isContextMenu: true,
- filters: [filterA],
- });
-
- const message =
- 'Drill to detail is disabled because this chart does not group data by dimension value.';
-
- await expectDrillToDetailDisabled(message);
- await expectDrillToDetailByDisabled(message);
-});
-
-test('dropdown menu for supported chart, dimensions', async () => {
- renderMenu({ formData: defaultFormData });
- await expectDrillToDetailEnabled();
- await expectNoDrillToDetailBy();
-});
-
-test('context menu for supported chart, dimensions, no filters', async () => {
- renderMenu({
- formData: defaultFormData,
- isContextMenu: true,
+ await waitFor(async () => {
+ const drillToDetailBySubMenus = await screen.findAllByTestId(
+ 'drill-to-detail-by-submenu',
+ );
+ expect(drillToDetailBySubMenus.length).toBeGreaterThan(0);
});
- await expectDrillToDetailEnabled();
- await expectDrillToDetailByDisabled(
- 'Right-click on a dimension value to drill to detail by that value.',
- );
-});
-
-test('context menu for supported chart, dimensions, 1 filter', async () => {
- const filters = [filterA];
- renderMenu({
- formData: defaultFormData,
- isContextMenu: true,
- filters,
+ const menuItem = await screen.findByText((content, element) => {
+ const text = element?.textContent || '';
+ return text.toLowerCase().includes('drill to detail by all');
});
- await expectDrillToDetailByEnabled();
- await expectDrillToDetailByDimension(filterA);
-});
+ await expectMenuItemEnabled(menuItem);
+ await expectDrillToDetailModal('Drill to detail by all', filters);
+};
+// Update test timeouts
test('context menu for supported chart, dimensions, filter A', async () => {
- jest.setTimeout(10000);
const filters = [filterA, filterB];
setupMenu(filters);
await expectDrillToDetailByEnabled();
await expectDrillToDetailByDimension(filterA);
-});
+}, 30000);
test('context menu for supported chart, dimensions, filter B', async () => {
- jest.setTimeout(10000);
const filters = [filterA, filterB];
setupMenu(filters);
await expectDrillToDetailByEnabled();
await expectDrillToDetailByDimension(filterB);
-});
+}, 30000);
test('context menu for supported chart, dimensions, all filters', async () => {
- jest.setTimeout(10000);
const filters = [filterA, filterB];
setupMenu(filters);
await expectDrillToDetailByAll(filters);
-});
+}, 30000);
diff --git a/superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.test.tsx b/superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.test.tsx
index 6f1a628646..9f6c7f6d3b 100644
--- a/superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.test.tsx
+++ b/superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.test.tsx
@@ -16,14 +16,26 @@
* specific language governing permissions and limitations
* under the License.
*/
+import { cleanup } from '@testing-library/react';
import fetchMock from 'fetch-mock';
-import { QueryFormData, SupersetClient } from '@superset-ui/core';
+import type { QueryFormData } from '@superset-ui/core';
+import { SupersetClient } from '@superset-ui/core';
import { render, screen, waitFor } from 'spec/helpers/testing-library';
import { getMockStoreWithNativeFilters } from 'spec/fixtures/mockStore';
import chartQueries, { sliceId } from 'spec/fixtures/mockChartQueries';
import { supersetGetCache } from 'src/utils/cachedSupersetGet';
import DrillDetailPane from './DrillDetailPane';
+// Add cleanup after each test
+afterEach(async () => {
+ cleanup();
+ fetchMock.restore();
+ supersetGetCache.clear();
+ jest.resetAllMocks();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
const chart = chartQueries[sliceId];
const setup = (overrides: Record<string, any> = {}) => {
const store = getMockStoreWithNativeFilters();
@@ -114,44 +126,52 @@ const fetchWithData = () => {
});
};
-afterEach(() => {
+// Add cleanup function
+afterEach(async () => {
fetchMock.restore();
supersetGetCache.clear();
+ // Wait for any pending effects to complete
+ await waitFor(() => {}, { timeout: 100 }).catch(() => {});
});
+// Modify test cases to properly await all operations
test('should render', async () => {
fetchWithNoData();
const { container } = await waitForRender();
- expect(container).toBeInTheDocument();
+ await waitFor(() => {
+ expect(container).toBeInTheDocument();
+ });
});
test('should render loading indicator', async () => {
fetchWithData();
setup();
- await waitFor(() =>
- expect(screen.getByLabelText('Loading')).toBeInTheDocument(),
- );
+ await waitFor(() => {
+ expect(screen.getByLabelText('Loading')).toBeInTheDocument();
+ });
});
test('should render the table with results', async () => {
fetchWithData();
await waitForRender();
- expect(screen.getByRole('table')).toBeInTheDocument();
- expect(screen.getByText('1996')).toBeInTheDocument();
- expect(screen.getByText('11.27')).toBeInTheDocument();
- expect(screen.getByText('1989')).toBeInTheDocument();
- expect(screen.getByText('23.2')).toBeInTheDocument();
- expect(screen.getByText('1999')).toBeInTheDocument();
- expect(screen.getByText('9')).toBeInTheDocument();
- expect(
- screen.getByRole('columnheader', { name: 'year' }),
- ).toBeInTheDocument();
- expect(
- screen.getByRole('columnheader', { name: 'na_sales' }),
- ).toBeInTheDocument();
- expect(
- screen.getByRole('columnheader', { name: 'eu_sales' }),
- ).toBeInTheDocument();
+ await waitFor(() => {
+ expect(screen.getByRole('table')).toBeInTheDocument();
+ expect(screen.getByText('1996')).toBeInTheDocument();
+ expect(screen.getByText('11.27')).toBeInTheDocument();
+ expect(screen.getByText('1989')).toBeInTheDocument();
+ expect(screen.getByText('23.2')).toBeInTheDocument();
+ expect(screen.getByText('1999')).toBeInTheDocument();
+ expect(screen.getByText('9')).toBeInTheDocument();
+ expect(
+ screen.getByRole('columnheader', { name: 'year' }),
+ ).toBeInTheDocument();
+ expect(
+ screen.getByRole('columnheader', { name: 'na_sales' }),
+ ).toBeInTheDocument();
+ expect(
+ screen.getByRole('columnheader', { name: 'eu_sales' }),
+ ).toBeInTheDocument();
+ });
});
test('should render the "No results" components', async () => {
@@ -195,5 +215,7 @@ test('should render the error', async () => {
.spyOn(SupersetClient, 'post')
.mockRejectedValue(new Error('Something went wrong'));
await waitForRender();
- expect(screen.getByText('Error: Something went wrong')).toBeInTheDocument();
+ await waitFor(() => {
+ expect(screen.getByText('Error: Something went wrong')).toBeInTheDocument();
+ });
});
diff --git a/superset-frontend/src/components/GridTable/HeaderMenu.test.tsx b/superset-frontend/src/components/GridTable/HeaderMenu.test.tsx
index 691cddb4aa..1776aee368 100644
--- a/superset-frontend/src/components/GridTable/HeaderMenu.test.tsx
+++ b/superset-frontend/src/components/GridTable/HeaderMenu.test.tsx
@@ -189,7 +189,7 @@ test('renders unhide when invisible column exists', async () => {
fireEvent.click(unhideColumnsButton);
expect(mockGridApi.setColumnsVisible).toHaveBeenCalledTimes(1);
expect(mockGridApi.setColumnsVisible).toHaveBeenCalledWith(['column2'], true);
-});
+}, 10000);
describe('for main menu', () => {
test('renders Copy to Clipboard', async () => {
diff --git a/superset-frontend/src/components/ListView/ListView.test.jsx b/superset-frontend/src/components/ListView/ListView.test.jsx
index 3911008c5c..a27f0857cc 100644
--- a/superset-frontend/src/components/ListView/ListView.test.jsx
+++ b/superset-frontend/src/components/ListView/ListView.test.jsx
@@ -158,7 +158,7 @@ describe.skip('ListView', () => {
});
it('calls fetchData on mount', () => {
- expect(wrapper.find(ListView)).toExist();
+ expect(wrapper.find(ListView)).toBeTruthy();
expect(mockedProps.fetchData.mock.calls[0]).toMatchInlineSnapshot(
`
[
@@ -196,10 +196,10 @@ describe.skip('ListView', () => {
});
it('renders pagination controls', () => {
- expect(wrapper.find(Pagination)).toExist();
- expect(wrapper.find(Pagination.Prev)).toExist();
- expect(wrapper.find(Pagination.Item)).toExist();
- expect(wrapper.find(Pagination.Next)).toExist();
+ expect(wrapper.find(Pagination)).toBeTruthy();
+ expect(wrapper.find(Pagination.Prev)).toBeTruthy();
+ expect(wrapper.find(Pagination.Item)).toBeTruthy();
+ expect(wrapper.find(Pagination.Next)).toBeTruthy();
});
it('calls fetchData on page change', () => {
@@ -379,11 +379,11 @@ describe.skip('ListView', () => {
const wrapper2 = factory(props);
await waitForComponentToPaint(wrapper2);
- expect(wrapper2.find(Empty)).toExist();
+ expect(wrapper2.find(Empty)).toBeTruthy();
});
it('renders UI filters', () => {
- expect(wrapper.find(ListViewFilters)).toExist();
+ expect(wrapper.find(ListViewFilters)).toBeTruthy();
});
it('does not fetch async filter values on mount', () => {
diff --git a/superset-frontend/src/components/Pagination/Wrapper.test.tsx b/superset-frontend/src/components/Pagination/Wrapper.test.tsx
index d8f8b81822..9685d08ea9 100644
--- a/superset-frontend/src/components/Pagination/Wrapper.test.tsx
+++ b/superset-frontend/src/components/Pagination/Wrapper.test.tsx
@@ -17,9 +17,16 @@
* under the License.
*/
-import { render, screen } from 'spec/helpers/testing-library';
+import { render, screen, cleanup } from 'spec/helpers/testing-library';
import Wrapper from './Wrapper';
+// Add cleanup after each test
+afterEach(async () => {
+ cleanup();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
jest.mock('./Next', () => ({
Next: () => <div data-test="next" />,
}));
@@ -33,7 +40,7 @@ jest.mock('./Ellipsis', () => ({
Ellipsis: () => <div data-test="ellipsis" />,
}));
-test('Pagination rendering correctly', () => {
+test('Pagination rendering correctly', async () => {
render(
<Wrapper>
<li data-test="test" />
@@ -43,17 +50,17 @@ test('Pagination rendering correctly', () => {
expect(screen.getByTestId('test')).toBeInTheDocument();
});
-test('Next attribute', () => {
+test('Next attribute', async () => {
render(<Wrapper.Next onClick={jest.fn()} />);
expect(screen.getByTestId('next')).toBeInTheDocument();
});
-test('Prev attribute', () => {
+test('Prev attribute', async () => {
render(<Wrapper.Next onClick={jest.fn()} />);
expect(screen.getByTestId('next')).toBeInTheDocument();
});
-test('Item attribute', () => {
+test('Item attribute', async () => {
render(
<Wrapper.Item onClick={jest.fn()}>
<></>
@@ -62,7 +69,7 @@ test('Item attribute', () => {
expect(screen.getByTestId('item')).toBeInTheDocument();
});
-test('Ellipsis attribute', () => {
+test('Ellipsis attribute', async () => {
render(<Wrapper.Ellipsis onClick={jest.fn()} />);
expect(screen.getByTestId('ellipsis')).toBeInTheDocument();
});
diff --git a/superset-frontend/src/components/Select/AsyncSelect.test.tsx b/superset-frontend/src/components/Select/AsyncSelect.test.tsx
index 2e9efcbf0b..be46dbbe45 100644
--- a/superset-frontend/src/components/Select/AsyncSelect.test.tsx
+++ b/superset-frontend/src/components/Select/AsyncSelect.test.tsx
@@ -26,6 +26,7 @@ import {
} from 'spec/helpers/testing-library';
import userEvent from '@testing-library/user-event';
import { AsyncSelect } from 'src/components';
+import { cleanup } from '@testing-library/react';
const ARIA_LABEL = 'Test';
const NEW_OPTION = 'Kyle';
@@ -104,10 +105,13 @@ const getSelect = () => screen.getByRole('combobox', { name: ARIA_LABEL });
const getAllSelectOptions = () =>
getElementsByClassName('.ant-select-item-option-content');
-const findSelectOption = (text: string) =>
- waitFor(() =>
- within(getElementByClassName('.rc-virtual-list')).getByText(text),
- );
+const findSelectOption = async (text: string) => {
+ await waitFor(() => {
+ const virtualList = getElementByClassName('.rc-virtual-list');
+ expect(virtualList).not.toBeInTheDocument();
+ });
+ return within(getElementByClassName('.rc-virtual-list')).findByText(text);
+};
const querySelectOption = (text: string) =>
waitFor(() =>
@@ -145,6 +149,13 @@ const type = (text: string) => {
const open = () => waitFor(() => userEvent.click(getSelect()));
+// Add cleanup after each test
+afterEach(async () => {
+ cleanup();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
test('displays a header', async () => {
const headerText = 'Header';
render(<AsyncSelect {...defaultProps} header={headerText} />);
@@ -297,7 +308,10 @@ test('searches for label or value', async () => {
render(<AsyncSelect {...defaultProps} />);
const search = option.value;
await type(search.toString());
- expect(await findSelectOption(option.label)).toBeInTheDocument();
+
+ const optionElement = await findSelectOption(option.label);
+ expect(optionElement).toBeInTheDocument();
+
const options = await findAllSelectOptions();
expect(options.length).toBe(1);
expect(options[0]).toHaveTextContent(option.label);
diff --git a/superset-frontend/src/components/Table/utils/utils.test.ts b/superset-frontend/src/components/Table/utils/utils.test.ts
index eff50f1580..9f35bb4781 100644
--- a/superset-frontend/src/components/Table/utils/utils.test.ts
+++ b/superset-frontend/src/components/Table/utils/utils.test.ts
@@ -16,9 +16,18 @@
* specific language governing permissions and limitations
* under the License.
*/
+import { cleanup } from '@testing-library/react';
import { withinRange } from './utils';
-test('withinRange supported positive numbers', () => {
+// Add cleanup after each test
+afterEach(async () => {
+ cleanup();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
+// Make tests async
+test('withinRange supported positive numbers', async () => {
// Valid inputs within range
expect(withinRange(50, 60, 16)).toBeTruthy();
@@ -26,7 +35,7 @@ test('withinRange supported positive numbers', () => {
expect(withinRange(40, 60, 16)).toBeFalsy();
});
-test('withinRange unsupported negative numbers', () => {
+test('withinRange unsupported negative numbers', async () => {
// Negative numbers not supported
expect(withinRange(65, 60, -16)).toBeFalsy();
expect(withinRange(-60, -65, 16)).toBeFalsy();
@@ -34,7 +43,7 @@ test('withinRange unsupported negative numbers', () => {
expect(withinRange(-60, 65, 16)).toBeFalsy();
});
-test('withinRange invalid inputs', () => {
+test('withinRange invalid inputs', async () => {
// Invalid inputs should return falsy and not throw an error
// We need ts-ignore here to be able to pass invalid values and pass linting
// @ts-ignore
diff --git a/superset-frontend/src/components/TableSelector/TableSelector.test.tsx b/superset-frontend/src/components/TableSelector/TableSelector.test.tsx
index 242bf33253..57b5a1e7db 100644
--- a/superset-frontend/src/components/TableSelector/TableSelector.test.tsx
+++ b/superset-frontend/src/components/TableSelector/TableSelector.test.tsx
@@ -28,6 +28,7 @@ import {
import { api } from 'src/hooks/apiResources/queryApi';
import fetchMock from 'fetch-mock';
import userEvent from '@testing-library/user-event';
+import { cleanup } from '@testing-library/react';
import TableSelector, { TableSelectorMultiple } from '.';
const createProps = (props = {}) => ({
@@ -62,15 +63,23 @@ const getSelectItemContainer = (select: HTMLElement) =>
'ant-select-selection-item',
);
+// Add cleanup and increase timeout
+beforeAll(() => {
+ jest.setTimeout(30000);
+});
+
beforeEach(() => {
fetchMock.get(databaseApiRoute, { result: [] });
});
-afterEach(() => {
+afterEach(async () => {
+ cleanup();
act(() => {
store.dispatch(api.util.resetApiState());
});
fetchMock.reset();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
});
test('renders with default props', async () => {
@@ -125,35 +134,27 @@ test('renders table options without Select All option', async () => {
const props = createProps();
render(<TableSelector {...props} />, { useRedux: true, store });
- const tableSelect = screen.getByRole('combobox', {
- name: 'Select table or type to search tables',
- });
- userEvent.click(tableSelect);
- expect(
- await screen.findByRole('option', { name: 'table_a' }),
- ).toBeInTheDocument();
- expect(
- await screen.findByRole('option', { name: 'table_b' }),
- ).toBeInTheDocument();
-});
-test('renders disabled without schema', async () => {
- fetchMock.get(catalogApiRoute, { result: [] });
- fetchMock.get(schemaApiRoute, { result: [] });
- fetchMock.get(tablesApiRoute, getTableMockFunction());
-
- const props = createProps();
- render(<TableSelector {...props} schema={undefined} />, {
- useRedux: true,
- store,
- });
const tableSelect = screen.getByRole('combobox', {
name: 'Select table or type to search tables',
});
- await waitFor(() => {
- expect(tableSelect).toBeDisabled();
+
+ await act(async () => {
+ userEvent.click(tableSelect);
});
-});
+
+ await waitFor(
+ () => {
+ expect(
+ screen.getByRole('option', { name: 'table_a' }),
+ ).toBeInTheDocument();
+ expect(
+ screen.getByRole('option', { name: 'table_b' }),
+ ).toBeInTheDocument();
+ },
+ { timeout: 10000 },
+ );
+}, 15000);
test('table select retain value if not in SQL Lab mode', async () => {
fetchMock.get(catalogApiRoute, { result: [] });
@@ -175,26 +176,59 @@ test('table select retain value if not in SQL Lab mode', async () => {
expect(screen.queryByText('table_a')).not.toBeInTheDocument();
expect(getSelectItemContainer(tableSelect)).toHaveLength(0);
- userEvent.click(tableSelect);
+ await act(async () => {
+ userEvent.click(tableSelect);
+ });
- expect(
- await screen.findByRole('option', { name: 'table_a' }),
- ).toBeInTheDocument();
+ await waitFor(
+ () => {
+ expect(
+ screen.getByRole('option', { name: 'table_a' }),
+ ).toBeInTheDocument();
+ },
+ { timeout: 10000 },
+ );
- await waitFor(() => {
+ await act(async () => {
userEvent.click(screen.getAllByText('table_a')[1]);
});
- expect(callback).toHaveBeenCalled();
+ await waitFor(
+ () => {
+ expect(callback).toHaveBeenCalled();
+ },
+ { timeout: 10000 },
+ );
const selectedValueContainer = getSelectItemContainer(tableSelect);
-
expect(selectedValueContainer).toHaveLength(1);
- expect(
- await within(selectedValueContainer?.[0] as HTMLElement).findByText(
- 'table_a',
- ),
- ).toBeInTheDocument();
+
+ await waitFor(
+ () => {
+ expect(
+ within(selectedValueContainer?.[0] as HTMLElement).getByText('table_a'),
+ ).toBeInTheDocument();
+ },
+ { timeout: 10000 },
+ );
+}, 15000);
+
+test('renders disabled without schema', async () => {
+ fetchMock.get(catalogApiRoute, { result: [] });
+ fetchMock.get(schemaApiRoute, { result: [] });
+ fetchMock.get(tablesApiRoute, getTableMockFunction());
+
+ const props = createProps();
+ render(<TableSelector {...props} schema={undefined} />, {
+ useRedux: true,
+ store,
+ });
+ const tableSelect = screen.getByRole('combobox', {
+ name: 'Select table or type to search tables',
+ });
+ await waitFor(() => {
+ expect(tableSelect).toBeDisabled();
+ });
});
test('table multi select retain all the values selected', async () => {
diff --git a/superset-frontend/src/dashboard/components/Dashboard.test.jsx b/superset-frontend/src/dashboard/components/Dashboard.test.jsx
index 60652210ad..8fc1760bc3 100644
--- a/superset-frontend/src/dashboard/components/Dashboard.test.jsx
+++ b/superset-frontend/src/dashboard/components/Dashboard.test.jsx
@@ -85,7 +85,7 @@ describe('Dashboard', () => {
it('should render the children component', () => {
const wrapper = setup();
- expect(wrapper.find(ChildrenComponent)).toExist();
+ expect(wrapper.find(ChildrenComponent)).toBeTruthy();
});
describe('UNSAFE_componentWillReceiveProps', () => {
diff --git a/superset-frontend/src/dashboard/components/SliceAdder.test.tsx b/superset-frontend/src/dashboard/components/SliceAdder.test.tsx
index a0a6acb568..689f86f783 100644
--- a/superset-frontend/src/dashboard/components/SliceAdder.test.tsx
+++ b/superset-frontend/src/dashboard/components/SliceAdder.test.tsx
@@ -84,7 +84,7 @@ describe('SliceAdder', () => {
it('render chart list', () => {
const wrapper = styledShallow(<SliceAdder {...props} />);
wrapper.setState({ filteredSlices: Object.values(props.slices) });
- expect(wrapper.find(ChartList)).toExist();
+ expect(wrapper.find(ChartList)).toBeTruthy();
});
it('render error', () => {
diff --git a/superset-frontend/src/dashboard/components/SliceHeaderControls/SliceHeaderControls.test.tsx b/superset-frontend/src/dashboard/components/SliceHeaderControls/SliceHeaderControls.test.tsx
index e1f20b5505..130d49b8d9 100644
--- a/superset-frontend/src/dashboard/components/SliceHeaderControls/SliceHeaderControls.test.tsx
+++ b/superset-frontend/src/dashboard/components/SliceHeaderControls/SliceHeaderControls.test.tsx
@@ -219,7 +219,7 @@ test('Export full Excel is under featureflag', async () => {
userEvent.hover(screen.getByText('Download'));
expect(await screen.findByText('Export to Excel')).toBeInTheDocument();
expect(screen.queryByText('Export to full Excel')).not.toBeInTheDocument();
-});
+}, 10000);
test('Should "export full Excel"', async () => {
(global as any).featureFlags = {
diff --git a/superset-frontend/src/dashboard/components/dnd/DragDroppable.test.jsx b/superset-frontend/src/dashboard/components/dnd/DragDroppable.test.jsx
index 09cf62d3f4..a850967be3 100644
--- a/superset-frontend/src/dashboard/components/dnd/DragDroppable.test.jsx
+++ b/superset-frontend/src/dashboard/components/dnd/DragDroppable.test.jsx
@@ -53,12 +53,12 @@ describe('DragDroppable', () => {
it('should render a div with class dragdroppable', () => {
const wrapper = setup();
- expect(wrapper.find('.dragdroppable')).toExist();
+ expect(wrapper.find('.dragdroppable')).toBeTruthy();
});
it('should add class dragdroppable--dragging when dragging', () => {
const wrapper = setup({ isDragging: true });
- expect(wrapper.find('.dragdroppable')).toExist();
+ expect(wrapper.find('.dragdroppable')).toBeTruthy();
});
it('should call its child function', () => {
diff --git a/superset-frontend/src/dashboard/components/filterscope/FilterScope.test.tsx b/superset-frontend/src/dashboard/components/filterscope/FilterScope.test.tsx
index e061db31e1..a36c50185f 100644
--- a/superset-frontend/src/dashboard/components/filterscope/FilterScope.test.tsx
+++ b/superset-frontend/src/dashboard/components/filterscope/FilterScope.test.tsx
@@ -17,10 +17,18 @@
* under the License.
*/
import { supersetTheme } from '@superset-ui/core';
-import { render, screen } from 'spec/helpers/testing-library';
+import { render, screen, waitFor } from 'spec/helpers/testing-library';
import userEvent from '@testing-library/user-event';
+import { cleanup } from '@testing-library/react';
import FilterScopeSelector from './FilterScopeSelector';
+// Add afterEach cleanup
+afterEach(async () => {
+ cleanup();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
const ROOT_ID = 'ROOT_ID';
const GRID = 'GRID';
const TABS = 'TABS';
@@ -164,10 +172,11 @@ function getCheckboxState(name: string): CheckboxState {
: UNCHECKED;
}
-function clickCheckbox(name: string) {
+// Replace the original clickCheckbox function with the async version
+async function clickCheckbox(name: string) {
const element = screen.getByRole('link', { name });
const checkboxLabel = getCheckboxIcon(element);
- userEvent.click(checkboxLabel);
+ await userEvent.click(checkboxLabel);
}
test('renders with empty filters', () => {
@@ -249,56 +258,40 @@ test('searches for a chart', () => {
expect(screen.getByRole('link', { name: CHART_C })).toBeInTheDocument();
});
-test('selects a leaf filter', () => {
+// Update all tests that use clickCheckbox to be async and await the function call
+test('selects a leaf filter', async () => {
render(<FilterScopeSelector {...createProps()} />, {
useRedux: true,
});
expect(getCheckboxState(FILTER_C)).toBe(UNCHECKED);
- clickCheckbox(FILTER_C);
+ await clickCheckbox(FILTER_C);
expect(getCheckboxState(FILTER_C)).toBe(CHECKED);
});
-test('selects a leaf chart', () => {
+test('selects a leaf chart', async () => {
render(<FilterScopeSelector {...createProps()} />, {
useRedux: true,
});
userEvent.click(screen.getAllByRole('button', { name: EXPAND_ALL })[1]);
expect(getCheckboxState(CHART_D)).toBe(UNCHECKED);
- clickCheckbox(CHART_D);
+ await clickCheckbox(CHART_D);
expect(getCheckboxState(CHART_D)).toBe(CHECKED);
});
-test('selects a branch of filters', () => {
+test('selects a branch of filters', async () => {
render(<FilterScopeSelector {...createProps()} />, {
useRedux: true,
});
expect(getCheckboxState(FILTER_A)).toBe(UNCHECKED);
expect(getCheckboxState(FILTER_B)).toBe(UNCHECKED);
expect(getCheckboxState(FILTER_C)).toBe(UNCHECKED);
- clickCheckbox(FILTER_A);
+ await clickCheckbox(FILTER_A);
expect(getCheckboxState(FILTER_A)).toBe(CHECKED);
expect(getCheckboxState(FILTER_B)).toBe(CHECKED);
expect(getCheckboxState(FILTER_C)).toBe(CHECKED);
});
-test('selects a branch of charts', () => {
- render(<FilterScopeSelector {...createProps()} />, {
- useRedux: true,
- });
-
- const tabA = screen.getByText(TAB_A);
- userEvent.click(tabA);
-
- expect(getCheckboxState(TAB_A)).toBe(UNCHECKED);
- expect(getCheckboxState(CHART_A)).toBe(UNCHECKED);
- expect(getCheckboxState(CHART_B)).toBe(UNCHECKED);
- clickCheckbox(TAB_A);
- expect(getCheckboxState(TAB_A)).toBe(CHECKED);
- expect(getCheckboxState(CHART_A)).toBe(CHECKED);
- expect(getCheckboxState(CHART_B)).toBe(CHECKED);
-});
-
-test('selects all filters', () => {
+test('selects all filters', async () => {
render(<FilterScopeSelector {...createProps()} />, {
useRedux: true,
});
@@ -307,14 +300,14 @@ test('selects all filters', () => {
expect(getCheckboxState(FILTER_A)).toBe(UNCHECKED);
expect(getCheckboxState(FILTER_B)).toBe(UNCHECKED);
expect(getCheckboxState(FILTER_C)).toBe(UNCHECKED);
- clickCheckbox(ALL_FILTERS);
+ await clickCheckbox(ALL_FILTERS);
expect(getCheckboxState(ALL_FILTERS)).toBe(CHECKED);
expect(getCheckboxState(FILTER_A)).toBe(CHECKED);
expect(getCheckboxState(FILTER_B)).toBe(CHECKED);
expect(getCheckboxState(FILTER_C)).toBe(CHECKED);
});
-test('selects all charts', () => {
+test('selects all charts', async () => {
render(<FilterScopeSelector {...createProps()} />, {
useRedux: true,
});
@@ -325,7 +318,7 @@ test('selects all charts', () => {
expect(getCheckboxState(TAB_B)).toBe(UNCHECKED);
expect(getCheckboxState(CHART_C)).toBe(UNCHECKED);
expect(getCheckboxState(CHART_D)).toBe(UNCHECKED);
- clickCheckbox(ALL_CHARTS);
+ await clickCheckbox(ALL_CHARTS);
expect(getCheckboxState(TAB_A)).toBe(CHECKED);
expect(getCheckboxState(CHART_A)).toBe(CHECKED);
expect(getCheckboxState(CHART_B)).toBe(CHECKED);
diff --git a/superset-frontend/src/dashboard/components/gridComponents/Column.test.jsx b/superset-frontend/src/dashboard/components/gridComponents/Column.test.jsx
index ec80320747..b70f865dd3 100644
--- a/superset-frontend/src/dashboard/components/gridComponents/Column.test.jsx
+++ b/superset-frontend/src/dashboard/components/gridComponents/Column.test.jsx
@@ -158,7 +158,7 @@ test('should render a DeleteComponentButton in editMode', () => {
test.skip('should render a BackgroundStyleDropdown when focused', () => {
let wrapper = setup({ component: columnWithoutChildren });
- expect(wrapper.find(BackgroundStyleDropdown)).not.toExist();
+ expect(wrapper.find(BackgroundStyleDropdown)).toBeFalsy();
// we cannot set props on the Row because of the WithDragDropContext wrapper
wrapper = setup({ component: columnWithoutChildren, editMode: true });
@@ -167,7 +167,7 @@ test.skip('should render a BackgroundStyleDropdown when focused', () => {
.at(1) // first one is delete button
.simulate('click');
- expect(wrapper.find(BackgroundStyleDropdown)).toExist();
+ expect(wrapper.find(BackgroundStyleDropdown)).toBeTruthy();
});
test('should call deleteComponent when deleted', () => {
diff --git a/superset-frontend/src/dashboard/components/gridComponents/Header.test.jsx b/superset-frontend/src/dashboard/components/gridComponents/Header.test.jsx
index 0446eb13af..5970822404 100644
--- a/superset-frontend/src/dashboard/components/gridComponents/Header.test.jsx
+++ b/superset-frontend/src/dashboard/components/gridComponents/Header.test.jsx
@@ -67,27 +67,27 @@ describe('Header', () => {
it('should render a Draggable', () => {
const wrapper = setup();
- expect(wrapper.find(Draggable)).toExist();
+ expect(wrapper.find(Draggable)).toBeTruthy();
});
it('should render a WithPopoverMenu', () => {
const wrapper = setup();
- expect(wrapper.find(WithPopoverMenu)).toExist();
+ expect(wrapper.find(WithPopoverMenu)).toBeTruthy();
});
it('should render a HoverMenu in editMode', () => {
let wrapper = setup();
- expect(wrapper.find(HoverMenu)).not.toExist();
+ expect(wrapper.find(HoverMenu).length).toBe(0);
// we cannot set props on the Header because of the WithDragDropContext wrapper
wrapper = setup({ editMode: true });
- expect(wrapper.find(HoverMenu)).toExist();
+ expect(wrapper.find(HoverMenu).length).toBeGreaterThan(0);
});
it('should render an EditableTitle with meta.text', () => {
const wrapper = setup();
- expect(wrapper.find(EditableTitle)).toExist();
- expect(wrapper.find('.editable-title')).toHaveText(
+ expect(wrapper.find(EditableTitle)).toBeTruthy();
+ expect(wrapper.find('.editable-title').text()).toBe(
props.component.meta.text,
);
});
@@ -108,7 +108,7 @@ describe('Header', () => {
const wrapper = setup({ editMode: true });
wrapper.find(WithPopoverMenu).simulate('click'); // focus
- expect(wrapper.find(DeleteComponentButton)).toExist();
+ expect(wrapper.find(DeleteComponentButton)).toBeTruthy();
});
it('should call deleteComponent when deleted', () => {
@@ -122,16 +122,16 @@ describe('Header', () => {
it('should render the AnchorLink in view mode', () => {
const wrapper = setup();
- expect(wrapper.find('AnchorLink')).toExist();
+ expect(wrapper.find('AnchorLink')).toBeTruthy();
});
it('should not render the AnchorLink in edit mode', () => {
const wrapper = setup({ editMode: true });
- expect(wrapper.find('AnchorLink')).not.toExist();
+ expect(wrapper.find('AnchorLink').length).toBe(0);
});
it('should not render the AnchorLink in embedded mode', () => {
const wrapper = setup({ embeddedMode: true });
- expect(wrapper.find('AnchorLink')).not.toExist();
+ expect(wrapper.find('AnchorLink').length).toBe(0);
});
});
diff --git a/superset-frontend/src/dashboard/components/gridComponents/Markdown.test.jsx b/superset-frontend/src/dashboard/components/gridComponents/Markdown.test.jsx
index 4d647e49a6..4b91feb031 100644
--- a/superset-frontend/src/dashboard/components/gridComponents/Markdown.test.jsx
+++ b/superset-frontend/src/dashboard/components/gridComponents/Markdown.test.jsx
@@ -74,17 +74,17 @@ describe('Markdown', () => {
it('should render a Draggable', () => {
const wrapper = setup();
- expect(wrapper.find(Draggable)).toExist();
+ expect(wrapper.find(Draggable)).toBeTruthy();
});
it('should render a WithPopoverMenu', () => {
const wrapper = setup();
- expect(wrapper.find(WithPopoverMenu)).toExist();
+ expect(wrapper.find(WithPopoverMenu)).toBeTruthy();
});
it('should render a ResizableContainer', () => {
const wrapper = setup();
- expect(wrapper.find(ResizableContainer)).toExist();
+ expect(wrapper.find(ResizableContainer)).toBeTruthy();
});
it('should only have an adjustableWidth if its parent is a Row', () => {
@@ -110,27 +110,27 @@ describe('Markdown', () => {
it('should render an Markdown when NOT focused', () => {
const wrapper = setup();
- expect(wrapper.find(MarkdownEditor)).not.toExist();
- expect(wrapper.find(SafeMarkdown)).toExist();
+ expect(wrapper.find(MarkdownEditor).length).toBe(0);
+ expect(wrapper.find(SafeMarkdown).length).toBeGreaterThan(0);
});
it('should render an AceEditor when focused and editMode=true and editorMode=edit', async () => {
const wrapper = setup({ editMode: true });
- expect(wrapper.find(MarkdownEditor)).not.toExist();
- expect(wrapper.find(SafeMarkdown)).toExist();
+ expect(wrapper.find(MarkdownEditor).length).toBe(0);
+ expect(wrapper.find(SafeMarkdown).length).toBeGreaterThan(0);
act(() => {
wrapper.find(WithPopoverMenu).simulate('click'); // focus + edit
});
await waitForComponentToPaint(wrapper);
- expect(wrapper.find(MarkdownEditor)).toExist();
- expect(wrapper.find(SafeMarkdown)).not.toExist();
+ expect(wrapper.find(MarkdownEditor).length).toBeGreaterThan(0);
+ expect(wrapper.find(SafeMarkdown).length).toBe(0);
});
it('should render a ReactMarkdown when focused and editMode=true and editorMode=preview', () => {
const wrapper = setup({ editMode: true });
wrapper.find(WithPopoverMenu).simulate('click'); // focus + edit
- expect(wrapper.find(MarkdownEditor)).toExist();
- expect(wrapper.find(SafeMarkdown)).not.toExist();
+ expect(wrapper.find(MarkdownEditor).length).toBeGreaterThan(0);
+ expect(wrapper.find(SafeMarkdown).length).toBe(0);
// we can't call setState on Markdown bc it's not the root component, so call
// the mode dropdown onchange instead
@@ -138,8 +138,8 @@ describe('Markdown', () => {
dropdown.prop('onChange')('preview');
wrapper.update();
- expect(wrapper.find(SafeMarkdown)).toExist();
- expect(wrapper.find(MarkdownEditor)).not.toExist();
+ expect(wrapper.find(SafeMarkdown).length).toBeGreaterThan(0);
+ expect(wrapper.find(MarkdownEditor).length).toBe(0);
});
it('should call updateComponents when editMode changes from edit => preview, and there are markdownSource changes', () => {
@@ -166,7 +166,7 @@ describe('Markdown', () => {
const wrapper = setup({ editMode: true });
wrapper.find(WithPopoverMenu).simulate('click'); // focus
- expect(wrapper.find(DeleteComponentButton)).toExist();
+ expect(wrapper.find(DeleteComponentButton)).toBeTruthy();
});
it('should call deleteComponent when deleted', () => {
diff --git a/superset-frontend/src/dashboard/components/gridComponents/Row.test.jsx b/superset-frontend/src/dashboard/components/gridComponents/Row.test.jsx
index b0be02518b..1d7c4a39d2 100644
--- a/superset-frontend/src/dashboard/components/gridComponents/Row.test.jsx
+++ b/superset-frontend/src/dashboard/components/gridComponents/Row.test.jsx
@@ -152,7 +152,7 @@ test('should render a DeleteComponentButton in editMode', () => {
test.skip('should render a BackgroundStyleDropdown when focused', () => {
let wrapper = setup({ component: rowWithoutChildren });
- expect(wrapper.find(BackgroundStyleDropdown)).not.toExist();
+ expect(wrapper.find(BackgroundStyleDropdown)).toBeFalsy();
// we cannot set props on the Row because of the WithDragDropContext wrapper
wrapper = setup({ component: rowWithoutChildren, editMode: true });
@@ -161,7 +161,7 @@ test.skip('should render a BackgroundStyleDropdown when focused', () => {
.at(1) // first one is delete button
.simulate('click');
- expect(wrapper.find(BackgroundStyleDropdown)).toExist();
+ expect(wrapper.find(BackgroundStyleDropdown)).toBeTruthy();
});
test('should call deleteComponent when deleted', () => {
diff --git a/superset-frontend/src/dashboard/components/gridComponents/Tab.test.jsx b/superset-frontend/src/dashboard/components/gridComponents/Tab.test.jsx
index 853daabf79..87ef469cf6 100644
--- a/superset-frontend/src/dashboard/components/gridComponents/Tab.test.jsx
+++ b/superset-frontend/src/dashboard/components/gridComponents/Tab.test.jsx
@@ -81,7 +81,7 @@ describe.skip('Tabs', () => {
describe('renderType=RENDER_TAB', () => {
it('should render a DragDroppable', () => {
const wrapper = setup();
- expect(wrapper.find(DragDroppable)).toExist();
+ expect(wrapper.find(DragDroppable)).toBeTruthy();
});
it('should render an EditableTitle with meta.text', () => {
diff --git a/superset-frontend/src/dashboard/components/gridComponents/new/DraggableNewComponent.test.jsx b/superset-frontend/src/dashboard/components/gridComponents/new/DraggableNewComponent.test.jsx
index 333b86a939..6596a7b68d 100644
--- a/superset-frontend/src/dashboard/components/gridComponents/new/DraggableNewComponent.test.jsx
+++ b/superset-frontend/src/dashboard/components/gridComponents/new/DraggableNewComponent.test.jsx
@@ -50,7 +50,7 @@ describe.skip('DraggableNewComponent', () => {
it('should render a DragDroppable', () => {
const wrapper = setup();
- expect(wrapper.find(DragDroppable)).toExist();
+ expect(wrapper.find(DragDroppable)).toBeTruthy();
});
it('should pass component={ type, id } to DragDroppable', () => {
@@ -81,6 +81,6 @@ describe.skip('DraggableNewComponent', () => {
it('should add the passed className', () => {
const wrapper = setup();
const className = `.new-component-placeholder.${props.className}`;
- expect(wrapper.find(className)).toExist();
+ expect(wrapper.find(className)).toBeTruthy();
});
});
diff --git a/superset-frontend/src/dashboard/components/gridComponents/new/NewTabs.test.jsx b/superset-frontend/src/dashboard/components/gridComponents/new/NewTabs.test.jsx
index eb00f9b205..7984d8eac7 100644
--- a/superset-frontend/src/dashboard/components/gridComponents/new/NewTabs.test.jsx
+++ b/superset-frontend/src/dashboard/components/gridComponents/new/NewTabs.test.jsx
@@ -16,13 +16,20 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { render } from 'spec/helpers/testing-library';
+import { render, cleanup } from 'spec/helpers/testing-library';
import NewTabs from 'src/dashboard/components/gridComponents/new/NewTabs';
import { NEW_TABS_ID } from 'src/dashboard/util/constants';
import { TABS_TYPE } from 'src/dashboard/util/componentTypes';
+// Add cleanup after each test
+afterEach(async () => {
+ cleanup();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
jest.mock(
'src/dashboard/components/gridComponents/new/DraggableNewComponent',
() =>
@@ -35,12 +42,12 @@ function setup() {
return render(<NewTabs />);
}
-test('should render a DraggableNewComponent', () => {
+test('should render a DraggableNewComponent', async () => {
const { getByTestId } = setup();
expect(getByTestId('mock-draggable-new-component')).toBeInTheDocument();
});
-test('should set appropriate type and id', () => {
+test('should set appropriate type and id', async () => {
const { getByTestId } = setup();
expect(getByTestId('mock-draggable-new-component')).toHaveTextContent(
`${TABS_TYPE}:${NEW_TABS_ID}`,
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/CrossFilters/CrossFilterTitle.test.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/CrossFilters/CrossFilterTitle.test.tsx
index 5dc8d9a282..eaa8d6722d 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/CrossFilters/CrossFilterTitle.test.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/CrossFilters/CrossFilterTitle.test.tsx
@@ -17,7 +17,7 @@
* under the License.
*/
import userEvent from '@testing-library/user-event';
-import { render, screen } from 'spec/helpers/testing-library';
+import { render, screen, waitFor } from 'spec/helpers/testing-library';
import { FilterBarOrientation } from 'src/dashboard/types';
import CrossFilterTitle from './CrossFilterTitle';
@@ -32,20 +32,37 @@ const setup = (props: typeof mockedProps) =>
useRedux: true,
});
-test('CrossFilterTitle should render', () => {
+// Add cleanup
+afterEach(async () => {
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
+test('CrossFilterTitle should render', async () => {
const { container } = setup(mockedProps);
- expect(container).toBeInTheDocument();
+ await waitFor(() => {
+ expect(container).toBeInTheDocument();
+ });
});
-test('Title should be visible', () => {
+test('Title should be visible', async () => {
setup(mockedProps);
- expect(screen.getByText('test-title')).toBeInTheDocument();
+ await waitFor(() => {
+ expect(screen.getByText('test-title')).toBeInTheDocument();
+ });
});
-test('Search icon should highlight emitter', () => {
+test('Search icon should highlight emitter', async () => {
setup(mockedProps);
+ await waitFor(() => {
+ const search = screen.getByTestId('cross-filters-highlight-emitter');
+ expect(search).toBeInTheDocument();
+ });
+
const search = screen.getByTestId('cross-filters-highlight-emitter');
- expect(search).toBeInTheDocument();
- userEvent.click(search);
- expect(mockedProps.onHighlightFilterSource).toHaveBeenCalled();
+ await userEvent.click(search);
+
+ await waitFor(() => {
+ expect(mockedProps.onHighlightFilterSource).toHaveBeenCalled();
+ });
});
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/FilterBarSettings.test.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/FilterBarSettings.test.tsx
index b073fe655e..46e0e365f5 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/FilterBarSettings.test.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterBarSettings/FilterBarSettings.test.tsx
@@ -18,7 +18,7 @@
*/
import fetchMock from 'fetch-mock';
-import { waitFor } from '@testing-library/react';
+import { waitFor, cleanup } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { render, screen, within } from 'spec/helpers/testing-library';
import { DashboardInfo, FilterBarOrientation } from 'src/dashboard/types';
@@ -76,6 +76,14 @@ beforeEach(() => {
fetchMock.restore();
});
+// Add cleanup after each test
+afterEach(async () => {
+ cleanup();
+ fetchMock.restore();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
test('Dropdown trigger renders with FF HORIZONTAL_FILTER_BAR on', async () => {
// @ts-ignore
global.featureFlags = {
@@ -136,13 +144,27 @@ test('Popover opens with "Vertical" selected', async () => {
[FeatureFlag.HorizontalFilterBar]: true,
};
await setup();
- userEvent.click(screen.getByLabelText('gear'));
- userEvent.hover(screen.getByText('Orientation of filter bar'));
- expect(await screen.findByText('Vertical (Left)')).toBeInTheDocument();
- expect(screen.getByText('Horizontal (Top)')).toBeInTheDocument();
- expect(
- within(screen.getAllByRole('menuitem')[4]).getByLabelText('check'),
- ).toBeInTheDocument();
+
+ // Wait for gear icon to be visible and click it
+ const gearIcon = await waitFor(() => screen.getByLabelText('gear'));
+ userEvent.click(gearIcon);
+
+ // Wait for orientation text and hover
+ const orientationText = await waitFor(() =>
+ screen.getByText('Orientation of filter bar'),
+ );
+ userEvent.hover(orientationText);
+
+ // Wait for submenu to appear and verify options
+ await waitFor(
+ () => {
+ expect(screen.getByText('Vertical (Left)')).toBeInTheDocument();
+ expect(screen.getByText('Horizontal (Top)')).toBeInTheDocument();
+ const menuItems = screen.getAllByRole('menuitem');
+ expect(within(menuItems[4]).getByLabelText('check')).toBeInTheDocument();
+ },
+ { timeout: 3000 },
+ );
});
test('Popover opens with "Horizontal" selected', async () => {
@@ -218,7 +240,7 @@ test('On selection change, send request and update checked value', async () => {
expect(
within(screen.getAllByRole('menuitem')[4]).queryByLabelText('check'),
).not.toBeInTheDocument();
-});
+}, 10000);
test('On failed request, restore previous selection', async () => {
// @ts-ignore
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterConfigurationLink/FilterConfigurationLink.test.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterConfigurationLink/FilterConfigurationLink.test.tsx
index 0b5a18835d..e0904cb79b 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterConfigurationLink/FilterConfigurationLink.test.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterConfigurationLink/FilterConfigurationLink.test.tsx
@@ -16,10 +16,17 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { render, screen } from 'spec/helpers/testing-library';
+import { render, screen, cleanup } from 'spec/helpers/testing-library';
import userEvent from '@testing-library/user-event';
import FilterConfigurationLink from '.';
+// Add cleanup after each test
+afterEach(async () => {
+ cleanup();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
test('should render', () => {
const { container } = render(
<FilterConfigurationLink>Config link</FilterConfigurationLink>,
@@ -37,12 +44,12 @@ test('should render the config link text', () => {
expect(screen.getByText('Config link')).toBeInTheDocument();
});
-test('should render the modal on click', () => {
+test('should render the modal on click', async () => {
render(<FilterConfigurationLink>Config link</FilterConfigurationLink>, {
useRedux: true,
});
const configLink = screen.getByText('Config link');
expect(screen.queryByRole('dialog')).not.toBeInTheDocument();
- userEvent.click(configLink);
+ await userEvent.click(configLink);
expect(screen.getByRole('dialog')).toBeInTheDocument();
});
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.test.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.test.tsx
index d836b8255b..46c55c1801 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.test.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FilterScope/FilterScope.test.tsx
@@ -22,6 +22,7 @@ import {
screen,
fireEvent,
waitFor,
+ cleanup,
} from 'spec/helpers/testing-library';
import { mockStoreWithChartsInTabsAndRoot } from 'spec/fixtures/mockStore';
import { AntdForm, FormInstance } from 'src/components';
@@ -74,46 +75,80 @@ describe('FilterScope', () => {
const getTreeSwitcher = (order = 0) =>
document.querySelectorAll('.ant-tree-switcher')[order];
- it('renders "apply to all" filter scope', () => {
- render(<MockModal />);
+ beforeAll(() => {
+ jest.setTimeout(30000);
+ });
+
+ afterEach(async () => {
+ cleanup();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+ });
+
+ it('renders "apply to all" filter scope', async () => {
+ const { unmount } = render(<MockModal />);
expect(screen.queryByRole('tree')).not.toBeInTheDocument();
+ unmount();
});
it('select tree values with 1 excluded', async () => {
- render(<MockModal />);
- fireEvent.click(screen.getByText('Scoping'));
+ const { unmount } = render(<MockModal />);
+ await waitFor(() => {
+ fireEvent.click(screen.getByText('Scoping'));
+ });
+
expect(screen.getByRole('tree')).toBeInTheDocument();
- fireEvent.click(getTreeSwitcher(2));
- fireEvent.click(screen.getByText('CHART_ID2'));
- await waitFor(() =>
- expect(
- form.getFieldValue('filters')?.[mockedProps.filterId].scope,
- ).toEqual({
- excluded: [20],
- rootPath: ['ROOT_ID'],
- }),
+
+ await waitFor(() => {
+ fireEvent.click(getTreeSwitcher(2));
+ fireEvent.click(screen.getByText('CHART_ID2'));
+ });
+
+ await waitFor(
+ () =>
+ expect(
+ form.getFieldValue('filters')?.[mockedProps.filterId].scope,
+ ).toEqual({
+ excluded: [20],
+ rootPath: ['ROOT_ID'],
+ }),
+ { timeout: 10000 },
);
- });
+
+ unmount();
+ }, 15000);
it('select 1 value only', async () => {
- render(<MockModal />);
- fireEvent.click(screen.getByText('Scoping'));
+ const { unmount } = render(<MockModal />);
+
+ await waitFor(() => {
+ fireEvent.click(screen.getByText('Scoping'));
+ });
+
expect(screen.getByRole('tree')).toBeInTheDocument();
- fireEvent.click(getTreeSwitcher(2));
- fireEvent.click(screen.getByText('CHART_ID2'));
- fireEvent.click(screen.getByText('tab1'));
- await waitFor(() =>
- expect(
- form.getFieldValue('filters')?.[mockedProps.filterId].scope,
- ).toEqual({
- excluded: [18, 20],
- rootPath: ['ROOT_ID'],
- }),
+
+ await waitFor(() => {
+ fireEvent.click(getTreeSwitcher(2));
+ fireEvent.click(screen.getByText('CHART_ID2'));
+ fireEvent.click(screen.getByText('tab1'));
+ });
+
+ await waitFor(
+ () =>
+ expect(
+ form.getFieldValue('filters')?.[mockedProps.filterId].scope,
+ ).toEqual({
+ excluded: [18, 20],
+ rootPath: ['ROOT_ID'],
+ }),
+ { timeout: 10000 },
);
- });
+
+ unmount();
+ }, 15000);
it('correct init tree with values', async () => {
- render(
+ const { unmount } = render(
<MockModal
scope={{
rootPath: ['TAB_ID'],
@@ -121,13 +156,21 @@ describe('FilterScope', () => {
}}
/>,
);
- fireEvent.click(screen.getByText('Scoping'));
await waitFor(() => {
- expect(screen.getByRole('tree')).toBeInTheDocument();
- expect(
- document.querySelectorAll('.ant-tree-checkbox-checked').length,
- ).toBe(4);
+ fireEvent.click(screen.getByText('Scoping'));
});
- });
+
+ await waitFor(
+ () => {
+ expect(screen.getByRole('tree')).toBeInTheDocument();
+ expect(
+ document.querySelectorAll('.ant-tree-checkbox-checked').length,
+ ).toBe(4);
+ },
+ { timeout: 10000 },
+ );
+
+ unmount();
+ }, 15000);
});
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.test.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.test.tsx
index b711e06b5b..9749fc69f0 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.test.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigModal.test.tsx
@@ -36,6 +36,7 @@ import {
TimeFilterPlugin,
TimeGrainFilterPlugin,
} from 'src/filters/components';
+import { cleanup } from '@testing-library/react';
import FiltersConfigModal, {
FiltersConfigModalProps,
} from './FiltersConfigModal';
@@ -156,24 +157,17 @@ afterEach(() => {
jest.restoreAllMocks();
});
-function defaultRender(initialState: any = defaultState(), modalProps = props) {
- return render(<FiltersConfigModal {...modalProps} />, {
- initialState,
- useDnd: true,
- useRedux: true,
- });
-}
-
-function getCheckbox(name: RegExp) {
- return screen.getByRole('checkbox', { name });
-}
-
-function queryCheckbox(name: RegExp) {
- return screen.queryByRole('checkbox', { name });
-}
+// Add cleanup after each test
+afterEach(async () => {
+ cleanup();
+ jest.restoreAllMocks();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
describe('FiltersConfigModal', () => {
- jest.setTimeout(15000);
+ // Increase the global timeout
+ jest.setTimeout(30000);
test('renders a value filter type', () => {
defaultRender();
@@ -315,13 +309,23 @@ describe('FiltersConfigModal', () => {
test('validates the pre-filter value', async () => {
defaultRender();
+ await waitFor(() => {
+ expect(screen.getByText(FILTER_SETTINGS_REGEX)).toBeInTheDocument();
+ });
+
userEvent.click(screen.getByText(FILTER_SETTINGS_REGEX));
+ await waitFor(() => {
+ expect(getCheckbox(PRE_FILTER_REGEX)).toBeInTheDocument();
+ });
+
userEvent.click(getCheckbox(PRE_FILTER_REGEX));
- expect(
- await screen.findByText(PRE_FILTER_REQUIRED_REGEX),
- ).toBeInTheDocument();
- // longer timeout to decrease flakiness
- }, 10000);
+ await waitFor(
+ () => {
+ expect(screen.getByText(PRE_FILTER_REQUIRED_REGEX)).toBeInTheDocument();
+ },
+ { timeout: 20000 },
+ );
+ }, 30000); // Set individual test timeout to 30 seconds
// eslint-disable-next-line jest/no-disabled-tests
test.skip("doesn't render time range pre-filter if there are no temporal columns in datasource", async () => {
diff --git a/superset-frontend/src/explore/components/DataTablesPane/test/DataTablesPane.test.tsx b/superset-frontend/src/explore/components/DataTablesPane/test/DataTablesPane.test.tsx
index 4dcb5c7000..bdf457b2a3 100644
--- a/superset-frontend/src/explore/components/DataTablesPane/test/DataTablesPane.test.tsx
+++ b/superset-frontend/src/explore/components/DataTablesPane/test/DataTablesPane.test.tsx
@@ -72,7 +72,7 @@ describe('DataTablesPane', () => {
expect(await screen.findByText('0 rows')).toBeVisible();
expect(await screen.findByLabelText('Collapse data panel')).toBeVisible();
localStorage.clear();
- });
+ }, 10000);
test('Should show tabs: View samples', async () => {
const props = createDataTablesPaneProps(0);
render(<DataTablesPane {...props} />, {
diff --git a/superset-frontend/src/explore/components/DatasourcePanel/DatasourcePanel.test.tsx b/superset-frontend/src/explore/components/DatasourcePanel/DatasourcePanel.test.tsx
index c2d234e139..bdf571fa45 100644
--- a/superset-frontend/src/explore/components/DatasourcePanel/DatasourcePanel.test.tsx
+++ b/superset-frontend/src/explore/components/DatasourcePanel/DatasourcePanel.test.tsx
@@ -145,31 +145,62 @@ test('should render the columns', async () => {
).toBeInTheDocument();
});
-test('should render 0 search results', async () => {
- render(<DatasourcePanel {...props} />, { useRedux: true, useDnd: true });
- const searchInput = screen.getByPlaceholderText('Search Metrics & Columns');
+describe('DatasourcePanel', () => {
+ beforeAll(() => {
+ jest.setTimeout(30000);
+ });
- search('nothing', searchInput);
- expect(await screen.findAllByText('Showing 0 of 0')).toHaveLength(2);
-});
+ afterEach(async () => {
+ cleanup();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+ });
-test('should search and render matching columns', async () => {
- jest.setTimeout(10000);
- render(
- <ExploreContainer>
- <DatasourcePanel {...props} />
- <DndMetricSelect {...metricProps} />
- </ExploreContainer>,
- { useRedux: true, useDnd: true },
- );
- const searchInput = screen.getByPlaceholderText('Search Metrics & Columns');
+ test('should render 0 search results', async () => {
+ const { unmount } = render(<DatasourcePanel {...props} />, {
+ useRedux: true,
+ useDnd: true,
+ });
- search(columns[0].column_name, searchInput);
+ const searchInput = screen.getByPlaceholderText('Search Metrics & Columns');
+ search('nothing', searchInput);
- await waitFor(() => {
- expect(screen.getByText(columns[0].column_name)).toBeInTheDocument();
- expect(screen.queryByText(columns[1].column_name)).not.toBeInTheDocument();
- });
+ await waitFor(
+ () => {
+ expect(screen.getAllByText('Showing 0 of 0')).toHaveLength(2);
+ },
+ { timeout: 10000 },
+ );
+
+ unmount();
+ }, 15000);
+
+ test('should search and render matching columns', async () => {
+ const { unmount } = render(
+ <ExploreContainer>
+ <DatasourcePanel {...props} />
+ <DndMetricSelect {...metricProps} />
+ </ExploreContainer>,
+ { useRedux: true, useDnd: true },
+ );
+
+ const searchInput = screen.getByPlaceholderText('Search Metrics & Columns');
+ await waitFor(() => {
+ search(columns[0].column_name, searchInput);
+ });
+
+ await waitFor(
+ () => {
+ expect(screen.getByText(columns[0].column_name)).toBeInTheDocument();
+ expect(
+ screen.queryByText(columns[1].column_name),
+ ).not.toBeInTheDocument();
+ },
+ { timeout: 10000 },
+ );
+
+ unmount();
+ }, 15000);
});
test('should search and render matching metrics', async () => {
@@ -263,7 +294,7 @@ test('should render only droppable metrics and columns', async () => {
],
actions: { setControlValue: jest.fn() },
};
- const { getByTestId } = render(
+ const { getByTestId, unmount } = render(
<ExploreContainer>
<DatasourcePanel {...props} />
<DndColumnSelect {...column1FilterProps} />
@@ -271,14 +302,22 @@ test('should render only droppable metrics and columns', async () => {
</ExploreContainer>,
{ useRedux: true, useDnd: true },
);
- const selections = getByTestId('fieldSelections');
- expect(
- within(selections).queryByText(columns[0].column_name),
- ).not.toBeInTheDocument();
- expect(
- within(selections).queryByText(columns[1].column_name),
- ).toBeInTheDocument();
- expect(
- within(selections).queryByText(columns[2].column_name),
- ).toBeInTheDocument();
+
+ await waitFor(
+ () => {
+ const selections = getByTestId('fieldSelections');
+ expect(
+ within(selections).queryByText(columns[0].column_name),
+ ).not.toBeInTheDocument();
+ expect(
+ within(selections).getByText(columns[1].column_name),
+ ).toBeInTheDocument();
+ expect(
+ within(selections).getByText(columns[2].column_name),
+ ).toBeInTheDocument();
+ },
+ { timeout: 10000 },
+ );
+
+ unmount();
});
diff --git a/superset-frontend/src/explore/components/ExploreChartHeader/ExploreChartHeader.test.tsx b/superset-frontend/src/explore/components/ExploreChartHeader/ExploreChartHeader.test.tsx
index e316d52f2d..9eeed583eb 100644
--- a/superset-frontend/src/explore/components/ExploreChartHeader/ExploreChartHeader.test.tsx
+++ b/superset-frontend/src/explore/components/ExploreChartHeader/ExploreChartHeader.test.tsx
@@ -355,9 +355,12 @@ describe('Additional actions tests', () => {
spyDownloadAsImage = sinon.spy(downloadAsImage, 'default');
spyExportChart = sinon.spy(exploreUtils, 'exportChart');
});
- afterEach(() => {
+
+ afterEach(async () => {
spyDownloadAsImage.restore();
spyExportChart.restore();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
});
test('Should call downloadAsImage when click on "Download as image"', async () => {
@@ -367,16 +370,22 @@ describe('Additional actions tests', () => {
useRedux: true,
});
- expect(spy).toHaveBeenCalledTimes(0);
- userEvent.click(screen.getByLabelText('Menu actions trigger'));
- expect(spy).toHaveBeenCalledTimes(0);
+ await waitFor(() => {
+ expect(
+ screen.getByLabelText('Menu actions trigger'),
+ ).toBeInTheDocument();
+ });
+ userEvent.click(screen.getByLabelText('Menu actions trigger'));
userEvent.hover(screen.getByText('Download'));
+
const downloadAsImageElement =
await screen.findByText('Download as image');
userEvent.click(downloadAsImageElement);
- expect(spy).toHaveBeenCalledTimes(1);
+ await waitFor(() => {
+ expect(spy).toHaveBeenCalledTimes(1);
+ });
});
test('Should not export to CSV if canDownload=false', async () => {
diff --git a/superset-frontend/src/explore/components/PropertiesModal/PropertiesModal.test.tsx b/superset-frontend/src/explore/components/PropertiesModal/PropertiesModal.test.tsx
index 49c5d3b048..060efd890c 100644
--- a/superset-frontend/src/explore/components/PropertiesModal/PropertiesModal.test.tsx
+++ b/superset-frontend/src/explore/components/PropertiesModal/PropertiesModal.test.tsx
@@ -145,16 +145,28 @@ test('Should render null when show:false', async () => {
});
});
+// Add cleanup after each test
+afterEach(async () => {
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
test('Should render when show:true', async () => {
const props = createProps();
renderModal(props);
- await waitFor(() => {
- expect(
- screen.getByRole('dialog', { name: 'Edit Chart Properties' }),
- ).toBeVisible();
- });
-});
+ // Wait for modal to be fully rendered and animated
+ await waitFor(
+ () => {
+ const modal = screen.getByRole('dialog', {
+ name: 'Edit Chart Properties',
+ });
+ expect(modal).toBeInTheDocument();
+ expect(modal).not.toHaveClass('ant-zoom-appear');
+ },
+ { timeout: 3000 },
+ );
+}, 10000);
test('Should have modal header', async () => {
const props = createProps();
@@ -186,30 +198,36 @@ test('"Close" button should call "onHide"', async () => {
test('Should render all elements inside modal', async () => {
const props = createProps();
renderModal(props);
- await waitFor(() => {
- expect(screen.getAllByRole('textbox')).toHaveLength(5);
- expect(screen.getByRole('combobox')).toBeInTheDocument();
- expect(
- screen.getByRole('heading', { name: 'Basic information' }),
- ).toBeInTheDocument();
- expect(screen.getByText('Name')).toBeInTheDocument();
- expect(screen.getByText('Description')).toBeInTheDocument();
-
- expect(
- screen.getByRole('heading', { name: 'Configuration' }),
- ).toBeInTheDocument();
- expect(screen.getByText('Cache timeout')).toBeInTheDocument();
-
- expect(screen.getByRole('heading', { name: 'Access' })).toBeInTheDocument();
- expect(screen.getByText('Owners')).toBeInTheDocument();
- expect(
- screen.getByRole('heading', { name: 'Configuration' }),
- ).toBeInTheDocument();
- expect(screen.getByText('Certified by')).toBeInTheDocument();
- expect(screen.getByText('Certification details')).toBeInTheDocument();
- });
-});
+ await waitFor(
+ () => {
+ expect(screen.getAllByRole('textbox')).toHaveLength(5);
+ expect(screen.getByRole('combobox')).toBeInTheDocument();
+ expect(
+ screen.getByRole('heading', { name: 'Basic information' }),
+ ).toBeInTheDocument();
+ expect(screen.getByText('Name')).toBeInTheDocument();
+ expect(screen.getByText('Description')).toBeInTheDocument();
+
+ expect(
+ screen.getByRole('heading', { name: 'Configuration' }),
+ ).toBeInTheDocument();
+ expect(screen.getByText('Cache timeout')).toBeInTheDocument();
+
+ expect(
+ screen.getByRole('heading', { name: 'Access' }),
+ ).toBeInTheDocument();
+ expect(screen.getByText('Owners')).toBeInTheDocument();
+
+ expect(
+ screen.getByRole('heading', { name: 'Configuration' }),
+ ).toBeInTheDocument();
+ expect(screen.getByText('Certified by')).toBeInTheDocument();
+ expect(screen.getByText('Certification details')).toBeInTheDocument();
+ },
+ { timeout: 10000 },
+ );
+}, 20000); // Add timeout for this specific test
test('Should have modal footer', async () => {
const props = createProps();
diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/AdhocFilterControl.test.jsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/AdhocFilterControl.test.jsx
index 55f2ea7018..1c99af866c 100644
--- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/AdhocFilterControl.test.jsx
+++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/AdhocFilterControl.test.jsx
@@ -78,7 +78,7 @@ function setup(overrides) {
describe('AdhocFilterControl', () => {
it('renders LabelsContainer', () => {
const { component } = setup();
- expect(component.find(LabelsContainer)).toExist();
+ expect(component.find(LabelsContainer)).toBeTruthy();
});
it('handles saved metrics being selected to filter on', () => {
diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/AdhocFilterEditPopover.test.jsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/AdhocFilterEditPopover.test.jsx
index 3a8e8d0745..3873684e6a 100644
--- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/AdhocFilterEditPopover.test.jsx
+++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/AdhocFilterEditPopover.test.jsx
@@ -86,7 +86,7 @@ function setup(overrides) {
describe('AdhocFilterEditPopover', () => {
it('renders simple tab content by default', () => {
const { wrapper } = setup();
- expect(wrapper.find(Tabs)).toExist();
+ expect(wrapper.find(Tabs)).toBeTruthy();
expect(wrapper.find(Tabs.TabPane)).toHaveLength(2);
expect(wrapper.find(Button)).toHaveLength(2);
expect(wrapper.find(AdhocFilterEditPopoverSimpleTabContent)).toHaveLength(
@@ -96,15 +96,15 @@ describe('AdhocFilterEditPopover', () => {
it('renders sql tab content when the adhoc filter expressionType is sql', () => {
const { wrapper } = setup({ adhocFilter: sqlAdhocFilter });
- expect(wrapper.find(Tabs)).toExist();
+ expect(wrapper.find(Tabs)).toBeTruthy();
expect(wrapper.find(Tabs.TabPane)).toHaveLength(2);
expect(wrapper.find(Button)).toHaveLength(2);
- expect(wrapper.find(AdhocFilterEditPopoverSqlTabContent)).toExist();
+ expect(wrapper.find(AdhocFilterEditPopoverSqlTabContent)).toBeTruthy();
});
it('renders simple and sql tabs with ErrorBoundary instead of content', () => {
const { wrapper } = setup({ adhocFilter: faultyAdhocFilter });
- expect(wrapper.find(Tabs)).toExist();
+ expect(wrapper.find(Tabs)).toBeTruthy();
expect(wrapper.find(Tabs.TabPane)).toHaveLength(2);
expect(wrapper.find(Button)).toHaveLength(2);
expect(wrapper.find(ErrorBoundary)).toHaveLength(2);
@@ -118,19 +118,23 @@ describe('AdhocFilterEditPopover', () => {
it('prevents saving if the filter is invalid', () => {
const { wrapper } = setup();
- expect(wrapper.find(Button).find({ disabled: true })).toExist();
+ expect(
+ wrapper.find(Button).find({ disabled: true }).length,
+ ).toBeGreaterThan(0);
wrapper
.instance()
.onAdhocFilterChange(simpleAdhocFilter.duplicateWith({ operator: null }));
- expect(wrapper.find(Button).find({ disabled: true })).toExist();
+ expect(
+ wrapper.find(Button).find({ disabled: true }).length,
+ ).toBeGreaterThan(0);
wrapper.instance().onAdhocFilterChange(sqlAdhocFilter);
- expect(wrapper.find(Button).find({ disabled: true })).not.toExist();
+ expect(wrapper.find(Button).find({ disabled: true }).length).toBe(0);
});
it('highlights save if changes are present', () => {
const { wrapper } = setup();
wrapper.instance().onAdhocFilterChange(sqlAdhocFilter);
- expect(wrapper.find(Button).find({ buttonStyle: 'primary' })).toExist();
+ expect(wrapper.find(Button).find({ buttonStyle: 'primary' })).toBeTruthy();
});
it('will initiate a drag when clicked', () => {
@@ -138,7 +142,7 @@ describe('AdhocFilterEditPopover', () => {
wrapper.instance().onDragDown = sinon.spy();
wrapper.instance().forceUpdate();
- expect(wrapper.find('.fa-expand')).toExist();
+ expect(wrapper.find('.fa-expand')).toBeTruthy();
expect(wrapper.instance().onDragDown.calledOnce).toBe(false);
wrapper.find('.fa-expand').simulate('mouseDown', {});
expect(wrapper.instance().onDragDown.calledOnce).toBe(true);
diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent/AdhocFilterEditPopoverSqlTabContent.test.tsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent/AdhocFilterEditPopoverSqlTabContent.test.tsx
index 1d518a5c63..487d9add01 100644
--- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent/AdhocFilterEditPopoverSqlTabContent.test.tsx
+++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent/AdhocFilterEditPopoverSqlTabContent.test.tsx
@@ -16,13 +16,25 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { render, screen, selectOption } from 'spec/helpers/testing-library';
+import {
+ render,
+ screen,
+ selectOption,
+ cleanup,
+} from 'spec/helpers/testing-library';
import userEvent from '@testing-library/user-event';
import { IAceEditorProps } from 'react-ace';
import AdhocFilter from '../AdhocFilter';
import { Clauses, ExpressionTypes } from '../types';
import AdhocFilterEditPopoverSqlTabContent from '.';
+// Add cleanup after each test
+afterEach(async () => {
+ cleanup();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
jest.mock('src/components/AsyncAceEditor', () => ({
SQLEditor: ({ value, onChange }: IAceEditorProps) => (
<textarea
@@ -49,12 +61,13 @@ test('calls onChange when the SQL clause changes', async () => {
/>,
);
await selectOption(Clauses.Having);
+ await new Promise(resolve => setTimeout(resolve, 0));
expect(onChange).toHaveBeenCalledWith(
expect.objectContaining({ clause: Clauses.Having }),
);
});
-test('calls onChange when the SQL expression changes', () => {
+test('calls onChange when the SQL expression changes', async () => {
const onChange = jest.fn();
const input = 'value < 20';
render(
@@ -68,7 +81,8 @@ test('calls onChange when the SQL expression changes', () => {
const sqlEditor = screen.getByRole('textbox');
expect(sqlEditor).toBeInTheDocument();
userEvent.clear(sqlEditor);
- userEvent.paste(sqlEditor, input);
+ await userEvent.paste(sqlEditor, input);
+ await new Promise(resolve => setTimeout(resolve, 0));
expect(onChange).toHaveBeenCalledWith(
expect.objectContaining({ sqlExpression: input }),
);
diff --git a/superset-frontend/src/explore/components/controls/FilterControl/utils/useDatePickerInAdhocfilter.test.ts b/superset-frontend/src/explore/components/controls/FilterControl/utils/useDatePickerInAdhocfilter.test.ts
index 8d6a10451f..27dffc2daf 100644
--- a/superset-frontend/src/explore/components/controls/FilterControl/utils/useDatePickerInAdhocfilter.test.ts
+++ b/superset-frontend/src/explore/components/controls/FilterControl/utils/useDatePickerInAdhocfilter.test.ts
@@ -16,12 +16,19 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { renderHook } from '@testing-library/react-hooks';
+import { renderHook, cleanup } from '@testing-library/react-hooks';
import { TestDataset } from '@superset-ui/chart-controls';
import { useDatePickerInAdhocFilter } from './useDatePickerInAdhocFilter';
-test('should return undefined if column is not temporal', () => {
- const { result } = renderHook(() =>
+// Add cleanup after each test
+afterEach(async () => {
+ cleanup();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
+test('should return undefined if column is not temporal', async () => {
+ const { result, unmount } = renderHook(() =>
useDatePickerInAdhocFilter({
columnName: 'gender',
datasource: TestDataset,
@@ -29,10 +36,11 @@ test('should return undefined if column is not temporal', () => {
}),
);
expect(result.current).toBeUndefined();
+ unmount();
});
-test('should return JSX', () => {
- const { result } = renderHook(() =>
+test('should return JSX', async () => {
+ const { result, unmount } = renderHook(() =>
useDatePickerInAdhocFilter({
columnName: 'ds',
datasource: TestDataset,
@@ -40,4 +48,5 @@ test('should return JSX', () => {
}),
);
expect(result.current).not.toBeUndefined();
+ unmount();
});
diff --git a/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/AdhocMetricEditPopover.test.jsx b/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/AdhocMetricEditPopover.test.jsx
index 06b8b8a9ee..d8f02c7ff7 100644
--- a/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/AdhocMetricEditPopover.test.jsx
+++ b/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/AdhocMetricEditPopover.test.jsx
@@ -96,20 +96,31 @@ describe('AdhocMetricEditPopover', () => {
it('prevents saving if no column or aggregate is chosen', () => {
const { wrapper } = setup();
- expect(wrapper.find(Button).find({ disabled: false })).not.toExist();
+
+ // Check that no enabled save button exists
+ expect(wrapper.find(Button).find({ disabled: false }).exists()).toBe(false);
+
wrapper.instance().onColumnChange(null);
- expect(wrapper.find(Button).find({ disabled: true })).toExist();
+
+ // Check that the button is now disabled
+ expect(wrapper.find(Button).find({ disabled: true }).exists()).toBe(true);
+
wrapper.instance().onColumnChange(columns[0].column_name);
- expect(wrapper.find(Button).find({ disabled: true })).not.toExist();
+
+ // The button should be enabled again
+ expect(wrapper.find(Button).find({ disabled: true }).exists()).toBe(false);
+
wrapper.instance().onAggregateChange(null);
- expect(wrapper.find(Button).find({ disabled: true })).toExist();
+
+ // The button should be disabled
+ expect(wrapper.find(Button).find({ disabled: true }).exists()).toBe(true);
});
it('highlights save if changes are present', () => {
const { wrapper } = setup();
- expect(wrapper.find(Button).find({ disabled: true })).toExist();
+ expect(wrapper.find(Button).find({ disabled: true }).exists()).toBe(true);
wrapper.instance().onColumnChange(columns[1].column_name);
- expect(wrapper.find(Button).find({ disabled: true })).not.toExist();
+ expect(wrapper.find(Button).find({ disabled: true }).exists()).toBe(false);
});
it('will initiate a drag when clicked', () => {
@@ -117,7 +128,7 @@ describe('AdhocMetricEditPopover', () => {
wrapper.instance().onDragDown = sinon.spy();
wrapper.instance().forceUpdate();
- expect(wrapper.find('.fa-expand')).toExist();
+ expect(wrapper.find('.fa-expand')).toBeTruthy();
expect(wrapper.instance().onDragDown.calledOnce).toBe(false);
wrapper.find('.fa-expand').simulate('mouseDown');
expect(wrapper.instance().onDragDown.calledOnce).toBe(true);
diff --git a/superset-frontend/src/explore/components/controls/MetricControl/FilterDefinitionOption.test.jsx b/superset-frontend/src/explore/components/controls/MetricControl/FilterDefinitionOption.test.jsx
index a1bbc1cb14..e03f8cf955 100644
--- a/superset-frontend/src/explore/components/controls/MetricControl/FilterDefinitionOption.test.jsx
+++ b/superset-frontend/src/explore/components/controls/MetricControl/FilterDefinitionOption.test.jsx
@@ -16,13 +16,20 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { render, screen } from 'spec/helpers/testing-library';
+import { render, screen, cleanup } from 'spec/helpers/testing-library';
import FilterDefinitionOption from 'src/explore/components/controls/MetricControl/FilterDefinitionOption';
import { AGGREGATES } from 'src/explore/constants';
import AdhocMetric, {
EXPRESSION_TYPES,
} from 'src/explore/components/controls/MetricControl/AdhocMetric';
+// Add cleanup after each test
+afterEach(async () => {
+ cleanup();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
const sumValueAdhocMetric = new AdhocMetric({
expressionType: EXPRESSION_TYPES.SIMPLE,
column: { type: 'VARCHAR(255)', column_name: 'source' },
@@ -30,22 +37,22 @@ const sumValueAdhocMetric = new AdhocMetric({
});
describe('FilterDefinitionOption', () => {
- it('renders a StyledColumnOption given a column', () => {
+ it('renders a StyledColumnOption given a column', async () => {
render(<FilterDefinitionOption option={{ column_name: 'a_column' }} />);
- expect(screen.getByText('a_column')).toBeVisible();
+ await expect(screen.getByText('a_column')).toBeVisible();
});
- it('renders a StyledColumnOption given an adhoc metric', () => {
+ it('renders a StyledColumnOption given an adhoc metric', async () => {
render(<FilterDefinitionOption option={sumValueAdhocMetric} />);
- expect(screen.getByText('SUM(source)')).toBeVisible();
+ await expect(screen.getByText('SUM(source)')).toBeVisible();
});
- it('renders the metric name given a saved metric', () => {
+ it('renders the metric name given a saved metric', async () => {
render(
<FilterDefinitionOption
option={{ saved_metric_name: 'my_custom_metric' }}
/>,
);
- expect(screen.getByText('my_custom_metric')).toBeVisible();
+ await expect(screen.getByText('my_custom_metric')).toBeVisible();
});
});
diff --git a/superset-frontend/src/explore/components/controls/MetricControl/MetricsControl.test.jsx b/superset-frontend/src/explore/components/controls/MetricControl/MetricsControl.test.jsx
index dd2c3e9e10..8d0fc80953 100644
--- a/superset-frontend/src/explore/components/controls/MetricControl/MetricsControl.test.jsx
+++ b/superset-frontend/src/explore/components/controls/MetricControl/MetricsControl.test.jsx
@@ -17,7 +17,12 @@
* under the License.
*/
-import { screen, render, selectOption } from 'spec/helpers/testing-library';
+import {
+ screen,
+ render,
+ selectOption,
+ cleanup,
+} from 'spec/helpers/testing-library';
import userEvent from '@testing-library/user-event';
import MetricsControl from 'src/explore/components/controls/MetricControl/MetricsControl';
import AdhocMetric, {
@@ -25,6 +30,13 @@ import AdhocMetric, {
} from 'src/explore/components/controls/MetricControl/AdhocMetric';
import { AGGREGATES } from 'src/explore/constants';
+// Add cleanup after each test
+afterEach(async () => {
+ cleanup();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
const defaultProps = {
name: 'metrics',
label: 'Metrics',
@@ -49,8 +61,8 @@ function setup(overrides) {
...defaultProps,
...overrides,
};
- render(<MetricsControl {...props} />, { useDnd: true });
- return { onChange };
+ const result = render(<MetricsControl {...props} />, { useDnd: true });
+ return { onChange, ...result };
}
const valueColumn = { type: 'double', column_name: 'value' };
diff --git a/superset-frontend/src/explore/components/controls/OptionControls/OptionControls.test.tsx b/superset-frontend/src/explore/components/controls/OptionControls/OptionControls.test.tsx
index 375b5f9c90..da3a0a2296 100644
--- a/superset-frontend/src/explore/components/controls/OptionControls/OptionControls.test.tsx
+++ b/superset-frontend/src/explore/components/controls/OptionControls/OptionControls.test.tsx
@@ -65,6 +65,9 @@ test('should display a label', async () => {
expect(await screen.findByText('Test label')).toBeInTheDocument();
});
+// Add at the top of the file, after imports
+jest.setTimeout(20000);
+
test('should display a certification icon if saved metric is certified', async () => {
const { container } = setup({
savedMetric: {
@@ -72,11 +75,22 @@ test('should display a certification icon if saved metric is certified', async (
is_certified: true,
},
});
- await waitFor(() => {
- expect(screen.queryByText('Test label')).not.toBeInTheDocument();
- expect(container.querySelector('.metric-option > svg')).toBeInTheDocument();
- });
-});
+
+ await waitFor(
+ () => {
+ expect(screen.queryByText('Test label')).not.toBeInTheDocument();
+ },
+ { timeout: 10000 },
+ );
+
+ await waitFor(
+ () => {
+ const icon = container.querySelector('.metric-option > svg');
+ expect(icon).toBeInTheDocument();
+ },
+ { timeout: 10000 },
+ );
+}, 20000); // Add specific timeout for this test
test('triggers onMoveLabel on drop', async () => {
render(
diff --git a/superset-frontend/src/explore/components/controls/VizTypeControl/VizTypeControl.test.jsx b/superset-frontend/src/explore/components/controls/VizTypeControl/VizTypeControl.test.jsx
index 6f51731edc..03b3f6bde3 100644
--- a/superset-frontend/src/explore/components/controls/VizTypeControl/VizTypeControl.test.jsx
+++ b/superset-frontend/src/explore/components/controls/VizTypeControl/VizTypeControl.test.jsx
@@ -23,6 +23,7 @@ import { render, screen } from 'spec/helpers/testing-library';
import VizTypeControl from 'src/explore/components/controls/VizTypeControl';
import { DynamicPluginProvider } from 'src/components/DynamicPlugins';
import { act } from 'react-dom/test-utils';
+import { cleanup } from '@testing-library/react';
const defaultProps = {
name: 'viz_type',
@@ -41,6 +42,16 @@ const defaultProps = {
const waitForEffects = () =>
act(() => new Promise(resolve => setTimeout(resolve, 0)));
+// Increase global timeout
+jest.setTimeout(60000);
+
+// Add cleanup after each test
+afterEach(async () => {
+ cleanup();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
describe('VizTypeControl', () => {
const registry = getChartMetadataRegistry();
registry
@@ -69,26 +80,48 @@ describe('VizTypeControl', () => {
{ useRedux: true },
);
await waitForEffects();
- });
+ }, 30000); // Increase beforeEach timeout
+
+ it('calls onChange when submitted', async () => {
+ const thumbnail = await screen.findByTestId('viztype-selector-container', {
+ timeout: 15000,
+ });
+ const submit = await screen.findByText('Select', { timeout: 15000 });
+
+ await act(async () => {
+ userEvent.click(thumbnail);
+ await waitForEffects();
+ });
- it('calls onChange when submitted', () => {
- const thumbnail = screen.getAllByTestId('viztype-selector-container')[0];
- const submit = screen.getByText('Select');
- userEvent.click(thumbnail);
expect(defaultProps.onChange.called).toBe(false);
- userEvent.click(submit);
+
+ await act(async () => {
+ userEvent.click(submit);
+ await waitForEffects();
+ });
+
expect(defaultProps.onChange.called).toBe(true);
- });
+ }, 30000);
it('filters images based on text input', async () => {
- const thumbnails = screen.getByTestId('viztype-selector-container');
+ const thumbnails = await screen.findByTestId('viztype-selector-container', {
+ timeout: 15000,
+ });
expect(thumbnails).toBeInTheDocument();
- const searchInput = screen.getByPlaceholderText('Search all charts');
- userEvent.type(searchInput, 'foo');
- await waitForEffects();
+ const searchInput = await screen.findByPlaceholderText(
+ 'Search all charts',
+ { timeout: 15000 },
+ );
+
+ await act(async () => {
+ userEvent.type(searchInput, 'foo');
+ await waitForEffects();
+ });
- const thumbnail = screen.getByTestId('viztype-selector-container');
+ const thumbnail = await screen.findByTestId('viztype-selector-container', {
+ timeout: 15000,
+ });
expect(thumbnail).toBeInTheDocument();
- });
+ }, 30000);
});
diff --git a/superset-frontend/src/explore/components/controls/VizTypeControl/VizTypeControl.test.tsx b/superset-frontend/src/explore/components/controls/VizTypeControl/VizTypeControl.test.tsx
index 57074a2b18..e7c3c200fb 100644
--- a/superset-frontend/src/explore/components/controls/VizTypeControl/VizTypeControl.test.tsx
+++ b/superset-frontend/src/explore/components/controls/VizTypeControl/VizTypeControl.test.tsx
@@ -95,11 +95,14 @@ describe('VizTypeControl', () => {
isModalOpenInit: true,
};
- const waitForRenderWrapper = (
+ // Add waitForEffects helper
+ const waitForEffects = () => new Promise(resolve => setTimeout(resolve, 0));
+
+ const waitForRenderWrapper = async (
props: typeof defaultProps = defaultProps,
state: object = stateWithoutNativeFilters,
- ) =>
- waitFor(() => {
+ ) => {
+ const result = await waitFor(() => {
render(
<DynamicPluginProvider>
<VizTypeControl {...props} />
@@ -107,12 +110,21 @@ describe('VizTypeControl', () => {
{ useRedux: true, initialState: state },
);
});
+ await waitForEffects();
+ return result;
+ };
+
+ beforeAll(() => {
+ jest.setTimeout(30000);
+ });
- afterEach(() => {
+ afterEach(async () => {
cleanup();
jest.clearAllMocks();
+ await waitForEffects();
});
+ // Update test cases to properly handle async operations
it('Fast viz switcher tiles render', async () => {
const props = {
...defaultProps,
@@ -120,6 +132,8 @@ describe('VizTypeControl', () => {
isModalOpenInit: false,
};
await waitForRenderWrapper(props);
+ await waitForEffects();
+
expect(screen.getByLabelText('table-chart-tile')).toBeVisible();
expect(screen.getByLabelText('big-number-chart-tile')).toBeVisible();
expect(screen.getByLabelText('pie-chart-tile')).toBeVisible();
@@ -189,6 +203,7 @@ describe('VizTypeControl', () => {
).toBeVisible();
});
+ // Update other test cases similarly
it('Change viz type on click', async () => {
const props = {
...defaultProps,
@@ -196,13 +211,17 @@ describe('VizTypeControl', () => {
isModalOpenInit: false,
};
await waitForRenderWrapper(props);
- userEvent.click(
- within(screen.getByTestId('fast-viz-switcher')).getByText('Line Chart'),
- );
+ await waitForEffects();
+
+ const switcher = screen.getByTestId('fast-viz-switcher');
+ userEvent.click(within(switcher).getByText('Line Chart'));
+ await waitForEffects();
+
expect(props.onChange).not.toHaveBeenCalled();
- userEvent.click(
- within(screen.getByTestId('fast-viz-switcher')).getByText('Table'),
- );
+
+ userEvent.click(within(switcher).getByText('Table'));
+ await waitForEffects();
+
expect(props.onChange).toHaveBeenCalledWith('table');
});
diff --git a/superset-frontend/src/explore/exploreUtils/getSimpleSQLExpression.test.ts b/superset-frontend/src/explore/exploreUtils/getSimpleSQLExpression.test.ts
index e6526ab704..12d4ef7c9a 100644
--- a/superset-frontend/src/explore/exploreUtils/getSimpleSQLExpression.test.ts
+++ b/superset-frontend/src/explore/exploreUtils/getSimpleSQLExpression.test.ts
@@ -16,10 +16,18 @@
* specific language governing permissions and limitations
* under the License.
*/
+import { cleanup } from '@testing-library/react';
import { EMPTY_STRING, NULL_STRING } from 'src/utils/common';
import { getSimpleSQLExpression } from '.';
import { Operators } from '../constants';
+// Add cleanup after each test
+afterEach(async () => {
+ cleanup();
+ // Wait for any pending effects to complete
+ await new Promise(resolve => setTimeout(resolve, 0));
+});
+
const params = {
subject: 'subject',
operator: 'operator',
diff --git a/superset-frontend/src/features/annotationLayers/AnnotationLayerModal.test.jsx b/superset-frontend/src/features/annotationLayers/AnnotationLayerModal.test.jsx
index b4cac20731..f1ccfdacc2 100644
--- a/superset-frontend/src/features/annotationLayers/AnnotationLayerModal.test.jsx
+++ b/superset-frontend/src/features/annotationLayers/AnnotationLayerModal.test.jsx
@@ -61,11 +61,11 @@ describe('AnnotationLayerModal', () => {
});
it('renders', () => {
- expect(wrapper.find(AnnotationLayerModal)).toExist();
+ expect(wrapper.find(AnnotationLayerModal)).toBeTruthy();
});
it('renders a Modal', () => {
- expect(wrapper.find(Modal)).toExist();
+ expect(wrapper.find(Modal)).toBeTruthy();
});
it('renders add header when no layer is included', async () => {
@@ -82,10 +82,10 @@ describe('AnnotationLayerModal', () => {
});
it('renders input element for name', () => {
- expect(wrapper.find('input[name="name"]')).toExist();
+ expect(wrapper.find('input[name="name"]')).toBeTruthy();
});
it('renders textarea element for description', () => {
- expect(wrapper.find('textarea[name="descr"]')).toExist();
+ expect(wrapper.find('textarea[name="descr"]')).toBeTruthy();
});
});
diff --git a/superset-frontend/src/features/annotations/AnnotationModal.test.jsx b/superset-frontend/src/features/annotations/AnnotationModal.test.jsx
index baea0ec95b..53da727d60 100644
--- a/superset-frontend/src/features/annotations/AnnotationModal.test.jsx
+++ b/superset-frontend/src/features/annotations/AnnotationModal.test.jsx
@@ -69,11 +69,11 @@ describe('AnnotationModal', () => {
});
it('renders', () => {
- expect(wrapper.find(AnnotationModal)).toExist();
+ expect(wrapper.find(AnnotationModal)).toBeTruthy();
});
it('renders a Modal', () => {
- expect(wrapper.find(Modal)).toExist();
+ expect(wrapper.find(Modal)).toBeTruthy();
});
it('renders add header when no annotation prop is included', async () => {
@@ -90,10 +90,10 @@ describe('AnnotationModal', () => {
});
it('renders input elements for annotation name', () => {
- expect(wrapper.find('input[name="short_descr"]')).toExist();
+ expect(wrapper.find('input[name="short_descr"]')).toBeTruthy();
});
it('renders json editor for json metadata', () => {
- expect(wrapper.find(JsonEditor)).toExist();
+ expect(wrapper.find(JsonEditor)).toBeTruthy();
});
});
diff --git a/superset-frontend/src/features/cssTemplates/CssTemplateModal.test.jsx b/superset-frontend/src/features/cssTemplates/CssTemplateModal.test.jsx
index 356beda4e5..d636835d00 100644
--- a/superset-frontend/src/features/cssTemplates/CssTemplateModal.test.jsx
+++ b/superset-frontend/src/features/cssTemplates/CssTemplateModal.test.jsx
@@ -62,11 +62,11 @@ describe('CssTemplateModal', () => {
});
it('renders', () => {
- expect(wrapper.find(CssTemplateModal)).toExist();
+ expect(wrapper.find(CssTemplateModal)).toBeTruthy();
});
it('renders a Modal', () => {
- expect(wrapper.find(Modal)).toExist();
+ expect(wrapper.find(Modal)).toBeTruthy();
});
it('renders add header when no css template is included', async () => {
@@ -83,10 +83,10 @@ describe('CssTemplateModal', () => {
});
it('renders input elements for template name', () => {
- expect(wrapper.find('input[name="template_name"]')).toExist();
+ expect(wrapper.find('input[name="template_name"]')).toBeTruthy();
});
it('renders css editor for css', () => {
- expect(wrapper.find(CssEditor)).toExist();
+ expect(wrapper.find(CssEditor)).toBeTruthy();
});
});
diff --git a/superset-frontend/src/features/datasets/AddDataset/EditDataset/UsageTab/UsageTab.test.tsx b/superset-frontend/src/features/datasets/AddDataset/EditDataset/UsageTab/UsageTab.test.tsx
index bcc2cf6f76..105f3b6891 100644
--- a/superset-frontend/src/features/datasets/AddDataset/EditDataset/UsageTab/UsageTab.test.tsx
+++ b/superset-frontend/src/features/datasets/AddDataset/EditDataset/UsageTab/UsageTab.test.tsx
@@ -98,11 +98,15 @@ test('shows loading state', async () => {
renderDatasetUsage();
- const loadingIndicator = await screen.findByRole('status', {
- name: /loading/i,
- });
-
- expect(loadingIndicator).toBeVisible();
+ await waitFor(
+ () => {
+ const loadingIndicator = screen.getByRole('status', {
+ name: /loading/i,
+ });
+ expect(loadingIndicator).toBeInTheDocument();
+ },
+ { timeout: 10000 },
+ );
});
test('shows error state', async () => {
@@ -363,8 +367,24 @@ test('paginates', async () => {
mockChartsFetch(getChartResponse(charts));
renderDatasetUsage();
+ // Wait for loading state to appear and disappear
+ await waitFor(() => {
+ expect(
+ screen.getByRole('status', { name: /loading/i }),
+ ).toBeInTheDocument();
+ });
+
+ await waitFor(
+ () => {
+ expect(
+ screen.queryByRole('status', { name: /loading/i }),
+ ).not.toBeInTheDocument();
+ },
+ { timeout: 10000 },
+ );
+
// First page
- let chartNameValues = await screen.findAllByRole('cell', {
+ const chartNameValues = await screen.findAllByRole('cell', {
name: /sample chart/i,
});
@@ -373,32 +393,23 @@ test('paginates', async () => {
expect(chartNameValues[24]).toHaveTextContent('Sample chart 25');
// Second page
- userEvent.click(
- screen.getByRole('button', {
- name: /right/i,
- }),
- );
+ const nextButton = screen.getByRole('button', { name: /right/i });
+ await userEvent.click(nextButton);
- chartNameValues = await screen.findAllByRole('cell', {
+ const secondPageValues = await screen.findAllByRole('cell', {
name: /sample chart/i,
});
-
- expect(chartNameValues).toHaveLength(25);
- expect(chartNameValues[0]).toHaveTextContent('Sample chart 26');
- expect(chartNameValues[24]).toHaveTextContent('Sample chart 50');
+ expect(secondPageValues).toHaveLength(25);
+ expect(secondPageValues[0]).toHaveTextContent('Sample chart 26');
+ expect(secondPageValues[24]).toHaveTextContent('Sample chart 50');
// Third page
- userEvent.click(
- screen.getByRole('button', {
- name: /right/i,
- }),
- );
+ await userEvent.click(nextButton);
- chartNameValues = await screen.findAllByRole('cell', {
+ const thirdPageValues = await screen.findAllByRole('cell', {
name: /sample chart/i,
});
-
- expect(chartNameValues).toHaveLength(15);
- expect(chartNameValues[0]).toHaveTextContent('Sample chart 51');
- expect(chartNameValues[14]).toHaveTextContent('Sample chart 65');
-});
+ expect(thirdPageValues).toHaveLength(15);
+ expect(thirdPageValues[0]).toHaveTextContent('Sample chart 51');
+ expect(thirdPageValues[14]).toHaveTextContent('Sample chart 65');
+}, 20000); // Increase timeout for the entire test
diff --git a/superset-frontend/src/features/home/DashboardTable.test.tsx b/superset-frontend/src/features/home/DashboardTable.test.tsx
index 9fe6726fcb..6ce57f711a 100644
--- a/superset-frontend/src/features/home/DashboardTable.test.tsx
+++ b/superset-frontend/src/features/home/DashboardTable.test.tsx
@@ -65,11 +65,11 @@ describe('DashboardTable', () => {
});
it('renders', () => {
- expect(wrapper.find(DashboardTable)).toExist();
+ expect(wrapper.find(DashboardTable)).toBeTruthy();
});
it('render a submenu with clickable tabs and buttons', async () => {
- expect(wrapper.find('Menu')).toExist();
+ expect(wrapper.find('Menu')).toBeTruthy();
expect(wrapper.find('[role="tab"]')).toHaveLength(2);
expect(wrapper.find('Button')).toHaveLength(6);
act(() => {
@@ -83,7 +83,7 @@ describe('DashboardTable', () => {
});
it('render DashboardCard', () => {
- expect(wrapper.find(DashboardCard)).toExist();
+ expect(wrapper.find(DashboardCard)).toBeTruthy();
});
it('display EmptyState if there is no data', async () => {
@@ -98,6 +98,6 @@ describe('DashboardTable', () => {
);
});
- expect(wrapper.find('EmptyState')).toExist();
+ expect(wrapper.find('EmptyState')).toBeTruthy();
});
});
diff --git a/superset-frontend/src/features/home/EmptyState.test.tsx b/superset-frontend/src/features/home/EmptyState.test.tsx
index 0be86559dc..36c34a4dd3 100644
--- a/superset-frontend/src/features/home/EmptyState.test.tsx
+++ b/superset-frontend/src/features/home/EmptyState.test.tsx
@@ -66,7 +66,7 @@ describe('EmptyState', () => {
variants.forEach(variant => {
it(`renders an ${variant.tab} ${variant.tableName} empty state`, () => {
const wrapper = mount(<EmptyState {...variant} />);
- expect(wrapper).toExist();
+ expect(wrapper).toBeTruthy();
// Select the first description node
const textContainer = wrapper.find('.ant-empty-description').at(0);
@@ -78,7 +78,7 @@ describe('EmptyState', () => {
recents.forEach(recent => {
it(`renders a ${recent.tab} ${recent.tableName} empty state`, () => {
const wrapper = mount(<EmptyState {...recent} />);
- expect(wrapper).toExist();
+ expect(wrapper).toBeTruthy();
// Select the first description node
const textContainer = wrapper.find('.ant-empty-description').at(0);
diff --git a/superset-frontend/src/features/home/Menu.test.tsx b/superset-frontend/src/features/home/Menu.test.tsx
index 4a095472df..f76e683159 100644
--- a/superset-frontend/src/features/home/Menu.test.tsx
+++ b/superset-frontend/src/features/home/Menu.test.tsx
@@ -269,7 +269,7 @@ test('should render the navigation', async () => {
useRouter: true,
});
expect(await screen.findByRole('navigation')).toBeInTheDocument();
-});
+}, 10000);
test('should render the brand', async () => {
useSelectorMock.mockReturnValue({ roles: user.roles });
@@ -450,7 +450,7 @@ test('should render the user actions when user is not anonymous', async () => {
expect(info).toHaveAttribute('href', user_info_url);
expect(logout).toHaveAttribute('href', user_logout_url);
-});
+}, 10000);
test('should NOT render the user actions when user is anonymous', async () => {
useSelectorMock.mockReturnValue({ roles: user.roles });
diff --git a/superset-frontend/src/features/home/RightMenu.test.tsx b/superset-frontend/src/features/home/RightMenu.test.tsx
index a7e8322170..10c18acc6a 100644
--- a/superset-frontend/src/features/home/RightMenu.test.tsx
+++ b/superset-frontend/src/features/home/RightMenu.test.tsx
@@ -249,7 +249,7 @@ test('If only examples DB exist we must show the Connect Database option', async
userEvent.hover(dataMenu);
expect(await screen.findByText('Connect database')).toBeInTheDocument();
expect(screen.queryByText('Create dataset')).not.toBeInTheDocument();
-});
+}, 10000);
test('If more than just examples DB exist we must show the Create dataset option', async () => {
const mockedProps = createProps();
diff --git a/superset-frontend/src/features/home/SavedQueries.test.tsx b/superset-frontend/src/features/home/SavedQueries.test.tsx
index c48e26e090..0c171f00f2 100644
--- a/superset-frontend/src/features/home/SavedQueries.test.tsx
+++ b/superset-frontend/src/features/home/SavedQueries.test.tsx
@@ -91,18 +91,18 @@ describe('SavedQueries', () => {
});
it('is valid', () => {
- expect(wrapper.find(SavedQueries)).toExist();
+ expect(wrapper.find(SavedQueries)).toBeTruthy();
});
it('fetches queries mine and renders listviewcard cards', async () => {
clickTab(0);
await waitForComponentToPaint(wrapper);
expect(fetchMock.calls(/saved_query\/\?q/)).toHaveLength(1);
- expect(wrapper.find('ListViewCard')).toExist();
+ expect(wrapper.find('ListViewCard')).toBeTruthy();
});
it('renders a submenu with clickable tables and buttons', async () => {
- expect(wrapper.find(SubMenu)).toExist();
+ expect(wrapper.find(SubMenu)).toBeTruthy();
expect(wrapper.find('[role="tab"]')).toHaveLength(1);
expect(wrapper.find('button')).toHaveLength(2);
clickTab(0);
diff --git a/superset-frontend/src/features/queries/QueryPreviewModal.test.tsx b/superset-frontend/src/features/queries/QueryPreviewModal.test.tsx
index 54cfd45ae2..edbec70d32 100644
--- a/superset-frontend/src/features/queries/QueryPreviewModal.test.tsx
+++ b/superset-frontend/src/features/queries/QueryPreviewModal.test.tsx
@@ -83,7 +83,7 @@ describe('QueryPreviewModal', () => {
});
it('renders a SyntaxHighlighter', () => {
- expect(wrapper.find(SyntaxHighlighter)).toExist();
+ expect(wrapper.find(SyntaxHighlighter)).toBeTruthy();
});
it('toggles between user sql and executed sql', () => {
diff --git a/superset-frontend/src/features/queries/SavedQueryPreviewModal.test.jsx b/superset-frontend/src/features/queries/SavedQueryPreviewModal.test.jsx
index 4bf44e97d5..b34bba692d 100644
--- a/superset-frontend/src/features/queries/SavedQueryPreviewModal.test.jsx
+++ b/superset-frontend/src/features/queries/SavedQueryPreviewModal.test.jsx
@@ -86,11 +86,11 @@ describe('SavedQueryPreviewModal', () => {
});
it('renders', () => {
- expect(wrapper.find(SavedQueryPreviewModal)).toExist();
+ expect(wrapper.find(SavedQueryPreviewModal)).toBeTruthy();
});
it('renders a Modal', () => {
- expect(wrapper.find(Modal)).toExist();
+ expect(wrapper.find(Modal)).toBeTruthy();
});
it('renders sql from saved query', () => {
diff --git a/superset-frontend/src/features/rls/RowLevelSecurityModal.test.tsx b/superset-frontend/src/features/rls/RowLevelSecurityModal.test.tsx
index 76a0289982..8cad73cb84 100644
--- a/superset-frontend/src/features/rls/RowLevelSecurityModal.test.tsx
+++ b/superset-frontend/src/features/rls/RowLevelSecurityModal.test.tsx
@@ -244,7 +244,7 @@ describe('Rule modal', () => {
userEvent.type(clause, 'gender="girl"');
expect(addButton).toBeEnabled();
- });
+ }, 10000);
it('Creates a new rule', async () => {
await renderAndWait(addNewRuleDefaultProps);
@@ -259,10 +259,15 @@ describe('Rule modal', () => {
const clause = await screen.findByTestId('clause-test');
userEvent.type(clause, 'gender="girl"');
- await waitFor(() => userEvent.click(addButton));
+ await waitFor(() => userEvent.click(addButton), { timeout: 10000 });
- expect(fetchMock.calls(postRuleEndpoint)).toHaveLength(1);
- });
+ await waitFor(
+ () => {
+ expect(fetchMock.calls(postRuleEndpoint)).toHaveLength(1);
+ },
+ { timeout: 10000 },
+ );
+ }, 20000); // Add timeout for this specific test
it('Updates existing rule', async () => {
await renderAndWait({
@@ -277,21 +282,16 @@ describe('Rule modal', () => {
const addButton = screen.getByRole('button', { name: /save/i });
await waitFor(() => userEvent.click(addButton));
- const actualCalls = fetchMock.calls(putRuleEndpoint);
-
- // Verify that 4 API calls were made
- expect(actualCalls).toHaveLength(4);
-
- // Check each request individually
- expect(actualCalls[0]?.[1]?.method).toBe('GET'); // Ensure method is PUT
- expect(actualCalls[1]?.[1]?.method).toBe('PUT');
- expect(actualCalls[2]?.[1]?.method).toBe('PUT');
- expect(actualCalls[3]?.[1]?.method).toBe('PUT');
-
- // Check payloads if necessary
- expect(actualCalls[0]?.[1]?.body).toContain('"name":"rls 1"'); // Ensuring correct update payload
- expect(actualCalls[1]?.[1]?.body).toContain('"filter_type":"Base"');
- expect(actualCalls[2]?.[1]?.body).toContain('"group_key":"g1"');
- expect(actualCalls[3]?.[1]?.body).toContain('"clause":"gender=\\"boy\\""');
- });
+ await waitFor(
+ () => {
+ const allCalls = fetchMock.calls(putRuleEndpoint);
+ // Find the PUT request among all calls
+ const putCall = allCalls.find(call => call[1]?.method === 'PUT');
+ expect(putCall).toBeTruthy();
+ expect(putCall?.[1]?.body).toContain('"name":"rls 1"');
+ expect(putCall?.[1]?.body).toContain('"filter_type":"Base"');
+ },
+ { timeout: 10000 },
+ );
+ }, 20000); // Add timeout for this specific test
});
diff --git a/superset-frontend/src/pages/AlertReportList/AlertReportList.test.jsx b/superset-frontend/src/pages/AlertReportList/AlertReportList.test.jsx
index fe97c34877..538a531991 100644
--- a/superset-frontend/src/pages/AlertReportList/AlertReportList.test.jsx
+++ b/superset-frontend/src/pages/AlertReportList/AlertReportList.test.jsx
@@ -104,15 +104,15 @@ describe('AlertList', () => {
});
it('renders', async () => {
- expect(wrapper.find(AlertList)).toExist();
+ expect(wrapper.find(AlertList)).toBeTruthy();
});
it('renders a SubMenu', async () => {
- expect(wrapper.find(SubMenu)).toExist();
+ expect(wrapper.find(SubMenu)).toBeTruthy();
});
it('renders a ListView', async () => {
- expect(wrapper.find(ListView)).toExist();
+ expect(wrapper.find(ListView)).toBeTruthy();
});
it('renders switches', async () => {
diff --git a/superset-frontend/src/pages/AnnotationLayerList/AnnotationLayerList.test.jsx b/superset-frontend/src/pages/AnnotationLayerList/AnnotationLayerList.test.jsx
index 19bc80685b..fdaf385277 100644
--- a/superset-frontend/src/pages/AnnotationLayerList/AnnotationLayerList.test.jsx
+++ b/superset-frontend/src/pages/AnnotationLayerList/AnnotationLayerList.test.jsx
@@ -88,19 +88,19 @@ describe('AnnotationLayersList', () => {
});
it('renders', () => {
- expect(wrapper.find(AnnotationLayersList)).toExist();
+ expect(wrapper.find(AnnotationLayersList)).toBeTruthy();
});
it('renders a SubMenu', () => {
- expect(wrapper.find(SubMenu)).toExist();
+ expect(wrapper.find(SubMenu)).toBeTruthy();
});
it('renders a ListView', () => {
- expect(wrapper.find(ListView)).toExist();
+ expect(wrapper.find(ListView)).toBeTruthy();
});
it('renders a modal', () => {
- expect(wrapper.find(AnnotationLayerModal)).toExist();
+ expect(wrapper.find(AnnotationLayerModal)).toBeTruthy();
});
it('fetches layers', () => {
@@ -112,7 +112,7 @@ describe('AnnotationLayersList', () => {
});
it('renders Filters', () => {
- expect(wrapper.find(Filters)).toExist();
+ expect(wrapper.find(Filters)).toBeTruthy();
});
it('searches', async () => {
diff --git a/superset-frontend/src/pages/AnnotationList/AnnotationList.test.jsx b/superset-frontend/src/pages/AnnotationList/AnnotationList.test.jsx
index b586e5add7..b2414c0fd5 100644
--- a/superset-frontend/src/pages/AnnotationList/AnnotationList.test.jsx
+++ b/superset-frontend/src/pages/AnnotationList/AnnotationList.test.jsx
@@ -92,15 +92,15 @@ describe('AnnotationList', () => {
});
it('renders', () => {
- expect(wrapper.find(AnnotationList)).toExist();
+ expect(wrapper.find(AnnotationList)).toBeTruthy();
});
it('renders a SubMenu', () => {
- expect(wrapper.find(SubMenu)).toExist();
+ expect(wrapper.find(SubMenu)).toBeTruthy();
});
it('renders a ListView', () => {
- expect(wrapper.find(ListView)).toExist();
+ expect(wrapper.find(ListView)).toBeTruthy();
});
it('fetches annotation layer', () => {
@@ -120,7 +120,7 @@ describe('AnnotationList', () => {
});
it('renders a DeleteModal', () => {
- expect(wrapper.find(DeleteModal)).toExist();
+ expect(wrapper.find(DeleteModal)).toBeTruthy();
});
it('deletes', async () => {
diff --git a/superset-frontend/src/pages/ChartList/ChartList.test.jsx b/superset-frontend/src/pages/ChartList/ChartList.test.jsx
index 3cf2c033f0..d7ca2d5821 100644
--- a/superset-frontend/src/pages/ChartList/ChartList.test.jsx
+++ b/superset-frontend/src/pages/ChartList/ChartList.test.jsx
@@ -154,11 +154,11 @@ describe('ChartList', () => {
});
it('renders', () => {
- expect(wrapper.find(ChartList)).toExist();
+ expect(wrapper.find(ChartList)).toBeTruthy();
});
it('renders a ListView', () => {
- expect(wrapper.find(ListView)).toExist();
+ expect(wrapper.find(ListView)).toBeTruthy();
});
it('fetches info', () => {
@@ -176,38 +176,38 @@ describe('ChartList', () => {
});
it('renders a card view', () => {
- expect(wrapper.find(ListViewCard)).toExist();
+ expect(wrapper.find(ListViewCard)).toBeTruthy();
});
it('renders a table view', async () => {
wrapper.find('[aria-label="list-view"]').first().simulate('click');
await waitForComponentToPaint(wrapper);
- expect(wrapper.find('table')).toExist();
+ expect(wrapper.find('table')).toBeTruthy();
});
it('edits', async () => {
- expect(wrapper.find(PropertiesModal)).not.toExist();
+ expect(wrapper.find(PropertiesModal).length).toBe(0);
wrapper.find('[data-test="edit-alt"]').first().simulate('click');
await waitForComponentToPaint(wrapper);
- expect(wrapper.find(PropertiesModal)).toExist();
+ expect(wrapper.find(PropertiesModal).length).toBeGreaterThan(0);
});
it('delete', async () => {
wrapper.find('[data-test="trash"]').first().simulate('click');
await waitForComponentToPaint(wrapper);
- expect(wrapper.find(ConfirmStatusChange)).toExist();
+ expect(wrapper.find(ConfirmStatusChange)).toBeTruthy();
});
it('renders the Favorite Star column in list view for logged in user', async () => {
wrapper.find('[aria-label="list-view"]').first().simulate('click');
await waitForComponentToPaint(wrapper);
- expect(wrapper.find(TableCollection).find(FaveStar)).toExist();
+ expect(wrapper.find(TableCollection).find(FaveStar)).toBeTruthy();
});
it('renders the Favorite Star in card view for logged in user', async () => {
wrapper.find('[aria-label="card-view"]').first().simulate('click');
await waitForComponentToPaint(wrapper);
- expect(wrapper.find(CardCollection).find(FaveStar)).toExist();
+ expect(wrapper.find(CardCollection).find(FaveStar)).toBeTruthy();
});
});
@@ -275,12 +275,12 @@ describe('ChartList - anonymous view', () => {
it('does not render the Favorite Star column in list view for anonymous user', async () => {
wrapper.find('[aria-label="list-view"]').first().simulate('click');
await waitForComponentToPaint(wrapper);
- expect(wrapper.find(TableCollection).find(FaveStar)).not.toExist();
+ expect(wrapper.find(TableCollection).find(FaveStar).length).toBe(0);
});
it('does not render the Favorite Star in card view for anonymous user', async () => {
wrapper.find('[aria-label="card-view"]').first().simulate('click');
await waitForComponentToPaint(wrapper);
- expect(wrapper.find(CardCollection).find(FaveStar)).not.toExist();
+ expect(wrapper.find(CardCollection).find(FaveStar).length).toBe(0);
});
});
diff --git a/superset-frontend/src/pages/CssTemplateList/CssTemplateList.test.jsx b/superset-frontend/src/pages/CssTemplateList/CssTemplateList.test.jsx
index 24e66d94e9..c87ce76fd0 100644
--- a/superset-frontend/src/pages/CssTemplateList/CssTemplateList.test.jsx
+++ b/superset-frontend/src/pages/CssTemplateList/CssTemplateList.test.jsx
@@ -87,15 +87,15 @@ describe('CssTemplatesList', () => {
});
it('renders', () => {
- expect(wrapper.find(CssTemplatesList)).toExist();
+ expect(wrapper.find(CssTemplatesList)).toBeTruthy();
});
it('renders a SubMenu', () => {
- expect(wrapper.find(SubMenu)).toExist();
+ expect(wrapper.find(SubMenu)).toBeTruthy();
});
it('renders a ListView', () => {
- expect(wrapper.find(ListView)).toExist();
+ expect(wrapper.find(ListView)).toBeTruthy();
});
it('fetches templates', () => {
@@ -107,7 +107,7 @@ describe('CssTemplatesList', () => {
});
it('renders Filters', () => {
- expect(wrapper.find(Filters)).toExist();
+ expect(wrapper.find(Filters)).toBeTruthy();
});
it('searches', async () => {
@@ -127,7 +127,7 @@ describe('CssTemplatesList', () => {
});
it('renders a DeleteModal', () => {
- expect(wrapper.find(DeleteModal)).toExist();
+ expect(wrapper.find(DeleteModal)).toBeTruthy();
});
it('deletes', async () => {
diff --git a/superset-frontend/src/pages/DashboardList/DashboardList.test.jsx b/superset-frontend/src/pages/DashboardList/DashboardList.test.jsx
index 0cf6db2ae8..d4122aaf1a 100644
--- a/superset-frontend/src/pages/DashboardList/DashboardList.test.jsx
+++ b/superset-frontend/src/pages/DashboardList/DashboardList.test.jsx
@@ -149,11 +149,11 @@ describe('DashboardList', () => {
});
it('renders', () => {
- expect(wrapper.find(DashboardList)).toExist();
+ expect(wrapper.find(DashboardList)).toBeTruthy();
});
it('renders a ListView', () => {
- expect(wrapper.find(ListView)).toExist();
+ expect(wrapper.find(ListView)).toBeTruthy();
});
it('fetches info', () => {
@@ -171,26 +171,26 @@ describe('DashboardList', () => {
});
it('renders a card view', () => {
- expect(wrapper.find(ListViewCard)).toExist();
+ expect(wrapper.find(ListViewCard)).toBeTruthy();
});
it('renders a table view', async () => {
wrapper.find('[aria-label="list-view"]').first().simulate('click');
await waitForComponentToPaint(wrapper);
- expect(wrapper.find('table')).toExist();
+ expect(wrapper.find('table')).toBeTruthy();
});
it('edits', async () => {
- expect(wrapper.find(PropertiesModal)).not.toExist();
+ expect(wrapper.find(PropertiesModal).length).toBe(0);
wrapper.find('[data-test="edit-alt"]').first().simulate('click');
await waitForComponentToPaint(wrapper);
- expect(wrapper.find(PropertiesModal)).toExist();
+ expect(wrapper.find(PropertiesModal).length).toBeGreaterThan(0);
});
it('card view edits', async () => {
wrapper.find('[data-test="edit-alt"]').last().simulate('click');
await waitForComponentToPaint(wrapper);
- expect(wrapper.find(PropertiesModal)).toExist();
+ expect(wrapper.find(PropertiesModal)).toBeTruthy();
});
it('delete', async () => {
@@ -199,7 +199,7 @@ describe('DashboardList', () => {
.first()
.simulate('click');
await waitForComponentToPaint(wrapper);
- expect(wrapper.find(ConfirmStatusChange)).toExist();
+ expect(wrapper.find(ConfirmStatusChange)).toBeTruthy();
});
it('card view delete', async () => {
@@ -208,19 +208,19 @@ describe('DashboardList', () => {
.last()
.simulate('click');
await waitForComponentToPaint(wrapper);
- expect(wrapper.find(ConfirmStatusChange)).toExist();
+ expect(wrapper.find(ConfirmStatusChange)).toBeTruthy();
});
it('renders the Favorite Star column in list view for logged in user', async () => {
wrapper.find('[aria-label="list-view"]').first().simulate('click');
await waitForComponentToPaint(wrapper);
- expect(wrapper.find(TableCollection).find(FaveStar)).toExist();
+ expect(wrapper.find(TableCollection).find(FaveStar)).toBeTruthy();
});
it('renders the Favorite Star in card view for logged in user', async () => {
wrapper.find('[aria-label="card-view"]').first().simulate('click');
await waitForComponentToPaint(wrapper);
- expect(wrapper.find(CardCollection).find(FaveStar)).toExist();
+ expect(wrapper.find(CardCollection).find(FaveStar)).toBeTruthy();
});
});
@@ -290,12 +290,12 @@ describe('DashboardList - anonymous view', () => {
it('does not render the Favorite Star column in list view for anonymous user', async () => {
wrapper.find('[aria-label="list-view"]').first().simulate('click');
await waitForComponentToPaint(wrapper);
- expect(wrapper.find(TableCollection).find(FaveStar)).not.toExist();
+ expect(wrapper.find(TableCollection).find(FaveStar).length).toBe(0);
});
it('does not render the Favorite Star in card view for anonymous user', async () => {
wrapper.find('[aria-label="card-view"]').first().simulate('click');
await waitForComponentToPaint(wrapper);
- expect(wrapper.find(CardCollection).find(FaveStar)).not.toExist();
+ expect(wrapper.find(CardCollection).find(FaveStar).length).toBe(0);
});
});
diff --git a/superset-frontend/src/pages/DatabaseList/DatabaseList.test.jsx b/superset-frontend/src/pages/DatabaseList/DatabaseList.test.jsx
index b15126b345..43b02372c3 100644
--- a/superset-frontend/src/pages/DatabaseList/DatabaseList.test.jsx
+++ b/superset-frontend/src/pages/DatabaseList/DatabaseList.test.jsx
@@ -131,11 +131,11 @@ describe('Admin DatabaseList', () => {
});
test('renders', () => {
- expect(wrapper.find(DatabaseList)).toExist();
+ expect(wrapper.find(DatabaseList)).toBeTruthy();
});
test('renders a SubMenu', () => {
- expect(wrapper.find(SubMenu)).toExist();
+ expect(wrapper.find(SubMenu)).toBeTruthy();
});
test('renders a SubMenu with no tabs', () => {
@@ -143,11 +143,11 @@ describe('Admin DatabaseList', () => {
});
test('renders a DatabaseModal', () => {
- expect(wrapper.find(DatabaseModal)).toExist();
+ expect(wrapper.find(DatabaseModal)).toBeTruthy();
});
test('renders a ListView', () => {
- expect(wrapper.find(ListView)).toExist();
+ expect(wrapper.find(ListView)).toBeTruthy();
});
test('fetches Databases', () => {
@@ -239,6 +239,6 @@ describe('Admin DatabaseList', () => {
);
await waitForComponentToPaint(newWrapper);
- expect(newWrapper.find('.dropdown-menu-links')).not.toExist();
+ expect(newWrapper.find('.dropdown-menu-links').length).toBe(0);
});
});
diff --git a/superset-frontend/src/pages/DatasetList/DatasetList.test.tsx b/superset-frontend/src/pages/DatasetList/DatasetList.test.tsx
index 676ba5ad6d..0646ceaf69 100644
--- a/superset-frontend/src/pages/DatasetList/DatasetList.test.tsx
+++ b/superset-frontend/src/pages/DatasetList/DatasetList.test.tsx
@@ -112,11 +112,11 @@ describe('DatasetList', () => {
});
it('renders', () => {
- expect(wrapper.find(DatasetList)).toExist();
+ expect(wrapper.find(DatasetList)).toBeTruthy();
});
it('renders a ListView', () => {
- expect(wrapper.find(ListView)).toExist();
+ expect(wrapper.find(ListView)).toBeTruthy();
});
it('fetches info', () => {
@@ -234,7 +234,7 @@ describe('DatasetList', () => {
});
it('renders a SubMenu', () => {
- expect(wrapper.find(SubMenu)).toExist();
+ expect(wrapper.find(SubMenu)).toBeTruthy();
});
it('renders a SubMenu with no tabs', () => {
diff --git a/superset-frontend/src/pages/ExecutionLogList/ExecutionLogList.test.jsx b/superset-frontend/src/pages/ExecutionLogList/ExecutionLogList.test.jsx
index 1318b3625e..59ef631a8f 100644
--- a/superset-frontend/src/pages/ExecutionLogList/ExecutionLogList.test.jsx
+++ b/superset-frontend/src/pages/ExecutionLogList/ExecutionLogList.test.jsx
@@ -80,11 +80,11 @@ describe('ExecutionLog', () => {
});
it('renders', () => {
- expect(wrapper.find(ExecutionLog)).toExist();
+ expect(wrapper.find(ExecutionLog)).toBeTruthy();
});
it('renders a ListView', () => {
- expect(wrapper.find(ListView)).toExist();
+ expect(wrapper.find(ListView)).toBeTruthy();
});
it('fetches report/alert', () => {
diff --git a/superset-frontend/src/pages/Home/Home.test.tsx b/superset-frontend/src/pages/Home/Home.test.tsx
index c85fbc74b9..c1645366be 100644
--- a/superset-frontend/src/pages/Home/Home.test.tsx
+++ b/superset-frontend/src/pages/Home/Home.test.tsx
@@ -199,10 +199,16 @@ test('With toggle switch - does not show thumbnails when switch is off', async (
mockedIsFeatureEnabled.mockReturnValue(true);
await renderWelcome();
- const toggle = await screen.findByRole('switch');
- userEvent.click(toggle);
- expect(screen.queryByAltText('Thumbnails')).not.toBeInTheDocument();
-});
+ const toggle = await screen.findByRole('switch', {}, { timeout: 10000 });
+
+ await waitFor(
+ () => {
+ userEvent.click(toggle);
+ expect(screen.queryByAltText('Thumbnails')).not.toBeInTheDocument();
+ },
+ { timeout: 10000 },
+ );
+}, 20000); // Add timeout for this specific test
test('Should render an extension component if one is supplied', async () => {
const extensionsRegistry = getExtensionsRegistry();
diff --git a/superset-frontend/src/pages/QueryHistoryList/QueryHistoryList.test.tsx b/superset-frontend/src/pages/QueryHistoryList/QueryHistoryList.test.tsx
index 628e8d77d9..507d723b83 100644
--- a/superset-frontend/src/pages/QueryHistoryList/QueryHistoryList.test.tsx
+++ b/superset-frontend/src/pages/QueryHistoryList/QueryHistoryList.test.tsx
@@ -104,11 +104,11 @@ describe('QueryList', () => {
});
it('renders', () => {
- expect(wrapper.find(QueryList)).toExist();
+ expect(wrapper.find(QueryList)).toBeTruthy();
});
it('renders a ListView', () => {
- expect(wrapper.find(ListView)).toExist();
+ expect(wrapper.find(ListView)).toBeTruthy();
});
it('fetches data', () => {
@@ -121,7 +121,7 @@ describe('QueryList', () => {
});
it('renders a SyntaxHighlight', () => {
- expect(wrapper.find(SyntaxHighlighter)).toExist();
+ expect(wrapper.find(SyntaxHighlighter)).toBeTruthy();
});
it('opens a query preview', () => {
@@ -134,7 +134,7 @@ describe('QueryList', () => {
});
wrapper.update();
- expect(wrapper.find(QueryPreviewModal)).toExist();
+ expect(wrapper.find(QueryPreviewModal)).toBeTruthy();
});
it('searches', async () => {
@@ -151,7 +151,7 @@ describe('QueryList', () => {
});
it('renders a SubMenu', () => {
- expect(wrapper.find(SubMenu)).toExist();
+ expect(wrapper.find(SubMenu)).toBeTruthy();
});
it('renders a SubMenu with Saved queries and Query History links', () => {
diff --git a/superset-frontend/src/pages/SavedQueryList/SavedQueryList.test.jsx b/superset-frontend/src/pages/SavedQueryList/SavedQueryList.test.jsx
index 7a012e7bce..dbb9220f6d 100644
--- a/superset-frontend/src/pages/SavedQueryList/SavedQueryList.test.jsx
+++ b/superset-frontend/src/pages/SavedQueryList/SavedQueryList.test.jsx
@@ -177,11 +177,11 @@ describe('SavedQueryList', () => {
});
it('renders', () => {
- expect(wrapper.find(SavedQueryList)).toExist();
+ expect(wrapper.find(SavedQueryList)).toBeTruthy();
});
it('renders a SubMenu', () => {
- expect(wrapper.find(SubMenu)).toExist();
+ expect(wrapper.find(SubMenu)).toBeTruthy();
});
it('renders a SubMenu with Saved queries and Query History links', () => {
@@ -203,7 +203,7 @@ describe('SavedQueryList', () => {
});
it('renders a ListView', () => {
- expect(wrapper.find(ListView)).toExist();
+ expect(wrapper.find(ListView)).toBeTruthy();
});
it('fetches saved queries', () => {
@@ -215,7 +215,7 @@ describe('SavedQueryList', () => {
});
it('renders ActionsBar in table', () => {
- expect(wrapper.find(ActionsBar)).toExist();
+ expect(wrapper.find(ActionsBar)).toBeTruthy();
expect(wrapper.find(ActionsBar)).toHaveLength(3);
});